Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En el código de ejemplo siguiente se usa la función EnumProcesses para recuperar el identificador de proceso de cada objeto de proceso del sistema. A continuación, se llama a EnumProcessModules para obtener cada nombre de proceso e imprimirlo.
Nota
Para los procesos de 64 bits, use la función 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 función principal obtiene una lista de procesos mediante la función EnumProcesses . Para cada proceso, main llama a la función PrintProcessNameAndID , pasando el identificador del proceso. PrintProcessNameAndID llama a su vez a la función OpenProcess para obtener el identificador del proceso. Si se produce un error en OpenProcess , la salida muestra el nombre del proceso como <desconocido>. Por ejemplo, OpenProcess produce un error en los procesos Idle y CSRSS porque sus restricciones de acceso impiden que el código de nivel de usuario los abra. A continuación, PrintProcessNameAndID llama a la función EnumProcessModules para obtener los identificadores del módulo. Por último, PrintProcessNameAndID llama a la función GetModuleBaseName para obtener el nombre del archivo ejecutable y muestra el nombre junto con el identificador de proceso.