PopFxActivateComponent
void __fastcall PopFxActivateComponent(__int64 a1, __int64 a2, char a3, char a4){
UINT64 v8;
char v9;
int *v10;
int v11;
_ETHREAD *CurrentThread;
unsigned __int8 v13;
unsigned __int64 v14;
char v15[64];
memset((INT64)v15, 0i64);
if( (*(_DWORD *)(a1 + 824) & 1) == 0 )
{
if( (a3 & 6) == 4 )
{
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v9 = 1;
--*((_WORD *)CurrentThread + 243);
}
else
{
v9 = 0;
}
v10 = (int *)v15;
if( (a3 & 2) != 0 )
v10 = 0i64;
v11 = _InterlockedIncrement((volatile signed __int32 *)(a2 + 88));
if( v11 == 1 )
{
_InterlockedIncrement((volatile signed __int32 *)(a2 + 88));
PopFxActivateComponentWorker(a1, a2, a4, v10);
}
else
{
if( v11 < 0 )
{
LABEL_10:
if( v9 )
KiLeaveGuardedRegionUnsafe((__int64)KeGetCurrentThread());
return;
}
if( (v11 & 0x40000000) != 0 )
{
KeAcquireSpinLockRaiseToDpc((UINT64 *)(a2 + 128), v8);
v14 = v13;
KxReleaseSpinLock((UINT64 *)(a2 + 128));
__writecr8(v14);
}
}
if( (a3 & 1) != 0 )
KeWaitForSingleObject((PVOID)(a2 + 104), Executive, 0, 0, 0i64);
goto LABEL_10;
}
}Referenced by:
PopFxActivateComponentWorker
PopFxRegisterDeviceWorker