[新闻稿存档 ^] [< 第 1 卷第 4 号] [第 2 卷第 1 号 >]

Systems Internals 通讯第 1 卷,第 5 号

http://www.sysinternals.com
版权所有 1999 Mark Russinovich


1999 年 10 月 12 日 - 本期内容:

  1. SYSTEMS INTERNALS 新内容

    • NTFS for Windows 98/NTFSDOS Professional
    • DebugView v3.21
    • Filemon 和 Regmon v4.21
    • Diskmon v1.1
    • www.microsoft.com 的系统内部
    • 10 月“NT 内部”
    • 不太新的内容
  2. INTERNALS 新闻

    • Win2K RC2 DDK 已发布
    • 新的 Win2K RC Kernel API
    • 软件开发 '99 东部
    • 使用 DiskEdit
  3. 即将推出

    • Win2K API 爆炸

赞助商:WINTERNALS SOFTWARE

Systems Internals 通讯由 Winternals Software 赞助,网址为 http://www.winternals.com. Winternals Software 是 Windows NT/2K 高级系统工具的领先开发者和提供商。 Winternals Software 产品包括适用于 Windows NT 4.0 的 FAT32、ERD Commander(Windows NT 的启动磁盘功能)以及 NTRecover。

Winternals Software 的 Remote Recover 允许从企业中任何位置通过 TCP/IP 访问无法启动的计算机的驱动器。 通过远程更正使 NT 或 Win9x 系统离线的驱动程序、文件系统和配置问题,节省时间和支持资金。 甚至可以使用远程恢复执行远程 chkdsk 或分区操作,这使它成为一种通用的灾难恢复工具。 在 http://www.sysinternals.com/rrecover.htm 下载免费的只读试用版,并在 http://www.winternals.com. 购买读/写版本

大家好,

欢迎查看系统内部新闻稿。 新闻稿目前有 10000 名订阅者。

Windows 2000 (Win2K) 的发布似乎遵循着一种模式,先是迫在眉睫,然后又一拖再拖。 最新的传言是,它将在 2 月份推出。 关于 Win2K 发货日期的唯一信息是传言,因为 Microsoft 甚至没有告知 OEM 或合作伙伴何时发货。 他们说:“它会在准备好后发出” (我就不强行把那句关于卖酒的老话套在这里了) 。

Microsoft 令人恼火的地方在于,他们对自己产品的新闻报道总是让人觉得他们的产品即将上市,即使这些产品还只是空头支票。 最近的一个例子是千禧年版,它是 Windows 98 的后继者。 不久前,Microsoft 在媒体上大肆宣传它,好像它是一个成品,可以把你所有的家用电器都变成智能设备。 具有讽刺意味的是,不久之后的一篇文章透露,Microsoft 甚至还没有完全确定该产品的定义,可能要一年或更长时间才能在商店货架上看到它。

这种模式并不新鲜,我也不是第一个写它的人。 但这并不妨碍我猜测,这种摇摆不定有多少是精心策划的,又有多少是完全缺乏软件工程原则的结果。 如果你相信前一种观点,就像阴谋论者那样,Mircrosoft 通过引诱顾客购买令人难以置信的产品来巧妙地扼杀竞争。只要他们再等待片刻,就能得到一个让他们的等待变得有价值,并且不需要转向非 Microsoft 产品的绝佳产品。 后一种观点认为,Microsoft 永远不会学习软件开发过程,并且持续低估工程努力,高估测试代码的质量。

至于我赞同哪种理论,我还在犹豫中。 实际上,我认为这种模式是两者兼而有之的结果。 这有助于 Microsoft 将 Active Directory 视为两年前就已准备就绪。 当然,如果有些客户事先知道他们需要等待 Win2K 多久的话,他们早就会转向 Novell 目录服务了。 另一方面,Microsoft 曾因承诺交付产品却一拖再拖而屡遭媒体指责。 我认为,Microsoft 的管理层根本不理解复制、隔离和修复最后 5% 的错误有多么困难。

