?
Also ich habe jetzt mal versucht mir die Privileg-Token zu holen, aber irgendwie klappt das Auslesen mit GetTokenInformation nicht so ganz, auch verstehe ich den Aufbau der TOKEN_PRIVILEGES Struktur nicht wirlich.
Im Header steht dort in der Struktur ein Array der Größe "ANYSIZE", welches einfach ein #define auf 1 ist.
Aber beim Abrufen benötigt GetTokenInformation 64Bytes und speichert mir 5Token in dem Array (da ich mit malloc anfordere ist das kein Problem).
Aber das vorher aktivierte Debug-Privileg fehlt.
Hier mal mein code:
int are_debug_privileges_enabled()
{
HANDLE cur_process = GetCurrentProcess();
HANDLE cur_prc_token;
TOKEN_PRIVILEGES *tok_privs = NULL;
DWORD needed_bytes = 0;
unsigned i; /* loop counter */
if( !OpenProcessToken( cur_process, TOKEN_QUERY, &cur_prc_token ) )
return 0;
/* Retrieve the number of bytes needed to store the privileges. */
GetTokenInformation( cur_prc_token, TokenPrivileges, NULL, 0, &needed_bytes );
tok_privs = malloc( needed_bytes );
if( !tok_privs )
{
CloseHandle( cur_prc_token );
return 0;
}
if( !GetTokenInformation( cur_prc_token, TokenPrivileges, tok_privs,
needed_bytes, &needed_bytes ) )
{
free( tok_privs );
CloseHandle( cur_prc_token );
return 0;
}
for( i = 0; i < tok_privs->PrivilegeCount; ++i )
{
LUID_AND_ATTRIBUTES cur = tok_privs->Privileges[ i ];
TCHAR priv_name[ MAX_PATH ];
DWORD size = sizeof( priv_name ) / sizeof( TCHAR );
if( !LookupPrivilegeName( NULL, &cur.Luid, priv_name, &size ) )
continue;
if( !_tcscmp( priv_name, _T( "SeDebugPrivilege" ) ) )
{
free( tok_privs );
CloseHandle( cur_prc_token );
return 1;
}
}
free( tok_privs );
CloseHandle( cur_prc_token );
return 0;
}
Habt ihr irgendwelche Ideen, was da falsch laufen könnte?