Error DuplicateTokenEx и Windows XP

Тема в разделе "WASM.WIN32", создана пользователем M0rg0t, 18 мар 2020.

  1. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.576
    Andrey333, столкнулся с интересной вещью, опять же, на ХР. Вот берем ваш код , запускаем из него cmd.exe. Получается , конечно же, процесс с правами Системы. Теперь пишем небольшую прогу, и запускаем ее с этой командной строки.

    Код (C):
    1. if(SHTestTokenMembership(NULL, SECURITY_LOCAL_SYSTEM_RID))
    2.     log1("This is Sys");
    3. else
    4.     log1("No Sys");
    5.  
    6. PSID psidAdmins;
    7. SID_IDENTIFIER_AUTHORITY SIDAuthWorld = SECURITY_NT_AUTHORITY;
    8. if (!AllocateAndInitializeSid(&SIDAuthWorld,2,SECURITY_BUILTIN_DOMAIN_RID,SECURITY_LOCAL_SYSTEM_RID,0,0,0,0,0,0,&psidAdmins))
    9.     {
    10.     log1("error alloc sid");
    11.     ExitProcess(1);
    12.     }
    13.  
    14. BOOL pb2;
    15. if(!CheckTokenMembership(NULL,psidAdmins, &pb2))
    16.     {
    17.     log1("error check token");
    18.     ExitProcess(1);
    19.     }
    20. if(pb2)
    21.     log1("This is sys2");
    22. else
    23.     log1("No sys2");
    Два способа проверку на систем - и оба не работают (но работают в виста+). Почему такое может быть, ведь процесс же системный?
     
  2. Andrey333

    Andrey333 Member

    Публикаций:
    0
    Регистрация:
    30 янв 2020
    Сообщения:
    35
    M0rg0t, попробуйте проверить следующим образом:

    Код (C++):
    1.     BYTE Sid [SECURITY_MAX_SID_SIZE];
    2.     DWORD SidSize = SECURITY_MAX_SID_SIZE;
    3.  
    4.     if (!CreateWellKnownSid(WinLocalSystemSid, NULL, (PSID)&Sid, &SidSize)){
    5.         printf("CreateWellKnownSid failed, error code: 0x%0.8lX", GetLastError());
    6.         goto Cleanup;
    7.     }
    8.  
    9.     BOOL bSidPresent;
    10.     if (!CheckTokenMembership(NULL, (PSID)&Sid, &bSidPresent)) {
    11.         printf("CheckTokenMembership failed, error code: 0x%0.8lX", GetLastError());
    12.         goto Cleanup;
    13.     }
    14.  
    15.     MessageBox(NULL, (bSidPresent) ? L"SYSTEM" : L"NO SYSTEM", NULL, 0);
     
    M0rg0t нравится это.
  3. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.576
    Andrey333, да, этот работает, спасибо!