PopCreateDumpMdl
VOID __stdcall PopCreateDumpMdl(_POP_HIBER_CONTEXT *HiberContext, _MDL *Mdl, UINT64 StartPage, UINT64 EndPage){
__int64 Number;
UINT64 MaxDataPages;
_MDL *v7;
Number = KeGetCurrentPrcb()->Number;
if( StartPage >= EndPage )
PopInternalError((PVOID)0xA147F);
MaxDataPages = EndPage - StartPage;
if( MaxDataPages >= HiberContext->MaxDataPages )
MaxDataPages = HiberContext->MaxDataPages;
Mdl->Next = 0i64;
Mdl->MdlFlags = 0;
Mdl->StartVa = 0i64;
Mdl->Size = 8 * (MaxDataPages + 6);
v7 = Mdl + 1;
for( *(_QWORD *)&Mdl->ByteCount = (unsigned int)((_DWORD)MaxDataPages << 12); MaxDataPages; --MaxDataPages )
{
v7->Next = (_MDL *)StartPage++;
v7 = (_MDL *)((char *)v7 + 8);
}
MmMapMemoryDumpMdlEx(
(UINT64)HiberContext->ProcessorContext[Number].MappingVa,
HiberContext->MaxDataPages,
(INT64)Mdl,
0i64);
if( (Mdl->ByteCount & 0xFFF) != 0 )
{
PopInternalAddToDumpFile(Mdl, 0x30ui64, 0i64);
KeBugCheckEx(0xA0u, (PVOID)0x106, (PVOID)0xA, Mdl, 0i64);
}
}Referenced by:
PopSaveHiberContext