PoRegisterPowerSettingCallback

NTSTATUS __stdcall PoRegisterPowerSettingCallback(
        PDEVICE_OBJECT DeviceObject,
        LPCGUID SettingGuid,
        PPOWER_SETTING_CALLBACK Callback,
        PVOID Context,
        PVOID *Handle){
  GUID *v7; 
  bool v8; 
  INT64 v9; 
  __int64 v10; 
  char *PoolWithTag; 
  char *v12; 
  PDEVICE_OBJECT v13; 
  GUID v14; 
  LIST_ENTRY *PowerSettingConfiguration; 
  __int64 v16; 
  __int64 v17; 
  _LIST_ENTRY *Blink; 
  NTSTATUS v19; 
  _QWORD *v21; 
  int v22; 
  __int64 *v23; 
  int v24; 
  int v25; 
  __int128 *v26; 
  __int128 v27; 
  PDEVICE_OBJECT v28; 
  __int128 v29; 
  INT64 result[66]; 
  v24 = 0;
  v26 = 0i64;
  v28 = DeviceObject;
  v7 = (GUID *)SettingGuid;
  v25 = dword_140C23D0C;
  v29 = 0i64;
  v8 = 0;
  v27 = 0i64;
  if( PopStateIsSessionSpecific((GUID *)SettingGuid) )
    return -1073741811;
  v9 = 0i64;
  if( Callback )
  {
    v10 = *(_QWORD *)&GUID_CONSOLE_DISPLAY_STATE.Data1 - *(_QWORD *)&v7->Data1;
    if( *(_QWORD *)&GUID_CONSOLE_DISPLAY_STATE.Data1 == *(_QWORD *)&v7->Data1 )
      v10 = *(_QWORD *)GUID_CONSOLE_DISPLAY_STATE.Data4 - *(_QWORD *)v7->Data4;
    if( !v10 )
    {
      memset((INT64)result, 0i64);
      WORD1(v27) = 520;
      *((_QWORD *)&v27 + 1) = result;
      RtlPcToFileName((_CM_KCB_UOW *)Callback);
      if( v22 >= 0 )
      {
        DWORD2(v29) = 16;
        *(_QWORD *)&v29 = &v27;
        v26 = &v29;
        if( (int)EmClientRuleEvaluate(&GUID_EM_PO_CONSOLE_STATE_CHANGE_REMAP_RULE, (__int64)&v26, 1, &v24) >= 0 )
        {
          v23 = &PopPrimaryDisplayVisibleStateErratum;
          if( v24 != 2 )
            v23 = 0i64;
          v9 = (INT64)v23;
        }
      }
    }
  }
  ExAcquireFastMutex(&PopSettingLock);
  PoolWithTag = (char *)ExAllocatePoolWithTag(PagedPool, 0x70ui64, 0x74655350ui64);
  v12 = PoolWithTag;
  if( PoolWithTag )
  {
    memset((INT64)PoolWithTag, 0i64);
    v13 = v28;
    *((_DWORD *)v12 + 4) = 1952797520;
    v14 = *v7;
    *((_QWORD *)v12 + 10) = Callback;
    *((_QWORD *)v12 + 11) = Context;
    *((_QWORD *)v12 + 12) = v13;
    *(GUID *)(v12 + 52) = v14;
    if( v9 )
    {
      PopEnsureErratumSubscribed(v9);
      v7 = (GUID *)(v9 + 16);
    }
    *(GUID *)(v12 + 36) = *v7;
    PowerSettingConfiguration = PopFindPowerSettingConfiguration(v7, 0xFFFFFFFFi64);
    if( PowerSettingConfiguration )
    {
      v16 = *(_QWORD *)&v7->Data1 - *(_QWORD *)&GUID_IDLE_BACKGROUND_TASK.Data1;
      if( *(_QWORD *)&v7->Data1 == *(_QWORD *)&GUID_IDLE_BACKGROUND_TASK.Data1 )
        v16 = *(_QWORD *)v7->Data4 - *(_QWORD *)GUID_IDLE_BACKGROUND_TASK.Data4;
      if( !v16 )
        goto LABEL_25;
      v17 = *(_QWORD *)&v7->Data1 - *(_QWORD *)&GUID_BACKGROUND_TASK_NOTIFICATION.Data1;
      if( *(_QWORD *)&v7->Data1 == *(_QWORD *)&GUID_BACKGROUND_TASK_NOTIFICATION.Data1 )
        v17 = *(_QWORD *)v7->Data4 - *(_QWORD *)GUID_BACKGROUND_TASK_NOTIFICATION.Data4;
      if( !v17 )
LABEL_25:
        *((_QWORD *)v12 + 9) = *((_QWORD *)&PowerSettingConfiguration[4].Flink + v25);
      Blink = PowerSettingConfiguration[1].Blink;
      if( Blink->Flink == &PowerSettingConfiguration[1] )
      {
        *(_QWORD *)v12 = PowerSettingConfiguration + 1;
        *((_QWORD *)v12 + 1) = Blink;
        Blink->Flink = (_LIST_ENTRY *)v12;
        PowerSettingConfiguration[1].Blink = (_LIST_ENTRY *)v12;
        goto LABEL_18;
      }
    }
    else
    {
      v21 = (_QWORD *)qword_140C22EF8;
      if( *(__int64 **)qword_140C22EF8 == &PopRegisteredPowerSettingCallbacks )
      {
        *(_QWORD *)v12 = &PopRegisteredPowerSettingCallbacks;
        *((_QWORD *)v12 + 1) = v21;
        *v21 = v12;
        qword_140C22EF8 = (__int64)v12;
LABEL_18:
        v19 = 0;
        v8 = (unsigned int)PopOsInitPhase >= 3;
        if( Handle )
          *Handle = v12;
        goto LABEL_20;
      }
    }
    __fastfail(3u);
  }
  v19 = -1073741670;
LABEL_20:
  KeReleaseGuardedMutex(&PopSettingLock);
  if( v8 )
    PopSetNotificationWork(0x20ui64);
  return v19;
}

Referenced by:

CmpInitializeLazyWriters
HvlpRegisterPowerPolicyCallbacks
IoInitSystemPreDrivers
PopEsInit
PopIdleInitAoAcDozeS4Timer
PopInitializePowerSettingCallbacks
PopSetPowerSettingValue
PpmInfoRegisterCallbacks
SSHSupportRegisterPowerSettingCallback
TtmInitCurrentSession