如何检测我的进程在Windows操作系统中具有超级用户权限

时间:2011-07-27 13:25:17

标签: windows winapi visual-c++

如何检测我的进程在windows os中具有超级用户权限。 例如,我想检测我的ie探索是否使用超级用户权限我的帐户是管理员组或普通用户组

3 个答案:

答案 0 :(得分:0)

使用IsUserAnAdmin功能。

编辑或者,根据对该API的阅读,最好直接使用CheckTokenMembership,因为IsUserAnAdmin的未来可用性似乎存在疑问;该页面上有一个例子。

答案 1 :(得分:0)

要获取群组信息,您可以使用GetUserName然后使用NetUserGetInfo功能,但根据您的问题,您是否正在寻找此类内容并不明显。

答案 2 :(得分: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