文件过滤驱动-FSFilter

合集下载

文件系统过滤驱动

文件系统过滤驱动

1 引言文件系统过滤概述文件安全性问题已成为当今信息科学领域最重要的课题之一。

目前,解决这个问题的主要技术手段有两种:一是利用应用层HOOK(钩子)技术,对Windows 提供的文件操作函数(API)及由文件操作所触发的Windows消息进行HOOK,经过适当的处理达到预期目的,缺点是效率低、稳定性和一致性差,不适合于大型系统的开发;另一种是开发文件过滤驱动程序,文件过滤驱动作为一种内核态中间层驱动,不需要改变下层驱动或用户程序而增加新的功能,具有效率高、可靠性强、可扩充等特点,成为现阶段信息安全技术研究的热点。

1.1 文件过滤驱动在信息安全领域的应用1 文件加/解密文件过滤驱动程序可以实现对指定文件、目录,甚至整个逻辑盘的加/解密功能。

当文件在写入磁盘的过程中,截获所有对该文件的IRP_MJ_WRITE,在其分发例程中对IRP携带的数据进行加密处理后写入磁盘;文件被从磁盘读取的过程中,截获所有对该文件的IRP_MJ_READ,在其分发例程中对IRP携带的数据进行解密处理后向上层返回。

加密后的文件在磁盘中以密文形式存储,保证了数据存储的安全性。

2 病毒防护应用程序在创建一个新文件或打开一个已存在文件时,文件系统过滤驱动程序截获IRP_MJ_create,判断被打开文件是否存在和病毒特征代码库相匹配的特征,若存在,说明文件感染了病毒,失败掉该IRP,拒绝打开;否则,使IRP继续向下传递,完成正常的打开操作。

3 进程控制为了防止恶意进程的破坏,有时需要规定只允许某些经过安全验证的特定进程对受保护的文件进行访问,其他不在规则范围内的进程不允许访问。

我们可以通过系统提供的PsGetCurrentProcessId、PsGetCurrentThreadId等API函数得到发起I/O请求的进程及线程的相关信息,如:获得发起进程名称,与安全访问规则(进程白名单)中的可信进程相比较,若该进程位于规则中,说明信任其行为是安全的,允许访问受保护文件;否则,拒绝访问。

文件系统驱动和设备驱动的区别 以及介绍

文件系统驱动和设备驱动的区别 以及介绍

文件系统过滤驱动以及设备驱动的区别一、何谓文件系统过滤驱动?文件系统过滤驱动是一种可选的,为文件系统提供具有附加值功能的驱动程序。

文件系统过滤驱动是一种核心模式组件,它作为Windows NT执行体的一部分运行。

文件系统过滤驱动可以过滤一个或多个文件系统或文件系统卷的I/O操作。

按不同的种类划分,文件系统过滤驱动可以分成日志记录、系统监测、数据修改或事件预防几类。

通常,以文件系统过滤驱动为核心的应用程序有防毒软件、加密程序、分级存储管理系统等。

二、文件系统过滤驱动并不是设备驱动设备驱动是用来控制特定硬件I/O设备的软件组件。

例如:DVD存储设备驱动是一个DVD驱动。

相反,文件系统过滤驱动与一个或多个文件系统协同工作来处理文件I/O操作。

这些操作包括:创建、打开、关闭、枚举文件和目录;获取和设置文件、目录、卷的相关信息;向文件中读取或写入数据。

另外,文件系统过滤驱动必须支持文件系统特定的功能,例如缓存、锁定、稀疏文件、磁盘配额、压缩、安全、可恢复性、还原点和卷装载等。

下面两部分详细的阐述了文件系统过滤驱动和设备驱动之间的相似点与不同点。

1、文件系统过滤驱动同设备驱动的相似点:下列部分描述了Windows操作系统中文件系统过滤驱动和设备驱动之间的相似点:(1)、类似的结构类似于设备驱动,文件系统过滤驱动有着属于自己的DriverEntry、Dispatch和I/O组件例程。

文件系统过滤驱动同设备驱动一样调用许多相同的系统核心例程,它们都会过滤发送给它们所关联的设备的I/O请求。

(2)、类似的功能:文件系统过滤驱动和设备驱动都是I/O子系统的组成部分,因此它们都接收和作用于I/O请求包(IRP)。

