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) |
Library | Wdf01000.sys (KMDF) ;WUDFx02000.dll (UMDF) |
IRQL | <= DISPATCH_LEVEL |