PopFxTransitionCriticalResource

VOID __stdcall PopFxTransitionCriticalResource(POHANDLE *Handle, UINT64 Component, UINT8 Active, UINT64 a4){
  unsigned int v5; 
  unsigned int v6; 
  UINT64 v7; 
  UINT64 v8; 
  signed __int32 v9; 
  signed __int32 v10; 
  v5 = Component;
  v6 = Active;
  v7 = *((_QWORD *)Handle[104] + (unsigned int)Component);
  v8 = v7 + 88;
  v9 = _InterlockedCompareExchange((volatile signed __int32 *)(v7 + 92), 0, 0);
  if( (_BYTE)v6 )
  {
    if( (v9 & 1) == 0 )
      PopFxBugCheck(0x606ui64, v7, *(int *)(v7 + 92), v6);
    v10 = v9 & 0xFFFFFFFE;
  }
  else
  {
    if( (v9 & 1) != 0 )
      PopFxBugCheck(0x606ui64, v7, *(int *)(v7 + 92), 0i64);
    v10 = v9 | 1;
  }
  if( v9 != _InterlockedCompareExchange((volatile signed __int32 *)(v7 + 92), v10, v9) )
    PopFxBugCheck(0x606ui64, v7, v8, v10);
  LOBYTE(v8) = v6;
  ((void(__fastcall *)(POHANDLE, _QWORD, UINT64, UINT64))Handle[20])(Handle[24], v5, v8, a4);
}

Referenced by:

No references.