MiDecrementHugeContext

NTSTATUS __stdcall MiDecrementHugeContext(PVOID P){
  NTSTATUS result; 
  _MI_ZERO_THREAD_CONTEXT *v2; 
  bool v3; 
  _MI_ZERO_THREAD_CONTEXT *v4; 
  __int64 *v6; 
  __int64 v7; 
  __int64 **v8; 
  __int64 v9; 
  unsigned __int64 v10; 
  __int64 v11; 

  v3 = (*((_DWORD *)P + 47))-- == 1;
  v4 = v2;
  if( v3 )
  {
    v6 = (__int64 *)((char *)P + 72);
    v7 = *v6;
    if( *v6 )
    {
      v8 = (__int64 **)v6[1];
      if( *(__int64 **)(v7 + 8) != v6 || *v8 != v6 )
        __fastfail(3u);
      *v8 = (__int64 *)v7;
      *(_QWORD *)(v7 + 8) = v8;
      if( *((_DWORD *)P + 48) != 512 )
      {
        if( !*((_BYTE *)P + 69) )
        {
          v9 = *((_QWORD *)P + 3);
          if( v9 )
          {
            v10 = MiLockPageInline(*((_MMPFN **)P + 3));
            *(_BYTE *)(v9 + 34) &= ~8u;
            v11 = *(_QWORD *)(v9 + 16);
            *(_QWORD *)(v11 + 24) = 0i64;
            *(_BYTE *)(v11 + 69) = 1;
            *(_QWORD *)(v9 + 16) = MiSwizzleInvalidPte(128i64);
            _InterlockedAnd64((volatile signed __int64 *)(v9 + 24), 0x7FFFFFFFFFFFFFFFui64);
            __writecr8(v10);
          }
        }
        if( v4 )
          MiReleaseLargeZeroingVa(v4);
      }
    }
    if( *((_BYTE *)P + 68) )
      MiRemoveFaultNode((_MI_LIST_THREAD_CONTEXT *)P);
    return(unsigned int)ExFreePoolWithTag(P, 0);
  }
  return result;
}

Referenced by:

MiDereferenceAnyActiveHugeContext
MiGetHugePageToZero
MiGetUltraHugeAlreadyActive
MiZeroLargePageThread