Определение типа учётной записи из ядра.

Тема в разделе "WASM.WIN32", создана пользователем yalex, 9 мар 2005.

  1. yalex

    yalex New Member

    Публикаций:
    0
    Регистрация:
    1 июн 2004
    Сообщения:
    13
    Мне нужно проверить все процессы на группу Администратор из ядра. Сделал перебор, открываю процесс, открываю Token, а как дальше по описанию Token проверить не разобрался. Полная лажа. Из пользовательского знаю, а в режиме ядра не понимаю. Мне нужно только от места где я сделал



    status=ZwOpenProcess(&hProcess, PROCESS_ALL_ACCESS,&attr,&p->Threads[0].ClientId);

    if (status==STATUS_SUCCESS) status=ZwOpenProcessToken(hProcess,TOKEN_QUERY,&hToken);



    а как дальше проверить принадлежит процесс Администратору или нет незнаю.



    SeTokenIsAdmin (hToken) не работает. В BSOD выкидывает, наверное Level ниже чем у меня.



    Может, кто знает как этот код на Visual Basic переделать под ядро. Здесь вроде всё есть но переделать не получается:



    Private Function IsAdministrator() As Long



    Dim hProcessID As Long

    Dim hToken As Long

    Dim res As Long

    Dim cbBuff As Long

    Dim tiLen As Long

    Dim TG As TOKEN_GROUPS

    Dim SIA As SID_IDENTIFIER_AUTHORITY

    Dim lSid As Long

    Dim cnt As Long

    Dim sAcctName1 As String

    Dim sAcctName2 As String

    Dim cbAcctName As Long

    Dim sDomainName As String

    Dim cbDomainName As Long

    Dim peUse As Long



    tiLen = 0





    hProcessID = GetCurrentProcess()



    If hProcessID <> 0 Then





    If OpenProcessToken(hProcessID, TOKEN_READ, hToken) = 1 Then





    res = GetTokenInformation(hToken, _

    TokenGroups, _

    TG, _

    tiLen, _

    cbBuff)



    If res = 0 And cbBuff > 0 Then



    tiLen = cbBuff

    res = GetTokenInformation(hToken, _

    TokenGroups, _

    TG, _

    tiLen, _

    cbBuff)



    If res = 1 And tiLen > 0 Then





    SIA.Value(5) = SECURITY_NT_AUTHORITY



    res = AllocateAndInitializeSid(SIA, 2, _

    SECURITY_BUILTIN_DOMAIN_RID, _

    DOMAIN_ALIAS_RID_ADMINS, _

    0, 0, 0, 0, 0, 0, _

    lSid)



    If res = 1 Then





    sAcctName1 = Space$(255)

    sDomainName = Space$(255)

    cbAcctName = 255

    cbDomainName = 255

    res = LookupAccountSid(vbNullString, _

    lSid, _

    sAcctName1, _

    cbAcctName, _

    sDomainName, _

    cbDomainName, _

    peUse)



    If res = 1 Then





    For cnt = 0 To TG.GroupCount - 1



    sAcctName2 = Space$(255)

    sDomainName = Space$(255)

    cbAcctName = 255

    cbDomainName = 255



    res = LookupAccountSid(vbNullString, _

    TG.Groups(cnt).Sid, _

    sAcctName2, _

    cbAcctName, _

    sDomainName, _

    cbDomainName, _

    peUse)



    If sAcctName1 = sAcctName2 Then

    IsAdministrator = True

    Exit For

    End If



    Next



    End If



    FreeSid ByVal lSid



    End If



    CloseHandle hToken



    End If



    End If



    End If



    CloseHandle hProcessID



    End If

    End Function