CmGetDeclarativeFilterList

NTSTATUS __stdcall CmGetDeclarativeFilterList(
        INT64 a1,
        INT64 a2,
        const WCHAR *a3,
        const WCHAR *a4,
        const WCHAR *a5,
        _WORD *a6,
        UINT64 a7,
        UINT64 *a8){
  const wchar_t *v9; 
  NTSTATUS v11; 
  _WORD *pszDest; 
  int v13; 
  int v14; 
  NTSTATUS appended; 
  INT64 v16; 
  NTSTATUS v17; 
  NTSTATUS v18; 
  __int64 v19; 
  INT64 v21; 
  INT64 v22[2]; 
  const WCHAR *v23; 

  v23 = a4;
  v9 = a3;
  LODWORD(v22[0]) = 0;
  v11 = 0;
  pszDest = 0i64;
  v13 = 0;
  v14 = 0;
  if( a6 )
  {
    if( (unsigned int)a7 < 2 )
      return -1073741811;
    v14 = a7;
    pszDest = a6;
    *a6 = 0;
  }
  if( !a3 )
  {
    LODWORD(v21) = v14;
    appended = CmAppendDeclarativeDefaultFilters(a1, a2, a5, (INT64)a4, (UINT64)pszDest, v21, (INT64)v22);
    v13 = v22[0];
    v11 = appended;
    goto LABEL_26;
  }
  if( *a3 )
  {
    while( 1 )
    {
      if( !wcsicmp(v9, a4) )
      {
        LODWORD(v21) = v14;
        v17 = CmAppendDeclarativeDefaultFilters(a1, a2, a5, v16, (UINT64)pszDest, v21, (INT64)v22);
        if( v17 == -1073741789 )
        {
          v11 = -1073741789;
          pszDest = 0i64;
        }
        else if( v17 < 0 )
        {
          v11 = v17;
          break;
        }
        v13 += LODWORD(v22[0]);
        if( pszDest )
        {
          v14 -= LODWORD(v22[0]);
          pszDest += (unsigned __int64)LODWORD(v22[0]) >> 1;
        }
      }
      v18 = CmAppendDeclarativeFilterLevel(a1, (VOID *)a2, v9, (__int64)pszDest, v14, v22);
      if( v18 == -1073741789 )
      {
        v11 = -1073741789;
        pszDest = 0i64;
      }
      else if( (int)(v18 + 0x80000000) >= 0 && v18 != -1073741772 )
      {
        v11 = v18;
        break;
      }
      v13 += LODWORD(v22[0]);
      if( pszDest )
      {
        v14 -= LODWORD(v22[0]);
        pszDest += (unsigned __int64)LODWORD(v22[0]) >> 1;
      }
      v19 = -1i64;
      do
        ++v19;
      while( v9[v19] );
      v9 += v19 + 1;
      if( !*v9 )
        break;
      a4 = v23;
    }
  }
LABEL_26:
  *(_DWORD *)a8 = v13 + 2;
  if( v11 >= 0 && v13 + 2 > (unsigned int)a7 )
    return -1073741789;
  return v11;
}

Referenced by:

CmGetDeviceCompoundFiltersWorker
CmGetInstallerClassCompoundFiltersWorker