gpt4 book ai didi

c++ - DuplicateHandle : need to OpenProcess, 但访问被拒绝

转载 作者:搜寻专家 更新时间:2023-10-31 01:21:54 25 4
gpt4 key购买 nike

我使用 Windows Hook 向我的应用程序发送消息,系统上的每个应用程序都会通知该应用程序有关 Windows 事件。

为了执行消息参数的编码,我使用了共享内存。外部进程调用 DuplicateHandle , 但为了与我的应用程序实例共享句柄,它应调用 OpenProcess具有 PROCESS_DUP_HANDLE 权限要求。

实际上每个应用程序都可以使用此架构发送消息,即使我需要为外部进程启用 SeDebugPrivilege。它确实有效,除了“explorer”进程,它没有 SeDebugPrivilege token ...

AdjustTokenPrivileges 的文档状态:

The AdjustTokenPrivileges function cannot add new privileges to the access token. It can only enable or disable the token's existing privileges. To determine the token's privileges, call the GetTokenInformation function.

所以,问题是……如何将 SeDebugPrivilege token 添加到“explorer”进程,或者如何允许“explorer”进程调用 OpenProcess(PROCESS_DUP_HANDLE, FALSE, pId)

最佳答案

我不明白你为什么不使用命名共享内存。如果您的共享内存对象有名称,则无需使用 DuplicateHandle 即可打开该对象。

如果你确实必须使用 DuplicateHandle 并且需要能够在任何进程中使用 OpenProcess(PROCESS_DUP_HANDLE, FALSE, pId) 我发现你不应该使用 SeDebugPrivilege。相反,您应该授予PROCESS_DUP_HANDLE 权限给每个人,以使用pId 进程。如果您创建一个进程,您可以指定安全描述符。如果进程已经创建,您可以使用 OpenProcessGetSecurityInfo(参见 http://msdn.microsoft.com/en-us/library/aa446654.aspx)和 SetSecurityInfo 修改进程的安全描述符。

要测试此方法,您只需启动具有管理权限的 Process Explorer(请参阅 http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx),打开所选进程(具有 pId 的进程)的安全选项卡并修改其安全描述符。之后,所有进程都可以使用 OpenProcess(PROCESS_DUP_HANDLE, FALSE, pId) 而无需启用 SeDebugPrivilege

关于c++ - DuplicateHandle : need to OpenProcess, 但访问被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3400675/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com