Compartir a través de


Descargar un módulo de proveedor

Para descargar un módulo de proveedor, el sistema operativo llama a la función Unload del módulo de proveedor. Consulte Inicialización y registro de un módulo de proveedor para obtener más información sobre cómo especificar la función Unload de un módulo de proveedor durante la inicialización.

La función Unload de un módulo de proveedor garantiza que el módulo del proveedor se anule el registro del registrador de módulos de red (NMR) antes de que el módulo de proveedor se descargue de la memoria del sistema. Un módulo de proveedor inicia la desregistración de NMR llamando a la función NmrDeregisterProvider , que normalmente llama desde su función Unload . Un módulo de proveedor no debe volver de su función Unload hasta después de que se haya anulado por completo del NMR. Si la llamada a NmrDeregisterProvider devuelve STATUS_PENDING, el módulo de proveedor debe llamar a la función NmrWaitForProviderDeregisterComplete para esperar a que se complete la desregistración antes de que vuelva de su función Unload .

Por ejemplo:

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

Si un módulo de proveedor está registrado como proveedor de varias interfaces de programación de red (NPIs), debe llamar a NmrDeregisterProvider para cada NPI que admita. Si un módulo de red se registra como un módulo de proveedor y un módulo cliente (es decir, es un proveedor de un NPI y un cliente de otro NPI), debe llamar a NmrDeregisterProvider y NmrDeregisterClient.

Un módulo de red debe esperar hasta que se completen todas las desregistraciones antes de volver de su función Unload .

No se requiere un módulo de proveedor para llamar a NmrDeregisterProvider desde su función Unload . Por ejemplo, en la situación en la que un módulo de proveedor es un subcomponente de un controlador complejo, la desregistración del módulo de proveedor puede producirse cuando se desactiva el subcomponente del módulo de proveedor. Sin embargo, en esta situación, el controlador debe asegurarse de que el módulo de proveedor se ha anulado completamente del NMR antes de volver de su función Unload .