Entladen eines Clientmoduls
Zum Entladen eines Clientmoduls ruft das Betriebssystem die Unload-Funktion des Clientmoduls auf. Weitere Informationen zum Angeben der Unload-Funktion eines Clientmoduls während der Initialisierung finden Sie unter Initialisieren und Registrieren eines Clientmoduls.
Die Unload-Funktion eines Clientmoduls stellt sicher, dass das Clientmodul bei der Netzwerkmodulregistrierungsstelle (Network Module Registrar, NMR) abgemeldet wird, bevor das Clientmodul aus dem Systemspeicher entladen wird. Ein Clientmodul initiiert die Aufhebung der Registrierung aus dem NMR durch Aufrufen der NmrDeregisterClient-Funktion , die in der Regel über die Unload-Funktion aufgerufen wird. Ein Clientmodul darf erst von seiner Unload-Funktion zurückkehren, nachdem die Registrierung beim NMR vollständig aufgehoben wurde. Wenn der Aufruf von NmrDeregisterClient STATUS_PENDING zurückgibt, muss das Clientmodul die NmrWaitForClientDeregisterComplete-Funktion aufrufen, um auf den Abschluss der Registrierung zu warten, bevor es von seiner Unload-Funktion zurückgibt.
Beispiel:
// Variable containing the handle for the registration
HANDLE ClientHandle;
// Unload function
VOID
Unload(
IN PDRIVER_OBJECT DriverObject
)
{
NTSTATUS Status;
// Deregister the client module from the NMR
Status =
NmrDeregisterClient(
ClientHandle
);
// Check if pending
if (Status == STATUS_PENDING)
{
// Wait for the deregistration to be completed
NmrWaitForClientDeregisterComplete(
ClientHandle
);
}
// An error occurred
else
{
// Handle error
...
}
}
Wenn ein Clientmodul als Client mit mehreren Netzwerkprogrammierschnittstellen (Network Programming Interfaces, NPIs) registriert ist, muss es NmrDeregisterClient für jeden unterstützten NPI aufrufen. Wenn ein Netzwerkmodul sowohl als Clientmodul als auch als Anbietermodul registriert ist (d. h., es ist ein Client eines NPI und ein Anbieter eines anderen NPI), muss es sowohl NmrDeregisterClient als auch NmrDeregisterProvider aufrufen.
Ein Netzwerkmodul muss warten, bis alle Registrierungen abgeschlossen sind, bevor es von seiner Unload-Funktion zurückgibt.
Ein Clientmodul ist nicht erforderlich, um NmrDeregisterClient aus seiner Unload-Funktion aufzurufen. In der Situation, in der ein Clientmodul eine Unterkomponente eines komplexen Treibers ist, kann die Registrierung des Clientmoduls auftreten, wenn die Clientmodulunterkomponente deaktiviert wird. In einer solchen Situation muss der Treiber jedoch weiterhin sicherstellen, dass das Clientmodul vollständig von der NMR abgemeldet wurde, bevor er von seiner Unload-Funktion zurückkehrt.