windows - OpenProcess:仅在 Windows 8.1 上出现拒绝访问错误

标签 windows winapi windows-8.1 openprocess

我有一个程序可以调整 SeDebugPrivilege,然后开始遍历系统进程并为它们调用 OpenProcess(并做其他事情,但现在不重要)。该程序当然也以管理员模式运行。在 Windows XP 和 Windows 7 上运行良好,但在 Windows 8.1 上,以下系统进程的 OpenProcess 失败并显示 ERROR_ACCESS_DENIED(5):smss.exe、csrss.exe、services.exe。正如我对 SeDebugPrivilege 的了解,我应该能够打开这些进程并为它们检索句柄。有没有人知道什么样的魔术只在 Windows 8.1 上导致此错误?

(无论如何,我对 CreateToolhelp32Snapshot 的相同进程有相同的错误)

最佳答案

Windows 8.1 引入了 system protected process 的概念.这在第三方反恶意软件的上下文中有记录,但假设它也用于保护特别关键的系统进程似乎是合理的。

系统保护进程是 Protected Process mechanism 的扩展(Microsoft Word 文档)在 Windows Vista 中作为 DRM 措施引入。

即使具有调试权限,您也无法获得 protected 进程的任何这些访问权限:

  • 删除
  • READ_CONTROL
  • WRITE_DAC
  • WRITE_OWNER
  • PROCESS_CREATE_THREAD
  • PROCESS_DUP_HANDLE
  • PROCESS_QUERY_INFORMATION
  • PROCESS_SET_QUOTA
  • PROCESS_SET_INFORMATION
  • PROCESS_VM_OPERATION
  • PROCESS_VM_READ
  • PROCESS_VM_WRITE

您应该仍然可以通过请求 PROCESS_QUERY_LIMITED_INFORMATION 访问权限来打开进程。根据文档,SYNCHRONIZEPROCESS_TERMINATE 访问也是允许的。

关于windows - OpenProcess:仅在 Windows 8.1 上出现拒绝访问错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28303436/

相关文章:

c++ - 底部 4GB 已满时 FileDialog 崩溃

c++ - 最小化全屏窗口的最佳方法

xaml - 如何在关闭时为 SettingsFlyout 设置动画

c# - 从动态数字数组中找到唯一的整数和

windows - 在 Windows 上使用 Bash 时如何在 Fish 中显示完整目录?

c - 使用c删除ntfs中的文件

colors - Windows 8.1 - 可以更改磁贴颜色吗?

c# - Windows 商店应用程序多台显示器

c++ - boost-C++ 库是否与 win98 兼容?

java - 我希望我的文件路径适用于使用 Java 的 linux 和 Windows 环境