[新闻稿存档 ^] [< 第 2 卷第 3 号] [第 2 卷第 5 号 >]
Systems Internals 通讯第 2 卷,第 4 号
www.sysinternals.com
版权所有 (C) 2000 Mark Russinovich
2000 年 8 月 30 日 - 本期:
编辑
SYSINTERNALS 最近更新
- ListDlls v2.23
- HandleEx v2.26
- ElogList v2.02
- LoggedOn v1.1
- Bluescreen v2.21
- PageDefrag v2.01
- LoadOrder v1.1
- ClockRes v1.0
- BgInfo v1.0
- 在 Windows 2000 中,第 3 版
- Microsoft 的 Sysinternals
INTERNALS 信息
- 调试权限的强大功能
- Win2K SP1 中的新 API?
- WinDev 2000 West
即将推出
- Tokenmon
联合赞助商:WINTERNALS SOFTWARE
Sysinternals 通讯由 Winternals Software 赞助,网址为 www.winternals.com。 Winternals Software 是 Windows NT/2K 高级系统工具的领先开发者和提供商。 Winternals Software 产品包括用于 Windows NT 4.0 的 FAT32、NTFSDOS Professional Edition(用于 DOS 的读/写 NTFS 驱动程序)和 Remote Recover。
Winternals Software 的 ERD Commander 2000 是其屡获殊荣的 ERD Commander 产品系列中的最新版本。 ERD Commander 2000 的新功能(包括内置的注册表和文件编辑器)使其成为了目前最先进的 Windows NT 和 Windows 2000 恢复工具。 可以在软盘、CD-ROM 甚至系统硬盘上安装 ERD Commander 2000,以便快速访问,其安装向导使添加第三方 SCSI 和其他大容量存储驱动程序变得轻而易举。 新用户购买 ERD Commander 2000 需 349 美元,现有 ERD Commander Professional 用户仅 49 美元。 在 www.winternals.com/products/erdcommander2000.shtml 了解更多信息并下载试用版。
联合赞助商:WINDOWS 2000 杂志
Windows 2000 杂志包含适用于日常使用 Windows NT/2000 的用户的实用解决方案。 立即订购免费样本期刊,没有任何风险。 如果你决定继续订阅,将以报刊亭价格的 40% 再收到 13 期。 立即订阅:http://www.win2000mag.com/sub.cfm?code=fs00inhs13
大家好,
欢迎订阅 Sysinternals 通讯。 本通讯目前有 25,000 名订阅者。
我花了很多时间在 Regmon、Filemon 和 DebugView 上,这些是 Bryce 和我在 Sysinternals 开发的工具。 Regmon 是注册表访问监控程序 (www.sysinternals.com/regmon.htm),Filemon 是文件访问监控程序 (www.sysinternals.com/filemon.htm),DebugView 是调试输出监控程序 (www.sysinternals.com/dbgview.htm)。 有时,我会遇到安装在多个系统之一上的应用程序或设备驱动程序,这些系统会生成在其中一个工具中可见的连续活动。 我不是在谈论必要的活动,但软件执行的操作通常是重复的,对输出跟踪的研究表明,软件使用轮询技术,其中可以使用另一些侵入性较小的机制。
例如,各种商业病毒扫描程序每秒多次查询其病毒特征文件,以查看其是否已更新。 我的一个系统具有来自一家大型打印机制造商的打印机驱动程序,它不断输出调试语句,通过包含“轮询”一词来宣传他们正在进行轮询。 在我最喜欢的一个例子中,一家大型实用工具供应商宣传一个实用工具可以提高系统性能,它每秒多次查询供应商的注册表项。 另一种草率编码的例子是来自一家主要网络供应商的网络适配器,该适配器包括一个用户模式软件组件,其中包含在软件执行时不断跳闸的嵌入式调试断点。 如果应用程序需要检测对文件的更改,它可以请求目录更改通知。 同样,如果需要检测注册表项的更改,它可以请求注册表项更改通知,并且商业软件永远不应该包含默认启用的调试输出或调试断点。
不过,也许最令人震惊的示例是与 Windows 2000 Server (\Winnt\System32\Windows Media\Server\Npsm.exe
) 捆绑在一起的 Microsoft Windows Media Program Service:它在没有活动(包括没有媒体服务)的系统上以每秒大约 60 次的速率读取 \Winnt\System32\Windows Media\Server\ASDB\mdsas.mdb
的前2KB。 这是没有借口的,特别是因为这会对服务器的整体性能产生负面影响。
我相信,即使你使用 Regmon、Filemon 或 DebugView 的时间不长,也可能遇到类似的例子。 如有看到,不要只是设置了一个筛选器就将其抛于脑后,然后给供应商发电子邮件抱怨他们编程草率。
请将本通讯转给你认为可能对其内容感兴趣的朋友。
谢谢!
-马克
SYSINTERNALS 最近更新
LISTDLLS V2.23
ListDLLs 是一个命令行实用工具,用于显示有关进程已加载的 DLL 的详细信息。 例如,ListDLLs 显示每个 DLL 的基内存地址、大小、版本和完整路径。 此新版本显示用于启动进程的命令行,包括在命令行上传递的任何参数。 这可以帮助你区分多个进程,并解决与特定命令行选项相关的问题。
在 www.sysinternals.com/listdlls.htm 下载 ListDLLs v2.23。
HANDLEEX V2.26
HandleEx 是一个应用程序,它提供有关哪些句柄和 DLL 进程已打开或加载的信息。 其显示由两个子窗口组成。 顶部始终显示当前活动进程的列表,包括其所属帐户的名称,而底部窗口中显示的信息取决于 HandleEx 所处的模式:如果 HandleEx 处于句柄模式,你将看到顶部窗口中选择的进程已打开的句柄;如果处于 DLL 模式,则会看到进程已加载的 DLL 和内存映射文件。
最新版本的 HandleEx 包括多项新功能。 首先,与 ListDLLs 一样,它现在显示用于在查看进程属性时启动进程的命令行。
在这个版本之前,HandleEx 的一个缺点是,尽管它显示了执行系统进程和登录会话进程的帐户的名称,但无法绕过 Windows NT/2000 安全模型来显示从其他用户帐户启动的进程的所有者(Windows NT-2000 资源工具包中的 Pview 程序也受到此限制)。 这在 NT 4 Terminal Server 和 Windows 2000 终端服务环境中非常明显,HandleEx 表示从其他用户会话启动的进程拥有未知所有者。 HandleEx v2.26 实现了一个技巧,它可以毫无例外地确定所有进程的所有者帐户,使其成为终端服务环境的理想工具。
HandleEx v2.26 的最后一项新功能允许强制关闭任何打开的句柄。 我在收到许多请求后添加了此功能。 但我建议你使用它时要格外小心,因为编写应用程序时通常不会预料到句柄可能会突然失效,而强制关闭句柄的应用程序可能会出现不稳定的行为或崩溃。
在 www.sysinternals.com/handleex.htm 下载 HandleEx v2.26。
ELOGLIST V2.02
Windows 2000 资源工具包中包含一个名为 ELogDmp 的工具,可用于从本地或远程计算机上的事件日志转储记录。 ELogList 比 ElogDmp 更强大,因为它还允许你指定可选的帐户名和密码,以便你可以从与运行该工具的帐户不同的帐户访问计算机的事件日志。 此外,尽管 ElogDmp 工具以原始形式显示事件日志条目,使输出难以解释,但此 ElogList 更新将事件日志条目格式化为在 Windows NT/2000 事件查看器中显示的文本。 即使显示来自远程系统的事件日志,ElogList 也会使用远程系统上正确的消息文件来格式化字符串数据。
在 www.sysinternals.com/eloglist.htm 下载 ElogList v2.02。
LOGGEDON V1.1
LoggedOn 是一个命令行小程序,用于告知谁登录了特定计算机(本地或通过资源共享)。 版本 1.1 更新可让你在网络中搜索与特定用户关联的登录会话。 如果要对用户帐户执行更新,并且需要验证用户当前是否未登录,此功能非常有用。
在 www.sysinternals.com/misc.htm 下载具有完整源代码的 LoggedOn v1.1。
BLUESCREEN V2.21
毫无疑问,大多数人现在都熟悉著名的 Sysinternals 蓝屏屏幕保护程序,它准确地描述了 Windows NT 或 Windows 2000 崩溃和重新启动的情况。 自从它首次发布以来,我不断收到 Windows 9x 用户的请求,他们希望在自己的电脑上运行屏幕保护程序,所以我最终将它移植到了 Windows 9x 上。 在 Windows 9x 上,它模拟 Windows 2000 崩溃和重启。
在 Windows 9x 上使用 Sysintenals 蓝屏屏幕保护程序的唯一要求是获取要放置在 \Windows\System
目录中的 Windows 2000 Ntoskrnl.exe 文件的副本 - 蓝屏需要 Windows 2000 初始屏幕的文件。
现在,你很可能让毫无戒心的 Windows 9x 用户感到困惑,他们回到自己的电脑后却发现电脑陷入了 Windows 2000 崩溃和重启的循环中!
在 www.sysinternals.com/bluescreen.htm 下载蓝屏屏幕保护程序 v2.21。
PAGEDEFRAG V2.01
PageDefrag 是一个碎片整理实用工具,在开机时运行,用于对系统的分页文件和注册表配置单元进行碎片整理。 PageDefrag 是第一个能够对注册表配置单元进行碎片整理的实用工具,但自发布以来,该功能已添加到多个商业碎片整理程序。 不过,PageDefrag 仍然是免费的,版本 2.01 适用于 Windows 2000 和 Windows NT 4。
如果你对 Windows NT 4 和 Windows 2000 提供的碎片整理接口感兴趣,可以在 www.sysinternals.com/defrag.htm 了解它并将源代码下载到交互式文件碎片整理程序。 Sysinternals 在 Microsoft 将碎片整理接口纳入平台 SDK 之前几年就对其进行了记录,一些商业碎片整理程序使用了我们的文档和示例代码。
在 www.sysinternals.com/pagedfrg.htm 下载 PageDefrag v2.01。 在 www.sysinternals.com/defrag.htm 查看碎片整理接口文档。
LOADORDER V1.1
你是否曾想过设备驱动程序和服务按什么顺序加载和初始化? 现在可以轻松找到。LoadOrder 是一个实用工具,用于处理 HKLM\System\CurrentControlSet\Services
下的信息,以生成驱动程序和服务加载顺序的图片。
在 www.sysinternals.com/misc.htm 下载 LoadOrder v1.1。
CLOCKRES V1.0
在有关调度程序的文章中,我谈到了这样一个事实,即 Windows NT/2000 线程数量(线程在 CPU 上运行的轮次长度)基于系统时钟的分辨率。 时钟的分辨率也会影响基于 Windows 计时器的事件的延迟。 www.systernals.com/timer.htm 上的文章甚至讨论了应用程序操纵时钟分辨率的方式。 在大多数 SMP 上,分辨率为 15ms,在单处理器上为 10ms,这些值由标准 SMP 和单处理器 HAL(硬件抽象层)设置。
虽然大多数系统使用上面列出的通用值,但如何确定计算机上时钟的实际分辨率? 答案在于 GetSystemTimeAdjustment Win32 API,它告知系统是否正在对时间时钟应用定期调整。 恰好这个 API 也返回时钟的间隔。 ClockRes 小程序使用 API 告知系统时钟的分辨率。
在 www.sysinternals.com/misc.htm 下载 ClockRes 和源代码。
BGINFO V1.0
如果你是负责多台服务器的管理员,则可能需要花费大量时间打开各种信息对话框,以提醒自己各种系统属性的值,例如已安装的 Service Pack 版本、IP 地址、计算机名称、内存大小和处理器速度。 现在,使用 Bryce 开发的 BgInfo 实用工具,你可以在每台服务器的桌面上清晰地看到所有这些信息。
当你运行它时,BgInfo 会创建一个桌面背景,用于自动报告各种有用的系统特征。 可以将 BgInfo 放在“开始”文件夹中,这样每次登录时都可以使用这些信息,并且可以修改 BgInfo 显示的数据,甚至添加自己的数据。 在服务器上安装 BgInfo 后,可以节省重复查找容易忘记的信息所花费的时间。
在 www.sysinternals.com/misc.htm 下载 BgInfo v1.0。
在 Windows 2000 中,第 3 版
Windows 2000 内部版本的官方书籍现已推出! 此版本由大卫·所罗门 (www.solsem.com) 和马克·鲁西诺维奇共同创作,范围比上一版本增大 40% 以上,新增网络、即插即用、电源管理、服务、注册表、WMI、启动和关闭以及存储部分。 它还包括一张 CD,其中包含多个功能强大的工具,这些工具在其他地方都不可用,用于调查 Windows 2000 内部版本。
通过 www.sysinternals.com/insidew2k.htm 查看该书的目录并立即订购。
WWW.MICROSOFT.COM 上的 SYSINTERNALS
我没有任何引用 Sysinternals 进行报告的新知识库文章,但 Microsoft 在其网站的 TechNet 部分添加了一些非常引人注目的 Sysinternals 链接。 第一个是在 www.microsoft.com/TechNet/Security/au022800.asp 的“询问我们关于…安全性”专栏中,专栏作家 Joel Scambray 警告读者,恶意用户可以使用 NTFSDOS (www.sysinternals.com/ntfspro.htm) 更改 Windows 2000 域控制器的 Active Directory 的内容。
第二个引用位于 www.Microsoft.com/technet/inide/default.asp 的“Microsoft 内部”专栏中。 该专栏采用 Q&A 样式,开头是两个与确定哪个应用程序打开了特定文件相关的问题。 在回答的过程中,当读者指向 HandleEx (www.sysinternals.com/handleex.htm) 和 NtHandle (www.sysinternals.com/nthandle.htm) 时,文章的作者(“Mole”)指出了关于 sysinternals 的这一点:“这里有很多很棒的实用工具,不会花你一分钱。 甚至 Mole 也不时提到 Sysinternals(什么?你以为 Mole 可能把所有这些信息都记在脑子里了?)。 再说一次,这就是他要送你去的地方。“这几乎是 Microsoft 对该网站的官方认可。
INTERNALS 信息
调试权限的强大功能
与包括 dbmon 在内的其他调试输出监控程序不同,我的 DebugView 调试输出监控程序 (www.sysinternals.com/dbgview.htm) 需要本地管理员权限才能执行,因为它安装了一个捕获内核模式调试输出的设备驱动程序。 因此,我收到了几十封来自开发人员的电子邮件,抱怨他们的管理层不会给他们本地管理员权限,而只给他们调试权限。 有人认为,授予调试权限是有原因的,它是所有应用程序开发人员都需要开发的。 这些开发人员要求我更改 DebugView,以便它仅在用户具有管理员权限时安装驱动程序,否则仅收集 Win32 调试输出。
这些请求总是让我会心一笑,因为提出调试权限论点的管理层没有意识到,这个权限为本地管理员权限打开了大门。 使用调试权限,开发人员可以将调试程序附加到本地安全机构进程 (LSASS),并对其进行操作,以便在下次登录时授予他们本地管理员权限。 或者,他们可以将代码注入系统帐户中运行的任何进程,以便将其帐户添加到本地管理员组。 当我向抱怨的开发人员解释这一点时,他们有时会回应说,他们的管理层不相信这种说法。 到目前为止,我还没有任何办法让他们回到管理层来陈述自己的观点,但最近一连串的此类电子邮件促使我采取了行动。
LogonEx 是一个可在 www.sysinternals.com/logonex.zip 下载的实用工具,以图形方式展示调试权限的影响力。 LogonEx 适用于 Windows NT 和 Windows 2000。 为了最好地展示它,请创建一个普通用户帐户,但添加了“调试程序”权限除外。 注销并在该帐户下登录,然后运行 LogonEx。 您需要 msv1_0.dll 的符号文件来进行特定安装(开发人员通常安装了系统符号),LogonEx 使用符号文件来定位 MsvpPasswordValidate
函数的入口点并对其进行修补。 在 LogonEx 进行修补后,你将能够使用任何帐户登录到系统,而无需指定密码。 以管理员身份登录并将创建的帐户添加到本地管理员组,完成演示。
LogonEx 只是调试权限使开发人员能够控制系统的一个例子,还有很多其他例子。 我希望 LogonEx 能让管理层相信,不向开发者授予本地管理员权限是没有意义的(但请注意,我不是在谈论域管理员权限,这是另一回事,本地管理员只对自己的计算机有超级权限,对其他计算机没有权限,而域管理员则管理网络)。
WIN2K SP1 中的新 API?
在许多用户遇到 NT 4 Service Pack (SP) 导致新错误的问题后,Microsoft 实施了一项政策,即不在 SP 中包含任何新功能,以最大限度地减少他们在修复旧问题时引入新问题的可能性。 我们是这么认为的。 Windows 2000 SP 1 是最近发布的,似乎没有任何新功能。 然而,对 Ntoskrnl.exe(包含 Windows 2000 执行和内核组件的文件)和 Ntdll.dll(包含本机 API 和加载器的库)的详细检查表明,新 API 在SP 1 中首次亮相。
新 API 由以下函数组成:
RtlTraceDatabaseAdd
RtlTraceDatabaseCreate
RtlTraceDatabaseDestroy
RtlTraceDatabaseEnumerate
RtlTraceDatabaseFind
RtlTraceDatabaseLock
RtlTraceDatabaseUnlock
RtlTraceDatabaseValidate
函数的名称具有很强的描述性,因此这显然是用于记录事件的 API。 API 一个有趣的方面是,它的实现在 Ntdll 和 Ntoskrnl 中重复,这不同于调用 Ntoskrnl 中实现服务的其他 Ntdll API。
对 API 实现的检查表明,它是这样使用的:应用程序创建一个跟踪数据库,该数据库存储在应用程序的虚拟内存中,并将条目添加到数据库中。 在某个时候,应用程序可以枚举数据库的内容,完成数据库操作后,应用程序会将其删除。 奇怪的是,似乎没有删除数据库条目的方法。
是什么利用了这个新 API? 在功能相当完整的 Windows 2000 Advanced Server 上未安装任何功能,因此不清楚有什么作用。 也许这是意外包含在 SP 1 发布代码中的调试 API。
发布时间:2000 年 8 月 30 日,星期三,下午 7:07,发布者:ottoh