Windows 驱动开发 - 5
来源:互联网 发布:阿里指数在哪进入淘宝 编辑:程序博客网 时间:2024/06/03 09:14
上篇《Windows 驱动开发 - 4》我们已经完成了硬件准备。但是我们还没有具体的数据操作,例如接收读写操作。
在WDF中进行此类操作前需要进行设备的IO控制,已保持数据的完整性。
我们知道进行WDF开发主要是跟随IRPs的“脚步”。
I/O Request Delivery Mechanism
I/O request type
UMDF delivery mechanism
KMDF delivery mechanism
Read
Queue
Queue
Write
Queue
Queue
Device I/O control
Queue
Queue
Internal device I/O control
Queue
Queue
Create
Queue
Queue or callback
Close
Callback
Callback
Cleanup
Callback
Callback
从表中可以看到在进行DEVICE I/O control的时候,WDF是使用了Queue(队列)的机制。
所以,我们要在增加设备时提供队列支持。WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(&ioQueueConfig, WdfIoQueueDispatchParallel); ioQueueConfig.EvtIoDeviceControl = EvtIoDeviceControl; status = WdfIoQueueCreate(device, &ioQueueConfig, WDF_NO_OBJECT_ATTRIBUTES, WDF_NO_HANDLE);(1)初始化队列配置
WDF_IO_QUEUE_CONFIG_INIT_DEFAULT_QUEUE
VOID WDF_IO_QUEUE_CONFIG_INIT_DEFAULT_QUEUE( _Out_ PWDF_IO_QUEUE_CONFIG Config, _In_ WDF_IO_QUEUE_DISPATCH_TYPE DispatchType);
(2)设置回调事件
设置WDF_IO_QUEUE_CONFIG结构中的成员变量值。
typedef struct _WDF_IO_QUEUE_CONFIG { ULONG Size; WDF_IO_QUEUE_DISPATCH_TYPE DispatchType; WDF_TRI_STATE PowerManaged; BOOLEAN AllowZeroLengthRequests; BOOLEAN DefaultQueue; PFN_WDF_IO_QUEUE_IO_DEFAULT EvtIoDefault; PFN_WDF_IO_QUEUE_IO_READ EvtIoRead; PFN_WDF_IO_QUEUE_IO_WRITE EvtIoWrite; PFN_WDF_IO_QUEUE_IO_DEVICE_CONTROL EvtIoDeviceControl; PFN_WDF_IO_QUEUE_IO_INTERNAL_DEVICE_CONTROL EvtIoInternalDeviceControl; PFN_WDF_IO_QUEUE_IO_STOP EvtIoStop; PFN_WDF_IO_QUEUE_IO_RESUME EvtIoResume; PFN_WDF_IO_QUEUE_IO_CANCELED_ON_QUEUE EvtIoCanceledOnQueue; union { struct { ULONG NumberOfPresentedRequests; } Parallel; } Settings; WDFDRIVER Driver;} WDF_IO_QUEUE_CONFIG, *PWDF_IO_QUEUE_CONFIG;
(3)建立队列
WdfIoQueueCreate
NTSTATUS WdfIoQueueCreate( [in] WDFDEVICE Device, [in] PWDF_IO_QUEUE_CONFIG Config, [in, optional] PWDF_OBJECT_ATTRIBUTES QueueAttributes, [out, optional] WDFQUEUE *Queue);
0 0
- Windows 驱动开发 - 5
- Windows CE驱动开发
- windows 驱动开发详解
- Windows 7 驱动开发
- Windows驱动开发模型
- Windows驱动开发小结
- windows驱动开发笔记
- Windows驱动开发
- Windows 驱动开发随想
- Windows驱动开发起步
- windows驱动开发 一
- windows驱动开发
- windows 驱动开发工具
- windows usb驱动开发
- windows驱动开发笔记
- Windows 驱动开发 - 1
- Windows 驱动开发 - 2
- Windows 驱动开发 - 3
- android模拟器滑动界面时,自动输出'C'的问题
- ubuntu14.04下安装hbse1.0.1.1
- 字符串的排列
- RevitAPI: 创建四通失败CrossFitting - InvalidOperationException: failed to insert cross.
- 扫描二维码自动识别手机系统(Android/IOS)
- Windows 驱动开发 - 5
- 轮播图ViewPager基本写法
- nodejs全局变量
- Android缓存Cache学习
- Core Data的基本知识(增删查改) --以及实际项目中学习
- 并行计算复习————第四篇 并行计算软件支撑:并行编程
- freetype日记1
- 欢迎使用CSDN-markdown编辑器
- android shape的使用