PopFxReleasePowerIrp
VOID __stdcall PopFxReleasePowerIrp(_POP_FX_DEVICE *FxDevice){
unsigned __int64 v2;
_DEVICE_OBJECT *v3;
INT64 v4;
INT64 a5;
unsigned int v6;
signed __int32 v7;
signed __int32 v8;
char v9;
signed __int32 v10;
signed __int32 v11;
v2 = (unsigned __int8)ExAcquireSpinLockExclusive((INT64 *)(*((_QWORD *)FxDevice + 6) + 88i64));
_InterlockedAnd((volatile signed __int32 *)FxDevice + 8, 0xFFFFFFEF);
v3 = (_DEVICE_OBJECT *)*((_QWORD *)FxDevice + 64);
v4 = *((_QWORD *)FxDevice + 67);
a5 = *((_QWORD *)FxDevice + 69);
v6 = *((_DWORD *)FxDevice + 132);
_m_prefetchw((char *)FxDevice + 32);
v7 = *((_DWORD *)FxDevice + 8);
do
{
v8 = v7;
v7 = _InterlockedCompareExchange((volatile signed __int32 *)FxDevice + 8, v7, v7);
}
while( v8 != v7 );
if( (v7 & 0x20) != 0 )
{
v9 = 1;
_m_prefetchw((char *)FxDevice + 32);
v10 = *((_DWORD *)FxDevice + 8);
do
{
v11 = v10;
v10 = _InterlockedCompareExchange((volatile signed __int32 *)FxDevice + 8, v10, v10);
}
while( v11 != v10 );
if( (v10 & 0x100) != 0 )
{
v3 = (_DEVICE_OBJECT *)*((_QWORD *)FxDevice + 65);
v4 = *((_QWORD *)FxDevice + 68);
a5 = *((_QWORD *)FxDevice + 70);
v6 = *((_DWORD *)FxDevice + 133);
}
}
else
{
v9 = 0;
KeSetEvent((PRKEVENT)((char *)FxDevice + 568), 0, 0);
if( _InterlockedExchangeAdd((volatile signed __int32 *)FxDevice + 61, 0xFFFFFFFF) == 1 )
KeSetEvent((PRKEVENT)((char *)FxDevice + 248), 0, 0);
}
ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)(*((_QWORD *)FxDevice + 6) + 88i64));
__writecr8(v2);
if( v9 )
PopRequestPowerIrp(v3, 2, v6, v4, a5, 1, 0i64);
}Referenced by:
No references.