PopFilterCapabilities
VOID __stdcall PopFilterCapabilities(
_SYSTEM_POWER_CAPABILITIES *SourceCapabilities,
_SYSTEM_POWER_CAPABILITIES *FilteredCapabilities){
__int128 v2;
char v4;
char v5;
char v6;
BOOLEAN SystemS3;
__int64 v8;
char *v9;
__int64 v10;
_PNP_VETO_TYPE VetoType;
int v12;
PVOID P;
v2 = *(_OWORD *)&SourceCapabilities->PowerButtonPresent;
VetoType = PNP_VetoTypeUnknown;
v4 = 0;
*(_OWORD *)&FilteredCapabilities->PowerButtonPresent = v2;
P = 0i64;
*(_OWORD *)&FilteredCapabilities->ProcessorMaxThrottle = *(_OWORD *)&SourceCapabilities->ProcessorMaxThrottle;
*(_OWORD *)&FilteredCapabilities->BatteryScale[0].Granularity = *(_OWORD *)&SourceCapabilities->BatteryScale[0].Granularity;
*(_OWORD *)&FilteredCapabilities->BatteryScale[2].Granularity = *(_OWORD *)&SourceCapabilities->BatteryScale[2].Granularity;
*(_QWORD *)&FilteredCapabilities->RtcWake = *(_QWORD *)&SourceCapabilities->RtcWake;
FilteredCapabilities->DefaultLowLatencyWake = SourceCapabilities->DefaultLowLatencyWake;
if( (int)IoGetLegacyVetoList((WCHAR **)&P, &VetoType) < 0 )
goto LABEL_6;
if( VetoType )
{
v4 = 1;
v8 = 0i64;
v9 = (char *)P;
if( *(_WORD *)P )
{
do
{
v10 = -1i64;
do
++v10;
while( *(_WORD *)&v9[2 * v10] );
v8 += 2 * v10 + 2;
v9 = (char *)P + v8;
}
while( *(_WORD *)((char *)P + v8) );
}
PopLogSleepDisabled(4ui64, 0x1Fui64, P, v8 + 2);
}
if( P )
ExFreePoolWithTag(P, 0);
if( !v4 )
LABEL_6:
PopRemoveReasonRecordByReasonCode(4ui64);
v12 = 1;
EmClientQueryRuleState(EM_RULE_DISABLE_FASTS4_GUID, &v12);
if( v12 == 2 )
PopLogSleepDisabled(7ui64, 0x10ui64, 0i64, 0i64);
else
PopRemoveReasonRecordByReasonCode(7ui64);
if( byte_140C23D1D )
PopLogSleepDisabled(0xEui64, 7ui64, 0i64, 0i64);
else
PopRemoveReasonRecordByReasonCode(0xEui64);
PopLogDisabledSleepReason();
if( PopCheckDisabledState(0) )
FilteredCapabilities->SystemS1 = 0;
if( PopCheckDisabledState(1) )
FilteredCapabilities->SystemS2 = 0;
if( PopCheckDisabledState(2) )
FilteredCapabilities->SystemS3 = 0;
if( PopCheckDisabledState(3) )
FilteredCapabilities->SystemS4 = 0;
if( PopCheckDisabledState(6) )
FilteredCapabilities->FastSystemS4 = 0;
SystemS3 = FilteredCapabilities->SystemS3;
if( !SystemS3 || !v5 )
{
if( !SystemS3 )
v5 = v6;
FilteredCapabilities->FastSystemS4 = 0;
if( !v5 )
FilteredCapabilities->spare2[0] = 0;
}
}Referenced by:
NtPowerInformation
PoTtmInitiatePowerStateTransition
PopCaptureSleepStudyStatistics
PopIdleArmAoAcDozeS4Timer
PopInitSIdle
PopPolicySystemIdle
PopTransitionSystemPowerStateEx
PopUpdateSystemIdleContext
PopVerifyPowerActionPolicy