首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RegSetValueEx返回998,REG_SZ

RegSetValueEx返回998,REG_SZ
EN

Stack Overflow用户
提问于 2022-08-28 18:21:42
回答 1查看 80关注 0票数 -1

return_value是998,对应的是ERROR_NOACCESS,无效的访问内存位置。有什么问题吗?内存分配正确,指针正确

代码语言:javascript
复制
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);
EN

回答 1

Stack Overflow用户

发布于 2022-08-28 22:17:02

ERROR_NOACCESS从3个NTSTATUS值转换而来:

  • STATUS_DATATYPE_MISALIGNMENT
  • STATUS_DATATYPE_MISALIGNMENT_ERROR
  • STATUS_ACCESS_VIOLATION

在具体情况下,我100%确信错误的来源是STATUS_DATATYPE_MISALIGNMENT,它是从ProbeForRead引发的。

如果指定的内存范围不在用户模式地址范围内,则

将引发STATUS_ACCESS_VIOLATION异常。如果地址范围的开头在由对齐指定的字节边界上未对齐,ProbeForRead将引发STATUS_DATATYPE_MISALIGNMENT异常。

lpValueName必须与WCHAR (SO2字节)一样对齐。RandName()对齐方式在您的代码中是不可见的,但其中的任务可能是对齐的,因为我怀疑它不在用户模式地址范围内。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73521165

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档