60楼#
发布于:2008-05-21 16:34
引用第58楼tanran于2008-05-16 11:35发表的 : 这个问题我原来遇到过,后来怎么的给忘记了,你再想办法试试,肯定能解决。 |
|
61楼#
发布于:2008-05-21 16:35
解决了里面的一个小Bug,就是使用配置外的IP地址和端口对此虚拟串口发送数据时,也能显示,添加了几行代码,过滤一下就好了。
|
|
62楼#
发布于:2008-05-22 10:48
现在虚拟的串口可以在应用程序中调用
但是在打开串口后,执行发送操作时 直接出现蓝屏,估计串口读写操作有些问题 或者是调试期间出了些问题吧~还要继续调试~ |
|
63楼#
发布于:2008-05-27 01:58
不错,谢谢,衷心的感谢,改好了再发发回来,谢谢大侠!
|
|
64楼#
发布于:2008-05-27 11:21
引用第61楼zfmoon于2008-05-21 16:35发表的 : 能否把你的代码发上来看看啊~ |
|
65楼#
发布于:2008-05-28 11:57
引用第64楼tanran于2008-05-27 11:21发表的 : 呵呵,就是在TDIEventRecvDatagram函数里检查下包里的IP和端口。 自己试下就明白。 |
|
66楼#
发布于:2008-05-28 12:00
偶发现虚拟串口创建到100时,再创建DOS时就会失败了。好像是有个STATUS_BUFFER_TOO_SMALL的错误?
哪位朋友解决过这个问题没? |
|
67楼#
发布于:2008-06-02 10:43
为什么我在XP+SP2下打开关闭虚拟串口正常
但是发送和接收操作就会出现蓝屏啊? 通过其他软件可以看到虚拟串口对应的端口也打开了 有没有人遇到过这个问题,怎么解决啊?指点下~ |
|
68楼#
发布于:2008-06-02 22:35
谢谢大虾,好东西,学习中
|
|
69楼#
发布于:2008-06-10 11:12
成功创建PDO后,能自动生成相关的符号链接吗?
至少做到串口号和应用程序调用的串口号一样 这样的话也便于理解,还有 就是如果要实现自动安装该驱动的话 应该如何实现啊?如果创建多的虚拟串口 都要手动去寻找驱动,真的还有点麻烦呢~ |
|
70楼#
发布于:2008-11-24 16:01
好东西
|
|
71楼#
发布于:2008-11-25 18:21
老板要我两周之内做个虚拟串口转网口的驱动,而本人就一驱动菜鸟,无奈下只好改acidfish大虾的虚拟串口程序.但acidfish大虾的程序是用的UDP,可老板要TCP,我拼了命才搞定用TCP发送,可接收就是搞不定,要怎么改,请各位大虾救命哪...(TCP连接没仔细做,要有服务器驱动才能加载成功,服务器192.168.0.184:6002)
|
|
|
72楼#
发布于:2008-12-23 10:05
谢谢
|
|
73楼#
发布于:2008-12-26 14:52
好东西,先学习下
|
|
|
74楼#
发布于:2009-02-02 21:32
好东西
|
|
75楼#
发布于:2009-02-05 21:45
TKS
|
|
76楼#
发布于:2009-03-02 14:01
我把UDP改成了TCP,但在发送时,间隔少于170MS就丢包,为什么啊?
我把发送函数贴出来: NTSTATUS TDISendDatagram( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ) { NTSTATUS status; PIRP pIrp; PDEVICE_EXTENSION deviceExtension; KEVENT Event; IO_STATUS_BLOCK IoStatus; PMDL pMdl; PVOID VirtualAddress; ULONG Length; EXCEPTION_POINTERS * pExceptionInfo; ULONG lclExceptionCode; PVOID lclExceptionAddr; PVOID SystemAddress; TA_IP_ADDRESS RmtAddress = {1, {TDI_ADDRESS_LENGTH_IP, TDI_ADDRESS_TYPE_IP, { REMOTE_PORT, REMOTE_ADDRESS}}}; TDI_CONNECTION_INFORMATION RmtInfo = {0, 0, 0, 0, sizeof(RmtAddress), &RmtAddress}; deviceExtension = ( PDEVICE_EXTENSION )DeviceObject->DeviceExtension; RmtAddress.Address->Address->sin_port = deviceExtension->RemotePort; RmtAddress.Address->Address->in_addr = deviceExtension->RemoteAddress; status = STATUS_SUCCESS; KeInitializeEvent( &Event, NotificationEvent, FALSE); pIrp = TdiBuildInternalDeviceControlIrp( TDI_SEND, deviceExtension->TDILowerDeviceObject, deviceExtension->lpTransAddrFileObject, &Event, &IoStatus ); if ( NULL == pIrp ) { DebugPrint(("TDISendDatagram: Allocate Irp failed\n")); return STATUS_INSUFFICIENT_RESOURCES; } VirtualAddress = MmGetMdlVirtualAddress ( Irp->MdlAddress ); Length = MmGetMdlByteCount( Irp->MdlAddress ); ASSERT ( VirtualAddress && Length ); pMdl = IoAllocateMdl ( VirtualAddress, Length, FALSE, FALSE, pIrp ); if ( NULL == pMdl ) { DebugPrint(("TDISendDatagram: Allocate Mdl failed\n")); return STATUS_INSUFFICIENT_RESOURCES; } _try { MmProbeAndLockPages(pMdl, // (Try to) fix buffer. KernelMode, IoModifyAccess ); } _except( pExceptionInfo = GetExceptionInformation(), lclExceptionCode = pExceptionInfo->ExceptionRecord->ExceptionCode, lclExceptionAddr = pExceptionInfo->ExceptionRecord->ExceptionAddress, EXCEPTION_EXECUTE_HANDLER ) { DebugPrint((".TDISendDatagram: MmProbeAndLockPages() failed. Error = 0x%08x at 0x%08x\n", lclExceptionCode, lclExceptionAddr)); status = STATUS_UNSUCCESSFUL; IoFreeMdl ( pMdl ); CompleteRequest ( pIrp, status, 0 ); Irp->IoStatus.Information = 0; return status; } TdiBuildSend( pIrp, deviceExtension->TDILowerDeviceObject, deviceExtension->lpTransAddrFileObject, NULL, NULL, pMdl, 0, Length //&RmtInfo ); status = IoCallDriver ( deviceExtension->TDILowerDeviceObject, pIrp ); if( ( status != STATUS_SUCCESS ) || ( STATUS_PENDING != status ) ) { DebugPrint(("TDISendDatagram: Problem in IoCallDriver with status %x\n", status )); } if ( status == STATUS_PENDING ) { KeWaitForSingleObject( &Event, Executive, KernelMode, FALSE, NULL); } Irp->IoStatus.Information = IoStatus.Information; DebugPrint(("TDISendDatagram: Send %d bytes\n", Irp->IoStatus.Information )); status = ((STATUS_SUCCESS==status) || (STATUS_PENDING== status)) ? IoStatus.Status : status; return status; } |
|
77楼#
发布于:2009-03-08 11:03
Very Good !!!
|
|
78楼#
发布于:2009-04-05 10:59
有没有人能建个QQ群?大家一起研究吧。
|
|
79楼#
发布于:2009-04-05 17:03
引用第76楼sibotech135798于2009-03-02 14:01发表的 : 你使用的是同步发送,所以效率比较低,你可以考虑使用异步发送看看 |
|
|