chapter 8.2: I/O transfer types

3类:
1.buffered I/O,复制用户的数据
2.Direct I/O,通过MDLs和KM pointer访问用户数据
3.Neither I/O,使用UM pointer访问用户数据


应避免使用Neither I/O
** IOCTLs可以使用任何类型,所有I/O request必须使用同样的类型(驱动相关)


KMDF驱动在EvtDriverDeviceAdd回调中使用WdfDeviceInitSetIoType(WdfDeviceIoBuffered为默认)来设置transfer类型。
例子:Osrusbfx2设置为buffered I/O
UMDF不用配置类型。


Buffered I/O
copy,数据在请求内置的WDF memory object中。


Direct I/O
IRP中包含MDL地址:缓冲的virtual addr和size,physical pages,操作系统锁定这些物理页,在操作完成后解除锁定。
KMDF驱动可以通过WDF方法读取数据,也可以直接使用MDL


Neither I/O
UMDF
=======
KMDF
若来源于UM caller,I/O manager传递来指针指向用户模式buffer,驱动需要复制数据到KM location,并自行验证,锁定,获得长度。在EvtIoInCallerContext回调函数完成验证。
若来源于KM caller,驱动可以直接访问WDF memory object。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值