管理文件系统滤波器驱动器的文件名的系统和方法

文档序号:6369882阅读:163来源:国知局
专利名称:管理文件系统滤波器驱动器的文件名的系统和方法
背景技术
文件系统驱动器(FSD)管理文件系统格式。尽管FSD以内核模式运行,FSD和标准内核模式驱动器在许多方面不同。最大的不同是,每个FSD把自己登记为带操作系统的文件系统驱动器。置于文件系统驱动器之上的滤波器驱动器称为文件系统滤波器驱动器。文件系统滤波器驱动器包括看文件系统请求以及可任意修改或完成请求的能力。文件系统滤波器驱动器可包括用来执行加密、病毒检测和其他操作的滤波器驱动器。
文件名检索和格式化通常是文件系统滤波器驱动器中实现的代码的大部分。文件系统(例如,NTFS、FAT等)可在允许的文件名的大小各异。例如,NT文件系统设置名称规格,把文件名路径中的每个组分限为255字符而总文件名长度限于65536字符。文件名可含有Unicode字符、多个句号符和嵌入空间。然而,某些文件系统其文件名限于8(非Unicode)字符,后面是一句号符和一3字符扩展名,通常称为“8.3”格式。结果,当初为这些文件系统所写的某些应用程序仍限于理解“8.3”格式或兼容文件名。在其他文件系统中,诸如NTFS,当应用程序请求短名时,文件系统为长名文件生成可选“8.3,格式短名。长名对应长于“8.3”格式的文件名、含有Unicode字符的文件名、有多个句号字符或一起始句号符的文件名及有嵌入空间的文件名。短名是文件的完全功能别名且和长名一样存储于同一目录中。可使用长名和短名中的任何一个来打开、复制文件、从文件读或写至文件。
存在其他格式的文件名,文件系统滤波器驱动器可启动对这些格式中的任一种的文件名的询问。文件名通常由文件系统滤波器驱动器用来控制在I/O操作期间应采取何动作。用户或应用程序可以许多不同的格式中的一种格式规定文件名。在某些情况下,文件系统滤波器驱动器将文件名标准化为标准格式以检查文件名对其操作的切合性。文件系统滤波器驱动器通常也将文件名分析为段。例如,提供病毒检测的文件系统滤波器驱动器对文件名的扩展名类型(例如.exe和.dll等)很有兴趣,且希望分析来自文件名的扩展名。目前,多滤波器驱动器可将自身附加到一FSD,每个滤波器驱动器通过就文件名询问FSD耗费资源。每个文件系统滤波器驱动器包括代码,并奉献进程时间,以管理和操纵文件名以实现其功能。
发明概要根据本发明,提供一种用来管理文件系统滤波器驱动器的文件名的系统和方法。本发明包括用来处理和阻尼文件系统滤波器驱动器(以下称为滤波器驱动器)的文件名操作的文件系统滤波器管理器(以下称为滤波器管理器)。滤波器管理器向每个滤波器驱动器提供公共文件名检索和格式化功能。另外,滤波器管理器支持高速缓存共享于一或更多滤波器驱动器间的名称信息。高速缓存、文件名检索和格式化功能通过加强滤波器管理器内的文件名管理提高在文件系统内管理文件名的效率。
本发明管理文件系统中滤波器驱动器的文件名。本发明包括处理滤波器驱动器的文件名询问的滤波器管理器。滤波器管理器接收和处理位于驱动器栈中的滤波器驱动器的文件名请求。滤波器管理器为先前生成的文件名维护文件名信息结构高速缓存。每个文件名信息结构包括指示字表,该表包括对文件名段的指示字。滤波器管理器首先检查高速缓存以判断是否事先生成对应滤波器驱动器的文件名请求的文件名信息结构。如果不存在这样的文件名信息结构,滤波器管理器向文件名的提供者要求文件名。一旦生成文件名信息结构,滤波器管理器更新与文件名信息结构相关的引用计数和时间戳。引用计数保证只要文件名信息结构由至少一滤波器驱动器使用,文件名信息结构便有效。时间戳保证当重命名文件或其他后续操作影响文件名,文件信息结构反映文件的当前文件名。滤波器管理器然后向请求滤波器驱动器返还对对应文件名信息结构的指示字。
附图简述