说到 Microsoft 的开发实践,他们的预发布命名方案是我见过的最令人费解的命名方案之一。 他们的 Beta 版本实际上是 Alpha 版本,而他们的发布候选版实际上是 Beta 版本。 即使使用这些定义也是牵强附会:Microsoft 在从一个候选发布版本到下一个候选发布版本的过程中,从其软件中删减功能,甚至添加新功能都没有问题。 他们在 NT 4.0 上这样做,现在又在 Win2K 上这样做。 这种做法当然不会加快发布周期。

那么 Win2K 会在 2 月发货吗? 我认为我们正在看到隧道尽头的光亮。 毕竟,在 RC2 中只有少数几个新的 API…

在上期通讯中,我谈到了 Microsoft 的缩写混乱问题,读者 George Janczuk 发现了另一个例子。 在标题为“扩展到主机事务处理世界”的部分中,http://msdn.microsoft.com/library/backgrnd/html/msdn_windnapps.htm 的文章提到了 CISC - 复杂指令集计算。 对于熟悉大型机应用程序的人来说,很明显,预期的首字母缩略词是 CICS - 客户信息控制系统。 如果字母顺序颠倒,就会进入完全不同的技术领域。

像往常一样,请将通讯发给你认为可能对其感兴趣的朋友。

谢谢!

-Mark

SYSTEMS INTERNALS 新内容

NTFS FOR WINDOWS 98/NTFSDOS PROFESSIONAL

我们终于做到了。 自从 Bryce 和我在 1996 年春季发布 NTFSDOS 1.0 以来,我们一直在寻找 Windows 文件系统兼容性的圣杯:从 Windows 9x 和 DOS 访问 NTFS 的读/写权限。 我们很久以前就认定,对 NTFS 格式进行逆向工程并为这一复杂的日志文件系统编写驱动程序将是一项艰巨而冒险的任务。 即使精确地确定了格式的每一个细微差别,格式的更新(如 Win2K 的 NTFS v5.0)也需要全新的逆向工程和开发工作。 此外,对于 NTFS 这样复杂的格式,验证文件系统驱动程序的正确性是一项艰巨的任务。

所以我们抄近路了。

NTFS for Windows 98 提供从 Windows 95 或 Windows 98 对 NTFS 硬盘的完全读/写访问,而 NTFSDOS Professional 则提供从 DOS 对 NTFS 的完全读/写访问。 NTFS for Windows 98 和 NTFSDOS Professional 都不了解 NTFS 文件系统格式。 相反,他们依赖于 Windows NT 或 Windows 2000 安装的 NTFS 驱动程序来实现该知识。 这两个实用工具使用相同的基本代码,用作 NTFS 文件系统驱动程序的环境包装器。 NTFS for Windows 98 提供一个接口,该接口指向高于 NTFS 的 Windows 9x 文件系统 API,以及低于 NTFS 的 Windows 9x 磁盘服务。 适用于 Windows 98 的接口 NTFS 看起来类似于 NTFS 的本机 Windows NT/2K 环境,其中包含 IRP、I/O 管理器、缓存管理器、NT 样式磁盘设备以及 NTFS 与之交互的其他 NT/2K 子系统。

NTFSDOS Professional 的工作方式与 Windows 98 的 NTFS 相同,只是它将 NTFS 与上面的 DOS 服务和下面的 BIOS 中断 13 磁盘服务连接起来。 为了帮助创建类似于 NT/2K 的环境,我们依赖于 NTOSKRNL(NT/2K 内核文件)中的许多函数。 这两个实用工具都与 NTFS 一起加载 NTOSKRNL,以便 NTFS 可以直接使用内核的本机服务。

我们在构建 NTFS 环境的过程中获得了很多乐趣,于是我们更进一步:使用 NT 的启动时 chkdsk 实用程序 Autochk 做了同样的事情。 NTFSDOS Professional 和 NTFS for Windows 98 附带名为 NTFSCHK 的 NTFS chkdsk 实用工具。 NTFSCHK 在与 NTFS 文件系统包装器相同的主体上运行,其中它为 Autochk 程序创建类似于 NT 的环境,以便 Autochk 在 Windows 95/98 和 DOS 下运行。 这样做的结果是,Windows 95/98 和 DOS 完全支持 NTFS 读/写。

