2414|0

85

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

windows 驱动 求救,TDI 没法接收到数据,各位高手快帮帮我 [复制链接]

我正在 做一个串口转TCP的虚拟驱动,打开本地传输地址成功,连接成功,发数据成功,用 SetEventHandler() 注册回调函数也成功,但是有数据过来时,回调函数没有被调用,我看了好多例子了,写的都和我差不多,好多方法都试过了,但就是没法找出错在哪里,高手们指点一下.


但是我监测有网络数据包过来是,就是没有调用回调函数,不知道错在哪里, UDP方式的回调函数是能成功的,唉,不知道问题出在哪,各位高手,有没有知道问题可能出在哪的,指点一下.



设置事件代码没变,如下,

NTSTATUS
TDIClnSetEventHandler(
                      PFILE_OBJECT   pAddrFileObj,    // Address file object.
                      PDEVICE_OBJECT pTcpDevObj,      // TDI driver's device object.
                      LONG           EventType,       // Type of event.
                      PVOID          pEventHandler,   // Event handler routine.
                      PVOID          pEventContext    // Context for event handler.
                      )
/**************************************************************************************************/
/*                                                                                                */
/* Set up an event handler.                                                                       */
/*                                                                                                */
/* Note:  This routine is synchronous.                                                            */
/*                                                                                                */
/**************************************************************************************************/
{
    NTSTATUS            status;
    KEVENT              Event;
    IO_STATUS_BLOCK     IoStatus;
    PIRP                pIrp;
    do {                                                 // Single-iteration loop, to make possible escape via break.
        KeInitializeEvent(&Event, NotificationEvent, FALSE);
        // Get an Irp for internal device ioctl.
        pIrp = TdiBuildInternalDeviceControlIrp(TDI_SET_EVENT_HANDLER,
            pTcpDevObj,   // TDI driver's device object.
            pAddrFileObj, // Address file object.
            &Event,       // Event to be signalled when Irp completes.
            &IoStatus     // I/O status block.
            );
        if (NULL==pIrp)
        {
            status = STATUS_INSUFFICIENT_RESOURCES;
            break;
        }
        TdiBuildSetEventHandler(pIrp,
            pTcpDevObj,
            pAddrFileObj,
            NULL,                    // I/O completion routine.
            NULL,                    // Context for I/O completion routine.
            EventType,
            pEventHandler,           // Event handler routine.
            pEventContext            // Context for event handler routine.
            );
        
        status = IoCallDriver(pTcpDevObj, pIrp);
        
        if (STATUS_PENDING==status)                      // Have to wait on this Irp?
            KeWaitForSingleObject(&Event, Executive, KernelMode, FALSE, 0);
// Problem from IoCallDriver() or Problem discovered in completion?
        if ( ( STATUS_SUCCESS!=status && STATUS_PENDING!=status    )
            || ( STATUS_PENDING==status && 0!=IoStatus.Status ) )
        {
            // Note:  If problem was in IoCallDriver(), IoStatus.Status probably won't be meaningful.
            DebugPrint(("TDIClnSetEventHandler:  Problem in IoCallDriver().  status = 0x%08x, IoStatus.Status = 0x%08x\n",
                STATUS_PENDING==status ? 0 : status , IoStatus.Status));
        }
    } while(0);                                       // End 'do-while' single-iteration loop.
   
    status = ((STATUS_SUCCESS==status) || (STATUS_PENDING==status)) ? IoStatus.Status : status;
   
    return status;
}                                    

点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表