HalpAcquireCmosSpinLock
INT64 __fastcall HalpAcquireCmosSpinLock(INT64 a1, INT64 a2, INT64 a3){
unsigned int v3;
__int64 v4;
INT64 result;
__int16 v6;
v3 = 0;
while( 1 )
{
_disable();
LODWORD(a1) = *((_DWORD *)KeGetPcr() + 105);
v4 = v6 & 0x200;
LOBYTE(a3) = (v6 & 0x200) != 0;
result = (unsigned int)_InterlockedCompareExchange(&HalpSystemHardwareLock, a1, -1);
if( (_DWORD)result == -1 )
break;
if( (v6 & 0x200) != 0 )
_enable();
while( HalpSystemHardwareLock != -1 )
{
if( HalpRebootNow )
HalpRebootNow(a1, v4, a3);
if( (++v3 & dword_140C4A13C) != 0 || !qword_140C4A140 )
_mm_pause();
else
qword_140C4A140(v3, v4, a3);
}
}
LOBYTE(HalpSystemHardwareLockInterruptsEnabled) = (v6 & 0x200) != 0;
return result;
}Referenced by:
HalGetEnvironmentVariable
HalMakeBeep
HalReturnToFirmware
HalSetEnvironmentVariable
HalpAcquireCmosSpinLockAndWait
HalpGetSetCmosData
HalpReadRtcStdPCAT
HalpReadStdCmosData
HalpSetClockAfterSleep
HalpSetClockBeforeSleep
HalpWriteRtcStdPCAT
HalpWriteStdCmosData
x86BiosReadCmosPortByte
x86BiosWriteCmosPortByte