相信有很多朋友都开发过串口通讯程序.异步的或者同步的.也有好多人用过或者正在用SysInternals公司的PORTMON.exe吧.
请问,哪位大侠能讲讲PORTMON.exe 的实现原理
如果我们需要自己开发一个监听软件的串口通讯,提取数据,思路如何展开
如果使用HOOK的话,怎么开始

解决方案 »

  1.   

    http://www.buaapress.com.cn/buaa1/press/html/booklist/book/a1604.htm
      

  2.   

    工作原理: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\comm\inc\ntddpar.h 中定义的,有些 IOCTL 在 DDK 中有文档记录。 
    工作原理:Win9x
    在 Windows 95 和 98 上,Portmon GUI 依靠动态加载的 VxD 来捕获串行端口和并行端口活动。Windows VCOMM(虚拟通信)设备驱动程序可用作与串行端口和并行端口设备之间的接口,因此,访问端口的应用程序会间接使用其服务。Portmon VxD 使用标准 VxD 服务挂钩来截获对 VCOMM 功能的所有访问。与其 NT 设备驱动程序类似,Portmon 的 VxD 将解释请求,以便以友好格式显示这些请求。在 Win9x 上,Portmon 将监视所有端口,因此没有与 NT 上类似的端口选择。
      

  3.   

    brightyang(伊莎贝尔) 
    Hook串口通信函数
    能不能帮忙举例呀
      

  4.   

    就是hook
    ReadComm 、WriteComm
    这两个函数
      

  5.   

    需要DDK才可以~
    SDK那些是用户层的~