PpProfileCommitTransitioningDock

VOID __stdcall PpProfileCommitTransitioningDock(_DEVICE_NODE *DeviceNode, PROFILE_STATUS ChangeInPresence){
  wchar_t *SerialNumber; 
  _LIST_ENTRY *p_ListEntry; 
  _LIST_ENTRY *Flink; 
  _LIST_ENTRY *Blink; 
  wchar_t *v8; 

  v8 = 0i64;
  SerialNumber = DeviceNode->DockInfo.SerialNumber;
  if( ChangeInPresence == DOCK_DEPARTING )
  {
    if( SerialNumber )
    {
      ExFreePoolWithTag(DeviceNode->DockInfo.SerialNumber, 0);
      DeviceNode->DockInfo.SerialNumber = 0i64;
    }
    ExAcquireFastMutex((PFAST_MUTEX)((char *)&PnpReplaceEvent + 160));
    p_ListEntry = &DeviceNode->DockInfo.ListEntry;
    Flink = DeviceNode->DockInfo.ListEntry.Flink;
    if( Flink->Blink != &DeviceNode->DockInfo.ListEntry
      || (Blink = DeviceNode->DockInfo.ListEntry.Blink, Blink->Flink != p_ListEntry) )
    {
      __fastfail(3u);
    }
    Blink->Flink = Flink;
    Flink->Blink = Blink;
    DeviceNode->DockInfo.ListEntry.Blink = &DeviceNode->DockInfo.ListEntry;
    p_ListEntry->Flink = p_ListEntry;
    --*(&PnpReplaceEvent + 33);
    KeReleaseGuardedMutex((PKGUARDED_MUTEX)((char *)&PnpReplaceEvent + 160));
  }
  else if( !SerialNumber )
  {
    PnpIrpQueryID(DeviceNode->PhysicalDeviceObject, 4, (UINT64 *)&v8);
    DeviceNode->DockInfo.SerialNumber = v8;
  }
  DeviceNode->DockInfo.DockStatus = DOCK_QUIESCENT;
  if( _InterlockedExchangeAdd((_DWORD *)&PnpReplaceEvent + 60, 0xFFFFFFFF) == 1 )
  {
    if( ChangeInPresence != DOCK_ARRIVING || DeviceNode->DockInfo.SerialNumber )
      PnpProfileUpdateHardwareProfile();
    if( *(&PnpReplaceEvent + 288) )
      PnpRequestHwProfileChangeNotification(&GUID_HWPROFILE_CHANGE_CANCELLED, 2, 0i64, 0i64);
    KeReleaseSemaphore((_KSEMAPHORE *)&PnpReplaceEvent + 8, 0i64, 1i64, 0);
  }
}

Referenced by:

PipProcessStartPhase2
PnpRemoveLockedDeviceNode