在计算机系统内访问至少一个目标文件的方法和系统的制作方法

文档序号:6439425阅读:116来源:国知局
专利名称:在计算机系统内访问至少一个目标文件的方法和系统的制作方法
技术领域
本发明与操作系统有关,特别是涉及在一个具有在文件打开时实现文件锁定的操作系统的计算机系统内访问至少一个目标文件的方法和系统。
背景技术
Microsoft Windows(以下简称为“Windows”)内核和Windows程序具有防止文件被其他过程打开和读取的能力。这是通过打开一个文件和不给其他过程特有权限(诸如读取之类)来实现的。只要这个过程保持将文件打开,其他过程就服从这个过程所允许的权限。其他过程要打开这样的文件的尝试将导致Windows“共享违例(sharingviolation)”,而不能读取这个文件内的数据。
访问打开的文件的需要然而,在这些文件内的数据可能对于许多应用,特别是备份应用,是极为重要的。例如,对于备份应用(backup application)来说重要的是能读取和备份一个计算机内的每个文件。此外,这些受保护文件中有一些是含有Windows注册表信息的文件,因此是正确操作一个所恢复的备份映像所必需的。
现有技术系统当前,备份应用采取两个途径中的一个途径来规避这个问题。
扇区式拷贝(sector-wise copy)在第一现有技术途径中,如现有技术的图1A所示,应用将(1)对驱动器(drive)上的数据进行扇区式拷贝,如步骤112所示;然后(2)产生盘的整个映像(image),如步骤114所示。不幸的是,这种方法产生驱动器的一个巨大拷贝。此外,这种技术产生一个盘映像,很难对一个文件的扇区定位。这使从此映像进行“单个文件恢复”非常困难。
关机和预引导应用使用的第二个现有技术途径,如现有技术的图1B所示,是(1)使计算机关机,如步骤122所示,然后(2)将计算机引入一个“预引导(preboot)”环境,如步骤124所示,(3)在预引导环境内执行文件拷贝,如步骤126所示。计算机或者重新引导,或者完成对Windows的引导。这种方法由于需要重新引导才能拷贝这些文件,因此并不好。此外,在计算机正在运行的同时进行备份是不可能的。
因此,需要有一种方法和系统,其能够在一个具有在文件打开时实现文件锁定的操作系统的计算机系统内访问至少一个目标文件。

