OpenProcess对于32位提升的进程返回ERROR_ACCESS_DENIED

时间:2019-07-01 15:48:37

标签: c winapi process

我正在我要终止的机器上寻找特定的简化32位进程。首先,我需要确保它是正确的文件。

为此,我遵循Microsoft的this示例,介绍如何使用 OpenProcess() EnumProcessModules() GetModuleFileNameEx()内核函数。

从Visual Studio和提升的Powershell(x86或x64)中执行时,我得到的 OpenProcess()返回码为299,但是进程句柄还可以,我可以获取文件名。

当我在提升的CMD Shell中运行相同的二进制文件(在Win10 x64和Win7 x86上测试)时, OpenProcess()返回5,表示ERROR_ACCESS_DENIED。 -这对我来说是个问题,因为出于特定原因,该工具最终将在CMD上运行。

我已经尝试过为 OpenProcess()调整所需的标志,但是两个版本都提供与上述相同的结果。

  • PROCESS_QUERY_INFORMATION | PROCESS_VM_READ | PROCESS_TERMINATE
  • PROCESS_QUERY_LIMITED_INFORMATION | PROCESS_VM_READ | PROCESS_TERMINATE
HANDLE hProcess = OpenProcess(dwDesiredAccess, FALSE, processID);
EnumProcessModules(hProcess, &hMod, sizeof(hMod), &cbNeeded);
GetModuleFileNameEx(....);

在此先感谢您的提示和指示!

1 个答案:

答案 0 :(得分:-1)

最终,我放弃了用C语言编写的代码,并使用 System.Diagnostics.Process 方法在C#中实现了它。

仍然感谢您的所有努力!

相关问题