언로드 함수 지정
콜아웃 드라이버는 언로드 함수를 제공해야 합니다. 운영 체제는 콜아웃 드라이버가 시스템에서 언로드될 때 이 함수를 호출합니다. 설명선 드라이버의 언로드 함수는 설명선 드라이버가 시스템 메모리에서 언로드되기 전에 설명선 드라이버의 설명선이 필터 엔진에서 등록 취소되도록 보장해야 합니다. 언로드 함수를 제공하지 않는 경우 시스템에서 콜아웃 드라이버를 언로드할 수 없습니다.
설명선 드라이버가 언로드 함수를 지정하는 방법은 설명선 드라이버가 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-Based 콜아웃 드라이버
설명선 드라이버가 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;
}
설명선 드라이버의 언로드 함수를 구현하는 방법에 대한 자세한 내용은 설명선 드라이버 언로드를 참조하세요.