类似于设备驱动,文件系统过滤驱动同样可以创建它们自己的IRP并将该IRP发送到低层驱动。

这两种驱动均可以通过注册回调函数来接收多种系统事件的通知。

(3)、其它类似点:同设备驱动类似,文件系统过滤驱动可以接收传入的I/O控制码(IOCTLs)。

filealterationobserver filefilter -回复

filealterationobserver filefilter -回复

filealterationobserver filefilter -回复什么是文件更改观察器(File Alteration Observer)?如何使用文件过滤器(File Filter)来优化文件更改观察器的功能?文件更改观察器(File Alteration Observer)是一种软件工具,它可以监视特定目录或文件,检测并记录文件的更改、添加或删除操作。

这个工具在许多情况下都非常有用,比如监控配置文件的更改、检查文件完整性、比对文件版本等。

文件过滤器(File Filter)可以进一步优化文件更改观察器的功能,通过设置特定的过滤规则,只关注特定类型或特定名称的文件更改。

接下来,我们将一步一步回答有关文件更改观察器和文件过滤器的问题。

第一步:了解文件更改观察器(File Alteration Observer)文件更改观察器是一个监控工具,它可以实时监视特定目录或文件的更改情况。

当文件发生更改、添加或删除时,观察器会记录这些变化并生成相应的报告。

这个工具可以帮助我们了解文件的变更历史,追踪问题的源头,或者确保文件的完整性和安全性。

第二步:掌握文件过滤器(File Filter)文件过滤器是用于优化文件更改观察器功能的工具。

通过设置文件过滤器,我们可以筛选出我们关心的文件,并忽略其他不重要的文件更改。

过滤器可以根据文件的类型、名称、大小或修改日期等属性来进行设置。

第三步:使用文件过滤器来优化文件更改观察器的功能以下是一些使用文件过滤器优化文件更改观察器功能的方法:1. 根据文件类型进行过滤:通过设置文件过滤器,只关注特定类型的文件更改。

比如,如果我们只关心文本文件的更改,我们可以设置过滤器只监视.txt或.doc文件。

2. 根据文件名称进行过滤:设置文件过滤器,只监视特定名称的文件更改。

这在处理特定配置文件的更改时特别有用。

比如,我们可以设置过滤器只监视名为"config.properties"的文件。

Windows 文件过滤驱动经验总结

Windows 文件过滤驱动经验总结

本上所有设备栈相关 IRP 处理工作都是在它那里完成的。 包括 IRP->Flags 的一些标志的判断,对 APC 的处理,抛出 MULTIPL
E_IRP_COMPLETE_REQUESTS 错误等。当它延设备栈一直 调用驱动所安装的 CompleteRoutine时,如果发现 STA
TUS_MORE_PROCESSING_REQUIRED 这个标志,则会停止 向上继续回滚。这也是为什么在 CompleteRoutine 中
pleteRoutine 中使用 IoFreeIrp()来释放掉这个 IRP,并不让 它继续传递。这里一定要注意,在 CompleteRout
ine函数返回后,这个 IRP 已经释放了,如果这个时候在 有任何关于这个 IRP 的操作那么后果是灾难性的,必定导 致 BSOD 错误。前面
1) 小节给出的例子只完成了第一步这里继续讲第二步, 第一步我重用这个 IRP 得到了文件大小,那么这个时候虽 然知道大小,但我还是无法知道这个
FCB (File Control Block)的。 2、从头建立 IRP 发送关注点 无论你建立什么样的 IRP,是 IRP
_MJ_CREATE 也好还是 IRP_MJ_DIRECTORY_CONTROL也罢, 最要提醒的就是一些标志。不同的标志会代来不同的结 果,有
些结果是直接返回失败。这里指的标志不 光是 IRP->Flags, 还要考虑 IO_STACK_LOCATION->Flags还有其它等等。尤
tine 中绝大多数就这么两种情况,你需要使用其中的一种 情况。那么为什么需要安装 CompleteRoutine 呢?那是因 为我们对其 IR
P 从上层驱动,经过我们驱动,在经过底层设备栈返回到 我们这一层驱动时需要得到其中内容作为参考依据的, 还有对其中内容需要进行修改的。再有一种情

