PpProfileQueryHardwareProfileChange

NTSTATUS __stdcall PpProfileQueryHardwareProfileChange(
        UINT8 SubsumingExistingDeparture,
        PROFILE_NOTIFICATION_TIME InPnpEvent,
        PNP_VETO_TYPE *VetoType,
        _UNICODE_STRING *VetoName){
  _DWORD *v8; 
  char v9; 
  bool v10; 
  NTSTATUS result; 

  ExAcquireFastMutex((PFAST_MUTEX)((char *)&PnpReplaceEvent + 160));
  v8 = (_DWORD *)*(&PnpReplaceEvent + 28);
  v9 = 0;
  while( v8 != (_DWORD *)((char *)&PnpReplaceEvent + 224) )
  {
    v10 = *(v8 - 2) == 2;
    v8 = *(_DWORD **)v8;
    if( v10 )
      v9 = 1;
  }
  KeReleaseGuardedMutex((PKGUARDED_MUTEX)((char *)&PnpReplaceEvent + 160));
  if( SubsumingExistingDeparture )
    return 0;
  if( v9 )
  {
    *(&PnpReplaceEvent + 288) = 0;
    return 0;
  }
  result = PnpRequestHwProfileChangeNotification(&GUID_HWPROFILE_QUERY_CHANGE, InPnpEvent, VetoType, VetoName);
  *(&PnpReplaceEvent + 288) = result >= 0;
  return result;
}

Referenced by:

PipProcessStartPhase1
PnpProcessQueryRemoveAndEject