PopFxAssignDeviceToDevNode

VOID __stdcall PopFxAssignDeviceToDevNode(_DEVICE_NODE *DevNode, _POP_FX_DEVICE *FxDevice){
  unsigned __int64 v4; 
  volatile int FxSleepCount; 
  volatile int FxActivationCount; 

  v4 = (unsigned __int8)ExAcquireSpinLockExclusive((INT64 *)&DevNode->FxDeviceLock);
  if( FxDevice )
  {
    _InterlockedAnd(&DevNode->PowerFlags, 0xFFFFFFF7);
    *(_WORD *)&DevNode->gap5C[4] = 0;
    *(_DWORD *)&DevNode->gap5C[8] = 0;
    *(_QWORD *)&DevNode->gap5C[20] = &DevNode->gap5C[12];
    *(_QWORD *)&DevNode->gap5C[12] = &DevNode->gap5C[12];
    DevNode->gap5C[6] = 6;
  }
  else
  {
    _InterlockedAnd(&DevNode->PowerFlags, 0xFFFFFFFB);
  }
  FxSleepCount = DevNode->FxSleepCount;
  FxActivationCount = DevNode->FxActivationCount;
  DevNode->FxSleepCount = 0;
  DevNode->FxActivationCount = FxActivationCount - FxSleepCount;
  DevNode->FxDevice = FxDevice;
  ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)&DevNode->FxDeviceLock);
  __writecr8(v4);
}

Referenced by:

PopFxRegisterDevice
PopFxUnregisterDevice