学习windows驱动(创建IO请求)

现在框架只把5种IRP请求封装层WDFREQUEST对象,实际上可以把任何IRP请求封装成WDFREQUEST对象。WDF驱动程序除了使用框架通过事件回调传递的WDFREQUEST对象外,还可以自己新建任何类型的WDFrequest对象。

有两种方法创建WDFREQUEST对象。
第一种是创建空对象,在调用格式化函数,将对象格式化成指定类型的命令,现在框架只提供4种格式化函数,这种方法只能创建4种WDFREQUEST对象;第二种是通过一个指定的IRP创建,这种方法可以创建任何类型的WDFREQUEST对象,根据IRP类型而定。

调用WdfRequestCreate创建一个空对象,函数定义如下:

_IRQL_requires_max_(DISPATCH_LEVEL)
NTSTATUS
FORCEINLINE
WdfRequestCreate(
    _In_opt_
    PWDF_OBJECT_ATTRIBUTES RequestAttributes,
    _In_opt_
    WDFIOTARGET IoTarget,
    _Out_
    WDFREQUEST* Request
    )

参数RequestAttributes配置被创建的框架对象。
IoTarget是一个可选参数,仅仅要做验证,不会被保存到新建的WDFREQUEST对象里。如果IoTarget不是NULL,那么WdfRequestCreate函数将验证新建的对象是否可以被发送到此IO目标对象,如果验证不可能,则创建WDFREQUEST对象失败,并返回状态值STATUS_REQUEST_NOT_ACCEPTED。这个状态值表明,当前系统里的资源不足以创建一个发送到达指定IO目标对象的WDFREQUEST请求。
在成功创建的情况下,参数Request将返回一个WDFREQUEST对象句柄。
成功创建一个空对象,不能被马上就被用,它的内部确实时”空“的,需要格式化。格式化就是往对象内部填入表明”身份”的数据,可以联想磁盘格式化。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值