虚拟串口--杂记

虚拟串口被占用,软件可用串口有限COM1-COM4,如何释放和删除被占用的串口

A:可以通过删除注册表中的一个数值项来清除这些配置:在“运行”对话框中输入“regedit”进入注册表;然后进入 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\COM Name Arbiter这时我们可以找到该数值项:ComDB,它的值代表目前使用中的串口端号。比如1d,它的二进制:0001 1101,则从右往左数代表第1,3,4,5端口被占用。这样我们只需要把ComDB这个数据项删除,关闭注册表(不用重启电脑)即可。

如何符号连接?

修改注册表:HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM,新建项目,名称 myWDMDevice ,类型 REG_SZ,内容 COM7。打开串口监控既可看到。

/************************************************************************
* 函数名称:HelloWDMAddDevice
* 功能描述:添加新设备
* 参数列表:
      DriverObject:从I/O管理器中传进来的驱动对象
      PhysicalDeviceObject:从I/O管理器中传进来的物理设备对象
* 返回 值:返回添加新设备状态
*************************************************************************/
#pragma PAGEDCODE
NTSTATUS HelloWDMAddDevice(IN PDRIVER_OBJECT DriverObject,
                           IN PDEVICE_OBJECT PhysicalDeviceObject)

PAGED_CODE();
KdPrint(("Enter HelloWDMAddDevice\n"));

NTSTATUS status;
PDEVICE_OBJECT fdo;
UNICODE_STRING devName;
RtlInitUnicodeString(&devName,L"\\Device\\MyWDMDevice");
status = IoCreateDevice(
DriverObject,
sizeof(DEVICE_EXTENSION),
&(UNICODE_STRING)devName,
FILE_DEVICE_UNKNOWN,
0,
FALSE,
&fdo);
if( !NT_SUCCESS(status))
return status;
PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION)fdo->DeviceExtension;
pdx->fdo = fdo;
pdx->NextStackDevice = IoAttachDeviceToDeviceStack(fdo, PhysicalDeviceObject);
UNICODE_STRING symLinkName;
RtlInitUnicodeString(&symLinkName,L"\\DosDevices\\COM7");

pdx->ustrDeviceName = devName;
pdx->ustrSymLinkName = symLinkName;
status = IoCreateSymbolicLink(&(UNICODE_STRING)symLinkName,&(UNICODE_STRING)devName);

if( !NT_SUCCESS(status))
{
IoDeleteSymbolicLink(&pdx->ustrSymLinkName);
status = IoCreateSymbolicLink(&symLinkName,&devName);
if( !NT_SUCCESS(status))
{
return status;
}
}

fdo->Flags |= DO_BUFFERED_IO | DO_POWER_PAGABLE;
fdo->Flags &= ~DO_DEVICE_INITIALIZING;

KdPrint(("Leave HelloWDMAddDevice\n"));
return STATUS_SUCCESS;
}

串口的IO控制码

#include <ntddser.h>

#define IOCTL_SERIAL_SET_BAUD_RATE      CTL_CODE(FILE_DEVICE_SERIAL_PORT, 1,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_SERIAL_SET_QUEUE_SIZE     CTL_CODE(FILE_DEVICE_SERIAL_PORT, 2,METHOD_BUFFERED,FILE_ANY_ACCESS)

请教如何做虚拟串口驱动?

我用driverstudio自动生成了一个驱动,什么也没有改动
我把inf文件里面的
class和classguid改成

Class=Ports
ClassGUID={4d36e978-e325-11ce-bfc1-08002be10318}

然后在设备管理器里面看有我的驱动了,后面括号里面有com4。

