다음을 통해 공유


알림 후크

알림 후크는 도우미 루틴에서 다음 동작이 발생하기 바로 전에 호출됩니다.

  • 라이브러리에 대한 저장 핸들이 이미 로드되어 있는지 확인합니다.

  • DLL을 로드하기 위해 LoadLibrary가 호출됩니다.

  • 프로시저의 주소를 가져오기 위해 GetProcAddress가 호출됩니다.

  • 지연 가져오기 로드 썽크로 제어를 반환합니다.

알림 후크는 다음과 같은 경우에 활성화됩니다.

  • 알림을 수신하는 사용자 함수를 가리키도록 초기화되는 __pfnDliNotifyHook2 포인터의 새 정의를 제공하는 경우

    또는

  • 프로그램이 지연 로드 중인 DLL을 호출하기 전에 __pfnDliNotifyHook2 포인터를 해당 후크 함수로 설정하는 경우

알림이 dliStartProcessing인 경우 후크 함수는 다음 값을 반환합니다.

  • NULL
    기본 도우미가 DLL 로드를 처리합니다.알림 목적으로만 호출하는 경우에 유용합니다.

  • 함수 포인터
    기본 지연 로드 처리를 생략합니다.이렇게 하면 사용자가 직접 작성한 로드 처리기를 제공할 수 있습니다.

알림이 dliNotePreLoadLibrary인 경우 후크 함수는 다음 값을 반환합니다.

  • 0 - 알림 목적으로만 사용하는 경우

  • 로드된 DLL의 HMODULE - DLL 자체를 로드한 경우

알림이 dliNotePreGetProcAddress인 경우 후크 함수는 다음 값을 반환할 수 있습니다.

  • 0 - 알림 목적으로만 사용하는 경우

  • 가져온 함수의 주소 - 후크 함수가 주소 자체를 가져오는 경우

알림이 dliNoteEndProcessing인 경우 후크 함수의 반환 값은 무시됩니다.

이 포인터가 0이 아닌 값으로 초기화되면 지연 로드 도우미는 실행하는 동안 특정 알림 시점에서 함수를 호출합니다.함수 포인터는 다음과 같이 정의됩니다.

// The "notify hook" gets called for every call to the
// delay load helper.  This allows a user to hook every call and
// skip the delay load helper entirely.
//
// dliNotify == {
//  dliStartProcessing |
//  dliNotePreLoadLibrary  |
//  dliNotePreGetProc |
//  dliNoteEndProcessing}
//  on this call.
//
ExternC
PfnDliHook   __pfnDliNotifyHook2;

// This is the failure hook, dliNotify = {dliFailLoadLib|dliFailGetProc}
ExternC
PfnDliHook   __pfnDliFailureHook2;

알림은 알림 값과 함께 DelayLoadInfo 구조체 형식으로 후크 함수에 전달됩니다.이 데이터는 지연 로드 도우미 루틴이 사용하는 데이터와 동일합니다.알림 값은 구조체 및 상수 정의에 정의된 값 중 하나입니다.

참고 항목

개념

오류 처리 및 알림