StringListElementSubstringMatch

INT64 __fastcall StringListElementSubstringMatch(WCHAR *a1, INT64 a2, CHAR *a3, INT64 a4, INT64 a5){
  unsigned int v5; 
  CHAR *v6; 
  int v7; 
  unsigned int v9; 
  _DEVPROP_OPERATOR v10; 
  WCHAR *v11; 
  __int64 v12; 
  __int64 v13; 
  v5 = a4;
  v6 = a3;
  v7 = a2;
  v9 = 0;
  v10 = DEVPROP_OPERATOR_NONE;
  switch( (_DWORD)a5 )
  {
    case 0x2000:
      v10 = DEVPROP_OPERATOR_BEGINS_WITH;
      break;
    case 0x3000:
      v10 = DEVPROP_OPERATOR_ENDS_WITH;
      break;
    case 0x4000:
      v10 = DEVPROP_OPERATOR_CONTAINS;
      break;
  }
  if( *(_WORD *)a3 )
  {
    do
    {
      v11 = a1;
      if( *a1 )
      {
        while( !(unsigned int)SubstringMatch(v11, (const wchar_t *)v6, v5, v10) )
        {
          v12 = -1i64;
          do
            ++v12;
          while( v11[v12] );
          v11 += v12 + 1;
          if( !*v11 )
            goto LABEL_15;
        }
        v9 = 1;
      }
LABEL_15:
      if( v7 == 18 || v7 == 8210 && v9 )
        break;
      v13 = -1i64;
      do
        ++v13;
      while( *(_WORD *)&v6[2 * v13] );
      v6 += 2 * v13 + 2;
    }
    while( *(_WORD *)v6 );
  }
  return v9;
}

Referenced by:

PropertyEval