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