無法定位程式輸入點RegSetKeyValueA 於動態連結庫 ADVAPI32.dll上 解決方案
阿新 • • 發佈:2019-01-07
寫了一個登錄檔的程式,在win7下可正常執行,拿到XP系統下執行,爆出如下錯誤:
接下來試著把win7下的ADVAPI32.DLL拷貝到目錄下,結果還是不行。
拿出IDA看下xp下面的ADVAPI32.DLL的匯出函式,發現原來xp下的該dll沒有匯出該函式。
檢視MSDN,發現RegSetKeyValue只支援Vista以上的作業系統。看來是使用了高版本系統才支援的API導致出錯。
摸索了一下,改用RegSetValueExA函式,就可以了。
順便總結一下注冊表程式設計:
①先開啟登錄檔
②操作子項
示例程式碼:
注意不能直接調RegSetValueExA,傳入絕對路徑,這樣操作是不能成功的。LSTATUS r; HKEY hk; ST st = GetSystemType(); if (st==WINDOWS_XP) { //XP r = RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Windows", //登錄檔路徑 0, KEY_WRITE, &hk); if (r!=ERROR_SUCCESS) { MessageBoxA("寫登錄檔失敗!", "Warn", MB_OK); return; } r = RegSetValueExA(hk, //登錄檔控制代碼 "AppInit_DLLs", //子項名稱 0, REG_SZ, (BYTE*)filename, strlen(filename)); if (r!=ERROR_SUCCESS) { MessageBoxA("寫登錄檔失敗!", "Warn", MB_OK); return; } }