告知攔截

在 Helper 常式中,告知攔截會在下列動作執行之前被呼叫:

  • 檢查程式庫中儲存的控制代碼,以確認是否已經載入。

  • 呼叫 LoadLibrary 以試著載入 DLL。

  • 呼叫 GetProcAddress 以試著取得程序的位址。

  • 傳回延遲匯入載入 Thunk。

告知攔截以下列方法啟用:

  • 為指標 __pfnDliNotifyHook2 提供新的定義,此指標被初始化為指向您自己接收告知的函式。

    -或-

  • 藉由在對程式延遲載入的 DLL 進行任何呼叫之前,將指標 __pfnDliNotifyHook2 設定為指向攔截函式。

如果告知是 dliStartProcessing,攔截函式可傳回:

  • NULL
    預設 Helper 處理 DLL 的載入。只有因為資訊目地而呼叫時,才會有效用。

  • 函式指標
    略過預設的延遲載入處理。這讓您可以提供自己的載入處理常式。

如果告知是 dliNotePreLoadLibrary,攔截函式可傳回:

  • 如果它只需要資訊告知則傳回 0。

  • 如果它自行載入 DLL 則傳回載入 DLL 的 HMODULE。

如果告知是 dliNotePreGetProcAddress,攔截函式可傳回:

  • 如果它只需要資訊告知則傳回 0。

  • 如果攔截函式自行取得位址,則傳回匯入函式的位址。

如果告知是 dliNoteEndProcessing,攔截函式的傳回值將被忽略。

如果這個指標已經初始化 (非零),則延遲載入 Helper 將於整個執行期間的特定告知點叫用 (Invoke) 函式。函式指標具有下列定義:

// 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 結構中連同告知值傳遞到攔截函式。這個資料與延遲載入 Helper 常式所使用的資料完全相同。告知值為結構和常數定義中所定義值的其中一個。

請參閱

概念

錯誤處理和告知