建立裝置物件 (Windows 篩選平台)
圖說文字驅動程式必須先建立裝置物件,才能向篩選引擎註冊其圖說文字。 圖說驅動程式建立裝置物件的方式取決於圖說文字驅動程式是以 Windows 驅動程式模型 (WDM) 還是 Windows 驅動程式架構 (WDF) 為基礎。
WDM-Based圖說文字驅動程式
如果圖說驅動程式是以 WDM 為基礎,它會藉由呼叫 IoCreateDevice 函式來建立裝置物件。 例如:
PDEVICE_OBJECT deviceObject;
NTSTATUS
DriverEntry(
IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath
)
{
NTSTATUS status;
...
// Create a device object
status =
IoCreateDevice(
DriverObject,
0,
NULL,
FILE_DEVICE_UNKNOWN,
FILE_DEVICE_SECURE_OPEN,
FALSE,
&deviceObject
);
...
return status;
}
WDF-Based圖說文字驅動程式
如果圖說文字驅動程式是以 WDF 為基礎,它會藉由呼叫 WdfDeviceCreate 函式來建立架構裝置物件。 若要向篩選引擎註冊其圖說文字,WDF 型圖說文字驅動程式必須取得與架構裝置物件相關聯的 WDM 裝置物件的指標。 WDF 型圖說文字驅動程式會藉由呼叫 WdfDeviceWdmGetDeviceObject 函式,取得此 WDM 裝置物件的指標。 例如:
WDFDEVICE wdfDevice;
NTSTATUS
DriverEntry(
IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath
)
{
WDFDRIVER driver;
PWDFDEVICE_INIT deviceInit;
PDEVICE_OBJECT deviceObject;
NTSTATUS status;
...
// Allocate a device initialization structure
deviceInit =
WdfControlDeviceInitAllocate(
driver;
&SDDL_DEVOBJ_KERNEL_ONLY
);
// Set the device characteristics
WdfDeviceInitSetCharacteristics(
deviceInit,
FILE_DEVICE_SECURE_OPEN,
FALSE
);
// Create a framework device object
status =
WdfDeviceCreate(
&deviceInit,
WDF_NO_OBJECT_ATTRIBUTES,
&wdfDevice
);
// Check status
if (status == STATUS_SUCCESS) {
// Initialization of the framework device object is complete
WdfControlFinishInitializing(
wdfDevice
);
// Get the associated WDM device object
deviceObject = WdfDeviceWdmGetDeviceObject(wdfDevice);
}
...
return status;
}