只要在adddevice 里面用 pDevice->createlink(\"com4\")就可以了

windows自带的超级终端和串口调试助手采用两种不同的机制
超级终端采用查询的方式,串口调试助手和其他使用MSComm类的串口应用程序用的是事件通知的方式。

超级终端的方式:
不停的尝试读1个字节,读到为止

事件的方式:不主动读
先调用IOCTL_SERIAL_SET_WAIT_MASK设置一些标志
这个就相当于是设置硬件的哪些中断使能,哪些中断屏蔽掉

然后调用IOCTL_SERIAL_WAIT_ON_MASK发送一个IRP请求,这个IRP请求交给你处理。真正的串口就是当设定的MASK的事件发生的时候,中断处理程序就会完成这个IRP.

当IO管理器发现这个IRP返回了,它先IOCTL_GET_WAIT_MASK确认一下自己刚才设置了哪些标志,如果完成的IRP中SERIAL_EV_RXCHAR标志
被置位了,IO管理器就会IOCTL_GET_COMMSTATUS

时间: 2024-10-06 00:31:16

虚拟串口--杂记的相关文章

上位机用USB做虚拟串口,总算抓到一个纯代码的总结了,没有坑的完美解决。

用libUSB来实现自己的驱动+下位机理论速度.=1M字节每秒. 达到极限速度 WINDOWS已经自带虚拟串口驱动,只不过还需要一个Inf文件 方法1:直接下载一个串口inf,来修改文件. 方法2:用libUSB来实现自己的驱动...及应用.用那个工具安装成自己定义的设备名字,应用程序就根据PID,VID来找到我们的设备,进行一系列读写.   下位机: 1,配置描述符的编写,见工程代码注释.主要是CDC类接口用端点2,数据接口用端点1和端点3 2,Get_line_coding请求,获取串口属性

实现主机和虚拟机之间的虚拟串口通讯

一.工具 1. win10为系统的主机 2. openwrt为系统的虚拟机 3. Oracle VM VirtualBox 5.0.12 4. VSPD虚拟串口工具 二.步骤 1. 主机创建虚拟串口COM1.COM2 2. virtual Box设置 在openwrt中ttyS0对应的是COM1,而ttyS1对应的是COM2.因为系统将ttyS0用作调试串口,所以我们使用ttyS1,也就是COM2. 3. 测试 主机发送,虚拟机接收 虚拟机发送,主机接收 参考: http://blog.csdn

vspd无法删除创建的虚拟串口对

我用破解免安装的vspd虚拟串口软件在win7上创建了两个端口com6和com7相互连接,但是下次开机用的时候串口调试软件提示“无效的端口号”,设备管理器里也找不到相应的虚拟设备了,但是在vspd里面列表项显示存在且端口状态关闭,我想删除它们时,又提示有端口未关闭而无法删除,不知道是什么原因? 右击计算机-->管理-->设备管理器-->端口.可以看到配对的串口上有个黄色的感叹号.在VSPD里点击add pair,看看,是不是又多了一对,但是这一对没有感叹号,点击delete pair是可

STM32 USB虚拟串口(转)

源:STM32 USB虚拟串口 串口调试在项目中被使用越来越多,串口资源的紧缺也变的尤为突出.很多本本人群,更是深有体会,不准备一个USB转串口工具就没办法进行开发.本章节来简单概述STM32低端芯片上的USB虚拟串口的移植.在官方DEMO中已经提供了现成的程序,这里对修改方法做简单说明. 官方demo及驱动程序,我存放在百度盘: http://pan.baidu.com/s/1hq3moE4 首先打开官方demo我们开始进行移植,第一步复制我们可用的文件,操作如下: Projects\Virt

【转】虚拟串口VSPM解决串口编程问题

通过串口调试软件 UartAssist.exe 和虚拟串口软件 VSPM,可以解决串口编程时没用硬件调试的问题,通过VSPM虚拟出串口设备,让程序发送信息到 VSPM 设备后通过 UartAssist.exe 直接回显信息,可以方便的调试串口通信程序. UartAssist 下载:http://download.csdn.net/detail/zh405123507/4198012 VSPM虚拟串口 下载: http://download.csdn.net/detail/zh405123507/

虚拟串口

不要把虚拟串口跟串口调试小助手弄混淆了.一个是虚拟出串口,一个是一个软件,用来向串口发送和接收数据. 有时候,自己没有下位机仪器单片机之类的,要测试我们的程序是否有效,怎么办呢?这时候可以使用虚拟串口VSPD加串口调试小助手. 虚拟串口,就是虚拟几个 COM 口,一般是虚拟出成对的.    为什么成对呢? 因为,我们要调试串口程序,我们从COM3 发送数据,COM4 就会收到.从 COM4 发数据  COM3  就会收到. 相当于建立了一种连接,方便调试.如果你没有下位机,要测试程序,你可以虚拟

Windows系统添加虚拟串口及CanToolApp功能1的实现

我们组一开始尝试用com0com添加虚拟串口,但是遇到了问题,系统中可以看到添加的虚拟串口,但是用C#无法获取串口.经过多次尝试后,我们决定换用Virtual Serial Port Driver添加虚拟串口. (工具链接:https://pan.baidu.com/s/1hs1mDE0 密码: fsq1) 使用方法: 点击 add pair,即可增加COM口对 添加后: 然后在计算机管理--设备管理器中可以看到新添加的虚拟COM口: C#获取串口代码: private String[] por

Win8.1装驱动问题解决方法,可解决安装虚拟串口,VMware桥接驱动等问题。

在win8.1里面装了虚拟机,但是没有虚拟网卡vmnet0 vmnet1 vmnet8 ? 无法将网络更改为桥接状态:没有未桥接的主机网络适配器? win8.1如何设置VMware桥接模式上网? netbridge.inf装不上?VMware Bridge Protocol装不上?数据错误? 虚拟串口装不上?数据错误? 解决方法:(参考Win8.1慎用优化,可能导致安装驱动出现数据无效的问题.附解决方法) Win+R弹出运行窗口,输入"services.msc"进入系统服务,找到Dev

1900型USB接口扫描枪设置虚拟串口模式提升扫描速度

在使用扫描枪的过程中,发现扫描二维码速度比较慢,不到100个字符,花了大概2-3秒的时间才完成显示,这个速度不能忍受啊.通过度娘,说是可以将USB键盘模式接收字符转换成虚拟串口接收,这样可以大大提高速度.下面是实验过程: 1.下载1900串口驱动程序"Honeywell Scanning and Mobility (HSM) USB serial driver.zip",地址:http://www.drv5.cn/sfinfo/11208.html 2.解压,根据系统运行install