共用方式為


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

另請參閱

IWDFDeviceInitialize2::SetIoTypePreference

WDF_IO_TYPE_CONFIG

WDF_IO_TYPE_CONFIG_INIT

WdfDeviceGetDeviceStackIoType

WdfDeviceInitSetIoType