你可以在 http://www.sysinternals.com/ntfs98.htm 下载 Windows 98 NTFS 的免费只读版本,也可以在 http://www.sysinternalscom/ntfspro.htm. 下载 NTFSDOS Professional 的免费只读版本 可以在 Winternals Software 购买这两种工具的完整读/写版本,http://www.winternals.com.

DEBUGVIEW V3.21

DebugView 是一种调试输出监视器,可捕获 Windows 95、Windows 98、NT 4.0 和 Windows 2000 下的内核和 Win32 调试输出。 它具有高级筛选、突出显示和日志记录功能,甚至可以跨网络捕获来自系统的调试输出。 其最新版本 3.21 引入了在 Windows 95 和 Windows 98 下监视 16 位 OutputDebugString 输出的功能。

可以在 http://www.sysinternals.com/dbgview.htm. 下载 DebugView v3.21

FILEMON 和 REGMON V4.21

Filemon 和 Regmon 是适用于 Windows 95、98、NT 4.0 和 Win2K 的文件系统和注册表间谍实用程序。 随着 4.21 版的发布(Filemon 和 Regmon 的版本号是同步的),它们还引入了更先进的过滤功能,包括最近过滤列表、定义高亮过滤器(甚至可以自定义颜色)、自定义字体、剪贴板支持以及更多兼容 CUI 的热键。 驱动程序源代码也进行了修改,并在 GUI 接口函数中包含更可靠的参数验证。

在 http://www.sysinternals.com/filemon.htm 下载 Filemon v4.21,在 http://www.sysinternals.com/regmon.htm. 下载 Regmon v4.21

DISKMON V1.1

Diskmon 是一款监控和显示逻辑和物理磁盘活动的工具。 版本 1.1 更新了 Diskmon,使其与 Windows 2000 兼容,并引入了新的易用性增强功能。 此外,Diskmon 现在可解释大量磁盘和大容量存储 I/O 控制代码,将其十六进制代码转换为 Diskmon 输出窗口中的文本表示形式。

Diskmon v1.1 不仅可以充当磁盘监视器,还可以将其用作基于软件的磁盘灯。 将其设置为磁盘浅色模式时,Diskmon 会将自身最小化到系统托盘中,当有磁盘读取访问权限时为绿色,当有磁盘写入访问权限时为红色。

在 http://www.sysinternals.com/diskmon.htm. 下载 Diskmon v1.1

WWW.MICROSOFT.COM 的系统内部

考虑到 Systems Internals(前身为 NT Internals)的历史,Microsoft 将 sysinternals.com 作为其客户资源参考,确实是一种极大的褒奖。 越来越多的 Microsoft 知识库文章指向系统内部实用工具。 以下是最新内容:

  • Q183060 信息:80004005 和其他错误消息的故障排除指南 http://support.microsoft.com/support/kb/articles/Q183/0/60.ASP
    本文介绍如何使用 Filemon 检查 OLE DB、ActiveX 数据对象和远程数据服务中的数据访问错误的原因。

  • Q196453 - 排查 NTVDM 和 WOW 启动错误 http://support.microsoft.com/support/kb/articles/Q196/4/53.ASP
    本文还介绍了作为一种工具, Filemon 可用于确定哪些缺少的文件导致 NTVDM (NTVDM) 的 Win16/DOS 兼容性环境出现启动错误。

  • Q216368 - PRB:使用文件时应用程序设置期间访问冲突 http://support.microsoft.com/support/kb/articles/Q216/3/68.ASP
    HandleEx 和 DLLView 是建议的工具,用于确定在执行 Visual Basic 安装向导和部署向导生成的安装程序期间出现错误的原因。

  • Q232830 - 操作方法:确定文件句柄所有权 http://support.microsoft.com/support/kb/articles/Q232/8/30.ASP
    在这篇文章中,HandleEx 再次被引用,它讨论了查找打开文件或目录的进程。

