zfmoon
驱动牛犊
驱动牛犊
  • 注册日期2003-01-08
  • 最后登录2009-05-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望7点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
60楼#
发布于:2008-05-21 16:34
引用第58楼tanran于2008-05-16 11:35发表的  :
现在上述问题也解决,安装服务段无效的情况
这个可以将VSer.inf复制到Windowsinf文件夹下
然后再安装驱动程序就可以了~
一切配置均正常,已经虚拟出COM3和COM4两个串口
并且IP,PORT均配置正常,出现这样一个问题
.......


这个问题我原来遇到过,后来怎么的给忘记了,你再想办法试试,肯定能解决。
zfmoon
驱动牛犊
驱动牛犊
  • 注册日期2003-01-08
  • 最后登录2009-05-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望7点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
61楼#
发布于:2008-05-21 16:35
解决了里面的一个小Bug,就是使用配置外的IP地址和端口对此虚拟串口发送数据时,也能显示,添加了几行代码,过滤一下就好了。
tanran
驱动牛犊
驱动牛犊
  • 注册日期2008-04-29
  • 最后登录2008-12-24
  • 粉丝0
  • 关注0
  • 积分141分
  • 威望30点
  • 贡献值0点
  • 好评度28点
  • 原创分0分
  • 专家分0分
62楼#
发布于:2008-05-22 10:48
现在虚拟的串口可以在应用程序中调用
但是在打开串口后,执行发送操作时
直接出现蓝屏,估计串口读写操作有些问题
或者是调试期间出了些问题吧~还要继续调试~
jiuzhuaxiong
驱动牛犊
驱动牛犊
  • 注册日期2008-05-07
  • 最后登录2008-11-20
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望10点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
63楼#
发布于:2008-05-27 01:58
不错,谢谢,衷心的感谢,改好了再发发回来,谢谢大侠!
tanran
驱动牛犊
驱动牛犊
  • 注册日期2008-04-29
  • 最后登录2008-12-24
  • 粉丝0
  • 关注0
  • 积分141分
  • 威望30点
  • 贡献值0点
  • 好评度28点
  • 原创分0分
  • 专家分0分
64楼#
发布于:2008-05-27 11:21
引用第61楼zfmoon于2008-05-21 16:35发表的  :
解决了里面的一个小Bug,就是使用配置外的IP地址和端口对此虚拟串口发送数据时,也能显示,添加了几行代码,过滤一下就好了。

能否把你的代码发上来看看啊~
zfmoon
驱动牛犊
驱动牛犊
  • 注册日期2003-01-08
  • 最后登录2009-05-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望7点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
65楼#
发布于:2008-05-28 11:57
引用第64楼tanran于2008-05-27 11:21发表的  :

能否把你的代码发上来看看啊~


呵呵,就是在TDIEventRecvDatagram函数里检查下包里的IP和端口。
自己试下就明白。
zfmoon
驱动牛犊
驱动牛犊
  • 注册日期2003-01-08
  • 最后登录2009-05-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望7点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
66楼#
发布于:2008-05-28 12:00
偶发现虚拟串口创建到100时,再创建DOS时就会失败了。好像是有个STATUS_BUFFER_TOO_SMALL的错误?

哪位朋友解决过这个问题没?
tanran
驱动牛犊
驱动牛犊
  • 注册日期2008-04-29
  • 最后登录2008-12-24
  • 粉丝0
  • 关注0
  • 积分141分
  • 威望30点
  • 贡献值0点
  • 好评度28点
  • 原创分0分
  • 专家分0分
67楼#
发布于:2008-06-02 10:43
为什么我在XP+SP2下打开关闭虚拟串口正常
但是发送和接收操作就会出现蓝屏啊?
通过其他软件可以看到虚拟串口对应的端口也打开了
有没有人遇到过这个问题,怎么解决啊?指点下~
ruirui1
驱动牛犊
驱动牛犊
  • 注册日期2007-01-22
  • 最后登录2011-03-25
  • 粉丝0
  • 关注0
  • 积分287分
  • 威望100点
  • 贡献值0点
  • 好评度29点
  • 原创分0分
  • 专家分0分
