NtPowerInformation

NTSTATUS __stdcall NtPowerInformation(
        POWER_INFORMATION_LEVEL InformationLevel,
        PVOID InputBuffer,
        UINT64 InputBufferLength,
        PVOID OutputBuffer,
        UINT64 OutputBufferLength){
  int v6; 
  unsigned int v8; 
  EVENT_DESCRIPTOR *v9; 
  PROCESSOR_NUMBER *PoolWithTag; 
  UINT64 v11; 
  CHAR v12; 
  unsigned int v13; 
  UINT8 *v14; 
  _POWER_SESSION_TIMEOUTS *v15; 
  int v16; 
  unsigned __int64 v17; 
  unsigned __int64 v18; 
  __int64 v19; 
  unsigned __int64 v20; 
  __int64 v21; 
  unsigned __int64 v22; 
  __int64 v23; 
  unsigned __int64 v24; 
  __int64 v25; 
  unsigned __int64 v26; 
  __int64 v27; 
  unsigned __int64 v28; 
  UINT64 v29; 
  INT64 v30; 
  NTSTATUS IsAppContainerOrIdentifyLevelContext; 
  char v32; 
  unsigned __int64 v33; 
  INT64 v34; 
  unsigned int v35; 
  __int64 v37; 
  int v38; 
  NTSTATUS v39; 
  bool v40; 
  NTSTATUS SettingNotificationName; 
  int v42; 
  int Info; 
  BOOLEAN IsDevicePotentialDripsConstraint; 
  _SYSTEM_POWER_CAPABILITIES *spare2; 
  unsigned int v46; 
  unsigned __int8 Number; 
  unsigned int v48; 
  unsigned int v49; 
  INT64 v50; 
  __int64 v51; 
  __int64 v52; 
  __int64 v53; 
  int v54; 
  char Granularity; 
  unsigned int ProcessSessionId; 
  int v57; 
  USHORT Group; 
  INT64 v59; 
  unsigned int v60; 
  _QWORD *v61; 
  unsigned int v62; 
  INT64 v63; 
  INT64 v64; 
  UINT64 v65; 
  INT64 v66; 
  int PowerRequestListInfo; 
  INT64 v68; 
  INT64 v69; 
  POWER_MONITOR_REQUEST_REASON v70; 
  char v71; 
  unsigned int v72; 
  CHAR v73; 
  VOID **ReturnBuffer; 
  UINT *ReturnBufferLength; 
  UINT8 *FreeReturnBuffer; 
  INT64 v77; 
  INT64 v78; 
  INT64 v79; 
  INT64 a11; 
  UINT64 NumberOfBytes; 
  void *Src; 
  char IsAppContainerContext[8]; 
  PVOID P; 
  NTSTATUS v85; 
  POWER_INFORMATION_LEVEL v87; 
  UINT64 v88; 
  UINT64 HiberFileSize; 
  BOOL Data; 
  PVOID Buffer; 
  unsigned __int64 v92; 
  UINT8 *v93; 
  INT64 v94; 
  _SYSTEM_POWER_CAPABILITIES result[20]; 
  UINT8 dst[64]; 
  v92 = (unsigned __int64)OutputBuffer;
  v6 = InputBufferLength;
  v8 = InformationLevel;
  v87 = InformationLevel;
  IsAppContainerContext[0] = 0;
  memset((INT64)result, 0i64);
  LODWORD(v88) = 0;
  HiberFileSize = 0i64;
  Src = 0i64;
  LODWORD(NumberOfBytes) = 0;
  PoolWithTag = 0i64;
  P = 0i64;
  Buffer = 0i64;
  LOBYTE(v11) = 0;
  LOBYTE(a11) = 0;
  BYTE6(NumberOfBytes) = 0;
  BYTE4(NumberOfBytes) = 0;
  if( v8 > 0x5F )
  {
    IsAppContainerOrIdentifyLevelContext = -1073741811;
    goto LABEL_379;
  }
  v12 = *((_BYTE *)KeGetCurrentThread() + 562);
  BYTE5(NumberOfBytes) = v12;
  v13 = InputBuffer != 0i64 ? v6 : 0;
  v14 = (UINT8 *)((unsigned __int64)InputBuffer & -(__int64)(v13 != 0));
  v93 = v14;
  HIDWORD(a11) = OutputBuffer != 0i64 ? OutputBufferLength : 0;
  v15 = (_POWER_SESSION_TIMEOUTS *)(v92 & -(__int64)(HIDWORD(a11) != 0));
  if( v12 )
  {
    if( v8 <= 0x19 && (v16 = 50462912, _bittest(&v16, v8))
      || (v17 = v8 - 30, (unsigned int)v17 <= 0x3D) && (v37 = 0x209E02E385CA1E1Fi64, _bittest64(&v37, v17)) )
    {
      IsAppContainerOrIdentifyLevelContext = -1073741790;
      InputBuffer = (PVOID)((unsigned __int64)InputBuffer & -(__int64)(v13 != 0));
      PoolWithTag = (PROCESSOR_NUMBER *)P;
LABEL_379:
      v32 = 0;
      goto LABEL_66;
    }
    v18 = v8 - 37;
    if( (unsigned int)v18 <= 0x3A && (v19 = 0x608801808940903i64, _bittest64(&v19, v18)) || v8 - 2 <= 1 )
    {
      IsAppContainerOrIdentifyLevelContext = SeIsAppContainerOrIdentifyLevelContext(
                                               0i64,
                                               (UINT8 *)IsAppContainerContext);
      v85 = IsAppContainerOrIdentifyLevelContext;
      if( IsAppContainerOrIdentifyLevelContext < 0 )
      {
        InputBuffer = (PVOID)((unsigned __int64)InputBuffer & -(__int64)(v13 != 0));
        PoolWithTag = (PROCESSOR_NUMBER *)P;
        v32 = 0;
        goto LABEL_66;
      }
      v8 = v87;
      if( IsAppContainerContext[0] )
      {
        if( v87 != (AdministratorPowerPolicy|0x40) && v87 != (SystemPowerLoggingEntry|0x40) )
        {
          IsAppContainerOrIdentifyLevelContext = -1073741790;
          v85 = -1073741790;
          InputBuffer = (PVOID)((unsigned __int64)InputBuffer & -(__int64)(v13 != 0));
          PoolWithTag = (PROCESSOR_NUMBER *)P;
          v32 = 0;
          goto LABEL_66;
        }
        if( !(unsigned __int8)PopCapabilityCheck(L"ID_CAP_SCREENOFF") )
        {
          IsAppContainerOrIdentifyLevelContext = -1073741790;
          v85 = -1073741790;
          InputBuffer = (PVOID)((unsigned __int64)InputBuffer & -(__int64)(v13 != 0));
          PoolWithTag = (PROCESSOR_NUMBER *)P;
          v32 = 0;
          goto LABEL_66;
        }
      }
    }
    if( v8 - 92 <= 1 )
    {
      IsAppContainerOrIdentifyLevelContext = ExCheckFullProcessInformationAccess(v12);
      v85 = IsAppContainerOrIdentifyLevelContext;
      if( IsAppContainerOrIdentifyLevelContext < 0 )
      {
        InputBuffer = (PVOID)((unsigned __int64)InputBuffer & -(__int64)(v13 != 0));
        PoolWithTag = (PROCESSOR_NUMBER *)P;
        v32 = 0;
        goto LABEL_66;
      }
      v8 = v87;
    }
    v20 = v8 - 28;
    if( (unsigned int)v20 <= 0x32 )
    {
      v21 = 0x4000000420001i64;
      if( _bittest64(&v21, v20) )
      {
        if( !PspIsContextAdmin() )
        {
          IsAppContainerOrIdentifyLevelContext = -1073741790;
          v85 = -1073741790;
          InputBuffer = (PVOID)((unsigned __int64)InputBuffer & -(__int64)(v13 != 0));
          PoolWithTag = (PROCESSOR_NUMBER *)P;
          v32 = 0;
          goto LABEL_66;
        }
      }
    }
    if( v14 )
    {
      v22 = v8 - 11;
      if( (unsigned int)v22 > 0x3D || (v23 = 0x2001800900000001i64, !_bittest64(&v23, v22)) )
      {
        if( PsIsCurrentThreadInServerSilo() )
        {
          IsAppContainerOrIdentifyLevelContext = -1073741637;
          v85 = -1073741637;
          InputBuffer = (PVOID)((unsigned __int64)InputBuffer & -(__int64)(v13 != 0));
          PoolWithTag = (PROCESSOR_NUMBER *)P;
          v32 = 0;
          goto LABEL_66;
        }
      }
      v24 = v8 - 38;
      if( (unsigned int)v24 <= 0x39 && (v25 = 0x218000004422401i64, _bittest64(&v25, v24)) || v8 == 9 )
      {
        if( !PspIsContextAdmin() )
        {
          IsAppContainerOrIdentifyLevelContext = -1073741790;
          v85 = -1073741790;
          InputBuffer = (PVOID)((unsigned __int64)InputBuffer & -(__int64)(v13 != 0));
          PoolWithTag = (PROCESSOR_NUMBER *)P;
          v32 = 0;
          goto LABEL_66;
        }
      }
      v26 = v8 - 37;
      if( (unsigned int)v26 > 0x3A || (v27 = 0x7AE005828F40BC3i64, !_bittest64(&v27, v26)) )
      {
        if( v8 - 2 > 1 && v8 != 11 )
        {
          v30 = (INT64)SeShutdownPrivilege;
          if( v8 == 10 )
            v30 = (INT64)SeCreatePagefilePrivilege;
          v94 = v30;
          if( !SeSinglePrivilegeCheck(v30, v12) )
          {
            IsAppContainerOrIdentifyLevelContext = -1073741727;
            v85 = -1073741727;
            InputBuffer = (PVOID)((unsigned __int64)InputBuffer & -(__int64)(v13 != 0));
            PoolWithTag = (PROCESSOR_NUMBER *)P;
            v32 = 0;
            goto LABEL_66;
          }
        }
      }
      if( v13 )
      {
        v28 = (unsigned __int64)&v14[v13];
        if( v28 > 0x7FFFFFFF0000i64 || v28 < (unsigned __int64)v14 )
          MEMORY[0x7FFFFFFF0000] = 0;
      }
      v29 = v13;
      if( v13 > 0x40 )
      {
        PoolWithTag = (PROCESSOR_NUMBER *)ExAllocatePoolWithTag(PagedPool, v13, 0x206D654Dui64);
        P = PoolWithTag;
        v29 = v13;
        if( !PoolWithTag )
        {
          IsAppContainerOrIdentifyLevelContext = -1073741670;
          v85 = -1073741670;
          InputBuffer = (PVOID)((unsigned __int64)InputBuffer & -(__int64)(v13 != 0));
          v32 = 0;
          goto LABEL_66;
        }
      }
      else
      {
        PoolWithTag = (PROCESSOR_NUMBER *)dst;
        P = dst;
      }
      memmove((UINT8 *)PoolWithTag, v14, v29);
    }
    else
    {
      PoolWithTag = (PROCESSOR_NUMBER *)P;
    }
    if( v15 )
      ProbeForWrite(v15, HIDWORD(a11), 1ui64);
    LOBYTE(v11) = 0;
  }
  else
  {
    PoolWithTag = (PROCESSOR_NUMBER *)((unsigned __int64)InputBuffer & -(__int64)(v13 != 0));
    P = PoolWithTag;
  }
  v33 = v8 - 38;
  v34 = 0x3FFE3BE75BE26EDi64;
  if( !_bittest64(&v34, v33) )
  {
LABEL_74:
    if( v8 > 0x1F || (LODWORD(v33) = -234812256, !_bittest((const int *)&v33, v8)) )
    {
      LODWORD(v33) = PopAcquirePolicyLock();
      LOBYTE(v11) = 1;
      LOBYTE(a11) = 1;
      BYTE6(NumberOfBytes) = 1;
    }
  }
  switch( (int)v33 )
  {
    case 0:
      if( !PoolWithTag || v15 )
        goto LABEL_215;
      if( v13 == 8 )
      {
        v39 = PpmSetSimulatedLoad(PoolWithTag);
        goto LABEL_89;
      }
      if( v13 != 4 )
        goto LABEL_263;
      v39 = PpmClearSimulatedLoad(PoolWithTag);
      goto LABEL_89;
    case 1:
      if( !PoolWithTag || v15 || v13 != 24 )
        goto LABEL_215;
      v61 = ExAllocatePoolWithTag(NonPagedPoolNx, 0x18ui64, 0x206D654Dui64);
      if( v61 )
      {
        *(_OWORD *)v61 = *(_OWORD *)&PoolWithTag->Group;
        v61[2] = *(_QWORD *)&PoolWithTag[4].Group;
        if( !_InterlockedCompareExchange64(
                (volatile signed __int64 *)&PopShutdownNotificationCallback,
                (signed __int64)v61,
                0i64) )
          goto LABEL_119;
        ExFreePoolWithTag(v61, 0x206D654Du);
        IsAppContainerOrIdentifyLevelContext = -1073741823;
        PoolWithTag = (PROCESSOR_NUMBER *)P;
      }
      else
      {
        IsAppContainerOrIdentifyLevelContext = -1073741670;
      }
      goto LABEL_64;
    case 2:
      if( !PoolWithTag || v13 != 4 || v15 )
        goto LABEL_215;
      Data = *PoolWithTag != 0;
      PopSetPowerSettingValueAcDc(&GUID_VIDEO_BRIGHTNESS_CAPABLE, 4ui64, &Data);
      goto LABEL_58;
    case 3:
      if( PoolWithTag || !v15 || HIDWORD(a11) != 64 )
        goto LABEL_215;
      PopAcquireRwLockExclusive(&PopEsLock);
      v54 = PopEsState;
      PopReleaseRwLock((UINT64)&PopEsLock);
      Granularity = result[0].BatteryScale[2].Granularity;
      if( v54 == 1 )
        Granularity = 1;
      LOBYTE(result[0].BatteryScale[2].Granularity) = Granularity;
      LOBYTE(result[0].AcOnLineWake) = TtmpEnabled == 1;
      if( TtmpEnabled != 1 )
        goto LABEL_187;
      IsAppContainerOrIdentifyLevelContext = TtmInitCurrentSession();
      InputBuffer = (PVOID)((unsigned __int64)InputBuffer & -(__int64)(v13 != 0));
      if( IsAppContainerOrIdentifyLevelContext < 0 )
        goto LABEL_65;
      PopNotifySessionUserPowerRequestsPresent();
LABEL_187:
      PopAcquirePolicyLock();
      *(_DWORD *)&result[0].ProcessorMaxThrottle = 0;
      *(_QWORD *)&result[0].PowerButtonPresent = &PopNoMoreInput;
      *(_QWORD *)&result[0].HiberFilePresent = &PopHiberBootForceMonitorOff;
      *(_DWORD *)&result[0].spare3[2] = byte_140C23D11 != 0;
      *(_DWORD *)&result[0].spare3[6] = dword_140C23D0C;
      *(_DWORD *)&result[0].spare2[2] = dword_140C23D2C;
      result[0].BatteryScale[0] = (BATTERY_REPORTING_SCALE)qword_140C23D30;
      result[0].BatteryScale[2].Capacity = HIDWORD(qword_140C23D38);
      result[0].BatteryScale[1].Granularity = qword_140C23D38;
      result[0].BatteryScale[1].Capacity = dword_140C23D40;
      BYTE1(result[0].BatteryScale[2].Granularity) = PopLidOpened;
      Src = result;
      LODWORD(NumberOfBytes) = 64;
      ProcessSessionId = PsGetProcessSessionIdEx(*((_QWORD *)KeGetCurrentThread() + 23));
      PopPrintEx(3ui64, (INT8 *)"PopAdaptive: Session %u is started\n");
      PopDiagTraceSessionStates((_EVENT_DESCRIPTOR *)&POP_ETW_ADPM_SESSION_CREATED, ProcessSessionId, 0i64);
      PopReleasePolicyLock();
      goto LABEL_119;
    case 4:
      if( !PoolWithTag || v13 != 16 || v15 )
        goto LABEL_215;
      if( HIBYTE(PoolWithTag[3].Group) && LOBYTE(PoolWithTag[3].Group) )
      {
        if( PopPlatformAoAc )
        {
          if( !PopConsoleDisplayState && *(_DWORD *)&PoolWithTag[1] == 2 )
          {
            LODWORD(v78) = 0;
            DbgkWerCaptureLiveKernelDump(
              (WCHAR *)L"InvalidDisplayStateTransition",
              160i64,
              2049i64,
              *(_DWORD *)&PoolWithTag[2],
              *(_DWORD *)PoolWithTag,
              0i64,
              0i64,
              0i64,
              v78);
          }
          if( PopPlatformAoAc && *(_DWORD *)&PoolWithTag[1] != 2 )
            PopProcessSessionDisplayStateChange(PoolWithTag[3].Reserved, *(_DWORD *)&PoolWithTag[2]);
        }
        PopSetDisplayStatus(*(_DWORD *)&PoolWithTag[1]);
        PopUpdateConsoleDisplayState(*(_DWORD *)&PoolWithTag[1]);
        if( *(_DWORD *)&PoolWithTag[1] == 1 )
          PopPowerAggregatorNotifyDisplayPoweredOn();
      }
      Number = PoolWithTag[3].Number;
      if( Number )
      {
        if( LOBYTE(PoolWithTag[3].Group) )
        {
          ZwUpdateWnfStateData();
          Number = PoolWithTag[3].Number;
        }
        if( Number )
          PopDiagTraceSessionDisplayStateChange(
            *(_DWORD *)&PoolWithTag[1] == 0,
            *(_DWORD *)PoolWithTag,
            LOBYTE(PoolWithTag[3].Group),
            *(_DWORD *)&PoolWithTag[2]);
      }
      goto LABEL_58;
    case 5:
    case 34:
      if( !PoolWithTag || !v15 )
        goto LABEL_215;
      if( v13 != 40 )
        goto LABEL_236;
      v35 = HIDWORD(a11);
      if( HIDWORD(a11) != 8 )
        goto LABEL_236;
      Info = PopPowerRequestCreateInfo((COUNTED_REASON_CONTEXT *)PoolWithTag, v8 == 72, (PVOID *)result);
      goto LABEL_130;
    case 6:
      if( !PoolWithTag || v15 )
        goto LABEL_215;
      if( v13 != 24 )
        goto LABEL_236;
      v42 = PopPowerRequestActionInfo((INT64)PoolWithTag);
      goto LABEL_118;
    case 7:
      if( PoolWithTag || !v15 )
        goto LABEL_215;
      PowerRequestListInfo = PopGetPowerRequestListInfo(&Src, &NumberOfBytes);
      goto LABEL_296;
    case 8:
      if( !PoolWithTag )
        goto LABEL_215;
      if( v13 < 2 )
        goto LABEL_215;
      if( !v15 )
        goto LABEL_215;
      Group = PoolWithTag->Group;
      if( Group >= KeQueryActiveGroupCount() )
        goto LABEL_215;
      InputBuffer = (PVOID)((unsigned __int64)InputBuffer & -(__int64)(v13 != 0));
      IsAppContainerOrIdentifyLevelContext = PopProcessorInformation((INT64)result, v59, Group, &NumberOfBytes);
      if( IsAppContainerOrIdentifyLevelContext < 0 )
        goto LABEL_65;
      Src = result;
      goto LABEL_58;
    case 9:
      if( !PoolWithTag || v13 != 16 )
        goto LABEL_215;
      v57 = PopUmpoSendLegacyEvent((__int128 *)PoolWithTag);
      IsAppContainerOrIdentifyLevelContext = v57;
      if( v57 >= 0 )
        goto LABEL_58;
      InputBuffer = (PVOID)((unsigned __int64)InputBuffer & -(__int64)(v13 != 0));
      if( v57 == -1073741536 )
        goto LABEL_58;
      goto LABEL_65;
    case 10:
      if( !(_BYTE)KdDebuggerEnabled )
        goto LABEL_255;
      if( !PoolWithTag || v15 )
        goto LABEL_215;
      if( v13 == 16 || v13 == 24 )
      {
        v39 = PpmParkApplyForcedMask((GROUP_AFFINITY *)PoolWithTag);
        goto LABEL_89;
      }
      if( v13 != 2 )
        goto LABEL_263;
      v39 = PpmParkClearForcedMask((UINT16)PoolWithTag);
      goto LABEL_89;
    case 11:
    case 14:
    case 15:
    case 16:
    case 41:
    case 42:
    case 43:
    case 44:
      goto LABEL_239;
    case 12:
      if( PoolWithTag || !v15 )
        goto LABEL_215;
      PowerRequestListInfo = ExGetWakeTimerList(&Src, &NumberOfBytes);
LABEL_296:
      InputBuffer = (PVOID)((unsigned __int64)InputBuffer & -(__int64)(v13 != 0));
      IsAppContainerOrIdentifyLevelContext = PowerRequestListInfo;
      if( PowerRequestListInfo < 0 )
        goto LABEL_65;
      BYTE4(NumberOfBytes) = 1;
      goto LABEL_58;
    case 13:
      if( !PoolWithTag || !v15 )
        goto LABEL_215;
      if( v13 < 4 )
        goto LABEL_236;
      PopAcquireTransitionLock();
      PopAcquirePolicyLock();
      IsAppContainerOrIdentifyLevelContext = PopSetHiberFileSize((UINT64 *)*(_DWORD *)PoolWithTag, &HiberFileSize);
      PopReleasePolicyLock();
      goto LABEL_249;
    case 17:
      if( !(_BYTE)KdDebuggerEnabled )
        goto LABEL_255;
      if( !PoolWithTag || v15 )
        goto LABEL_215;
      if( v13 == 8 )
      {
        v39 = PpmSetSimulatedIdle((INT64)PoolWithTag);
      }
      else
      {
        if( v13 != 4 )
        {
LABEL_263:
          IsAppContainerOrIdentifyLevelContext = -1073741811;
          goto LABEL_90;
        }
        v39 = PpmClearSimulatedIdle(PoolWithTag);
      }
      goto LABEL_89;
    case 18:
      if( !PoolWithTag || !v15 )
        goto LABEL_215;
      if( v13 != 8 )
        goto LABEL_236;
      v35 = HIDWORD(a11);
      if( HIDWORD(a11) != 4 )
        goto LABEL_236;
      IsAppContainerOrIdentifyLevelContext = PpmParkSetLpiCap(
                                               *(_DWORD *)PoolWithTag,
                                               *(_DWORD *)&PoolWithTag[1],
                                               (UINT64 *)&result[0].PowerButtonPresent);
      if( IsAppContainerOrIdentifyLevelContext < 0 )
        goto LABEL_64;
      Src = result;
      LODWORD(NumberOfBytes) = 4;
      goto LABEL_59;
    case 19:
      if( !ExVerifySuite(PhoneNT) )
      {
LABEL_239:
        IsAppContainerOrIdentifyLevelContext = -1073741822;
        goto LABEL_64;
      }
      if( !PoolWithTag || v13 != 1 || v15 )
        goto LABEL_215;
      LOBYTE(v64) = PoolWithTag->Group;
      IsAppContainerOrIdentifyLevelContext = PopUserPresentOverride(v64, v63);
      if( IsAppContainerOrIdentifyLevelContext >= 0 )
        goto LABEL_58;
      goto LABEL_64;
    case 20:
      if( !v15 )
        goto LABEL_215;
      if( v14 && v13 != 20 || HIDWORD(a11) != 8 )
        goto LABEL_236;
      SettingNotificationName = PopGetSettingNotificationName((__int64)PoolWithTag, (__int64 *)v15);
      goto LABEL_107;
    case 21:
      if( !PoolWithTag || !v15 )
        goto LABEL_215;
      if( v13 != 16 || HIDWORD(a11) < 4 )
        goto LABEL_236;
      SettingNotificationName = PopGetSettingValue((const _GUID *)PoolWithTag, v15, HIDWORD(a11));
      goto LABEL_107;
    case 22:
      if( !PoolWithTag || v15 )
        goto LABEL_215;
      if( v13 < 8 )
        goto LABEL_236;
      PopEnforceResiliencyScenarios((PPOWER_IDLE_RESILIENCY)PoolWithTag);
      goto LABEL_58;
    case 23:
      if( !PoolWithTag )
        goto LABEL_215;
      if( v13 != 8 )
        goto LABEL_215;
      if( !v15 )
        goto LABEL_215;
      v35 = HIDWORD(a11);
      if( HIDWORD(a11) != 8 )
        goto LABEL_215;
      v46 = PsGetProcessSessionIdEx(*((_QWORD *)KeGetCurrentThread() + 23));
      PoolWithTag = (PROCESSOR_NUMBER *)P;
      PopSessionInputChange(v46, (POWER_SESSION_RIT_STATE *)P, v15);
      goto LABEL_59;
    case 24:
      if( !PoolWithTag )
        goto LABEL_215;
      if( v13 != 2 )
        goto LABEL_215;
      if( !v15 )
        goto LABEL_215;
      v35 = HIDWORD(a11);
      if( HIDWORD(a11) != 8 )
        goto LABEL_215;
      v49 = PsGetProcessSessionIdEx(*((_QWORD *)KeGetCurrentThread() + 23));
      PopSessionConnectionChange((UINT64 *)v49, (_POWER_SESSION_CONNECT *)P, v15, v50);
      v52 = (unsigned int)PsGetProcessSessionIdEx(*((_QWORD *)KeGetCurrentThread() + 23));
      PoolWithTag = (PROCESSOR_NUMBER *)P;
      if( qword_140C54118 )
      {
        LOBYTE(v51) = *((_BYTE *)P + 1);
        LOBYTE(v53) = *(_BYTE *)P;
        qword_140C54118(v52, v51, v53);
      }
      goto LABEL_59;
    case 25:
      if( PoolWithTag || v15 )
        goto LABEL_215;
      v62 = PsGetProcessSessionIdEx(*((_QWORD *)KeGetCurrentThread() + 23));
      PopPrintEx(3ui64, (INT8 *)"PopAdaptive: Session %u is closed\n");
      PopDiagTraceSessionStates((_EVENT_DESCRIPTOR *)&POP_ETW_ADPM_SESSION_CLOSED, v62, 0i64);
      PopFreeSessionState(v62);
      if( TtmpEnabled == 1 )
        TtmCleanupCurrentSession();
      goto LABEL_119;
    case 26:
      if( !PoolWithTag || v13 != 8 || v15 )
        goto LABEL_215;
      v60 = PsGetProcessSessionIdEx(*((_QWORD *)KeGetCurrentThread() + 23));
      PoolWithTag = (PROCESSOR_NUMBER *)P;
      PopSessionWinlogonNotification(v60, (POWER_SESSION_WINLOGON *)P);
      goto LABEL_58;
    case 27:
      if( PsIsCurrentThreadInServerSilo() )
        goto LABEL_138;
      if( PoolWithTag || !v15 )
        goto LABEL_215;
      PopFilterCapabilities((_SYSTEM_POWER_CAPABILITIES *)&PopCapabilities, result);
      if( result[0].spare2[0] )
        PopReadHiberbootPolicy(result[0].spare2);
      spare2 = (_SYSTEM_POWER_CAPABILITIES *)result[0].spare2;
      goto LABEL_136;
    case 28:
      if( PoolWithTag || !v15 )
        goto LABEL_215;
      IsDevicePotentialDripsConstraint = PopPlatformAoAc;
      goto LABEL_135;
    case 29:
      if( !PoolWithTag || v13 != 184 || v15 && HIDWORD(a11) != 160 )
        goto LABEL_215;
      SettingNotificationName = PopPdcInvocation(
                                  (__int64)PoolWithTag,
                                  (__int64(__fastcall **)(int, unsigned __int8, int))v15);
      goto LABEL_107;
    case 30:
      if( !PoolWithTag || v13 != 8 || v15 || HIDWORD(a11) )
        goto LABEL_215;
      IsAppContainerOrIdentifyLevelContext = 0;
      v48 = (unsigned int)PoolWithTag[1];
      if( PopPlatformAoAc && LOBYTE(PoolWithTag->Group) )
      {
        PopAcquirePolicyLock();
        if( PopIsInputSuppressionEngaged(v48) && (GUID *)PopWdiCurrentScenario != &NullGuid )
          PopTraceMonitorOnRequestUserInput();
        IsAppContainerOrIdentifyLevelContext = PopProcessSessionDisplayStateChange(1, v48);
        PopReleasePolicyLock();
        if( (!IsAppContainerOrIdentifyLevelContext || IsAppContainerOrIdentifyLevelContext == 259)
          && PopLastStandbyExitScenarioId != PopWdiCurrentScenarioInstanceId
          && !PopConsoleDisplayState )
        {
          PopDiagTraceMonitorOnWithLidClosed(
            v48,
            PopLastStandbyExitScenarioId,
            v68,
            v69,
            (INT64)ReturnBuffer,
            (INT64)ReturnBufferLength,
            (INT64)FreeReturnBuffer,
            v77,
            v78,
            v79,
            a11,
            NumberOfBytes);
          PopLastStandbyExitScenarioId = PopWdiCurrentScenarioInstanceId;
          ZwUpdateWnfStateData();
        }
      }
      goto LABEL_64;
    case 31:
      if( PoolWithTag || v15 )
        goto LABEL_215;
      IsAppContainerOrIdentifyLevelContext = PopInitPlatformSettings();
      byte_140C23E54 = PopPlatformAoAc;
      goto LABEL_64;
    case 32:
      PopShutdownButtonPressTime = KeQueryPerformanceCounter(0i64);
      goto LABEL_58;
    case 33:
      if( !PoolWithTag || v13 != 8 || v15 && HIDWORD(a11) )
        goto LABEL_215;
      SettingNotificationName = PopSuspendResumeInvocation((BYTE *)PoolWithTag, v11, (INT64)v9, 0x140000000ui64);
      goto LABEL_107;
    case 35:
    case 50:
      if( PoolWithTag || v15 )
        goto LABEL_215;
      v70 = MonitorRequestReasonThermalStandby;
      if( v8 != 88 )
        v70 = MonitorRequestReasonScreenOffRequest;
      PopScreenOff(v70);
      goto LABEL_63;
    case 36:
      if( BYTE5(NumberOfBytes) )
        goto LABEL_255;
      if( !PoolWithTag || v13 != 16 || v15 || HIDWORD(a11) )
        goto LABEL_215;
      SettingNotificationName = PopPdcCsDeviceNotification((INT64)PoolWithTag);
LABEL_107:
      IsAppContainerOrIdentifyLevelContext = SettingNotificationName;
      goto LABEL_64;
    case 37:
      if( PoolWithTag || !v15 )
        goto LABEL_215;
      *(_DWORD *)&result[0].PowerButtonPresent = PopCapturePlatformRole();
      Src = result;
      LODWORD(NumberOfBytes) = 4;
      goto LABEL_58;
    case 38:
      if( PoolWithTag || !v15 )
        goto LABEL_215;
      *(_DWORD *)&result[0].PowerButtonPresent = qword_140C23808;
      *(_QWORD *)&result[0].HiberFilePresent = qword_140C239A0;
      *(_QWORD *)&result[0].ProcessorMaxThrottle = qword_140C239A8;
      if( (_BYTE)PopSleepStats )
      {
        Src = result;
        LODWORD(NumberOfBytes) = 24;
        goto LABEL_58;
      }
      IsAppContainerOrIdentifyLevelContext = -1073741823;
      goto LABEL_64;
    case 39:
      if( PoolWithTag || v15 )
        goto LABEL_215;
      v71 = PopErrataReportingIncorrectLidState;
      if( TtmpEnabled == 1 )
      {
        v72 = PsGetProcessSessionIdEx(*((_QWORD *)KeGetCurrentThread() + 23));
        TtmNotifySessionDisplayBurst(v72, MonitorRequestReasonUserDisplayBurst);
LABEL_119:
        PoolWithTag = (PROCESSOR_NUMBER *)P;
      }
      else
      {
        v73 = 0;
        if( !PopLidOpened && !(_BYTE)PopConsoleExternalDisplayConnected )
          v73 = 1;
        if( !v73 )
          PopEventCalloutDispatch(10, 6i64);
        if( !v71 )
          PopDiagTraceDisplayBurstWin32kCallout(v34, v11, v73);
      }
      goto LABEL_58;
    case 40:
      if( BYTE5(NumberOfBytes) != 1 )
      {
LABEL_255:
        IsAppContainerOrIdentifyLevelContext = -1073741790;
        goto LABEL_64;
      }
      if( v15 || HIDWORD(a11) )
        goto LABEL_215;
      if( PoolWithTag )
      {
        if( v13 != 4 )
          goto LABEL_215;
        PpmSetExitLatencySamplingPercentage((INT64 *)PoolWithTag);
      }
      else
      {
        PpmClearExitLatencySamplingPercentage();
      }
      goto LABEL_58;
    case 45:
      if( PoolWithTag || !v15 )
        goto LABEL_215;
      PopCurrentPowerStatePrecise((SYSTEM_BATTERY_STATE *)result);
      Src = result;
      LODWORD(NumberOfBytes) = 32;
      goto LABEL_58;
    case 46:
      if( !PoolWithTag || v15 )
        goto LABEL_215;
      if( v13 < 0x10 || v13 < 2 * (unsigned int)PoolWithTag[3].Group + 14 )
        goto LABEL_236;
      v42 = PopThermalProcessUsermodeEvent((__int64)PoolWithTag, v11, v9);
LABEL_118:
      IsAppContainerOrIdentifyLevelContext = v42;
      v40 = v42 < 0;
      goto LABEL_91;
    case 47:
      v65 = (unsigned int)PoolWithTag[2];
      v66 = *(_QWORD *)&PoolWithTag->Group;
      if( LOBYTE(PoolWithTag[3].Group) )
        PoSetPowerRequestInternal(v66, v65);
      else
        PoClearPowerRequestInternal(v66, v65);
      goto LABEL_58;
    case 48:
      if( !PoolWithTag || !v15 )
        goto LABEL_215;
      IsAppContainerOrIdentifyLevelContext = RtlStringCbLengthW(&PoolWithTag->Group, v13, 0i64);
      InputBuffer = (PVOID)((unsigned __int64)InputBuffer & -(__int64)(v13 != 0));
      if( IsAppContainerOrIdentifyLevelContext < 0 )
        goto LABEL_65;
      IsAppContainerOrIdentifyLevelContext = PopBatteryDeviceState(&PoolWithTag->Group, (INT64)result);
      if( IsAppContainerOrIdentifyLevelContext < 0 )
        goto LABEL_65;
      Src = result;
      LODWORD(NumberOfBytes) = 52;
      goto LABEL_58;
    case 49:
      if( !PoolWithTag )
        goto LABEL_215;
      if( v13 < 8 )
        goto LABEL_215;
      v38 = (int)*PoolWithTag;
      if( (unsigned int)(*(_DWORD *)PoolWithTag - 68) <= 0xFBB || v38 >= 4107 )
        goto LABEL_215;
      if( (unsigned int)(v38 - 4096) <= 0xA )
      {
        if( !SeSinglePrivilegeCheck(*(_QWORD *)&SeShutdownPrivilege, SBYTE5(NumberOfBytes))
          && !(unsigned __int8)PopCapabilityCheck(L"terminalPowerManagement") )
        {
          IsAppContainerOrIdentifyLevelContext = -1073741727;
          goto LABEL_64;
        }
        LODWORD(ReturnBuffer) = HIDWORD(a11);
        v39 = TtmDispatchApi(
                (unsigned int)v38,
                (INT64)PoolWithTag,
                v13,
                (INT64)v15,
                (UINT64)ReturnBuffer,
                (CHAR **)&Src,
                &NumberOfBytes,
                (BYTE *)&NumberOfBytes + 4);
      }
      else
      {
        v39 = PopPowerInformationInternal(
                (_POWER_INFORMATION_LEVEL_INTERNAL)v38,
                PoolWithTag,
                v13,
                v15,
                &Src,
                (UINT *)&NumberOfBytes,
                (UINT8 *)&NumberOfBytes + 4,
                v77);
      }
LABEL_89:
      IsAppContainerOrIdentifyLevelContext = v39;
LABEL_90:
      v40 = IsAppContainerOrIdentifyLevelContext < 0;
LABEL_91:
      InputBuffer = (PVOID)((unsigned __int64)InputBuffer & -(__int64)(v13 != 0));
      if( v40 )
        goto LABEL_65;
      goto LABEL_58;
    case 51:
      if( !PoolWithTag || !v15 )
        goto LABEL_215;
      if( v13 < 4 )
        goto LABEL_236;
      PopAcquireTransitionLock();
      PopAcquirePolicyLock();
      IsAppContainerOrIdentifyLevelContext = PopSetHiberFileType(*(_DWORD *)PoolWithTag, &HiberFileSize);
      PopReleasePolicyLock();
LABEL_249:
      PopReleaseTransitionLock();
      InputBuffer = (PVOID)((unsigned __int64)InputBuffer & -(__int64)(v13 != 0));
      if( IsAppContainerOrIdentifyLevelContext < 0 )
        goto LABEL_65;
      Src = &HiberFileSize;
      LODWORD(NumberOfBytes) = 8;
      goto LABEL_58;
    case 52:
      if( !PoolWithTag || v13 < 4 || v15 )
        goto LABEL_215;
      PopUpdatePowerButtonHoldState(*PoolWithTag != 0);
      goto LABEL_58;
    case 53:
      if( !PopPlatformAoAc )
      {
LABEL_138:
        IsAppContainerOrIdentifyLevelContext = -1073741637;
        goto LABEL_64;
      }
      if( PoolWithTag && v13 == 336 && v15 )
      {
        IsDevicePotentialDripsConstraint = PopFxIsDevicePotentialDripsConstraint(PoolWithTag);
LABEL_135:
        result[0].PowerButtonPresent = IsDevicePotentialDripsConstraint;
        spare2 = result;
LABEL_136:
        Src = spare2;
        LODWORD(NumberOfBytes) = 1;
LABEL_58:
        v35 = HIDWORD(a11);
LABEL_59:
        if( !Src || !v15 )
          goto LABEL_63;
        if( v35 >= (unsigned int)NumberOfBytes )
        {
          memmove((UINT8 *)v15, (UINT8 *)Src, (unsigned int)NumberOfBytes);
LABEL_63:
          IsAppContainerOrIdentifyLevelContext = 0;
          goto LABEL_64;
        }
LABEL_236:
        IsAppContainerOrIdentifyLevelContext = -1073741789;
      }
      else
      {
LABEL_215:
        IsAppContainerOrIdentifyLevelContext = -1073741811;
      }
LABEL_64:
      InputBuffer = v14;
LABEL_65:
      v32 = a11;
LABEL_66:
      if( Buffer )
        ExFreePoolWithTag(Buffer, 0);
      if( BYTE4(NumberOfBytes) )
        ExFreePoolWithTag(Src, 0x206D654Du);
      if( v32 )
        PopReleasePolicyLock();
      if( PoolWithTag && PoolWithTag != InputBuffer && PoolWithTag != (PROCESSOR_NUMBER *)dst )
        ExFreePoolWithTag(PoolWithTag, 0x206D654Du);
      return IsAppContainerOrIdentifyLevelContext;
    case 54:
      if( !PoolWithTag || !v15 )
        goto LABEL_215;
      if( v13 != 12 )
        goto LABEL_236;
      v35 = HIDWORD(a11);
      if( HIDWORD(a11) != 8 )
        goto LABEL_236;
      Info = PopEtEnergyTrackerCreate((INT64 *)PoolWithTag, (VOID **)result);
LABEL_130:
      InputBuffer = v14;
      IsAppContainerOrIdentifyLevelContext = Info;
      if( Info < 0 )
        goto LABEL_65;
      Src = result;
      LODWORD(NumberOfBytes) = 8;
      goto LABEL_59;
    case 55:
      if( !PoolWithTag || !v15 )
        goto LABEL_215;
      if( v13 != 8 )
        goto LABEL_236;
      v35 = HIDWORD(a11);
      if( HIDWORD(a11) < 0xC )
        goto LABEL_236;
      IsAppContainerOrIdentifyLevelContext = PopEtEnergyTrackerQuery(
                                               *(VOID **)&PoolWithTag->Group,
                                               (INT64)v15,
                                               HIDWORD(a11));
      InputBuffer = v14;
      if( IsAppContainerOrIdentifyLevelContext >= 0 )
        goto LABEL_59;
      goto LABEL_65;
    case 56:
      if( !PoolWithTag || v15 || HIDWORD(a11) )
        goto LABEL_215;
      if( v13 != 32 )
        goto LABEL_236;
      LOBYTE(v11) = BYTE5(NumberOfBytes);
      IsAppContainerOrIdentifyLevelContext = PopBlackBoxUpdate((INT64)PoolWithTag, v11);
      InputBuffer = v14;
      if( IsAppContainerOrIdentifyLevelContext < 0 )
        goto LABEL_65;
      goto LABEL_58;
    case 57:
      if( !PoolWithTag || v13 != 1 || v15 )
        goto LABEL_215;
      ExNotifyCallback(PipCslCallbackObject, PoolWithTag, 0i64);
      goto LABEL_58;
    default:
      goto LABEL_74;
  }
}

Referenced by:

IoInitSystemPreDrivers
PnpRecordBlackboxDelayedRemoveWorkerInformation
PnpRecordBlackboxDeviceCompletionQueueInformation
PnpRecordBlackboxPnpEventInformation
PnpRecordBlackboxPnpEventWorkerInformation
PopRecordPepWorkorderBlackboxInformation
PopRecordPoIrpBlackboxInformation
PopRecordPowerWatchdogBlackboxInformation
TtmpCalloutArmWatchdog
TtmpCalloutCreateWatchdog
TtmpCalloutDestroyWatchdog
TtmpCalloutWatchdogCallback
WheaLogInternalEvent