WdfDeviceInitSetIoTypeEx 函式 (wdfdevice.h)
[適用於 KMDF 和 UMDF]
WdfDeviceInitSetIoTypeEx 方法會設定驅動程式如何存取讀取和寫入要求中包含的數據緩衝區,以及指定裝置的裝置 I/O 控制要求的方法或喜好設定。
語法
void WdfDeviceInitSetIoTypeEx(
[in] PWDFDEVICE_INIT DeviceInit,
[in] PWDF_IO_TYPE_CONFIG IoTypeConfig
);
參數
[in] DeviceInit
WDFDEVICE_INIT 結構的指標。
[in] IoTypeConfig
使用 WDF_IO_TYPE_CONFIG_INIT 宏初始化 之WDF_IO_TYPE_CONFIG 結構的指標。
傳回值
無
備註
如果您使用 KMDF 1.11 版或更早版本撰寫驅動程式,則必須改用 WdfDeviceInitSetIoType。
KMDF KMDF 驅動程式會呼叫 WdfDeviceInitSetIoTypeEx 來設定讀取和寫入要求的緩衝區存取方法。 針對裝置 I/O 控制要求,架構會使用 I/O 控件程式代碼中編碼的緩衝區類型, (IOCTL) 。
UMDF UMDF 驅動程式會呼叫 WdfDeviceInitSetIoTypeEx 來註冊讀取和寫入要求的喜好設定,以及裝置 I/O 控制要求。 UMDF 驅動程式提供給 WdfDeviceInitSetIoTypeEx 的值只是喜好設定,而且不保證架構會使用。 您的驅動程式可以呼叫 WdfDeviceGetDeviceStackIoType 來判斷 UMDF 指派給裝置讀取/寫入要求和 I/O 控制要求的緩衝區存取方法。 對於 I/O 控制要求,架構使用的存取方法可能與 IOCTL 中指定的存取方法與驅動程式所要求的訪問方法不同。
如果驅動程式呼叫 WdfDeviceInitSetIoTypeEx,它必須先這麼做,才能呼叫 WdfDeviceCreate。
如果驅動程式未呼叫 WdfDeviceInitSetIoTypeEx,架構會將驅動程式的 buffer-access 方法設定為所指定裝置的 WdfDeviceIoBuffered。
從 KMDF 篩選驅動程式呼叫 WdfDeviceInitSetIoTypeEx 沒有任何作用。 針對 KMDF 篩選驅動程式,架構會使用驅動程式堆疊中下一個較低驅動程式所指定的 I/O 類型。
不過,UMDF 篩選驅動程式可以藉由呼叫 WdfDeviceInitSetIoTypeEx 來註冊緩衝區存取方法的喜好設定。
驅動程式堆疊中的所有 UMDF 驅動程式都必須使用相同的方法來存取裝置的緩衝區。 如果 UMDF 判斷某些驅動程式偏好緩衝 I/O 或裝置的直接 I/O,而其他驅動程式則只偏好緩衝處理裝置的 I/O,UMDF 會針對所有驅動程式使用緩衝 I/O。 如果一或多個堆疊的驅動程式只偏好緩衝 I/O,而其他驅動程式則只偏好直接 I/O,UMDF 會將事件記錄到系統事件記錄檔,而不會啟動驅動程式堆疊。
如需緩衝區存取方法的詳細資訊,請參閱 存取數據緩衝區。
這個方法相當於 IWDFDeviceInitialize2::SetIoTypePreference 的 UMDF 2.0。
範例
下列程式代碼範例會初始化 WDF_IO_TYPE_CONFIG 結構、將驅動程式的緩衝區存取喜好設定設定設為直接 I/O、指定傳輸應該使用緩衝 I/O,以及呼叫 WdfDeviceInitSetIoTypeEx。
WDF_IO_TYPE_CONFIG ioConfig;
WDF_IO_TYPE_CONFIG_INIT(&ioConfig);
ioConfig.ReadWriteIoType = WdfDeviceIoDirect;
ioConfig.DeviceControlIoType = WdfDeviceIoDirect;
ioConfig.DirectTransferThreshold = 32;
WdfDeviceInitSetIoTypeEx(DeviceInit, &ioConfig);
}
規格需求
需求 | 值 |
---|---|
目標平台 | Universal |
最低 KMDF 版本 | 1.13 |
最低UMDF版本 | 2.0 |
標頭 | wdfdevice.h (包含 Wdf.h) |
程式庫 | Wdf01000.sys (KMDF) ;WUDFx02000.dll (UMDF) |
IRQL | <= DISPATCH_LEVEL |