PopGetPowerSettingValue

NTSTATUS __stdcall PopGetPowerSettingValue(
        _GUID *SettingGuid,
        _SYSTEM_POWER_CONDITION PowerState,
        VOID *Buffer,
        VOID *ReturnedLength,
        UINT64 BufferLength,
        UINT64 *ReturnedLengtha){
  signed int v8; 
  _POP_POWER_SETTING_CONFIGURATION *PowerSettingConfiguration; 
  NTSTATUS v10; 
  __int64 v11; 
  size_t v12; 

  v8 = (int)Buffer;
  ExAcquireFastMutex((PFAST_MUTEX)((char *)&stru_140C23628 + 3000));
  if( (unsigned int)v8 > 1 )
    v8 = *(&stru_140C23628 + 441);
  PowerSettingConfiguration = PopFindPowerSettingConfiguration(SettingGuid, 0xFFFFFFFFui64);
  v10 = 0;
  if( PowerSettingConfiguration && (v11 = *(_QWORD *)&PowerSettingConfiguration[2 * v8 + 16]) != 0 )
  {
    v12 = *(_DWORD *)(v11 + 4);
    *(_DWORD *)ReturnedLengtha = v12;
    if( v12 > 4 )
      v10 = -1073741306;
    else
      memmove(ReturnedLength, (const VOID *)(*(_QWORD *)&PowerSettingConfiguration[2 * v8 + 16] + 12i64), v12);
  }
  else
  {
    v10 = -1073741811;
  }
  KeReleaseGuardedMutex((PKGUARDED_MUTEX)((char *)&stru_140C23628 + 3000));
  return v10;
}

Referenced by:

PopBatteryUpdateAlarms
PopCaptureSleepStudyStatistics
PopEsInStandbyEvaluate
PopScanIdleList