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          在这里对数据包进行处理就好了。


 

你可能感兴趣的:(moufilter-hid鼠标过滤驱动 流程介绍)