21世纪的文件系统:概述WindowsNT 5.0文件系统(NTFS)(三)
原文地址: http://www.microsoft.com/msj/1198/ntfs/ntfs.aspx
加密数据流
加密是NTFS 5.0的又一个新功能,它可以保护你的数据免受那些对机器有物理访问的用户的侵扰。当单个机器共享多人时,你的电脑被偷了,或者你讨厌的同事在你的电脑上乱搞时,加密可以保护你的数据。然而加密不能阻止其他人访问你的文件,它做的是阻止文件流的内容被他人所理解。
NTFS系统加密利用CryptoAPI的优势来创建公共密钥。加密密钥存储在一个非分页池里,这样不被写在硬盘上,就不会被偷了。此外,密钥可以存在安全设备上,比如智能卡。虽然远程服务器上的文件可以加密,但数据本身在网络上不是加密的。如果这个对你很重要,你要使用类似安全套接字层的东西(SSL)。加密可以施加在文件上(文件的各种流),或者目录本身,同时流数据的加密解密对应用程序来说是透明的。
如果一个员工离开了公司或者丢失了加密密钥,NTFS系统有内置的恢复支持,那么加密的数据可以被访问。实际上,NTFS不会允许文件被加密,除非系统被配置了至少有一个恢复密钥。对于一个域名环境,恢复密钥在域控制器处定义,所有同域名下的机器被强制使用该密钥。对于广大家庭用户,NTFS自动生成恢复密钥,把该密钥保存为机器密码。你可以在管理员账户上使用命令行工具来恢复数据。
判断文件系统是否支持加密,调用GetVolumeInformation,检查FILE_SUPPORTS_ENCRYPTION位标志。要加密、解密时,简单调用一下EncryptFile或者DecryptFile就可以了。这两个函数可以操作文件的任意流,也可以开启或关闭子文件夹下的所有文件,你可以调用GetFileAttributes,检查FILE_ATTRIBUTE_ENCRYPTED位标志来检查文件是否被加密了。
NT 5.0自带了一个命令行工具,叫Cipher.exe。很容易处理加密文件流。用它,你可以加密或解密文件以及目录,设置恢复策略。新的Win32 函数 openEncryptedFileRaw,readEncrypedFileRaw,WriteEncrypedFileRaw,CloseEncrytedFileRaw,允许应用程序打开文件的加密内容,并正常的读写。
多分点
多分点,NTFS 5.0又一个新功能,允许一段代码在文件或目录被打开时执行,重分析点(多分点)是系统控制属性,可以和任何文件或目录关联,多分点的值是用户控制数据,最大是16KB。重分析数据含有一个32位重分析标志(微软定义),**表示哪些文件系统过滤器被通知重分析属性关联的文件或目录正在被访问。文件系统过滤器可以执行任何代码来控制文件或目录的访问。因为多分点属性的值最大是16KB,所有附加的数据都可以具有各种意义的文件系统过滤器。文件系统过滤器能完全改变文件数据的模样,所以WIndowsNT只允许管理员来安装新的文件系统过滤器。如果系统依照多分析标志不能找到文件系统过滤器,那么文件和目录就不可访问;可是,它们可以被删掉。
多分点用来创建NTFS目录结?NTFS目录结允许你重定向文件/文件夹请求到另一个位置。举个例子,好比你有一个C:\CDROM这样的目录。如果你在这个目录放了一个目录结,把它指向你的X:\驱动器,在Shell命令行发出一个DIR命令,你实际得到的是你的CD-Rom驱动器目录。只有空目录可以有一个关联的多分点,一旦该目录有了多分点后,目录下将不能再创建任何文件和子文件夹。
NTFS目录结允许你把现有的单个目录从多个位置被访问。文件的硬链接和这个类似,除了一点,不能保证系统里是不是存在这个目标目录。鉴于安全原因,系统不会允许你依照UNC路径或映射驱动器来创建目录结。如果你要这么做,你可以使用分布式文件系统(DFS)设备,把不同机器上的卷映射到一个命名空间。**对于本地卷,卷安装点函数(SetVolumeMountPoint)把本机上所有的卷移植到同一个本地命名空间。
没有Win32 函数提供给创建一个NTFS目录结,也没有界面或工具来允许用户创建。有一个WINDOWS NT DDK自带的,LINKD.EXE,可以来创建,我们希望微软将来公开更多的目录结技术。
一如往常,你可以调用GetVolumeInformation,检查FILE_SUPPORT_REPARSE_POINTS标志为来判断文件系统是否支持多分点。调用GetFileAttribute检查FILE_ATTRIBUTE_REPARSE_POINT标志位来判断某个目录或文件有多分点。调用CreateFile,打开某个文件或目录,然后调用DeviceIoControl传入FSCTL_SET_REPARSE_POINT 或是FSCTL_GET_REPARSE_POINT来设置/获取文件/文件夹的多分点数据。传入FSCTL_DELETE_REPARSE_POINT控制码来删掉多分点。顺便说一下,调用CreateFile函数打开一个目录时,不要忘了指定FILE_FLAG_BACKUP_SEMANTICS标志。
正常情况下,当你打开有多分点关联的文件时,文件系统会通知相应的文件系统过滤器,过滤器稍后会更新或修改这个打开文件的程序,应用程序可以打开文件并在CreateFile时传入FILE_FLAG_OPEN_REPARSE_POINT标志位来显式禁止多分点的修改。这就能让应用程序获取到文件/文件夹流中的原始数据。在调用CreateFile时传入FILE_FLAG_OPEN_REPARSE_POINT,你尽可以设置、获取、删掉文件的多分点数据,如果不这么做的话,文件系统过滤器会禁止你访问多分点的请求。
多分点唯一有用的地方是在和文件系统过滤器结合时,所以我们不写例子程序来演示怎么设置和获取、删除等操作了。理解多分点很有用,因为Windows NT 5.0计划附带的很多新功能(用文件系统过滤器实现的)都需要多分点。
举个例子,新的分级存储管理服务要把一个文件从用户硬盘移动到辅助存储设备,文件的存储从硬盘上移走了(簇已经被释放),但是文件条目仍然在硬盘上,**要获取多分点属性。当用户试图修改文件时,分级存储管理文件系统过滤器把文件从辅助存储设备拷贝到硬盘,移除多分点,进而允许应用程序正常的修改文件。
另一个使用多分点服务是本地结构化存储(NSS)服务,NSS文件系统过滤器在硬盘上制造出一个文件,看起来像OLE-结构化存储文件,OLE文档可能包含文字文档、电子表格、PPT演示文稿等等数据,从历史上看,OLE库把所有这些不同的嵌入式对象数据放到一个文件中。这样使得复制文件和携带一切嵌入式对象很容易。但如果你修改这些对象时,更新的对象放在文件的末尾,旧对象在文件中没有移除。旧有对象没得到移除而提高性能;如果OLE移除了这些旧对象,那就要在硬盘里重写整个文件了,浪费了时间。OLE文档文件因此远远大于自己所需要的大小,浪费了大量磁盘空间。
利用NTFS 5.0其对于数据流、多分点、NSS的支持,OLE不再浪费宝贵的磁盘集群(簇)了,不再有性能上的损失了。每一个嵌入式对象现在在文件都有驻留自己相应的数据流。更新对象意味着一个新流为新对象创建,原数据流被销毁,引起文件系统回收磁盘空间。NSS文件系统过滤器使这些操作对应用程序透明。NSS过滤器也允许NSS文件被复制到软盘,文件转化成旧文件格式,**反之亦然。
另一个使用多分点标志的服务时单实例存储服务(SIS),这个服务允许硬盘上的文件经由不同的名字但只有一次来访问。这很像文件硬链接,不同的是,每一处文件的引用都有自己的属性集。
分层存储管理,本机结构存储,单实例存储将包括在以后的文章中。
配额,指标
NTFS下的硬盘配额允许管理员来控制每个用户在一个NTFS卷上持有多大的磁盘空间,磁盘指标完全透明给用户。如果用户试图超出其指标,系统会提示磁盘已满。用户可以删除文件来回收磁盘空间,让其他用户来取得部分文件的所有权,增加用户的指标。当文件创建时,文件所有者的安全ID和文件关联起来,该文件数据流的存储占用与文件所有者相抵。
指标是基于文件的逻辑大小。这意味着一个文件正常情况是10MB,但被压缩至8MB大小,算作10MB的磁盘配额。同样,一个稀疏文件逻辑上大小是10MB,但实际上是0字节的存储也算作10MB的硬盘配额。**这个功能,设计用来允许不同的卷指标设置可以比较。
管理员可以在NTFS卷属性页的指标标签下决定如何配置配额。
缺省情况,NTFS卷第一次打开时配额追踪是禁用的,管理员可以修改,告诉NTFS 系统追踪用户的配额,而无需实际执行对用户的任何限制。这就允许了管理员监视每个用户拥有的存储是多少。这项功能开启之后,系统会浏览驱动器的所有文件然后建立一个配额信息;这项事务会占用很长时间,但需要立即去做。管理员同样可以配置NTFS来追踪每个用户存储并强制作限制。如果限制被强制了,NTFS系统可以在用户接近各自的指标时记录日志,管理员可以生成报告。属性页上的配额条目按钮会运行一个工具,这个工具允许管理员查看特定卷的用户配额使用统计。
通过调用GetVolumeInformation检查FILE_VOLUME_QUOTAS位标志来确定本文件系统是否支持磁盘配额。应用程序可以调用GetDiskFreeSpaceEx,这个函数返回的是该调用者还剩下多少未使用的字节,和整个卷下多少未使用的字节。然后你的应用程序可以决定这两个值哪个可以使用。每当有数据写入到文件的尾部,系统都会检查用户是否用尽了他自己的配额,如果是,文件写操作就失败了。
Figure 9列举了COM接口,允许应用程序和磁盘配额交互。
Interface | Description |
IDiskQuotaControl | Provides methods for controlling how NTFS tracks quotas and logs quota events. Also allows you to add and remove user SIDs to the quota database. |
IDiskQuotaEvents | You must implement this interface if you want to receive quota-related event notifications. |
IDiskQuotaUser | Allows the modification of a specific user's quota information. |
IDiskQuotaUserBatch | Allows multiple IDiskQuotaUser objects to be added to the quota database in a single call, thus improving performance. |
IEnumDiskQuotaUsers | Enumerates user quota entries on a volume. |
结语
可靠变化日志,维护了一个卷所有文件目录变化的数据库,我们强烈推荐你学习,简化你的编程。
21世纪的文件系统:概述WindowsNT 5.0文件系统(NTFS)(三)相关推荐
- neoterm如何安装python_NeoTerm官方版v2.1.0下载_NeoTerm(21世纪的终端)下载-刷机之家
详情 NeoTerm是一款安卓手机终端系统工具,非常适合手机开发者们使用的一款手机终端软件,非常实用的编程软件,让你轻松就能编程,各种自定义功能很容易就能满足你们的需求,为开发者提供软件包管理器和ap ...
- 21世纪互联网大厂需要什么样的人才?
1.大厂到底需要什么 21 世纪最需要什么,当然最需要人才,大厂也不例外.如何定义人才呢? 刷 500 道算法题就是人才?那刷 499 的算什么! 掌握面试八股文的就是人才?那掌握七股的算什么! 内推 ...
- c语言程序设计李新华,21世纪高等学校规划教材:C语言程序设计
<C语言程序设计>为21世纪高等学校规划教材.全书共分lO章,主要内容包括c程序设计概述.数据及运算.流程控制.数组.指针.函数.结构体文件.c语言实际应用.c语言程序设计常见错误及解决方 ...
- 为什么说21世纪是一场ABC的革命?
作者:刘超,毕业于上海交通大学,15年云计算领域研发及架构经验,先后在EMC,CCTV证券资讯频道,HP,华为,网易从事云计算和大数据架构工作. 来自:刘超的通俗云计算(ID:popsuper1982 ...
- 前沿研究:21世纪工程领域的重大挑战 | 中国工程院院刊
本文选自中国工程院院刊<Engineering>2020年第7期 作者:C.D. Mote Jr. 来源:Engineering in the 21st Century: The Gran ...
- 【赠书】21世纪科技竞争的核心是超级智能的控制权
这篇文章是根据<崛起的超级智能:互联网大脑如何影响科技未来>的核心观点对21世纪世界科技竞争的判断.<崛起的超级智能>受到张亚勤.刘慈欣.周鸿祎.王飞跃.约翰.翰兹等专家的联合 ...
- 21世纪最需要的的七种人才 -李开复
▌01 七种人才 在 李开复给中国学生的第七封信 中提到了在21世纪最需要的其中人才特质: 20世纪最需要的人才 21世纪最需要的人才 勤奋好学 融会贯通 专注于创新 创新与实践相结合 专才 跨领 ...
- WINCE6.0文件系统及存储管理器
*******************************LoongEmbedded******************************** 作者:LoongEmbedded 时间:201 ...
- 计算机办公实用技能项目实践教程,计算机常用办公软件应用/21世纪计算机科学与技术实践型教程...
本教材根据多年的教学经验和学生的特点,循序渐进地介绍办公软件Office2007的操作与使用方法,内容全面,文字阐述清楚,注重理论与实践操作的紧密结合. 全书分为4章,第1章介绍Word2007字处理 ...
- 2000年不算在21世纪
练习3-5 输出闰年 (15 分) 输出21世纪中截止某个年份以来的所有闰年年份.注意:闰年的判别条件是该年年份能被4整除但不能被100整除.或者能被400整除. 想当然地以为21世纪是2000~20 ...
最新文章
- 【转】ASP.NET中“字母和数字混合的验证码”详解
- 深度丨我们可以有多信任人工智能
- javascript之基本概念
- c# 检查目录,当指定目录不存在时建立目录
- oracle带输出参数存储,oracle带输入输出参数存储过程(包括sql分页功能)
- UVALive 3942 Remember the Word(字典树+DP)
- 转载Silverlight AutoCompleteBox 增强key/value 拼音头检索
- 容器编排技术 -- Kubernetes 为 Namespace 设置最小和最大内存限制
- PowerDesigner逆向工程,从数据库导出PDM(包括采坑记录)
- Linux进程间通信——使用命名管道
- Oracle体系结构一
- [HDOJ1823] Luck and Love(线段树,树套树)
- 来自Airbnb、Netflix等公司的代码评审最佳实践
- 保护计算机系统与数据有什么方法,电脑数据保护方法 看完保你不后悔
- 修改android开机动画
- 自考本科计算机要学什么,计算机自考本科需要考哪些科目
- 程序员专用的简历神器,让你制作简历更简单,方便,专业
- word 计算机内存不足,电脑office打不开显示内存不足怎么办
- 找不到服务器或dsn错误,win10系统找不到服务器或dns错误的解决步骤
- MATLAB三维画图函数使用总结
热门文章
- CGAL学习之路(三):CGAL读写点云
- 空洞(扩张dilated)卷积
- 使用教育邮箱享正版Jetbrains 套件,IDEA正版webstrom正版
- 标题栏位于图纸的什么位置_电气施工图的绘图有什么要求,一般有哪些规定?本文清楚告诉你!...
- spring整合kaptcha验证码
- pla3d打印材料密度_3D打印材料:透明PLA材料
- PyQt5 QLabel控件
- PHP + 小程序开发过程
- 小程序“头脑王者” 因违规被微信下架整改 小程序不可逾越的红线
- 【原创】2021-2000上市公司重污染企业数据、上市公司重污染行业数据(常用变量均包括,可直接用)