这个实例在src|network|ndis|packet
问题一:
read.c的中一段代码如下
//
// Allocate an MDL to map the portion of the buffer following the
// header
//
pMdl=IoAllocateMdl(
MmGetMdlVirtualAddress(irp->MdlAddress),
MmGetMdlByteCount(irp->MdlAddress),
FALSE,
FALSE,
NULL
);
if (pMdl == NULL) {
DebugPrint(("Packet: Read-Failed to allocate Mdl\n"));
status = NDIS_STATUS_RESOURCES;
goto ERROR;
} //
// Build the mdl to point to the the portion of the buffer following
// the header
//
IoBuildPartialMdl(
irp->MdlAddress,
pMdl,
((PUCHAR)MmGetMdlVirtualAddress(irp->MdlAddress))+ETHERNET_HEADER_LENGTH,
0
);
问题在执行
pMdl=IoAllocateMdl(
MmGetMdlVirtualAddress(irp->MdlAddress),
MmGetMdlByteCount(irp->MdlAddress),
FALSE,
FALSE,
NULL
);
之后,pMdl描述的是就是irp->MdlAddress描述的内存块,而
IoBuildPartialMdl(
irp->MdlAddress,
pMdl,
((PUCHAR)MmGetMdlVirtualAddress(irp->MdlAddress))+ETHERNET_HEADER_LENGTH,
0
);
之后,pMdl描述的是从以太网头(ETHERNET_HEADER)后面开始内存段,所以pMdl的MdlByteCount应当要减去
ETHERNET_HEADER_LENGTH,所以我觉得这里有问题,代码应当改成这样。
pMdl=IoAllocateMdl(
(PVOID)((PUCHAR)MmGetMdlVirtualAddress(irp->MdlAddress)+ETHERNET_HEADER_LENGTH),
MmGetMdlByteCount(irp->MdlAddress)-ETHERNET_HEADER_LENGTH,
FALSE,
FALSE,
NULL
);
而去掉
IoBuildPartialMdl(
irp->MdlAddress,
pMdl,
((PUCHAR)MmGetMdlVirtualAddress(irp->MdlAddress))+ETHERNET_HEADER_LENGTH,
0
);
但是这样做之后,我用测试程序测试时执行命令adapter|read后系统突然重起。
请高手指点,我这样做是否合理
问题一:
read.c的中一段代码如下
//
// Allocate an MDL to map the portion of the buffer following the
// header
//
pMdl=IoAllocateMdl(
MmGetMdlVirtualAddress(irp->MdlAddress),
MmGetMdlByteCount(irp->MdlAddress),
FALSE,
FALSE,
NULL
);
if (pMdl == NULL) {
DebugPrint(("Packet: Read-Failed to allocate Mdl\n"));
status = NDIS_STATUS_RESOURCES;
goto ERROR;
} //
// Build the mdl to point to the the portion of the buffer following
// the header
//
IoBuildPartialMdl(
irp->MdlAddress,
pMdl,
((PUCHAR)MmGetMdlVirtualAddress(irp->MdlAddress))+ETHERNET_HEADER_LENGTH,
0
);
问题在执行
pMdl=IoAllocateMdl(
MmGetMdlVirtualAddress(irp->MdlAddress),
MmGetMdlByteCount(irp->MdlAddress),
FALSE,
FALSE,
NULL
);
之后,pMdl描述的是就是irp->MdlAddress描述的内存块,而
IoBuildPartialMdl(
irp->MdlAddress,
pMdl,
((PUCHAR)MmGetMdlVirtualAddress(irp->MdlAddress))+ETHERNET_HEADER_LENGTH,
0
);
之后,pMdl描述的是从以太网头(ETHERNET_HEADER)后面开始内存段,所以pMdl的MdlByteCount应当要减去
ETHERNET_HEADER_LENGTH,所以我觉得这里有问题,代码应当改成这样。
pMdl=IoAllocateMdl(
(PVOID)((PUCHAR)MmGetMdlVirtualAddress(irp->MdlAddress)+ETHERNET_HEADER_LENGTH),
MmGetMdlByteCount(irp->MdlAddress)-ETHERNET_HEADER_LENGTH,
FALSE,
FALSE,
NULL
);
而去掉
IoBuildPartialMdl(
irp->MdlAddress,
pMdl,
((PUCHAR)MmGetMdlVirtualAddress(irp->MdlAddress))+ETHERNET_HEADER_LENGTH,
0
);
但是这样做之后,我用测试程序测试时执行命令adapter|read后系统突然重起。
请高手指点,我这样做是否合理
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货