moufilter-hid鼠标过滤驱动 流程介绍

DriverEntry ---> WDF_DRIVER_CONFIG_INIT(           驱动程序初始化
                &config,
                MouFilter_EvtDeviceAdd
                );
            ---> MouFilter_EvtDeviceAdd  创建设备对象作为目标的I/O设备 并添加到设备堆栈
            ---> WdfDriverCreate(DriverObject,     创建driver对象(config) 
                            RegistryPath,
                            WDF_NO_OBJECT_ATTRIBUTES,
                            &config,
                            WDF_NO_HANDLE);

MouFilter_EvtDeviceAdd --->status = WdfDeviceCreate  创建设备对象
               ---> WDF_IO_QUEUE_CONFIG_INIT_DEFAULT_QUEUE(&ioQueueConfig,
                             WdfIoQueueDispatchParallel); 初始化默认I/O队列,I/O请求分发方式设置为并行
                      --->ioQueueConfig.EvtIoInternalDeviceControl = MouFilter_EvtIoInternalDeviceControl;
                设置EvtIoInternalDeviceControl,处理应用程序的DeviceIoControl()的调用
               --->status = WdfIoQueueCreate(hDevice,  创建I/O队列(IoQueueConfig)
                            &ioQueueConfig,
                            WDF_NO_OBJECT_ATTRIBUTES,
                            WDF_NO_HANDLE // pointer to default queue
                            );

MouFilter_EvtIoInternalDeviceControl --->switch (IoControlCode) {  入口
                    case IOCTL_INTERNAL_MOUSE_CONNECT:
                     ---> status = WdfRequestRetrieveInputBuffer(Request,
                                    sizeof(CONNECT_DATA),
                                    &connectData,
                                    &length);      获得输入缓冲区地址buffer
                         ---> connectData->ClassService = MouFilter_ServiceCallback; 回调函数,当鼠标向下层发送数据包时调用,处理数据包


MouFilter_ServiceCallback         
           
                --->IN PMOUSE_INPUT_DATA InputDataStart,    指向第一个数据包
            --->IN PMOUSE_INPUT_DATA InputDataEnd,      指向最后一个数据包 

         IN PMOUSE_INPUT_DATA          在这里对数据包进行处理就好了。


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值