Windows文件系统的过滤器驱动程序设计

Windows文件系统的过滤器驱动程序设计

Windows文件系统的过滤器驱动程序设计过滤器驱动程序是Windows操作系统中的一种特殊类型的驱动程序,用于实现文件系统层面的数据过滤和处理。

它可以截取文件系统操作,对文件或目录的访问进行拦截和修改,以实现特定的功能或策略。

1. 过滤器驱动程序的种类:Windows操作系统支持多种类型的过滤器驱动程序,包括文件系统过滤器驱动程序、网络过滤器驱动程序和通用过滤器驱动程序等。

其中,文件系统过滤器驱动程序是最常见的类型,用于截获和处理文件系统操作。

2.过滤器驱动程序的工作原理:过滤器驱动程序通过在文件系统的驱动栈中插入自身的过滤器层,来截获文件系统的操作。

当应用程序对文件或目录进行操作时,过滤器驱动程序可以截获这些操作并进行相关处理,比如拒绝访问、修改文件内容等。

3. 过滤器驱动程序的开发工具:Windows提供了一些开发工具和框架,可以帮助开发者设计和实现过滤器驱动程序。

比如,Windows Driver Kit (WDK)中包含了一些示例代码和文档,可以帮助开发者快速入门;而Windows Filter Manager (FltMgr)提供了一个高级的API接口,用于编写和管理过滤器驱动程序。

4.过滤器驱动程序的功能:过滤器驱动程序通常用于实现一些文件系统相关的功能或策略,比如文件加密、访问控制、实时监控等。

开发者可以根据需求设计和实现不同的功能模块,并在过滤器驱动程序中进行集成和管理。

5.过滤器驱动程序的资源管理:过滤器驱动程序在运行过程中需要占用一定的系统资源,包括内存、CPU等。

开发者需要合理地管理这些资源,避免造成系统性能下降或不稳定。

总之,Windows文件系统的过滤器驱动程序设计是一个相对复杂的任务,需要开发者对Windows操作系统的内部机制有一定的了解和掌握。

通过合理的设计和实现,可以实现各种不同的功能和策略,提升系统的安全性和稳定性。

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

Windows文件系统过滤驱动开发教程(第二版)
前我在驱动开发网上发表了一组描述如何开发 Windows 文件系统过滤驱动的文章。非常庆幸这些文章能 给大家带来帮助。
原本的文章中我使用了自己编写的代码。我不打算在这里论述代码风格的优劣并发起一场辩论,无可怀疑的是,读者们 大多喜欢看到类似微软范例的代码。为此我把文章中的代码换成微软标准的文件过滤驱动范例 sfilter 的代码。赠于喜欢此 书的读者和驱动开发的后来者们。
网友们帮我整理的原版已经非常流行。为了区别起见,称为第二版。
0. 作者,楚狂人自述
我感觉 Windows 文件系统驱动的开发能找到的资料比较少。为了让技术经验不至于遗忘和引起大家交流的兴趣我以 我的工作经验撰写本教程。
我的理解未必正确,有错误的地方望多多指教。我在一家软件公司从事安全软件相关的开发工作。我非常庆幸和许多优 秀的同事一起工作,特别要提到 wowocock,陆麟,jiurl 和曾经的同事 Cardmagic.非常乐意与您交流。有问题欢迎与我 联系。邮箱为 MFC_Tan_Wen@。
学习文件系统驱动开发之前,应该在机器上安装 ifsddk。ddk 版本越高级,其中头文件中提供的系统调用也越多。一 般的说用高版本的 ifsddk 都可以编译在低版本操作系统上运行的驱动(使用对应的编译环境即可)。ifsddk 可以在某些 ftp 上免费下载。请不要发邮件向我索取。
我的使用的是 ifs ddk for 2003,具体版本号为 3790,但是我实际用来开发的两台机器有一台是 windows 2000, 另一台是 windows 2003.我尽量使我编译出来的驱动,可以在 2000\xp\2003 三种系统上都通过测试。
对于这本教程,您可以免费获得并随意修改,向任何网站转贴。但是不得使用任何内容作为任何赢利出版物的全部或者 部分。

文件过滤驱动学习笔记1

文件过滤驱动学习笔记1

