Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Hinweis
Diese Funktion wird nur für Treiber Hot-Swap V1 verwendet. Neue Treiber sollten Treiber Hot-Swap V2 verwenden, die die Endpunktregistrierung automatisch über compilerbasierte Endpunktenenumeration verarbeitet.
Die IoRegisterDriverProxyEndpoints-Funktion registriert Endpunktfunktionen in einer DriverProxy-Erweiterung und ermöglicht die Hot-Swappable-Treiberfunktionalität in Treiber-Hot-Swap V1-Implementierungen.
Syntax
NTSTATUS IoRegisterDriverProxyEndpoints(
PDRIVER_PROXY_EXTENSION DriverProxyExtension,
PDRIVER_PROXY_ENDPOINT_INFORMATION EndpointInfo,
ULONG Count,
PDRIVER_PROXY_REGISTER_CALLBACK PhasedCallback,
PVOID Context
);
Die Parameter
DriverProxyExtension
[in] Ein Zeiger auf die DriverProxy-Erweiterung, für die die Endpunkte registriert werden. Diese Erweiterung muss mit IoCreateDriverProxyExtension erstellt worden sein.
EndpointInfo
[in, out] Ein Array von DRIVER_PROXY_ENDPOINT_INFORMATION Strukturen, die die zu registrierenden Endpunktfunktionen beschreiben. Die Funktion kann den Inhalt dieses Arrays während der Registrierung ändern.
Count
[in] Die Anzahl der Elemente im EndpointInfo-Array .
PhasedCallback
[in, optional] Ein optionaler Zeiger auf eine DRIVER_PROXY_REGISTER_CALLBACK-Funktion , die während des Registrierungsprozesses in verschiedenen Phasen aufgerufen wird, um treiberspezifische Vorgänge zu ermöglichen.
Context
[in, optional] Ein optionaler Kontextzeiger, der an die PhasedCallback-Funktion übergeben wird.
Rückgabewert
IoRegisterDriverProxyEndpoints gibt einen der folgenden NTSTATUS-Werte zurück:
| Rückgabecode | Description |
|---|---|
| STATUS_SUCCESS | Die Endpunkte wurden erfolgreich registriert. |
| STATUS_INSUFFICIENT_RESOURCES | Nicht genügend Arbeitsspeicher zum Registrieren der Endpunkte verfügbar. |
| STATUS_INVALID_PARAMETER_3 | Mindestens eine Endpunktinformationsstruktur hat versucht, eine vorhandene Funktion mit einer anderen Parameteranzahl zu überschreiben. |
| STATUS_UNSUCCESSFUL | Timeout des Vorgangs beim Warten auf den Abschluss vorhandener Funktionsaufrufe. |
Bemerkungen
Diese Funktion richtet die Zuordnung zwischen den ursprünglichen Treiberfunktionen und ihren hot-swappable Wrappern ein. Nach der Registrierung werden Aufrufe der ursprünglichen Funktionen über das DriverProxy-System umgeleitet, sodass die Funktionen zur Laufzeit ersetzt werden können, ohne den Treiber entladen zu müssen.
Diese Funktion führt einen komplexen mehrstufigen Vorgang aus, um Funktionszeiger sicher zu ersetzen, während vorhandene Aufrufe ausgeführt werden können. Der Registrierungsprozess umfasst:
Vorverarbeitungsphase: Der optionale PhasedCallback wird mit DriverProxyRegisterCallbackPreProcess aufgerufen, um die Treibervorbereitung zu ermöglichen.
Rundown acquisition: The function waits for all existing calls to registered endpoints to complete before proceeding.
Phase des blockierten Proxys: Der PhasedCallback wird mit DriverProxyRegisterCallbackProxyStalled aufgerufen, während alle Aufrufe blockiert werden.
Funktionsersetzung: Die eigentlichen Funktionszeiger werden atomisch aktualisiert.
Nachbearbeitungsphase: Das PhasedCallback wird mit DriverProxyRegisterCallbackPostProcess aufgerufen, um die Treiberbereinigung zu ermöglichen.
Wenn ein Endpunkt dieselbe ID wie ein vorhandener registrierter Endpunkt aufweist, wird der Endpunkt ersetzt, aber nur, wenn er dieselbe Parameteranzahl aufweist.
Diese Funktion dient dualen Zwecken in Driver Hot-Swap V1: anfängliche Endpunktregistrierung (wobei PhasedCallback NULL sein sollte) und Endpunkttausch während Hot-Swap-Vorgängen.
Die Funktion muss bei PASSIVE_LEVEL aufgerufen werden, da sie möglicherweise auf den Abschluss vorhandener Funktionsaufrufe warten muss.
Anforderungen
| Anforderung | Wert |
|---|---|
| Zielplattform | Universal |
| Header | wdm.h |
| Library | NtosKrnl.lib |
| IRQL | PASSIVE_LEVEL |
Siehe auch
DRIVER_PROXY_ENDPOINT_INFORMATION