RtlpTimeFieldsToTime
CHAR __stdcall RtlpTimeFieldsToTime(INT16 *a1, INT64 *a2){
__int64 v3;
unsigned int v4;
INT64 v5;
unsigned int v6;
__int64 *v8;
__int64 v9;
__int64 v10;
int v11[10];
INT64 v12;
v12 = 0i64;
v3 = *(&ExBootDevicesRemovedEvent + 103);
if( !*(&ExBootDevicesRemovedEvent + 103) || !**(&ExBootDevicesRemovedEvent + 103) )
return RtlpTimeFieldsToTimeNoLeapSeconds(a1, a2);
v4 = *(_DWORD *)(*(&ExBootDevicesRemovedEvent + 103) + 4i64);
_InterlockedOr(v11, 0);
if( !RtlpTimeFieldsToTimeNoLeapSeconds(a1, &v12) )
return 0;
v5 = v12;
v6 = 0;
if( !v4 )
goto LABEL_5;
v8 = (__int64 *)(v3 + 8);
while( 1 )
{
v9 = *v8;
if( *v8 >= 0 )
{
if( v5 < v9 + 10000000 )
{
if( v5 < v9 )
goto LABEL_5;
v5 = 2 * v5 - v9;
}
else
{
v5 += 10000000i64;
}
goto LABEL_16;
}
v10 = v9 & 0x7FFFFFFFFFFFFFFFi64;
if( v5 < v10 + 10000000 )
break;
v5 -= 10000000i64;
LABEL_16:
++v6;
++v8;
if( v6 >= v4 )
goto LABEL_5;
}
if( v5 < v10 )
{
LABEL_5:
*a2 = v5;
return 1;
}
return 0;
}Referenced by:
GetBootSystemTime