1

私はC ++でレジストリキーを読み取ろうとしています。それが私の機能です:

    DWORD regkey()
{
    HKEY hKey;
    DWORD dwDisp = REG_BINARY;
    DWORD dwSize = sizeof(dwDisp);
    DWORD dwValue = 0;
    DWORD dwReturn;
    DWORD dwBufSize = sizeof(dwDisp);

    if( RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"HERE\\IS\\THE\\REGKEY",0, KEY_ALL_ACCESS, &hKey) == ERROR_SUCCESS)
    {
        DWORD error = RegQueryValueEx(hKey,L"key",0,0, (LPBYTE)&dwReturn, &dwBufSize);
        if(error == ERROR_SUCCESS)
        {
            return dwReturn;
        }
    }

    RegCloseKey(hKey);

    return 0;
}

しかし、何も返されません...助けてください。

4

1 に答える 1

0

レジストリ関数は意味のあるエラー コードを返し、問題の診断に役立ちます。そのコードを保持してみてください:

{
    HKEY hKey;
    DWORD dwDisp = REG_BINARY;
    DWORD dwSize = sizeof(dwDisp);
    DWORD dwValue = 0;
    DWORD dwReturn;
    DWORD dwBufSize = sizeof(dwReturn);

    DWORD dwError = RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"HERE\\IS\\THE\\REGKEY",0, KEY_READ, &hKey) ;
    if( dwError == ERROR_SUCCESS)
    {
        dwError = RegQueryValueEx(hKey,L"key",0,0, (LPBYTE)&dwReturn, &dwBufSize);
        if(error == ERROR_SUCCESS)
        {
            // it worked!
        }
        else
        {
            // it failed to read, check dwError for the error code
            dwResult = 0;
        }

        RegCloseKey(hKey);
    }
    else
    {
        // it failed to open, check dwError for the error code
        dwResult = 0;
    }


    return 0;
}

Visual Studio を使用している場合は、任意の障害ポイントで中断しdwError,hr、ウォッチ ウィンドウで評価できます。形式指定子により、デバッガーは,hrエラー コードを検索し、問題を説明する意味のある文字列を表示します。これにより、何がうまくいかなかったのかを理解できるようになるはずです。

失敗している関数と、その関数から返されたコードをお知らせいただければ、より詳細なヘルプを提供できる可能性があります。現状では、ちょっとした推測ゲームを提供してくれました。レジストリ キー名のつづりを間違えたか、間違ったパスを指定した可能性があります。あなたのコードは、レジストリ キーを渡していることを暗示しているようですがRegQueryValueEx()、キー名ではなく値名をその関数に渡すことを意図しています。レジストリの保護された部分を見て、そのキーを読み取るのに十分な権限を持つアカウントとして実行していないため、アクセス権限に問題がある可能性があります。KEY_READ(したがって、の代わりに渡す必要がありKEY_ALL_ACCESSます。)

于 2013-01-05T15:14:27.743 に答える