Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Im folgenden Beispielcode wird die EnumProcesses-Funktion verwendet, um den Prozessbezeichner für jedes Prozessobjekt im System abzurufen. EnumProcessModules wird dann aufgerufen, um jeden Prozessnamen abzurufen und zu drucken.
Hinweis
Verwenden Sie für 64-Bit-Prozesse die Funktion EnumProcessModulesEx .
#include <windows.h>
#include <stdio.h>
#include <tchar.h>
#include <psapi.h>
// To ensure correct resolution of symbols, add Psapi.lib to TARGETLIBS
// and compile with -DPSAPI_VERSION=1
void PrintProcessNameAndID( DWORD processID )
{
TCHAR szProcessName[MAX_PATH] = TEXT("<unknown>");
// Get a handle to the process.
HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |
PROCESS_VM_READ,
FALSE, processID );
// Get the process name.
if (NULL != hProcess )
{
HMODULE hMod;
DWORD cbNeeded;
if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod),
&cbNeeded) )
{
GetModuleBaseName( hProcess, hMod, szProcessName,
sizeof(szProcessName)/sizeof(TCHAR) );
}
}
// Print the process name and identifier.
_tprintf( TEXT("%s (PID: %u)\n"), szProcessName, processID );
// Release the handle to the process.
CloseHandle( hProcess );
}
int main( void )
{
// Get the list of process identifiers.
DWORD aProcesses[1024], cbNeeded, cProcesses;
unsigned int i;
if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) )
{
return 1;
}
// Calculate how many process identifiers were returned.
cProcesses = cbNeeded / sizeof(DWORD);
// Print the name and process identifier for each process.
for ( i = 0; i < cProcesses; i++ )
{
if( aProcesses[i] != 0 )
{
PrintProcessNameAndID( aProcesses[i] );
}
}
return 0;
}
Die Standard-Funktion ruft mithilfe der EnumProcesses-Funktion eine Liste von Prozessen ab. Für jeden Prozess ruft Standard die PrintProcessNameAndID-Funktion auf und übergibt ihr den Prozessbezeichner. PrintProcessNameAndID wiederum ruft die OpenProcess-Funktion auf, um das Prozesshandle abzurufen. Wenn OpenProcess fehlschlägt, wird der Prozessname in der Ausgabe als <unbekannt angezeigt>. Beispielsweise schlägt OpenProcess für die Prozesse Im Leerlauf und CSRSS fehl, da deren Zugriffseinschränkungen verhindern, dass Code auf Benutzerebene sie öffnet. Als Nächstes ruft PrintProcessNameAndID die EnumProcessModules-Funktion auf, um die Modulhandles abzurufen. Schließlich ruft PrintProcessNameAndID die GetModuleBaseName-Funktion auf, um den Namen der ausführbaren Datei abzurufen und den Namen zusammen mit dem Prozessbezeichner anzuzeigen.