阅读:1072回复:1
MDL->Next
我想把mdl捣鼓的大一些,但ifs-ddk上说缓存的长度是有限制的,可我确实要写入大于极限长度的数据块该咋办啊?
下面是我想出的两招: 1.多发个irp,好像会宕机 2.我发现mdl有个next字段,打了它好长时间的主意也没成功,这是不是形成mdl链的字段啊? 我的部分代码入下: IRP_MJ_WRITE: // 目标:把原有内容复制一份, 最加在后面 OriginBuffer = (PCHAR)MmGetSystemAddressForMdl( Irp->MdlAddress ); OriginSize = MmGetMdlByteCount( Irp->MdlAddress ); currentIrpStack->Parameters.Write.Length *= 2; ReplaceSize = OriginSize; ReplaceBuffer1 = ExAllocatePool( NonPagedPool, ReplaceSize); RtlZeroMemory( ReplaceBuffer1, ReplaceSize ); ReplaceBuffer2= ExAllocatePool( NonPagedPool, ReplaceSize); RtlZeroMemory( ReplaceBuffer2, ReplaceSize ); RtlCopyMemory( ReplaceBuffer1, OriginBuffer, OriginSize ); RtlCopyMemory( ReplaceBuffer2, OriginBuffer, OriginSize ); Irp->MdlAddress = NULL; ReplaceMdl1 = IoAllocateMdl( ReplaceBuffer1, OriginSize, FALSE, FALSE, Irp ); ReplaceMdl2 = IoAllocateMdl( ReplaceBuffer2, OriginSize, TRUE , FALSE, Irp ); MmBuildMdlForNonPagedPool( ReplaceMdl ); MmBuildMdlForNonPagedPool( ReplaceMdl2 ); Irp->UserBuffer = MmGetMdlVirtualAddress( ReplaceMdl ); // 至此Irp->MdlAddress->Next已经有值, 但系统好像没写入Irp->MdlAddress->Next中的东东啊??? 各路神仙帮帮我!!! |
|
沙发#
发布于:2004-11-01 14:39
我想把mdl捣鼓的大一些,但ifs-ddk上说缓存的长度是有限制的,可我确实要写入大于极限长度的数据块该咋办啊? |
|
|