xiaoping
驱动牛犊
驱动牛犊
  • 注册日期2003-12-26
  • 最后登录2007-08-19
  • 粉丝0
  • 关注0
  • 积分135分
  • 威望14点
  • 贡献值0点
  • 好评度13点
  • 原创分0分
  • 专家分0分
阅读:1452回复:1

TDI发送效率问题

楼主#
更多 发布于:2007-05-11 17:13
  最近做的一个项目需要使用TDI,找了个TDI Client的代码,但是发送的效率很低,即使发送给本地的监听套接字,也有明显的停滞;而同样的用户态的套接字的发送速度却明显快很多。

以前有帖子讨论,说是IoCallDriver后的KeWaitForSingleObject的问题,我试着去掉KeWaitForSingleObject,但程序就会出错,请各位帮忙看看,谢谢了!

下面是send的主要代码:

NTSTATUS tdi_send_stream(PFILE_OBJECT connectionFileObject, const char *buf, int len, ULONG flags)
{
    PDEVICE_OBJECT  devObj;
    KEVENT          event;
    PIRP            irp;
    PMDL            mdl;
    IO_STATUS_BLOCK iosb;
    NTSTATUS        status;

    devObj = IoGetRelatedDeviceObject(connectionFileObject);

    KeInitializeEvent(&event, NotificationEvent, FALSE);

    irp = TdiBuildInternalDeviceControlIrp(TDI_SEND, devObj, connectionFileObject, &event, &iosb);

    if (irp == NULL)
    {
        return STATUS_INSUFFICIENT_RESOURCES;
    }

    if (len)
    {
        mdl = IoAllocateMdl((void*) buf, len, FALSE, FALSE, NULL);

        if (mdl == NULL)
        {
            IoFreeIrp(irp);
            return STATUS_INSUFFICIENT_RESOURCES;
        }

        __try
        {
            MmProbeAndLockPages(mdl, KernelMode, IoReadAccess);
            status = STATUS_SUCCESS;
        }
        __except (EXCEPTION_EXECUTE_HANDLER)
        {
            IoFreeMdl(mdl);
            IoFreeIrp(irp);
            status = STATUS_INVALID_USER_BUFFER;
        }

        if (!NT_SUCCESS(status))
        {
            return status;
        }
    }

    TdiBuildSend(irp, devObj, connectionFileObject, NULL, NULL, len ? mdl : 0, flags, len);

    status = IoCallDriver(devObj, irp);

    if (status == STATUS_PENDING)
    {
        KeWaitForSingleObject(&event, Executive, KernelMode, FALSE, NULL);
        status = iosb.Status;
    }

    return NT_SUCCESS(status) ? iosb.Information : status;
}
xiaoping
驱动牛犊
驱动牛犊
  • 注册日期2003-12-26
  • 最后登录2007-08-19
  • 粉丝0
  • 关注0
  • 积分135分
  • 威望14点
  • 贡献值0点
  • 好评度13点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-05-12 17:47
郁闷呐 没人回...
游客

返回顶部