Descarregar uma DLL carregados de atraso
O auxiliar de carregamento de atraso fornecido pelo padrão 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 por nome, para oferecer suporte ao descarregar essa DLL explicitamente.
Eis as funções para descarregar uma DLL carregada atraso explicitamente 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 and LocalFree implementações sistema autônomo seu operador novo e operador Excluir respectivamente.Essas opções são mantidas em uma lista vinculada padrão usando __puiHead sistema autônomo a cabeça da lista.
Chamada __FUnloadDelayLoadedDLL tentará localizar o nome é fornecer na lista de DLLs carregadas (uma correspondência exata é necessária).Se encontrado, a cópia do IAT em pUnloadIAT será copiada sobre o topo do IAT em execução restauração os ponteiros de conversão, a biblioteca é liberada com FreeLibrary, a correspondência UnloadInfo registro é desvinculado da lista e excluídos, e é retornado verdadeiro.
O argumento para a função __FUnloadDelayLoadedDLL2 faz distinção entre maiúsculas e minúsculas.Por exemplo, você poderia especificar:
__FUnloadDelayLoadedDLL2("user32.DLL");
e não:
__FUnloadDelayLoadedDLL2("User32.DLL");.