HalpSfiTimerArm

NTSTATUS __fastcall HalpSfiTimerArm(PVOID TimerData, INT64 a2, UINT64 a3){
  int v3; 
  _DWORD *v5; 
  unsigned int v6; 
  unsigned int i; 
  unsigned int v8; 
  signed __int32 v10[10]; 

  v3 = a3;
  if( a3 > 0xFFFFFFFF || (unsigned int)(a2 - 2) > 1 )
  {
    HalSetTimerProblem(TimerData);
    return -1073741811;
  }
  else
  {
    v5 = (_DWORD *)*((_QWORD *)TimerData + 1);
    v6 = 0;
    for( i = 0; i < 0x64; ++i )
    {
      if( (v5[4] & 1) == 0 )
        break;
      KeStallExecutionProcessor(0x32u);
    }
    if( i == 100 )
      goto LABEL_12;
    v5[2] = v5[2] & 0xFFFFFFFA | 4;
    _InterlockedOr(v10, 0);
    v5[2] |= 2u;
    _InterlockedOr(v10, 0);
    *v5 = v3;
    _InterlockedOr(v10, 0);
    v5[2] = v5[2] & 0xFFFFFFFA | 1;
    _InterlockedOr(v10, 0);
    v8 = v5[1];
    do
    {
      if( v8 > v5[1] )
        break;
      KeStallExecutionProcessor(0x32u);
      ++v6;
    }
    while( v6 < 0x64 );
    if( v6 == 100 )
    {
LABEL_12:
      HalSetTimerProblem(TimerData);
      return -1073741823;
    }
    else
    {
      return 0;
    }
  }
}

Referenced by:

No references.