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.