Compartir a través de


Especificar una función Unload

Un controlador de llamada debe proporcionar una función de descarga. El sistema operativo llama a esta función cuando el controlador de llamada se descarga del sistema. Una función de descarga del controlador de llamada debe garantizar que las llamadas del controlador de llamada no se registran desde el motor de filtro antes de que el controlador de llamada se descargue de la memoria del sistema. Un controlador de llamada no se puede descargar desde el sistema si no proporciona una función de descarga.

La forma en que un controlador de llamada especifica una función de descarga depende de si el controlador de llamada se basa en el modelo de controlador de Windows (WDM) o en los marcos de windows Driver Framework (WDF).

controladores de llamada de WDM-Based

Si un controlador de llamada se basa en WDM, especifica una función Unload en su función DriverEntry . Por ejemplo:

VOID
 Unload(
    IN PDRIVER_OBJECT DriverObject
    );

NTSTATUS
 DriverEntry(
    IN PDRIVER_OBJECT DriverObject,
    IN PUNICODE_STRING RegistryPath
    )
{
  ...

  // Specify the callout driver's Unload function
 DriverObject->DriverUnload = Unload;

  ...
}

controladores de llamada de WDF-Based

Si un controlador de llamada se basa en WDF, especifica una función EvtDriverUnload en su función DriverEntry . Por ejemplo:

VOID
 Unload(
    IN WDFDRIVER Driver
    );

NTSTATUS
 DriverEntry(
    IN PDRIVER_OBJECT DriverObject,
    IN PUNICODE_STRING RegistryPath
    )
{
  NTSTATUS status;
  WDF_DRIVER_CONFIG config;
  WDFDRIVER driver;

  ...

  // Initialize the driver config structure
  WDF_DRIVER_CONFIG_INIT(&config, NULL);

  // Indicate that this is a non-PNP driver
 config.DriverInitFlags = WdfDriverInitNonPnpDriver;

  // Specify the callout driver's Unload function
 config.EvtDriverUnload = Unload;

  // Create a WDFDRIVER object
 status =
 WdfDriverCreate(
 DriverObject,
 RegistryPath,
      NULL,
      &config,
      &driver
      );

  ...

 return status;
}

Para obtener información sobre cómo implementar una función de descarga del controlador de llamada, vea Descargar un controlador de llamada.