[通讯存档 ^][< 第 1 卷,第 3 号][第 1 卷,第 5 号>]

Systems Internals 通讯第 1 卷,第 4 号

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


1999 年 8 月 5 日 - 本期:

  1. SYSTEMS INTERNALS 新内容

    • Portmon v3.0
    • Frob v1.5
    • ListDLLs v2.1
    • 新 BOOT.INI 选项
    • PsList v1.0
    • “NT Internals”8 月刊
    • 不太新的内容
  2. INTERNALS 新闻

    • 更正 Re:系统文件保护
    • Win2K RC1 DDK 已发布
    • Win2K AWE API
    • WinDev '99 West
  3. 即将推出

    • SP4 的未记录磁盘编辑工具

赞助商: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。 Remote Recover 允许从企业中任何位置通过 TCP/IP 访问无法启动的计算机的驱动器。 通过远程更正使 NT 或 Win9x 系统离线的驱动程序、文件系统和配置问题,节省时间和支持资金。 在 http://www.sysinternals.com/rrecover.htm 下载免费的只读试用版,并在 http://www.winternals.com. 购买读/写版本


大家好,

欢迎阅读 Systems Internals 通讯第四版。 本通讯目前有 7000 名订阅者。

在上一份通讯中,我说过将会介绍 Windows 2000 (Win2K) AWE API。 我曾指出,AWE 代表“Address Windowing Extensions”(地址窗口扩展),对于 Windows 领域新手,API 代表“Application Programming Interface”(应用程序编程接口)。 Microsoft 硬件开发人员网站上的此页面将其描述如下: http://www.microsoft.com/hwdev/NTDRIVERS/AWE.htm. 但是,读者 Laxmikant Gunda 将我指向 Microsoft 网站上的另一个 URL http://www.microsoft.com/windows/server/News/fromMS/intelpae.asp,其中 AWE 被指定为“高级窗口扩展”API。 显然,在 API 的上下文中,“Address”(地址)比“Advanced”(高级)更有意义(我稍后在本次通讯中说明),因此我猜一些营销作家在使用新闻页面的原始技术材料时,被自己的眼睛欺骗了。

我以前在 Microsoft 的技术报道中也见过这种混乱。 最近,Win2K 可安装文件系统 (IFS) 工具包 Beta 3 版安装程序在其初始屏幕上自称为“内部文件系统工具包”的安装程序。 IFS 中的“I”一直代表“Installable”(可安装),而“内部”在这里没有太大意义(除非他们意外地发布了工具包的非公共版本),因此我猜这是另一种翻译出错的情况(或安装程序编码人员没有文件系统团队成员的支持,而使用他们的最佳猜测)。

我的观点是什么? 我没有什么观点, 只是觉得我们迟早会出现首字母缩略词泛滥的情况,开发人员和市场营销人员开始无意中使用相同的三字母缩写来描述不同的技术。 Microsoft IIS (Internet Information Server) 组中的人将命名一个称为 AIE (“Advanced ISAPI Extensions”- ISAPI 代表 Internet Server API)的新 API,而 MTS (Microsoft Transaction Server) 组中的人将提出另一个 AIE -“Atomic Interface Exchange”。 我相信有一天,营销人员或技术作家会收到 IIS 团队的一份技术论文,其中提到“AIE”,但他们不知道数据库和文件系统之间的区别,因此会猜测它代表“Advanced Internet Explorer”。

我在其他地方也看到过首字母缩略词混乱的情况。 Windows NT 杂志最近一篇讨论串行和并行端口的文章在其文本中使用了术语“COM 端口”。 在文案编辑最后审核并且文章发布后,短语变成了“COM (Component Object Model) 端口”。

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

谢谢!

-Mark

SYSTEMS INTERNALS 新内容

PORTMON V3.0

Portmon 3.0 版在主要方面得到了增强。 Portmon 是适用于 Windows 95/98/NT/2K 的串行和并行端口监控应用程序。 版本 3.0 引入了:

  • 高级筛选和输出突出显示功能
  • 监控远程系统上的串行和并行端口活动的功能
  • 文件日志和打印支持
  • 剪贴板集成
  • 用于指定要记录的读/写数据量的设置

