Как обнаружить мой процесс имеет привилегии суперпользователя в ОС Windows - PullRequest
0 голосов
/ 27 июля 2011

Как обнаружить, мой процесс имеет привилегии суперпользователя в Windows OS.например, я хотел бы определить, использует ли моя ie explore права суперпользователя, а моя учетная запись - группы администраторов или обычные группы пользователей

Ответы [ 3 ]

0 голосов
/ 27 июля 2011

Чтобы получить информацию о группах, вы можете использовать функцию GetUserName, а затем NetUserGetInfo , но по вашему вопросу не было очевидно, ищете вы это или нет.

0 голосов
/ 27 июля 2011

Вот решение 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
        ' /954215/checktokenmembership-v-vb6-sboi-freesid-v-windows-7-i-windows-2008
        Call FreeSid(pAdministratorsGroup)
    End If
End Function
0 голосов
/ 27 июля 2011

Используйте функцию IsUserAnAdmin .

Редактировать: В качестве альтернативы, на основе чтения этого API, может быть лучше напрямую использовать CheckTokenMembership поскольку будущее наличие IsUserAnAdmin, по-видимому, под вопросом;на этой странице есть пример.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...