PnpTrackQueryRemoveDevices

UINT8 __fastcall PnpTrackQueryRemoveDevices(_RELATION_LIST *List, char a2){
  UINT8 result; 
  _DEVICE_NODE *DeviceNode; 
  _RELATION_LIST_MARKER Marker; 
  _DEVICE_OBJECT *DeviceObject; 

  DeviceObject = 0i64;
  Marker.Mode = ENUMERATE_ANY_ORDER;
  Marker.Counter = 0;
  while( 1 )
  {
    result = IopEnumerateRelations(List, &Marker, &DeviceObject, 0i64, 0i64);
    if( !result )
      break;
    if( DeviceObject )
      DeviceNode = (_DEVICE_NODE *)DeviceObject->DeviceObjectExtension->DeviceNode;
    else
      DeviceNode = 0i64;
    if( a2 )
      PipSetDevNodeUserFlags(DeviceNode, 0x100ui64);
    else
      PipClearDevNodeUserFlags(DeviceNode, 0x100ui64);
  }
  return result;
}

Referenced by:

PnpProcessCompletedEject
PnpProcessQueryRemoveAndEject