PiDmGetObjectConstraintList

INT64 __fastcall PiDmGetObjectConstraintList(INT64 a1, WCHAR *a2, INT64 a3, INT64 a4, _WORD *a5, UINT64 a6, UINT64 *a7){
  UINT64 *v7; 
  unsigned int v8; 
  _WORD *v9; 
  int v11; 
  int Object; 
  int v13; 
  unsigned int v14; 
  __int128 v16; 
  __int128 v17; 
  PVOID P; 
  v7 = a7;
  v8 = a6;
  v9 = a5;
  v11 = a1;
  *(_DWORD *)a7 = 0;
  P = 0i64;
  v16 = 0i64;
  v17 = 0i64;
  if( v8 )
    *v9 = 0;
  Object = PiDmGetObject(LODWORD(PiDmListDefs[5 * (int)a1]), a2, (INT64 *)&P);
  v13 = Object;
  if( Object < 0 )
  {
    if( Object != -1073741772 )
      goto LABEL_10;
    v13 = 0;
  }
  else
  {
    *(_QWORD *)&v16 = PiDmCmObjectMatchCallback;
    *((_QWORD *)&v16 + 1) = a4;
    *(_QWORD *)&v17 = v9;
    *((_QWORD *)&v17 + 1) = v8;
    v13 = PiDmListEnumObjectsWithCallback(v11, (ULONG_PTR)P, PiDmGetObjectListCallback, (__int64)&v16);
    if( v13 < 0 )
      goto LABEL_10;
    *(_DWORD *)v7 = HIDWORD(v17);
  }
  if( *(_DWORD *)v7 )
  {
    v14 = *(_DWORD *)v7 + 1;
    *(_DWORD *)v7 = v14;
    if( v9 && v8 >= v14 )
      v9[v14 - 1] = 0;
    else
      v13 = -1073741789;
  }
LABEL_10:
  if( P )
    PiDmObjectRelease((CHAR *)P);
  return(unsigned int)v13;
}

Referenced by:

PiDmGetCmObjectConstraintListFromCache