HalEfiSetTime
NTSTATUS __stdcall HalEfiSetTime(_LARGE_INTEGER *a1){
NTSTATUS result;
UINT64 v3;
_LARGE_INTEGER v4;
UINT64 v5;
_WORD v6[8];
_LARGE_INTEGER v7;
__int128 v8;
v8 = 0i64;
*(_OWORD *)v6 = 0i64;
if( !HalEfiRuntimeServicesTable || !*HalEfiRuntimeServicesTable || !HalEfiRuntimeServicesTable[1] )
return -1073741822;
if( !a1 )
return -1073741811;
_InterlockedIncrement(&dword_140C49EC8);
HalpEfiStartRuntimeCode(1ui64);
v3 = ((__int64(__fastcall *)(__int128 *, _QWORD))*HalEfiRuntimeServicesTable)(&v8, 0i64);
_InterlockedAnd((volatile signed __int32 *)&KeGetPcr()->HalReserved[8], 0xFFFFFFFE);
_InterlockedDecrement(&dword_140C49EC8);
result = HalpConvertEfiToNtStatus(v3);
if( result >= 0 )
{
if( (unsigned __int64)(SWORD6(v8) + 1440i64) > 0xB40 )
{
if( *(&stru_140CF2E80 + 1829) )
{
v7 = *a1;
WORD6(v8) = 0;
}
else
{
WORD6(v8) = *(_QWORD *)&KUSER_SHARED_DATA.TimeZoneBias.LowPart / 0x23C34600ui64;
v7.QuadPart = a1->QuadPart
- PsGetCurrentServerSiloGlobals(*(_KSPIN_LOCK **)&KUSER_SHARED_DATA.TimeZoneBias.LowPart)->ExTimeZoneState->TimeZoneBias.QuadPart;
if( KUSER_SHARED_DATA.TimeZoneId )
{
if( KUSER_SHARED_DATA.TimeZoneId == 1 )
{
BYTE14(v8) = 1;
}
else if( KUSER_SHARED_DATA.TimeZoneId == 2 )
{
BYTE14(v8) = 3;
}
goto LABEL_12;
}
}
BYTE14(v8) = 0;
}
else
{
v7.QuadPart = a1->QuadPart - 600000000i64 * SWORD6(v8);
}
LABEL_12:
RtlpTimeToTimeFields(&v7, v6, v4);
LOWORD(v8) = v6[0];
BYTE2(v8) = v6[1];
BYTE3(v8) = v6[2];
BYTE4(v8) = v6[3];
BYTE5(v8) = v6[4];
BYTE6(v8) = v6[5];
DWORD2(v8) = 1000000 * v6[6];
_InterlockedIncrement(&dword_140C49EC8);
_InterlockedIncrement(&dword_140C49ED8);
HalpEfiStartRuntimeCode(2ui64);
v5 = ((__int64(__fastcall *)(__int128 *))HalEfiRuntimeServicesTable[1])(&v8);
_InterlockedAnd((volatile signed __int32 *)&KeGetPcr()->HalReserved[8], 0xFFFFFFFD);
_InterlockedDecrement(&dword_140C49ED8);
_InterlockedDecrement(&dword_140C49EC8);
return HalpConvertEfiToNtStatus(v5);
}
return result;
}Referenced by:
HalSetRealTimeClock