【发布时间】:2010-05-17 14:08:13
【问题描述】:
是否可以从已在 Windows XP 上使用的 COM 端口读取数据?
我想查看某些软件与插入串行设备的设备之间的通信。我用 C# 写了一个小程序来监视 COM,但是一旦它被其他设备使用它就不会让你再次打开它。如何监控已经在使用的 COM 端口?
我对第三方软件持开放态度。
【问题讨论】:
标签: c# windows-xp serial-port
是否可以从已在 Windows XP 上使用的 COM 端口读取数据?
我想查看某些软件与插入串行设备的设备之间的通信。我用 C# 写了一个小程序来监视 COM,但是一旦它被其他设备使用它就不会让你再次打开它。如何监控已经在使用的 COM 端口?
我对第三方软件持开放态度。
【问题讨论】:
标签: c# windows-xp serial-port
是的,这在技术上是可行的。您将需要一个过滤器驱动程序,一种在本机串行端口驱动程序之前注入自身的组件的设备驱动程序类型。它会在将驱动程序 IRP 发送给常规驱动程序之前对其进行破解。
这是 SysInternals 的 PortMon 实用程序使用的技术。但是,你不能用 C# 代码编写这样的驱动程序,CLR 不能加载到 ring 0。至少在超级机密的 Midori 项目出现之前不能。
COM 过滤器驱动程序很常见,例如查看this one。不过,您必须进行一些谷歌搜索才能找到具有 .NET 包装器的产品。
【讨论】:
PortMon 是经典的 COM 端口监视器。它必须在程序打开 COM 端口之前运行,但可以启用/禁用监控部分。
【讨论】:
您可以使用Portmon for Windows 来监控活动。我这样做的另一种方法是使用一些硬件和笔记本电脑。我不确定您如何使用 C# 应用程序自己监控它。一旦您连接到它并尝试再次连接,它将已经在使用中。
也检查一下,它有点相关,并附上关于 PortMon 工作原理的说明:
Serial Port Redirection or Splitting - Stack Overflow
如果您拥有或可以获得多个 COM 端口,您可以使用分离器并从另一个端口进行监控。
【讨论】:
com0com 可以满足您的需求。它对我有用。
【讨论】: