flashstar
驱动牛犊
驱动牛犊
  • 注册日期2007-06-26
  • 最后登录2008-02-25
  • 粉丝0
  • 关注0
  • 积分270分
  • 威望28点
  • 贡献值0点
  • 好评度27点
  • 原创分0分
  • 专家分0分
阅读:1039回复:0

求助:关于PacketOpen()函数的问题!

楼主#
更多 发布于:2007-08-10 20:13
 下面是PacketOpen()的代码,我是从Window 2000 DDK中的Packet例子里修改的,
我就加了一段申请内存,和分配buffer的代码,结果每次一打开协议驱动,机器就重启,不知道为什么,难道是这个函数里不让申请内存吗,感觉不大可能啊,请哪位大侠指教!

注:open->SBufferPool在 PacketBindAdapter()里申请了,
NdisAllocateBufferPool(
            &status,
            &open->SBufferPool,
            TRANSMIT_PACKETS);


POPEN_INSTANCE      open;
    NTSTATUS            status = STATUS_SUCCESS;

    PVOID         p=NULL;
    NDIS_STATUS   Status;
    PNDIS_BUFFER  buffer=NULL;


DebugPrint(("OpenAdapter\n"));

    if(DeviceObject == Globals.ControlDeviceObject) {
        Irp->IoStatus.Status = status;
        IoCompleteRequest(Irp, IO_NO_INCREMENT);
        return status;
    }
    
    open = DeviceObject->DeviceExtension;

    DebugPrint(("AdapterName :%ws\n", open->AdapterName.Buffer));

    IoIncrement(open);

    //
    // Check to see whether you are still bound to the adapter
    //

    if(!open->Bound)
    {
        status = STATUS_DEVICE_NOT_READY;
    }

    if (NDIS_STATUS_SUCCESS == NdisAllocateMemoryWithTag(&p, MAX_PACKET_LEN,'BHH'))
    {
        NdisAllocateBuffer(&status,open->SBufferPool,&buffer,p,MAX_PACKET_LEN);

    }

    Irp->IoStatus.Information = 0;    
    Irp->IoStatus.Status = status;
    IoCompleteRequest (Irp, IO_NO_INCREMENT);
    IoDecrement(open);
    return status;
游客

返回顶部