为什么要绑定FS的CDO设备?

楚狂人在《Windows文件系统过滤驱动开发教程(第二版)》中写道:

“一个新的存储媒质被系统发现并在文件系统中生成一个Volume的过程称为Mounting.其过程开始的时候,FS的CDO将得到一个IRP,其Major Function Code为IRP_MJ_FILE_SYSTEM_CONTROL,Minor Function Code为IRP_MN_MOUNT。换句话说,如果我们已经生成了一个设备绑定文件系统的CDO,那么我们就可以得到这样的IRP,在其中知道一个新的Volume正在Mount.这时候我们可以执行上边所说的操作”

我们以微软源码sfilter进行分析

在我的另一篇《windows内核编程 白话设备栈》(http://blog.csdn.net/sqqsongqiqi/article/details/42297229)一文中截取一幅图

图1

如图1,我们的Sfilter!FiDO绑定在Ntfs!CDO之上。

在DriverEntry中设置IRP_MJ_FILE_SYSTEM_CONTROL的IRP处理函数:

DriverObject->MajorFunction[IRP_MJ_FILE_SYSTEM_CONTROL]=SfFsControl;

下面我们用WinDBG来分析 SfFsControl 函数

在函数

NTSTATUS

SfFsControl(

IN PDEVICE_OBJECT DeviceObject,

IN PIRP Irp

)中 传入的 参数信息:

图2

DeviceObject的地址是0x86337998,是绑定在Ntfs!CDO上的FiDO的地址。这时候说明我们已经截获了发送给FS的IRP_MJ_FILE_SYSTEM_CONTROL。

我们记录下storageStackDeviceObject= irpSp->Parameters.MountVolume.Vpb->RealDevice;

图3

typedef struct_VPB {

CSHORT Type;

CSHORT Size;

USHORT Flags;

USHORT VolumeLabelLength;// inbytes

struct _DEVICE_OBJECT *DeviceObject;      //文件系统上的卷设备对象

struct _DEVICE_OBJECT *RealDevice;          //实际存储媒介设备对象

ULONG SerialNumber;

ULONG ReferenceCount;

WCHAR VolumeLabel[MAXIMUM_VOLUME_LABEL_LENGTH/sizeof(WCHAR)];

} VPB, *PVPB;

这里截取的IRP我们只能取出RealDevice,DeviceObject这个设备要到文件系统处理完之后才能取得。

新建一个FiDO

status = IoCreateDevice(               gSFilterDriverObject,

sizeof( SFILTER_DEVICE_EXTENSION ),

NULL,

DeviceObject->DeviceType,

0,

FALSE,

&newDeviceObject );

图4

newDeviceObject的地址是0x861b73f8

newDevExt =newDeviceObject->DeviceExtension;

newDevExt->StorageStackDeviceObject =storageStackDeviceObject;

调用ObQueryNameString查询StorageStackDeviceObject 的设备名

图5

接下来调用 status= IoCallDriver( devExt->AttachedToDeviceObject, Irp );交给Ntfs!CDO处理

图6

Ntfs!CDO处理完之后生成VPB->VDO(0x8626a020)

图7

NTFS!VDO->NextDevice(0x862c8270)正是NTFS!CDO(0x862c8270)

图8

绑定FiDO到NTFS!VDO设备上

status = SfAttachDeviceToDeviceStack(

vpb->DeviceObject,

FiDO,

&newDevExt->AttachedToDeviceObject );

图9

最后我们绘制出FiDO附着在VDO上的全图

图10

白话VPB(volume parameter block)相关推荐

  1. 推荐一款截图神器——FSCapture

    FSCapture FSCapture是一款抓屏工具,体积小巧.功能强大,不但具有常规截图等功能,更有从扫描器获取图像,和将图像转换为 PDF文档等功能.还有图片编辑,屏幕录像,编辑视频等强大的功能. ...

  2. 内核文件管理-IRP(一)创建或打开文件

    内核下通过直接向 FSD (File System Driver) 发送 IRP (I/O Request Packet)来管理文件,可以绕过一些 API Hook. 本文讲怎样通过向 FSD 发送 ...

  3. C/C++ 实现文件透明加解密

    今日遇见一个开超市的朋友,真没想到在高校开超市一个月可以达到月净利润50K,相比起我们程序员的工资,真是不可同日而语,这个世道啊,真是做程序员不如经商开超市, 我们高科技的从业者,真是造原子弹不如卖茶 ...

  4. Windows 文件系统过滤驱动开发教程 (第二版)

    Windows 文件系统过滤驱动开发教程 (第二版)       楚狂人-2007-上海 (MSN:walled_river@hotmail.com)          -1.  改版序....... ...

  5. Nova 启动虚拟机流程解析

    目录 文章目录 目录 前言 从请求说起 nova-api service 阶段 前言 Nova 启动虚拟机的东西太多,持续更新- 从请求说起 无论是通过 Dashboard 还是 CLI 启动一个虚拟 ...

  6. 图表控件 c++_用C/C++编写16位虚拟内核

    文章的范围是什么? 在本文中,我将试图简要介绍文件系统在引导加载程序中的重要性,并尝试编写一个虚拟内核,它只会显示一个提示,让用户输入文本.为什么我要嵌入我的引导加载程序到一个脂肪格式的软盘,它是如何 ...

  7. 操作系统真像还原 - MBR主引导程序初体验

    ;主引导程序 ;------------------------------------------------------------ SECTION MBR vstart=0x7c00mov ax ...

  8. 翻译《文件系统取证分析》第13章

    第13章 NTFS 数据结构 这是关于NTFS的第三章亦是最后一章,这里我们将分析它的数据结构.前两章写了它的基本概念和怎么去解析它.对许多人来说,目前为止所涉及的知识已经足够了,但我们中的其他人想知 ...

  9. Windows引导过程(BIOS,UEFI)

    通电后CPU首先执行的是主板引导程序,主板引导程序可分为BIOS和UEFI.BIOS是最早的方案,搭配MBR分区使用,BIOS逐渐被UEFI代替,UEFI一般搭配GPT分区使用,所以引导过程会有两种情 ...

最新文章

  1. 你们要的圣诞帽~ Python实现
  2. map可以用结构体作为健值吗?
  3. 随想录(matlab学习)
  4. ccd相机好修吗_CCD到底值不值得买,CCD相机入坑全过程
  5. C#基础6:枚举与结构体
  6. python json dump_为什么json.dump()没有以\ n结尾? - python
  7. day060 中间件及session源码
  8. java中参数 ...的用法和意思
  9. 小米手机开启开发者模式以及INSTALL_FAILED_USER_RESTRICTED报错处理
  10. 【澳大利亚英语】我的英语笔记。。。
  11. TCP/IP协议(2):各层网络设备
  12. C# 用户自定义控件添加到工具箱
  13. 基于javaee的社区医院远程挂号系统
  14. [Neo4j] CQL命令
  15. zcu104 AXI DMA速度测试总结
  16. 玩游戏计算机频繁重启,win7系统玩lol游戏电脑总是重启如何解决
  17. ios和android游戏平台,iOS和Android平台上的10款益智游戏
  18. java structs_Structs2 Action使用
  19. 2020焊工(高级)考试题及焊工(高级)考试软件
  20. python爬取下载m3u8加密视频,原来这么简单!

热门文章

  1. 阿龙的学习笔记---《程序员自我修养-链接、装载与库》读书笔记(一)
  2. JavaEE 面试题总结
  3. DIV布局 旅游出行网站设计——武汉旅游(11页) HTML+CSS+JavaScript dreamweaver作业静态HTML网页设计模板
  4. 基于virtuoso IC 618的LDO仿真实验
  5. 移动端软盘遮盖输入框的解决方案
  6. matlab汽车驱动力与行驶阻力,用matlab绘制汽车驱动力 行驶阻力平衡图
  7. ICCV 2021审稿结果出炉,有人已总结出了一份Rebuttal写作指南
  8. FreeRTOS消息队列
  9. 让智能更落地,让中台更智能
  10. “玲珑杯”ACM 热身赛 # 2.5 A-B (数论)