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

Systems Internals 通讯第 4 卷,第 1 号

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


2002 年 1 月 7 日 - 本期内容:

  1. 编辑

  2. SYSINTERNALS 最近更新

    • Sync v2.1
    • DiskExt v1.0
    • NTFSDOS v3.02
    • PsSuspend v1.2
    • PsLogList v2.2
    • PsInfo v1.2
    • PsExec v1.3
    • BgInfo v2.0
    • Process Explorer v5.2
    • Filemon v4.34 for Win64/Itanium
    • Filemon v1.1 for Linux
    • Sysinternals at Microsoft
  3. 内部信息

    • Inside Windows 2000,交互式 DVD
    • Inside Windows 2000/XP:研讨会
    • Windows XP 清单文件
    • X-Box 中有什么?
    • 随机 Windows XP 统计信息
    • 新改进的 Windbg
  4. 即将推出

    • 使用 BootVis 分析 Windows XP 启动过程

赞助商:WINTERNALS SOFTWARE

Sysinternals 通讯由 Winternals Software 赞助,网址为 http://www.winternals.com. Winternals Software 是 Windows NT/2K/XP 高级系统工具的领先开发者和提供商。 他们的产品包括屡获殊荣的 Administrator's Pak、RD Commander 2000 和 NTFSDOS Professional Edition。

Winternals 自豪地宣布,Defrag Commander 版本 1.32 是可用的最快、最彻底的企业级碎片整理程序。 现在,你可以通过简单的 MMC 管理单元在整个 Windows 企业中管理碎片整理计划,甚至无需在 NT 或 Windows 2000 系统上安装任何客户端软件。 只需 169 美元即可在线购买 10 个系统许可证,并提供大幅数量折扣。 有关详细信息或要免费下载和使用 30 天,请访问 http://www.winternals.com/39。

大家好,

欢迎阅读 Sysinternals 新闻稿。 该新闻稿目前有 34,000 名订阅者。 请将这篇新闻稿传递给你认为可能对该内容感兴趣的朋友。

