首页
社区
课程
招聘
[旧帖] [求助]网上实在找不到答案 希望在这里能碰到一个能够解决问题的大神 0.00雪花
发表于: 2014-7-28 12:00 1334

[旧帖] [求助]网上实在找不到答案 希望在这里能碰到一个能够解决问题的大神 0.00雪花

2014-7-28 12:00
1334
最近老板接了一个项目 要用到 NDIS驱动放方面的东西 老板让我搞搞  但是我以前并没有接触过驱动 ..但是老板命令不可违....这几天就看了一下 NDIS相关的知识  然后开始试着写写代码
现在..遇到了问题  实在解决不了 百度也百度不到答案 ..只能来到这里求助

问题描述:  我现在是要做一个 NDIS 和应用层通过DeviceIoControl进行通信 下面是 应用层代码

//开始按钮处理
void CuuvpnDlg::OnStartBtn()
{
       
        char name[100]="\\\\.\\uu_link";

        handle=CreateFileA(name,GENERIC_ALL,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);

        if (handle == INVALID_HANDLE_VALUE)
        {
                char err[40]="";
                sprintf(err,"错误代码:%d", GetLastError());
                OutErrror(err);
                return ;
        }

        DWORD dwWrite;

        int data[2]={100,200};
    int result=0;
        DeviceIoControl(handle, PF_DRIVER_START , data, 8, &result, 4, &dwWrite, NULL);

        CloseHandle(handle);

       
}

//然后是 NDIS 代码

//事件分派处理函数
NTSTATUS OnDeviceControl(PIO_STACK_LOCATION stack,PIRP irp)
{
        //进行处理
        int info=0;
        int inlen=stack->Parameters.DeviceIoControl.InputBufferLength;
        int outlen=stack->Parameters.DeviceIoControl.OutputBufferLength;
        int *buff=(int*)irp->AssociatedIrp.SystemBuffer;
        DWORD kzm=stack->Parameters.DeviceIoControl.IoControlCode;
        int len=0;

        //分发函数标志
        DWORD irpflag=stack->MajorFunction;

        //根据控制码分发函数
        switch(irpflag)
        {
        case IRP_MJ_DEVICE_CONTROL:
                {

                        switch(kzm)
                        {

                        case PF_DRIVER_START:
                                {
                                        //获取输入缓冲区

                                        KdPrint(("START__收到来自应用层的消息\r\n"));

                                        KdPrint(("buff:%X\r\n",buff));
                                        //下面这句 去掉注释就蓝屏 这是怎么回事呢
                                        //KdPrint(("应用层传来的数据是:%d,%d",buff[0],buff[1]));
                                        m_flag=0;
                                        info=0;
                                        break;
                                }
                        case PF_DRIVER_STOP:
                                {
                                        //获取输入缓冲区

                                        KdPrint(("STOP__收到来自应用层的消息\r\n"));
                                //        KdPrint(("应用层传来的数据是:%d,%d",buff[0],buff[1]));

                                //        m_flag=0;
                                        info=0;
                                        break;
                                }

                        }

                }

        }
        //处理结束
        irp->IoStatus.Information=info;
        irp->IoStatus.Status=STATUS_SUCCESS;
        IoCompleteRequest(irp,IO_NO_INCREMENT);//指示完成此IRP
        return STATUS_SUCCESS;
}

//问题 是 我获取到的缓冲区指针一直是 NULL  不知道是哪里出问题了  在网上找了一些相关的NDIS和应用层的通信源码编译后  我所获得的缓冲区依旧是 0  求助  有知道的 回帖  或者联系我的QQ 956184289

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

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 1443
活跃值: (96)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
PF_DRIVER_START是METHOD_BUFFERED么?
2014-7-28 12:09
0
雪    币: 41
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
谢谢楼上 你解决了我搞了一天一夜的没有搞好的问题
2014-7-28 12:24
0
游客
登录 | 注册 方可回帖
返回
//