麦洛克菲内核驱动开发第六课

麦洛克菲内核驱动开发第六课

ID:20685661

大小:311.50 KB

页数:36页

时间:2018-10-14

麦洛克菲内核驱动开发第六课_第1页
麦洛克菲内核驱动开发第六课_第2页
麦洛克菲内核驱动开发第六课_第3页
麦洛克菲内核驱动开发第六课_第4页
麦洛克菲内核驱动开发第六课_第5页
资源描述:

《麦洛克菲内核驱动开发第六课》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、麦洛克菲内核开发第五课Sfilter文件系统过滤麦洛克菲www.mallocfree.com周扬荣麦洛克菲www.mallocfree.com提纲文件系统驱动绑定与过滤Sfilter基本框架文件拦截创建删除修改重命名作业麦洛克菲www.mallocfree.com过滤CancelUserBufferMdlAddressSystemBufferIOSTATUSIRPHeadern…0头部堆栈IO_STATUS_BLOCKStatusInformationIO_STACK_LOCATIONMajorFunctionMi

2、norFunctionunion{struct{…}Read;struct{…}Write;struct{…}DeviceControl;}Parameters;DeviceObjectFileObject文件过滤驱动设备文件卷设备磁盘设备IRP驱动设备IRP过滤:分层驱动中再加一层而不影响它的上下层,以过滤它们之间的数据,对数据或行为进行安全控制。过滤是通过设备绑定实现的。绑定设备栈绑定的形式。驱动自己生成一个设备(过滤设备),调用系统提供的绑定API,绑定到目标设备上。并返回一个在未绑定之前目标设备所在设备栈的

3、最顶层设备。这样发往下层的IRP或者发往上层的数据都会被过滤设备截获。绑定API:IoAttachDevice()IoAttachDeviceToDeviceStackSafe(2000SP4以及XP以上)IoAttachDeviceToDeviceStack()SourceDeviceFilter2DeviceFilter1DeviceTargetDeviceSourceDeviceTargetDeviceAttachedDeviceAttachedDeviceIRPIoAttachDeviceToDeviceS

4、tackPDEVICE_OBJECTIoAttachDeviceToDeviceStack(IN PDEVICE_OBJECTSourceDevice,IN PDEVICE_OBJECTTargetDevice);AttachedDevice需要记录在DEVICE_EXTENSION中,以便调用IoCallDriver()继续下发IRPSourceDeviceFilter2DeviceFilter1DeviceTargetDeviceSourceDeviceTargetDeviceAttachedDeviceAtt

5、achedDeviceIRP文件系统过滤框架FilemonSfilterMinifilterFilespySfilter总体流程创建控制设备创建控制设备符号链接过滤分发函数Fastio过滤与绑定生成一个过滤设备IoRegisterFsRegistrationChange(DriverObject,SfFsNotification);(文件系统设备绑定)SfFsControl(卷设备绑定)一个驱动,看见几个文件系统设备,看见几个卷设备,对应每一个设备就生成相应设备附载上去,然后进行相应处理。IoRegisterFsR

6、egistrationChangeFileMon里的方法:枚举26个盘符,打开文件,获得FileObjectDeviceObject.然后通过自己驱动生成一个过滤设备,Attach过滤设备到DeviceObject上无法监控类似U盘等动态加载上去的IoRegisterFsRegistrationChange动态获得fastio文件系统除了处理正常的IRP之外,还要处理所谓的FastIo.FastIo是CacheManager调用所引发的一种没有irp的请求。换句话说,除了正常的DispatchFunctions之

7、外,你还得为DriverObject撰写另一组FastIoFunctions.这组函数的指针在driver->FastIoDispatchSfilter代码通读分析DriverEntrysfCreate再次深入理解IRP过滤驱动与IRP处理方式a.Pending完成例程IoCopyCurrentIrpStackLocationToNextb.忽略直接下发IoSkipCurrentIrpStackLocation,下层设备拿到的IO_STACKLOCATION和当前的一样c.结束IRP不下发PIO_STACK_LOC

8、ATIONirpStack=IoGetCurrentIrpStackLocation(Irp);Irp->IoStatus.Status=STATUS_SUCCESS;Irp->IoStatus.Information=0;IoCompleteRequest(Irp,IO_NO_INCREMENT);d.手动构建IRPIoAllocateIrpIoGetNe

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。