发明内容
本发明提供了一种在一个具有在文件打开时实现文件锁定的操作系统的计算机系统内访问至少一个目标文件的方法和系统。在一个典型实施例中,这种方法和系统包括(1)获取一个与在计算机系统内打开的所有文件的集合相应的句柄集;(2)在操作系统的内核内确定一个与句柄集相应的文件标识集;(3)从文件标识符集中标识一个与目标文件相应的文件标识符;(4)在内核内向操作系统的文件系统驱动程序(file system driver)发送一个与所标识的文件标识符相应的读请求分组;以及(5)从文件系统驱动程序接收与目标文件相应的数据。
在一个典型实施例中,获取句柄集包括(a)向内核发布一个NtQuerySystemInformation(Nt查询系统信息),其中所述NtQuerySystemInforrnation请求有关句柄集内每个句柄的所有信息;以及(b)从内核获取对于在句柄集内每个句柄的一个SYSTEM_HANDLE_INFORMATION(系统句柄信息)数组,其中所述SYSTEM_HANDLE_INFORMATION包括一个FILE_OBJECT(文件对象),其中所述FILE_OBJECT包括文件标识符信息。
在一个典型实施例中,确定与句柄集相应的文件标识符集包括对于句柄集内每个句柄向内核传送一个指向与这个句柄相应的FILE_OBJECT的指针。在一个进一步的实施例中,确定包括对于句柄集内每个句柄从内核内输出一个与所传送的FILE_OBJECT相应的文件标识符。
在一个典型实施例中,标识与目标文件相应的文件标识符包括标识与所标识的与目标文件相应的文件标识符相应的FILE_OBJECT。
在一个典型实施例中,发送读请求分组包括(a)向内核传送所标识的FILE_OBJECT;以及(b)通过读请求分组向内核请求从与所标识的FILE_OBJECT相应的目标文件读取数据,其中所述读请求分组包括一个中断请求分组(IRP)。在一个进一步的实施例中,请求读取数据包括(i)在内核内以一定的偏置量和一定长度产生一个与所标识的FILE_OBJECT相应的IRP;以及(ii)向操作系统的文件系统驱动程序传送IRP。
在一个典型实施例中,接收与目标文件相应的数据包括(a)在内核内从文件系统驱动程序接收来自与所标识的FILE_OBJECT相应的目标文件的数据;以及(b)从内核获取来自与所标识的FILE_OBJECT相应的目标文件的数据。
在一个典型实施例中,这种方法和系统包括(1)获取一个与在计算机系统内打开的所有文件的集合相应的句柄集;(2)在操作系统的内核内确定一个与句柄集相应的文件标识符集;(3)从文件标识符集中标识一个与目标文件相应的文件标识符;以及(4)在内核内向操作系统的文件系统驱动程序发送一个与所标识的文件标识符相应的读请求分组。
本发明还提供了一种用于可编程计算机的计算机程序产品,具有体现在一个具有在文件打开时实现文件锁定的操作系统的计算机系统内访问至少一个目标文件的可读程序代码。在一个典型实施例中,这种计算机程序产品包括(1)获取一个与在计算机系统内打开的所有文件的集合相应的句柄集的计算机可读代码;(2)在操作系统的内核内确定一个与句柄集相应的文件标识符集的计算机可读代码;(3)从文件标识符集中标识一个与目标文件相应的文件标识符的计算机可读代码;(4)在内核内向操作系统的文件系统驱动程序发送一个与所标识的文件标识符相应的读请求分组的计算机可读代码;以及(5)从文件系统驱动程序接收与目标文件相应的数据的计算机可读代码。
在一个典型实施例中,这种计算机程序产品包括(1)获取一个与在计算机系统内打开的所有文件的集合相应的句柄集的计算机可读代码;(2)在操作系统的内核内确定一个与句柄集相应的文件标识符集的计算机可读代码;(3)从文件标识符集中标识一个与目标文件相应的文件标识符的计算机可读代码;以及(4)在内核内向操作系统的文件系统驱动程序发送一个与所标识的文件标识符相应的读请求分组的计算机可读代码。


