return_value是998,对应的是ERROR_NOACCESS,无效的访问内存位置。有什么问题吗?内存分配正确,指针正确
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);发布于 2022-08-28 22:17:02
ERROR_NOACCESS从3个NTSTATUS值转换而来:
STATUS_DATATYPE_MISALIGNMENTSTATUS_DATATYPE_MISALIGNMENT_ERRORSTATUS_ACCESS_VIOLATION在具体情况下,我100%确信错误的来源是STATUS_DATATYPE_MISALIGNMENT,它是从ProbeForRead引发的。
如果指定的内存范围不在用户模式地址范围内,则
将引发
STATUS_ACCESS_VIOLATION异常。如果地址范围的开头在由对齐指定的字节边界上未对齐,ProbeForRead将引发STATUS_DATATYPE_MISALIGNMENT异常。
lpValueName必须与WCHAR (SO2字节)一样对齐。RandName()对齐方式在您的代码中是不可见的,但其中的任务可能是对齐的,因为我怀疑它不在用户模式地址范围内。
https://stackoverflow.com/questions/73521165
复制相似问题