WDF
来源:互联网 发布:网络传销模式 编辑:程序博客网 时间:2024/05/16 15:22
WDF 提供了两个方法来 complete io request(实际上 有三个):
1. WdfRequestComplete;
2.WdfRequestCompleteWithInformation(,,)
IO MEthod 有三种方式:
METHOD_BUFFERED;
METHOD_DIRECT;
METHOD_NEITHER;
这里只讨论前面两种,METHOD_BUFFERED;METHOD_DIRECT; 情况下如何使用正确的IO complete function。
如果使用自定义的IOCTL code, 如下:
#define IOCTL_UIHGWB_MALLOC_MEMO \
CTL_CODE(FILE_DEVICE_UIHGWB, 0x804,\
METHOD_BUFFERED, FILE_READ_DATA|FILE_WRITE_DATA)
使用此IOCTL 的接口是windows的API DeviceIOControl; 其原型:
前面说的三种IO Method, 其实只是针对Outbuff 来讲的, 使用Outbuffer一般是需要读取数据,此参数也可是NULL;
如果User使用DeviceIOcontrol的时候希望device 往outbuffer里写入数据,也就是user希望通过outbuffer 获取一些数据,
那么在WDF的驱动设计时候, VOID UIHGwb_EvtIoDeviceControl(IN WDFQUEUE Queue,
IN WDFREQUEST Request,
IN size_t OutputBufferLength,
IN size_t InputBufferLength,
IN ULONG IoControlCode
);
函数需要注意request的 返回方式;
- 如果IOCTL code定义的是METHOD_BUFFERED, 那么需要使用WDFRequestCompleteWithInformation()接口,buffer的内容才会更新到User 的outbuffer;
使用WDFRequestComplete()接口返回的话, outbuffer的内容并不会更新;关于Method_buffered的工作原理,读者可以参考MSDN手册;
但是,不管哪个接口,如果返回的status不是 STATUS_SUCCESS,比如WdfRequestComplete(Request, STATUS_STATUS_INVALID_PARAMETER);或者WdfRequestCompleteWithInformation(Request, STATUS_STATUS_INVALID_PARAMETER, sizeof(ULONG64));
那么outbuffer 都不会更新;!! - 如果IOCTL dode的定义的是METHOD_INDIRECT或者METHOD_OUTDIRECT,那么驱动只要更新了outbuffer的值,就是直接操作了user space的 outbuffer。参考MSDN资料;
所以, 为了保险起见, 直接使用DIRECT的方式,比较方便。
- WDF
- wdf
- WDF
- 认识一下WDF
- WDF USB
- 《WDF USB驱动开发指南》-- WDF简介
- WDF驱动模型
- WDF虚拟磁盘驱动程序
- WDF驱动学习1
- windows WDF驱动程序设计
- WDF驱动安装方法
- WDF驱动模型
- WDF驱动模型
- ddk\wdm wdk\wdf
- WDF----PCI设备初始化
- WDF 驱动 pending 操作
- WDF设备驱动框架
- WDF 显卡驱动模型
- apache
- spring data jpa中的DTO查询
- dataguard类型转换与模式转化
- Hibernate操作权限系统(管理员、角色、组、权限)
- 使用Http的Get方法读取网络数据
- WDF
- 哈夫曼树
- Python之gzip文件读写
- 关于idea 2016开发环境新手导航
- app接口设计之token的php实现
- hibernate框架的理解重点
- oracle --sql--查询日期区间的数据
- 自定义View包含三角 和五角形
- [C++]基于SSE指令集的程序设计简介