[新闻稿存档 ^] [< 第 2 卷第 1 号] [第 2 卷第 3 号 >]
Systems Internals 通讯第 2 卷,第 2 号
http://www.sysinternals.com
版权所有 (C) 2000 Mark Russinovich
2000 年 3 月 27 日 - 本期内容:
编辑
- Mark 与 David Solomon 合著《走进 Windows 2000,第三版》
SYSINTERNALS 的新增功能
- PsKill v1.03、PsList v1.12
- Junction v1.0
- ElogList v1.0
- NTFrob v1.6a
- GetSid v1.1
- HandleEx v2.23
- Regmon v4.24、Filemon v4.28
- AutoRuns v1.0
- NT 4. ACL 编辑器
- SysInternals T 恤
- 更多 SysInternals 尽在 microsoft.com
- 3 月/4 月 Internals 专栏
- 不太新的内容
INTERNALS 信息
- 重分析点
- 内核句柄表
- 一个或多个驱动程序无法启动
- Microsoft NT-Related 专利
即将推出
- TdiMon
赞助商: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 的高级启动磁盘功能)以及 Remote Recover。
Winternals Software 的 NTFSDOS Professional 和 NTFS for Win98 提供对 DOS、Windows 95 和 Windows 98 中 NTFS 驱动器的完全读写访问权限。 NTFSDOS Pro 为 Windows NT/2K 带来了单软盘“启动磁盘”功能。 使用 NTFSDOS Pro,可以通过 DOS 启动软盘删除 NTFS 驱动器上的错误驱动程序、刷新文件并执行一般的文件系统维护。 NTFS for Win98 提供对 Windows 95 和 Windows 98 中的 NTFS 驱动器的透明访问。 在双启动环境中,NTFS 驱动器上的 NT 和 Win9x 之间可轻松共享应用程序和文件。 这两个实用程序甚至都具有内置的 NTFS Chkdsk 功能。 NTFSDOS Pro 的免费只读版本在 http://www.sysinternals.com/ntfspro.htm 上提供,NTFS for Win98 的免费只读版本位于 http://www.sysinternals.com/ntfs98.htm.
大家好,
欢迎查看 Systems Internals 新闻稿。 该新闻稿目前有 20,000 名订阅者。 在过去的两个月里,该名单增长迅猛,新增订阅者超过 6000 人! 请继续将新闻稿推荐给你的朋友。
我很高兴地宣布,我将与 Dave Solomon 共同创作《走进Windows 2000,第 3 版》 (http://www.solsem.com). 如果你对 Windows NT 内部感兴趣,那么你大概肯定已经读了 Dave 的《走进 Windows NT ,第 2 版》(Microsoft Press)。 Windows 2000 的发布对 NT 内核和周围的组件带来了许多更改,有些是大更改,有些是小的,这些更改意味着 Dave 的书需要修订。
从许多意义上说,Dave 和我在过去三年里一直在独立开发“内部 Windows 2000”,因为我们一直跟上 Microsoft 在从 NT 5.0 Beta 1 到 Windows 2000 内部版本 2195 的演变过程中对 Windows 2000 引入的更改。 实际上,我编写自己的“Windows NT Internals”书已将有一段时间了,但当有机会与戴夫合作编写如此高质量的一本书的后续版本,并帮助撰写 Microsoft 关于 Windows 2000 内部的官方观点时,我不能错过这个机会。
我们是最近才决定共同撰写这本书的,所以过去几个月我们一直在合并我们的研究、笔记和文章。 由于完全不相关的原因,我们碰巧住在康涅狄格州的一个偏僻角落,相距仅二十分钟车程。 我们的距离很近,因此可以轮流到对方家里工作,最近我们经常在深夜研究和讨论 Windows 2000 内部运作的晦涩细节。 你可以在 http://www.sysinternals.com/inspic.jpg. 看到 Dave 和我在他家工作的照片
我们合作的一个不同寻常之处在于,Dave 拥有对 Windows 2000 源代码的完全访问权限,而我没有(除了设备驱动程序工具包和可安装文件系统工具包中公开提供的源代码外,我从未访问过任何 Windows 源代码)。 Dave 通过查看源代码文件来找出问题所在,而我则分析我的定制反汇编器生成的列表,并使用 NuMega 的 SoftICE 内核模式调试器在实时系统上探索 Windows 2000 的内核。 因此,我们每个人都带来了独特的视角,并不止一次地共同运用我们各自的资源来回答棘手的问题。
我们不仅更新了原始书籍以反映 Windows 2000 的更改,我们还添加了超过 30% 的全新内容,包括几个新章节。 我们将在新书中介绍的主题包括启动、关机、崩溃、存储管理、服务内部、注册表内部和 WMI。 此修订版甚至附带了一张 CD-ROM,其中包含 SysInternals 网站的快照,以及我专门为这本书编写的六种工具。 其中一个工具 LiveKd 使你可以在实时系统上运行 i386kd 内核调试器,这样就可以轻松地探索内核内部,而无需使用串行电缆和多台计算机。 毫无疑问,这本书为其前作已经坚实的基础增添了重要的技术信息和洞察力。
该书何时上市? Dave 和我将于 4 月 4 日那周前往雷德蒙德,听取 Windows 2000 内核开发人员的最终技术审查意见,Microsoft Press 称本书将于 7 月上架。 当然,我会在新闻稿中随时向大家通报进展。
谢谢!
-Mark
SYSTEMS INTERNALS 新内容
PSKILL V1.03, PSLIST V1.12
PsList 是一个实用工具,可用于查看有关本地或远程系统的活动进程的详细信息,PsKill 允许终止本地或远程系统上的进程。 这些实用工具具有类似的命令行语法,可在其中以“\\computer
”格式指定可选计算机名称。 如果包含具有计算机名称的用户名,则这些工具允许你使用与运行工具的帐户不同的用户帐户登录到指定的计算机。 这些最新版本提供了另一种输入密码的方式,当你在其他人面前运行这些程序时,就不会暴露密码。 现在,如果你将计算机帐户作为选项,但省略了密码,它们会提示你输入密码,并且不会将你的输入回显到屏幕。
在 http://www.sysinternals.com/pskill.htm. 处下载 PsKill v1.03
在 http://www.sysinternals.com/pslist.htm. 处下载 PsList v1.12
JUNCTION V1.0
符号链接终于以 Windows 2000 NTFS 交接的形式出现在 Windows 中。 交接点是目录符号链接,Windows 2000 资源工具包包含一个链接的工具,可用于创建和删除交接点。 遗憾的是,基本 Windows 2000 安装不包括任何用于创建交接点的工具,并且平台 SDK 文档没有充分记录重解析点。 这些缺陷促使我开发了 Junction 工具,它不仅可以创建交接点,还可以查询文件,并显示文件的重载点信息(如果文件有重载点的话)。 为了帮助想要实现自己的重载点工具的开发人员,我已将完整的源代码发布到了 Junction。 有关交接点以及 Windows 2000 如何实现它们的详细信息,请参阅新闻稿后面的有关重解析点的部分。
若要下载包含完整源代码的 Junction v1.0,请访问 http://www.sysinternals.com/misc.htm.
ELOGLIST V1.0
Windows 2000 资源工具包中包含一个名为 ELogDump 的工具,可用于从本地或远程计算机上的事件日志转储记录。 ELogList 是 ElogDmp 的克隆版,它还允许你指定可选的帐户名和密码,以便你可以从与运行该工具的帐户不同的帐户访问计算机的事件日志。 ElogList 可用于从批处理文件转储事件日志,或将事件日志记录捕获到文本文件中,这些文本文件可以导入电子表格进行记录保存或分析。
在 http://www.sysinternals.com/eloglist.htm. 处下载 ElogList v1.0
NTFROB V1.6A
NTFrob 是一个小程序,与系统控制面板小程序的性能选项卡相比,它能让你对 Windows NT 调度器分配给线程的前台和后台数量(回合)进行更多控制。 使用较短的量子可以提高交互式应用程序的响应能力,而较长的量子更适用于长时间运行的服务器工作负载。 NTFrob 通过最新版本 1.6a 继续跟上新 Service Pack 的步伐。 版本 1.6a 适用于所有通过 Service Pack 6a 发布的 NT 4.0 版本,但 Service Pack 6 除外(Microsoft 在其发布后不久就因一个重大 bug 而撤回了 Service Pack 6)。 适用于 Win2K 的 NTFrob 版本即将推出。
在 http://www.sysinternals.com/ntfrob.htm. 处下载 NTFrob v1.6a
GETSID V1.1
如果你正在管理一种可以通过克隆减轻推出负担的环境,那么你可能会对 GetSid 感兴趣。 GetSid 与同名的 Windows NT 资源工具包工具类似,但 SysInternals GetSid 使你不仅能够获取用户帐户的 SID,还可用于计算机。 由于 GetSid 无需安装任何客户端软件即可跨网络工作,因此可以轻松使用 GetSid 来验证网络上的计算机是否不会出现克隆附带的重复 SID 问题。
在 http://www.sysinternals.com/misc.htm. 处下载 GetSid v1.1
若要了解重复的 SID 问题,请参阅 http://www.sysinternals.com/newsid.htm.
REGMON V4.24、FILEMON V4.28
除了显示执行文件或注册表活动的进程的名称外,这些对 Regmon 和 Filemon 的更新还显示进程标识符。 此增强功能有助于区分具有相同名称的多个进程之间的文件和注册表访问。
这些版本中提供的另一个增强功能使你能够从远程 Win2K 终端服务会话(而不是控制台) 运行 Regmon 和 Filemon。 应用程序可实现此支持,因为它们的 GUI 检查操作系统版本号,如果在 Win2K 上运行,请在打开驱动程序组件的设备对象时,将“\\.\Global\
”前缀指定为调用 CreateFile 时使用的名称。 在终端服务环境中,设备驱动程序分配给其对象的名称会存储在全局(控制台)命名空间中,而默认情况下,该命名空间在远程会话中不可见。 每个远程会话都有一个本地命名空间。 “全局”前缀向 Win2K 对象管理器指示对象管理器应在全局命名空间中执行名称查找,而不是执行查找发起的会话的命名空间。
在 http://www.sysinternals.com/regmon.htm. 处下载 Regmon v4.24
在 http://www.sysinternals.com/filemon.htm. 处下载 Filemon v4.28
AUTORUNS V1.0
如果你有典型的配置,则每次启动系统并登录到各种组件(如资源管理器)时,都会查找不明显的注册表项和文件夹,并自动运行其中引用的程序。 David Solomon 在他的“走进 Windows 2000”研讨会 (http://www.solsem.com)) 中提供了自动运行文件指定的所有位置的列表,Bryce Cogswell 已获取该列表并编写了 AutoRuns,这是一个允许你查看其内容的程序。 你很有可能会对那些在你不知情的情况下运行的隐藏程序感到惊讶。
在 http://www.sysinternals.com/misc.htm. 处下载 AutoRuns v1.0
HANDLEEX V2.23
最新版本的 HandleEx 增加了许多新的用户界面可用性增强功能,例如在其上下视图之间按 Ctrl 键。 但更重要的是,HandleEx 现在与 Win2K 安全编辑器对话框界面集成,显示进程已打开的内存映射文件,并显示打开句柄的已授予访问掩码。
将 HandleEx 切换到其基于句柄的视图时,它会显示进程通过句柄打开的文件。 在 DLL 视图 HandleEx 中,将进程作为模块加载的文件显示,并且添加了内存映射文件支持,HandleEx 会列出进程通过 Win32 内存映射文件 API 映射的文件。 由于 WinNT 和 Win2K 不允许删除进程已映射的文件,HandleEx 的内存映射文件支持可帮助你确定由于未完成的映射而阻止删除文件的进程。
在 http://www.sysinternals.com/handleex.htm. 处下载 HandleEx v2.23
NT 4 ACL 编辑器
谈到安全编辑器,Microsoft 在最新版本的平台 SDK 中记录了新的 Win2K 安全编辑器对话框 API。 但是,NT 4 编辑器的 API 始终是没有文档记录的,它们仍保持原样。 NT 4 编辑器是在资源管理器中编辑 Regedt32 中的注册表项权限和 NTFS 文件权限时使用的编辑器。
在为我们的 WinObj 工具添加对象安全编辑功能时,我确定了 NT 4 安全编辑器接口,并使用相同的接口为 HandleEx 添加了安全编辑功能。 我最终决定发布我的文档,以便你可以将本机安全编辑器功能添加到自己的应用程序的 NT 4 版本。
在 http://www.sysinternals.com/acledit.htm. 处获取 NT 4 ACL 编辑器文档
在 http://www.sysinternals.com/winobj.htm. 处下载 WinObj
SYSINTERNALS T 恤
如果你喜欢从 SysInternals 获得的技术信息和实用工具,请穿着 SysInternals T 恤向全世界展示。 T 恤是 100% 纯棉的 Hanes Beef-T,正反面都印有醒目的颜色,售价仅为 14.95 美元。 此外,每次销售的 5 美元都将捐赠给美国癌症协会。
在 http://www.sysinternals.com/tshirt.htm. 处查看和订购 SysInternals T 恤
MORE SYSINTERNALS AT WWW.MICROSOFT.COM
我很自豪地说,引用 SysInternals 工具的 Microsoft 知识库文章数量在不断增长。 这是我追踪到的最近添加的清单。
Q243583 PRB:Mib.bin 导致 Visual Studio 安装程序失败 http://support.microsoft.com/support/kb/articles/Q243/5/83.ASP
本文建议使用 Filemon 来跟踪 Visual Studio 安装错误。Q242131 操作方法:显示已打开文件的进程列表 http://support.microsoft.com/support/kb/articles/Q242/1/31.ASP
Microsoft 将用户指向 HandleEx 作为一个实用工具,用于显示哪些文件进程已打开。Q232060 操作指南:MDAC 设置故障排除指南 http://support.microsoft.com/support/kb/articles/q232/0/60.asp
DLLView 和 HandleEx 在本文中受到关注,该文章指导用户使用这些工具来定位具有Microsoft Data Access Component DLL 的进程,以便用户在重新安装 MDAC 之前终止它们。Q245068 ERRMSG:拒绝访问。 你没有权限或文件正在使用 http://support.microsoft.com/support/kb/articles/q245/0/68.asp?lng=eng&sa=allkb
NtHandle 在本文中再次获取引用,本文介绍了在删除文件时出错时,如何确定哪个进程正在使用该文件。Q247957 示例:使用 DUPS.EXE 解决 DLL 兼容性问题 http://support.microsoft.com/support/kb/articles/q247/9/57.asp
本文引用 ListDLLs、DllView 和 HandleEx 作为工具,可用于跟踪 DLL 版本问题。
SysInternals 不仅出现在所有这些新的知识库文章中,上一篇知识库文章中介绍的 DUPS 实用程序的作者 Rick Anderson 还在他的 MSDN 新闻文章《DLL 地狱的终结》中提到了 ListDLLs。 可在此处 Microsoft 在线查看该文章:http://www.msdn.microsoft.com/isapi/msdnlib.idc?theURL=/library/techart/DLLdanger1.htm. ListDLLs 因此受到关注,促使我将其移植到 Windows 9x,因此 2.21 版可在 Windows 9x、Windows NT 和 Windows 2000 上运行。
在 http://www.sysinternals.com/listdlls.htm. 处下载 ListDLLs v2.21
3 月/4 月 Internals 专栏
有关 Windows NT 和 Windows 2000 存储管理由两部分构成的“内部”专栏,请查看 Windows 2000 杂志的 3 月和 4 月刊。 在本系列的第 1 部分中,我将介绍 NT 4 磁盘分区、高级卷配置、驱动器号分配和设备驱动程序存储体系结构。
第 2 部分 我会介绍 Win2K 中存在的存储更改,包括新的存储管理设备驱动程序、动态磁盘分区、对不需要重启的高级卷的支持以重新配置,以及 Win2K 的驱动器号分配机制。
INTERNALS 信息
重解析点
出于某种原因,人们总是对文件系统技巧感到兴奋,而 Windows 2000 包括几个新的技巧。 在 Windows 2000 之前,所有 Microsoft 文件系统都缺少 UNIX 用户熟悉的功能:符号链接。 使用符号链接可以创建引用文件系统命名空间中其他位置的另一个文件或目录的文件或目录。 当应用程序访问链接时,它实际上会访问链接的目标。 例如,如果链接 C:\drivers
引用目录 C:\winnt\system32\drivers
,则对文件名 C:\drivers\ntfs.sys
的引用将解析为 C:\winnt\system32\drivers\ntfs.sys
。
Windows 2000 附带的 NTFS 版本 5 支持称为重解析点的机制。 重解析点是与文件或目录关联的数据块,其中包含由负责管理具有该标记的重解析点的驱动程序定义的“标记”和信息。 Microsoft 定义了多个内置标记,包括交接点和挂载点标记。 当 NTFS 在查找文件名时遇到重解析点时,它会中止查找并将代码返回 STATUS_REPARSE
给其调用方。 文件系统过滤驱动程序和 I/O 管理器会监视与其标签相关的重解析代码,并通过几种方式之一做出反应。 分层存储管理 (HSM) 重解析点表示 HSM 子系统已移动到远程存储 (例如磁带)、远程存储筛选器驱动程序 (RsFilter.sys) 的文件,例如,以透明方式将文件的数据从远程存储中拉取、删除重解析点,并允许文件查找重试。
筛选器驱动程序还可以更改正在打开的文件的名称。 挂载点标记表示卷挂载点,并允许从其名称空间内将卷连接在一起。 因此,可以在 C:
驱动器的 \projects
目录中挂载包含项目文档的卷。 这样做可以组织文件系统数据,并使你能够避免使用 DOS 样式的驱动器号。
交接点类似于挂载点,但不是将目录链接到卷,而是将目录链接到其他目录。 它们是 NTFS 的符号链接支持。 此时,你可能想知道为什么 Microsoft 不包含基于文件的符号链接。 答案是符号链接会对现有 Win32 应用程序造成严重破坏。
虽然在使用真正具有符号链接的文件时,有许多典型的应用程序行为会导致意外结果,但删除具有无链接感知程序的符号链接就是一个简单的示例。 考虑一个文件存储在多个符号链接引用的中心位置。 删除其中一个链接的用户可能只打算删除链接,而不是文件本身。 但是,如果程序不知道符号链接,它不会检测到文件是否确实是链接,并提示你提供所需的行为。 当应用程序创建与它们通过链接引用的文件相关的文件时,问题变得更加严重,应该将相关文件存储在链接目标所在的目录,还是符号链接所在的目录中?
Microsoft 面临着一个棘手的问题,我相信,即使你能找到解决我提到的问题的办法,还有一些执行更复杂文件操作的应用程序也会被破解。 因此,我认为不太可能在 Windows 中看到基于文件的符号链接。
内核句柄表
Win2K 对象管理器引入了一种新型的句柄表,可提高某些类型的设备驱动程序的性能。 某些驱动程序需要在用户进程的安全上下文中运行时打开系统对象的句柄。 设备驱动程序可以在打开对象时绕过安全检查,因此它们必须采取措施防止在无特权进程的句柄表中创建敏感对象的句柄时产生的安全漏洞。 避免安全问题的 NT 4 驱动程序必须将工作项排队到在系统进程上下文中运行的工作线程,或使用 KeAttachProcess
API 切换到系统进程的句柄表和地址空间。 这两种替代方法都可能会降低性能,尤其是在驱动程序必须频繁执行它们的情况下。
Win2K 的此问题解决方案采用新标志的形式,驱动程序在打开对象并获取句柄时可以传入 OBJECT_ATTRIBUTES
结构。 DDK 中没有记录该标志,但在 NTDEF.H 头文件中将其定义为 OBJ_KERNEL_HANDLE
。 当对象管理器打开指定对象并创建句柄以返回到调用方时,它会检查此标志是否存在。 如果存在,它将在名为“ObpKernelHandleTable”的句柄表中创建句柄,而不是当前正在执行的进程的句柄表。 对象管理器返回给请求内核句柄的调用方句柄具有其高位集,因此所有内核句柄的值都大于 0x80000000。
每当向对象管理器传递句柄时,例如,在对 ObReferenceObjectByHandle
的调用中,它必须将句柄转换为指向句柄基础对象的指针,它会检查句柄引用是否为内核模式引用以及句柄的高位是否已设置。 对于与这些条件匹配的引用,对象管理器在内核句柄表中查找句柄,而不是当前正在执行的进程的句柄表。 因此,引用安全对象的内核句柄的驱动程序可避免性能下降并导致安全漏洞。
一个或多个驱动程序无法启动
下面是一条关于 Windows NT/2K 的趣味小知识。 当你在启动过程中看到一个对话框提示“一个或多个驱动程序启动失败”时,是服务控制管理器 (SCM) 在进行判断并显示对话框。
SCM 如何知道驱动程序无法启动? SCM 在初始化时扫描 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services
注册表项,查找具有指定启动或系统启动驱动程序的 Start 值的设备驱动程序。 当它找到一个条目时,它会打开对象管理器命名空间,并查看设备驱动程序的名称是否存在于 \Drivers 目录中。 设备驱动程序成功启动时,I/O 管理器将其驱动程序对象置于 \Drivers
目录中,因此当 SCM 找不到名称时,它会假定驱动程序未成功启动。 可以使用 WinObj 查看 \Drivers
目录的内容。
在 http://www.sysinternals.com/winobj.htm. 处下载 WinObj
MICROSOFT NT 相关专利
软件专利最近引起了很多关注。 美国专利商标局似乎正在为最明显的“创新”授予专利,而公司也正在利用宽松的专利政策锁定关键技术,供其独家使用。 Microsoft 对专利游戏并不陌生,但许多人不知道的是,Microsoft 对其在 Windows NT 中开发的几个关键创意拥有专利权。 以下是我在 IBM 专利服务器网站上发现的与内核相关的专利清单:
“通过不同队列线程处理完成信息并检查可运行线程是否完成,执行可运行线程请求的异步文件操作的系统”
http://www.patents.ibm.com/details?pn=US05758184__此专利涵盖了高级 NT 同步机制(称为完成端口)背后的基本理念。 完成端口允许进程有效地等待多个不同对象的 I/O,并使用 Windows NT/2000 计划程序中的支持,以允许与完成端口关联的线程有效地利用多处理器。
有关完成端口的详细信息,请参阅 http://www.sysinternals.com/comport.htm.
“基于对象的计算机操作系统中的客户端进程的服务器模拟”
http://www.patents.ibm.com/details?&pn10=US05187790模拟是 Windows NT/2000 安全模型的一项强大功能,它允许服务器线程在服务器代表客户端执行活动时临时采用客户端线程的安全上下文。 这允许服务器在访问客户端的受保护对象时轻松利用 Windows NT/2000 安全模型。 这是一种巧妙的分布式安全方法(如果不是一种显而易见的方法的话),Microsoft 拥有它的专利。
“基于对象的计算机操作系统中的可等待对象创建系统和方法”
http://www.patents.ibm.com/details?&pn10=US05057996“创建具有不同对象指针以访问一组数据结构对象的系统的条件对象”
http://www.patents.ibm.com/details?&pn10=US05129083“基于对象的计算机操作系统中的对象容器传输系统和方法”
http://www.patents.ibm.com/details?&pn10=US05129084“基于对象的计算机操作系统中的临时对象处理系统和方法”
http://www.patents.ibm.com/details?&pn10=US05136712“基于对象的计算机操作系统中的对象传输系统和方法”
http://www.patents.ibm.com/details?&pn10=US05297283Windows NT/2000 对象管理器实现的命名空间与 UNIX 实现上存在的虚拟文件系统 (VFS) 命名空间不同。 Microsoft 在对象管理器上获得的一些专利看起来确实类似于面向对象的设计的专利,有些专利看起来是重叠的。 然而,我不是专利律师,所以这可能只是我的无知观点。
如果你查看这些专利,你会发现几个核心 Windows NT 内核开发人员(包括 David Cutler)的名字。 有趣的是,其中一些专利是 NT 开发人员在开发 VMS 时为马萨诸塞州梅纳德的 Digital Equipment Corp 获得的,但专利申请过程耗时太长,以至于专利中将他们列为华盛顿州雷德蒙德的居民。
即将推出
TDIMON
你是否曾想过实时查看 TCP 和 UDP 网络活动,并知道到底是哪些进程在执行这些活动? 请继续关注 TdiMon,它是 SysInternals 监视工具包的一个强大补充。
感谢阅读 Systems Internals 新闻稿。
由 ottoh 发布于 2000 年 3 月 27 日,星期一,下午 7:09