PopFxNotifyPreDIrpCompletion
INT32 __fastcall PopFxNotifyPreDIrpCompletion(PVOID BugCheckParameter3, INT64 a2, INT64 a3){
int v3;
INT32 result;
INT32 v6;
unsigned __int8 v7;
unsigned __int64 v8;
unsigned int v9;
v3 = a3;
result = _InterlockedCompareExchange((volatile signed __int32 *)BugCheckParameter3 + 206, 0, 0);
if( (result & 0x20) != 0 )
{
_m_prefetchw((char *)BugCheckParameter3 + 32);
result = *((_DWORD *)BugCheckParameter3 + 8);
do
{
v6 = result;
result = _InterlockedCompareExchange((volatile signed __int32 *)BugCheckParameter3 + 8, result, result);
}
while( v6 != result );
if( (result & 0x2000) != 0 )
{
_m_prefetchw((char *)BugCheckParameter3 + 32);
_InterlockedOr((volatile signed __int32 *)BugCheckParameter3 + 8, 0);
KeAcquireSpinLockRaiseToDpc((UINT64 *)BugCheckParameter3 + 144, a2);
v8 = v7;
v9 = *((_DWORD *)BugCheckParameter3 + 295) & 0xFFFFFFFC | 2;
*((_DWORD *)BugCheckParameter3 + 294) = v3;
*((_DWORD *)BugCheckParameter3 + 295) = v9;
KxReleaseSpinLock((UINT64 *)BugCheckParameter3 + 144);
__writecr8(v8);
return PopFxDerefAndCompleteDirectedPowerTransition(BugCheckParameter3);
}
}
return result;
}Referenced by:
PopRequestCompletion