2010-02-17 14 views
0

我需要使用來自其他進程(IIS7模塊工作進程)的最大特權(NT AUTHORY \ System)以較少特權模式運行在同一本地計算機上的一個函數(NT AUTHORY \網絡服務)。退出proc函數調用和返回的HANDLE類型(Windows C++)

IIS模塊會調用該函數傳遞一些文本(用戶名),並且該函數需要返回HADNLE類型的女巫將在使用CloseHandle函數進行處理後關閉。

(功能:LogonUser的http://msdn.microsoft.com/en-us/library/aa378184(VS.85).aspx

什麼是做到這一點的最好方法是什麼? COM +,共享內存,命名管道?我在這個編程方面沒有任何經驗,所以我需要一些幫助。我不知道如何通過命名管道傳遞句柄類型? (我只看到只傳遞基於文本的消息,而不是指針或其他數據類型的例子)。

回答

1

手柄在整個會話邊界內不可用。我並不是100%確定它可以在所有類型的手柄的整個過程邊界內使用。

例如,使用管道通知其他進程正在運行升級的priveleges以獲取它自己的句柄並執行任何您想要的操作。

至於什麼是最好的溝通方式,這真的取決於你的確切需求和你的確切經驗水平。

+0

我不能讓服務執行我所需要的,因爲該句柄是在整個IIS7過程管道中使用的模擬令牌,以執行用戶運行該請求/響應的身份驗證和授權。 – DoDo 2010-02-18 07:21:10

0

僅供參考,HANDLE只是Windows中的一個32位整數值。它不是指向內存位置的指針。

0

您不能將句柄傳遞給另一個進程,句柄是進程本地的。但是,您可以使用DuplicateHandle爲您的句柄創建一個克隆供其他進程使用。只有其他進程可以使用重複。另一個過程負責對其調用CloseHandle

+0

我該如何做到這一點?隨着Windows服務?如何從第一個流程獲取句柄來複制它? (我想我需要從過程中運行DuplicateHandle函數,我需要像你說的那樣使用它。) – DoDo 2010-02-18 07:18:49

+0

你不能複製另一個進程的句柄,你只能複製我們自己的另一個進程的句柄。 – 2010-02-18 21:12:18

+0

Tnx,但你能告訴我什麼是最好的方式來返回該處理需要處理的主進程?只是爲了創建主句柄,複製它並返回那個句柄的編號(就像Jeff Wilhite寫道HANDLE是32位整數..) – DoDo 2010-02-19 07:21:19