在 http://www.sysinternals.com/portmon.htm. 下载 Portmon v3.0

FROB V1.5

Windows NT 4.0 Server 使管理员无法控制 NT 线程计划程序提供给线程的量子(轮次)长度。 在 Windows 4.0 Workstation 上,控制面板中的 System 小程序有一个“性能”选项卡,其中包含一个滑块,可用于指定前台线程的量子提升(该滑块也在 Server 上,但它不会执行任何操作)。 较短的量子通常会导致应用程序对用户输入的响应更快,而长量子则适用于专用于运行非交互式服务器应用程序的系统。

Systems Internals 的 Frob 程序在 Workstation 和 Server 上提供对量子长度的相同粒度控制,可让你根据系统上运行的工作负载优化量子。 但是,由于 Frob 会修改 NT 内核内部的设置,因此必须对其进行更新才能使用每个新的 Service Pack。 Frob v1.5 现已推出,并与 Service Pack 5 兼容。

可以在 http://www.sysinternals.com/ntfrob.htm. 下载 Frob v1.5

LISTDLLS V2.1

ListDLLs 是一个命令行实用工具,用于显示有关进程已加载的 DLL 的详细版本信息。 ListDLLs 从已加载 DLL 的文件路径对应的磁盘文件中提取版本信息,并使用未记录的接口获取路径名。 有时,磁盘上的 DLL 文件在应用程序已加载后更新,在这种情况下,ListDLLs 显示不正确的版本信息。

ListDLLs v2.1 可识别磁盘上 DLL 与加载的 DLL 版本之间的差异,并在其输出中标记差异。 存在差异时,ListDLLs 会输出磁盘上文件和已加载文件的链接时间。 可执行文件和 DLL 文件的链接时间位于 NT 用于打包它们的 Portable Executable (PE) 文件格式的标头中。

在 http://www.sysinternals.com/listdlls.htm. 下载 ListDLLs v2.1

新 BOOT.INI 选项

Win2K Beta 3 引入了三个新的 BOOT.INI 开关。 所有三个开关都与 Intel Physical Address Extensions (PAE) 相关,这是 Intel 与 Pentium Pro 一起引入的技术,允许 x86 系统处理高达 64GB 的物理内存。 传统上,x86 系统只能寻址 4GB 的物理内存,但使用 PAE 和 450NX 芯片集时,打破了此限制。 Win2K 是第一个利用 PAE(Sun Solaris 7 和 SCO UnixWare 7 已支持 PAE)的 Microsoft 操作系统。 实际上,有一个 Win2K 内核的特殊版本,名为 ntkrnlpa.exe,其中内置了支持。 NTLDR(Win2K 引导加载程序)负责加载标准内核、ntoskrnl.exe 或启用 PAE 的内核,具体取决于系统是否能够寻址超过 4GB 的内存并具有该容量。

所有三个新的 BOOT.INI 开关都旨在调试设计为支持大型内存系统(超过 4GB 的系统)的设备驱动程序。 第一个是 /PAE,具有 NTLDR,即使计算机的内存不超过 4GB,也会加载内核的 PAE 版本。 第二个是 /NOPAE,强制 NTLDR 加载标准内核。 最后一个是 /NOLOWMEM 开关,具有 Win2K 内核,仅使用超过 4GB 的物理内存。 这会强制 Win2K 使用的所有物理地址需要超过 32 位来表示它们,从而执行大型物理地址的设备驱动程序处理。

要查找最完整的 BOOT.INI 开关列表,请参阅 http://www.sysinternals.com/bootini.htm.

PSLIST V1.0

大多数 UNIX 都附带了名为“ps”的命令行工具,管理员可用以列出处理 CPU 和内存统计信息。 NT 具有等效的基于 GUI 的工具任务管理器,但 NT 没有命令行版本。 Windows NT 资源工具包中包括两个类似于“ps”的命令行工具,即 pstat 和 pumon。 PsList 显示 pstat 和 pumon 可用的信息的组合,但具有两个资源工具包工具都没有的功能:可以使用 PsList 查询远程系统上的进程信息。

