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