지연 로드된 DLL 언로드

기본적으로 제공되는 지연 로드 도우미는 지연 로드 설명자에 포인터가 있는지와 pUnloadIAT 필드에 원본 IAT(가져오기 주소 테이블)의 복사본이 있는지 여부를 확인합니다.포인터 및 복사본이 있는 경우 도우미는 포인터를 가져오기 지연 설명자에 목록으로 저장합니다.이렇게 하면 도우미 함수가 이름으로 DLL을 찾을 수 있으므로 해당 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 구조체는 LocalAllocLocalFree 구현을 각각 new 연산자와 delete 연산자로 사용하는 C++ 클래스로 구현되었습니다.이 옵션은 __puiHead를 목록의 헤드로 사용하는 표준 링크 목록으로 유지됩니다.

__FUnloadDelayLoadedDLL을 호출하면 이 함수는 로드된 DLL의 목록에서 사용자가 지정한 이름을 찾습니다. 이 경우 정확히 일치하는 이름만 찾습니다.이름을 찾으면 썽크 포인터를 복원하기 위해 pUnloadIAT의 IAT 복사본이 실행 중인 IAT의 맨 위에 복사되고 FreeLibrary를 사용하여 라이브러리가 해제되며 일치하는 UnloadInfo 레코드의 링크가 목록에서 끊겨 레코드가 삭제된 다음 TRUE가 반환됩니다.

__FUnloadDelayLoadedDLL2 함수의 인수는 대/소문자를 구분합니다.예를 들어, 다음과 같이 지정합니다.

__FUnloadDelayLoadedDLL2("user32.DLL");

다음은 잘못 지정한 경우입니다.

__FUnloadDelayLoadedDLL2("User32.DLL");.

참고 항목

참조

도우미 함수 이해