PiDmGetObjectConstraintList

NTSTATUS __stdcall PiDmGetObjectConstraintList(
        PI_DM_LIST_ID ListId,
        WCHAR *ConstraintObjectName,
        VOID *MatchCallbackContext,
        WCHAR *Buffer,
        UINT64 BufferLength,
        UINT64 *RequiredLength){
  unsigned int *v6; 
  unsigned int v7; 
  _WORD *v8; 
  NTSTATUS v11; 
  int v12; 
  unsigned int v13; 
  INT64 v15[2]; 
  __int128 v16; 
  _PI_DM_OBJECT *Object; 
  unsigned int *v18; 

  v6 = v18;
  v7 = (unsigned int)RequiredLength;
  v8 = (_WORD *)BufferLength;
  *v18 = 0;
  Object = 0i64;
  *(_OWORD *)v15 = 0i64;
  v16 = 0i64;
  if( v7 )
    *v8 = 0;
  v11 = PiDmGetObject(PiDmListDefs[5 * ListId], ConstraintObjectName, &Object);
  v12 = v11;
  if( v11 < 0 )
  {
    if( v11 != -1073741772 )
      goto LABEL_10;
    v12 = 0;
  }
  else
  {
    v15[0] = (INT64)PiDmCmObjectMatchCallback;
    v15[1] = (INT64)Buffer;
    *(_QWORD *)&v16 = v8;
    *((_QWORD *)&v16 + 1) = v7;
    v12 = PiDmListEnumObjectsWithCallback(
            (unsigned int)ListId,
            (_EX_PUSH_LOCK *)Object,
            (INT64)PiDmGetObjectListCallback,
            (INT64)v15);
    if( v12 < 0 )
      goto LABEL_10;
    *v6 = HIDWORD(v16);
  }
  if( *v6 )
  {
    v13 = *v6 + 1;
    *v6 = v13;
    if( v8 && v7 >= v13 )
      v8[v13 - 1] = 0;
    else
      v12 = -1073741789;
  }
LABEL_10:
  if( Object )
    PiDmObjectRelease(Object);
  return v12;
}

Referenced by:

PiDmGetCmObjectConstraintListFromCache