Compartilhar via


Descarregar uma DLL atrasada-carregada

O auxiliar de carregamento de atraso padrão fornecido pelo verifica se os descritores de carregamento de atraso tem um ponteiro e uma cópia da tabela de endereço de importação original (IAT) no campo pUnloadIAT. Em caso afirmativo, ele salvará um ponteiro em uma lista para o descritor de atraso de importação. Isso permite que a função auxiliar localizar a DLL pelo nome, para oferecer suporte a descarregamento essa DLL explicitamente.

Aqui estão as funções para explicitamente descarregar uma DLL atrasada-carregada e estruturas associadas:

//
// Unload support from delayimp.h
//

// routine definition; takes a pointer to a name to unload

ExternC
BOOL WINAPI
__FUnloadDelayLoadedDLL2(LPCSTR szDll);

// structure definitions for the list of unload records
typedef struct UnloadInfo * PUnloadInfo;
typedef struct UnloadInfo {
    PUnloadInfo     puiNext;
    PCImgDelayDescr pidd;
    } UnloadInfo;

// from delayhlp.cpp
// the default delay load helper places the unloadinfo records in the 
// list headed by the following pointer.
ExternC
PUnloadInfo __puiHead;

A estrutura UnloadInfo é implementada usando uma classe C++ que usa LocalAlloc e LocalFree implementações como seu operador nova e o operador Excluir respectivamente. Essas opções são mantidas em uma lista vinculada padrão, usando o __puiHead como a cabeça da lista.

__FUnloadDelayLoadedDLL de chamada tentará localizar o nome é fornecer na lista de DLLs carregadas (uma correspondência exata é necessária). Se encontrado, a cópia do IAT no pUnloadIAT será copiada sobre o IAT em execução para restaurar os ponteiros de conversão, a biblioteca é liberada com FreeLibrary, a correspondência UnloadInfo registro é desvinculado da lista e excluído, e é retornado verdadeiro.

O argumento para o __FUnloadDelayLoadedDLL2 da função diferencia maiúsculas de minúsculas. Por exemplo, você especificaria:

__FUnloadDelayLoadedDLL2("user32.DLL");

e não:

__FUnloadDelayLoadedDLL2("User32.DLL");.

Consulte também

Referência

Noções básicas sobre a função auxiliar