68楼#
发布于:2008-06-02 22:35
谢谢大虾,好东西,学习中
tanran
驱动牛犊
驱动牛犊
  • 注册日期2008-04-29
  • 最后登录2008-12-24
  • 粉丝0
  • 关注0
  • 积分141分
  • 威望30点
  • 贡献值0点
  • 好评度28点
  • 原创分0分
  • 专家分0分
69楼#
发布于:2008-06-10 11:12
成功创建PDO后,能自动生成相关的符号链接吗?
至少做到串口号和应用程序调用的串口号一样
这样的话也便于理解,还有
就是如果要实现自动安装该驱动的话
应该如何实现啊?如果创建多的虚拟串口
都要手动去寻找驱动,真的还有点麻烦呢~
sunflow12386
驱动牛犊
驱动牛犊
  • 注册日期2008-11-24
  • 最后登录2009-05-15
  • 粉丝0
  • 关注0
  • 积分23分
  • 威望195点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
70楼#
发布于:2008-11-24 16:01
好东西
sibotech135798
驱动牛犊
驱动牛犊
  • 注册日期2008-11-20
  • 最后登录2010-08-21
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望53点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
71楼#
发布于:2008-11-25 18:21
  老板要我两周之内做个虚拟串口转网口的驱动,而本人就一驱动菜鸟,无奈下只好改acidfish大虾的虚拟串口程序.但acidfish大虾的程序是用的UDP,可老板要TCP,我拼了命才搞定用TCP发送,可接收就是搞不定,要怎么改,请各位大虾救命哪...(TCP连接没仔细做,要有服务器驱动才能加载成功,服务器192.168.0.184:6002)
附件名称/大小 下载次数 最后更新
sys.rar (102KB)  30 2008-11-25 18:21
lzweb
驱动牛犊
驱动牛犊
  • 注册日期2008-12-23
  • 最后登录2008-12-23
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望11点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
72楼#
发布于:2008-12-23 10:05
谢谢
wwx330
驱动牛犊
驱动牛犊
  • 注册日期2008-12-26
  • 最后登录2008-12-26
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望31点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
73楼#
发布于:2008-12-26 14:52
好东西,先学习下
生命在于运动
puyang
驱动牛犊
驱动牛犊
  • 注册日期2009-01-26
  • 最后登录2009-10-21
  • 粉丝0
  • 关注0
  • 积分56分
  • 威望561点
  • 贡献值1点
  • 好评度0点
  • 原创分0分
  • 专家分0分
74楼#
发布于:2009-02-02 21:32
好东西
hzjman
驱动牛犊
驱动牛犊
  • 注册日期2005-09-16
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分819分
  • 威望174点
  • 贡献值0点
  • 好评度80点
  • 原创分0分
  • 专家分0分
75楼#
发布于:2009-02-05 21:45
TKS
sibotech135798
驱动牛犊
驱动牛犊
  • 注册日期2008-11-20
  • 最后登录2010-08-21
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望53点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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;
}
ielts5316
驱动小牛
驱动小牛
  • 注册日期2005-05-18
  • 最后登录2018-08-27
  • 粉丝0
  • 关注0
  • 积分478分
  • 威望940点
  • 贡献值0点
  • 好评度72点
  • 原创分0分
  • 专家分0分
  • 社区居民
77楼#
发布于:2009-03-08 11:03
Very Good !!!
mcmchotdog
驱动牛犊
驱动牛犊
  • 注册日期2008-02-02
  • 最后登录2009-04-19
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望51点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
78楼#
发布于:2009-04-05 10:59
有没有人能建个QQ群?大家一起研究吧。
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
79楼#
发布于:2009-04-05 17:03
引用第76楼sibotech135798于2009-03-02 14:01发表的  :
我把UDP改成了TCP,但在发送时,间隔少于170MS就丢包,为什么啊?
我把发送函数贴出来:
NTSTATUS    TDISendDatagram(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
.......

你使用的是同步发送,所以效率比较低,你可以考虑使用异步发送看看
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
游客

返回顶部