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");.