图1说明用于本发明一示例实施例中的示例计算设备。
图2是说明用来实践本发明的示例环境的框图。
图3说明根据本发明的NTFS文件系统的数据结构的示例框图。
图4示出根据本发明文件对象和滤波器管理器数据结构间的联系的示例框图。
图5说明根据本发明与滤波器管理器相关的其他数据结构的示例框图。
图6示出一示例文件名及其根据本发明标号的对应段。
图7是根据本发明执行的文件名询问过程的示例概述的逻辑流程图。
图8是根据本发明执行的示例文件名请求处理过程的逻辑流程图。
图9是根据本发明执行的示例文件名生成过程的逻辑流程图。
图10是根据本发明执行的示例文件名信息结构高速缓存过程的逻辑流程图。
图11是根据本发明执行的示例重命名过程的逻辑流程图。
图12是根据本发明执行的示例文件名穿越过程的逻辑流程图。
较佳实施例详述简言之,本发明涉及一种管理文件系统中的滤波器驱动器的文件名的方法和系统。本发明包括处理来自滤波器驱动器的文件名询问的滤波器管理器。滤波器管理器向请求滤波器驱动器返还指向对应所请求文件名类型的文件名信息结构的指示字。滤波器管理器还管理包括能在各种滤波器驱动器间共享的信息的文件名信息结构的高速缓存,阻尼对滤波器驱动器的文件名的询问。滤波器管理器的高速缓存功能提高效率并降低文件系统内文件名询问的总开销,方法是通过减小文件系统滤波器驱动器检索所需文件名部分所要求的文件名操作数目。
贯穿本说明书和所述权利要求,除非上下文清楚地另外规定,下列术语取直接与本发明相关的含义。
术语“文件信息结构”或“FIS”指与滤波器管理器相关的数据结构,该滤波器管理器在至少一实施例中存储指向存储于卷上的特定文件名的名称段的指示字。术语“名称段”指文件名的一部分。例如,文件名通常包括扩展名(例如.txt.、dll.、..doc等)。扩展名表示名称段的类型。
术语“等级”指特定滤波器驱动器响应在应用程序和管理卷的文件系统间发送的输入/输出请求包(IRP)的顺序。等级较高的滤波器驱动器称为离文件系统“较远”,当从应用程序发送IRP时,与其他滤波器驱动器相比较早地处理与IRP相关的操作。相应地,当从文件系统发送IRP时,等级较低的滤波器驱动器与其他滤波器驱动器相比较早地处理与IRP相关的操作。IRP时常称为IO子系统中使用的数据结构,包括诸如NTFS之类的文件系统。然而,即使只参考IRP,可以理解的是,本发明的滤波器管理器可将IRP转变为另一数据结构,诸如用来对滤波器提供一给定操作的回叫数据结构。
术语“文件名提供者”或者对应文件系统或者对应登记来提供文件的其它文件名的特定滤波器驱动器。
示例性运行环境参考图1,用来实现本发明的一示例实施例包括计算设备,诸如计算设备100。在很基本的配置中,计算设备100通常包括至少一处理单元102和系统存储器104。根据计算设备的准确配置和类型,系统存储器104可以是易失性的(诸如RAM)、非易失性的(诸如ROM、闪存等)或两者的某种组合。系统存储器104通常包括操作系统105、一或更多程序模块106,并可包括程序数据107。根据本发明,操作系统105可进一步包括滤波器管理器120。该基本配置在图1中由虚线108内的组分说明。
计算设备100可有另外的特点或功能。例如,计算设备100也可包括附加的数据存储设备(可更换和/或不可更换),诸如,磁盘、光盘或磁带。这样的附加存储器在图1中由可更换存储器109和不可更换存储器110说明。计算机存储媒介可包括以任一信息存储方法或技术实现的易失性和非易失性、移动和非移动媒介,诸如计算机可读指令、数据结构、程序模块或其他数据。系统存储器104、移动存储109和非移动存储110都是计算机存储媒介的例子。计算机存储媒介包括,但不限于,RAM、ROM、EEPROM、闪存或其他存储器技术、CD-ROM、数字多用途磁盘(DVD)或其他光存储、磁盒、磁带、磁盘存储或其他磁存储设备、或可用来存储所需信息且可由计算设备100存取的任一其他媒介。任一这样的计算机存储媒介是设备100的一部分。计算设备100也有诸如键盘、鼠标、笔、语音输入设备、触摸输入设备等之类的输入设备112。也包括诸如显示器、扬声器、打印机等之类的输出设备114。这些设备为业界熟知,此处不必详细讨论。
计算设备100也含有使设备与其他计算设备118(诸如通过网络)通信的通信连接116。通信连接116是通信媒介的一个例子。通信媒介通常具体化为计算机可读指令、数据结构、程序模块或调制数据信号中的其他数据,诸如载波或其他传输机制,并包括信息传送媒介。术语“调制数据信号”指用编码信号中信息的方式设置或改变其一或更多特点的信号。示例地而非限制地,通信媒介包括诸如有线网或直接布线连接之类的有线媒介,及诸如声、RF、红外和其他无线媒介之类的无线媒介。此处所用计算机可读媒介的术语包括存储媒介和通信媒介。
滤波器驱动器结构和文件系统图2是说明用来实施本发明的示例环境的框图。图2所示示例环境是根据本发明的包括滤波器管理器120的文件系统的输入/输出子系统环境200。
文件系统环境200包括以用户模式运行的应用程序202和以内核模式的NTFS文件系统220。尽管此处是在NTFS的上下文中加以描述,可理解的是,本发明同样适用于许多其他文件系统,诸如FAT、FAT32、EXT2、HPFS和其他文件系统。
NTFS220和应用程序202间是以内核模式运行的滤波器驱动器结构210。滤波器驱动器结构210包括滤波器管理器120和由多个滤波器驱动器(例如212A-C)构成的滤波器驱动器栈。NTFS220维护系统存储器104内的多个数据结构(例如240),以管理存于卷230上的文件系统结构。数据结构240在下面结合图3较详细地描述。卷230包括主文件表(MFT)232,主文件表(MFT)232提供含有卷232上每个文件的一个记录的文件记录阵列,包括MFT232自身的记录。例如,MFT232包括文件名属性234的记录,及含有另外的文件名属性234的其他文件记录的指示字。
在IO子系统环境200中,滤波器驱动器212A-C向NTFS文件系统220添加功能。在先前系统中,滤波器驱动器212A-C截取以内核模式运行的NTFS220和以用户模式运行的应用程序202间发送的输入/输出请求包(IRP)。例如,应用程序通过调用生成文件的函数(例如CreateFile)访问文件。作为响应,生成规定类型的输入/输出请求包(IRP)。IRP使存储正打开的文件名的文件对象被生成,然后IRP被传送到滤波器结构210。每个滤波器驱动器212A-C查找IRP所指文件名以执行其规定功能。一句柄通过调用链被传播回来,作为返回参数到达应用程序202。
某一滤波器驱动器的功能取决于当滤波器驱动器接收IRP时是否知道与IRP相关的文件名。例如,用于病毒检测的滤波器驱动器专注于文件名有.exe和.dll扩展名的文件。或者,用来加密的滤波器驱动器专用于对特定路径的文件加密。IRP可以不包括与IRP相关的文件的文件全名。例如,从应用程序202的读、写或生成函数的调用可指定文件的文件ID而非文件名。文件ID是唯一标识卷230上的每个文件的号码。CREATE或OPEN操作的用户用来标识文件的文件名或ID在文件的前CREATE(pre-CREATE)的时间间隔是有效的。CREATE或OPEN操作后,文件对象含有使NTFS220能不使用文件的文件名而标识所指文件是哪一个的数据结构。因此,如果滤波器驱动器(例如212A-C)在前CREATE的时间间隔后需要文件名,它为该文件名询问NTFS220。滤波器驱动器212A-C可能需要启动就文件名对NTFS220的许多询问以完成其操作。
在本发明中,IRP不是顺次地通过滤波器驱动器栈(即,滤波器驱动器212A-C),而是直接传送到滤波器管理器120。滤波器管理器120通知该IRP的每个滤波器驱动器212A-C,这样,包括与该IRP相关的功能的滤波器驱动器与滤波器管理器120相互作用(例如通过回叫)。滤波器驱动器212A-C与滤波器管理器120相互作用的一种方法是向滤波器管理器120询问文件名以完成其规定操作。滤波器管理器120管理滤波器驱动器212A-C对文件名的每个询问。
滤波器管理器120允许对三种格式(即,标准化、短和开放)中的一种的文件名询问。标准化文件名有被扩展的短名(即,标准化文件名是长名),文件从目录的根起的完全路径,且安装点被判断(见图10的讨论)。开放文件名包括用来打开文件的格式的文件名(即,包括或者长名或者短名)。短文件名只包括8.3格式(例如“文件名.ext”)的文件的完全路径的最后组分。
滤波器管理器120不允许在处理的特定时间对某些文件名格式询问。例如,当生成文件操作(即,打开文件操作)由应用202启动时,直到操作到达NTFS220才可能判断新生成文件的文件名是否有效。在此时间间隔,滤波器管理器120不允许对短文件名格式的文件名询问,因为短文件名格式的有效性存在问题。
图3说明根据本发明由NTFS文件系统维护的数据结构的示例框图。数据结构240包括文件对象310和312、流控制块(SCB)320和文件控制块(FCB)330。
文件由一或更多数据流(其中的主数据流未命名)构成。文件系统使用SCB(例如322和324)来唯一标识文件的每个数据流。例如,SCB322是所示文件对象(例如310)之一的主要未命名流,而SCB324是该文件对象的次要命名流。文件对象(310、320)对应文件的特定数据流(命名或未命名)的打路。文件系统生成数个指示字以从文件对象(310、320)到达用主文件表(MFT)232表示的卷上文件位置。文件对象310和312(各自表示开型文件的单个实例)指向流控制块(SCBs)320,流控制块320对应呼叫者应用程序正努力读或写的文件。特定文件的SCB指向共同文件控制块(例如330)。FCB330含有在MFT232中文件记录的指示字。
图4示出根据本发明的滤波器管理器数据结构和文件对象间联系的示例框图。如关于图3所述,文件对象320表示文件的开放场合。某些类型的驱动器,诸如滤波器驱动器,使用文件对象320内的一些字段。本发明使用文件对象320内的一字段作为指示字。该指示字(Pvoid FsContext)指向称为FsContext共用头标410的一数据结构,该头标410包括锁和每流上下文的链接表。FsContext共用头标410指定文件系统是否支持“每流上下文”功能。“每流上下文”指文件系统是否(象在NTFS文件系统中一样)支持使其他驱动器将一些信息与该流发生联系。FsContext共用头标410还提供由滤波器驱动器填充规定功能信息的每流上下文链接表。FsContext共用头标410根据文件系统或是文件控制块(FCB)或是流控制块(SCB)。在本发明中,对于NTFS文件系统,FsContext共用头标410是包括用来为文件对象(例如320)提供上下文的每流上下文链接表的SCB。每个每流上下文412包括两个关键字(Key1、Key2)和由滤波器管理器(见图2)维护的滤波器管理器数据结构420的一指示字(pVoid FMDS)。滤波器管理器数据结构420是用来存储响应滤波器驱动器的请求而生成的每个文件名的文件名信息结构(FIS)(见图5)的高速缓存器。每个滤波器管理器数据结构420根据与每个FIS相关的文件名的格式(例如标准化名、开放名和短名)进一步组织成名字高速缓存数据结构422A-C。
图5说明根据本发明与滤波器管理器有关的其他数据结构的示例框图。图4所示的每个名字高速缓存数据结构422A-C包括一树结构。在一实施例中,所述树结构是张开树结构。张开树结构通常用于有关数据库中的文件的放置和定位。
在本发明中,树结构的节点510可指向特定FIS520。节点510由两个关键字(Key1、Key2)标引并包括指向对应一文件名的相应FIS的指示字(pVoidFIS)。如结合图8所述,对于本发明,Key1对应所请求文件名的文件对象,而Key2对应文件名的文件名提供者。
文件名信息结构(FIS)520包括专用头标522和文件名指示字表524。对特定文件名的每种类型(标准化的、开放的或短的)有不同的FIS520。换言之,特定文件的标准化文件名和同一文件的短文件名各自由不同的FIS520表示。
专用头标522包括有关引用计数的数据、时间戳和其他数据。引用计数保证只要滤波器驱动器引用它便将FIS520保持在存储器中。时间戳保证当重命名文件或其他后续操作影响文件名时,FIS520反映该文件的当前文件名。时间戳在下面参考图10更详细地加以说明。
文件名指示字表524包括位于存储器的单个缓冲器中的同一文件名的规定段的指示字。每段对应组成名称的一部分的Unicode串(见图6)。指示字用作包括文件名的字符阵列的索引。名称由滤波器管理器进行分析,使得需要检查一段文件名的滤波器驱动器不必对文件名单独分析。
图6示出一示例文件名及其根据本发明标号的对应段。在该实现中,文件名600包括按需提供的滤波器管理器识别的六段(610、620、630、640、650、660) (见图2)。每段由图5所示文件名指示字表524中的一指示字指向。所述段包括Volumn(卷)610、Share(共享)620、ParentDir(母目录)630、FinalComponent(最终组分)640、Extension(扩展)650和Stream(流)660。
Volume 610指描述存储文件的逻辑卷的文件名部分。对网络上的一文件,Volume 610是描述网络提供者用来存取远程文件(例如\Device\LanmanRed)的文件名部分。
Share 620是本地文件的NULL串。然而,对于远程文件,Share 630对应描述将名称存储于网络提供者的名称空间中的路径的名称部分。
ParentDir 630是描述去除最终组分的文件名的完全路径的文件名部分。
而文件名的每个成分由“/”或“\”分开。FinalComponent 640是到包括流的名称串的终点最远的组分。
Extension 650是从最后一个“·”到任一流的文件名部分。
Stream 660是从最终组分中的第一个“”的文件名部分。
在一实施例中,由于与获取特定段有关的开销成本,对根据某些名称类型(例如短名称)打开的文件,某些段是不可用的。
格式化、分析和高速缓存过程图7是通常说明根据本发明执行的文件名询问过程的逻辑流程图。过程在开始框701处进入,此时图2所示滤波器管理器120已接收一IRP而且已就该IRP通知滤波器驱动器212A-C中的一个。过程700在框702继续。
在框702,滤波器管理器接收来自滤波器驱动器对特定文件名的请求。在一实施例中,文件名请求涉及滤波器管理器接收的IRP。在另一实施例中,滤波器驱动器启动名称请求作为无关IRP的操作的一部分。当文件名请求由滤波器管理器接收时,滤波器管理器检索文件名。在下面结合图8的讨论中较详细地描述示例文件名请求处理过程。
在判定框703,判断对应文件名的FIS此前是否已高速缓存于对应滤波器管理器的数据结构(见图4和5)内。如果对应文件名请求的FIS此前已高速缓存,处理跳到框706。如果对应文件名请求的FIS此前未高速缓存,处理在框704继续。
在框704,由滤波器管理器向文件名提供者发出对文件名的调用。特定滤波器驱动器的文件名提供者不同于位于卷上的同一物理文件。作为文件名提供者运行的滤波器驱动器向较高等级的滤波器驱动器(但通常不向较低等级的滤波器驱动器)提供文件名。例如,第一滤波器驱动器等级高于以文件名提供者运行的第二滤波器驱动器。第一滤波器驱动器的文件名提供者是第二滤波器驱动器。然而,如果第三滤波器驱动器等级低于第二滤波器驱动器,第二滤波器驱动器不是第三滤波器驱动器的文件名提供者。下面结合图9的讨论中较详细地描述调用文件名的文件名提供者的示例过程。处理在框705继续。
在框705,由文件名提供者生成的文件名的FIS被高速缓存在滤波器管理器提供的数据结构内并返回请求滤波器驱动器。对滤波器管理器的高速缓存的处理取决于当前正施加于文件名的处理、文件名类型及其他因素。滤波器管理器把对FIS的指示字归还给启动文件名请求的滤波器驱动器。指示字使滤波器驱动器能通过访问FIS的文件名指示字表访问一名称段。下面结合图10的讨论中较详细地描述高速缓存FIS并将它还给请求滤波器驱动器。处理在框706继续。
在框706,更新(或递增)与每个FIS相关的引用计数,以反映FIS当前正由滤波器驱动器使用。在一实施例中,引用计数包括于图5所示的每个FIS的专用头标内。只要引用计数大于零,与FIS相关的存储器保持有效。当任一滤波器驱动器取得对FIS的一引用时,引用计数便得到递增。每个滤波器驱动器向FIS释放引用时,净计数递减。当净计数为零时,删除FIS且清空其存储器。引用计数保证含有特定FIS及其相关文件名的存储器至少按需保持有效。处理在框707继续,处理在此结束。
在一实施例中,过程700对CREATE操作不同地运行。对CREATE操作,链接到文件的SCB的高速缓存器数据结构(例如FISs)尚未生成,因为文件尚未由文件系统打开。对滤波器驱动器在前-CREATE期间请求的文件名,文件名通过检查与文件对象相关的操作数据结构(例如IRP-CTRL)高速缓存而生成。如果文件名不能从操作数据结构高速缓存生成,请求文件名提供者产生它们(见图8),但文件名高速缓存于操作数据结构高速缓存单元中,就得到后-CREATE间隔。在后-CREATE,假如CREATE操作成功,则生成高速缓存数据结构。如果文件名有效且未发生穿越(见图12)则高速缓存文件名(见图10)。
图8是根据本发明执行的示例文件名请求处理过程的逻辑流程图。当图7所示过程700进入框702则过程进入框801。处理在框802继续。
在框802,滤波器管理器接收来自滤波器驱动器对包括与文件名相关的文件对象的文件名的请求,以及对文件名请求的格式(例如标准化的、开放的或短的)。处理在框803继续。
在框803,滤波器管理器从发出文件名请求的滤波器驱动器判断文件名提供者。如前所述,等级高于作为文件名提供者运行的第二滤波器驱动器的第一滤波器驱动器使用第二滤波器驱动器作为其文件名询问的文件名提供者。驱动器栈内滤波器驱动器的等级由滤波器管理器事先确定。另外,需要以文件名提供者运行的滤波器驱动器事前已向滤波器管理器登记。如果请求滤波器驱动器的等级高于指定的文件名提供者,该场合的文件名提供者是最接近但等级低于请求滤波器驱动器的文件名提供者。如果请求滤波器驱动器没有其他滤波器驱动器作为等级较低的文件名提供者运行,则文件系统作为请求滤波器驱动器的文件名提供者运行。一旦确定请求滤波器驱动器的文件名提供者,处理在框804继续。
在框804,搜索对应已高速缓存于滤波器管理器提供的数据结构内的文件名请求的FIS。如前面结合图4所述,根据请求的文件名格式(例如标准化的、开放的、短的)组织数据结构。根据两个关键字(Key1、Key2)(见图5)搜寻对应所请求文件名格式的数据结构。第一关键字是与文件的特定开放例有关的文件对象。文件对象帮助规定是否在流级或文件对象级高速缓存FIS,这在图10的讨论中较详细地讨论。第二关键字是在框803识别的文件名提供者。如果事先已存储一FIS,根据这两个关键字(Key1、Key2)搜索滤波器驱动器数据结构,定位现有FIS。处理到框805继续,在此,处理返回过程700并在图7所示的框704处继续。
图9是根据本发明执行的示例文件名生成过程的逻辑流程图。当图7所示过程700进入框704时,过程900进入框901。处理在判定框902继续。
在判定框902,判断等级较低的一滤波器驱动器是否作为文件名提供方者运行。如果不是,文件名由文件系统提供,处理进入框906。但是,如果是,处理在框903继续。
在框903,使用名称回叫来检索来自文件名提供者的文件名。所用的回叫类型取决于请求滤波器驱动器是否已请求目标文件名。文件名提供者登记两回叫。第一回叫,CreateDestinationNameCallback,是在目标名称由高于文件名提供者的滤波器驱动器请求时调用的。第二回叫,CreateFileNameCallback,是当文件名(非目标文件名)由高于文件名提供者的第二滤波器请求时向第一滤波器驱动器调用的。
目标文件名是规定为重命名操作或硬链路生成操作的目标名称。硬链路指文件名的别名使用卷上的相同物理比特有不止一个文件名。用卷上相同比特表示的数个文件名中的每一个表示为一硬链路。目标文件名由文件名提供者根据重命名或硬链路参数而生成。在一实施例中,以两格式(标准化格式或开放格式)中的一种提供目标文件名。该实施例中,不是所有的文件名段一开始是从文件名分析的。Volume和Share段一开始是从文件名分析的。一旦对FIS的指示字回到滤波器驱动器,滤波器驱动器请求进一步从文件名分析FinalComponent、Extension、Stream和ParentDir段。
在一实施例中,目标文件名不是高速缓存于滤波器管理器提供的数据结构(例如每流上下文)中。目标文件名高速缓存于滤波器管理器的专用数据结构(例如IRP-CTRL)的操作中。目标文件名在重命名或硬链路生成操作持续时间被高速缓存。一旦使用名称回叫,处理进入框904。
在框904,滤波器管理器从文件名提供方接收文件名,不管文件名提供者是来自请求滤波器驱动器且等级较低的另一滤波器驱动器还是文件系统。处理进入框905,在此,处理返回过程700且继续于图7所示的框705。
图10是根据本发明执行的示例文件名高速缓存过程的逻辑流程图。当图7所示过程700进入框705时,过程1000进入框1001。处理在判定框1002继续。
在判决框1002,对由滤波器管理器从名称提供者接收的文件名当前是否在重命名处理中作出判断。重命名指文件重命名、目录重命名或硬链路生成操作。当启动影响由滤波器管理器接收的文件名的重命名时,暂停FIS的高速缓存,不高速缓存与文件名相关的FIS,一部分高速缓存被清除。如果重命名正在进行,处理进入框1009,在此,不高速缓存FIS且过程进入框1010。
然而,如果重命名不在进行,处理继续到框1003,在此,把为一特定文件名生成的FIS相关的时间戳(TS)和滤波器管理器时间戳(FTS)作比较。滤波器管理器时间戳对应最后一个重命名程序完成时。如果重命名完成于生成FIS的同时或之后(例如FTS≥TS),FIS对将来询问文件名不再有效。但是,如果滤波器管理器时间戳小于FIS时间戳(例如FTS<TS,FIS对将来询问有效。处理在判定框1004继续。
在判定框1004,判断按照比较结果FIS的时间戳是否表示滤波器管理器时间戳(FTS)小于FIS的时间戳(TS)。如果时间戳表示FIS对将来询问无效,过程在框1009继续,在此,不高速缓存FIS且处理进入框1010。
然而,如果时间戳表示FIS对将来询问有效,过程进入判定框1005。
在判定框1005,确定与文件相关的文件名的个数。如前所讨论,存储在卷上的文件有多个硬链路,每个硬链路各自表示与文件相关的一独特文件名。因此,如果硬链路数大于1,文件有不止一个文件名。与特定文件相关的文件名不大于1,处理在判定框1006继续。但是,如果与特定文件号相关的文件名数目大于1,处理进入框1008。
在判定框1006,对滤波器管理器从文件名提供者接收的文件名是否标准化格式作判断。返回滤波器管理器的文件名是标准化格式时,处理在判定框1007继续。但是,返回滤波器管理器的文件名是另一格式(诸如短文件名或开放文件名)时,处理进入框1006。
在框1007,与滤波器管理器接收的文件名相关的FIS高速缓存于流级。高速缓存于流级的FIS使对FIS的指示字返回请求对应特定流的文件名的任一滤波器驱动器。因此,需要较少结构,因为特定FIS可用于共享同一流的多个文件对象。处理进入块1010,在此,处理返回过程700且在图7的框706继续。
在框1008,与由滤波器管理器接收的文件名相关的FIS高速缓存于文件对象级。高速缓存于文件对象级的FIS适用于文件的特定开放场合。高速缓存于文件对象级的FIS对应特定文件对象。即使特定文件对象与第二文件对象共享同一流,存储于文件对象级的FIS适用特定文件对象而非第二文件对象。处理进入框1010,在此,处理返回过程700且在图7的框706继续。
在一实施例中,当FIS不再有效时,与FIS相关的存储器空间未得到分配。在释放存储器空间前,滤波器管理器检查与FIS相关的引用计数。直到引用计数为零才释放与特定FIS相关的存储器。
重命名图11是根据本发明执行的示例重命名过程的逻辑流程图。过程1100始于框1101,在此,已启动重命名操作。处理在判定框1102继续。
在判定框1102,对当前进行的重命名过程是否目录重命名作判断。与文件重命名相比,目录重命名改变与目录有关的所有文件的文件名。如果进行中的重命名不涉及重命名目录,处理在判定框1104继续于。但是,如果进行中的重命名进行目录名的修改,处理进入框1103。
在框1103,响应于目录名的变化,滤波器管理器的与该目录相关的高速缓存得到清除。实施高速缓存包括特定文件名的每个格式(例如标准化的、开放的、短的)的每个FIS。在一实施例中,清除与该目录相关的高速缓存比用来更新高速缓存以反映目录重命名的串对比更有效。清除高速缓存保证以后生成的文件名正确反映目录名变化。当滤波器驱动器就含有新目录名的文件名询问滤波器管理器时,则高速缓存可重新被驻入。处理在框1107继续,在此,过程结束。
在判定框1104,对当前进行的重命名过程是否对应硬链接生成操作作判断。当生成硬链接时,它在流级影响文件名。换句话说,当生成硬链接时,在流级高速缓存的FIS不再对文件的所有开放场合有效。如果重命名过程对应硬链接生成操作,处理在框1105继续。
在框1105,在流级清除与硬链接生成操作相关的高速缓存。对应受制于硬链接的文件名的FIS不再存储于流级(如果原来存储于流级,见图10),而是存储于文件对象级。与有多个硬链接的文件相关的FIS对特定文件开放例有效,但不是对文件的所有开放场合有效。处理在框1107继续,在此,过程结束。
或者,如果重命名过程不对应目录重命名或硬链接生成操作,处理框1106继续。
在框1106,与特定文件名有关的高速缓存在流级及在文件对象级一起被清除。因此,从与滤波器管理器相关的数据结构(见图4和5)删除一文件名的每个格式的每个FIS。处理在框1107继续,在此,过程结束。
文件名穿越在一实施例中,本发明包括补偿文件系统的文件名穿越能力的功能。文件名穿越涉及包括在存储于文件系统内的文件名中的长名称/短名称对。对穿越的支持由操作系统提供,使得任一读/写文件系统利用穿越功能。当或者长名称或者短名称被删除,但在一定时间间隔内重新生成时,发生文件名穿越。文件名穿越能力可实现对依赖于能保持文件总信息一小段时间的文件系统的程序的兼容性。这发生在删除或重命名且用所述总信息重新引入新目录项之后(如果生成或重命名发生使该名称的文件短时段内再次出现)。从目录去除名称(重命名或删除)时,如果键入已被去除的名称,短/长名称对和诸如生成时间之类的某些其他属性保存在高速缓存中。向目录添加名称(重命名或生成)时,搜索高速缓存以了解是否有要恢复的信息。
图12是根据本发明执行的且与图7所示过程700并行运行的示例文件名穿越过程的逻辑流程图。过程1200进入开始框1201。处理在判定框1202继续。
在判定框1202,请求滤波器驱动器识别正在请求的文件名是否文件名穿越的候选对象。文件名穿越的候选对象是含有8.3格式的部分的文件。文件名穿越影响文件名的标准化版本,因为短名(即8.3格式的文件名)是为文件名的标准化版本被扩展的。与文件相关的短文件名的变化相应地改变标准化名称。同样,短文件名不变化时,标准化文件名可以不变化。如果文件名不是封装候选对象,处理进入框1205,在此,当文件名的CREATE操作成功完成时,高速缓存对应文件名的FIS。然而,如果文件名是穿越候选对象,处理在判定框1203继续。
在判定框1203,对文件名为候选对象的文件名的穿越是否发生作判断。如果未出现穿越,处理进入框1205,在此,对应文件名的FIS在文件名的CREATE操作成功完成时高速缓存。但是,如果文件名生成期间使用过文件名穿越,处理在框1204继续。
在框1204,与生成的文件名相关的FIS不是高速缓存于由滤波器管理器提供的数据结构内。处理在框1206继续,在此,过程结束。
上述说明、例子和数据完整描述本发明的构成的制造和使用。由于可不脱离本发明构思和范围完成本发明的许多实施例,本发明权利归属于此后所附权利要求书。
权利要求
1.一种管理文件系统滤波器驱动器的文件名的方法,其特征在于,所述方法包括接收来自第一滤波器驱动器的对规定格式的文件名的文件名请求;调用文件名提供方生成对应文件名请求的文件名;高速缓存与从文件名提供方接收的文件名相对应的生成文件名信息结构;及向第一滤波器驱动器返还指向生成文件名信息结构的指示字。
2.如权利要求1所述的方法,其特征在于,所述方法还包括判断满足文件名请求的文件名信息结构在调用文件名提供者生成文件名前事先已高速缓存。
3.如权利要求1所述的方法,其特征在于,所述方法还包括当向第一滤波器驱动器返还指示自时更新与生成文件名信息结构相关的引用计数,使得该生成文件名信息结构在由第一滤波器驱动器使用的同时得到维护。
4.如权利要求1所述的方法,其特征在于,所述方法还包括当向第一滤波器驱动器返还指示字时更新与生成文件名信息结构相关的时间戳,使得在高速缓存该生成文件信息结构之前判断文件名信息结构的有效性。
5.如权利要求1所述的方法,其特征在于,所述接收文件名请求还包括接收这样一个文件名请求该文件名请求给定第一滤波器驱动器的标识符、对应由文件名标识的文件的开放场合的文件对象,及文件名格式。
6.如权利要求5所述的方法,其特征在于,所述文件名格式包括标准化的、开放的和短的格式中的至少一种。
7.如权利要求1所述的方法,其特征在于,所述呼叫文件名提供者还包括当第二滤波器驱动器用作文件名提供则时从第一滤波器驱动器调用等级较低的第二滤波器驱动器。
8.如权利要求1所述的方法,其特征在于,所述方法还包括判断重命名程序是否在进行及当重命名程序修改至少一部分文件名时清除合适比例的文件名信息结构高速缓存。
9.如权利要求1所述的方法,其特征在于,所述生成文件名信息结构高速缓存于流级和文件对象级中的一个。
10.如权利要求1所述的方法,其特征在于,所述方法还包括判断是否进行重命名;比较重命名完成时间和该生成文件名信息结构建立时间;及当重命名完成时间晚于该生成文件名信息结构建立时间时,避免向第一滤波器驱动器返还指示字。
11.如权利要求1所述的方法,其特征在于,所述方法还包括通过判断文件名穿越何时已发生来补偿文件名穿越及已发生文件名穿越时避免高速缓存该生成文件名信息结构。
12.一种有计算机可执行成分的计算机可读媒介,其特征在于,所述计算机可读媒介包括用来管理文件系统的第一滤波器驱动器的文件名请求的第一组分,所述第一组分配置成接收第一滤波器驱动器对规定格式的文件名的文件名请求;判断满足文件名请求的文件名信息结构是否事先已高速缓存,及当文件名信息结构事先已高速缓存时向滤波器驱动器返还指向文件名信息结构的指示字;及当文件名信息结构事先未得到高速缓存时调用文件名提供者生成对应文件名请求的文件名;高速缓存与从文件名提供方接收的文件名相对应的生成文件名信息结构;及向第一成分返还指向生成文件名信息结构的指示字。
13.如权利要求12所述的计算机可读媒介,其特征在于,所述第一组分安放在文件系统和与操作系统相关的外部应用程序之间,使得第一组分除接收和处理第一滤波器驱动器的文件名请求外,还接收和处理文件系统的输入/输出请求。
14.如权利要求12所述的计算机可读媒介,其特征在于,所述第一组分包括文件名信息结构被高速缓存于其中的文件名高速缓存数据结构,其中,文件名高速缓存数据结构是根据对应文件名信息结构的文件名格式而组织的。
15.如权利要求12所述的计算机可读媒介,其特征在于,所述文件名格式是标准化的、开放的和短的格式中的至少一种。
16.一种用数据结构编码的计算机可读媒介,其特征在于,所述计算机可读媒介包括一包括引用计数和时间戳的头标,其中,引用计数帮助防止数据结构被删除直到引用计数为预定整数为止,而时间戳帮助判断特定时间点上数据结构的有效性;及含有指向卷上文件的文件名的指示字的第一数据字段,其中,每个指示字指向文件名的预定段。
17.如权利要求16所述的计算机可读媒介,其特征在于,所述头标和第一数据字段存储于根据文件名格式安排的树数据结构内,所述格式是标准化的、开放的和短的格式中的至少一种。
18.如权利要求17所述的计算机可读媒介,其特征在于,所述树数据结构包括根据对应于与卷上文件相关的文件对象的第一关键字存取的节点,及对应文件名提供者的第二关键字,使得特定节点提供指向对应文件名的数据结构的指示字。
19.一种有用来管理文件系统滤波器驱动器的文件名的计算机可执行指令的计算机可读媒介,其特征在于,所述指令包括接收第一滤波器驱动器对规定格式的文件名的文件名请求;判断满足文件名请求的文件名信息结构是否事先已高速缓存,及当文件名信息结构事先已高速缓存时向第一滤波器驱动器返还指向文件名信息结构的指示字;及当文件名信息结构事先未高速缓存时当文件名信息结构事先未高速缓存时调用文件名提供者生成对应文件名请求的文件名;高速缓存与从文件名提供方接收的文件名相对应的生成文件名信息结构;及向第一滤波器驱动器返还指向生成文件名信息结构的指示字。
20.如权利要求19所述的计算机可读媒介,其特征在于,所述指令还包括当向第一滤波器驱动器返还指示字时更新与生成文件名信息结构相关的引用计数,使得生成文件名信息结构在由第一滤波器驱动器使用的同时得到维护。
21.如权利要求19所述的计算机可读媒介,其特征在于,所述指令还包括当向第一滤波器驱动器返还指示字时更新与生成文件名信息结构相关的时间戳,使得在高速缓存生成文件信息结构之前判断文件名信息结构的有效性。
22.如权利要求19所述的计算机可读媒介,其特征在于,所述接收文件名请求还包括接收文件名请求,该文件名请求给定第一滤波器驱动器的标识符、对应由文件名标识的文件的开放场合的文件对象,及文件名格式。
23.如权利要求22所述的计算机可读媒介,其特征在于,所述文件名格式包括标准化的、开放的和短的格式中的至少一种。
24.如权利要求19所述的计算机可读媒介,其特征在于,所述指令还包括判断重命名程序是否在进行及当重命名程序修改至少一部分文件名时清除合适比例的文件名信息结构高速缓存。
25.如权利要求19所述的计算机可读媒介,其特征在于,所述生成文件名信息结构高速缓存在流级和文件对象级中的一个。
全文摘要
所述是管理文件系统中滤波器驱动器的文件名的一种方法和系统。本发明包括处理来自滤波器驱动器的文件名询问的滤波器管理器。滤波器管理器向请求滤波器驱动器返还指向与所请求文件名类型相对应的文件名信息结构的指示字。滤波器管理器还管理包括能在各种滤波器驱动器间共享的信息的文件名信息结构的高速缓存,缓冲对滤波器管理器文件名的询问。滤波器管理器的高速缓存功能提高效率并降低文件系统内文件名询问的总开销,方法是通过减小文件系统滤波器驱动器检索所需文件名部分所要求的文件名操作数目。
文档编号G06F17/30GK1477518SQ0314573
公开日2004年2月25日 申请日期2003年6月30日 优先权日2002年6月28日
发明者R·普迪派蒂, R 普迪派蒂, E·C·布朗, 布朗, N·R·克里斯琴森, 克里斯琴森 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1