MmUnmapReservedMapping
NTSTATUS __fastcall MmUnmapReservedMapping(UINT64 a1, UINT64 a2, INT64 a3){
unsigned __int64 v4;
unsigned int v6;
unsigned __int64 BugCheckParameter4;
unsigned __int8 v8;
__int64 *v9;
UINT64 v10;
unsigned __int64 v11;
UINT64 v12;
unsigned __int64 v13;
char *v14;
char *v15;
unsigned __int64 i;
__int64 v17;
__int64 v18;
v4 = (unsigned int)a2;
if( (*(_WORD *)(a3 + 10) & 0x200) != 0 )
{
MiRetardMdl((_MDL *)a3);
a1 -= v6;
}
BugCheckParameter4 = (((*(_DWORD *)(a3 + 32) + *(_DWORD *)(a3 + 44)) & 0xFFF)
+ (unsigned __int64)*(unsigned int *)(a3 + 40)
+ 4095) >> 12;
v8 = ExAcquireSpinLockShared((INT64 *)&stru_140C4DB30 + 442);
v9 = (__int64 *)*(&stru_140C4DB30 + 443);
v10 = a1 & 0xFFFFFFFFFFFFF000ui64;
v11 = v8;
while( 1 )
{
while( 1 )
{
if( !v9 )
KeBugCheckEx(0xDAu, (PVOID)0x106, (PVOID)a1, (PVOID)v4, (PVOID)2);
v12 = v9[3];
if( v10 >= v12 )
break;
v9 = (__int64 *)*v9;
}
if( v10 < v12 + (v9[4] << 12) )
break;
v9 = (__int64 *)v9[1];
}
ExReleaseSpinLockSharedFromDpcLevel((PEX_SPIN_LOCK)&stru_140C4DB30 + 884);
__writecr8(v11);
if( *((_DWORD *)v9 + 10) != (_DWORD)v4 )
KeBugCheckEx(0xDAu, (PVOID)0x102, (PVOID)a1, (PVOID)v4, (PVOID)BugCheckParameter4);
v13 = v9[4];
if( (*((_DWORD *)v9 + 11) & 1) != 0 )
v13 -= (a1 - v9[3]) >> 12;
else
a1 = v9[3];
if( BugCheckParameter4 > v13 )
KeBugCheckEx(0xDAu, (PVOID)0x10A, (PVOID)a1, (PVOID)v9[4], (PVOID)BugCheckParameter4);
MiUnmapMdlCommon(a1, 0i64, (unsigned int)v4, a3, BugCheckParameter4);
if( (*((_DWORD *)v9 + 11) & 1) == 0 )
{
v14 = (char *)MmGetPteBase() + ((a1 >> 9) & 0x7FFFFFFFF8i64);
v15 = &v14[8 * v9[4]];
for( i = (unsigned __int64)&v14[8 * BugCheckParameter4]; i < (unsigned __int64)v15; i += 8i64 )
{
LODWORD(v17) = MI_READ_PTE_LOCK_FREE(i);
if( v17 )
KeBugCheckEx(0xDAu, (PVOID)0x10C, (PVOID)a1, (PVOID)v4, (PVOID)BugCheckParameter4);
}
}
*(_WORD *)(a3 + 10) &= 0xFFDEu;
LODWORD(v18) = *(unsigned __int16 *)(a3 + 10);
if( (v18 & 4) != 0 )
{
v18 = *(_QWORD *)(a3 + 32) + *(unsigned int *)(a3 + 44);
*(_QWORD *)(a3 + 24) = v18;
}
return v18;
}Referenced by:
EtwpSavePersistedLogger
HalpDmaFlushBufferWithEmergencyResources
HalpDmaReleaseBufferMappings
HalpDmaSyncMapBuffersWithEmergencyResources
PnprCopyReservedMapping
PnprMapPhysicalPages
PnprSwap
PspIumFreePhysicalPages
SmFpFree
sub_1403E9150