Entladen eines Anbietermoduls

Zum Entladen eines Anbietermoduls ruft das Betriebssystem die Unload-Funktion des Anbietermoduls auf. Weitere Informationen zum Angeben der Unload-Funktion eines Anbietermoduls während der Initialisierung finden Sie unter Initialisieren und Registrieren eines Anbietermoduls.

Die Unload-Funktion eines Anbietermoduls stellt sicher, dass das Anbietermodul bei der Netzwerkmodulregistrierungsstelle (Network Module Registrar, NMR) abgemeldet wird, bevor das Anbietermodul aus dem Systemspeicher entladen wird. Ein Anbietermodul initiiert die Aufhebung der Registrierung aus dem NMR durch Aufrufen der NmrDeregisterProvider-Funktion , die normalerweise über die Unload-Funktion aufgerufen wird. Ein Anbietermodul darf erst von seiner Unload-Funktion zurückkehren, nachdem die Registrierung beim NMR vollständig aufgehoben wurde. Wenn der Aufruf von NmrDeregisterProvider STATUS_PENDING zurückgibt, muss das Anbietermodul die NmrWaitForProviderDeregisterComplete-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 ProviderHandle;

// Unload function
VOID
  Unload(
    IN PDRIVER_OBJECT DriverObject
    )
{
  NTSTATUS Status;

  // Deregister the provider module from the NMR
  Status =
    NmrDeregisterProvider(
      ProviderHandle
      );

  // Check if pending
  if (Status == STATUS_PENDING)
  {
    // Wait for the deregistration to be completed
    NmrWaitForProviderDeregisterComplete(
      ProviderHandle
      );
  }

  // An error occurred
  else
  {
    // Handle error
    ...
  }
}

Wenn ein Anbietermodul als Anbieter mehrerer Netzwerkprogrammierschnittstellen (Network Programming Interfaces, NPIs) registriert ist, muss es NmrDeregisterProvider für jeden unterstützten NPI aufrufen. Wenn ein Netzwerkmodul sowohl als Anbietermodul als auch als Clientmodul registriert ist (d. h., es ist ein Anbieter eines NPI und ein Client eines anderen NPI), muss es sowohl NmrDeregisterProvider als auch NmrDeregisterClient aufrufen.

Ein Netzwerkmodul muss warten, bis alle Registrierungen abgeschlossen sind, bevor es von seiner Unload-Funktion zurückgibt.

Ein Anbietermodul ist nicht erforderlich, um NmrDeregisterProvider aus seiner Unload-Funktion aufzurufen. In der Situation, in der ein Anbietermodul ein Unterkomponenten eines komplexen Treibers ist, kann die Registrierung des Anbietermoduls auftreten, wenn die Anbietermodulunterkomponente deaktiviert wird. In einer solchen Situation muss der Treiber jedoch weiterhin sicherstellen, dass das Anbietermodul vollständig von der NMR abgemeldet wurde, bevor er von seiner Unload-Funktion zurückkehrt.