Portmon v3.03
作者:Mark Russinovich
发布日期:2012 年 1 月 12 日
下载 Portmon (226 KB)
立即从 Sysinternals Live 运行。
简介
Portmon 是一个实用工具,用于监视和显示系统上的所有串行和并行端口活动。 它具有高级筛选和搜索功能,是探索 Windows 工作方式、查看应用程序如何使用端口或跟踪系统或应用程序配置中问题的强大工具。
Portmon 3.x
Portmon 版本 3.x 引入了许多强大功能。
- 远程监视:从任何可通过 TCP/IP(甚至是通过 Internet)访问的计算机捕获内核模式和/或 Win32 调试输出。 可以同时监视多台远程计算机。 如果你在 Windows NT/2K 系统上运行 Portmon,并从同一网络邻居中的另一个 Windows NT/2K 系统进行捕获,则 Portmon 甚至会安装其客户端软件本身。
- 最近筛选列表:Portmon 已扩展了强大的筛选功能,可记住最近的筛选选择,并提供一个便于重新做出这些选择的界面。
- 剪贴板复制:在输出窗口中选择多行,并将其内容复制到剪贴板。
- 突出显示:突出显示与突出显示筛选条件匹配的调试输出,甚至可自定义突出显示颜色。
- 日志到文件: 捕获时将调试输出写入文件。
- 打印:将捕获的全部或部分调试输出打印到打印机。
- 单文件有效负载:Portmon 现在作为一个文件实施。
在线帮助文件详细介绍了所有这些功能以及其他功能。
安装和使用
只需执行 Portmon 程序文件 (portmon.exe),Portmon 将立即开始捕获调试输出。 若要在 Windows 95 上运行 Portmon,必须从 Microsoft 获取 WinSock2 更新。 请注意,如果在 Windows NT/2K 上运行 Portmon,则 portmon.exe 必须位于非网络驱动器上,并且你必须具有管理权限。 菜单、热键或工具栏按钮可用于清除窗口、将受监视的数据保存到文件、搜索输出、更改窗口字体等。 在线帮助介绍了 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 在 DDK 文件 \ddk\src\comm\inc\ntddser.h 和 \ddk\src\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 运行。