WDF程序参数解析

为什么用注册表存储驱动信息RegistryPath

驱动加载非常早,甚至仅仅晚于windows内核,这时文件系统还没建立,驱动程序如果在此时需要享有自己的可操作空间,只有注册表可使用。HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services为驱动信息存储位置。

WDF_DRIVER_CONFIG 驱动程序的一些可配置参数,其中包含了EvtDriverDeviceAdd和EvtDriverUnload的入口地址以及驱动初始化时的一些标志和分配内存使用的tag值。
WDF_DEIVER_CONGFIG_INIT 对config的初始化过程。
wdfDriverCreate 创建驱动对象

PWDFDEVICE_INIT 这个是wdf分配出来的一个数据结构,用来辅助创建一个新设备。

wdfDeviceInitSetDeviceType(DeviceInit, FILE_DEVICE_DISK) //设置设备类型
wdfDeviceInitSetIoType(DeviceInit, wdfDeviceIoDirect) //设置数据读取方式
wdfDeviceInitSetExculsive(DeviceInit, FALSE) //设置是否可以被打开多次

WDF_OBJECT_ATTRIBUTES //设备对象的属性,用于管理设备对象的输入参数,主要包括设备对象的EvtClearUpCallback EvtDestroyCallback,关联设备上下文DEVICE_CONTEXT

WDF_OBJECT_ATTRIBUTES_INIT  //初始化设备对象属性
WDF_OBJECT_ATTRIBUTES_SET_CONTEXT_TYPE //设置设备对象上下文信息,也就是保存一些用户自定义的信息的地址到设备对象中
 WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE //上面两个macro集合体

DEVICE_CONTEXT设备上下文,主要用于存储与当前设备有关的用户需要的自定义数据

wdfDeviceCreate(&DeviceInit, &deviceAttributes, &device);
pDeviceContext = DeviceGetContext(device);

为什么使用队列的方式存储请求

将请求插入到队列中由另一个线程去处理队列,这是一个典型的生产者消费者模型,这样做的好处是有了一个缓冲,同时还不用担心缓冲带来的同步问题,因为所有的请求都被队列排队了。wdf驱动框架中使用WDF_IO_QUQUE来处理请求,就是基于这种队列的方式,这样就不用开发人员去创建、删除、以及考虑事件同步等问题。

WDF_IO_QUEUE_CONFIG 是对io队列的存储以及irp回调的管理 EvtIoStop、EvtIoRead、EvtIoWrite、EvtIoDeviceControl
WDFQUEUE 队列句柄
WDF_IO_QUEUE_CONFIG_INIT_DEFAULT_QUEUE 用于初始化队列信息,队列的分发类型主要有串行、并行和手动三种。
WdfIoQueueCreate 创建队列

驱动中请求处理方式

重新排队、完成请求、撤销请求、转发请求

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值