10 月“NT INTERNALS”

我在 Windows NT 杂志 10 月版中的“NT Internals”栏目是“内部 Win2K 可靠性增强功能第 3 部分”。 本系列教程由三部分组成,其中第三个部分介绍了两个强大的 Win2K 功能,这些功能可帮助开发人员和管理员查明有缺陷的驱动程序:受写保护的内核内存和驱动程序验证程序。

俄罗斯读者现在可以用母语阅读我的文章了。 转到 http://www.osp.ru/win2000/ 的 Windows NT Magazine 俄语版,查看第一个翻译的 NT Internals 专栏,走进启动过程(http://www.osp.ru/win2000/1999/10/59.htm). 感谢 Ivan Rouzanov 告诉我这件事。

从 8 月初开始,只有订阅者才能访问 Windows NT Magazine文章的在线版本,并且文章会随每一期在线发布。 如果尚未订阅,请通过 http://www.sysinternals.com/publ.htm 上的订阅链接获取 Systems Internals 订阅折扣。

不太新的内容

WinObj 是用于探索 Windows NT/2K 对象命名空间的强大工具。 Object 命名空间是 NT/2K 中的三个命名空间之一:Object 命名空间、注册表命名空间和文件系统命名空间。 可以通过对象命名空间中的对象访问注册表和文件系统命名空间。 例如,当 Win32 程序打开注册表键 HKEY_LOCAL_MACHINE\Software\Microsoft 时,ADVAPI32.DLL 库会在调用内核服务 NtCreateKey 之前将名称转换为 \Registry\Machine\Software\Microsoft。 如果查看 WinObj 中 Object 命名空间的根,你将看到名为 Registry 的“key”类型的对象。 注册表名称与项名称的第一个组件匹配,因此 NT/2K 对象管理器会将名称 \Machine\Software\Microsoft 的其余部分传递给定义密钥对象的子系统。 Configuration Manager 内核子系统维护注册表和密钥对象,因此它会分析名称的其余部分以查找所需的密钥。

可以使用 WinObj 浏览对象命名空间并查看或设置对象安全属性。 在 http://www.sysinternals.com/winobj.htm. 下载 Winobj 我在 1997 年 10 月 NT Internals 专栏“走进对象管理器”中讨论了对象管理器命名空间和 WinObj。 点击该列的在线版本链接,而其网址为 http://www.sysinternals.com/publ.htm.

INTERNALS 新闻

WIN2K RC2 DDK 已发布

现可在 http://www.microsoft.com/ddk/ddkRC2.htm. 下载 Microsoft 设备驱动程序开发工具包 (DDK) 的 Win2K RC2 版本 可以免费下载工具包,或在线浏览文档。

新的 Win2K RC2 Kernel API

在最新的 Win2K 内核中,情况似乎正在稳定。 RC3 中只有四个新的导出内核 API,而从 Beta 3 到 RC1 则出现了十几个(另外还有半打消失了)。 其中有几个新函数比较有趣,所以我决定为大家记录下来。 第一个是 MmGetSystemRoutineAddress,虽然没有文档说明,但其原型已包含在 RC2 DDK 的 ntddk.h 头文件中:

NTKERNELAPI
PVOID
MmGetSystemRoutineAddress (
    IN PUNICODE_STRING SystemRoutineName
    );

它的使用与看起来一样简单。 传入驻留在 NTOSKRNL.EXE 或 HAL.DLL 中的函数的名称,你将返回其入口点地址。 此函数在 Win2K 的第一个版本中实际上毫无用处,但在之后可能会变得非常有用,而且 Microsoft 应该在 NT (3.1) 的第一个版本中就包含此函数。 与 Win32 应用程序的用户空间中的 GetProcAddress 一样,此函数允许驱动程序动态确定 API 的可用性。 如果 Microsoft 在 Win2K 服务包中添加了新的 API(我相信他们一定会这样做),可以编写驱动程序来利用这些 API,但也可以在旧版本的 Win2K 上优雅地失效,或以不使用 API 的模式运行。 驱动程序能够执行此操作的关键,是能够检查加载后是否存在 API。 如果没有此功能,驱动程序必须与它使用的函数进行静态链接,如果驱动程序加载时函数不存在,则内核加载程序会向用户报告一个难看的错误,并且无法加载驱动程序。

