使用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