共用方式為


建立裝置物件 (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;
}