Descargar un módulo de cliente
Para descargar un módulo cliente, el sistema operativo llama a la función Unload del módulo cliente. Consulte Inicialización y registro de un módulo de cliente para obtener más información sobre cómo especificar la función Unload de un módulo de cliente durante la inicialización.
La función Unload de un módulo cliente garantiza que el módulo cliente se anule el registro desde el Registrador de módulos de red (NMR) antes de que el módulo cliente se descargue de la memoria del sistema. Un módulo cliente inicia la desregistración desde nmR llamando a la función NmrDeregisterClient , que normalmente llama desde su función Unload . Un módulo cliente no debe volver de su función Unload hasta después de que se haya anulado completamente del registro de NMR. Si la llamada a NmrDeregisterClient devuelve STATUS_PENDING, el módulo cliente debe llamar a la función NmrWaitForClientDeregisterComplete 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 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
...
}
}
Si un módulo de cliente está registrado como cliente de varias interfaces de programación de red (NPIs), debe llamar a NmrDeregisterClient para cada NPI que admita. Si un módulo de red se registra como un módulo de cliente y un módulo de proveedor (es decir, es un cliente de un NPI y un proveedor de otro NPI), debe llamar a NmrDeregisterClient y NmrDeregisterProvider.
Un módulo de red debe esperar hasta que se completen todas las desregistraciones antes de volver de su función Unload .
No es necesario que un módulo cliente llame a NmrDeregisterClient desde su función Unload . Por ejemplo, en la situación en la que un módulo cliente es un subcomponente de un controlador complejo, la desregistración del módulo cliente puede producirse cuando se desactiva el subcomponente del módulo cliente. Sin embargo, en esta situación, el controlador debe asegurarse de que el módulo cliente se ha anulado completamente del registro de NMR antes de volver de su función Unload .