PpProfileIncludeInHardwareProfileTransition

VOID __stdcall PpProfileIncludeInHardwareProfileTransition(_DEVICE_NODE *DeviceNode, PROFILE_STATUS ChangeInPresence){
  _LIST_ENTRY *p_ListEntry; 
  _LIST_ENTRY *v5; 
  PVOID P; 

  P = 0i64;
  if( ChangeInPresence == DOCK_ARRIVING )
  {
    p_ListEntry = &DeviceNode->DockInfo.ListEntry;
    if( p_ListEntry->Flink == p_ListEntry )
    {
      ExAcquireFastMutex((PFAST_MUTEX)((char *)&PnpReplaceEvent + 160));
      v5 = (_LIST_ENTRY *)*(&PnpReplaceEvent + 28);
      if( *(_UNKNOWN **)(*(&PnpReplaceEvent + 28) + 8i64) != (_UNKNOWN *)((char *)&PnpReplaceEvent + 224) )
        __fastfail(3u);
      p_ListEntry->Blink = (_LIST_ENTRY *)((char *)&PnpReplaceEvent + 224);
      p_ListEntry->Flink = v5;
      v5->Blink = p_ListEntry;
      ++*(&PnpReplaceEvent + 33);
      *(&PnpReplaceEvent + 28) = p_ListEntry;
      KeReleaseGuardedMutex((PKGUARDED_MUTEX)((char *)&PnpReplaceEvent + 160));
    }
    if( PnpIrpQueryID(DeviceNode->PhysicalDeviceObject, 4, (UINT64 *)&P) >= 0 && P )
      ExFreePoolWithTag(P, 0);
  }
  _InterlockedIncrement((_DWORD *)&PnpReplaceEvent + 60);
  DeviceNode->DockInfo.DockStatus = ChangeInPresence;
}

Referenced by:

PipProcessStartPhase1
PnpProcessQueryRemoveAndEject