1999 年 5 月 15 日 - 此问题:

  1. 系统内部机制的新增功能

    • SDelete
    • BlueScreen 屏幕保护 Win2K 更新
    • "Linux 和 Enterprise"
    • "NT 实用工具内部"
    • My May Windows NT 杂志列
    • 非新内容
  2. INTERNALS 新闻

    • DR. GUI's PoorSide Manners
    • WinDev '99 East
    • Numega 驱动程序即将发布
    • Beta 3 DDK 已发布
    • Win2K 排队旋转锁
  3. 即将提供哪些功能

    • Win2K 系统文件保护 (SFP)

发起人:NALS 软件

系统内部信息新闻稿由 TheNalnals Software 赞助,网址为 http://www.winternals.com. Nalnals Software 是适用于 Windows NT/2K 的高级系统工具的领先开发人员和提供商。 功能包括适用于 Windows NT 4.0 的 FAT32、ERD Commander (Windows NT) 和 NTRecover。

大家好,

欢迎使用系统内部版新闻稿的第二版。 该新闻稿当前有 2700 名订阅者,订阅仍非常强大。

自上一篇新闻稿以来,Microsoft 已正式发布Windows 2000 Beta 3 版。 Beta 3 内核的生成号为 2031,而 NT 4.0 初始发布内核的生成号为 1381,NT 3.51 的生成号为 1025。 . 我发现 (和) 有点令人麻烦的是,Microsoft 每次在每天) 工作日对操作系统进行完整生成 (时都会递增生成号,但是,报告的内核内部版本号反映了其初始公共发行版的生成号。 例如,即使 NT 4.0 Service Pack 5 内核的实际内部版本数远高于 1381,内核仍报告 1381 作为生成号。

2000 Windows Beta 3 版本旨在为开发人员社区提供唤醒呼叫。 Microsoft 已宣布将在 2000 年 10 月发布 Windows 2000,Beta 3 表示将发布的功能完整版本,因此开发人员可以开始编写新产品,而无需担心其下会发生变化。

Windows 2000 附带了一系列新的 API、分层服务和内核增强功能。 设备驱动程序开发人员特别可见的一项更改是 BSOD (蓝屏) 已更改。 在以前版本的 NT 中,BSOD 显示系统上所有驱动程序的链接时间和加载地址信息,以及堆栈在崩溃时存在的转储。 在 Windows 2000 中,只显示停止代码和关联的地址行 (的) (地址行将一个或多个停止代码参数转换为设备驱动程序) 内的位置,以及一条详细消息。 支持消息建议检查 BIOS 和硬盘驱动器设置,并禁用对软件和病毒扫描程序进行碎片整理,以避免再次发生崩溃。 Microsoft 顶级支持 Services (PSS) 根据他们的体验和客户反馈确定 NT 4 样式 BSOD 对于确定崩溃原因没有用。

我亲自发现加载的驱动程序列表(尤其是堆栈转储)在从用户获取驱动程序 bug 报告时非常有用,获取此信息比让用户发送多兆字节故障转储要简单得多。 我通常根据堆栈转储隔离崩溃的原因,并基于驱动程序列表中显示的版本信息验证用户已加载的驱动程序版本。 我想要了解你的想法:是否希望看到 NT 4 样式 BSOD 继续到 Windows 2000,或者新的 BSOD 格式是否足够? 如果有意见,请向我发送电子邮件。 我将在下次新闻稿中报告此非正式投票的结果。 虽然我的主题是 BSO Windows D,但请务必查看 2000 年 1 月更新的热门系统内部蓝屏保护程序,此问题中对此有所介绍。

谢谢!

-Mark

系统内部机制的新增功能

SDELETE

作为 4.0 Windows NT C2 安全评级要求的一部分,它实现了"对象重用保护"。 这意味着 NT 将应用程序首次访问资源时分配的文件和内存资源归零。 这可以防止应用程序创建大型文件并检查其内容,以查看以前存储在磁盘上的内容。 但是,对象重用保护不能保护绕过标准资源相关 API 的应用程序可访问的资源,或完全绕过操作系统的资源。 例如,可以使用磁盘编辑器(如资源工具包的 DiskProbe)来检查磁盘未分配部分的内容。 这使你能够查看以前属于已删除文件的数据。

许多环境需要"安全删除"功能。 此功能使用户能够永久删除敏感数据,以便绕过操作系统保护功能的工具看不到这些数据。 EFS 加密文件系统 (的出现) 2000 年 10 月需要安全删除Windows工具。 加密以前未加密的文件时,EFS 在释放磁盘分配时不会清除包含文件未加密数据的磁盘分配的内容。 因此,即使加密的文件的活动版本是安全的,旧版本的文件仍存在于磁盘的未分配部分,直到它被 NTFS 分配给这些部分的新文件数据覆盖。

为了填充此漏洞,我已编写"安全删除 (SDelete) 。 它是一个命令行工具,不仅使你能够安全地删除标准文件,而且还可以安全地删除磁盘未分配部分中存在的任何以前删除的数据。 此外,它还适用于Windows NT/2000 压缩、加密和稀疏文件,需要使用碎片整理 API。 SDelete 遵守美国国防部清除和清理标准 DOD 5220.22-M,以便你可以确保删除数据后,数据将永久消失。

我向 SDelete 提供完整的源代码及其工作原理说明,以便你可以看到它如何使用碎片整理 API,以便你可以验证我的声明,它可以防止敏感已删除的数据恢复。

有关 2000/2000 Windows NT碎片整理 API 的文档,请参阅http://www.sysinternals.com/defrag.htm. 在 下载包含完整源代码的 SDelete http://www.sysinternals.com/sdelete.htm.

蓝屏屏幕保护 WIN2K 更新

Microsoft 对 Windows 2000 年 NT 启动屏幕和蓝屏 (BSOD) 布局所做的更改使得系统内部蓝屏保护程序需要重大更新。 为了继续提供 BSOD 真实性,我发布了屏幕保护程序版本 2.0。 它不仅反映 BSOD 格式的更改,还精确模拟 Windows 2000 启动屏幕,完成旋转进度条带和进度栏更新。 这非常真实,屏幕保护甚至会欺骗Windows 2000 位专家用户和开发人员。 当然,在 NT 4.0 下,BlueScreen 屏幕保护程序仍显示 NT 4.0 BSOD 和启动屏幕。

如何完美地Windows 2000 年启动屏幕,同时不违反版权法律? 我不包括屏幕保护Windows 2000 启动位图图形。 相反,我使用 DirectX 将图形模式切换为启动序列期间 Windows 2000 使用的相同模式,然后引用 Windows 200 内核文件 ntoskrnl.exe 的位图资源。 这些资源 (在 Visual Studio) 中打开 ntoskrnl.exe 的资源来查看它们,这是内核显示的资源,这是从 Windows 9x 执行启动图形实际上是单独文件的方式的一种更改。 在 2000 年 1 月,计算机 OEM 似乎不会获得自定义启动Windows体验的机会。

可以在 下载 BlueScreen 屏幕保护程序 http://www.sysinternals.com/bluescreen.htm. 如果你有一个与使用屏幕保护程序欺骗某人相关的故事,请传递它。

可以在 1997 年 12 月《Windows NT 杂志 NT 内部信息》列"在蓝屏内部"中详细了解 BSOD 的操作说明和原因。 "系统内部信息发布"页上的链接将你指向 http://www.sysinternals.com/publ.htm 该列的在线版本。 该页还包含指向我创作的文章和列的其他在线演示文稿的链接。

"LINUX 和企业"

Linux 社区对我在 Windows NT 杂志 4 月版中关于 Linux 内核可伸缩性缺陷的文章做出巨大响应,这促使该杂志提前发布该文章的在线版本。 可以在 上的"文章"部分找到文章"Linux 和 Enterprise"的链接http://www.sysinternals.com/publ.htm. 本文介绍当前版本的 Linux 内核 (2.2x) 的一些限制,包括缺少有效的事件等待机制、重要的系统调用序列化、无异步 I/O,以及 NT 中 sendfile (的差实现(称为 TransmitFile) 套接字 API)。 这些限制的组合可防止 Linux 在 Web 服务器、数据库服务器和电子邮件服务器等企业级应用程序的性能方面与 NT 和其他 UNIX 进行直接竞争。

"NT 实用工具内部"

如果你已使用 Filemon、Regmon 或 HandleEx,并且想要详细了解它们告诉你的内容以及如何实现它们,那么你将对 2 月 Windows NT 杂志列"IN NT Utilities"感兴趣。此列介绍这些工具的内部机制,对于 Regmon 和 Filemon,可以稍微了解捕获注册表或文件系统活动时记录的错误代码和请求类型。 指向本文在线版本的链接(刚刚可用)位于 http://www.sysinternals.com/publ.htm.

我的 5 月 WINDOWS NT 杂志列

你是否曾经想知道Windows NT/2000 如何在内存中或磁盘上组织注册表的内容? 当前 (5 月) 杂志Windows NT包含我的列"在注册表内",它告诉你这一点和更多内容。 例如,了解 配置服务器 内核模式子系统 (负责管理注册表) 的子系统如何查找密钥、存储值数据、优化搜索和保护磁盘上注册表文件的完整性。 Windows NT《边框 http://www.winntmag.com 》和《Barnes 和》上提供了该杂志。

非 SO-NEW 内容

在 Windows 2000 Beta 2 发布不久之后,我使用了内核映像文件 (ntoskrnl.exe) 的 Checked (调试) 生成,在内核上执行字符串搜索,并找到用于生成内核的源文件的名称列表。 NT/2000 内核的 Checked 内部版本包含大量 Assert 语句 (一致性检查) 包括 Assert 所在的文件的文件名。 假设内核源中几乎所有重要文件都至少包含一个 Assert,则列表相当全面。 将列表转储到 Java 脚本中,可很好地查看 2000 源树的目录Windows资源管理器式树视图。 请在 http://www.sysinternals.com/nt5src.htm. 查看它

INTERNALS 新闻

博士。 GUI 的差的SIDESIDE 方式

在 Microsoft 开发人员 网络新闻的 3 月/4 月问题中,DR. GUI 字段来自读者的问题,询问驱动程序如何将 (强制使用特定 CPU) 线程。 Dr. GUI 答复说,无法从驱动程序确定系统上的处理器数,并且驱动程序线程无法判断它正在哪个处理器上运行。 遗憾的是,DR.GUI 可能 (GUI 应坚持使用 GUI) 。

NT 内核 (ntoskrnl.exe) 导出 NTDDK 中定义的名为 KeNumberProcessors 的变量。H 为:

extern PCCHAR KeNumberProcessors;

可以在驱动程序中直接引用它,如下所示:

CHAR    i;

for( i = 0; i < *KeNumberProcessors; i++ ) {

    // do processor specific stuff
}

若要确定运行驱动程序线程的处理器,请使用 KeGetCurrentProcessorNumber () ,这是 NTDDK 中定义的另一个内核导出。H,但实际上记录在 DDK 中!

DR.GUI 针对这种药物规定了错误的药物,因此我通过一封不雅的电子邮件让 Dr. 知道。 令人意外的是,DR. GUI 甚至从未确认过电子邮件。 我们将在下一个问题中查看好的 Dr. 是否出错...

WINDEV '99 EAST

1999 年美国东部经济区第一次Windows开发人员会议正在快速进行。 WinDev'99 East 于 6 月 14-18 日于波士顿市 Mar进行。 许多开发中的大Windows,包括 Jeff Richter、Jeff Prosise 和 Don Box。 我将在设备驱动程序的轨迹中与 Jamie Han且anan Catlin 一起在那里。我的演示文稿包括一个有关 NT 内部机制的一天教程,以及一篇有关编写 Windows NT/2K 文件系统驱动程序的教程,以及一篇有关高级设备驱动程序开发问题的教程。 来说你好!

NUMEGA 驱动程序即将发布

Compuware NuMega Labs 正在发布一款功能强大的Windows 9x/NT/2K 设备驱动程序开发工具包 DriverStudio。 DriverStudio 结合了 NuMega 的所有现有设备驱动程序工具,包括 DriverAgent、DriverWorks、SoftICE 和 VtoolsD,并添加了新的 BoundsChecker(适用于驱动程序)和 FieldAgent (Windows NT/2K) 。

BoundsChecker 的设备驱动程序版本可全面监视驱动程序使用的每一个内核 API,并可用于监视驱动程序与系统上任何其他设备驱动程序的交互。 FieldAgent 允许将 BoundsChecker 的驱动程序版本部署到客户端系统,以便客户端可以收集可分析的跟踪。 即将推出 DriverStudio 客户的免费更新是适用于驱动程序的 TrueTime 和适用于驱动程序的 TrueCoverage,这些工具可用于轻松优化性能并测试设备驱动程序。

此包是终极驱动程序开发工具包,我强烈建议 (我使用 Beta 计划) 。 有关详细信息,请通过 http://www.numega.com.

BETA 3 DDK 已发布

随着 Windows 2000 Beta 3 的发布,Microsoft 可免费下载 Windows 2000 Beta 3 DDK (设备驱动程序工具包) 。 可以在 获取 DDK http://www.microsoft.com/ddk/ddk2kb3.htm. 我期望 SDK 很快推出,因为 Beta 3 中有许多 Win32 API 在 4 月版 MSDN 中未记录。

WIN2K 排队旋转锁

Windows 2000 使用名为"排队旋转锁"的新类型的旋转锁作为全局锁。 Windows 2000 中的全局锁与 Windows NT 4.0 中的锁相同,包括:

  • KiDispatcherLock:计划程序数据库锁
  • KiContext-SwapLock:tread 交换锁
  • MmPfnLock:物理页帧数据库锁
  • MmSystemSpaceLock:内核模式地址空间锁
  • CcMasterSpinLock:缓存管理器的全局旋转锁
  • CcVacbSpinLock:缓存管理器的映射数组锁

在单处理器排队旋转锁上,工作与普通旋转锁完全相同。 但是,在 NT 的多处理器版本上,排队旋转锁明显不同。 与标准旋转锁一样,排队旋转锁在 HAL 中实现。 内核调用 HAL 函数以获取排队的旋转锁,并调用 以 KeAcquireQueuedSpinlockKeReleaseQueuedSpinlock 释放排队的旋转锁。 KeAcquireSpinlock 和 ,内核用于获取和释放标准旋转锁的 HAL 函数需要指定旋转锁的地址 KeReleaseSpinlock 作为参数。 相比之下,排队的旋转锁函数使用全局旋转锁的索引号。 内核初始化数组中的全局旋转锁,其中每个旋转锁都有一个预定义的索引号,内核使用该索引号将它们标识到 HAL。 因此,无法由设备驱动程序定义和使用排队的旋转锁,因为无法增加全局排队旋转锁数组。

在 Windows 2000 年,SMP (中每个处理器控制区域 (PCR) 都有一个针对每个处理器) 具有一个数组,其条目数与排队旋转锁数一样多。 每个数组条目都包含两个字段:指向排队旋转锁的指针, ("spinlock"字段) 和"queue"字段。 在下面的说明中,当我引用旋转锁和队列字段时,我指的是与要获取或释放的旋转锁的数组项关联的字段。

KeAcquireQueuedSpinlock 工作原理如下所示:函数尝试使用互锁交换 CPU 指令获取旋转锁,以将当前处理器的 PCR 地址放在旋转锁中。 如果控制旋转锁,则函数在交换操作过程中具有另一个处理器的 PCR 的地址。 然后,函数通过切换其自己的 PCR 中旋转锁字段的低位,将自身标识为"正在等待"。 接下来,它将自己的 PCR 地址放入从旋转锁中检索到的 PCR 的队列字段。 最后,它会在繁忙循环中等待,直到当位关闭时低位在其旋转锁字段中关闭,然后当前处理器被授予旋转锁,因此它返回到 acquire 函数的调用方。

处理器获取排队的旋转锁并完成它想要在持有锁时执行的处理后,它将调用 KeReleaseQueuedSpinlockKeReleaseQueuedSpinlock 查看当前处理器的 PCR 中指定旋转锁的队列字段。 如果队列字段不为零,则另一个处理器已在那里"排队"其 PCR。 KeReleaseQueuedSpinlock 清除正在等待的 PCR 的旋转锁字段的低位,然后清除自己的队列字段并返回 。 通过清除正在等待的PCR 旋转锁字段中的低位,它刚刚向下一个 CPU 发出信号,指示它可以具有锁。 如果队列字段为零,则没有任何其他处理器等待锁,只需执行互锁 KeReleaseQueuedSpinlock 交换操作以清除全局旋转锁。

排队旋转锁的操作是处理器"排队"等待持有旋转锁的操作。 每个处理器都通过告知其前面一个处理器正在等待,将自身排队。 这为获取排队的旋转锁处理器提供了确定性排序,这些处理器按其请求顺序获取旋转锁。 对于标准旋转锁,没有此类排序。 排队旋转锁还有另一个更为显著的优势。 当处理器旋转等待其旋转锁字段清除低位时,它会在内存上旋转,而内存是其自己的处理器专用。 当处理器繁忙等待标准旋转锁时,它会在全局旋转锁本身(由所有处理器共享)上旋转。 因此,排队旋转锁具有更好的多处理器总线特征,因为在繁忙等待期间没有共享缓存行访问。 此外,由于排队旋转锁的排队性质,当多个处理器争用锁时,与标准旋转锁相比,总线锁操作通常更少。

排队旋转锁是 Microsoft 在 2000 年实现多处理可伸缩性的几个Windows之一。

即将提供哪些功能

Windows 2000 包括许多功能,这些功能可使其对操作员错误和异常应用程序更具复原能力。 其中之一是, 和 目录下的许多 DLL 和驱动程序都受名为 SFP 保护程序系统文件保护程序 (%systemroot%\system32%systemroot%\system32\drivers 保护) 。 可以通过进入该目录并重命名 来 system32 验证其是否存在 ntoskrnl.exe 。 监视器将唤醒并通知你它检测到篡改受保护的系统文件,并正在修复它。 如果再次检查目录,将发现 ntoskrnl.exe 已被错误替换。 下次我将告诉你工作原理。


感谢你阅读系统内部信息通讯。

发布时间:1999 年 5 月 15 日,星期六下午 7:15,由 ottoh 发布

[新闻稿存档 ^][ 第 1 卷 ,第 1卷][第 1 卷,第 3 卷 ]

[新闻稿存档 ^][ 第 1 卷 ,第 1卷][第 1 卷,第 3 卷 ]

系统内部信息新闻稿第 1 卷,第 2 号

http://www.sysinternals.com