IopIrpExtensionControl

VOID __stdcall IopIrpExtensionControl(UINT64 Flags, UINT64 Enable){
  int v2; 
  int v3; 
  bool v4; 
  UINT8 v5; 
  struct _KLOCK_QUEUE_HANDLE LockHandle; 
  v2 = Enable;
  v3 = Flags;
  memset(&LockHandle, 0, sizeof(LockHandle));
  KeAcquireInStackQueuedSpinLock(&IopFunctionPointerLock, &LockHandle);
  if( v2 == 1 )
  {
    v4 = IopIrpExtensionStatus == 0;
    IopIrpExtensionStatus |= v3;
    if( (v3 & 1) != 0 )
      ++dword_140CF47EC;
    if( (v3 & 2) != 0 )
      ++dword_140CF47F0;
    if( v4 )
    {
      v5 = 1;
LABEL_16:
      IopUpdateFunctionPointers(4ui64, v5, 1u);
    }
  }
  else
  {
    if( (v3 & 1) != 0 && !--dword_140CF47EC )
      IopIrpExtensionStatus &= ~1u;
    if( (v3 & 2) != 0 && !--dword_140CF47F0 )
      IopIrpExtensionStatus &= ~2u;
    if( !IopIrpExtensionStatus )
    {
      v5 = 0;
      goto LABEL_16;
    }
  }
  KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
  __writecr8(LockHandle.OldIrql);
}

Referenced by:

IoRegisterIoTracking
IoUnregisterIoTracking
IopEtwEnableCallback