MmCreateMdl

MDL *__stdcall MmCreateMdl(MDL *MemoryDescriptorList, PVOID Base, UINT64 a3){
  MDL *v5; 
  __int16 v6; 
  MDL *v7; 
  MDL *result; 
  v5 = MemoryDescriptorList;
  if( a3 >= 0x100000000i64 )
    return 0i64;
  v6 = (__int16)Base;
  if( !MemoryDescriptorList )
  {
    LODWORD(v7) = MiAllocatePool((struct _SLIST_ENTRY *)0x40);
    v5 = v7;
    if( !v7 )
      return 0i64;
  }
  v5->Next = 0i64;
  v5->MdlFlags = 0;
  v5->ByteCount = a3;
  v5->StartVa = (void *)((unsigned __int64)Base & 0xFFFFFFFFFFFFF000ui64);
  result = v5;
  v5->Size = 8 * ((((v6 & 0xFFF) + a3 + 4095) >> 12) + 6);
  v5->ByteOffset = v6 & 0xFFF;
  return result;
}

Referenced by:

MiLockRetpolineStubs
MiPfAllocateMdls
SmKmStoreFileWriteHeader