文件系统驱动开发心得

news/2025/2/3 18:13:20/

 * 打开文件系统对象的特殊方式

    文件系统驱动接收到IRP请求IRP_MJ_CREATE时,如果IrpSp->Flags指定了SL_OPEN_TARGET_DIRECTORY,则表示并不是真的要打开指定的文件系统对象,而是要检查对象是否可以删除已经它所在的目录是否可以进行创建操作。 通常这样的请求会发生在重命名文件系统对象之前。

 

* 文件系统驱动处理相对路径
    处理IRP_MJ_CREATE时,如果IRP的FileObject使用的相对路径,可以通过FileObject的RelatedFileObject获得相对路径所在的目录信息。

 

* 提供正确的存储空间信息
    处理IRP_MJ_QUERY_VOLUME_INFORMATION时,如果要查询的信息类型为FileFsSizeInformation或者FileFsFullSizeInformation,必须没有提供正确的存储空间参数,可能会造成资源管理器查看文件属性时崩溃。尤其是信息结构的BytesPerSector成员,千万不要设置为0。

 

* 支持文件的内存映射
    Windows的文件内存映射机制能够缓解文件的IO次数,比如CreateFileMapping函数。要实现最基本的文件映射支持,文件系统驱动必须在处理IRP_MJ_CREATE时给FileObject的SectionObjectPointer成员赋值,并设置SectionObjectPointer的成员都为NULL值。FileObject的FsContext成员必须指向一块已分配的并全部填充为0的内存区,这块内存区的大小不能小于FSRTL_COMMON_FCB_HEADER类型的字节数。在处理IRP_MJ_CLEANUP时,如果FileObject的SectionObjectPointer的DataSectionObject成员不为NULL,应该调用CcPurgeCacheSection函数清除缓存管理器产生的数据。

 

* 正确处理IRP_MJ_CREATE
    文件系统驱动的IRP_MJ_CREATE不仅要处理打开文件或目录,还要处理打开卷。如果FileObject的FileName字节数为0,则表示要打开的是卷。

* FltRegisterFilter函数返回STATUS_OBJECT_NAME_NOT_FOUND
    一个文件系统迷你过滤驱动的注册表项(HKLM/System/CurrentControlSet/Services/<驱动的服务名>)下面必须有一个名为"Instances"的子项用于存放驱动的实例信息,该子项下面的字符串值"DefaultInstance"指定了默认实例的名称。"Instances"项下面的每一个子项表示一个实例,每个实例子项必须有一个字符串值"Altitude"。
   FltRegisterFilter函数执行时,如果在注册表中没有找到默认实例的"Altitude"值,将会返回STATUS_OBJECT_NAME_NOT_FOUND错误。


http://www.ppmy.cn/news/538888.html

相关文章

微软迷你服务器,选择Essentials的安装类型

选择Essentials的安装类型 选择Essentials安装类型 Windows Server 2012 Essentials提供两种安装类型可供选择。 第一类是升级安装&#xff0c;安装Windows并且保留文件、设置和应用程序。如果使用此选项&#xff0c;系统在安装时则会把文件、设置和应用程序移到升级后的Window…

迷你u盘linux,能装进口袋的windows系统,轻巧迷你,性能比想象中好!

WTG(windows to go)&#xff0c;它是微软在很早以前就开发的一个windows功能。 能够将windows 系统完整地塞进U盘、移动硬盘这些便携设备上&#xff0c;并且用户能够随时在不同的电脑硬件上直接运行&#xff01; 接下来与大家分享能够被我们装进口袋里的windows&#xff01; 有…

u盘迷你linux,U盘上的迷你linux——BabyLinux

U盘上的迷你linux——BabyLinux 类别:发行版类 上传时间:2006-01-09 版本: 大小:82.30 MB 得分: 63% 好 下载次数:1869 投票: [好] [差] 相关网址: 简短描述: ####非常感谢opp 提供FTP空间 #迫切希望另有好心人提供其他FTP空间&#xff0c; 或者提供下载镜象&#xff0c;以保…

从无到有做一个属于自己的迷你操作系统

这篇教程不需要你有什么编程基础&#xff0c;只需要对计算机结构有过大致的了解就可。本教程的基本原理取自《x86汇编语言-从实模式到保护模式》一书。本教程涉及的所有工具都已打包&#xff0c;链接附在文章末尾&#xff0c;感兴趣的小伙伴可以自行下载。废话不多说&#xff0…

Linux怎么拷贝文件到ext3,如何在Linux上将Ext2或Ext3文件系统迁移到Ext4 | MOS86

知道您应该升级Linux文件系统但不能面对麻烦吗&#xff1f; 此处介绍了如何将ext2和ext3转换为ext4&#xff0c;而无需进行彻底的重新安装。 如果您彬彬有礼&#xff0c;则可以将ext3文件系统称为值得尊敬的系统&#xff0c;该系统可追溯到2001年启动。对于可怜的旧ext2&#x…

java怎么生成exe文件_Java如何生成exe文件

对于作Java桌面应用来说,比较烦人的就是安装部署问题,客户端是否安装有jre、jre版本问题、jre去哪下载、如何用jre启动你的Java应用?不要说刚接触电脑的人,就算是比较熟悉电脑,如果没有接触过Java,面对一个Java应用,如何在Windows下启动它,估计都会折腾半天。如果不是因…

串口 单片机 文件_DIY迷你单片机学习板

图28.1 单片机编程实验板 单片机是一门实践性非常强的学科&#xff0c;复杂的中断系统和寄存器往往让初学者觉得晦涩难懂。如果仅仅是理论学习和纸上谈兵而不经过任何实践&#xff0c;套用平凡老师以前的一句话——“我劝您还是趁早放弃。” 为此&#xff0c;我们设计了这款小巧…

不属于mysql系统文件_下面 ( ) 不属于数据库管理系统。_学小易找答案

【单选题】在采用客户机/服务器体系结构的数据库 应用系统 中,应该将用户应用程序 安装在 ( ) 。 【简答题】外事接待的 一般常识 有哪些? 【单选题】下面哪一个是SQL Server 2008的系统数据库( )。 【单选题】下面 ( ) 不属于数据库管理系统。 【单选题】下面 ( ) 不属于 SQL…