文件过滤驱动学习笔记1文件系统过滤驱动,是在驱动级别上实现的,对文件系统的一举一动进行检测的一种技术。

这里仅指windows操作系统。

过滤包括文件打开、读写、重命名、删除,目录的操作等。

文件过滤非常有用,大多数实时监控的杀毒软件都会利用到这个技术。

从今天开始,分享在学习过程中的一些心得。

Wdk提供了一个sfile例子,供我们参考。

微软的习惯很好,在抛出一个新的东西之后,它的文档肯定有一个同步的跟进。

并且文档做得非常好,msdn,各种help。

比起google的android,微软的脚步走得更加坚实。

言归正传。

源文件在我电脑的路径是C:\WinDDK\6001.18002\src\filesys\filter\sfilter。

这个目录下有乱七八糟8个文件,而真正的代码只有sfilter.c一个。

让我们开始揭开它神秘的面纱吧。

看代码一般从入口开始看起。

DriverEntry。

sfilter的DriverEntry 做了三件事。

1填充MajorFunction,2填充fastIoDispatch,3注册文件系统变化回调。

1.填充MajorFunction这个不多说了,上层应用程序调用驱动时,就是利用这些接口。

比如CreateFile时候,会调用IRP_MJ_CREATE。

我们要进行过滤,就需要在这些例程中做事情。

2.填充fastIoDispatch这个我至今没看懂啥意思。

不过看雪上的高人都说,这个东西没必要管它,最多只是速度上的损失。

3.注册系统变化回调status = IoRegisterFsRegistrationChange( DriverObject, SfFsNotification );SfFsNotification这个函数是绑定设备控制对象的关键所在。

其重要性就在于,它能探测动态加载的卷设备,包括u盘等。

这里着重说说这个东西。

我们知道,驱动中实现过滤的一般方法就是绑定。

绑定一个我们自己的设备对象到设备栈顶,所有的IRP信息到来后首先到达我们的设备对象,从而可以优先获取系统信息。

文件系统Minifilter驱动

文件系统Minifilter驱动

文件系统Minifilter驱动声明:本系列文章源于WDK,所有权利归原作者所有,翻译的目的只为交流和学习。

除了商用你可以随意地使用这篇译文。

但请不要删除声明。

——by jununfly说明:所有preoperation及postoperation均简写为pre-oper和post-oper所有文件系统过滤驱动均简写为FSFD(文件系统过滤驱动)所有基于IRP的I/O即IRP-based I/O均简写为IRP-I/O版本:20090220Filter管理器和Minifilter驱动架构Filter 管理器是一个内核模式驱动,它遵照legacy文件系统filter模型并具有FSFD必需的功能。

利用这些功能,第三方开发者可以写 minifilter驱动,这样的驱动比legacy(陈旧的) FSFD更易于开发,因此缩短了开发过程同时制造出更高质量、更灵活的驱动。

本章包括:一、Filter管理器概念Filter管理器随Windows一起被安装,但它只在minifilter驱动被加载时才起作用。

Filter管理器被绑定到目标卷的文件系统栈上。

当Minifilter驱动要执行过滤I/O操作时,必须先向filter 管理器注册来间接绑定到文件系统栈上。

Legacy 过滤驱动在文件系统I/O栈中的位置,相对于其他过滤驱动来说是在系统启动时由它的加载顺序组决定的。

例如,一个antivirus过滤驱动在栈中的位置应该高于一个“复制操作”的过滤驱动,因而它能在文件被复制到远程服务器之前探测病毒并消除文件中的病毒。

因此,FSFilter Anti- Virus加载顺序组中的过滤驱动的加载要先于FSFilter Replication组中的过滤驱动。

每一个加载顺序组都有一个相应的系统定义的类和INF文件中要使用的类GUID。

像legacy过滤驱动一样,minifilter驱动的绑定也按照一定的顺序。

不过,绑定顺序是由altitude这个唯一标识符决定。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。


读写过滤

读操作
文件的长度: Length = IrpSp->Parameters.Read.Length;

文件的偏移量: Offser.QuadPart = IrpSp->Parameters.Read.ByteOffset.QuadPart

