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