第二个新 API 是 MmGetPhysicalMemoryPages。 同样,其原型位于 RC2 ntddk.h 中,但没有文档记录。 其原型是:

NTKERNELAPI
PPHYSICAL_MEMORY_RANGE
MmGetPhysicalMemoryRanges (
    VOID
    );

其中,PHYSICAL_MEMORY_RANGE 为:

typedef struct _PHYSICAL_MEMORY_RANGE {
    PHYSICAL_ADDRESS BaseAddress;
    LARGE_INTEGER NumberOfBytes;
} PHYSICAL_MEMORY_RANGE, *PPHYSICAL_MEMORY_RANGE;

此函数返回 PHYSICAL_MEMORY_RANGE 条目数组,该条目对 BaseAddressNumberOfBytes 都具有 0。 与 MmGetSystemRoutineAddress 一样,它是一个非常简单的 API。 它将返回 Win2K 知道的所有物理内存的说明。 Win2K 支持使用 MmAddPhysicalMemoryMmRemovePhysicalMemory API 动态添加和删除内存。 因此,才有了能让你查询内存范围的应用程序接口。 在 RC1 中添加了MmAddPhysicalMemory,在 RC2 中添加了 MmRemovePhysicalMemory。 这两个函数在 ntddk.h 中也有原型。

还有哪些其他新的 RC2 API? PoShutdownBugCheckRtlInvertRangeListPoShutdownBugCheck 使系统崩溃并执行与电源相关的操作,例如挂起。 RC2 内核在几个位置使用它。 范围是由用户定义的通用起点-终点规范,并由一系列内核应用程序接口提供支持,用于对其进行管理、排序和迭代。 Win2K 即插即用资源仲裁器使用它们来跟踪和组织硬件资源需求。 尽管 range-list API 没有文档说明,但 ntddk.h 中包含了它们的所有原型和结构定义,因此可以使用该 API 管理自己的面向起点和终点的数据。

敬请期待后续新闻稿,了解更多无文档记录 API 的乐趣。

软件开发 99 东部

1999 年东海岸软件开发展将于 11 月 8 日至 12 日在华盛顿特区举行。 我将在最后一天发表三个演讲:面向开发人员的 Windows 2000 新特性》、《Windows NT/2000 蓝屏内幕》和《Windows NT/2000 网络内幕》。 此外,Dave Solomon 是《Inside Windows NT 2nd Edition》的作者,也是我的邻居(他住在康涅狄格州丹伯里,离我只有 20 分钟车程),我们将共同主持一场关于 Windows NT/2K 内部机制的圆桌讨论。 我们将一起回答有关 Windows NT/2K 内部的最棘手问题。 跟我打声招呼,并提及新闻通讯,我将免费赠送你一件 Systems Internals T 恤!

访问软件开发网站 http://www.sdexpo.com.

使用 DISKEDIT

你可能不知道,Windows NT 上有一种磁盘编辑器实用程序,其风格与 DOS 上著名的 Norton Disk Edit 如出一辙。 更重要的是,该实用工具理解 FAT 和 NTFS,并且是免费的。 显然,Microsoft 在 Windows NT 4.0 Service Pack 4 光盘中意外地装入了 DiskEdit,这个工具肯定是其文件系统团队的内部调试工具。 DiskEdit 有一个独特的界面,需要一本小手册才能记录下来,但我将通过一个简单的演示开始。 我将重点介绍如何使用 DiskEdit 来解读 NTFS 文件系统格式,因为据我所知,DiskEdit 是唯一能理解 NTFS 的公开工具。

