Hook di notifica
Gli hook di notifica vengono chiamati prima che nella routine di supporto vengano effettuate le seguenti azioni:
Verifica dell'avvenuto caricamento dell'handle memorizzato per la libreria.
Chiamata a LoadLibrary per tentare di caricare la DLL.
Chiamata a GetProcAddress per tentare di ottenere l'indirizzo della routine.
Ritorno al thunk di caricamento delle importazioni ritardate.
L'hook di notifica viene attivato:
Fornendo una nuova definizione del puntatore __pfnDliNotifyHook2, inizializzato per puntare alla funzione dell'utente che riceve le notifiche.
In alternativa
Impostando il puntatore __pfnDliNotifyHook2 sulla funzione hook prima delle chiamate alla DLL sottoposta a caricamento ritardato.
Se la notifica è dliStartProcessing, il valore restituito dalla funzione hook può essere:
NULL
La funzione di supporto predefinita consente di gestire il caricamento della DLL. Utile da chiamare per ottenere informazioni.Puntatore a funzione
Ignorare la gestione predefinita del caricamento ritardato per poter fornire un gestore di caricamento personalizzato.
Se la notifica è dliNotePreLoadLibrary, il valore restituito dalla funzione hook può essere:
0 per ricevere solo notifiche informative.
L'HMODULE della DLL caricata, se è stata caricata la DLL.
Se la notifica è dliNotePreGetProcAddress, il valore restituito dalla funzione hook può essere:
0 per ricevere solo notifiche informative.
L'indirizzo della funzione importata, se ottenuto dalla funzione hook.
Se la notifica è dliNoteEndProcessing, il valore restituito della funzione hook verrà ignorato.
Se questo puntatore è inizializzato (diverso da zero), il supporto del caricamento ritardato consentirà di richiamare la funzione in corrispondenza di determinati punti di notifica durante l'esecuzione. La definizione del puntatore a funzione è la seguente:
// 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;
Le notifiche, con il relativo valore, vengono passate alla funzione hook in una struttura DelayLoadInfo. I dati sono identici a quelli utilizzati dalla routine di supporto del caricamento ritardato. Il valore di notifica sarà uno dei valori definiti in Struttura e definizioni di costanti.