[英]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.