WheaUnconfigureErrorSource

NTSTATUS __stdcall WheaUnconfigureErrorSource(UINT64 a1){
  _EX_PUSH_LOCK *v1; 
  NTSTATUS v2; 
  _BYTE *v3; 
  _BYTE *v4; 
  _BYTE *v5; 

  if( (unsigned int)a1 > 0x10 )
    return -1073741811;
  v1 = (_EX_PUSH_LOCK *)((char *)&stru_140CF2E80 + 64 * (__int64)(int)a1 + 5312);
  v2 = -1073741823;
  v3 = KeAbPreAcquire((char *)&WheapDeferredInternalLogsEventLock + 192, 0i64, 0i64);
  if( _InterlockedCompareExchange64((_QWORD *)&WheapDeferredInternalLogsEventLock + 24, 17i64, 0i64) )
    ExfAcquirePushLockSharedEx(
      (_EX_PUSH_LOCK *)&WheapDeferredInternalLogsEventLock + 24,
      v3,
      (char *)&WheapDeferredInternalLogsEventLock + 192);
  if( v3 )
    v3[26] |= 1u;
  v4 = KeAbPreAcquire(v1, 0i64, 0i64);
  v5 = v4;
  if( _interlockedbittestandset64((volatile signed __int32 *)v1, 0i64) )
    ExfAcquirePushLockExclusiveEx(v1, v4, v1);
  if( v5 )
    v5[26] |= 1u;
  if( LOBYTE(v1[1]._bf_0) )
  {
    LOBYTE(v1[1]._bf_0) = 0;
    v1[2]._bf_0 = (__int64)HalSystemVectorDispatchEntry;
    v1[3]._bf_0 = (__int64)xHalPciEarlyRestore;
    v1[4]._bf_0 = (__int64)WheapDefaultErrSrcCreateRecord;
    v1[5]._bf_0 = (__int64)HalSystemVectorDispatchEntry;
    v1[6]._bf_0 = (__int64)xHalTimerWatchdogStop;
    v1[7]._bf_0 = 0i64;
  }
  if( (_InterlockedExchangeAdd64(&v1->_bf_0, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
    ExfTryToWakePushLock(v1);
  KeAbPostRelease(v1);
  if( _InterlockedCompareExchange64((_QWORD *)&WheapDeferredInternalLogsEventLock + 24, 0i64, 17i64) != 17 )
    ExfReleasePushLockShared((_EX_PUSH_LOCK *)&WheapDeferredInternalLogsEventLock + 24);
  KeAbPostRelease((char *)&WheapDeferredInternalLogsEventLock + 192);
  return v2;
}

Referenced by:

No references.