PsList 有多个可用于查看进程 CPU、内存或线程统计信息的标志,以及一个用于指定要查询的其他 NT 计算机的开关。 PsList 使用 NT 的内置性能计数器来获取它显示的信息,并且适用于 NT 3.51、4.0 和 Win2K。

在 http://www.sysinternals.com/pslist.htm. 下载 PsList

“NT INTERNALS”8 月刊

我在 Windows NT 杂志 8 月版中的“NT Internals”栏目是“内部 Win2K 可靠性增强功能第 1 部分”。 这是三部分系列中的第一部分,介绍 Win2K 功能,旨在帮助管理员在系统变得无法启动后继续工作。 其中包括“安全模式”启动和恢复控制台。

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

不太新的内容

如果你还没有惊到一两个朋友,请查阅 Systems Internals 蓝屏屏幕保护程序。 在 Win2K 系统上运行时,版本 2.0 显示 Win2K 版蓝屏死机 (BSOD) 和 Win2K 启动序列。 我可以自豪地说,蓝屏屏幕保护程序最近获得了 Ziff-Davis' Software Library 的最高评级 - 五星。

在 http://www.sysinternals.com/bluescrn.htm. 下载蓝屏屏幕保护程序 v2.0

INTERNALS 新闻

更正 RE:系统文件保护

在上一期通讯中,我指出 Win2K 的 System File Protection (SFP) 可让 Service Pack (SP) 等应用程序和热修复通过调用名为 SfcTerminateWatcherThread 的函数 SFP 导出更新系统文件 。 虽然 SFP 会导出该函数,但 SP 和热修复在更新系统文件时不使用函数。 相反,他们能够更新系统文件,因为它们将现有系统文件替换为由 Microsoft 进行数字签名的系统文件。 SFP 会检测更新,但允许它们保留,因为 SFP 会验证新文件是否已进行数字签名。 有关 SFP 覆盖范围的另一项更正是,在 Win2K Beta 3 之后,Microsoft 将 SFP 的名称更改为 Windows File Protection (WFP)。

请确保查阅 9 月期的 Windows NT 杂志,找到我的 NT Internals 专栏“Win2K 可靠性增强第 2 部分”,其中详细介绍了 WFP 和 Microsoft 数字文件签名。

Win2K RC1 DDK 已发布

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

WIN2K AWE API

我已在本期通讯的前言中提到了 AWE API,并引用了 Microsoft 的一个网页,你可以在其中了解详细信息:http://www.microsoft.com/hwdev/NTDRIVERS/AWE.htm. 在物理内存超过 4GB 的系统上,Win2K 的 PAE 内核(ntkrnlpa.exe)无需修改应用程序即可利用所有计算机的物理内存。 Win2K Advanced Server 将占用最多 8GB 的物理内存,而 Win2K Datacenter Server 将占用最多 64GB 的物理内存。

虽然大型内存系统上的每个应用程序最多具有 2GB 的虚拟内存(如果指定 /3GB BOOT.INI 开关,则为 3GB)可供使用,但分配给所有执行的应用程序的物理内存之和可能等于物理内存量。 此外,在 Win2K 上,分配给文件系统缓存的虚拟内存最多为 960MB,但分配给缓存的缓存文件数据量可能超过 960MB。

AWE API 可让单个应用程序直接控制物理内存,超过其虚拟地址空间大小所隐含的 2GB 或 3GB 限制。 AWE API 背后的基本理念是,应用程序将其虚拟地址空间的一部分指定为物理内存的“窗口”。 然后,它分配一个物理内存块。 应用程序可以分配的物理内存量上限实质上是系统的物理内存量减去内核、设备驱动程序及其他使用 AWE API 的应用程序已分配的任何非分页内存。 当应用程序想要访问已分配的物理内存部分时,它会将内存映射到其虚拟地址窗口。 因此,应用程序可通过给定映射访问的物理内存量受其保留的窗口大小的限制。 最后,当应用程序使用物理内存时,它只需释放内存并关闭(取消分配)其创建的虚拟地址窗口。

与这些操作对应的 API 由 kernel32.dll 导出,如下所示:

  • 应用程序使用 MEM_PHYSICAL 和 MEM_RESERVE 标志调用 VirtualAlloc 来创建虚拟地址窗口
  • AllocateUserPhysicalPages 为应用程序分配物理内存
  • 应用程序使用 MapUserPhysicalPages 将部分物理内存映射到其窗口
  • FreeUserPhysicalPages 释放应用程序分配的物理内存

