PopFxIncrementDeviceSleepCount
VOID __stdcall PopFxIncrementDeviceSleepCount(_DEVICE_OBJECT *Pdo){
INT64 *DeviceNode;
unsigned __int8 v2;
int v3;
unsigned __int64 v4;
signed __int32 v5;
signed __int32 v6;
if( Pdo )
DeviceNode = (INT64 *)Pdo->DeviceObjectExtension->DeviceNode;
else
DeviceNode = 0i64;
if( DeviceNode )
{
v2 = ExAcquireSpinLockExclusive(DeviceNode + 11);
v3 = *((_DWORD *)DeviceNode + 31);
v4 = v2;
_m_prefetchw(DeviceNode + 37);
v5 = *((_DWORD *)DeviceNode + 74);
do
{
v6 = v5;
v5 = _InterlockedCompareExchange((volatile signed __int32 *)DeviceNode + 74, v5, v5);
}
while( v6 != v5 );
if( (v5 & 4) == 0 || (*(_DWORD *)(DeviceNode[10] + 824) & 1) == 0 )
*((_DWORD *)DeviceNode + 31) = v3 + 1;
ExReleaseSpinLockExclusiveFromDpcLevel(DeviceNode + 11);
__writecr8(v4);
}
}Referenced by:
PoFxStartDevicePowerManagement
PopSystemIrpCompletion