#include #include int main() { HANDLE hToken; PTOKEN_PRIVILEGES pTokenPrivileges; char szPrivilegeName[256]; char szDisplayName[256]; DWORD dwLength; DWORD dwLanguageId; DWORD i; if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken)) { return 1; } GetTokenInformation(hToken, TokenPrivileges, NULL, 0, &dwLength); pTokenPrivileges = (PTOKEN_PRIVILEGES)LocalAlloc(LPTR, dwLength); if (pTokenPrivileges == NULL) { CloseHandle(hToken); return 1; } GetTokenInformation(hToken, TokenPrivileges, pTokenPrivileges, dwLength, &dwLength); for (i = 0; i < pTokenPrivileges->PrivilegeCount; i++) { dwLength = sizeof(szPrivilegeName)/sizeof(szPrivilegeName[0]); LookupPrivilegeNameA(NULL, &pTokenPrivileges->Privileges[i].Luid, szPrivilegeName, &dwLength); dwLength = sizeof(szDisplayName)/sizeof(szPrivilegeName[0]); LookupPrivilegeDisplayNameA(NULL, szPrivilegeName, szDisplayName, &dwLength, &dwLanguageId); puts("----------------------------------------------------------------------"); printf("PrivilegeName: %s\n", szPrivilegeName); printf("DisplayName: %s\n", szDisplayName); printf("Enable: %s\n\n", pTokenPrivileges->Privileges[i].Attributes & SE_PRIVILEGE_ENABLED ? "True" : "False"); } CloseHandle(hToken); LocalFree(pTokenPrivileges); return 0; }