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