__pfnDliNotifyHook, __pfnDliFailureHook
Nach oben zu delayimp.h - Index
Header-Datei
delayimp.h
Kategorie
Benachrichtigungsroutinen für Hooks zum verzögerten Laden
Prototyp
typedef FARPROC (WINAPI *DelayedLoadHook)(dliNotification dliNotify,
DelayLoadInfo * pdli);
Beschreibung
Der Mechanismus zum verzögerten Laden stellt zwei Hooks bereit, mit denen das Laufzeitverhalten einer verzögert geladenen DLL modifiziert werden kann. Durch Erstellen eigener Hook-Funktionen entsprechend der unten angegebenen Funktionssignatur und Zuweisen dieser Funktionen zu den beiden Hooks, kann der Vorgang des verzögerten Ladens abgeändert werden.
DelayLoadProc (Struktur)
typedef struct DelayLoadProc
{
BOOL fImportByName;
union
{
LPCSTR szProcName;
DWORD dwOrdinal;
};
} DelayLoadProc;
ImgDelayDescr (Struktur)
typedef struct ImgDelayDescr
{
DWORD grAttrs; /* Attribute */
LPCSTR szName; /* Zeiger auf den DLL-Namen */
HMODULE hmod; /* Adresse des Modul-Handles */
IMAGE_THUNK_DATA * pIAT; /* Adresse der IAT */
IMAGE_THUNK_DATA * pINT; /* Adresse des INT */
IMAGE_THUNK_DATA * pBoundIAT; /* Adresse der optional gebundenen IAT */
IMAGE_THUNK_DATA * pUnloadIAT; /* Adresse der optionalen Kopie
der ursprünglichen IAT */
DWORD dwTimeStamp; /* 0, wenn nicht gebunden, */
/* O.W. Datums-/Uhrzeitangabe an (Old BIND)
gebundenen DLL */
} ImgDelayDescr;
DelayLoadInfo (Struktur)
typedef struct DelayLoadProc
{
DWORD cb; /* Größe der Struktur */
const ImgDelayDescr * pidd; /* Rohform der Daten (inklusive
allem) */
FARPROC * ppfn; /* Zeigt auf die Adresse der zu
ladenden Funktion */
LPCSTR szDll; /* Name der DLL */
DelayLoadProc dlp; /* Name oder Ordinalzahl der Prozedur */
HMODULE hmodCur; /* hInstance der geladenen DLL
*/
FARPROC pfnCur; /* Die Funktion, die tatsächlich
aufgerufen wird */
DWORD dwLastError;/* Empfangener Fehler (falls
Fehlerbenachrichtigung) */
} DelayLoadInfo, *PDelayLoadInfo;
Import-Hook-Benachrichtigungen für das verzögerte Laden
Die folgende Struktur enthält die Aufzählungen, die für Hook-Benachrichtigungsereignisse definiert sind:
typedef enum
{
dliNoteStartProcessing, /* Hilfsfunktion umgehen oder nur vermerken */
dliNotePreLoadLibrary, /* Wird unmittelbar vor LoadLibrary aufgerufen, */
/* kann mit neuem HMODULE-Rückgabewert überschreiben */
dliNotePreLoadLibrary, /* Wird unmittelbar vor GetProcAddress aufgerufen, */
/* kann mit neuem FARPROC-Rückgabewert überschreiben */
dliFailLoadLibrary, /* DLL konnte nicht geladen werden, */
/* Fehlerbehebung durch Rückgabe eines gültigen HMODULE-Werts */
dliFailGetProcAddress, /* Prozeduradresse konnte nicht ermittelt werden, */
/* Fehlerbehebung durch Rückgabe eines gültigen FARPROC-Werts */
dliNoteEndProcessing, /* Wird aufgerufen, nachdem alle Operationen ausgeführt wurden, */
/* lässt sich nicht umgehen, */
/* außer durch longjmp(), throw() oder
RaiseException. */
} dliNotification;
Hook-Zeiger
Der "Benachrichtigungs-Hook" wird für jeden Aufruf der Hilfsfunktion zum verzögerten Laden aufgerufen. Dadurch kann die Hilfsfunktion zum verzögerten Laden bei jedem Aufruf übergangen werden.
extern DelayedLoadHook _EXPDATA __pfnDliNotifyHook;
dliNotify ==
{
dliNoteStartProcessing |
dliNotePreLoadLibrary |
dliNotePreGetProcAddress |
dliNoteEndProcessing
}
Anmerkung: Der "Fehler"-Hook wird zugewiesen:
extern DelayedLoadHook _EXPDATA __pfnDliFailureHook;
Dieser Hook wird mit den folgenden Benachrichtigungs-Flags aufgerufen:
dliNotify ==
{
dliFailLoadLibrary |
dliFailGetProcAddress
}
Weitere Informationen dazu, wann diese Benachrichtigungsereignisse während des verzögerten Ladevorgangs eintreten, finden Sie in delayhlp.c.