文件内容: Irp-> MdlAddress不为空,则使用Irp-> MdlAddress,缓冲区位置为MmGetSystemAddressForMdlSafe(Irp-> MdlAddres),否则直接使用Irp-> UserBuffer
类型和逻辑
加密指定后缀
加密不区分后缀
重定向原理
重定向原理+加密指定后缀(1)
重定向原理+加密不区分后缀(2)
透明加解密原理
动态加解密原理+加密指定后缀(3)
动态加解密原理+加密不区分后缀(4)
基本流程

读流程
基本流程

写流程
基本数据结构


FileObject,打开一个文件,io 管理器为其创建一个文件对象 结构 FCB,一个文件可能被多个程 序同时打开,这样会生成多个 FileObject,但是只存在一个 FCB 段对象指针
分发函数

主功能IRP



DriverObject->MajorFunction[IRP_MJ_FILE_SYSTEM_CONTROL] = FsControl; DriverObject->MajorFunction[IRP_MJ_DIRECTORY_CONTROL]= DispatchDirectoryControl; DriverObject->MajorFunction[IRP_MJ_CREATE] = DispatchCreate; DriverObject->MajorFunction[IRP_MJ_READ] = DispatchRead; DriverObject->MajorFunction[IRP_MJ_WRITE] = DispatchWrite; DriverObject->MajorFunction[IRP_MJ_SET_INFORMATION] = DispatchSetInfo; DriverObject->MajorFunction[IRP_MJ_CLOSE] = DispatchClose; DriverObject->MajorFunction[IRP_MJ_CLEANUP] = DispatchClean; DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = DispatchDeviceIoControl;
稳定周期较长 兼容性测试最重要(各种防火墙软件、防病毒软件、主动 防御软件、Rookit技术软件等等) Windows操作系统的升级导致驱动不能平滑过渡( win98/wind2000/winxp/vista/windows 7)
周期长
驱动开发



字符串操作 进程空间、线程上下文 内存分配 线程互斥访问 数据结构(双链表) 中断优先级 DeviceObject、DriverObject Irp理解
学习曲线
驱动层
文件过滤驱动
应用层
Windows系统 Windows开发
C/C++ MFC机制 COM机制 进程、线程、内存管理 PE文件格式、SHE机制 HOOK技术、反汇编 。。。
文件系统 进程、线程、内存机制 核心数据结构 。。。 驱动开发 缓存管理 文件头标识存放 密钥、策略管理 读写加解密处理 。。。
被动加密
使用者并不知道或者并不想文件变成加 密状态,系统自动将文件加密,称之为 被动加密。
类型和逻辑

1、加密指定后缀: 通过指定后缀加密是指保密程序对生成的某一类文档进行加密,而
对其他后缀仍然采用明文。其优点是只加密制定类型的文档,而不影响其 它文件,在加密范围上相对较小,系统的稳定性容易提高;缺点是可能产 生“另存为其他类型的文档”的泄密漏洞,因为此时存储的结果并不是被指 定加密的文件类型。即使把程序可能产生的后缀格式都指定也没有用,因 为有很多办法另存出来 ,例如在Word中可以点击另存为然后在文件名栏输 入2个双引号(“),然后在这2个双引号之间输入任意后缀(例如test.123),那么 保存后的文件就是明文的,拷贝出来文件名改回doc后缀就可能导致文档 泄密。
文件路径获取

在文件创建时获取文件路径
透明加解密简介
1. 2. 3. 4. 5.
概念 类型和逻辑 流程 基本数据结构 重要技术难点
概念


透明指的是用户在 操作的时候,虽然后台 在自动的进行加解密, 但是用户根本就不知道 加密的存在,就像中间 隔了一层透明的玻璃一样。 透明的好处在于不改 变用户的操作,一切都和加 密之前一样,甚至在有些企 业安装加密后都无需通知所 有的员工,就像加密并不存 在一样,只是加密文件到了 企业安全环境的外部才会发 现文件无法打开
而且有些程序的文件格式没有定式,甚至可以保存为任意后缀,例如记 事本,这样加密指定的文件后缀就带来了安全漏洞。

2、加密不区分后缀: 加密不区分后缀是指保密程序对生成的所有文件都进行加密。这种加密
方式由于对指定进程产生的任何文件都加密从而堵住“另存为其他类型的文档” 的漏洞,可保证不论用户如何将文件另存都不会出现明文文件。其工作原理为指 定进程只要发生写操作就加密被写的文件,任何中间文件和临时文件都会被加密 。不区分文件后缀有更高的安全性,技术难度也大得多。


