MmMapMdl
__int64 __fastcall MmMapMdl(__int64 a1, unsigned int a2, void (__fastcall *a3)(__int64, unsigned __int64), __int64 a4){
struct _SLIST_ENTRY *v5;
void(__fastcall *v6)(__int64, _QWORD);
__int64 v7;
unsigned int ProtectionMask;
unsigned __int64 v10;
unsigned int v11;
_MMPTE *PteBase;
PSLIST_ENTRY UltraMdlContext;
INT64 v14;
void *v15;
int v16;
CHAR v17;
CHAR v18;
__int64 v19;
INT64 v20;
int a6;
int v22;
a6 = 0;
v5 = 0i64;
ProtectionMask = MiMakeProtectionMask(a2);
if( ProtectionMask == -1
|| ProtectionMask == 24
|| (ProtectionMask & 7) == 5
|| (ProtectionMask & 2) != 0
|| (ProtectionMask & 0xFFFFFFF8) == 16 )
{
return 3221225541i64;
}
if( (*(_BYTE *)(a1 + 10) & 5) != 0 )
{
v6(v7, *(_QWORD *)(a1 + 24));
return 0i64;
}
else
{
v10 = (((*(_DWORD *)(a1 + 44) + *(_DWORD *)(a1 + 32)) & 0xFFF) + (unsigned __int64)*(unsigned int *)(a1 + 40) + 4095) >> 12;
v11 = v10;
if( MmProtectFreedNonPagedPool == 1 )
v11 = v10 + 1;
PteBase = MmGetPteBase();
if( v11 <= 0x200
&& (UltraMdlContext = MiGetUltraMdlContext(), (v5 = UltraMdlContext) != 0i64)
&& (v14 = (INT64)PteBase
+ (((unsigned __int64)MiGetUltraMapping((unsigned __int64 *)&UltraMdlContext->Next + 1, 3u, v11, 0) >> 9) & 0x7FFFFFFFF8i64)) != 0
|| (v14 = MiReservePtes((INT64)&qword_140C4EC80, v11)) != 0 )
{
v15 = (void *)(*(unsigned int *)(a1 + 44) + (((v14 << 25) - ((_QWORD)PteBase << 25)) >> 16));
LODWORD(v20) = 0;
v22 = MiFillSystemPtes(v14, v10, a1 + 48, ProtectionMask, v20, (INT64)&a6);
if( v22 >= 0 )
{
v16 = a6 & 1;
if( (a6 & 1) != 0 )
{
MiMappingHasIoReferences(v15);
*(_WORD *)(a1 + 10) |= 0x800u;
}
if( (dword_140CFA17C & 1) != 0 )
{
v17 = MiProtectionToCacheAttribute(ProtectionMask);
MiInsertPteTracker(a1, 0i64, v18, v17);
}
v22 = 0;
a3(a4, (unsigned __int64)v15);
if( v16 )
MiZeroAndFlushPtes((unsigned __int64)v15, v10);
}
if( v5 )
{
if( v11 )
{
v19 = v11;
do
{
*(_QWORD *)v14 = ZeroPte;
v14 += 8i64;
--v19;
}
while( v19 );
}
MiFreeUltraMdlContext(v5);
v14 = 0i64;
}
if( v14 )
MiReleasePtes((INT64)&qword_140C4EC80, v14, v11);
return(unsigned int)v22;
}
else
{
return 3221225626i64;
}
}
}Referenced by:
No references.