Dela via


Avlasta en leverantörsmodul

Om du vill ta bort en providermodul anropar operativsystemet providermodulens Funktionen Ta bort. Mer information om hur du anger en providermoduls funktion Ta bort under initieringen finns i Initiera och registrera en providermodul.

En providermoduls funktion Avladda säkerställer att providermodulen avregistreras från NMR (Network Module Registrar) innan providermodulen avladdas från systemminnet. En providermodul initierar avregistrering från NMR genom att anropa funktionen NmrDeregisterProvider, som den vanligtvis anropar från funktionen Unload. En providermodul får inte återvända från sin Lossa-funktion förrän den helt och hållet har avregistrerats från NMR. Om anropet till NmrDeregisterProvider returnerar STATUS_PENDING måste providermodulen anropa funktionen NmrWaitForProviderDeregisterComplete för att vänta tills avregistreringen har slutförts innan den återgår från sin Unload-funktion.

Till exempel:

// 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
    ...
  }
}

Om en providermodul är registrerad som leverantör av flera NPI (Network Programming Interfaces)måste den anropa NmrDeregisterProvider för varje NPI som den stöder. Om en nätverksmodul registreras som både en providermodul och en klientmodul (det vill säga att den är en provider av en NPI och en klient för en annan NPI) måste den anropa både NmrDeregisterProvider och NmrDeregisterClient.

En nätverksmodul måste vänta tills alla avregistreringar har slutförts innan den returnerar från sin funktion Ladda ur.

En providermodul behöver inte anropa NmrDeregisterProvider inifrån sin Avlasta-funktion. I en situation där en providermodul till exempel är en underkomponent för en komplex drivrutin kan avregistreringen av providermodulen inträffa när providermodulens underkomponent inaktiveras. I en sådan situation måste drivrutinen dock fortfarande se till att providermodulen har avregistrerats helt från NMR innan den återvänder från funktionen Lossa.