Andrey333, столкнулся с интересной вещью, опять же, на ХР. Вот берем ваш код , запускаем из него cmd.exe. Получается , конечно же, процесс с правами Системы. Теперь пишем небольшую прогу, и запускаем ее с этой командной строки. Код (C): if(SHTestTokenMembership(NULL, SECURITY_LOCAL_SYSTEM_RID)) log1("This is Sys"); else log1("No Sys"); PSID psidAdmins; SID_IDENTIFIER_AUTHORITY SIDAuthWorld = SECURITY_NT_AUTHORITY; if (!AllocateAndInitializeSid(&SIDAuthWorld,2,SECURITY_BUILTIN_DOMAIN_RID,SECURITY_LOCAL_SYSTEM_RID,0,0,0,0,0,0,&psidAdmins)) { log1("error alloc sid"); ExitProcess(1); } BOOL pb2; if(!CheckTokenMembership(NULL,psidAdmins, &pb2)) { log1("error check token"); ExitProcess(1); } if(pb2) log1("This is sys2"); else log1("No sys2"); Два способа проверку на систем - и оба не работают (но работают в виста+). Почему такое может быть, ведь процесс же системный?
M0rg0t, попробуйте проверить следующим образом: Код (C++): BYTE Sid [SECURITY_MAX_SID_SIZE]; DWORD SidSize = SECURITY_MAX_SID_SIZE; if (!CreateWellKnownSid(WinLocalSystemSid, NULL, (PSID)&Sid, &SidSize)){ printf("CreateWellKnownSid failed, error code: 0x%0.8lX", GetLastError()); goto Cleanup; } BOOL bSidPresent; if (!CheckTokenMembership(NULL, (PSID)&Sid, &bSidPresent)) { printf("CheckTokenMembership failed, error code: 0x%0.8lX", GetLastError()); goto Cleanup; } MessageBox(NULL, (bSidPresent) ? L"SYSTEM" : L"NO SYSTEM", NULL, 0);