__pfnDliNotifyHook, __pfnDliFailureHook

Aus RAD Studio
Wechseln zu: Navigation, Suche

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.