PnpBuildRemovalRelationList

INT64 __fastcall PnpBuildRemovalRelationList(INT64 a1, INT64 a2, INT64 a3, INT64 **a4){
  __int64 v4; 
  _PNP_DEVICE_DELETE_TYPE v7; 
  _DEVICE_NODE *v8; 
  _UNICODE_STRING *RelationList; 
  _UNICODE_STRING *v10; 
  int v11; 
  _RELATION_LIST *v13; 
  v4 = *(_QWORD *)(a1 + 312);
  *a4 = 0i64;
  v7 = (int)a2;
  v8 = *(_DEVICE_NODE **)(v4 + 40);
  RelationList = (_UNICODE_STRING *)IopAllocateRelationList((unsigned int)a2);
  v10 = RelationList;
  if( !RelationList )
    return 3221225626i64;
  v11 = PnpProcessRelation(v8, v7, RELATION_LEVEL_DIRECT_DESCENDANT, (_PNP_VETO_TYPE *)a3, RelationList, v13);
  if( v11 < 0 )
  {
    IopFreeRelationList(v10);
  }
  else
  {
    *a4 = (INT64 *)v10;
    IopSortRelationListForRemove((__int64)v10);
  }
  return(unsigned int)v11;
}

Referenced by:

PnpProcessQueryRemoveAndEject