图1A为一种现有技术的流程图。
图1B为另一种现有技术的流程图。
图2为按照本发明的一个典型实施例设计的流程图。
图3为按照本发明的一个典型实施例设计的获取步骤的流程图。
图4A为按照本发明的一个典型实施例设计的确定步骤的流程图。
图4B为按照本发明的另一个典型实施例设计的确定步骤的流程图。
图5为按照本发明的一个典型实施例设计的标识步骤的流程图。
图6A为按照本发明的一个典型实施例设计的发送步骤的流程图。
图6B为按照本发明的另一个典型实施例设计的发送步骤的流程图。
图7为按照本发明的一个典型实施例设计的接收步骤的流程图。
具体实施例方式
本发明提供了一种在一个具有在文件打开时实现文件锁定的操作系统的计算机系统内访问至少一个目标文件的方法和系统。在一个典型实施例中,本发明提供了一种在Windows保持运行的同时读取受保护的Windows文件的内容的方法和系统。本发明提供了一种在具有在文件打开时实现文件锁定的操作系统的计算机系统内访问至少一个目标文件的方法和系统。在一个典型实施例中,这种方法和系统包括(1)获取一个与在计算机系统内打开的所有文件的集合相应的句柄集;(2)在操作系统的内核内确定一个与句柄集相应的文件标识符集;(3)从文件标识符集中标识一个与目标文件相应的文件标识符;(4)在内核内向操作系统的文件系统驱动程序发送一个与所标识的文件标识符相应的读请求分组;以及(5)从文件系统驱动程序接收与目标文件相应的数据。
参见图2,在一个典型实施例中,本发明包括(1)获取一个与在计算机系统内打开的所有文件的集合相应的句柄集的步骤210;(2)在操作系统的内核内确定一个与句柄集相应的文件标识符集的步骤212;从文件标识符集中标识一个与目标文件相应的文件标识符的步骤214;在内核内向操作系统的文件系统驱动程序发送一个与所标识的文件标识符相应的读请求分组的步骤216;以及从文件系统驱动程序接收与目标文件相应的数据的步骤218。
概述本发明通过两个相互配合工作在它们之间来回发送数据的程序来读取受保护的Windows文件。在高层,这两个程序中的一个程序(例如wam.sys)在内核内运行,完成实际读取,而另一个程序(例如bam.exe)在用户空间内运行,推导出有关文件的信息,将这信息传送给内核程序,以便给内核程序足够的信息,使它知道从哪里进行读取。然后,内核程序将读出数据返回给用户级程序。
获取句柄集具体地说,用户级程序向内核发布一个NtQuerySystemlnformation,请求有关打开的文件句柄的所有信息。内核返回在内核内每个打开的句柄的SYSTEM_HANDLE_INFORMATION的数组(array)。
参见图3,在一个典型实施例中,获取步骤210包括向内核发布一个NtQuerySystemInformation的步骤310,其中所述NtQuerySystemInformation请求有关在句柄集内每个句柄的所有信息;以及(b)从内核获取对于句柄集内每个句柄的一个SYSTEM_HANDLE_INFORMATION数组的步骤312,其中所述SYSTEM_HANDLE_INFORMATION包括一个指向一个FILE_OBJECT的指针,其中所述FILE_OBJECT包括文件标识符信息。
确定与句柄集相应的文件标识符集然而,仍然需要各文件句柄与名之间的对应关系。仍然需要找出哪个句柄是目标文件的句柄。在SYSTEM_HANDLE_INFORMATION内的一段信息是一个指向一个FILE_OBJECT的指针。FILE_OBJECT含有文件名信息。然而,存储FILE_OBJECT的存储器只能在内核内使用。
因此,用户级程序将一个指向这个存储器的指针传入内核级程序。然后,内核级程序传回这个FILE_OBJECT描述的文件名。
参见图4A,在一个典型实施例中,确定步骤212包括对于句柄集内每个句柄向内核传送一个指向与所述每个句柄相应的FILE_OBJECT的指针的步骤412。在一个进一步的实施例中,如图4B所示,确定步骤212还包括对于句柄集内每个句柄从内核内输出一个与所传送的FILE_OBJECT相应的文件标识符的步骤422。
标识与目标文件相应的文件标识符用户级程序继续这样执行,直到从内核返回了它所寻找的文件名。它现在就有一个至受保护文件(希望读取的目标文件)的句柄。实质上,已经执行了文件打开。
参见图5,在一个典型实施例中,标识步骤214包括标识与所标识的与目标文件相应的文件标识符相应的FILE_OBJECT的步骤512。
发送读请求分组在用户空间内用句柄应该能直接进行读取。然而,这句柄仍然受原来保护过程所加的权限的限制,因此尝试读取这个句柄会产生共享违例。
因此,内核级程序将这个FILE_OBJECT传回给内核程序,请求它以一定的偏置量(offset)和PAGE_SIZE(通常为4096个字节)长度从由FILE_OBJECT描述的文件读取数据。简单地从内核发布ZwReadFile也会由于上述原因出现共享违例而失败。
在内核内通过产生一个中断请求分组(IRP)从这个文件提取数据,将它一直传送到这个FILE_OBJECT驻留的基层文件系统(NTFS,FAT32等)。
参见图6A,在一个典型实施例中,发送步骤216包括向内核传送所标识的FILE_OBJECT的步骤612和通过读请求分组向内核请求从与所标识的FILE_OBJECT相应的目标文件读取数据的步骤614,其中所述读请求分组包括一个中断请求分组(IRP)。在一个进一步的实施例中,如图6B所示,请求步骤614包括在内核内以一定的偏置量和一定的长度产生一个与所标识的FILE_OBJECT相应的IRP的步骤622和向操作系统的文件系统驱动程序传送IRP的步骤624。
接收与目标文件相应的数据文件系统用所请求的数据进行响应,内核程序将这数据传回到用户空间。这样,对一个受保护文件执行了一次读取。以不同的偏置量重复这些读取,直到到达这个文件的末尾,从而得到盘上这个文件的数据的一个理想拷贝。
参见图7,在一个典型实施例中,接收步骤218包括在内核内从文件系统驱动程序接收来自与所标识的FILE_OBJECT相应的目标文件的数据的步骤712和从内核获取来自与所标识的FILE_OBJECT相应的目标文件的数据的步骤714。
总结从以上对本发明的一个优选实施例和各个备选方案的充分说明中熟悉该技术领域的人员可以看到,按照在这里给出的原理,存在不背离本发明的许多备选方案和等效方案。因此,本发明的专利保护范围不是由以上说明而是由所附权利要求书给出。
权利要求
1.一种在一个具有在文件打开时实现文件锁定的操作系统的计算机系统内访问至少一个目标文件的方法,所述方法包括下列步骤获取一个与在计算机系统内打开的所有文件的集合相应的句柄集;在操作系统的内核内确定一个与句柄集相应的文件标识符集;从文件标识符集中标识一个与目标文件相应的文件标识符;在内核内向操作系统的文件系统驱动程序发送一个与所标识的文件标识符相应的读请求分组;以及从文件系统驱动程序接收与目标文件相应的数据。
2.权利要求1的方法,其中所述获取步骤包括向内核发布一个NtQuerySystemInformation,其中所述NtQuerySystemInformation请求有关句柄集内每个句柄的所有信息;以及从内核获取对于句柄集内每个句柄的一个SYSTEM_HANDLE_INFORMATION数组,其中所述SYSTEM_HANDLE_INFORMATION包括一个指向一个FILE_OBJECT的指针,其中所述FILE_OBJECT包括文件标识符信息。
3.权利要求2的方法,其中所述确定步骤包括对于句柄集内每个句柄,向内核传送一个指向与所述每个句柄相应的FILE_OBJECT的指针。
4.权利要求3的方法,其中所述确定步骤还包括对于句柄集内每个句柄,从内核内输出一个与所传送的FILE_OBJECT相应的文件标识符。
5.权利要求4的方法,其中所述标识步骤包括标识与所标识的文件标识符相应的FILE_OBJECT,所述所标识的文件标识符与目标文件相应。
6.权利要求5的方法,其中所述发送步骤包括将所标识的FILE_OBJECT传送给内核;以及通过读请求分组向内核请求从与所标识的FILE_OBJECT相应的目标文件读取数据,其中所述读请求分组包括一个中断请求分组(IRP)。
7.权利要求6的方法,其中所述请求步骤包括在内核内以一定的偏置量和一定的长度产生一个与所标识的FILE_OBJECT相应的IRP;以及向操作系统的文件系统驱动程序传送IRP。
8.权利要求7的方法,其中所述接收步骤包括在内核内从文件系统驱动程序接收来自与所标识的FILE_OBJECT相应的目标文件的数据;以及从内核获取来自与所标识的FILE_OBJECT相应的目标文件的数据。
9.一种在一个具有在文件打开时实现文件锁定的操作系统的计算机系统内访问至少一个目标文件的系统,所述系统包括一个配置成获取一个与在计算机系统内打开的所有文件的集合相应的句柄集的获取模块;一个配置成在操作系统的内核内确定一个与句柄集相应的文件标识符集的确定模块;一个配置成从文件标识符集中标识一个与目标文件相应的文件标识符的标识模块;一个配置成在内核内向操作系统的文件系统驱动程序发送一个与所标识的文件标识符相应的读请求分组的发送模块;以及一个配置成从文件系统驱动程序接收与目标文件相应的数据的接收模块。
10.权利要求9的系统,其中所述获取模块包括一个配置成向内核发布一个NtQuerySystemInformation的发布模块,其中所述NtQuerySystemInformation请求有关句柄集内每个句柄的所有信息;以及一个配置成从内核获取对于句柄集内每个句柄的一个SYSTEM_HANDLE_INFORMATION数组的获取模块,其中所述SYSTEM_HANDLE_INFORMATION包括一个指向一个FILE_OBJECT的指针,其中所述FILE_OBJECT包括文件标识符信息。
11.权利要求10的系统,其中所述确定模块包括一个配置成对于句柄集内每个句柄向内核传送一个指向与这个句柄相应的FILE_OBJECT的指针的传送模块。
12.权利要求11的系统,其中所述确定模块还包括一个配置成对于句柄集内每个句柄从内核内输出一个与所传送的FILE_OBJECT相应的文件标识符的输出模块。
13.权利要求12的系统,其中所述标识模块包括一个配置成标识与所标识的文件标识符相应的FILE_OBJECT的标识模块,所述标识的文件标识符与目标文件相应。
14.权利要求13的系统,其中所述发送模块包括一个配置成向内核传送所标识的FILE_OBJECT的传送模块;以及一个配置成通过读请求分组向内核请求从与所标识的FILE_OBJECT相应的目标文件读取数据的请求模块,其中所述读请求分组包括一个中断请求分组(IRP)。
15.权利要求14的系统,其中所述请求模块包括一个配置成在内核内以一定的偏置量和一定长度产生一个与所标识的FILE_OBJECT相应的IRP的产生模块;以及一个配置成向操作系统的文件系统驱动程序传送IRP的传送模块。
16.权利要求15的系统,其中所述接收模块包括一个配置成在内核内从文件系统驱动程序接收来自与所标识的FILE_OBJECT相应的目标文件的数据的接收模块;以及一个配置成从内核获取来自与所标识的FILE_OBJECT相应的目标文件的数据的获取模块。
17.一种在一个具有在文件打开时实现文件锁定的操作系统的计算机系统内访问至少一个目标文件的方法,所述方法包括下列步骤获取一个与在计算机系统内打开的所有文件的集合相应的句柄集;在操作系统的内核内确定一个与句柄集相应的文件标识符集;从文件标识符集中标识一个与目标文件相应的文件标识符;以及在内核内向操作系统的文件系统驱动程序发送一个与所标识的文件标识符相应的读请求分组。
18.权利要求17的方法,其中所述获取步骤包括向内核发布一个NtQuerySystemInformation,其中所述NtQuerySystemInformation请求有关句柄集内每个句柄的所有信息;以及从内核获取对于句柄集内每个句柄的一个SYSTEM_HANDLE_INFORMATION数组,其中所述SYSTEM_HANDLE_INFORMATION包括一个指向一个FILE_OBJECT的指针,其中所述FILE_OBJECT包括文件标识符信息。
19.权利要求18的方法,其中所述确定步骤包括对于句柄集内每个句柄,向内核传送一个指向与这个句柄相应的FILE_OBJECT的指针。
20.权利要求19的方法,其中所述确定步骤还包括对于句柄集内每个句柄,从内核内输出一个与所传送的FILE_OBJECT相应的文件标识符。
21.权利要求20的方法,其中所述标识步骤包括标识与所标识的文件标识符相应的FILE_OBJECT,所述标识的文件标识符与目标文件相应。
22.权利要求21的方法,其中所述发送步骤包括向内核传送所标识的FILE_OBJECT;以及通过读请求分组向内核请求从与所标识的FILE_OBJECT相应的目标文件读取数据,其中所述读请求分组包括一个中断请求分组(IRP)。
23.权利要求22的方法,其中所述请求步骤包括在内核内以一定的偏置量和一定长度产生一个与所标识的FILE_OBJECT相应的IRP;以及向操作系统的文件系统驱动程序传送IRP。
24.一种在一个具有在文件打开时实现文件锁定的操作系统的计算机系统内访问至少一个目标文件的系统,所述系统包括一个配置成获取一个与在计算机系统内打开的所有文件的集合相应的句柄集的获取模块;一个配置成在操作系统的内核内确定一个与句柄集相应的文件标识符集的确定模块;一个配置成从标识文件标识符集中标识一个与目标文件相应的文件标识符的标识模块;以及一个配置成在内核内向操作系统的文件系统驱动程序发送一个与所标识的文件标识符相应的读请求分组的发送模块。
25.权利要求24的系统,其中所述获取模块包括一个配置成向内核发布一个NtQuerySystemInformation的发布模块,其中所述NtQuerySystemInformation请求有关在句柄集内每个句柄的所有信息;以及一个配置成从内核获取对于句柄集内每个句柄的一个SYSTEM_HANDLE_INFORMATION数组的获取模块,其中所述SYSTEM_HANDLE_INFORMATION包括一个指向一个FILE_OBJECT的指针,其中所述FILE_OBJECT包括文件标识符信息。
26.权利要求25的系统,其中所述确定模块包括一个配置成对于句柄集内每个句柄向内核传送一个指向与这个句柄相应的FILE_OBJECT的指针的传送模块。
27.权利要求26的系统,其中所述确定模块还包括一个配置成对于句柄集内每个句柄从内核内输出一个与所传送的FILE_OBJECT相应的文件标识符的输出模块。
28.权利要求27的系统,其中所述标识模块包括一个配置成标识与所标识的文件标识符相应的FILE_OBJECT的标识模块,所述标识的文件标识符与目标文件相应。
29.权利要求28的系统,其中所述发送模块包括一个配置成向内核传送所标识的FILE_OBJECT的传送模块;以及一个配置成通过读请求分组向内核请求从与所标识的FILE_OBJECT相应的目标文件读取数据的请求模块,其中所述读请求分组包括一个中断请求分组(IRP)。
30.权利要求29的系统,其中所述请求模块包括一个配置成在内核内以一定的偏置量和一定长度产生一个与所标识的FILE_OBJECT相应的IRP的产生模块;以及一个配置成向操作系统的文件系统驱动程序传送IRP的传送模块。
31.一种用于可编程计算机的计算机程序产品,具有在一个具有在文件打开时实现文件锁定的操作系统的计算机系统内访问至少一个目标文件的可读程序代码,所述计算机程序产品包括获取一个与在计算机系统内打开的所有文件的集合相应的句柄集的计算机可读代码;在操作系统的内核内确定一个与句柄集相应的文件标识符集的计算机可读代码;从文件标识符集中标识一个与目标文件相应的文件标识符的计算机可读代码;在内核内向操作系统的文件系统驱动程序发送一个与所标识的文件标识符相应的读请求分组的计算机可读代码;以及从文件系统驱动程序接收与目标文件相应的数据的计算机可读代码。
32.一种用于可编程计算机的计算机程序产品,具有在一个具有在文件打开时实现文件锁定的操作系统的计算机系统内访问至少一个目标文件的可读程序代码,所述计算机程序产品包括获取一个与在计算机系统内打开的所有文件的集合相应的句柄集的计算机可读代码;在操作系统的内核内确定一个与句柄集相应的文件标识符集的计算机可读代码;从文件标识符集中标识一个与目标文件相应的文件标识符的计算机可读代码;以及在内核内向操作系统的文件系统驱动程序发送一个与所标识的文件标识符相应的读请求分组的计算机可读代码。
全文摘要
本发明提供了一种在一个具有在文件打开时实现文件锁定的操作系统的计算机系统内访问至少一个目标文件的方法和系统。在一个典型实施例中,这种方法和系统包括(1)获取一个与在计算机系统内打开的所有文件的集合相应的句柄集;(2)在操作系统的内核内确定一个与句柄集相应的文件标识符集;(3)从文件标识符集中标识一个与目标文件相应的文件标识符;(4)在内核内向操作系统的文件系统驱动程序发送一个与所标识的文件标识符相应的读请求分组;以及(5)从文件系统驱动程序接收与目标文件相应的数据。
文档编号G06F9/46GK1667608SQ20041009257
公开日2005年9月14日 申请日期2004年11月15日 优先权日2003年12月15日
发明者本杰明·C·里德, 马克·A·斯密斯 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1