2011-01-04 6 views
0

Ich versuche, Systemdienstberechtigung zu verwenden, um den Titel eines Fensters und seinen Prozessnamen und seine Prozess-ID in Windows 7 abzurufen. Dies schlägt jedoch fehl.Systemdienstberechtigung zum Abrufen von Prozessinformationen in Windows 7

Wie kann ich den offenen Prozess verwenden, um Prozessinformationen über das Systemdienstprivileg zu erhalten?

+0

1. Was ist "Systemdienstprivileg"? 2. Was meinst du mit "versagt"? 3. Was ist "offener Prozess"? Versuchen Sie Prozessinformationen von einem Fenster oder einem Prozess-Handle zu erhalten? – wj32

Antwort

0

Um weitere Prozessinformationen zu erhalten, müssen Sie SeDebugPrivilege für Ihr Programm aktivieren.

Dieser Code wird es für Sie aktivieren:

{ 
    int    err    = 0; 
    int    result    = 0; 
    HANDLE   token    = NULL; 
    HANDLE   proc_handle   = NULL; 
    TOKEN_PRIVILEGES  priv; 

    /*Get the open process handle to the process*/ 
    proc_handle = GetCurrentProcess(); 

    /* Get a token for this process.*/ 
    result = OpenProcessToken (proc_handle, TOKEN_ALL_ACCESS, &token); 
    if (! result) 
    { 
    /* return failure */ 
    } 

    /* Get the LUID for the SeDebugPrivilege privilege.*/ 
    result = LookupPrivilegeValue (NULL, SE_DEBUG_NAME, 
     &priv.Privileges[0].Luid); 
    if (! result) 
    { 
    err = qerr_win32toq (GetLastError()); 
    printf("LookupPrivilegeValue failed with err: %d", err); 

    goto out; 
    } 

    priv.PrivilegeCount = 1; 
    priv.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; 

    result = AdjustTokenPrivileges (token, FALSE, &priv, 0, (PTOKEN_PRIVILEGES) 
     NULL, 0); 
    if (! result) 
    { 
    err = qerr_win32toq (GetLastError()); 
    printf ("AdjustTokenPrivilege failed with err: %d", err); 

    goto out; 
    } 

out: 
    if (token) 
    CloseHandle (token); 

    return err; 
} 
+0

Wenn das OP sein Programm wirklich als Dienst ausführt, ist diese Antwort nicht relevant, da Dienste, die als 'SYSTEM' ausgeführt werden, standardmäßig 'SeDebugPrivilege' aktiviert haben. – wj32