Partager via


Spécification d’une fonction Deload

Un pilote de légende doit fournir une fonction de déchargement. Le système d’exploitation appelle cette fonction lorsque le pilote de légende est déchargé du système. La fonction de déchargement d’un pilote de légende doit garantir que les légendes du pilote de légende sont désinscries du moteur de filtre avant que le pilote de légende ne soit déchargé de la mémoire système. Un pilote de légende ne peut pas être déchargé du système s’il ne fournit pas de fonction de déchargement.

La façon dont un pilote de légende spécifie une fonction de déchargement varie selon que le pilote de légende est basé sur le modèle de pilote Windows (WDM) ou sur les infrastructures de pilotes Windows (WDF).

WDM-Based pilotes de légende

Si un pilote de légende est basé sur WDM, il spécifie une fonction Unload dans sa fonction DriverEntry . Par exemple :

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;

  ...
}

WDF-Based pilotes de légende

Si un pilote de légende est basé sur WDF, il spécifie une fonction EvtDriverUnload dans sa fonction DriverEntry . Par exemple :

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

Pour plus d’informations sur l’implémentation de la fonction de déchargement d’un pilote de légende, consultez Déchargement d’un pilote de légende.