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

另請參閱

IWDFDeviceInitialize2::SetIoTypePreference

WDF_IO_TYPE_CONFIG

WDF_IO_TYPE_CONFIG_INIT

WdfDeviceGetDeviceStackIoType

WdfDeviceInitSetIoType