IopAddRelationToList

VOID __fastcall IopAddRelationToList(_FILE_OBJECT *a1, _SHARE_ACCESS *a2){
  _DEVICE_TAGGED_FOR_REMOVAL v2; 
  _DEVICE_TAGGED_FOR_REMOVAL v3; 
  __int64 v5; 
  _DEVICE_OBJECT *v6; 
  _DEVICE_RELATION_LEVEL v7; 
  char v8; 
  _DEVICE_RELATION_LEVEL v9; 

  v3 = v2;
  if( a2 )
    v5 = *(_QWORD *)(*(_QWORD *)&a2[11].Readers + 40i64);
  else
    v5 = 0i64;
  if( v5 )
  {
    PipIsDeviceInDeviceObjectList();
    if( v8 )
    {
      v9 = MEMORY[8];
      if( v7 > MEMORY[8] )
        v9 = v7;
      MEMORY[8] = v9;
      if( v3 == DEVICE_TAGGED )
      {
        ++*(_DWORD *)(*(_QWORD *)&a1->Type + 8i64);
        MEMORY[0x10] |= 1u;
      }
    }
    else if( PipDeviceObjectListAdd((_DEVICE_OBJECT_LIST **)a1, v6, v7, v3) >= 0 )
    {
      LOBYTE(a1->DeviceObject) = 0;
    }
  }
}

Referenced by:

IopMergeRelationLists
PnpCancelRemoveOnHungDevices
PnpInvalidateRelationsInList
PnpProcessRelation