يؤدي إلغاء تم تحميله ملف DLL المحملة بتأخير
تأخير-تحميل الافتراضية التي يوفرها المساعد التحقق مما إذا كان واصفات تأخير-تحميل مؤشر ونسخة من الجدول العنوان استيراد الأصلي (IAT) في الحقل pUnloadIAT. لذلك، سيتم حفظ مؤشر في قائمة للاستيراد تأخير واصف. بما يمكن من دالة المساعد إلى العثور على DLL باستخدام الاسم إلى اعتماد إلغاء تحميل مكتبة الارتباط الديناميكي ذلك بوضوح.
فيما يلي بني المقترن و المتداخلة لوضوح يؤدي إلغاء تم تحميله ملف 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 هو المطبقة باستخدام فئة C + + يستخدم LocalAlloc وتطبيقات LocalFree من جديد الخاصة به والعامل يحذف على التوالي. هذه خيارات التي يتم الاحتفاظ بها في قائمة مرتبطة قياسية باستخدام __puiHead كرأس القائمة.
سيحاول الاتصال __FUnloadDelayLoadedDLL العثور على اسم التي توفرها في lهوt لتم تحميله مكتبات الارتباط الديناميكي (تطابق تام هو المطلوبة). في حالة العثور على نسخة IAT في pUnloadIAT هو نسخ عبر الجزء العلوي من IAT تشغيل لاستعادة مؤشرات تعليمة برمجية للتحويل، المكتبة هو تحرير بواسطة FreeLibrary ، مطابقة UnloadInfo سجل هو غير مرتبطة من lهوt وحذفها صواب هو إرجاع.
وسيطة __FUnloadDelayLoadedDLL2 دالة هو حساسة لحالة الأحرف. على سبيل المثال، قد حدد ما يلي:
__FUnloadDelayLoadedDLL2("user32.DLL");
و لا:
__FUnloadDelayLoadedDLL2("User32.DLL");.