- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个应用程序打开另一个非系统 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() 将失败。我也相信 PROCESS_QUERY_INFORMATION |
,因此尝试使用较少的访问权限不是一种选择。EnumPorcessModulesEx
需要 PROCESS_VM_READ
但是,当应用程序以“以管理员身份运行”执行时,这个问题就不再出现了。 OpenProcess() 工作正常,应用程序也按预期工作。
问题
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processid);
适用于大多数用户,但返回错误代码 5,应用程序的某些用户拒绝访问。
部分解决方案
...是以管理员身份运行应用程序。然后 OpenProcess() 运行良好。
问题
为什么在没有“以管理员身份运行”的情况下执行应用程序时某些用户的访问被拒绝?有没有其他方法可以在不以管理员身份执行我的应用程序的情况下获取另一个进程的模块列表?
最佳答案
您是否检查过 AdjustTokenPrivileges API?
默认情况下,即使进程正在提升运行(作为管理员),一些特权仍然在进程方面被禁用。要启用它们,我们需要调用 OpenProcessToken、LookupPrivilegeValue 和 AdjustTokenPrivileges API。
根据 this page ,需要 SeDebugPrivilege(宏 SE_DEBUG_NAME)才能执行 ReadProcessMemory(这需要 PROCESS_VM_READ 访问权限)。
关于c++ - 某些用户的 OpenProcess 访问被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35732495/
是否有 OpenProcess 函数的内核模式版本? 基本上我想从进程 ID 获取进程句柄。具体来说,我想获取系统进程ID的句柄。 谢谢! 最佳答案 如果您位于任意系统线程中,则可以使用 ZwCurr
我正在开发一个应用程序,它可以创建多个桌面并让用户能够在他当前使用的桌面下启动他想要的任何应用程序。 当该桌面关闭时(使用组合键)我想关闭在该桌面下打开的所有应用程序。为此,我使用 EnumProce
我对 win32 api 的 OpenProcess 函数有这个问题。程序旨在通过用户输入从给定程序 PID 和整数地址的程序中读取整数。 int main() { DWORD pidz; int
为了保护我的程序,我想进行检查以检测任何使用我的 PID 执行 OpenProcess 的程序?我想防止其他程序可以轻松获取我的程序的句柄。 我有哪些选择? (WinAPI 等)一旦另一个程序使用 O
在我的 manager.exe 中,我试图更改由我的 service.exe 启动的 worker.exe 的 CPU 使用率。 Service.exe 在系统帐户下运行,而 manager.exe
我有一个应用程序打开另一个非系统 32 位进程,并尝试使用 EnumProcessModulesEx 获取其加载模块的列表,并使用 GetModuleFileNameEx 获取每个模块的路径.它在我的
我正在尝试编写一个程序,该程序从当前目录中的 MinGW 发行版执行 make.exe,并使用其 STDOUT 数据和退出代码。我有一个处理 STDOUT 的句柄,我从中获取数据,使用 CreateP
当我运行我的程序时发生了一些奇怪的事情。当我在 VS 2010 中使用“不调试启动”选项运行它时,OpenProcess 照常返回进程句柄,但是当我在 Windows 资源管理器中运行我的程序时,Op
我正在尝试使用 Visual Studio 2012、c++ 控制台应用程序打开进程并收到 87 错误: #include #include #include #define EXTERN_DL
我制作了这个简单的类来打开一个进程并从中读取内存:问题是当我使用任何内存地址 ReadProcessMemory 调用 ReadDWORD 时失败,错误代码为 6:ERROR_INVALID_HAND
此程序枚举所有句柄并获取它们的名称。 对于 pID 4,OpenProcess 使用 SeDebugPrivilege 获得错误 5。 UAC 关闭。从管理员运行。 启用 SeDebugPrivile
在 Windows 中,我可以通过 CreateProcess() 获取 PROCESS_INFORMATION。但是,是否可以通过 OpenProcess() 获取 PROCESS_INFORMAT
我使用 Windows Hook 向我的应用程序发送消息,系统上的每个应用程序都会通知该应用程序有关 Windows 事件。 为了执行消息参数的编码,我使用了共享内存。外部进程调用 Duplicate
我在实现读取外部进程内存的算法时遇到了一些问题。这是主要代码: System.Diagnostics.Process.EnterDebugMode();
我一直在阅读 Hoglund 的一些书,我想我会在他的“简单调试器”上“开始”... 反正我一直在尝试用线 hProcess = OpenProcess(PROCESS_ALL_ACCESS | PR
根据微软文档,dwDesiredAccess 参数可以是一个或多个进程访问权限。 我想在调用 openProcess 函数时传递两个不同的 dwDesiredAccess(PROCESS_QUERY_
我在 Windows 平台上运行以下代码。目的是了解特定进程 ID 是否引用现有进程。 BOOL bProcessExists = FALSE; HANDLE hProcHandle = ::Open
我正在尝试从 Kernel32.dll Hook OpenProcess 以防止所谓的“injector”程序注入(inject)其他 dll进入我的过程: // ------------------
我正在努力枚举所有用户的 iexplore.exe 实例。我能够获得机器上匹配进程的列表,但要识别用户,我需要使用 OpenProcess。这适用于我自己的实例,但即使以管理员身份运行和 Enable
这些 Windows 函数的等效 API 是什么?如果您不熟悉 Windows 函数,它们所做的只是打开一个进程,访问(读取和写入)它的内存并关闭它的句柄。 这也可以只用系统调用来完成吗? 最佳答案
我是一名优秀的程序员,十分优秀!