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,架構會將驅動程式的緩衝區存取方法設定為 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、指定傳輸小於 32 KB 的應使用緩衝 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);
}
要求
要求 | 價值 |
---|---|
目標平臺 | 普遍 |
最低 KMDF 版本 | 1.13 |
最低 UMDF 版本 | 2.0 |
標頭 | wdfdevice.h (包括 Wdf.h) |
連結庫 | Wdf01000.sys (KMDF):WUDFx02000.dll (UMDF) |
IRQL | <= DISPATCH_LEVEL |