Windows 驱动开发 - 5
2016-03-12 14:18
375 查看
上篇《Windows 驱动开发 - 4》我们已经完毕了硬件准备。
可是我们还没有详细的数据操作,比如接收读写操作。
在WDF中进行此类操作前须要进行设备的IO控制,已保持数据的完整性。
我们知道进行WDF开发主要是尾随IRPs的“脚步”。
从表中能够看到在进行DEVICE I/O control的时候,WDF是使用了Queue(队列)的机制。
所以,我们要在添加设备时提供队列支持。
WDF_IO_QUEUE_CONFIG_INIT_DEFAULT_QUEUE
(2)设置回调事件
设置WDF_IO_QUEUE_CONFIG结构中的成员变量值。
(3)建立队列
WdfIoQueueCreate
可是我们还没有详细的数据操作,比如接收读写操作。
在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 |
所以,我们要在添加设备时提供队列支持。
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 );
相关文章推荐
- 关于开源中国的代码托管
- Qt之鼠标随手画及画多边形
- 概念理解
- 【opencv】大津法二值化
- 高效的斐波那契数列实现
- jQuery(一)
- Java开发必会的Linux命令
- git 常用命令--详述
- ahu-557容斥原理
- Java读取操作word2003 word2007 word2010文档
- [Unity] 常用技巧收集
- phoneGap入门教程
- Java并发编程(一)
- SVN经常使用命令说明
- [转]World Wind学习总结一
- Java反射
- rebmuNyppaH.202
- VR相关网站
- Unity3d导出Xcode各种问题总结
- swift 2.0 与 OC 相比较,标签栏和导航栏书写的差别