MmCreateMdl

_MDL *__stdcall MmCreateMdl(_MDL *MemoryDescriptorList, VOID *Base, UINT64 Length){
  _MDL *Pool; 
  __int16 v6; 
  _MDL *result; 

  Pool = MemoryDescriptorList;
  if( Length >= 0x100000000i64 )
    return 0i64;
  v6 = (__int16)Base;
  if( !MemoryDescriptorList )
  {
    Pool = (_MDL *)MiAllocatePool(
                     64i64,
                     8 * ((((unsigned __int16)Base & 0xFFF) + Length + 4095) >> 12) + 48,
                     0x6C646D4Dui64);
    if( !Pool )
      return 0i64;
  }
  Pool->Next = 0i64;
  Pool->MdlFlags = 0;
  Pool->ByteCount = Length;
  Pool->StartVa = (void *)((unsigned __int64)Base & 0xFFFFFFFFFFFFF000ui64);
  result = Pool;
  Pool->Size = 8 * ((((v6 & 0xFFF) + Length + 4095) >> 12) + 6);
  Pool->ByteOffset = v6 & 0xFFF;
  return result;
}

Referenced by:

MiLockRetpolineStubs
MiPfAllocateMdls
SmKmStoreFileWriteHeader