阅读:2386回复:6
高手看过来 ――关于一段passthru发自定义包的程序!
下面是一段在passthru中向外发送自定义数据包的程序,不知道搞错了什么地方,一运行到它就重启!!
请问大侠,这段程序错在什么地方,该怎么改?? //定义变量 NDIS_HANDLE PoolHandle; NDIS_HANDLE BufPoolHandle; PNDIS_BUFFER pNdisBuffer; UINT PacketLeng; PNDIS_PACKET MyPacket; NDIS_STATUS Status = NDIS_STATUS_SUCCESS; static UCHAR WritePacketData[45]={0xff,0xff,0xff,0xff,0xff, 0xff,0x0,0x0,0x0,0x0,0x0, 0x0,0x08,0x06 …………}; //Mac包的内容 NdisAllocatePacketPool(&Status,&PoolHandle,2,100); //申请包池 if( NT_SUCCESS( Status ) ) { DbgPrint(\"%s\",\"NDIS PacketPool allocate Successn\"); } else { DbgPrint(\"%s\",\"NDIS Packet allocatePool failuren\"); return 0; } NdisAllocateBufferPool(&Status,&BufPoolHandle,2); //申请Buffer池 if( NT_SUCCESS( Status ) ) { DbgPrint(\"%s\",\"NDIS BufferPool allocate Successn\"); } else { DbgPrint(\"%s\",\"NDIS Buffer allocatePool failuren\"); return 0 ; } NdisDprAllocatePacket(&Status, &MyPacket, &PoolHandle); //申请包 NdisAllocateBuffer(&Status,&pNdisBuffer,BufPoolHandle,WritePacketData,45); //申请包空间 NdisChainBufferAtFront(MyPacket, pNdisBuffer); //把包内容链到包里面 pNdisBuffer->Next = NULL; MyPacket->Private.Tail = NULL; NDIS_SET_PACKET_HEADER_SIZE(MyPacket,45); NDIS_SET_PACKET_STATUS(MyPacket,NDIS_STATUS_RESOURCES); NdisSend(&Status, pAdapt->BindingHandle, MyPacket);//把包发送出去 Status=NDIS_GET_PACKET_STATUS(MyPacket); //检查是否成功 if(Status==NDIS_STATUS_SUCCESS) { DbgPrint(\"Status=%s\",\"NDIS_STATUS_SUCCESS\"); } else if(Status==NDIS_STATUS_PENDING) { DbgPrint(\"Status=%s\",\"NDIS_STATUS_PENDING\"); } 请问大侠,这段程序错在什么地方,该怎么改?? [编辑 - 4/22/02 作者: wangzai] |
|
沙发#
发布于:2002-04-22 11:47
pNdisBuffer->Next = NULL;
MyPacket->Private.Tail = NULL; 这两条语句不起作用,另外一般不要对NDIS_PACKET和NDIS_BUFFER的成员属性直接操作,而是通过相关的函数来实现。 |
|
板凳#
发布于:2002-04-22 13:27
既然没作用,应该不是导致重启吧??
|
|
地板#
发布于:2002-04-22 14:48
提一点小建议:最好在每一个函数调用之后都检查一下返回的结果是否正确。
|
|
地下室#
发布于:2002-04-22 17:28
re
|
|
|
5楼#
发布于:2002-04-22 19:49
提一点小建议:最好在每一个函数调用之后都检查一下返回的结果是否正确。 我已经在里面加了很多DbgPrint语句了,我想根本还来不及看输出信息句被重起了!! |
|
6楼#
发布于:2002-04-23 09:47
那就设置断点,一步步调试阿
|
|