콜아웃 드라이버는 언로드 함수를 제공해야 합니다. 운영 체제는 콜아웃 드라이버가 시스템에서 언로드될 때 이 함수를 호출합니다. 콜아웃 드라이버의 언로드 함수는 콜아웃 드라이버가 시스템 메모리에서 언로드되기 전에, 해당 드라이버의 콜아웃이 필터 엔진에서 등록 해제되도록 보장해야 합니다. 언로드 함수를 제공하지 않으면 호출 드라이버를 시스템에서 언로드할 수 없습니다.
설명선 드라이버가 언로드 함수를 지정하는 방법은 설명선 드라이버가 WDM(Windows 드라이버 모델) 또는 WDF(Windows 드라이버 프레임워크)를 기반으로 하는지에 따라 달라집니다.
WDM-Based 콜아웃 드라이버
콜아웃 드라이버가 WDM을 기반으로 하는 경우 DriverEntry 함수에서 Unload 함수를 지정합니다. 예를 들어:
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-기반 Callout 드라이버
설명선 드라이버가 WDF를 기반으로 하는 경우, DriverEntry 함수에서 EvtDriverUnload 함수를 지정합니다. 예를 들어:
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;
}
콜아웃 드라이버의 언로드 함수를 구현하는 방법에 대한 정보는 콜아웃 드라이버를 언로드하는 방법을 참조하세요.