适用于 Windows v3.03 的 Portmon
作者:Mark Russinovich
发布时间: 2012 年 1 月 12 日
下载 Portmon (226 KB)
立即 从 Sysinternals Live 运行。
简介
Portmon 是一个实用工具,用于监视和显示系统上的所有串行和并行端口活动。 它具有高级筛选和搜索功能,使它成为探索 Windows 工作方式、查看应用程序如何使用端口或跟踪系统或应用程序配置中问题的强大工具。
Portmon 3.x
Portmon 版本 3.x 标志着引入了许多强大的功能。
- 远程监视: 从任何可通过 TCP/IP 访问的计算机捕获内核模式和/或 Win32 调试输出-即使在 Internet 上也是如此。 可以同时监视多个远程计算机。 如果在 Windows NT/2K 系统上运行客户端软件,并且从同一网络社区中的另一个 Windows NT/2K 系统捕获,Portmon 甚至会安装其客户端软件本身。
- 最新的筛选器列表:Portmon 已扩展了强大的筛选功能,并记住了最近的筛选器选择,并提供了一个界面,便于重新选择它们。
- 剪贴板副本: 在输出窗口中选择多行,并将其内容复制到剪贴板。
- 突出: 突出显示与突出显示筛选器匹配的调试输出,甚至自定义突出显示颜色。
- Log-to-file: 将调试输出写入到正在捕获的文件。
- 印刷: 将捕获的调试输出的所有或部分打印到打印机。
- 一文件有效负载:Portmon 现在作为一个文件实现。
在线帮助文件详细介绍了所有这些功能。
安装和使用
只需执行 Portmon 程序文件 (portmon.exe) , Portmon 将立即开始捕获调试输出。 若要在 Windows 95 上运行 Portmon ,必须从 Microsoft 获取 WinSock2 更新。 请注意,如果在 Windows NT/2K portmon.exe 上运行 Portmon,则必须位于非网络驱动器上,并且必须具有管理权限。 菜单、热键或工具栏按钮可用于清除窗口、将受监视的数据保存到文件、搜索输出、更改窗口字体等。 在线帮助描述了 Portmon 的所有功能。
Portmon 了解所有串行和并行端口 I/O 控件 (IOCTL) 命令,并显示它们以及有关其关联参数的有趣信息。 对于读取和写入请求 ,Portmon 显示缓冲区的前几十个字节,使用“.”来表示不可打印的字符。 “显示十六进制”菜单选项允许在 ASCII 与缓冲区数据的原始十六进制输出之间切换。
工作原理:WinNT
Portmon GUI 负责标识串行和并行端口。 它通过枚举在HKEY_LOCAL_MACHINE\Hardware\DeviceMap\SerialComm下配置的串行端口和在HKEY_LOCAL_MACHINE\Hardware\DeviceMap\Parallel Ports下定义的并行端口来执行此操作。 这些密钥包含串行和并行端口设备名称与 Win32 可访问名称之间的映射。
选择要监视的端口时, Portmon 会将请求发送到其设备驱动程序,其中包括 NT 名称 (,例如\device\serial0) 感兴趣的。 驱动程序使用标准筛选 API 将自己的筛选器设备对象附加到目标设备对象。 首先,它使用 ZwCreateFile 打开目标设备。 然后将它从 ZwCreateFile 接收的句柄转换为设备对象指针。 创建与目标特征匹配的自己的筛选器设备对象后,驱动程序将调用 IoAttachDeviceByPointer 来建立筛选器。 从该点开始, Portmon 驱动程序将看到针对目标设备的所有请求。
Portmon 具有所有标准串行和并行端口 IOCTL 的内置知识,这些 IOCTL 是应用程序和驱动程序从端口配置和读取状态信息的主要方式。 IOCTL 在 DDK 文件 \ddk\src\comm\inc\ntddser.h 和 \ddk\src\comm\inc\ntddpar.h 中定义,有些内容记录在 DDK 中。
工作原理:Windows 95 和 98
在 Windows 95 和 98 上, Portmon GUI 依赖于动态加载的 VxD 来捕获串行和并行活动。 Windows VCOMM (虚拟通信) 设备驱动程序充当并行和串行设备的接口,以便访问端口的应用程序间接使用其服务。 Portmon VxD 使用标准 VxD 服务挂钩来截获对 VCOMM 函数的所有访问。 与 NT 设备驱动程序一样, Portmon 的 VxD 解释以友好格式显示请求。 在 Windows 95 和 98 Portmon 上监视所有端口,因此没有端口选择,就像在 NT 上一样。
下载 Portmon (226 KB)
立即 从 Sysinternals Live 运行。