Windows XP,Microsoft 的旗舰操作系统,在 8 月下旬准备好发布。 Windows XP 是 Windows NT 系列的最新版,始于 1993 年的 Windows NT 3.1,汇集了过去 8 年的技术演变和创新。 该操作系统在功能和特性方面绝对代表了最前沿,我和 David Solomon 在 12 月 MSDN 杂志文章“Windows XP:内核改进创建更可靠、更强大且可缩放的 OS”(http://www.msdn.microsoft.com/msdnmag/issues/01/12/XPKernel/XPKernel.asp) 中对此进行了探讨。

有着数百万个安装的 Windows NT 和 Windows 2000 系统,以及数十万或数百万的 beta 测试人员,你肯定希望 Microsoft 能够调整、优化和修复 Windows XP,让它几乎完美无瑕地运行。 毕竟,他们的广告吹捧 XP 是“几乎不会崩溃的”。 我当然从没想过会遇到问题,但我错了。

在整个 XP beta 和候选版本周期中,我一直将 Windows 2000 Professional 作为我的主要系统上的操作系统。 我从 Windows 2000 开发周期了解到,即使是候选版本,在升级到最终位后也会留下调试的残留物。 当我从 beta 程序收到版本 2600(最终版本)时,我决定是时候转移了。 XP 兼容性向导在我的 Windows 2000 系统上只发现了小问题(例如我安装的 Partition Magic 版本无法理解 XP NTFS),因此我继续了我的升级路径。

在文本模式下运行并将安装文件安装到我的硬盘后,XP 安装程序重启到了部分升级的 Windows XP 安装中,以在图形模式下完成升级。 在此模式下,你可以指定区域设置和时区设置,安装程序会执行设备检测,然后配置网络。 一切进展顺利,直到“安装设备”阶段。 当进度栏达到大约 2/3 时,安装程序报告剩余时间为 34 分钟时,安装程序停止了工作。 “XP 是有史以来最好的东西”横幅继续交替,右下角的小闪烁按钮继续旋转,但即使两个小时后,还是剩余 34 分钟的时间。

那时我开始担心了。 我花了数个小时疯狂尝试一切可能解决问题的手段,包括重新启动让安装程序重试,更新 BIOS,检查 MS 知识库(什么也没有),但没有产生任何结果。 我终于屈服了,放弃了半 Windows 2000 半 Windows XP 的安装,重新安装了 XP,花了大半天时间重新安装了我用的几十个应用程序。

我的新 XP 安装过程很顺利。 不是说我没有对莫名其妙的死机、GUI 不稳定和其他奇怪的系统行为感到失望,但至少我可以有效地工作。 我知道 beta 程序 CD 是试用版 CD,在通过 MSDN 收到它时,我必须升级到完整版本,但我以为这不会有问题。

恰好在我中止升级 120 天后(试用版超时了,并非巧合)我体验到了难以置信的似曾相识的感觉。 试用版到完整版的升级实际上就是一个完整的升级,而且(你猜对了)在剩下 34 分钟并且“正在安装设备”的进度达到 2/3 时,安装过程停止了。 再一次,我的系统陷入了设置中的虚无世界,完全无法使用。 在尝试了 120 天前尝试过的所有方法后,我决定再次全面重装。

然后我遇到了另一个问题:MSDN XP CD 不可启动,因为它同时具有 Home 和 Professional 子目录。 由于我只有一个操作系统安装(被安装程序损坏的那个),因此无法从 MSDN CD 运行 Win32 版本的安装程序,并且由于我的系统仅限 NTFS,因此无法运行 DOS 安装程序。 CD 也没有提供制作启动软盘的方法。 我记得 MSDN 订阅者下载中有一个 Windows XP Professional 的 ISO 映像,因此我下载了它(使用另一个系统)并用来刻录可启动的 CD,但这种方法被“启动文件传输管理器时出错。 请稍后重试”MSDN 网站的错误消息给挫败了。

我是如何摆脱困境的? 我用几周前备份的注册表文件替换了中止升级时的注册表文件。 在重新启动后,由于 Windows 产品激活无法验证我的许可证,我无法登录系统。但是,我可以进入安全模式,并从那里运行 MSDN CD 安装程序。 我已经差不多完成了我的应用程序的重新安装,现在可以再次高效地工作了。

发生在我身上的事情(两次)让我感到非常惊讶的是,Windows XP 安装程序没有自 Windows 95 以来 Windows 9x 安装程序中一直存在的基本安全机制。 Windows 95、98 或 Me 安装程序运行时,会将进度点记录到磁盘上。 如果安装程序意外中断,它会在中断的位置重启,如果处于“正在安装设备”阶段,则会跳过中断之前运行的最后一个驱动程序。 这样,如果安装程序挂起,你可以重启系统,安装程序会从挂起点继续。

Windows 2000 和 XP 从 Windows 9x 系列中借用了许多不错的功能,例如安全模式和系统还原。 我希望他们能从 Windows 9x 安装程序借用一些东西。

说到升级到 XP,幽默专栏作家 Dave Barry 正在考虑完成这一跨越:http://www.miami.com/herald/special/features/barry/2002/docs/jan06.htm。

谢谢!

-马克

SYSINTERNALS 最近更新

SYNC V2.1

“Sync”是一个将缓存数据刷新回磁盘的小程序,是 Unix 系统上的核心系统实用工具,几年前我为 Windows NT/2000/XP 编写了它。 Sync 允许你在弹出媒体之前确保可移动媒体在读/写上反映修改。 在开发可能会导致系统崩溃的驱动程序之前运行它,可以最大程度地减少磁盘损坏。 最近有人建议,如果 Sync 可以选择在刷新后弹出媒体,那就太好了,所以在 v2.1 中推出了该选项。

在此处下载 Sync v2.1:
http://www.sysinternals.com/ntw2k/source/misc.shtml

DISKEXT V1.0

本新闻稿中介绍的另一个与磁盘相关的工具是 DiskExt,它是一个命令行小程序,在给定卷的驱动器号的情况下,它能告知构成卷的分区的位置,多分区卷包括跨区卷、镜像卷和条带卷。 DiskExt 还会报告它所列出的分区所在的扇区的位置。

在此处下载包含完整源代码的 DiskExt v1.0:
http://www.sysinternals.com/ntw2k/source/misc.shtml#diskext

NTFSDOS V3.02

NTFSDOS 是将 Sysinternals(NTFSDOS 发布时为“Ntinternals”)引入数十万用户电脑的实用程序,它允许 DOS 读取 NTFS 驱动器。 对 Windows XP NTFS 磁盘上的结构的细微更改需要对 NTFSDOS 进行调整,以便实现 XP 兼容性。

在此处下载 NTFSDOS v3.02:
http://www.sysinternals.com/ntw2k/freeware/NTFSDOS.shtml

PSSUSPEND V1.2

你是否曾想过暂时中止网络下载、磁盘搜索或其他资源密集型应用程序,以便运行其他程序? 暂停是 Windows NT/2000/XP 中的管理工具中严重缺乏的一项进程管理功能。 PsTools 工具集的最新新增功能是 PsSuspend,一个暂停和恢复进程的实用工具。 与 PsTools 套件中的所有其他工具一样,PsSuspend 是一个命令行工具,可以直接用于本地系统或远程系统。

由于 Windows NT/2000/XP 中没有暂停进程功能(XP 中存在,但它不会通过 Win32 API 公开),因此 PsSuspend 使用 Win32 SuspendThread 和 ResumeThread API 暂停并恢复目标进程中运行的线程。

在此处下载 PsSuspend v1.2:
http://www.sysinternals.com/ntw2k/freeware/pssuspend.shtml
在此处下载整个 PsTools 包:
http://www.sysinternals.com/ntw2k/freeware/pstools.shtml

PSLOGLIST V2.2

编写 PsTools 包的工具会根据用户反馈不断改进,PsLoglist 生成的功能请求比其他任何实用程序都多。 此最新版本推出了许多增强功能,包括转储已保存事件日志文件中的记录,将单行格式分隔符从逗号更改为其他(如果事件日志文本包含逗号),转储指定日期范围内的记录,以及筛选事件类型(错误、警告或信息)。 与以前一样,PsLoglist 可以转储本地或远程系统事件日志,并具有许多其他用于控制操作的选项。

在此处下载 PsLoglist v2.2:
http://www.sysinternals.com/ntw2k/freeware/psloglist.shtml
在此处下载整个 PsTools 包:
http://www.sysinternals.com/ntw2k/freeware/pstools.shtml

PSINFO V1.2

已停用的 PsTools 实用工具是 PsUptime,它是一个小应用,用于报告本地或远程系统已启动的时间长度。 这并不是说该信息没有用处,而是更适合向 PsTools、PsInfo 的相对新手显示。 因此,PsInfo v1.2 现在会报告系统运行时间以及大量其他信息,例如 OS 版本、处理器速度、内存大小、修补程序安装、操作系统是否为试用版以及何时过期,并会在 Windows XP 上报告 Windows 产品激活状态。

在此处下载 PsInfo v1.2:
http://www.sysinternals.com/ntw2k/freeware/psinfo.shtml
在此处下载整个 PsTools 包:
http://www.sysinternals.com/ntw2k/freeware/pstools.shtml

PSEXEC V1.3

PsExec 是一个命令行实用工具,可用于在远程系统上运行程序,而无需在该系统上安装任何软件。 如果运行的程序具有命令行接口,则 PsExec 会代理它,使你能够像在本地执行程序一样以交互方式运行它。 这些功能使 PsExec 成为方便的轻型远程 shell 类型实用工具,可轻松远程启用 ipconfig 等命令行程序。

PsExec 版本 1.3 允许在远程系统上启动 Windows 应用程序(而不是命令行应用程序),使它们显示在交互式桌面上。 我不确定这在什么地方会有用,但我收到了多个有关此功能的请求。

在此处下载 PsExec v1.3:
http://www.sysinternals.com/ntw2k/freeware/psexec.shtml
在此处下载整个 PsTools 包:
http://www.sysinternals.com/ntw2k/freeware/pstools.shtml

BGINFO V2.0

如果你管理多个系统,那么你肯定知道“系统混乱”,就是你走到一台计算机前(或在 KVM 上切换到它)然后忘记了计算机的名称、OS 版本、已安装的 Service Pack 或 IP 地址的心态。 虽然可以通过各种管理接口访问所有这些信息,但获取这些信息可能很耗时。 这就是 Bryce Cogswell 的 BgInfo 发挥作用的地方:它会在桌面背景上显示最重要的系统信息,以便你立即获得所需的所有信息。

BgInfo 的最新更新使其比以往更易于配置。 可以在注册表项中定义自定义文本、指定桌面背景色或位图、在背景上查找文本等。 但是,对于大型组织来说,最有用的是 BgInfo 能够保存和加载设置,甚至能够将其导出到数据库。 使用上述任一功能,可以定义一次设置,然后在管理的所有系统上使用这些设置。

在此处下载 BgInfo v2.0:
http://www.sysinternals.com/ntw2k/freeware/bginfo.shtml

PROCESS EXPLORER V5.2

进程资源管理器是一款进程查看器和控制实用工具,可在任务管理器退出的位置继续工作。 进程资源管理器提供了广泛的功能,它能显示进程创建树、显示进程已打开的句柄、列出进程已加载的 DLL,还让你能够搜索打开特定文件的一个或多个进程。

进程资源管理器的以前版本在 Windows 9x 和 NT/2K/XP 系统上都可用,但只有在版本 5.2 中,进程资源管理器才会显示 Windows 9x 系统的进程 CPU 使用情况信息。 v5.2 的另一增强功能通过报告进程在进程属性对话框中打开的 GDI 与 USER 句柄(Win32 GUI 资源的句柄)数量,从而帮助跟踪 Windows XP 和 2000 系统上的泄漏问题。 与普遍的看法相反,即使在 Windows 2000 和 XP 上,此类资源的数量也有限:系统范围的限制为 65,536 个用户句柄,每个进程限制为 16,384 个 GDI 句柄。

在此处下载进程资源管理器 v5.2:
http://www.sysinternals.com/ntw2k/freeware/procexp.shtml

FILEMON V4.34 FOR WIN64/ITANIUM

Microsoft 从 Intel 借给我一个早期的 Itanium 盒,以便我可以开始将最受欢迎的 Sysinternals 应用程序移植到 Win64/Itanium。 该盒令人印象深刻:它有 2 个 733 MHz 处理器和 8 GB 内存。 我决定使用 Filemon 作为第一个要移植的应用程序。 Filemon 由 Win32(现在的 Win32/64)GUI 和设备驱动程序组成,因此需要两种不同的移植工作。 有些意外的是,你们使用交叉编译器在运行 Windows NT、2000 或 XP 的 32 位系统上生成 Win64 应用程序和 64 位驱动程序。

最新版本的平台 SDK(可从 Microsoft 免费下载:http://www.microsoft.com/msdownload/platformsdk/sdkupdate/))包括了包含 64 位 Itanium 编译器和链接器、Win64 头文件、Win64 库的子目录。 我制作了这个简单的批处理文件来设置环境以生成 Win64 可执行文件:

@echo off
set PATH=D:\Mssdk\Bin\win64;%PATH%
set INCLUDE=D:\Mssdk\include\win64;D:\Mssdk\include\win64\crt
set LIB=D:\Mssdk\lib\ia64
echo 64-bit environment set.

请注意,不能从 Visual Studio 生成 Win64 应用程序,必须通过命令行执行此操作。

几个小的转换问题是我在编译过程中遇到的唯一问题。 接下来,我生成了驱动程序。 最新版本的 DDK(不再作为免费下载提供)包括配置了 IA64 驱动程序生成环境的命令提示符的快捷方式。 只需在 64 位目标环境中生成驱动程序,就像生成 32 位驱动程序一样。

编译器通知我,我需要对一些强制转换更明确。 例如,Filemon 分配给操作的序列号是 ULONG,编译器不允许我将其强制转换为 PVOID 以作为上下文参数传递给 I/O 管理器函数 IoSetCompletionRoutine。 于是,我不得不先将其强制转换为 ULONG_PTR,然后再转换为 PVOID。 不管怎样,在几分钟内驱动程序的编译没有出错。

接下来,我将 64 位应用程序和驱动程序复制到 Itanium 系统,然后运行它。 Filemon GUI 显示了,然后消失了。 这意味着我必须使用 Win64 调试器来找出问题所在。 Win64 调试器也随附在平台 SDK 中,你可以从 32 位或 64 位计算机运行它。 它看起来像一个剥离的 Visual Studio 调试器,并且仅在远程模式下工作,在该模式下,你需要在运行应用程序的目标计算机上安装调试客户端部分。

在逐步执行 Filemon 的代码半小时左右之后,我终于意识到,我的 Windows 过程需要将其 lparam 参数声明为 LPARAM - 它们一直是 LONG,因为当我们在 1996 年编写 Filemon 的第一个版本时,我们从 SDK 复制了一些代码。 有趣的是,编译器没有抱怨过这一点,但这意味着作为 lparam 传递的任何指针将被截断。 这显示在了 Filemon 的 WM_MEASUREITEM 处理程序中,它将 lparam 参数解释为指向结构的指针。 Filemon 在该代码中出错。 令人惊讶的是,当我修复了该问题后,Filemon 在 Itanium 上完美无瑕地运行。 移植总计时间:1 小时。

我现在正在移植 Regmon,然后会移植 DebugView。 它们都应该具有挑战性,尤其是具有相当非正统驱动程序的 DebugView。

在 http://www.sysinternals.com/ntw2k/source/filemon.shtml 下载包含完整源的 Filemon

FILEMON V1.1 FOR LINUX

如果你在过去几个月访问过 Sysinternals,你可能会震惊地看到菜单栏上的一个新条目:Linux 实用工具。 没错,我觉得在 Linux 上运行 Filemon 会很不错。 我已经在 Windows 上使用 Borland 的 Delphi 快速应用程序开发 (RAD) 环境,所以当 Kylix 发布时(也就是 Delphi for Linux),我意识到 GUI 非常直接。

剩下的问题是如何截获文件系统活动。 大多数版本的 Unix(包括 Linux)都实现了名为 ptrace() 的系统调用,该调用允许进程截获目标进程进行的所有系统调用。 我考虑过使用 ptrace() 来监视文件系统活动,并且将来可能会修改 Filemon 来使用它,其中的原因会变得清晰,但最后决定不这么做。

使用 ptrace() 的缺点是,Filemon 必须枚举所有正在运行的进程,并针对每个进程执行 ptrace()。 此外,它还必须附加到新创建的进程,并且 ptrace() 功能不提供确保不会错过新进程执行的第一个系统调用的方法。 当被跟踪的进程执行系统调用时,操作系统会阻止它,向跟踪进程发送信号,并等待跟踪进程让进程继续。 如果想要查看所有文件系统活动,这可能会导致性能严重下降。 最后,最大的缺点是 ptrace() 会更改跟踪进程的行为。 在跟踪它们时,跟踪器是父进程,这意味着被跟踪的进程的真实父进程在子进程导致它们时看不到它们通常会看到的通知。

如果我能像 Windows NT/2000/XP 中的 I/O 管理器所支持的那样,编写一个文件系统筛选驱动程序(Linux 术语中的可堆叠驱动程序)就好了,但目前的 Linux 文件系统架构不支持可堆叠文件系统驱动程序。 你可以打一个名为 FiST 的补丁来支持它 (http://www.cs.columbia.edu/~ezk/research/fist/)),也有一个用于 Linux 的跟踪工具包 (http://www.opersys.com/LTT/index.html),但两者都要求最终用户重新编译内核,而这正是我想避免的。 因此,我决定使用系统调用挂钩驱动程序来实现监视,这与 Regmon 在 Windows 上的工作方式非常类似。

与在 Windows 上执行相同操作相比,有两个问题使项目更加困难。 首先,Linux 之父、Linux 内核开发主管 Linus Torvalds 不相信内核调试器的使用。 原因相当荒谬(请参阅 http://www.lib.uaa.alaska.edu/linux-kernel/archive/2000-Week-36/0575.htm 以阅读 Linus 自己的解释),这是 Linux 内核难以跟上 Windows 的几个原因之一。 存在几个非官方内核调试程序,但它们需要修补内核,并需要费一些力才能使用。 第二个问题是,随着新内核的发布,Linus 不相信能够保证与设备驱动程序的向后兼容性。 其后果是,任何导出的内核 API 都可能突然更改,从而中断使用该 API 的现有驱动程序,并要求为新内核重新编译这些驱动程序。

由于缺乏内置的内核调试器,我只能通过调试打印语句来进行调试(我觉得通过 printk 的内核模式打印进行调试所花的时间与安装和学习内核调试器差不多),而不断变化的内核 API 和数据结构意味着 Linux 版 Filemon 依赖于内核。 它适用于收缩包装的 Red Hat 7.1 和 7.2 以及 SuSE Linux 7.1 和 7.2,可能还可用于其他商业发行版,但我尚未设计出一种方法来使驱动程序免受任意内核更改的影响(一个破坏了早期版本的驱动程序的更改是,内核函数的调用约定从标准更改为快速调用)。

Linux 版 Filemon 具有与其 Windows 对应项完全相同的界面(查看 Linux 版 Filemon 页面的屏幕截图),它们看起来非常相似。 我对于在 Linux 上开发一个不依赖内核的通用文件系统筛选器的难度得出的结论应该是明确的:这是困难的,甚至可能是不可能实现的。 相比之下,Windows NT I/O 体系结构从一开始就支持每个驱动程序域(网络、文件系统、存储、输入等)中的可堆叠(筛选器)驱动程序。

在 http://www.sysinternals.com/linux/utilities/filemon.shtml 下载 Linux 版 Filemon

WWW.MICROSOFT.COM 上的 SYSINTERNALS

以下还是自上次新闻稿以来发布的 Microsoft 知识库 (KB) 文章中 Sysinternals 参考的最新一期。 请注意标题中甚至包含 Filemon 的那个。 从此,关于 Sysinternals 的 KB 参考文章总数达到 31 篇。 可在 http://www.sysinternals.com/ntw2k/info/mssysinternals.shtml 找到完整的列表

  • 安装过程中出现严重异常错误消息 http://support.microsoft.com/support/kb/articles/Q273/9/18.ASP

  • FP2000:数据库驱动程序的类型列表文件为空 http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q308935

  • 如何:排查错误 1928“注册 COM+ 应用程序时出错” http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q308940

  • PRB:将 #import 与 ADO 配合使用时与 EOF 冲突 http://support.microsoft.com/support/kb/articles/Q166/1/12.ASP

  • PRB:调用 CoFreeUnusedLibraries 后未卸载 DLL http://support.microsoft.com/support/kb/articles/Q301/3/57.ASP

  • PRB:错误80004005“Microsoft Jet 数据库引擎无法打开文件 '(Unknown)'”http://support.microsoft.com/support/kb/articles/Q306/2/69.ASP

  • PRB:FileMon 显示 DAO360.dll 无法加载 MSJet49.dll、MSJet48.dll 和其他 MSJetxx.dll 文件 http://support.microsoft.com/support/kb/articles/Q306/3/86.ASP

  • 短信:软件清单代理生成了无效的页错误消息 http://support.microsoft.com/support/kb/articles/Q302/6/51.ASP

内部信息

INSIDE WINDOWS 2000,交互式 DVD

如果你错过了 INSIDE Windows 2000(Windows 2000 Internals 的交互式 DVD 教程)的特别预发行定价,我们有好消息! 目前仍提供 950 美元的入门价格(比正常单用户价格便宜 25% 以上)。 要立即订购,或要了解 David Solomon 和 Mark Russinovich 的这一令人兴奋的新产品的详细信息,请转到 http://www.solsem.com/dvd.html. 还提供用于内网流式传输的网络分发格式!

记下日期:RUSSINOVICH 和 SOLOMON 再次在西雅图和波士顿一起教学

上个月在奥斯汀举行的为期 3 天的 Windows 2000/XP 内部课程取得了成功,因此我们安排了另外两个活动:西雅图附近 4 月 17 日至 19 日和波士顿 6 月 12 日至 14 日(注册即将开放)。 该课程以《Inside Windows 2000,第三版》为基础,内容包括环境子系统、系统调用分派、系统线程、启动和关闭、注册表内部、进程和线程调度、内存管理、安全性、I/O 系统、存储、NTFS 和缓存管理器等。 通过了解 Windows XP 和 2000 的内部工作原理,可以更有效地利用平台,更有效地调试和排查问题。 有关详细信息,请参阅 http://www.sysinternals.com/seminar.shtml

WINDOWS XP 清单文件

Windows XP 中最明显的变化之一是 Luna 桌面提供的新外观。 Luna 实际上是一个“主题”,如果你运行的应用程序不是主题感知的(任何不是专门为利用 Windows XP 主题而编写的应用程序),则应用程序具有较旧的 Windows 2000 样式的外观。 但是,即使没有源代码,也可以让旧版应用程序轻松获得新外观。 只需为应用程序创建一个 XML 清单文件,该文件会告知 Windows XP 加载程序,该应用程序希望使用 Common Control 版本 6 DLL(%SystemRoot%\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1 df_6.0.0.0_x-ww_1382d70a 中的 comctl32.dll),而不是 %SystemRoot%\System32 中的非主题感知版本。 下面是使进程资源管理器 v5.2 变为主题感知的清单文件:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly
xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
name="Process Explorer"
processorArchitecture="x86"
version="5.1.0.0"
type="win32"/>
<description>Process handle and DLL viewer</description> <dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="x86"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly>

更改要启用主题感知的应用程序的应用程序名称、版本和说明,然后保存文件,使其与应用程序的可执行文件同名,但在后面追加“.manifest”,例如 procexp.exe.manifest。 如果你是应用程序的开发人员,则可以将清单文件嵌入到应用程序的资源中,就像我使用进程资源管理器所做的那样。 有关如何执行此操作的示例,请参阅 Filemon 的源代码。

X-BOX 中有什么?

如果你最近关注过主机游戏的世界,那么你几乎可以肯定知道 Microsoft 的新 X-Box 主机正在运行 Windows 2000 的修改版本。 在最近一次为我们的书第四版进行的 Windows XP 研究之行中,我和 Dave Solomon 从 Windows 2000/XP 开发团队那里得知 X-Box 小组决定选择 Windows 2000 来支持其驱动程序。 做出此决定后,X-Box 开发人员获得了 Windows 2000 源树的副本并离开了,Windows 2000/XP 团队此后很少听到过他们的消息。

X-Box 具有经过高度修改的剥离版本的 Windows 2000,可以存在于 512 KB 的内存中。 它删除了所有不相关的子系统(他们最初剥离了即插即用子系统,然而在意识到驱动程序的加载依赖于它之后又将其重新添加了回来),只运行一个进程,并且没有 Win32 子系统(只有 X-Box API)。 X-Box 只有 64 MB 的物理内存,没有虚拟内存支持,因此 Windows 2000 内存和缓存管理器是被删除的两个子系统。 进行如此剧烈的修改后,你必须将其视为一个新的操作系统,而不是 Windows 2000。

有关 X-Box、GameCube 和 PS2 内部的详细信息,请参阅 http://www.e-insite.net/ednmag/index.asp?layout=article&articleid=CA185947&pubdate=12-20-01

随机 WINDOWS XP 统计信息

以下统计数据由 Microsoft 在其 OEM System Builder 网站上发布(网址是 http://oem.microsoft.com - 你可以免费注册),我认为你会发现其中有一些有趣和/或有意思的东西。

顺便说一下,Windows XP 最终版本的内部版本号并没有巧合地落在 2600,而是做了一点手脚(版本号每次在版本实验室中编译操作系统时都会递增,通常每个工作日一次)。 内部消息人士说,这个数字是针对 2600 社区的,一个松散的黑客群体(http://www.2600.com/),作为表明 XP 团队对 XP 安全性的信心的讯息)。

  • 开发 Windows XP 花费的天数:600 (99/12/20–01/8/24)
  • 重点团队成员数:5,736
  • 每个开发人员的测试人员数:1.4
  • 项目期间出生的婴儿数:452
  • 雇用的实习生人数:504
  • 在 40 个“Windows 信息会议”期间消耗的通心粉数量:6,000 磅
  • 提供的星冰乐®数量:86,400
  • 为西雅图的 Ronald McDonald House(当地慈善机构)筹集的美元:200 万美元
  • 系统还原功能的测试用例数:160 万
  • 自 Windows XP RC1 以来运行的 Direct3D 图形测试用例数:43,114,143
  • 测试了兼容性的应用程序数:5,500
  • 现成支持的设备数:12,000
  • 在过去三年中发布的最流行的 PC 应用程序中,与 Windows XP 兼容的程序所占百分比:90%
  • 最大数字媒体库测试用例中的曲目数量:31,000
  • Windows 影音制作捕获的单个最长文件的长度(小时):114
  • 我们要本地化的语言数量:24 个完全本地化,9 个部分本地化
  • 参加 10 月 25 日发布的国家数量:超过 50 个
  • 参加全球发布活动的人数:超过 580,000 个席位... 加上全球 5,120 名系统构建者

新改进的 WINDBG

Windbg 是内置于 Windows NT/2000/XP 内核中的内核调试支持的图形前端。 在过去几年里,Windbg 一直以笨拙和繁琐而著称,但自从 Microsoft 对其进行了重点改进后,这种情况已经发生了改变。 最新版本的 Windbg 可在 http://www.microsoft.com/ddk/Debugging/ 免费下载,它相比旧版本有了很大的改进,更易于使用。 有了一些新功能,即使是有经验的 Windbg 用户也可能不知道,还有两个命令可用于系统管理员用来诊断系统崩溃。

使最新的 Windbg 非常易于使用的一项功能是它支持 Microsoft 的符号服务器。 使用 Windbg 查看故障转储或调试应用程序的一个问题是,需要安装与你的安装相对应的正确调试符号文件。 有了 Service Pack、修补程序以及可能来自不同操作系统的崩溃(例如 Windows NT 与 Windows XP),这可能就比较麻烦了。 借助符号服务器支持,只需在 Windbg 符号路径对话框中输入 Microsoft 符号服务器的 URL,Windbg 就会按需从服务器下载符号并将其存储在指定的目录中。 符号服务器具有适用于 Windows .NET Server Beta 3、Windows XP 和 XP 候选版本、Windows 2000 及其 Service Pack 和修补程序、Windows NT 4、MDAC 2.1-2.7、IIS、ISA 的符号。

用于调试故障转储的两个命令是 !analyze 和 .dump。 运行 !analyze(指定 -v 开关)以获取启发式的故障自动分析。 此命令已经非常强大,随着 Microsoft 从实际崩溃中纳入更多历史数据,它将变得更加准确。

命令 .dump 可用于用户模式调试和内核模式故障转储分析。 在某些服务器环境中,尤其是 Web 服务器,你可能会发现内存泄漏或其他问题,但在原因被隔离之前,你不愿意停止并重启服务器。 在 Windows XP 和 .NET 服务器上,可以使用 Windbg 附加到服务器进程,运行 .dump 命令以生成用户内存故障转储文件,然后(使用命令 .detach)进行拆离,这样只需短暂地暂停服务器。 然后,开发人员可以获取生成的转储文件并对其进行离线分析。

默认情况下,Windows 服务器系统会生成一个全内存转储,它的大小与系统上存在的物理内存一样大,因此可能非常大。 但是,可以将转储加载到 Windbg 中,并使用 .dump 命令从完整转储生成较小的内核内存或小型转储。 较小的文件更易于交换,并且它们通常是隔离崩溃原因所需的全部文件。

从 http://www.microsoft.com/ddk/Debugging/ 下载最新版本的 Windbg,并在 http://www.microsoft.com/ddk/debugging/symbols.asp 找到有关配置 Windbg 以从 Microsoft 符号服务器获取符号的说明

即将推出

使用 BOOTVIS 分析 WINDOWS XP 启动过程

为了帮助他们优化 Windows XP 启动过程,Windows XP 性能团队检测了操作系统中的关键点,并开发了一个名为 BootVis 的工具来显示启动跟踪。 令人惊讶的是,他们免费提供该工具。 它易于使用,可显示大量详细信息,包括有关驱动程序初始化的时间、磁盘 I/O 发生时间和位置以及服务和应用程序何时启动的信息。 下一次,我将向你展示可在何处获取它以及如何使用它。


感谢阅读 Sysinternals 新闻稿。

发布于 2002 年 1 月 7 日,星期一,晚上 7:01,ottoh

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