Specifica di una funzione di scaricamento

Un driver di callout deve fornire una funzione di scaricamento. Il sistema operativo chiama questa funzione quando il driver di callout viene scaricato dal sistema. Una funzione di scaricamento del driver di callout deve garantire che i callout del driver di callout vengano annullati dalla registrazione dal motore di filtro prima che il driver di callout venga scaricato dalla memoria di sistema. Non è possibile scaricare un driver di callout dal sistema se non fornisce una funzione di scaricamento.

In che modo un driver di callout specifica una funzione di scaricamento dipende dal fatto che il driver di callout sia basato sul modello di driver Windows (WDM) o su Windows Driver Frameworks (WDF).

driver di callout WDM-Based

Se un driver di callout si basa su WDM, specifica una funzione Di caricamento nella funzione DriverEntry . Ad esempio:

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;

  ...
}

driver di callout WDF-Based

Se un driver di callout si basa su WDF, specifica una funzione EvtDriverUnload nella relativa funzione DriverEntry . Ad esempio:

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;
}

Per informazioni su come implementare la funzione di scaricamento di un driver di callout, vedere Scaricare un driver callout.