2012-03-26 17 views
1

我需要獲得GetTokenInformation返回的AuthenticationID與TokenStatistics類的登錄在站上的用戶是否升高或不。當一個進程被提升時,我怎麼能得到非提升會話的windows身份驗證ID

Lemme給你一些更多的信息。假設我這樣做:

var Result = GetTokenInformation(WindowsIdentity.GetCurrent().Token, TOKEN_INFORMATION_CLASS.TokenStatistics, TokenInformation, TokenInfLength, out TokenInfLength); 

這將允許我從TokenInformation結構中獲得AuthenticationID而沒有問題。假設生成的驗證ID爲「00000000-000」

現在,如果我右鍵單擊Visual Studio並單擊「以管理員身份運行」,第二次啓動我的代碼,結果將是其他內容,例如「00000000-00001289 」。但我需要「00000000-000」

如何獲得「00000000-000」當前進程是否升高?

我想這只是找到合適的令牌給到GetTokenInformation的問題,但我這裏手忙腳亂......

注:我根據我的代碼上How to get the logon SID in C#實施GetTokenInformation,然後將它改編能夠獲得TokenStatistics。

回答

3

好的,我終於明白了。這些步驟如下(未發佈完整的代碼,這是相當長):在Win32_Process類+託管Process類遞歸

  1. 使用WMI(的ManagementObject)創建當前進程的祖先
  2. 在我的特別如果我找到「資源管理器」進程或當我遇到異常時停止算法,因爲很可能瀏覽器未升級。從ADVAPI32.DLL
  3. P /調用OpenProcessToken功能上一步2.這讓你可以用來構建一個新的WindowsIdentity,您可以在步驟4使用
  4. 然後,您可以養活一個userToken返回的ProcessID WindowsIdentity令牌屬性GetTokenInformation取回您的AuthenticationID。

這是測試和工作。

參考:

如果您看到這個程序的任何問題不要猶豫,發表評論或發表你自己的答案!


注:有,如果父進程中的一個已經被殺死了一個問題:WMI會給你已經不存在的進程的ID。我工作的產品的性質讓我不時重新啓動瀏覽器(僅在開發期間),這就是我看到問題的方式。這對我來說並不是一個問題,但很高興知道。

謝謝

相關問題