Einzelnen Beitrag anzeigen

Olli
(Gast)

n/a Beiträge
 
#8

Re: Privilegien enumerieren

  Alt 1. Jun 2006, 02:06
Das geht nicht mit "normalen" Mitteln.

Allerdings haben alle Privilegien einen Integer-Wert, den du als LUID angibst. Da diese LUIDs alle dicht an dicht angeordnet sind und vermutlich in Zukunft auch bleiben werden, könntest du MSDN-Library durchsuchenLookupPrivilegeName solange aufrufen, bis es fehlschlägt - wobei du den Wert des LUID jeweils um eins erhöhst. Danach kannst du dann den benutzerfreundlichen String über MSDN-Library durchsuchenLookupPrivilegeDisplayName herausfinden. Die Zahlenwerte der MSDN-Library durchsuchenLUIDs findest du im DDK. Hier mal die Liste aus meinem 2003er DDK:
Code:
//
// These must be converted to LUIDs before use.
//

#define SE_MIN_WELL_KNOWN_PRIVILEGE      (2L)
#define SE_CREATE_TOKEN_PRIVILEGE        (2L)
#define SE_ASSIGNPRIMARYTOKEN_PRIVILEGE  (3L)
#define SE_LOCK_MEMORY_PRIVILEGE         (4L)
#define SE_INCREASE_QUOTA_PRIVILEGE      (5L)


//
// Unsolicited Input is obsolete and unused.
//

#define SE_UNSOLICITED_INPUT_PRIVILEGE   (6L)


#define SE_MACHINE_ACCOUNT_PRIVILEGE     (6L)
#define SE_TCB_PRIVILEGE                 (7L)
#define SE_SECURITY_PRIVILEGE            (8L)
#define SE_TAKE_OWNERSHIP_PRIVILEGE      (9L)
#define SE_LOAD_DRIVER_PRIVILEGE         (10L)
#define SE_SYSTEM_PROFILE_PRIVILEGE      (11L)
#define SE_SYSTEMTIME_PRIVILEGE          (12L)
#define SE_PROF_SINGLE_PROCESS_PRIVILEGE (13L)
#define SE_INC_BASE_PRIORITY_PRIVILEGE   (14L)
#define SE_CREATE_PAGEFILE_PRIVILEGE     (15L)
#define SE_CREATE_PERMANENT_PRIVILEGE    (16L)
#define SE_BACKUP_PRIVILEGE              (17L)
#define SE_RESTORE_PRIVILEGE             (18L)
#define SE_SHUTDOWN_PRIVILEGE            (19L)
#define SE_DEBUG_PRIVILEGE               (20L)
#define SE_AUDIT_PRIVILEGE               (21L)
#define SE_SYSTEM_ENVIRONMENT_PRIVILEGE  (22L)
#define SE_CHANGE_NOTIFY_PRIVILEGE       (23L)
#define SE_REMOTE_SHUTDOWN_PRIVILEGE     (24L)
#define SE_UNDOCK_PRIVILEGE              (25L)
#define SE_SYNC_AGENT_PRIVILEGE          (26L)
#define SE_ENABLE_DELEGATION_PRIVILEGE   (27L)
#define SE_MANAGE_VOLUME_PRIVILEGE       (28L)
#define SE_IMPERSONATE_PRIVILEGE         (29L)
#define SE_CREATE_GLOBAL_PRIVILEGE       (30L)
#define SE_MAX_WELL_KNOWN_PRIVILEGE      (SE_CREATE_GLOBAL_PRIVILEGE)
Da ein LUID im Grunde ein 64bit signed Integer ist, kannst du die entsprechenden Casts verwenden

Ich würde eine FOR-Schleife mit SE_MIN_WELL_KNOWN_PRIVILEGE als Anfangspunkt nehmen ... oder WHILE oder so.
  Mit Zitat antworten Zitat