Informações do módulo
Um módulo é um arquivo executável ou DLL. Cada processo consiste em um ou mais módulos. Você pode recuperar a lista de identificadores de módulo para um processo chamando a função EnumProcessModules . Essa função preenche uma matriz de valores HMODULE com os identificadores de módulo para o processo especificado. O primeiro módulo é o arquivo executável. Lembre-se de que esses identificadores de módulo provavelmente são de algum outro processo, portanto, você não pode usá-los com funções como GetModuleFileName. No entanto, você pode usar funções PSAPI para obter informações sobre um módulo de outro processo.
O procedimento a seguir descreve como obter informações de módulo de outro processo.
Para obter informações de módulo de outro processo
- Chame a função GetModuleBaseName . Essa função usa um identificador de processo e um identificador de módulo como entrada e preenche um buffer com o nome base de um módulo (por exemplo, Kernel32.dll). Uma função relacionada, GetModuleFileNameEx, usa os mesmos parâmetros que a entrada, mas retorna o caminho completo para o módulo (por exemplo, C:\Windows\System32\Kernel32.dll).
- Chame a função GetModuleInformation . Essa função usa um identificador de processo e um identificador de módulo e preenche uma estrutura MODULEINFO com o endereço de carga do módulo, o tamanho do espaço de endereço linear que ele ocupa e um ponteiro para seu ponto de entrada.
Se um aplicativo exigir informações de módulo para o processo atual, ele deverá usar a função GetModuleFileName em vez das funções do módulo PSAPI. Isso ajuda o desempenho do aplicativo de duas maneiras: a função GetModuleFileName é mais eficiente do que as funções do módulo PSAPI e um aplicativo pode evitar carregar psapi.dll se não usar nenhuma função PSAPI.
As funções GetModuleBaseName e GetModuleFileNameEx são projetadas 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 estiver inicializada ou se a lista de módulos for alterada durante a chamada de função como resultado do carregamento ou descarregamento de DLLs, essas funções poderão falhar ou retornar informações incorretas.