MiInitializeMdlPages
_MDL *__stdcall MiInitializeMdlPages(
ULONG_PTR MemoryDescriptorList,
UINT64 Flags,
_MI_PFN_CACHE_ATTRIBUTE CacheAttribute,
UINT64 MdlPageSpan,
UINT64 ZeroingNecessary){
_QWORD *v5;
unsigned __int64 v6;
int v7;
__int64 v8;
__int64 v9;
unsigned __int8 CurrentIrql;
unsigned __int64 v11;
_MDL *result;
INT64 v13;
__int64 v14;
_EPROCESS *Process;
v14 = *(_QWORD *)&MemoryDescriptorList;
v5 = (_QWORD *)(*(_QWORD *)&MemoryDescriptorList + 48i64);
v6 = (unsigned __int64)*(unsigned int *)(*(_QWORD *)&MemoryDescriptorList + 40i64) >> 12;
v7 = Flags;
v8 = *(_QWORD *)&MemoryDescriptorList;
if( (Flags & 0x80000200) != 0 )
v9 = 0i64;
else
v9 = MiSwizzleInvalidPte(128i64);
Process = KeGetCurrentThread()->ApcState.Process;
CurrentIrql = KeGetCurrentIrql();
__writecr8(2ui64);
v11 = 0i64;
if( v6 )
{
do
{
LODWORD(v13) = v7;
MiInitializeMdlLeafPfns((INT64)&MmGetPfnDb()[*v5], 1i64, (UINT64)Process, v9, v13);
if( CurrentIrql < 2u && (v11 & 0xF) == 0 && (unsigned int)KeShouldYieldProcessor() )
{
__writecr8(CurrentIrql);
CurrentIrql = KeGetCurrentIrql();
__writecr8(2ui64);
}
++v11;
++v5;
}
while( v11 < v6 );
v8 = v14;
}
__writecr8(CurrentIrql);
*(_QWORD *)(v8 + 16) = 0i64;
result = (_MDL *)2;
*(_WORD *)(v8 + 10) |= 2u;
return result;
}Referenced by:
MiAllocatePagesForMdl
MiReturnMdlExcess