串口编程

API Hook钩子监控

可以用HookAPI钩子函数监听 windows API来实现,你可以Hook WriteFile ReadFile就可以看到所有串口的数据了。还有IRP Hook也可以。优点是不用自己编写驱动,相对比较简单,缺点是非常占系统资源的。

过滤型驱动

优点是占用资源很少。缺点是要写一个过滤驱动,相对比较复杂。

最关键的是IoAttachDeviceToDeviceStack,过滤驱动都会调用这个

用钩子函数监听Windows底层驱动,过滤串口操作事件

虚拟串口型驱动

将一个串口映射为两个或多个的问题,这样可以同时让很多个个程序都可以共享这个串口。

参考

  1. Faking an RS232 Serial Port,现成的COM仿真器推荐

  2. 在wince平台和windows平台上通用的比较著名的有两个软件。
    1. GPSGATE,是用钩子实现的

    2. 虚拟串口VSPD(前身是SERIALSPLITTER已停止开发,另外SERIALSPLITTER有破解版的dll文件,主要就是其中那个vspd.dll文件是串口驱动。另外动态加载驱动要使用activatedevice API函数),是通过驱动的方式来实现的。

      - Eterlogic http://www.eterlogic.com/Products.VSPE.html (商业的)

      - Eltima http://www.eltima.com/products/vspdxp/  (商业的)

  3. paulakg4/com0com,Com0com http://com0com.sourceforge.net/ (具有已签名的驱动程序可获得)http://code.google.com/p/powersdr-iq/downloads/list http://pete.akeo.ie/2011/07/com0com-signed-drivers.html

  4. Windows-driver-samples/serial/VirtualSerial/, 这个VirtualSerial只会提供示例数据给COM端口, 不会读出编写的数据, 所以要自己实现逻辑。

  5. c#串口钩子

  6. C#串口操作系列:

    http://blog.csdn.net/wuyazhe/article/category/695097 (精品,5个系列都有,感谢wuyazhe博主)

    两个完整例子:

    http://dldx.csdn.net/fd.php?i=35144030363803&s=210244c0411405405a6adaa4d8818c02

    http://bbs.csu.edu.cn/bbs/forum.php?mod=attachment&aid=MjcyNDJ8YWYyNDFmNDd8MTMxNjg5Mzk2NXww

    一篇经典论文:《基于C#环境的单片机(89C51)与PC的串行通信》(其它网站的考完都要收费,这个勉强可以看完)

    http://www.doc88.com/p-78747714418.html

    一些其它博客或空间的相关案例:

     http://blog.csdn.net/johnpher/article/details/7003886(C#与51单片机串口通信)

     

    http://www.cnblogs.com/wuhuacong/archive/2011/07/19/2111055.html

     

    UDP协议的单片机通信实例: http://www.cnblogs.com/dongdonghuihui/archive/2009/09/25/1573782.html

    FROM:http://www.verydemo.com/demo_c92_i47530.html

  7. 个人VC串口通信经验及相关知识总结(原) - CSDN博客

  8. CSerialPort跨平台串口类库