IopIrpExtensionControl
VOID __stdcall IopIrpExtensionControl(UINT64 Flags, UINT64 Enable){
int v2;
int v3;
bool v4;
UINT8 v5;
_KLOCK_QUEUE_HANDLE LockHandle;
v2 = Enable;
v3 = Flags;
memset(&LockHandle, 0, sizeof(LockHandle));
KeAcquireInStackQueuedSpinLock((PKSPIN_LOCK)&stru_140C452E0 + 213, &LockHandle);
if( v2 == 1 )
{
v4 = *(&stru_140CF2E80 + 1626) == 0;
*(&stru_140CF2E80 + 1626) |= v3;
if( (v3 & 1) != 0 )
++*(&stru_140CF2E80 + 1627);
if( (v3 & 2) != 0 )
++*(&stru_140CF2E80 + 1628);
if( v4 )
{
v5 = 1;
LABEL_16:
IopUpdateFunctionPointers(4ui64, v5, 1u);
}
}
else
{
if( (v3 & 1) != 0 && !--*(&stru_140CF2E80 + 1627) )
*(&stru_140CF2E80 + 1626) &= ~1u;
if( (v3 & 2) != 0 && !--*(&stru_140CF2E80 + 1628) )
*(&stru_140CF2E80 + 1626) &= ~2u;
if( !*(&stru_140CF2E80 + 1626) )
{
v5 = 0;
goto LABEL_16;
}
}
KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
__writecr8(LockHandle.OldIrql);
}Referenced by:
IoRegisterIoTracking
IoUnregisterIoTracking
IopEtwEnableCallback