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