MiCreateMdl
_MDL *__stdcall MiCreateMdl(UINT64 NumberOfBytes){
unsigned int v1;
UINT64 v2;
int v3;
unsigned int v4;
UINT64 v5;
unsigned int v6;
_MDL *Mdl;
_MDL *v9;
UINT64 v10;
_MDL *v11;
_MDL *v12;
VOID *MappedSystemVa;
VOID *Pool;
void *v16;
_MDL *v17;
UINT64 v18;
UINT64 Priority;
v4 = v2;
v5 = v2 >> 12;
v6 = v1;
if( v3 )
{
Mdl = IoAllocateMdl(0i64, (unsigned int)v2, 0, 0, 0i64);
v9 = Mdl;
if( Mdl )
{
v10 = 0i64;
v11 = Mdl + 1;
if( v5 )
{
while( 1 )
{
MiGetPageForHeader((_MI_PARTITION *)NumberOfBytes, v6);
if( v12 == (_MDL *)-1i64 )
break;
if( !v10 )
v9->MdlFlags |= 0x4002u;
v11->Next = v12;
++v10;
v11 = (_MDL *)((char *)v11 + 8);
if( v10 >= v5 )
goto LABEL_8;
}
v9->ByteCount = (_DWORD)v10 << 12;
goto LABEL_16;
}
LABEL_8:
if( (v9->MdlFlags & 5) != 0 )
{
MappedSystemVa = v9->MappedSystemVa;
}
else
{
LODWORD(Priority) = 1073741856;
LODWORD(v18) = 0;
MappedSystemVa = MmMapLockedPagesSpecifyCache(v9, 0, MmCached, 0i64, v18, Priority);
}
if( !MappedSystemVa )
{
LABEL_16:
MiDeleteImageCreationMdls(v9);
return 0i64;
}
return v9;
}
}
else
{
Pool = MiAllocatePool(64i64, v2, 0x78786D4Dui64);
v16 = Pool;
if( Pool )
{
v17 = IoAllocateMdl(Pool, v4, 0, 0, 0i64);
v9 = v17;
if( !v17 )
{
ExFreePoolWithTag(v16, 0);
return 0i64;
}
MmBuildMdlForNonPagedPool(v17);
v9->MdlFlags |= 0x4000u;
return v9;
}
}
return 0i64;
}Referenced by:
MiCreateImageFileMap