簡體   English   中英

RegSetValueEx 返回 998,REG_SZ

[英]RegSetValueEx returns 998, REG_SZ

return_value 是 998,對應的是 ERROR_NOACCESS,無效訪問 memory 位置。 問題是什么? Memory 分配正確,指針正確

LPWSTR path = VirtualAlloc(0, MAX_PATH*2, MEM_COMMIT, PAGE_READWRITE); 
GetModuleFileNameW(0, path, MAX_PATH); 
HKEY key; `
RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"SOFTWARE\Microsoft\Windows\CurrentVersion\Run", NULL, KEY_ALL_ACCESS, &key);
int return_value = RegSetValueEx(key, RandName(), 0, REG_SZ, (BYTE*)path, 0); 
RegCloseKey(key);

ERROR_NOACCESS從 3 個NTSTATUS值轉換而來:

  • STATUS_DATATYPE_MISALIGNMENT
  • STATUS_DATATYPE_MISALIGNMENT_ERROR
  • STATUS_ACCESS_VIOLATION

在具體情況下,我 100% 確定錯誤來源是STATUS_DATATYPE_MISALIGNMENT並且它來自ProbeForRead

如果 memory 的指定范圍不在用戶模式地址范圍內, ProbeForRead引發STATUS_ACCESS_VIOLATION異常。 如果地址范圍的開頭未與 Alignment 指定的字節邊界對齊,則 ProbeForRead 將引發STATUS_DATATYPE_MISALIGNMENT異常。

lpValueName必須與WCHAR具有相同的對齊方式(所以 2 個字節)。 RandName()如何對齊在您的代碼中是不可見的,但可能是其中的任務對齊,因為我懷疑它不在用戶模式地址范圍內

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM