使用Windows挂钩我向我的应用程序发送消息,应用程序会通过系统上的每个应用程序通知Windows事件。DuplicateHandle:需要OpenProcess,但访问被拒绝
要执行消息参数的编组,我使用共享存储器。外部进程调用DuplicateHandle,但为了与我的应用程序实例共享句柄,它应使用PROCESS_DUP_HANDLE权限要求调用OpenProcess。
实际上,即使我需要启用SeDebugPrivilege到外部进程,实际上每个应用程序都能够使用此体系结构发送消息。它的实际工作,除了“资源管理器”的过程,没有SeDebugPrivilege令牌......
的AdjustTokenPrivileges状态的文档:
的AdjustTokenPrivileges函数不能添加新的权限来访问令牌。它只能启用或禁用令牌的现有权限。要确定令牌的权限,请调用GetTokenInformation函数。
所以,问题是...如何添加SeDebugPrivilege令牌“资源管理器”的过程,或者,如何让“资源管理器”进程调用OpenProcess(PROCESS_DUP_HANDLE, FALSE, pId)
?
这似乎正是我需要的!什么SID对应于PROCESS_DUP_HANDLE? (我无法使用ProcEx ... :() – Luca 2010-08-03 22:12:52
修改进程SID PROCESS_DUP_HANDLE是一个访问权限,用于指定由ACE控制的访问权限(请参阅http://msdn.microsoft.com/zh-cn/library/ aa374868.aspx)。您选择的SID可以是众所周知的Everyone组的SID(请参阅http://msdn.microsoft.com/en-us/library/aa379649.aspx)。如果您不熟悉安全描述符I建议您使用ConvertStringSidToSid或ConvertStringSecurityDescriptorToSecurityDescriptor,尽可能使用安全描述符定义语言(SDDL)(请参阅http://msdn.microsoft.com/zh-cn/library/aa379567.aspx)。 – Oleg 2010-08-03 22:31:45
我发现这个:http:///stackoverflow.com/questions/1909084/is-there-a-way-to-modify-a-process-dacl-in-c(消息目标是一个托管进程)。它可以工作,但不能为WellKnownSidType设置访问掩码。 “资源管理器”所属的LogonIdsSid(无法创建LogonIdsSid类型的SecurityIdentifier)。叹息。 – Luca 2010-08-03 23:43:22