某些用户的 OpenProcess 访问被拒绝
OpenProcess Access is denied for some users
我有一个应用程序打开另一个非系统 32 位进程,并尝试获取其加载模块的列表,其中包含每个模块的EnumProcessModulesEx
和路径GetModuleFileNameEx
。它在我的开发环境 (Windows 10) 和许多测试过该应用程序的用户中运行良好。但是,对于某些用户(两个用户,Windows 8.1 和 Windows 10),OpenProcess() 函数失败,访问被拒绝(错误代码 5)。
我正在用PROCESS_QUERY_INFORMATION | PROCESS_VM_READ
打开这个过程.使用 PROCESS_QUERY_LIMITED_INFORMATION
打开进程有效,但随后EnumProcessModulesEx
将失败。根据我的测试,PROCESS_QUERY_INFORMATION
和 PROCESS_VM_READ
如果单独使用,对于有上述问题的用户来说,OpenProcess() 都会失败。另外,我相信EnumPorcessModulesEx
需要PROCESS_QUERY_INFORMATION | PROCESS_VM_READ
,因此尝试使用较少的访问权限不是一种选择。
但是,当使用"以管理员身份运行"执行应用程序时,此问题不再发生。OpenProcess() 工作,应用程序也按预期工作。
问题所在
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processid);
适用于大多数用户,但返回错误代码 5,应用程序的某些用户访问被拒绝。
部分解决方案
。是以管理员身份运行应用程序。OpenProcess() 则运行良好。
问题
为什么在没有"以管理员身份运行"的情况下执行应用程序时,某些用户的访问被拒绝?有没有另一种方法可以在不以管理员身份执行我的应用程序的情况下获取另一个进程的模块列表?
您是否检查过 AdjustTokenPrivileges API?
https://www.experts-exchange.com/questions/10125867/ExitWindowsEx-AdjustTokenPrivileges-to-SE-SHUTDOWN-NAME.html
默认情况下,即使进程以提升方式运行(以管理员身份),某些权限仍处于进程禁用状态。要启用它们,我们需要调用 OpenProcessToken、LookupPrivilegeValue 和 AdjustTokenPrivileges API。
根据此页面,需要SeDebugPrivilege(宏SE_DEBUG_NAME)来执行ReadProcessMemory(需要PROCESS_VM_READ访问权限)。
- 访问被拒绝后,c++中的故障保护代码
- 删除目录函数访问被拒绝
- 为什么 Windows 拒绝访问某些进程的名称?
- 我在执行任何程序时被拒绝在 devcpp 中访问
- Windows C++:文件夹移动访问被拒绝错误
- AWS AMI 中的 Windows DPAPI 失败,访问被拒绝
- C++ 17 文件系统copy_file访问被拒绝
- mysql c ++连接器异常:用户"root"@'localhost'的访问被拒绝(使用密码:NO)&&MySQL服务器已消失
- 如何修复 CopyFile() 错误 5 - 访问被拒绝错误
- CreateFile 在尝试打开目录进行读取时始终返回错误 5(访问被拒绝)
- 通过进程模块C 枚举时,访问被拒绝
- 任务计划程序:设置运行级别时拒绝访问
- 设置Windows计时器,访问被拒绝
- 访问在托管代码创建的事件上对WaitforsingLeoBject拒绝
- 进程间通信 - C# 和C++.对路径的访问被拒绝
- 清除同一属性后,设置属性时拒绝访问
- 无法生成或清理 Visual Studio 2015 解决方案(访问被拒绝)
- 使用AWS CPP SDK拒绝Amazon S3的访问
- C:文件扫描与c++,访问拒绝特定的文件
- RegOpenKeyEx访问拒绝读取HKEY_LOCAL_MACHINE