我有一个程序可以调整 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
访问权限来打开进程。根据文档,SYNCHRONIZE
和 PROCESS_TERMINATE
访问也是允许的。
关于windows - OpenProcess:仅在 Windows 8.1 上出现拒绝访问错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28303436/