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