现在介绍在windows XP下开发虚拟串口的方法。可以开发一个虚拟串口,将读写请求传递给USB驱动,这样就可以利用现成的串口调试工具向USB设备读取了。 1、DDK串口开发框架 DDK对串口驱动提供了专门接口。只要编写的驱动满足这些接口,并按照串口标准的命名方法,不管是真实的串口设备,还是虚拟设备,Windows操作系统都会认为 这个设备是一个标准的串口设备。用标准的串口调试工具都可以与这个设备进行通信。 1、1 串口驱动的入口函数 本章的实例程序是在HelloWDM驱动的基础上修改而来,入口函数依然是 DriverEntry,在DriverEntry函数中指定各种 IRP的派遣函数,以及 AddDevice 例程、卸载例程等。 [cpp] view plaincopy 1. /************************************************************************ 2. * 函数名称:DriverEntry 3. * 功能描述:初始化驱动程序,定位和申请硬件资源,创建内核对象 4. * 参数列表: 5. pDriverObject:从 I/O管理器中传进来的驱动对象 6. pRegistryPath:驱动程序在注册表的中的路径 7. * 返回 值:返回初始化驱动状态 8. *************************************************************************/ 9. #pragma INITCODE 10. extern "C" NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDriverObject, 11. IN PUNICODE_STRING pRegistryPath) 12. { 13. KdPrint(("Enter DriverEntry\n")); 14. 15. pDriverObject->DriverExtension->AddDevice = HelloWDMAddDevice; 16. pDriverObject->MajorFunction[IRP_MJ_PNP] = HelloWDMPnp; 17. pDriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = HelloWDMDispatchControlp; 18. pDriverObject->MajorFunction[IRP_MJ_CREATE] = HelloWDMCreate; 19. pDriverObject->MajorFunction[IRP_MJ_CLOSE] = HelloWDMClose; 20. pDriverObject->MajorFunction[IRP_MJ_READ] = HelloWDMRead; 21. pDriverObject->MajorFunction[IRP_MJ_WRITE] = HelloWDMWrite; 22. pDriverObject->DriverUnload = HelloWDMUnload; 23. 24. KdPrint(("Leave DriverEntry\n")); 25. return STATUS_SUCCESS; 26. } 其中在AddDevice例程中,需要创建设备对象,这些都是和以前的HelloWDM驱动程序类似。在创建完设备对象后,需要将设备对象指定一个符号链接,该符号链接必须是 COM开头,并接一下数字,...