Zwalnianie bibliotek DLL załadowanych z opóźnieniem
Pomocnik obciążenia opóźnienie domyślny podany sprawdza, czy deskryptory opóźnienie obciążenia mają wskaźnik i kopię pierwotnej tabeli Adres importu (IAT) w polu pUnloadIAT.Jeśli tak, zapisze wskaźnik na liście do deskryptora opóźnienie importu.Umożliwia to funkcja pomocnika, aby znaleźć biblioteki DLL nazwy, aby obsługiwać jawnie rozładunku tej biblioteki DLL.
Oto towarzyszących budowli i funkcje jawnie wyładowania DLL załadowane opóźnienia:
//
// 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;
Struktura UnloadInfo jest implementowane za pomocą klasy języka C++, która używa Funkcja LocalAlloc i funkcji LocalFree implementacje jako jego operatora Nowy i operator usunąć odpowiednio.Opcje te są przechowywane w standardowych połączonej listy przy użyciu __puiHead jako czele listy.
__FUnloadDelayLoadedDLL telefonicznej będzie próbował znaleźć nazwę świadczenia na liście ładowanych bibliotek DLL (wymagana jest dokładny odpowiednik).Jeżeli znalezione, kopię IAT w pUnloadIAT jest kopiowany na wierzchu IAT uruchomione do przywrócenia wskaźniki thunk biblioteki zostanie zwolniona z FreeLibrary, dopasowanie UnloadInfo rekord jest niepołączone z listy i usunąć i zwracana jest wartość PRAWDA.
Argument do funkcji __FUnloadDelayLoadedDLL2 jest uwzględniana wielkość liter.Na przykład możesz określić:
__FUnloadDelayLoadedDLL2("user32.DLL");
a nie:
__FUnloadDelayLoadedDLL2("User32.DLL");.