Função EnumProcessModules (psapi.h)
Recupera um identificador para cada módulo no processo especificado.
Para controlar se um aplicativo de 64 bits enumera módulos de 32 bits, módulos de 64 bits ou ambos os tipos de módulos, use a função EnumProcessModulesEx .
Sintaxe
BOOL EnumProcessModules(
[in] HANDLE hProcess,
[out] HMODULE *lphModule,
[in] DWORD cb,
[out] LPDWORD lpcbNeeded
);
Parâmetros
[in] hProcess
Um identificador para o processo.
[out] lphModule
Uma matriz que recebe a lista de identificadores de módulo.
[in] cb
O tamanho da matriz lphModule , em bytes.
[out] lpcbNeeded
O número de bytes necessários para armazenar todos os identificadores de módulo na matriz lphModule .
Valor retornado
Se a função for bem-sucedida, o valor retornado será diferente de zero.
Se a função falhar, o valor retornado será zero. Para obter informações de erro estendidas, chame GetLastError.
Comentários
A função EnumProcessModules foi projetada principalmente para uso por depuradores e aplicativos semelhantes que devem extrair informações de módulo de outro processo. Se a lista de módulos no processo de destino estiver corrompida ou ainda não tiver sido inicializada ou se a lista de módulos for alterada durante a chamada de função como resultado de DLLs sendo carregadas ou descarregadas, EnumProcessModules poderá falhar ou retornar informações incorretas.
É uma boa ideia especificar uma grande matriz de valores HMODULE , pois é difícil prever quantos módulos haverá no processo no momento em que você chamar EnumProcessModules. Para determinar se a matriz lphModule é muito pequena para manter todas as alças de módulo para o processo, compare o valor retornado em lpcbNeeded com o valor especificado em cb. Se lpcbNeeded for maior que cb, aumente o tamanho da matriz e chame EnumProcessModules novamente.
Para determinar quantos módulos foram enumerados pela chamada para EnumProcessModules, divida o valor resultante no parâmetro lpcbNeeded por sizeof(HMODULE)
.
A função EnumProcessModules não recupera identificadores para módulos que foram carregados com o LOAD_LIBRARY_AS_DATAFILE ou sinalizadores semelhantes. Para obter mais informações, consulte LoadLibraryEx.
Não chame CloseHandle em nenhum dos identificadores retornados por essa função. As informações vêm de um instantâneo, portanto, não há recursos a serem liberados.
Se essa função for chamada de um aplicativo de 32 bits em execução no WOW64, ela só poderá enumerar os módulos de um processo de 32 bits. Se o processo for um processo de 64 bits, essa função falhará e o último código de erro será ERROR_PARTIAL_COPY (299).
Para obter uma instantâneo de processos especificados e os heaps, módulos e threads usados por esses processos, use a função CreateToolhelp32Snapshot.
A partir do Windows 7 e do Windows Server 2008 R2, o Psapi.h estabelece números de versão para as funções PSAPI. O número de versão do PSAPI afeta o nome usado para chamar a função e a biblioteca que um programa deve carregar.
Se PSAPI_VERSION for 2 ou superior, essa função será definida como K32EnumProcessModules em Psapi.h e exportada em Kernel32.lib e Kernel32.dll. Se PSAPI_VERSION for 1, essa função será definida como EnumProcessModules no Psapi.h e exportada em Psapi.lib e Psapi.dll como um wrapper que chama K32EnumProcessModules.
Os programas que devem ser executados em versões anteriores do Windows, bem como no Windows 7 e versões posteriores, sempre devem chamar essa função como EnumProcessModules. Para garantir a resolução correta de símbolos, adicione Psapi.lib à macro TARGETLIBS e compile o programa com -DPSAPI_VERSION=1. Para usar a vinculação dinâmica em tempo de execução, carregue Psapi.dll.
Exemplos
Para obter um exemplo, consulte Enumerando todos os processos ou enumerando todos os módulos para um processo.
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Windows XP [somente aplicativos da área de trabalho] |
Servidor mínimo com suporte | Windows Server 2003 [somente aplicativos da área de trabalho] |
Plataforma de Destino | Windows |
Cabeçalho | psapi.h |
Biblioteca | Kernel32.lib no Windows 7 e Windows Server 2008 R2; Psapi.lib (se PSAPI_VERSION=1) no Windows 7 e no Windows Server 2008 R2; Psapi.lib no Windows Server 2008, Windows Vista, Windows Server 2003 e Windows XP |
DLL | Kernel32.dll no Windows 7 e no Windows Server 2008 R2; Psapi.dll (se PSAPI_VERSION=1) no Windows 7 e no Windows Server 2008 R2; Psapi.dll no Windows Server 2008, Windows Vista, Windows Server 2003 e Windows XP |