MiDereferencePageRunsEx
VOID __stdcall MiDereferencePageRunsEx(INT64 a1, INT64 a2){
void *v2;
__int64 v4;
int v5;
__int64 v6;
unsigned __int64 v7;
__int64 v9;
v2 = (void *)(a1 - 16);
v4 = *(_QWORD *)(a1 - 16);
v5 = a2;
v6 = 0i64;
v7 = (unsigned __int8)ExAcquireSpinLockExclusive((INT64 *)(v4 + 200));
if( (*(_QWORD *)(a1 - 8))-- != 1i64 )
v2 = 0i64;
if( v5 )
{
if( (_MI_PARTITION *)v4 != &Irp )
{
ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)(v4 + 200));
__writecr8(v7);
LOBYTE(v7) = ExAcquireSpinLockExclusive((INT64 *)&stru_140C50B28 + 12);
}
if( !--qword_140C50AE8 )
{
v6 = qword_140C50B18;
qword_140C50B18 = 0i64;
}
ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)&stru_140C50B28 + 12);
__writecr8((unsigned __int8)v7);
if( v6 )
{
do
{
v9 = *(_QWORD *)v6;
KeSignalGate((_KGATE *)(v6 + 8), 1i64);
v6 = v9;
}
while( v9 );
}
}
else
{
ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)(v4 + 200));
__writecr8(v7);
}
if( v2 )
ExFreePoolWithTag(v2, 0);
}Referenced by:
MiDeletePartitionResources
MiDeleteZeroThreadContext
MiDereferencePageRuns
MiFindContiguousPages
MiFinishResume
MiMakePartitionMemoryBlock
MiRebuildLargePage
MiUpdatePartitionMemory
MiWaitForFreePagesToZero