读写过滤

如何获取到读取的内容,取决于 irp操作的io方式:缓冲方式、直 接方式、其他方式
缓冲方式:在文件读写请求中没 有出现过,这种方式的特点是缓 冲从发出irp的应用程序的用户空 间,拷贝一份到内核空间,不同 进程空间的内存各自生效,但是 需要拷贝一份,效率较低


直接方式是用MDL来传递缓冲区 ,将用户空间的地址范围直接映 射到内核空间,这里面要修改页 表的属性 其他方式就是直接把用户空间的 指针传递到内核空间,不做任何 处理,这个指针就是irp>UserBuffer
重要技术难点

缓存管理


单缓存
合法进程打开存在文件,关闭文档,明文保存在缓存, 此时缓存没有刷 至硬盘,也没有清空内存中的资源。此时非法进程再打开文档,在 IRP_MJ_CREATE例程会刷新缓存操作,所以非法进程打开为乱码 合法进程打开存在文件,明文保存在缓存, 此时缓存没有刷至硬盘,也 没有清空内存中的资源。此时非法进程再打开文档,如果是word这种占着句 柄没有关闭的文档,判断为非法进程,禁止打开;如果是notedpad采用内存 映射文件的方式的,句柄关闭,则非法进程打开正在被合法进程打开的文档 ,在IRP_MJ_CREATE例程会刷新缓存操作,所以非法进程打开为乱码 非法进程打开未打开过的加密文档,密文。合法进程再打开加密文档,会先 刷新缓存。 合法进程打开加密文档,在关闭的时候在IRP_MJ_CLEANUP例程中对新 建的文件才刷新缓存
文件过滤驱动 FSFilter
引言



文件系统程序是操作系统核心的部分,对 于Windows操作系统来讲,文件系统和网 络部分并列为驱动程序中最难的部分,难 度大大超过声卡、显卡之类的硬件驱动程 序。 深入学习和调试文件驱动程序,文件过滤 驱动程序,更有助于学习Windows系统底 层核心技术。 本胶片主要介绍文件过滤驱动开发和其应 用:透明加解密,胶片内容比较广泛,希 望能够普及这方面的知识,希望更多有兴 趣的人一起研究,一起进步。

#define CdMapUserBuffer(IC, UB) { \ *(UB) = (PVOID) ( ((IC)->MdlAddress == NULL) ? \ (IC)->UserBuffer : \ (MmGetSystemAddressForMdlSafe( (IC)->MdlAddress, HighPagePriority))); \ }
类型和逻辑
加密类型
静态加密 动态加密
加密原理
把整个文件加密掉、或者把整个文件加 密掉。 文件整体是加密状态,需要解密时读取 多少就解密多少,写入多少就加密多少 ,而不需要把整个文件都解密掉。 由使用者自行要求文件变成加密状态称 之为主动加密
举例
主动加密
主动加密的方式很多,例如用WinRar 把文件压缩并定义一个口令,或者给 Word、Excel文件一个打开或者修改的 口令,这样其他人使用时必须由正确的 口令才能打开,这是使用者主动进行的 加密,如果使用者不进行加密则文件不 会在加密状态。只针对某些文件夹加密 的方式也可以理解为主动加密方式。主 动加密主要应用于个人的文件保护。 被动加密主要用于企业内部防止文件泄 密,即使使用者不想文件被加密,系统 还是会根据定义加密文件,这样文件被 拷贝等各种方法脱离企业环境后,由于 文件在加密状态而无法打开。被动加密 具有另一个特性就是透明操作,即使用 者并不需要进行加密和解密操作,一切 都是后台自动完成,使用者可以不知道 加密的存在。被动加密与作者的意愿无 关,相关文件都会被加密,磁盘加密和 文件透明加解密属于此类。

#define CdMapUserBuffer(IC, UB) { \ *(UB) = (PVOID) ( ((IC)->MdlAddress == NULL) ? \ (IC)->UserBuffer : \ (MmGetSystemAddressForMdlSafe( (IC)->MdlAddress, HighPagePriority))); \
相关文档
最新文档