PiSwRemovePdoAssociation

NTSTATUS __stdcall PiSwRemovePdoAssociation(PI_SWD_OBJECT *SwDeviceObject, _DEVICE_OBJECT *ChildDeviceObject){
  NTSTATUS v2; 
  PI_SWD_PDO_ASSOCIATION *PdoAssociation; 
  __int64 v4; 
  PI_SWD_PDO_ASSOCIATION **v5; 
  __int64 v6; 
  PI_SWD_PDO_ASSOCIATION **v7; 

  v2 = 0;
  PdoAssociation = (PI_SWD_PDO_ASSOCIATION *)PiSwFindPdoAssociation(
                                               (__int64)SwDeviceObject,
                                               (__int64)ChildDeviceObject,
                                               0);
  if( !PdoAssociation )
    return -1073741275;
  v4 = *(_QWORD *)PdoAssociation;
  if( *(PI_SWD_PDO_ASSOCIATION **)(*(_QWORD *)PdoAssociation + 8i64) != PdoAssociation
    || (v5 = (PI_SWD_PDO_ASSOCIATION **)*((_QWORD *)PdoAssociation + 1), *v5 != PdoAssociation)
    || (*v5 = (PI_SWD_PDO_ASSOCIATION *)v4,
        *(_QWORD *)(v4 + 8) = v5,
        v6 = *((_QWORD *)PdoAssociation + 2),
        *(PI_SWD_PDO_ASSOCIATION **)(v6 + 8) != PdoAssociation + 4)
    || (v7 = (PI_SWD_PDO_ASSOCIATION **)*((_QWORD *)PdoAssociation + 3), *v7 != PdoAssociation + 4) )
  {
    __fastfail(3u);
  }
  *v7 = (PI_SWD_PDO_ASSOCIATION *)v6;
  *(_QWORD *)(v6 + 8) = v7;
  PiSwPdoAssociationFree(PdoAssociation);
  return v2;
}

Referenced by:

PiSwUnassociateDeviceObject