首先,需要从 Service Pack 4 (SP4) CD-ROM 获取 DiskEdit。 只需将其从 \i386 目录复制到硬盘即可。 如果要在 Win2K 下使用 DiskEdit,则需要为其创建专用目录,并将以下 DLL 从 SP4 winnt\system32 目录(或 SP4 CD)复制到 DiskEdit 所在的目录:IFSUTIL.DLL、ULIB.DLL、UNTFS.DLL 和 UFAT.DLL。 现在可以启动 DiskEdit。

在本演练中,在 NTFS 驱动器根目录下创建一个名为 TEMP 的目录,并在该目录下创建一个名为 OUT.TXT 的文件,方法是在命令提示符窗口中键入以下命令,并将 TEMP 作为当前目录:echo hello > out.txt。 在 DiskEdit 中选择“文件|打开”菜单项,并在对话框的“卷名”字段中输入驱动器的盘符,从而选择带有新 OUT.TXT 文件的驱动器。 请确保包含冒号,例如“d:”。 几乎 DiskEdit 的所有功能都需要你打开驱动器。

我们将从 NTFS 驱动器的根目录开始查找 OUT.TXT 文件。 选择菜单项“读取|NTFS 文件记录”,打开一个对话框,只需输入编号即可查看任何 MFT 记录条目。 每个 NTFS 驱动器的前 16 个 MFT 记录条目是保留的,对应于预定义的 NTFS 元数据文件。 下面是数字分配(请注意,DiskEdit 将所有输入解释为十六进制):

        0: $MFT - MFT
        1: $MFTMirr - MFT Mirror (a copy of the first 4 entries of the MFT)
        2: $LogFile - NTFS LogFile
        3: $Volume - volume information file
        4: $AttrDef - the attribute definition file
        5: . - the root directory
        6: $Bitmap - the volume allocation bitmap file
        7: $Boot - the boot sector
        8: $BadClus - the bad cluster database file
        9: $Secure - new to SP4, the security attribute database
        A: $UpCase - the lower-to-upper case mapping file
        B: $Extend - new to Win2K, the directory that contains
                             the reparse, object ID, and quota metadata files
        C-F: Unused as of NTFS v5.0 (Win2K)

继续查看其中一些 MFT 条目。 你将开始注意到一个共同的主题:它们都包含 $INDEX_ROOT$FILE_NAME$DATA 等属性。 它位于存储特定于文件的数据的属性中。 当属性数据较小时,NTFS 会将文件的 MFT 记录中的数据存储为“驻留”数据,当数据较大时,NTFS 会将磁盘上的群集中的记录外部数据存储为“非驻留”数据。

现在输入“5”作为文件编号,你将查看根目录的文件。 我们将通过查看目录的 $INDEX_ALLOCATION 属性(特定于记录目录内容的目录的属性)来查看根目录中的文件和目录。 为此,请选择“读取|NTFS 属性”菜单项,打开另一个对话框。 DiskEdit 区分大小写,因此请准确输入以下内容,正如我列出的一样:

        Base Frs Number: 5

基本 Frs(基本文件记录段)是 MFT 编号的另一个名称。 输入到 5 以指定要从根目录读取属性。

        Attribute Type: $INDEX_ALLOCATION

这向 DiskEdit 指示你想要读取目录的内容数据。 我建议使用下拉菜单来选择所需的属性,因为 DiskEdit 对属性类型的输入方式非常挑剔。

        Attribute Name: $I30

如果查看 $INDEX_ALLOCATION 根目录的属性,你将看到“$I30”在其“Type code, name”行中作为其名称列出,这就是你输入的属性名称。

按“确定”,将看到属性内容的十六进制转储。 我们希望看到更易理解的内容,因此请选择“视图|NTFS 索引缓冲区”菜单项。 你将看到目录内容的列表。 滚动浏览列表,直到看到名称为“TEMP”的条目。 如果看不到它,则条目可能位于根目录的 $INDEX_ROOT 属性中,该属性类型也与目录相关联,并且始终将其值存储在 MFT 记录中。 索引根条目和分配条目共同构成存储目录的所有条目的 B+ 树结构。 如果必须查看 $INDEX_ROOT 属性,只需按照查看 $INDEX_ALLOCATION 属性时相同的步骤查看该属性。 在索引缓冲区中滚动时,可能会出现双行星号:它们指定一个索引缓冲区的末尾和下一个索引缓冲区的开头。