对于内存密集型程序,如数据库服务器、电子邮件服务器、Web 服务器、财务分析和科学应用程序,应用程序直接操作多 GB 内存的能力是一个福音。

虽然只有某些版本的 Win2K 才允许使用超过 4GB 的物理内存,但所有版本都有 AWE API。 这意味着,在具有 4GB 内存的 Win2K Professional 系统上,AWE API 仍然让内存密集型应用程序能够管理物理内存中超过 2 或 3GB 的数据。

AWE API 具有等效的内核模式接口,kernel32.dll 基于用户模式 API。 驱动程序可以使用 MmAllocatePagesForMdl(与 AllocateUserPhysicalPages 的内核模式等效)来分配物理内存。 此函数在 Win2K DDK ntddk.h 文件中有其原型,但未记录。 其原型是:

NTKERNELAPI
PMDL
MmAllocatePagesForMdl (
    IN PHYSICAL_ADDRESS LowAddress,
    IN PHYSICAL_ADDRESS HighAddress,
    IN PHYSICAL_ADDRESS SkipBytes,
    IN ULONG TotalBytes
    );

LowAddress 是它想要分配的最低可接受物理地址,而 HighAddress 是最高地址。 SkipBytes 是内核在 LowAddress 上面及其开始分配物理内存的地址下面应保持的可用字节数。 TotalBytes 是驱动程序要分配的字节数。 函数的返回值是 MDL,如果非零,则表示内核为驱动程序提供的物理内存。 要访问内存部分,驱动程序必须从返回的 MDL 创建子 MDL,用于描述物理内存的适当部分。 当驱动程序要访问子 MDL 描述的物理内存时,它必须使用 MmGetSystemAddressForMdlSafe 映射子 MDL。

驱动程序使用 MmFreePagesFromMdl(等效于 FreeUserPhysicalPages 的内核模式)来释放它使用 MmAllocatePagesForMdl 分配的物理内存。 此函数也在 ntddk.h 中有原型:

NTKERNELAPI
VOID
MmFreePagesFromMdl (
    IN PMDL MemoryDescriptorList
    );

请注意,驱动程序负责通过调用 ExFreePool 释放 MmAllocatePagesForMdl 返回的 MDL,因为 MmFreePagesFromMdl 不会释放 MDL。

WINDEV '99 WEST

面向 Windows 开发人员的 1999 West Coast 高级会议即将召开。 WinDev '99 West 于 9 月 13 日至 18 日在加州的 Santa Clara Marriot 举行。 许多 Windows 开发领域的大腕都将发言,包括 Jeff Richter、Jeff Prosise 和 Don Box。 我将与 Jamie Hanrahan 和 Brian Catlin 一起参加设备驱动程序专题会议。我的演示文稿包括一个为期一天的关于 NT 内部的教程,以及一个关于编写 Windows NT/2K 文件系统驱动程序的教程和一个关于高级设备驱动程序开发问题的教程。 欢迎大家前来参加!

请访问 http://www.butrain.bu.edu/windev/. 上的 WinDev West 网页

即将推出

NT 4.0 SP4 DISKEDIT

Windows NT 4.0 Service Pack 4 在其 CD 上附带有一个优秀的实用工具:DiskEdit,可能很多人都没注意到。 不被注意也难免,因为该工具未安装到硬盘上,也没有文档。 几乎可以肯定的是,它是 Microsoft 文件系统开发人员在内部使用的工具,是意外附带在 CD 上的。 对于错过适用于 Windows NT 的 Norton Utilities Disk Edit 类型工具或只想探索 NTFS 和 FAT 磁盘数据结构的人来说,DiskEdit 是一个宝贵的工具。 下次我将提供一些有关如何使用 DiskEdit 的说明。


感谢阅读 Systems Internals 通讯。

发布时间:1999 年 8 月 5 日,星期四,下午 7:13,发布者:ottoh

[通讯存档 ^][< 第 1 卷,第 3 号][第 1 卷,第 5 号>]