Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Il codice di esempio seguente usa la funzioneEnumProcesses per recuperare l'identificatore del processo per ogni oggetto processo nel sistema. EnumProcessModules viene quindi chiamato per ottenere ogni nome di processo e stamparlo.
Nota
Per i processi a 64 bit, usare la funzione 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;
}
La funzione main ottiene un elenco di processi usando la funzione EnumProcesses. Per ogni processo, main chiama la funzione PrintProcessNameAndID, passando l'identificatore del processo. PrintProcessNameAndID chiama a sua volta la funzioneOpenProcessper ottenere l'handle di processo. Se OpenProcess ha esito negativo, l'output visualizza il nome del processo come <sconosciuto>. Ad esempio, OpenProcess ha esito negativo per i processi Idle e CSRSS perché le restrizioni di accesso impediscono l'apertura del codice a livello di utente. Successivamente, PrintProcessNameAndID chiama la funzioneEnumProcessModulesper ottenere gli handle del modulo. Infine, PrintProcessNameAndID chiama la funzioneGetModuleBaseNameper ottenere il nome del file eseguibile e visualizza il nome insieme all'identificatore del processo.