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