找到 TEMP 目录的条目后,请记下其文件引用 (FRS) 。 选择“读取|NTFS 文件记录”并输入 TEMP 的 FRS。 现在,你将看到 TEMP 目录的 MFT 记录。 我们想要查找 OUT.TXT 文件,因此必须浏览 TEMP 的内容才能找到它。 查看 TEMP 目录的 $INDEX_ALLOCATION (或 $INDEX_ROOT) 属性,切换到以 NTFS 索引缓冲区的形式查看数据,并找到 OUT.TXT 文件。 请记住,在属性选择对话框中输入 TEMP 的 FRS 作为基本 FRS 编号。 如果刚刚创建了 TEMP,则只有一个 $INDEX_ROOT(如果键入错误的内容,你将很高兴能看到 diskEdit 的空错误对话框)。

找到 OUT.TXT 并确定其 FRS 时,请使用 Read|NTFS 文件记录,用于查看其 MFT 条目。 向下滚动,直到找到 $DATA 属性。 你现在正在查看 OUT.TXT 数据的位置。 由于我们制作了一个小文件,因此数据存储在 MFT 记录中。 如果尝试使用 DiskEdit 查看OUT.TXT $DATA 的属性,则看不到任何内容,因为 DiskEdit 无法正确显示驻留数据(DiskEdit 的众多 bug 之一)。 因此,请将一个较大的(> 2KB)文本文件复制 \TEMP\ OUT.TXT。 现在,可以通过两种方式之一查看 OUT.TXT 数据:使用 读取|NTFS 群集并指定在 OUT.TXT 的 $DATA 属性 "Extent List中看到的第一个 "lcn "值,从而查看数据的起始部分(如果数据连续存储在磁盘上,则查看全部数据);或者使用读取|NTFS 属性,并输入 "$DATA" 作为属性类型,不输入内容(即不要在该字段中输入任何内容)作为属性名称。

盘区列表描述属性的非驻留数据的位置。 长度最多为 16 个群集的每个连续数据块由一个盘区列表条目描述。 盘区列表条目指定虚拟群集编号 (vcn) 、逻辑群集编号 (lcn) 和运行长度。 Vcn 是文件中条目所描述数据的起始位置的群集。 Lcn 指定数据存储在磁盘上的逻辑群集,runlength 是该位置的属性数据的字节数,(请记住,DiskEdit 显示十六进制值)。

我通过演示如何扫描目录内容,引导你完成查找 OUT.TXT 文件的 MFT 记录的漫长方法。 但是,有一个快捷方式:选择“破解|NTFS 路径”并输入 TEMP\OUT.TXT。 你将看到 OUT.TXT的 FRS,你可以使用 读取|NTFS 文件记录直接转到它。

至此,DiskEdit 入门介绍就结束了。 我鼓励你使用这个巧妙的工具来浏览你的 FAT 或 NTFS 驱动器。 极有可能你永远都不会找到使用 DiskEdit 来修改数据以解决磁盘问题的场合,但如果你对 NTFS 磁盘格式(FAT 格式已经有详细文档)感兴趣,这是一个完美的工具,帮助你进行调查。

即将推出

WIN2K API 爆炸

虽然只有 4 个新的导出内核模式 API 在 RC2 中首次亮相,但自 NT 4.0 以来,Microsoft 在内核和核心 Win32 动态链接库中引入的 API 总数已经激增。 下个月,我会告诉你有多少个新的 API 以及它们出现在哪里,不幸的是,同时也会给那些认为 Win2K 是一个臃肿怪物的人提供了一些极好的证据,来支持他们在 alt.advocacy.linux Usenet 上发表对抗言论。


感谢阅读 Systems Internals 通讯。

由 ottoh 于 1999 年 10 月 20 日星期三下午 7:10 发布

[新闻稿存档 ^] [< 第 1 卷第 4 号] [第 2 卷第 1 号 >]