PLOAD_IMAGE_NOTIFY_ROUTINE Rückruffunktion (ntddk.h)
Wird vom Betriebssystem aufgerufen, um den Treiber zu benachrichtigen, wenn ein Treiberimage oder ein Benutzerimage (z. B. eine DLL oder EXE) in virtuellem Speicher zugeordnet wird. Das Betriebssystem ruft diese Routine auf, nachdem ein Image dem Speicher zugeordnet wurde, aber bevor sein Einstiegspunkt aufgerufen wird.
Warnung
Die Aktionen, die Sie in dieser Routine ausführen können, sind für sichere Anrufe eingeschränkt. Siehe best Practices.
Syntax
PLOAD_IMAGE_NOTIFY_ROUTINE PloadImageNotifyRoutine;
void PloadImageNotifyRoutine(
[in, optional] PUNICODE_STRING FullImageName,
[in] HANDLE ProcessId,
[in] PIMAGE_INFO ImageInfo
)
{...}
Parameter
[in, optional] FullImageName
Ein Zeiger auf eine gepufferte Unicode-Zeichenfolge, die die ausführbare Bilddatei identifiziert. (Der FullImageName-Parameter kann NULL- werden, in fällen, in denen das Betriebssystem den vollständigen Namen des Images zur Prozesserstellung nicht abrufen kann.)
[in] ProcessId
Die Prozess-ID des Prozesses, in dem das Image zugeordnet wurde, aber dieses Handle ist null, wenn das neu geladene Image ein Treiber ist.
[in] ImageInfo
Ein Zeiger auf eine IMAGE_INFO Struktur, die Bildinformationen enthält. Siehe Anmerkungen.
Rückgabewert
Nichts
Bemerkungen
Systemprofiltreiber auf höchster Ebene können PsSetLoadImageNotifyRoutine- aufrufen, um die Benachrichtigungsroutine für das Ladenimage einzurichten.
Das Betriebssystem ruft keine Load-Image-Benachrichtigungsroutinen auf, wenn Abschnitte, die mit dem attribut SEC_IMAGE_NO_EXECUTE erstellt wurden, virtuellem Speicher zugeordnet werden.
In Windows 7, Windows Server 2008 R2 und früheren Versionen von Windows enthält das Betriebssystem eine interne Systemsperre bei Aufrufen zum Laden von Imagebenachrichtigungsroutinen für Bilder, die im Adressraum des Benutzers geladen wurden (Benutzerspeicherplatz). Um Deadlocks zu vermeiden, dürfen Load-Image-Benachrichtigungsroutinen keine Systemroutinen aufrufen, die virtuellem Arbeitsspeicher von Benutzern zuordnen, zuordnen, abfragen, freigeben oder andere Vorgänge ausführen.
Ein Treiber muss alle Rückrufe entfernen, die er registriert, bevor er entladen wird. Sie können den Rückruf entfernen, indem Sie die PsRemoveLoadImageNotifyRoutine Routine aufrufen.
Wenn das haupt ausführbare Image für einen neu erstellten Prozess geladen wird, wird die Benachrichtigungsroutine für das Ladeimage im Kontext des neuen Prozesses ausgeführt. Das Betriebssystem ruft die Lade-Image-Benachrichtigungsroutine des Treibers bei PASSIVE_LEVEL in einem kritischen Bereich mit normalen Kernel-APCs immer deaktiviert und manchmal mit deaktivierten Kernel- und speziellen APCs auf.
Wenn die Benachrichtigungsroutine zum Laden des Bilds aufgerufen wird, verweist die Eingabe FullImageName auf eine gepufferte Unicode-Zeichenfolge, die die ausführbare Bilddatei identifiziert. (Der FullImageName-Parameter kann NULL- werden, in fällen, in denen das Betriebssystem den vollständigen Namen des Images zur Prozesserstellung nicht abrufen kann.) Die ProcessId- Handle identifiziert den Prozess, in dem das Image zugeordnet wurde, aber dieses Handle ist null, wenn das neu geladene Image ein Treiber ist. Informationen zum Format der gepufferten Daten in ImageInfo-finden Sie unter IMAGE_INFO. Wenn das ExtendedInfoPresent Flag in der IMAGE_INFO Struktur festgelegt ist, sind die Informationen Teil einer größeren, erweiterten Version der Bildinformationsstruktur, IMAGE_INFO_EX.
Anforderungen
Anforderung | Wert |
---|---|
mindestens unterstützte Client- | Ab Windows 2000 verfügbar. |
Zielplattform- | Universal |
Header- | ntddk.h (include Ntddk.h) |
IRQL- | PASSIVE_LEVEL |