プロが教える店舗&オフィスのセキュリティ対策術

こんばんは。

レジストリ値の取得について教えてください。
下記のテストコードですが、これだけだとOKなのですが、いざ実際に使おうと他のソースに入れ込むと、一番最初(WinMain直後)に持ってきたとしても、「アプリケーションエラー」になってしまいます。
恐らくメモリの確保ができてないのかと思うのですがどうしたらよいのでしょうか?

環境は
OS: Windows 2000 Professional
C: Borland C++ Compiler
です。
--
#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {

HKEY hKey;
LPBYTE lpData;
LPDWORD lpcbData;

lpData = (LPBYTE)malloc(256);
RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Setup", 0, KEY_QUERY_VALUE, &hKey);
RegQueryValueEx(hKey, "BootDir", NULL, NULL, NULL, lpcbData);
RegQueryValueEx(hKey, "BootDir", NULL, NULL, lpData, lpcbData);
RegCloseKey(hKey);
MessageBox(NULL, lpData, "lpData", MB_OK);

return 0;
}

A 回答 (2件)

ポインタ変数 lpcbData を初期化せずに使っていますね。



DWORD cbData;
と定義して,

RegQueryValueEx(hKey, "BootDir", NULL, NULL, NULL, &cbData);
lpData = malloc(cbData);
RegQueryValueEx(hKey, "BootDir", NULL, NULL, lpData, &cbData);

でいいと思います。
    • good
    • 0
この回答へのお礼

お返事が遅くんなりましたが、一発で解決することができました。どうもありがとうございました。

お礼日時:2003/11/29 22:12

mallocの呼び出しが怪しそうです。



Application->Initialize();
のイニシャライズをしない状態だと、malloc、freeに使うヒープメモリが初期化されておらず、mallocがエラーでNULL値を返して来てるんじゃないでしょうか?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


このQ&Aを見た人がよく見るQ&A