首页
社区
课程
招聘
[求助]tdi receive问题
发表于: 2009-3-3 20:33 6366

[求助]tdi receive问题

2009-3-3 20:33
6366
我想写一个tdi两端通信的程序,客户端用的普通socket,服务端则是tdi 建立基本的连接后,用函数sendtocontroler()发送和receivefromcontroller()接受。sendtocontroler()没有问题,就是receivefromcontroler()出错。
NTSTATUS receivefromcontroler( )
{
    PDEVICE_OBJECT  devObj;
    KEVENT          receiveevent;
    PIRP            irp;
    PMDL            mdl;
    IO_STATUS_BLOCK iosb;
    NTSTATUS        status;

    devObj = IoGetRelatedDeviceObject(connectionFileObject);

    KeInitializeEvent(&receiveevent, NotificationEvent, FALSE);

    irp = TdiBuildInternalDeviceControlIrp(TDI_RECEIVE, devObj, connectionFileObject, &receiveevent, &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;
        }
    }

    TdiBuildReceive(irp, devObj, connectionFileObject, NULL, NULL, len ,mdl , flags, len);

IoSetCompletionRoutine(irp,TDICompletionRoutine,&receiveevent,TRUE.TRUE,TRUE);

    status = IoCallDriver(devObj, irp);

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

    return NT_SUCCESS(status) ;

memcpy(getcommand,mdl ,strlen(mdl ));
}
外面定义 char getcommand[256];
接受一个命令没有问题,我在主函数中创建了一个线程,在其中用while(true)
{receivefromcontroler();},当不启动客户端只启动服务端时就会蓝屏,当和客户端建立连接然后
客户端推出时,也会蓝屏,但是不用while循环就不会这样,不知道为什么,困扰了好久,请求各位大侠帮忙

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
2
哇,楼下的块出来看写RING0 BACKDOOR的
2009-3-3 22:01
0
雪    币: 2362
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
汗 。。。 目前还不懂
跟偶像一起看RING0 BACKDOOR
2009-3-3 22:04
0
雪    币: 1337
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
哇,楼下的块出来看写RING0 BACKDOOR的

这离RING0 BACKDOOR还远着吧.
2009-3-4 13:54
0
雪    币: 217
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
只是一个简单的两端通信的程序,一本书上的例子,拿来完善一下,离ring0 backdoor确实很远,还望高手指点一下。
2009-3-4 15:57
0
雪    币: 581
活跃值: (149)
能力值: ( LV12,RANK:600 )
在线值:
发帖
回帖
粉丝
6
TDI通信完整的可以参考
http://hi.baidu.com/sysnap/blog/item/a4f01c51f26b9d2243a75b3d.html
2009-3-4 16:44
0
游客
登录 | 注册 方可回帖
返回
//