阅读:1313回复:3
这段收包的代码有问题么
PUCHAR in = (PUCHAR)I.IoctlBuffer();
//指定堆栈为当前堆栈 EStackLocation s = CURRENT; //获取输入缓冲区的长度 UINT size = I.IoctlInputBufferSize(s); for(UINT i = 0; i< size; i++) { recData[ i ] = in[ i ]; } //产生一个收包信号 if(pAdapter != NULL) { //pAdapter是指向当前Adapter的指针 NdisMEthIndicateReceive(*pAdapter, pAdapter, (PCHAR)recData, ETHE_HEADER_LEN, (PCHAR)recData + ETHE_HEADER_LEN, size - ETHE_HEADER_LEN, size - ETHE_HEADER_LEN); NdisMEthIndicateReceiveComplete(*pAdapter); } else { TRACE("receive packet failed!"); } |
|
沙发#
发布于:2005-07-27 15:39
1。drivernetwork作了很多封装,一旦出问题,就不太好定位。
2。这种问题,你先检查你的数据包的格式对不对。 |
|
板凳#
发布于:2005-07-28 20:34
NdisMEthIndicateReceive用ddk来写,第一个参数是pAdapt->MiniportHandle,你在drivernetwork 中用
*pAdapter来表示这个参数,和ddk是表示同一个含义吗?如果不是,肯定是有问题 |
|
地板#
发布于:2005-07-28 20:57
应改不是这个问题吧
KNdisMiniAdapter的基类KObject定义了对 * 的重载 是这样的: // Retrieve "context" (the object pointer itself) inline PVOID Context() const { return this; } // Retrieve pointer to the handle (for friendly classes which might assign indirectly) inline Handle_t* HandlePTR() { return &m_Handle; } 而且在KNdisMiniAdapter成员函数SetAttributesEx里是这样调用的 NdisMSetAttributesEx(*this, this, CheckForHangTimeInSeconds, AttributeFlags, AdapterType); |
|