随着数字化的迅速发展,数据已经成为企业和个人最重要的资产之一。然而,不可避免的是,数据也可能丢失或损坏,这可能会对企业和个人造成不可逆转的影响。因此,数据恢复已成为一项必要的任务。而在选择数据恢复代理时,如何做出正确的选择呢?本文将提供一些有用的建议。
1. 了解代理商的专业能力
在选择数据恢复代理时,首先要了解代理商的专业能力。代理商需要具备丰富的数据恢复经验和技能,并且能够确保在处理故障时保证数据的完整性,同时能够更大限度地恢复数据。在选择代理商时,可以参考他们的客户反馈,了解他们的成功率和服务标准等相关信息。
2. 确定代理商的数据恢复流程和技术
数据恢复代理商的流程和技术是选择代理商的关键因素之一。因此,消费者应该确保代理商的流程和技术符合他们的需求,并支持不同类型的文件恢复方式。 根据不同的需求,企业或个人可以选择不同的恢复方法。例如,如果需要恢复特定的文件类型,则需要确认代理商是否提供这样的服务,并且代理商是否有恢复具体文件类型的经验和技能。
3. 确认代理商的安全保障
数据恢复代理商的安全保障也是一个需要关注的问题。消费者要选择一家值得信任的代理商,确保代理商能够通过严格的数据保护方法确保数据的保密性,并确保与客户之间的通信是安全的。因此,消费者应该选择那些具有实力和声誉的代理商,同时也需要对代理商进行审查和调查。在选择代理商时,还应考虑他们的安全技术和控制措施,以确保数据不会被黑客攻击。
4. 确定代理商的服务价格
在选择数据恢复代理商时,价格也是需要考虑的重要因素之一。企业和个人应确保代理商懂得遵守服务价格,同时也要明确他们的收费标准。在追求更优价格的同时,消费者也要考虑代理商的数据恢复服务、专业性和质量等方面的因素。
5. 了解代理商的服务保障
为了确保选择的数据恢复代理商可以提供可靠的服务,消费者可以问问代理商关于服务保障的问题。代理商应该能够提供响应和支持服务,包括根据消费者的需求提供恢复服务。同时,代理商还应该确保问题能够得到及时解决,提供全天候在线客户支持服务,以便消费者可以提出任何疑问或问题,并且得到快速和准确的回答。
6. 充分比较代理商的优势和劣势
在选择数据恢复代理商时,更好进行仔细比较和评估。消费者应该仔细了解代理商的特点,并评估他们的性能、价格、服务水平等方面的优势和劣势。在比较时,更好选取多个代理商进行比较,以便更好地了解他们的差异和优势。
选择适合的数据恢复代理需要考虑多个因素,包括代理商的专业能力、数据恢复流程和技术、安全保障、服务价格、服务保障和优势和劣势等方面的问题。消费者应该仔细比较和评估,最终选择一家值得信任的代理商,以确保数据的安全和完整性。数据是企业和个人最为重要的财富,选择一家合适的数据恢复代理将为消费者带来更多的保障和信心。
相关问题拓展阅读:
- 什么是NTFS分区?
- 如何加密文件系统,都有哪些策略?
什么是NTFS分区?
我是从网上看的,虽然不是我写的,但至少对你有用,仔细读吧,呵呵
虽然许多读者都知道NTFS这个名词,但细细深究起来却又似懂非懂,比如:有人认为NTFS对盯启游戏支持不好,它的安全性到底体现在什么地方,
即使用了似乎也没有什么感觉。本篇文章将给大家一个关于NTFS的满意答案。
一、什么是文件系统和NTFS
首先,需要澄清读者对于文件系统的一些错误理解,经常有这样的说法,“我的硬盘是FAT32格式的”,“C盘是NTFS格式”等,它们的错误在于,
NTFS或是FAT32并不是格式,而是管理文件的系统,其次刚买回来的硬盘并没有文件系统,必须使用FDISK或Windows 2023/XP的分区工具等对其进行分区并格式化后
才会有管理文件的系统,因此文件系统是对应分区的,而不是硬盘,不管是将硬盘分成一个分区,还是几个分区。
举个通俗的比喻,一块硬盘就像一个块空地,文件就像不同的材料,我们首先得在空地上建起仓库(分区),并且指定好(格式化)仓库对材料的管理规范(文件系统),
这样才能将材料运进仓库保猜知管。文件不会受所在分区的文件系统影响,就像同样是汽车轮胎在A仓库可能直接堆在地上,而B仓库则会挂在墙上,
仅仅是放置和管理方法不同而已,因此,在NTFS分区和FAT32分区的文件可以随意在分区间移动,内容不会因此产生任何不同。
NTFS的英文全称为“NT File System”,中文意为NT文件系统(见图1 24rntfs01 在“我的电脑”中右击“属性”,在弹出窗口中就可以看到文件系统信息)。
它随着1996年7月的Windows NT 4.0诞生的,但直到Windows 2023,它才开始在个人用户中间得以推广,跨入了主力分区文件系统的行列。今天,
Windows XP/2023和NTFS早已是“如胶似漆”了。
我们知道,当初FAT32文件系统的出现对于FAT16而言,可以说是有了比较明显的改善,但NTFS对FAT32的改进,就必须得用“卓越”来形容了。
NTFS更大分区上限已达到了2TB(1TB=1024GB),从诞生到现在经历了多个版本,Windows NT4.0中的版本为1.2,Windows 2023为3.0,Windows XP为3.1。
如果要查看当前NTFS版本号,只要在命令提示符中输入“fsutil fsinfo ntfsinfo c:”(C为分区盘符)即可看到。
小知识
常见文件系统
FAT12:是IBM之一台个人电脑中的MS-DOS 1.0使用的文件系统,主要用于软盘。这种系统限制分区的容量更大为16MB——但这根本算不上问题,
因为软盘容量从来没有达到16MB。
FAT16:它被很多操作系统支持,兼容性更好,但分区更大只能到2GB,并且空间浪费现象比较严重。并且由于FAT16文件系统是单用户文件系统,
不支持任何安全性及长文件名。
FAT32:是在FAT16基础上发展而来,随着Windows 95 OSR2一起发布,可以被大多数操作系统支持,FAT32比FAT16更有效地利用了硬盘空间,
并且更大分区的上限已经达到了32GB,适合一般家庭使用。
ISO9660:CD-ROM的文件系统,不过现在已经延伸出很多新的文件系统,对它的一些缺点进行了弥补,如Juliet等。
UDF:可读写光盘的文件系统。
Mac HFS:苹果电脑的文件系统,对大容量磁盘有比较好的支持。不过,现在大多数苹果电脑还在使用FAT32文件系统。
二、细数NTFS的四大优点
1.具备错误预警的文件系统
在凯兆如NTFS分区中,最开始的16个扇区是分区引导扇区,其中保存着分区引导代码,接着就是主文件表(Master File Table,以下简称MFT),但如果它所在的磁盘扇区恰好出现损坏,NTFS文件系统会比较智能地将MFT换到硬盘的其他扇区,保证了文件系统的正常使用,也就是保证了Windows的正常运行。而以前的FAT16和FAT32的FAT(文件分配表)则只能固定在分区引导扇区的后面,一旦遇到扇区损坏,那么整个文件系统就要瘫痪。
但这种智能移动MFT的做法当然并非十全十美,如果分区引导代码中指向MFT的部分出现错误,那么NTFS文件系统便会不知道到哪里寻找MFT,从而会报告“磁盘没有格式化”这样的错误信息。为了避免这样的问题发生,分区引导代码中会包含一段校验程序,专门负责侦错。
2.文件读取速度更高效!
恐怕很多人都听说NTFS文件系统在安全性方面有很多新功能,但你可否知道:NTFS在文件处理速度上也比FAT32大有提升呢?
对DOS略知一二的读者一定熟悉文件的各种属性:只读、隐藏、系统等。在NTFS文件系统中,这些属性都还存在,但有了很大不同。在这里,一切东西都是一种属性,就连文件内容也是一种属性。这些属性的列表不是固定的,可以随时增加,这也就是为什么你会在NTFS分区上看到文件有更多的属性(见图2 24rntfs02)。
NTFS文件系统中的文件属性可以分成两种:常驻属性和非常驻属性,常驻属性直接保存在MFT中,像文件名和相关时间信息(例如创建时间、修改时间等)永远属于常驻属性,非常驻属性则保存在MFT之外,但会使用一种复杂的索引方式来进行指示。如果文件或文件夹小于1500字节(其实我们的电脑中有相当多这样大小的文件或文件夹),那么它们的所有属性,包括内容都会常驻在MFT中,而MFT是Windows一启动就会载入到内存中的,这样当你查看这些文件或文件夹时,其实它们的内容早已在缓存中了,自然大大提高了文件和文件夹的访问速度。
小提示
为什么FAT的效率不如NTFS高
FAT文件系统的文件分配表只能列出了每个文件的名称及起始簇,并没有说明这个文件是否存在,而需要通过其所在文件夹的记录来判断,而文件夹入口又包含在文件分配表的索引中。因此在访问文件时,首先要读取文件分配表来确定文件已经存在,然后再次读取文件分配表找到文件的首簇,接着通过链式的检索找到文件所有的存放簇,最终确定后才可以访问。
3.磁盘自我修复功能
NTFS利用一种“自我疗伤”的系统,可以对硬盘上的逻辑错误和物理错误进行自动侦测和修复。在FAT16和FAT32时代,我们需要借助Scandisk这个程序来标记磁盘上的坏扇区,但当发现错误时,数据往往已经被写在了坏的扇区上了,损失已经造成。
NTFS文件系统则不然,每次读写时,它都会检查扇区正确与否。当读取时发现错误,NTFS会报告这个错误;当向磁盘写文件时发现错误,NTFS将会十分智能地换一个完好位置存储数据,操作不会受到任何影响。在这两种情况下,NTFS都会在坏扇区上作标记,以防今后被使用。这种工作模式可以使磁盘错误可以较早地被发现,避免灾难性的事故发生。
有些人发现当把磁盘转换为NTFS文件系统后,用磁盘扫描程序就很难发现磁盘错误了。经过前面的介绍,你知道这是为什么了吗?
4.“防灾赈灾”的事件日志功能
在NTFS文件系统中,任何操作都可以被看成是一个“事件”。比如将一个文件从C盘复制到D盘,整个复制过程就是一个事件。事件日志一直监督着整个操作,当它在目标地——D盘发现了完整文件,就会记录下一个“已完成”的标记。假如复制中途断电,事件日志中就不会记录“已完成”,NTFS可以在来电后重新完成刚才的事件。事件日志的作用不在于它能挽回损失,而在于它监督所有事件,从而让系统永远知道完成了哪些任务,那些任务还没有完成,保证系统不会因为断电等突发事件发生紊乱,更大程度降低了破坏性。
5.我是否需要哪些附加的功能?
其实,NTFS还提供了磁盘压缩、数据加密、磁盘配额(在“我的电脑”中右击分区并并行“属性”,进入“配额”选项卡即可设置)、动态磁盘管理等功能,这些功能在很多报刊杂志上介绍的比较多了,这里不再详细介绍。
NTFS提供了为不同用户设置不同访问控制、隐私和安全管理功能。如果你的系统处于一个单机环境,比如家用电脑,那么这些功能对你意义不是很大。
小提示
从FAT转换过来的NTFS,性能有折扣
如果分区是从FAT32转换为NTFS文件系统的(使用命令为“CONVERT 驱动器盘符 /FS:NTFS”),不仅MFT会很容易出现磁盘碎片,更糟糕的是,磁盘碎片整理工具往往不能整理这各分区中的MFT,严重影响系统性能。因此,建议将分区直接格式化为NTFS文件系统。
三、NTFS的七大热点问答
1.是不是NTFS一定比FAT32更高效,为什么我感觉不到呢?
当然也不能这样一概而论,因为NTFS与FAT的单个文件操作速度差异往往仅在毫秒之间.一般无法察觉,如果硬盘小,文件操作不频繁,那么差异不明显,
不过随着硬盘向200GB迈进,电脑同时执行多任务的机会不断增加,差异会越来越明显。
同时,NTFS的MFT相当于一个小型数据库,因此对硬件也有较高要求,而且对于较小分区它反而不如FAT32更高效,因此,是否使用NTFS文件系统还有以下几个注意点:
★微软建议分区大于32GB更好使用NTFS文件系统,而且在Windows XP中,分区超过个数字后,就无法格式为FAT32文件系统了。
专家的建议是,分区在8GB以下,FAT32会更高效,分区在16GB或更高时,更好选择NTFS文件系统。对于8GB~16GB的分区,使用哪种就看你自己的喜好了。
★硬盘转速更好在5400转以上,CPU主频不低于700MHz,内存不少于256MB。
2.在Windows 98中如何查看NTFS分区中的内容?
推荐你使用NTFS Reader for DOS(下载地址:
),它可以在DOS中查看、复制NTFS分区中的文件。另外,你还可以下载
,用它可以制作能够访问NTFS分区的启动软盘,而
则可制作相应的启动光盘。
3.看起来主文件分区表(MFT)十分重要,如果它损坏了如何恢复?
很简单,在“开始→运行”中输入“Cmd”,进入命令提示符。输入“Chkdsk”,回车后就会开始查找磁盘错误,找到后可以使用“Chkdsk /F”进行修复(见图3 24rntfs03)。
另外,还有朋友在看过22期《系统慢可能是你的文件太多了》一文后询问,如何优化MFT,其实很简单,就是定期用磁盘碎片整理工具整理磁盘,这样同时也会对MFT中的碎片进行整理。这里还有一个手工的方法,就是将分区中所有文件移动到其他分区,然后再移动回来,这等于重新整理和优化了数据分区的MFT,但效果比碎片整理差一些。
4.NTFS会对游戏运行有不良影响吗?
很多人关注这个问题,而有些人认为FAT32更适合玩游戏。其实,NTFS只是一种管理文件的系统,和游戏没有任何直接联系。也就是说,NTFS不会对游戏有特别优势,FAT32也同样如此。惟一值得小心的是一些较低级别的应用程序,它们会跳过高端的Win32 API接口,试图直接访问磁盘扇区,它们才是NTFS可怕的敌人。
5.如何配置簇的大小呢?
簇是文件系统中基本的储存单位,当你在Windows对分区进行格式化时,会有簇大小的选择(见图4 24rntfs04),如果设置的值比较大,那么文件保存时占用的簇就会少,从而文件读取性能就越高。还是用个比喻,簇就像仓库中的柜子,如果你选择的是小号柜子,那么一批材料可能一个柜子装不满,还得用三到四个,如果是大号柜子,那么可能只用一个或两个就装下了。这样装和取材料时,柜子越少效率就越高。但是,不少批次的材料可能一个大柜子都装不满,这样柜子就只能空着许多空间,积少成多,会浪费不少空间。
到底应该选择多少更合适呢?一个简单的办法就是,首先确定分区主要用来保存什么样的文件,如果是体积很大的视频和多媒体文件,那么更好将簇设置得大一些,这样可以提高性能。如果分区主要存储网页或文本文件等文件,建议簇小一些,推荐使用Windows的“默认值”,这样会减少空间浪费。
如果你想更改当前分区的簇的大小,同时又不想重新格式化,可以使用PQMagic来完成(“高级→调整簇的大小”)。
6.什么时候选择压缩NTFS卷
在“我的电脑”中右击某个分区并选择“属性”,在“常规”选项卡中有一个“压缩驱动器以节省磁盘空间”的选项,这个功能确实可以节省一些磁盘空间,但根据CPU速度、分区的大小和要压缩的数据,应用它后可能会不同的效率,或者提升,或者降低系统性能。
我们建议,如果CPU非常快,但硬盘属于比较慢的型号,可以考虑压缩,这样会对文件读取效率有些提高;如果分区大于8GB,则不要选择压缩,这样会影响系统性能;如果分区中保存的文件大部分是已经不能压缩的数据,比如:JPG、ZIP等已经压缩过的文件,那么即使选择了压缩,也不会有节省空间的效果,建议对主要保存文本、Office、BMP等文件的分区进行压缩。
7.给文件/文件夹加密之后,系统被格式化了,怎么才能访问这些文件夹?
最保险的方式是在格式化之前,以管理员身份设置“数据恢复代理”,以备将来的不时之需。具体使用方法参见
。
NTFS是Windows NT引入的新型文件系统,它具有许多新特性。本文旨在探索NTFS的底层结构,所叙述的也仅是文件在NTFS卷上的分布。NTFS中,卷中所有存放的数据均在一个叫$MFT的文件中,叫主文件表(Master File Table)。而$MFT则由文件记录(File Record)数组构成。File Record的大小一般是固定的,通常情况下均为1KB,这个概念相当于Linux中的inode。File Record在$MFT文件中物理上是连续的,且从0开始编号。$MFT仅供File System本身组织、架构文件系统使用,这在NTFS中称为元数据(Metadata)。以下列出Windows 2023 Release出的NTFS的元数据文件(我将要给出的示例代码的部分输出结果)。
File Record(inode) FileName
—
$MFT
$MFTMirr
$LogFile
$Volume
$AttrDef
.
$Bitmap
$Boot
$BadClus
$Secure
$UpCase
$Extend
Windows 2023中不能使用dir命令(甚至加上/ah参数)像普通文件一样列出这些元数据文件。实际上File System Driver(ntfs.sys)维护了一个系统变量NtfsProtectSystemFiles用于隐藏这些元数据。默认情况下,这个变量被设为TRUE,所以使用dir /ah将则拿得不到任何文件。知道这个行为后使用i386kd修改NtfsProtectSystemFiles后即可以列出孙迹搭元数据文件:
kd> x ntfs!NtfsProtect*
feNtfs!NtfsProtectSystemFiles
fe21349c Ntfs!NtfsProtectSystemAttributes
kd> dd ntfs!NtfsProtectSystemFiles l 2
fe
kd> ed ntfs!NtfsProtectSystemFiles 0
kd> dd ntfs!NtfsProtectSystemFiles l 2
fe
kd>
D:\>ver
Microsoft Windows 2023
D:\>dir /ah $*
驱动器 D 中的卷是 W2KNTFS
卷的序列号是 E831-9D04
D:\ 的州悉目录
19: 36,000 $AttrDef
19:$BadClus
19: 67,336 $Bitmap
19: 8,192 $Boot
19: $Extend
19:3,139,968 $LogFile
19:7,575,296 $MFT
19: 4,096 $MFTMirr
19: 131,072 $UpCase
19:$Volume
个文件,961,960 字节
个目录,863,552 可用字节
需要指出的是ntfs.sys将元数据文件以一种特殊的方式打开,所以在打开NtfsProtectSystemFiles后,如果使用ReadFile等产生IRP_MJ_READ等IRP包时将会导致Page Fault(详见Gary Nebbett的《Windows NT/2023 Native API Reference》)。
以上的讨论均是基于$MFT文件而讨论的,即基于$MFT中的File Record(inode)讨论的。为更好的继续以下的讨论,这儿我列出File Record Header的结构:
typedef struct {
ULONG Type;
USHORT UsaOffset;
USHORT UsaCount;
USN Usn;
} NTFS_RECORD_HEADER, *PNTFS_RECORD_HEADER;
typedef struct {
NTFS_RECORD_HEADER Ntfs;
USHORT SequenceNumber;
USHORT LinkCount;
USHORT AttributesOffset;
USHORT Flags; // 0x0001 = InUse, 0x0002 = Directory
ULONG BytesInUse;
ULONG BytesAllocated;
ULONGLONG BaseFileRecord;
USHORT NextAttributeNumber;
} FILE_RECORD_HEADER, *PFILE_RECORD_HEADER;
下面我将讨论如何定位$MFT。稍微有点操作系统知识的人都会知道引导扇区(Boot Sector),其物理位置为卷中的之一个扇区。以下由dskprobe.exe(Windows 2023 Resource Kit中的一个小工具)分析的之一个扇区(当然也可以使用WinHex等其他应用程序):
file: d:\Sector00.bin
Size: 0x(512)
Address |:A 0B-0C 0D 0E 0F |ABCDEF
|:|—
| EBE:| ?R?NTFS …..
|0 F: 3F 00 F0 00-3F| …..?..?.e.?…
|: 90 C00 00 | ….�.�.恼A…..
|: 09 1C0 00 | …………….
| F: 04 9D 31 E8-BB 31 E8 94 | ?…….?杌1钄
..
..
..
F0 |: 83 A0 B3 CAA | ……..儬成..U?
这512字节为如下的格式:(摘自Gary Nebbett书中,本文许多代码均来自或参考此书。)
#pragma pack(push, 1)
typedef struct {
UCHAR Jump;
UCHAR Format;
USHORT BytesPerSector;
UCHAR SectorsPerCluster;
USHORT BootSectors;
UCHAR Mbz1;
USHORT Mbz2;
USHORT Reserved1;
UCHAR MediaType;
USHORT Mbz3;
USHORT SectorsPerTrack;
USHORT NumberOfHeads;
ULONG PartitionOffset;
ULONG Reserved2;
ULONGLONG TotalSectors;
ULONGLONG MftStartLcn;
ULONGLONG Mft2StartLcn;
ULONG ClustersPerFileRecord;
ULONG ClustersPerIndexBlock;
ULONGLONG VolumeSerialNumber;
UCHAR Code;
USHORT BootSignature;
} BOOT_BLOCK, *PBOOT_BLOCK;
#pragma pack(pop)
各个字段的详细意义从字段名中即可大致清楚。在linux-ntfs的GNU工程(
)中也有详细的文档,限于篇幅我不将其列出。可以使用如下代码读出卷中的之一个扇区:
hVolume = CreateFile(drive, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, 0,
OPEN_EXISTING, 0, 0);
ReadFile(hVolume, &bootb, sizeof(bootb), &n, 0);
bootb是一个BOOT_BLOCK结构,在我的卷中如下格式(请对应Sector00.bin分析):
Dump BootBlock at below:
BytesPerSector:200
SectorsPerCluster:8
BootSectors:0
SectorsPerTrack:3F
NumberOfHeads:F0
PartitionOffset:3F
TotalSectors:41C090
MftStartLcn:4
Mft2StartLcn:41C09
ClustersPerFileRecord:F6
ClustersPerIndexBlock:1
VolumeSerialNumber:E8319D04
BootSignature:AA55
以上的MftStartLcn其实是$MFT在卷中的簇(Cluster)号。簇是NTFS的基本单位,最小单位。一个只有1Byte的文件也要占用一簇的空间。NTFS使用LCN(Logical Cluster Number)来代表NTFS卷中的物理位置,其简单的从0到卷中的总簇数减一进行编号。对于一个特定的文件NTFS则使用VCN(Virtual Cluster Number)来映射LCN实现文件的组织。从MftStartLcn的值4可以知道$MFT的LCN为4与SectorsPerCluster、BytesPerSector的大小即可定位$MFT的位置。得到$MFT的位置后,如果遍历$MFT中所有的File Record即可以得到卷中所有的文件列表(前面已经提到File Record只是简单的从0开始编号)。也就是说到目前为止已经可以对文件组织有最简单的认识,但如何得到文件的信息呢,如文件名等等。NTFS中所有文件包括普通的用户文件、元数据文件均用同样的方式组织数据、属性等。我将nfi.exe(来自Windows NT/2023 OEM Support Tools)的输出结果列出,作为我叙述的开始:
D:\>copy con file
testforntfs^Z
已复制个文件。
D:\>nfi d:\file
NTFS File Sector Information Utility.
Copyright (C) Microsoft Corporation 1999. All rights reserved.
\file
$STANDARD_INFORMATION (resident)
$FILE_NAME (resident)
$DATA (resident)
D:\>echo testforattr>file:ATTR
D:\>nfi d:\file
NTFS File Sector Information Utility.
Copyright (C) Microsoft Corporation 1999. All rights reserved.
\file
$STANDARD_INFORMATION (resident)
$FILE_NAME (resident)
$DATA (resident)
$DATA ATTR (resident)
nfi的输出结果$STANDARD_INFORMATION、$FILE_NAME、$DATA等在NTFS中称为属性(Attribute)。属性分为常驻属性(Resident Attribute)与非常驻属性(Nonresident Attribute)。文件的数据也包含在属性中,似乎与属性这个名称有点混谣。不过这又让NTFS有了更加统一的组织文件的形式。这也同时让NTFS有MultiStreams的特性(上面也演示了这个特性)。通过指定的File Record定位给定的Attribute的实现代码如下:
template inline
T1* Padd(T1* p, T2 n) { return (T1*)((char *)p + n); }
PATTRIBUTE FindAttribute(PFILE_RECORD_HEADER file,
ATTRIBUTE_TYPE type, PWSTR name)
{
for (PATTRIBUTE attr = PATTRIBUTE(Padd(file, file->AttributesOffset));
attr->AttributeType != -1;
attr = Padd(attr, attr->Length)) {
if (attr->AttributeType == type) {
if (name == 0 && attr->NameLength == 0) return attr;
if (name != 0 && wcslen(name) == attr->NameLength
&& _wcsicmp(name, PWSTR(Padd(attr, attr->NameOffset))) == 0) return attr;
}
}
return 0;
}
Gary Nebbett提供的这个FindAttribute函数在Attribute name(即第三个参数)不为空串时可能会出现bug,主要原因是_wcsicmp对UNICODE字符串比较时应该是以\0结束的标准的C字符串。我在提供的代码中已经纠正了这个错误。
下面我将通过使用SoftICE来分析这段代码得到$MFT的$FILE_NAME属性来得到$MFT的file name。这个示例同样适用于得到其它文件的$FILE_NAME(如上面的file)、还有其它的属性如$DATA等等。
:bpx FindAttribute
Break due to BPX FindAttribute (ET=6.89 seconds)
:locals
+struct ATTRIBUTE * attr = 0x00344D68
+struct FILE_RECORD_HEADER * file = 0x00344D38
enum ATTRIBUTE_TYPE type = AttributeFileName (30)
+unsigned short * name = 0x004041BC
:?file
struct FILE_RECORD_HEADER * = 0x00344D38
struct NTFS_RECORD_HEADER Ntfs = {…}
unsigned short SequenceNumber = 0x1, “\0\x01”
unsigned short LinkCount = 0x1, “\0\x01”
unsigned short AttributesOffset = 0x30, “\00”
unsigned short Flags = 0x1, “\0\x01”
unsigned long BytesInUse = 0x2D8, “\0\0\x02\xD8”
unsigned long BytesAllocated = 0x400, “\0\0\x04\0”
unsigned quad BaseFileRecord = 0x0, “\0\0\0\0\0\0\0\0”
unsigned short NextAttributeNumber = 0x6, “\0\x06”
file参数我传入的是$MFT,从$MFT的LCN=4可以得到其在卷中的物理地址,这在上面已说明。你也可以使用dskprobe(我机子中为第LCN*SectorsPerCluster=4*8扇区)得到底下SoftICE的输出结果:
:dd @file //以下的注释可对照文中开头列出的FILE_RECORD_HEADER定义。
:00344D38 454CA 6D4AC04D FILE*…M.Jm….
:00344D2D ….0………..
|__AttributeOffset
:00344DFA0D ……….4…..
:00344D ….`………..
||_指出这个Attribute的长度。定义如下。
|_根据AttributeOffset得到的Attribute头,定义如下。指出这个Attribute为StandardInformation
:00344DC1761D0 01BFB03C H……..a.,AttributeOffset+length(StandardInformationAttribute)
:dd @file+30+60
:00344DC 0…h………..
—
| |___这里的NameLength与NameOffset指FileNameAttribute名。不要与$MFT FileName混谣。
|_指出这是一个FileNameAttribute。
:00344DDAJ……………
—-
|||_根据ValueOffset的值,得到FILENAME_ATTRIBUTE的具置。
||_ValueOffset值
|_ValueLength值
:00344DE8 2C1761D0 01BFB03C 2C1761D0 01BFB03C .a.,> 3> & (1 Ntfs.Type == ‘ELIF’ && (file->Flags & 3 )) {
attr = FindAttribute(file, AttributeFileName, 0);
if (attr == 0) continue;
PFILENAME_ATTRIBUTE name
= PFILENAME_ATTRIBUTE(Padd(attr, PRESIDENT_ATTRIBUTE(attr)->ValueOffset));
printf(“%8lu %.*ws\n”, i, int(name->NameLength),name->Name)
}
}
}
本文引用Gary Nebbett的些定义可能对Windows 2023版本有些很小的出入,不过Internet有其神奇的地方,虽然Microsoft不提供这些信息,但诸如linux-ntfs GNU工程等均是学习NTFS的一个很好的资料,本文也参考了很多它提供的文档。另外Mark Russinovich的《Inside Win2K NTFS》、《Inside NTFS》、《Exploring NTFS On-disk Structures》等也是很好的NTFS资料。本文仍未涉及NTFS中目录的组织(B+树)等等,可能的话我会另行介绍。文中介绍的完整代码可到
下载。出现的错误也欢迎来信指教()!
最后感谢Anton Altaparmakov,感谢我的同事在出差时抽空给我买到Gary Nebbett的书。感谢我看到的所有资料的原作者们。感谢他们!
参考资料:
1.Gary Nebbett《Windows NT/2023 Native API Reference》
2.Linux-NTFS Project NTFS Documentation Version 0.4
3.Mark Russinovich相关文档
4.David Solomom《Inside Windows NT,2nd Edition》
想要了解NTFS,我们首先应该认识一下FAT。FAT(File Allocation Table)是“文件分配表”的意思。对我们来说,它的意义在于对硬盘分区的管理。FAT16、FAT32、NTFS是目前最常见的三种文件系统。 #_ X{ ma$Hd~5@
({Q/`yP FAT16:我们以前用的DOS、Windows 95都使用FAT16文件系统,现在常用的Windows 98/2023/ XP等系统均支持FAT16文件系统键羡庆。它更大可以管理大到2GB的分区,但每个分区最多只能有65525个簇。
,M k”UpGWX FAT32:随着大容量硬盘的出现,从Windows 98开始,FAT32开始流行。它是FAT16的增强版本,可以支持大到2TB(2023G的分区。FAT32使用的簇比FAT16小,从而有效地节约了硬盘空间稿握。
1e/U qc#TH_ q NTFS:微软Windows NT内核的系列操作系统支持的、一个特别为网络和磁盘配额、文件加密等管理安全特性设计的磁盘格式。随着以NT为内核的Windows 2023/ XP的普及,很多个人用户开始用到了NTFS。NTFS也是以簇为单位来存储数据文件,但NTFS中簇的大小并不依赖于磁盘或分区的大小。簇尺寸的缩小不但降低了磁盘空间的浪费,还减派伏少了产生磁盘碎片的可能。NTFS支持文件加密管
k1dPL}9l 理功能,可为用户提供更高层次的安全保证。 _I.a!J7X
M z y&W/>_Dd
2、什么系统可以支持NTFS文件系统?
8R\9Z Y0uv |5a R s6B”u1Ec1N1o0Hq
只有Windows NT/2023/XP才能识别NTFS系统,Windows 9x/ Me以及DOS等操作系统都不能支持、识别NTFS格式的磁盘。由于DOS系统不支持NTFS系统,所以更好不要将C:盘制作为NTFS系统,这样在系统崩溃后便于在DOS系统下修复。
3yf q$`.A6kj9a!f drR `$D >;y’rLDz/hDS
NTFS与操作系统支持情况如下:
h|0{n!w;yb.N FAT16 windows 95/98/me/nt/2023/xp unix,linux,dos
‘s’L%C”HgHb&h FAT32 windows 95/98/me/2023/xp
dSpL)C7n%?^V2O9U NTFS windows nt/2023/xp y7g2eOz,q
scc6_Jj ~> { 3、我们需要NTFS吗? !b8
@d@Qb5x%\Y Windows 2023/XP在文件系统上是向下兼容的,它可以很好地支持FAT16/FAT32和NTFS,其中NTFS是Windows NT/2023/XP专用格式,它能更充分有效地利用磁盘空间、支持文件级压缩、具备更好的文件安全性。如果你只安装Windows 2023/ XP,建议选择NTFS文件系统。如果多重引导系统,则系统盘(C盘)必须为FAT16或FAT32,否则不支持多重引导。
1、什么是NTFS-新(N)技术(T)文件(F)系统(S)?
想要了解NTFS,我们首先应该认识一下FAT。亩族FAT(FileAllocationTable)是“文件分配表”的意思。对我们来说,它的意义在于对硬盘分区的管理。FAT16、FAT32、NTFS是目前最常见的三种文件系统。
FAT16:我们以前用的DOS、Windows95都使用FAT16文件系统,现在常用的Windows98/2023/XP等系统均支持FAT16文件系统。它更大可以管理大到2GB的分区,但每个分区最多只能有65525个簇(簇是磁盘空间的配置单位)。随着硬盘或分区容量的增大,每个簇所占的空间将越来越大,从而导致硬盘空间的浪费。
FAT32:随着大容量硬盘的出现,从Windows98开始,FAT32开始流行。它是FAT16的增强版本,可以支持大到2TB(2023G的分区。FAT32使用的簇比FAT16小,从而有效地节约了硬盘空间。
如何加密文件系统,都有哪些策略?
这篇文章中的信息适用于:
microsoft
windows
xp
professional
microsoft
windows
2023
advanced
server
microsoft
windows
2023
professional
microsoft
windows
2023
datacenter
server
microsoft
windows
2023
server
概要
本文介绍如何备份加密文件系统
(efs)
私钥,以便可以在计算机上的数据副本丢失时恢复加密的数据。
在使用
efs
加密计算机上的文件时,efs
公钥用来加密文件,而
efs
私钥用来解密这些文件。
如果在一个文件加密后您丢失了私钥,则将无法恢复此文件。
警告:
在将私钥导出到磁盘后,须将该磁盘保存在一个安全地方。
如果有人能获取您的
efs
私钥,则他或她就能够访问到您的加密数据。
从故障恢复代理导出私钥
使用本地管理员帐户登录到计算机。备注:
必须使用内置的管理员帐户,而不只是使用一个普通的具有管理员权限的帐户。
单击开始,单击运行,键入
secpol.msc,然后单击确定。
单击公钥策略旁边的加号
(+)
以展开此项。
单击经过加密的数据恢复代理类别。
在右边的窗格中将显示一个颁发给“管理员”的证书,并说明它是用来进行“文件恢复”的。
右键单击此项,然后单雹悉戚击“所有任务”>“导出”。
单击下一步。
确保源陵选择了“是,导出私钥”选项,然后单击下一步。
在导出文件格式对话框中,如果想删除与“管理员”帐户关联的私钥,则请单击选中“如果导出成功,删除密钥”复选框。
单击下一步。
键入并确认一个密码以加强导出密钥的安全,然后单击下一步。
系统会提示您将证书和私钥保存到一个文件中。
应将此文件备份到一个磁盘或可移动媒体设备中,然后将此备份存放在一个可在物理上确保备份安全的地方。
键入适当的文件名,然后单击下一步。
当正在完成证书导出向导对话框出陆饥现时,请确认您选择的选项,然后单击完成。
当“导出成功”对话框出现时,单击确定。
必须重新启动计算机以完成私钥的删除过程。
之所以刊登上述文章是因为前不久有朋友来信询问如何把ntfs文件系统里面已经加密的文件取出来,由于操作系统已经重新安装,导致sid和以前的不符合,所以询问有没有办法取出来,经过咨询微软全球技术服务中心和查阅微软support站点和technet站点,得出以下结论:使用efs加密的文件(夹)一旦密钥丢失以后是不可能恢复的!
关于数据恢复代理的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。