PopFxIncrementDeviceSleepCount
VOID __stdcall PopFxIncrementDeviceSleepCount(DEVICE_OBJECT *Pdo){
__int64 v1;
KIRQL v2;
int v3;
unsigned __int64 v4;
signed __int32 v5;
signed __int32 v6;
if( Pdo )
v1 = *(_QWORD *)(*((_QWORD *)Pdo + 39) + 40i64);
else
v1 = 0i64;
if( v1 )
{
v2 = ExAcquireSpinLockExclusive((PEX_SPIN_LOCK)(v1 + 88));
v3 = *(_DWORD *)(v1 + 124);
v4 = v2;
_m_prefetchw((const void *)(v1 + 296));
v5 = *(_DWORD *)(v1 + 296);
do
{
v6 = v5;
v5 = _InterlockedCompareExchange((volatile signed __int32 *)(v1 + 296), v5, v5);
}
while( v6 != v5 );
if( (v5 & 4) == 0 || (*(_DWORD *)(*(_QWORD *)(v1 + 80) + 824i64) & 1) == 0 )
*(_DWORD *)(v1 + 124) = v3 + 1;
ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)(v1 + 88));
__writecr8(v4);
}
}Referenced by:
PoFxStartDevicePowerManagement
PopSystemIrpCompletion