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.