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.