2011-07-27 25 views
0

如何檢測我的進程在Windows操作系統中擁有超級用戶權限。 例如,我想檢測我的ie探索是否使用超級用戶權限我的帳戶是管理員組或正常用戶組如何在Windows操作系統中檢測我的進程具有超級用戶權限

+0

什麼問題?你想知道你的流程是否有升級的令牌嗎?或者你想知道用戶是否在管理組?你爲什麼想知道?你說「我的過程」,但後來你談論IE瀏覽器。你是否編碼BHO? –

回答

0

使用IsUserAnAdmin函數。

編輯:另外,基於該API的閱讀可能會更好,直接使用CheckTokenMembership因爲未來IsUserAnAdmin的可用性似乎是在懷疑;這個頁面上有一個例子。

0

要獲取羣組信息,您可以使用GetUserName然後NetUserGetInfo函數,但通過您的問題,如果您正在尋找這樣的事物,它並不明顯。

0

這裏有一個VB6解決方案來檢查當前進程是否升高;應該很容易轉換爲C++。

Public Function IsCurrentProcessElevated() As Boolean 
    Dim lRet As Long, pAdministratorsGroup As Long 
    Dim udtSidIdentifierAuthority As SID_IDENTIFIER_AUTHORITY 

    udtSidIdentifierAuthority.Value(5) = 5 ' SECURITY_NT_AUTHORITY 

    lRet = AllocateAndInitializeSid(udtSidIdentifierAuthority, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, pAdministratorsGroup) 
    If lRet <> 0 Then 
     If CheckTokenMembership(0, pAdministratorsGroup, lRet) <> 0 Then ' Use 0 to check the calling thread 
      IsCurrentProcessElevated = (lRet <> 0) 
     End If 
     ' Note: This line was often crashing in Windows 7, fix was to change the API declare to recieve argument ByVal 
     ' http://stackoverflow.com/questions/1913087/checktokenmembership-in-vb6-crashing-on-freesid-on-windows-7-and-windows-2008 
     Call FreeSid(pAdministratorsGroup) 
    End If 
End Function 
相關問題