Regqueryvalueex error 2 не удается найти указанный файл

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

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)&regVal, &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

  • 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

Проблема: произошла внутренняя системная ошибка (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

А вто что со всем этим сделать — неизвестно…

ХЕЕЕЕЕЕЛП!!!!!

Понравилась статья? Поделить с друзьями:
  • Registry import error accessing the registry
  • Registry filter driver exception как исправить
  • Registry error синий экран как исправить
  • Registry error виндовс 7
  • Registry error windows 10 синий экран