PpProfileCommitTransitioningDock

VOID __stdcall PpProfileCommitTransitioningDock(_DEVICE_NODE *DeviceNode, PROFILE_STATUS ChangeInPresence){
  __int64 v3; 
  _QWORD *v5; 
  __int64 v6; 
  _QWORD *v7; 
  UINT8 ProfileChanged; 
  WCHAR *ID; 
  ID = 0i64;
  v3 = *((_QWORD *)DeviceNode + 74);
  if( ChangeInPresence == DOCK_DEPARTING )
  {
    if( v3 )
    {
      ExFreePoolWithTag(*((PVOID *)DeviceNode + 74), 0);
      *((_QWORD *)DeviceNode + 74) = 0i64;
    }
    ExAcquireFastMutex(&PiProfileDeviceListLock);
    v5 = (_QWORD *)((char *)DeviceNode + 576);
    v6 = *((_QWORD *)DeviceNode + 72);
    if( *(_DEVICE_NODE **)(v6 + 8) != (_DEVICE_NODE *)((char *)DeviceNode + 576)
      || (v7 = (_QWORD *)*((_QWORD *)DeviceNode + 73), (_QWORD *)*v7 != v5) )
    {
      __fastfail(3u);
    }
    *v7 = v6;
    *(_QWORD *)(v6 + 8) = v7;
    *((_QWORD *)DeviceNode + 73) = (char *)DeviceNode + 576;
    *v5 = v5;
    --PiProfileDeviceCount;
    KeReleaseGuardedMutex(&PiProfileDeviceListLock);
  }
  else if( !v3 )
  {
    PnpIrpQueryID(*((DEVICE_OBJECT **)DeviceNode + 4), BusQueryDeviceSerialNumber, &ID);
    *((_QWORD *)DeviceNode + 74) = ID;
  }
  *((_DWORD *)DeviceNode + 142) = 1;
  if( _InterlockedExchangeAdd(&PiProfileDevicesInTransition, 0xFFFFFFFF) == 1 )
  {
    ProfileChanged = 0;
    if( (ChangeInPresence != DOCK_ARRIVING || *((_QWORD *)DeviceNode + 74))
      && (int)PnpProfileUpdateHardwareProfile((UINT8)&ProfileChanged) >= 0
      && ProfileChanged )
    {
      PnpRequestHwProfileChangeNotification(&GUID_HWPROFILE_CHANGE_COMPLETE, 2, 0i64, 0i64);
      PiProfileUpdateDeviceTree();
    }
    else if( PiProfileChangeCancelRequired )
    {
      PnpRequestHwProfileChangeNotification(&GUID_HWPROFILE_CHANGE_CANCELLED, 2, 0i64, 0i64);
    }
    KeReleaseSemaphore(&PiProfileChangeSemaphore, 0i64, 1i64, 0);
  }
}

Referenced by:

PipProcessStartPhase2
PnpRemoveLockedDeviceNode