ExpUpdateTimerResolution

UINT64 __stdcall ExpUpdateTimerResolution(UINT8 SetResolution, UINT64 DesiredTime, UINT8 *KernelRequestIrql){
  UINT8 v4; 
  UINT8 v5; 
  int v6; 
  UINT64 result; 
  __int64 *i; 
  UINT64 DesiredTimeIncrement; 

  LODWORD(DesiredTimeIncrement) = DesiredTime;
  if( KernelRequestIrql )
  {
    v5 = *KernelRequestIrql;
  }
  else
  {
    v4 = KeAcquireSpinLockRaiseToDpc((UINT64 *)&ExBootDevicesRemovedEvent + 98);
    LODWORD(DesiredTime) = DesiredTimeIncrement;
    v5 = v4;
  }
  if( SetResolution )
  {
    if( (unsigned int)DesiredTime >= (unsigned int)ExpLastRequestedTime
      || (unsigned int)KeMaximumIncrement <= (unsigned int)DesiredTime )
    {
LABEL_17:
      KxReleaseSpinLock((UINT64 *)&ExBootDevicesRemovedEvent + 98);
      __writecr8(v5);
      return(unsigned int)KeTimeIncrement;
    }
  }
  else
  {
    LODWORD(DesiredTime) = KeMaximumIncrement;
    LODWORD(DesiredTimeIncrement) = KeMaximumIncrement;
    if( *(&ExBootDevicesRemovedEvent + 204) )
    {
      if( *(&ExBootDevicesRemovedEvent + 205) < (unsigned int)KeMaximumIncrement )
        LODWORD(DesiredTime) = *(&ExBootDevicesRemovedEvent + 205);
      LODWORD(DesiredTimeIncrement) = DesiredTime;
    }
    for( i = (__int64 *)*(&ExBootDevicesRemovedEvent + 100);
          i != (__int64 *)((char *)&ExBootDevicesRemovedEvent + 800);
          i = (__int64 *)*i )
    {
      if( (*((_DWORD *)i - 239) & 0x1000) != 0 && *((_DWORD *)i + 6) < (unsigned int)DesiredTime )
      {
        if( (*((_DWORD *)i + 23) & 0x4000000) == 0 )
          LODWORD(DesiredTime) = *((_DWORD *)i + 6);
        LODWORD(DesiredTimeIncrement) = DesiredTime;
      }
    }
  }
  if( (unsigned int)DesiredTime < KeMinimumIncrement )
    LODWORD(DesiredTime) = KeMinimumIncrement;
  LODWORD(DesiredTimeIncrement) = DesiredTime;
  if( (_DWORD)DesiredTime == (_DWORD)ExpLastRequestedTime )
    goto LABEL_17;
  v6 = KeTimeIncrement;
  LODWORD(ExpLastRequestedTime) = DesiredTime;
  KxReleaseSpinLock((UINT64 *)&ExBootDevicesRemovedEvent + 98);
  __writecr8(v5);
  ExpUpdateTimerConfiguration(&DesiredTimeIncrement, 0i64, 0i64);
  result = (unsigned int)DesiredTimeIncrement;
  if( v6 != (_DWORD)DesiredTimeIncrement )
  {
    PoTraceSystemTimerResolutionUpdate();
    return(unsigned int)DesiredTimeIncrement;
  }
  return result;
}

Referenced by:

ExSetTimerResolution
NtSetTimerResolution
PspSetProcessPpmPolicy