Función EnumProcessModules (psapi.h)
Recupera un identificador para cada módulo del proceso especificado.
Para controlar si una aplicación de 64 bits enumera módulos de 32 bits, módulos de 64 bits o ambos tipos de módulos, use la función EnumProcessModulesEx .
Sintaxis
BOOL EnumProcessModules(
[in] HANDLE hProcess,
[out] HMODULE *lphModule,
[in] DWORD cb,
[out] LPDWORD lpcbNeeded
);
Parámetros
[in] hProcess
Identificador del proceso.
[out] lphModule
Matriz que recibe la lista de identificadores de módulo.
[in] cb
Tamaño de la matriz lphModule , en bytes.
[out] lpcbNeeded
Número de bytes necesarios para almacenar todos los identificadores de módulo en la matriz lphModule .
Valor devuelto
Si la función se realiza correctamente, el valor devuelto es distinto de cero.
Si la función no se realiza correctamente, el valor devuelto es cero. Para obtener información de error extendida, llame a GetLastError.
Comentarios
La función EnumProcessModules está diseñada principalmente para su uso por los depuradores y aplicaciones similares que deben extraer información del módulo de otro proceso. Si la lista de módulos del proceso de destino está dañada o aún no se ha inicializado, o si la lista de módulos cambia durante la llamada de función como resultado de que los archivos DLL se cargan o se descargan, Es posible que EnumProcessModules produzca un error o devuelva información incorrecta.
Es recomendable especificar una matriz grande de valores HMODULE , ya que es difícil predecir cuántos módulos habrá en el proceso en el momento en que se llama a EnumProcessModules. Para determinar si la matriz lphModule es demasiado pequeña para contener todos los identificadores de módulo para el proceso, compare el valor devuelto en lpcbNeeded con el valor especificado en cb. Si lpcbNeeded es mayor que cb, aumente el tamaño de la matriz y llame a EnumProcessModules de nuevo.
Para determinar cuántos módulos se enumeraron mediante la llamada a EnumProcessModules, divida el valor resultante en el parámetro lpcbNeeded por sizeof(HMODULE)
.
La función EnumProcessModules no recupera identificadores de los módulos cargados con la LOAD_LIBRARY_AS_DATAFILE o marcas similares. Para obtener más información, consulte LoadLibraryEx.
No llame a CloseHandle en ninguno de los identificadores devueltos por esta función. La información procede de una instantánea, por lo que no hay recursos que se liberen.
Si se llama a esta función desde una aplicación de 32 bits que se ejecuta en WOW64, solo puede enumerar los módulos de un proceso de 32 bits. Si el proceso es un proceso de 64 bits, se produce un error en esta función y el último código de error es ERROR_PARTIAL_COPY (299).
Para tomar una instantánea de los procesos especificados y los montones, módulos y subprocesos usados por estos procesos, use la función CreateToolhelp32Snapshot .
A partir de Windows 7 y Windows Server 2008 R2, Psapi.h establece números de versión para las funciones psapi. El número de versión de PSAPI afecta al nombre usado para llamar a la función y la biblioteca que debe cargar un programa.
Si PSAPI_VERSION es 2 o superior, esta función se define como K32EnumProcessModules en Psapi.h y exportada en Kernel32.lib y Kernel32.dll. Si PSAPI_VERSION es 1, esta función se define como EnumProcessModules en Psapi.h y exportada en Psapi.lib y Psapi.dll como contenedor que llama a K32EnumProcessModules.
Los programas que deben ejecutarse en versiones anteriores de Windows, así como Windows 7 y versiones posteriores, siempre deben llamar a esta función como EnumProcessModules. Para garantizar la resolución correcta de símbolos, agregue Psapi.lib a la macro TARGETLIBS y compile el programa con -DPSAPI_VERSION=1. Para usar la vinculación dinámica en tiempo de ejecución, cargue Psapi.dll.
Ejemplos
Para obtener un ejemplo, vea Enumerar todos los procesos o Enumerar todos los módulos para un proceso.
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows XP [solo aplicaciones de escritorio] |
Servidor mínimo compatible | Windows Server 2003 [solo aplicaciones de escritorio] |
Plataforma de destino | Windows |
Encabezado | psapi.h |
Library | Kernel32.lib en Windows 7 y Windows Server 2008 R2; Psapi.lib (si PSAPI_VERSION=1) en Windows 7 y Windows Server 2008 R2; Psapi.lib en Windows Server 2008, Windows Vista, Windows Server 2003 y Windows XP |
Archivo DLL | Kernel32.dll en Windows 7 y Windows Server 2008 R2; Psapi.dll (si PSAPI_VERSION=1) en Windows 7 y Windows Server 2008 R2; Psapi.dll en Windows Server 2008, Windows Vista, Windows Server 2003 y Windows XP |