2

C++ でプログラムによって DWORD 値をレジストリに書き込もうとしています。

少し調べてみたところ、以前にも同じ質問があったことがわかりました。私は彼らの解決策をたどろうとしましたが、私の知る限り、彼らの解決策では対処されていない、本当にイライラする問題に遭遇しました。

これは私のコードです:

HKEY hKey;
LPCWSTR sKeyPath;
int iResult;

sKeyPath = L"Software\\ABI\\";
iResult = RegOpenKeyEx(HKEY_CURRENT_USER, sKeyPath, NULL, KEY_ALL_ACCESS, &hKey);
DWORD value = 0x00000003;
iResult = RegSetValueEx(hKey, L"Test", NULL, REG_DWORD, (const BYTE*)value, sizeof(value));
RegCloseKey(hKey);

基本的なデバッグを行ったところ、iResultを呼び出した後に の値が 998であることがわかりましたRegSetValueEx。このキーは、テスト目的で regedit.exe を使用して手動で作成したため、Windows レジストリに存在するはずです。DWORD "Test" の値は、最初は 0x00000009 で、プログラムを実行した後も変更されていません。

どこが間違っているのかわかりません。

どんな助けでも大歓迎です。

PS エラー 998 についてネット上で役立つサイトを見つけることができませんでした。私が見つけた唯一の参考文献は、レジストリを処理するときに発生する可能性がある最悪のエラーであると述べています。

PPS ところで、私はこのプログラムを Windows 8 で実行しています。それによって何かが変わるとは思いませんが、以前に Windows 8 で奇妙なセキュリティの問題が発生した経験があります。

4

1 に答える 1

12

次のアドレスを渡す必要がありvalueます。

iResult = RegSetValueEx(hKey,
                        L"Test",
                        NULL,
                        REG_DWORD,
                        (const BYTE*)&value, // Change made here.
                        sizeof(value));

エラー コードの998意味は次のとおりです。

メモリ位置へのアクセスが無効です。

のアドレスがvalue渡されない場合、実際の値 ( 3) がメモリ アドレスとして使用され、エラーが発生します。

于 2012-11-06T09:16:31.020 に答える