Sdílet prostřednictvím


Uvolnění knihovny DLL s odloženým načtením

Pomocníka, který dodává výchozí načtení zpoždění zkontroluje, zda popisovače načtení zpoždění mají ukazatel a kopii původní tabulku importních adres (IAT) v poli pUnloadIAT.V takovém případě uloží ukazatel v seznamu popisovačů zpoždění import.Díky podpůrná funkce Najít podle názvu pro podporu této knihovny DLL explicitně uvolnění knihovny DLL.

Zde jsou přidružené struktur a funkcí pro explicitně uvolnění zpoždění načíst knihovnu DLL:

//
// 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;

UnloadInfo struktura je implementována pomocí třídy C++, který používá LocalAlloc a LocalFree implementace jako jeho operátor nové a operátor Odstranit v uvedeném pořadí.Tyto možnosti se nacházejí v standardní použití __puiHead jako vedoucí seznamu propojeného seznamu.

Volání __FUnloadDelayLoadedDLL se pokusí vyhledat název zadáte v seznamu načtení knihovny DLL (je požadována přesná shoda).Pokud je nalezen, je zkopírován kopii IAT v pUnloadIAT nad horní části spuštěné IAT obnovit převod ukazatele, je uvolněno knihovny s FreeLibrary, odpovídající UnloadInfo je odpojeny ze seznamu a odstranit záznam a PRAVDA nebo NEPRAVDA.

Argument funkce __FUnloadDelayLoadedDLL2 je velká a malá písmena.Například byste měli zadat:

__FUnloadDelayLoadedDLL2("user32.DLL");

a ne:

__FUnloadDelayLoadedDLL2("User32.DLL");.

Viz také

Referenční dokumentace

Základní informace o podpůrné funkci