PopPepUpdateDripsDeviceVetoMask
INT64 __fastcall PopPepUpdateDripsDeviceVetoMask(INT64 a1, INT64 a2){
__int64 v2;
int v3;
INT64 *v4;
KIRQL v5;
unsigned int v6;
unsigned __int64 v7;
char DeepSleepPlatformStateIndex;
unsigned int *v9;
char v10;
__int64 v11;
_DWORD *v12;
unsigned int v13;
__int64 v14;
unsigned __int64 v15;
int v16;
char v17;
unsigned __int64 v18;
unsigned __int64 v19;
char v20;
INT64 result;
int a4;
v2 = *(_QWORD *)(a1 + 56);
v3 = a2;
a4 = 0;
v4 = (INT64 *)(v2 + 64);
v5 = ExAcquireSpinLockExclusive((PEX_SPIN_LOCK)(v2 + 64));
v6 = *(_DWORD *)(v2 + 144);
*(_DWORD *)(v2 + 144) = *(_DWORD *)(v2 + 156);
*(_DWORD *)(v2 + 148) = *(_DWORD *)(v2 + 160);
*(_DWORD *)(v2 + 152) = *(_DWORD *)(v2 + 164);
v7 = v5;
DeepSleepPlatformStateIndex = PpmGetDeepSleepPlatformStateIndex();
v10 = DeepSleepPlatformStateIndex;
if( v3 && v3 != 1 )
{
v11 = (unsigned int)(v3 - 1);
v12 = v9;
do
{
*v12++ |= 1 << DeepSleepPlatformStateIndex;
--v11;
}
while( v11 );
}
v13 = *v9;
PopPepUpdateIdleStateRefCount(v6, *v9, 1i64);
PopPepUpdateIdleStateRefCount(v6, v13, 0i64);
PopPepGetMinimumDevicePowerState(v2, v10, 0, &a4, 0i64);
v14 = *(_QWORD *)(v2 + 32) + 600i64;
v15 = *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart;
KxAcquireSpinLock((UINT64 *)v14);
v16 = a4;
v17 = *(_BYTE *)(v14 + 8);
if( a4 == 1 )
{
v18 = *(_QWORD *)(v14 + 24);
if( v17 && v15 > v18 )
{
v19 = v15 - v18;
*(_QWORD *)(v14 + 128) += v19;
*(_QWORD *)(v14 + 136) += v19;
}
*(_DWORD *)(v14 + 12) = 5;
v20 = 0;
}
else
{
if( !v17 )
*(_QWORD *)(v14 + 24) = v15;
*(_DWORD *)(v14 + 12) = v16;
v20 = 1;
}
*(_BYTE *)(v14 + 8) = v20;
KxReleaseSpinLock((UINT64 *)v14);
ExReleaseSpinLockExclusiveFromDpcLevel(v4);
result = (unsigned int)KiIrqlFlags;
__writecr8(v7);
return result;
}Referenced by:
PopFxUpdateVetoMaskWork