2016-08-11 17 views
0

RegEnumValueを使用して単一の値の名前を表示しようとしています(私はRegGetValueを使用できますが、RegEnumValue関数を使用する方法を学習しようとしています)が、 "パラメータが正しくありません"。RegEnumValueのエラーコード87

は、ここに私のコードです:私は間違って

int wmain() 
{ 
    //RegOpenKeyEx 
    HKEY hKey = HKEY_CURRENT_USER; 
    LPCWSTR subKey = L"WinSide"; 
    DWORD options = 0; 
    REGSAM samDesired = KEY_QUERY_VALUE; 
    HKEY pkOpenResult; 

    //RegEnumValue 
    DWORD index = 0; 
    WCHAR valueName[16383]; 
    LPWSTR pValueName = valueName; 
    DWORD size=sizeof(valueName); 
    DWORD reserved = NULL; 
    DWORD type; 
    WCHAR data[255]; 
    LPWSTR pData=data; 
    DWORD sizeData = sizeof(data); 

    LONG openKey = RegOpenKeyEx(hKey, subKey, options, samDesired, &pkOpenResult); 

    if (openKey != ERROR_SUCCESS) 
    { 
     wprintf(L"Error opening the key. Code: %li\n"); 
    } 
    else 
    { 
     wprintf(L"Key opened!\n"); 

     LONG enumValue = RegEnumValue(pkOpenResult, index, pValueName, &size, 
             &reserved, &type, pData, &sizeData); 

     if (enumValue != ERROR_SUCCESS) 
      wprintf(L"Error code: %li\n", enumValue); 
     else 
     { 
      wprintf(L"Going to show the value's name here!"); 
     } 

     RegCloseKey(pkOpenResult); 
    } 


    return 0; 
} 

何をしているのですか?

ご迷惑をおかけして申し訳ございません。

答えて

1

lpReservedは、ドキュメントに記載されているとおりにNULLである必要があります。 null以外の値を渡します。それが失敗の理由です。 reserved変数を削除し、にはNULLを渡します。

lpcchValueName引数には、バイトではなく文字を指定します。エラーのバイト数を渡します。その間違いは必ずしもあなたを傷つけることはありませんが、バッファオーバランエラーが発生しているので、修正する必要があります。

+0

だから、 'NULL'へのポインタとして' reserved'を作成することもできますか?そして 'size'は' DWORD size = wcslen(valueName);のようになります;そうですか? –

+0

options引数も間違っています。 –

+0

なぜ 'options'が間違っていますか? MSDNの記事には、「このパラメータをゼロまたはそれ以下に設定する」と記載されています。私はシンボリックリンク –