System: Windows 7 32bit
Language: C++
I have tried to access register HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\Scsi\Scsi Port 0
, key Driver
(type REG_SZ
) — no problem.
The same for reading from HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM
, all keys (types REG_SZ
) got slashes, for example DeviceSerial0
.
While reading such keys it always returns 2 (no such file) with following example code:
HKEY hKey = 0;
DWORD dwType = REG_SZ;
char buf[255] = {0};
DWORD dwBufSize = sizeof(buf);
if( RegOpenKeyEx( HKEY_LOCAL_MACHINE, TEXT("HARDWARE\DEVICEMAP\SERIALCOMM"), 0, KEY_QUERY_VALUE, &hKey ) == ERROR_SUCCESS )
{
auto ret = RegQueryValueEx( hKey, TEXT("DeviceSerial0"), 0, &dwType, (LPBYTE)buf, &dwBufSize );
// ret always == 2 for key with slashes
--- CUT ---
What is the proper way to read key values with slashes in name?
Above has been properly answered by Cody Gray.
Below another issue.
Im getting the same problem when Im using variable instead of a text string.
Iv considered both approaches with single and double slashes:
HKEY hKey = 0;
DWORD keyType = REG_SZ;
TCHAR buf[255] = {0};
DWORD bufSize = sizeof(buf);
QSettings winReg("HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM", QSettings::NativeFormat);
auto comsKey = winReg.allKeys();
FOREACH( auto com, comsKey )
{
// FOREACH - boost macro
// comsKey = QList<QString> (list of key names) [from Qt framework]
// com = QString (single key name) [from Qt framework]
if( RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("HARDWARE\DEVICEMAP\SERIALCOMM"), 0, KEY_QUERY_VALUE, &hKey ) == ERROR_SUCCESS )
{
wchar_t* keyw = new wchar_t();
//com.replace("/", "\\"); <- checked both variants commented and not commented; com == /Device/Serial0 so im converting to \Device\Serial0
int size = com.size();
mbstowcs( keyw, com.toStdString().data(), size );
//auto ret = RegQueryValueEx( hKey, TEXT("\Device\Serial0"), 0, &keyType, (LPBYTE)buf, &bufSize ); // <- this works!
auto ret = RegQueryValueExW( hKey, (LPCWSTR)&keyw, 0, &keyType, (LPBYTE)buf, &bufSize ); // <- this one not works!
I have tried all variants with «Device..», «/Device», «Device», etc.
- Remove From My Forums
-
Question
-
I am using VC++ 2008 for Windows Server 2008. I have an issue reading a registry key at LOCAL_MACHINE in «Server 2008 R2». I am using the WinAPI RegOpenKeyEx and RegQueryValueEx methods (which supposed to be standard access method in VC++).
The thing is the code works fine in in Windows XP and Server 2008 but RegQueryValueEx produces error 2 in «Server 2008 R2».I have setup the UAC setting in my Server 2008 R2 machine so that application have access to registry and I amd running as administrator Actually I can read/write via my C# .Net application which uses Microsoft.Win32.RegistreyKey class. That is quite wierd
thing in Server 2008 R2 not to let some API have the same access !! I couldn’t find any documentation in MSDN!This is my code:
void LoadPreferences()
{
HKEY hkey;
DWORD dwDisposition;
DWORD dwType, dwSize;
char regPath[1024];
char regKey[1024];
char regVal[1024];
char errMsg[1024];
CString msg;// Reading windows Program file directory:
strcpy(regPath, «Software\Microsoft\Windows\CurrentVerion»);
strcpy(regKey, «ProgramFilesDir»);long res = RegOpenKeyEx(HKEY_LOCAL_MACHINE, regPath , 0, KEY_QUERY_VALUE, &hkey) ;
if(res == ERROR_SUCCESS)
{dwType = REG_SZ;
dwSize = sizeof(regVal);
res = RegQueryValueEx(hkey, regKey, NULL, &dwType, (PBYTE)®Val, &dwSize);RegCloseKey(hkey);
if(res ==ERROR_SUCCESS)
{
msg.Format(«Key:’%s\%s’ => Val:’%s'», regPath, regKey, regVal);
AfxMessageBox(msg);
}
else
{
//FormatMessage(FORMAT_MESSAGE_FROM_STRING, NULL, res, NULL, errMsg, 1024,NULL);
msg.Format(«Error in RegQueryValueEx => %d => %s», res, errMsg);
AfxMessageBox(msg);
}
}
else
{
msg.Format(«Error in RegOpenKeyEx for %s=> %d», regPath, res);
AfxMessageBox(msg);
}
}Just I tried CRegKey class as well. It works fine for XP but again does not work for any of Server 2008 platforms!!
Is it possible the problem has been becausee of x64 architecture?
Any idea?
Answers
-
What is the value of res? Access denied?
Try specifying KEY_READ or (KEY_READ | KEY_WRITE) access. Are you sure you want to access the 32-bit part of the registry using KEY_WOW64_32KEY?
-
Marked as answer by
Tuesday, June 22, 2010 9:38 AM
-
Marked as answer by
-
mkavous wrote:
>
>
>void LoadPreferences()
>{
> HKEY hkey;
> DWORD dwDisposition;
> DWORD dwType, dwSize;
> char regPath[1024];
> char regKey[1024];
> char regVal[1024];
> char errMsg[1024];
> CString msg;
>
>
>// Reading windows Program file directory:
>
> strcpy(regPath, «Software\Microsoft\Windows\CurrentVerion»);
> strcpy(regKey, «ProgramFilesDir»);
Did you retype this, rather than cut and paste? Because «CurrentVersion»
is misspelled there.
—
Tim Roberts, timr@probo.com
Providenza & Boekelheide, Inc.
Tim Roberts, DDK MVP
-
Marked as answer by
Kira Qian
Tuesday, June 22, 2010 9:38 AM
-
Marked as answer by
Проблема: произошла внутренняя системная ошибка (directx windows 7)
Ребят, у меня винда 7, на ней был при покупке 10 директ. Но спустя время( после некоторых установок игр) стала 11(обновилась).
А мой компьютер не тянет эту версию( происходят сильные лаги…..мигание экрана даже в некоторых играх)
я погуглила чуток в инете..и наткнулась на совет: удалить полностью 11 версию и поставить более древнюю…
возпользовалась программой: DirectX Eradicator
после этого больше не одну версию ( даже вместе с установкой игры) ну смогла установить
и постоянно выдает ошибки: не одну из игр( которые запускаются с директ не открывает)
dxdiag выдает ошибку
я читала..что в системной папке нужно посмотреть регистр:
———————
[09/25/13 09:24:27] module: dsetup32(Jun 2 2010), file: dsinline.h, line: 391, function: GetLangCodePage
Failed API: VerQueryValue()
Error: (1813) — Указанный тип ресурса в файле образа отсутствует.
Unable to get Translation valie.
———————
[09/25/13 09:24:27] module: dsetup32(Jun 2 2010), file: dsinline.h, line: 391, function: GetLangCodePage
Failed API: VerQueryValue()
Error: (1813) — Указанный тип ресурса в файле образа отсутствует.
Unable to get Translation valie.
———————
[09/25/13 09:24:41] module: dxupdate(Jun 2 2010), file: dxupdate.cpp, line: 189, function: GetDXVersion
Failed API: RegQueryValueEx()
Error: (2) — Не удается найти указанный файл.
Current DirectX may be a older version which does not have the version value in the registry.
———————
[09/25/13 09:24:41] module: dxupdate(Jun 2 2010), file: dxupdate.cpp, line: 4751, function: DirectXUpdateGetSetupInformation
GetDXVersion() failed.
———————
[09/25/13 09:24:41] module: dsetup32(Jun 2 2010), file: dxupdate.cpp, line: 280, function: CSetup::InstallPlugIn
DirectXUpdateInstallPlugIn() failed.
———————
[09/25/13 09:24:41] module: dsetup32(Jun 2 2010), file: setup.cpp, line: 1723, function: CSetup::SetupForDirectX
InstallPlugIn() failed.
прошу помочь пожалуйста=)
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
Помогите, плиз.
Windows 7.
Началось все с замены батарейки БИОСа на ноутбуке.
После этого перестала запускаться установленная игра, которая до этого работала без проблем — в самом начале вываливается ошибка «fatal error: cannot set display mode»…
переставил все драйверы несколько раз — ничего не помогло…
Появилось подозрение, что просто при запуске игра не может переключиться на дискретную видеокарту. Чего только не делал — чуть систему не угробил… В итоге такое ощущение, что по умолчанию в системе теперь запускается именно дискретная видяха, но сути не изменилось — игра не стартует.
В общем начитался в инете всяких советов, попытался удалить и переустановить DirectX — но стало только хуже похоже.
На данный момент при попытке установить на компьютер свежую версию DirectX через его вебустановщик или просто любой DirectX скачанным файлом, компьютер выдаёт сообщение об ошибке с текстом «Произошла внутренняя системная ошибка. Чтобы определить причину ошибки просмотрите файлы DXError.log и Directx.log в папке Windows».
Инструкций по этой ошибке тоже достаточно — но ничего не помогает…
Понимаю, что проще всего наверное переустановить систему, но времени на это тупо нет, а работать надо (игра в перерывах ).
В логах DXError.log (при попытке установки DirectX 11) при установке появляется следующее:
Код:
———————
[02/20/22 19:39:47] module: dxupdate(Mar 30 2011), file: dxupdate.cpp, line: 192, function: GetDXVersion
Failed API: RegQueryValueEx()
Error: (2) — Не удается найти указанный файл.
Current DirectX may be a older version which does not have the version value in the registry.
———————
[02/20/22 19:39:47] module: dxupdate(Mar 30 2011), file: dxupdate.cpp, line: 4764, function: DirectXUpdateGetSetupInformation
GetDXVersion() failed.
———————
[02/20/22 19:39:47] module: dsetup32(Mar 30 2011), file: dxupdate.cpp, line: 280, function: CSetup::InstallPlugIn
DirectXUpdateInstallPlugIn() failed.
———————
[02/20/22 19:39:47] module: dsetup32(Mar 30 2011), file: setup.cpp, line: 1727, function: CSetup::SetupForDirectX
InstallPlugIn() failed.
Если пытаться вебустановщиком обновление сделать, то ошибки следующие:
Код:
———————
[02/20/22 19:49:55] module: DXWSetup(Mar 30 2011), file: dxwsetup.cpp, line: 352, function: CDXWSetup::InitInstallEngine
Failed API: SetAction()
Error: (0x80070057) — Параметр задан неверно.
———————
[02/20/22 19:49:55] module: DXWSetup(Mar 30 2011), file: psheets.cpp, line: 705, function: PreinstDlgProc
CDXWSetup::InitInstallEngine() failed.
При этом в логе установки появляются такие строчки (небольшая цитата из всего, что там есть):
Код:
02/20/22 19:49:47: DXWSetup: ***** DXWSETUP *****
02/20/22 19:49:47: DXWSetup: WinMain()
02/20/22 19:49:47: DXWSetup: IsIA64(): not IA64.
02/20/22 19:49:47: DXWSetup: Unable to get Version on target file C:Windowssystem32directxwebsetupdsetup.dll
02/20/22 19:49:47: DXWSetup: Installed file C:Windowssystem32directxwebsetupdsetup.dll
02/20/22 19:49:47: DXWSetup: Unable to get Version on target file C:Windowssystem32directxwebsetupdsetup32.dll
02/20/22 19:49:47: DXWSetup: Installed file C:Windowssystem32directxwebsetupdsetup32.dll
02/20/22 19:49:47: DXWSetup: GetDXVersion(): This may be a older DirectX which does not have the version value in the registry.
02/20/22 19:49:47: DXWSetup: DirectX Version: 0.00.00.0000.00
02/20/22 19:49:47: DXWSetup: Setup Version: 4.09.00.0904.00
А вто что со всем этим сделать — неизвестно…
ХЕЕЕЕЕЕЛП!!!!!