PopPepUpdateDripsDeviceVetoMask
NTSTATUS __fastcall PopPepUpdateDripsDeviceVetoMask(INT64 a1, INT64 a2){
__int64 v2;
int v3;
INT64 *v4;
unsigned __int8 v5;
unsigned int v6;
unsigned __int64 v7;
unsigned int DeepSleepPlatformStateIndex;
unsigned int *v9;
unsigned int v10;
__int64 v11;
_DWORD *v12;
unsigned int v13;
__int64 v14;
__int64 v15;
NTSTATUS result;
v2 = *(_QWORD *)(a1 + 56);
v3 = a2;
v4 = (INT64 *)(v2 + 64);
v5 = ExAcquireSpinLockExclusive((INT64 *)(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, UpdateTypeIncrement);
PopPepUpdateIdleStateRefCount(v6, v13, UpdateTypeDecrement);
PopPepGetMinimumDevicePowerState((PEPHANDLE *)v2, v10, 0i64);
v14 = *(_QWORD *)(v2 + 32) + 600i64;
v15 = *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart;
KxAcquireSpinLock((UINT64 *)v14);
if( !*(_BYTE *)(v14 + 8) )
*(_QWORD *)(v14 + 24) = v15;
*(_DWORD *)(v14 + 12) = 0;
*(_BYTE *)(v14 + 8) = 1;
KxReleaseSpinLock((UINT64 *)v14);
ExReleaseSpinLockExclusiveFromDpcLevel(v4);
result = KiIrqlFlags;
__writecr8(v7);
return result;
}Referenced by:
PopFxUpdateVetoMaskWork