Condividi tramite


Scaricamento di un modulo provider

Per scaricare un modulo del provider, il sistema operativo chiama la funzione Scarica del modulo del provider. Vedere Inizializzazione e registrazione di un modulo provider per altre informazioni su come specificare la funzione Di scaricamento di un modulo del provider durante l'inizializzazione.

La funzione Unload di un modulo provider garantisce che il modulo del provider venga annullata la registrazione dal registrar del modulo di rete prima che il modulo provider venga scaricato dalla memoria di sistema. Un modulo del provider avvia la registrazione da NMR chiamando la funzione NmrDeregisterProvider , che in genere chiama dalla relativa funzione Unload . Un modulo del provider non deve restituire dalla funzione Unload fino a quando non è stata annullata completamente la registrazione da NMR. Se la chiamata a NmrDeregisterProvider restituisce STATUS_PENDING, il modulo del provider deve chiamare la funzione NmrWaitForProviderDeregisterComplete per attendere il completamento della registrazione prima che restituisca dalla funzione Unload .

Ad esempio:

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

Se un modulo del provider è registrato come provider di più interfacce di programmazione di rete ,deve chiamare NmrDeregisterProvider per ogni server dei criteri di rete supportato. Se un modulo di rete viene registrato sia come modulo provider che come modulo client, ovvero è un provider di un server dei criteri di rete e un client di un altro server dei criteri di rete, deve chiamare sia NmrDeregisterProvider che NmrDeregisterClient.

Un modulo di rete deve attendere il completamento di tutte le deregistrazioni prima di tornare dalla relativa funzione Scarica .

Non è necessario un modulo del provider per chiamare NmrDeregisterProvider dall'interno della relativa funzione Unload . Ad esempio, nella situazione in cui un modulo provider è un sottocomponente di un driver complesso, la registrazione del modulo provider può verificarsi quando il sottocomponente del modulo provider viene disattivato. Tuttavia, in tale situazione il driver deve comunque assicurarsi che il modulo del provider sia stato completamente annullato dalla nmR prima di tornare dalla relativa funzione di scaricamento .