StringListElementSubstringMatch

NTSTATUS __stdcall StringListElementSubstringMatch(
        WCHAR *StringList,
        UINT64 PropertyType,
        WCHAR *SubstringList,
        INT64 IgnoreCase,
        _DEVPROP_OPERATOR Op){
  unsigned int v5; 
  WCHAR *v6; 
  int v7; 
  NTSTATUS v9; 
  _DEVPROP_OPERATOR v10; 
  WCHAR *v11; 
  __int64 v12; 
  __int64 v13; 

  v5 = IgnoreCase;
  v6 = SubstringList;
  v7 = PropertyType;
  v9 = 0;
  v10 = DEVPROP_OPERATOR_NONE;
  switch( Op )
  {
    case DEVPROP_OPERATOR_LIST_ELEMENT_BEGINS_WITH:
      v10 = DEVPROP_OPERATOR_BEGINS_WITH;
      break;
    case DEVPROP_OPERATOR_LIST_ELEMENT_ENDS_WITH:
      v10 = DEVPROP_OPERATOR_ENDS_WITH;
      break;
    case DEVPROP_OPERATOR_LIST_ELEMENT_CONTAINS:
      v10 = DEVPROP_OPERATOR_CONTAINS;
      break;
  }
  if( *SubstringList )
  {
    do
    {
      v11 = StringList;
      if( *StringList )
      {
        while( !SubstringMatch(v11, 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( v6[v13] );
      v6 += v13 + 1;
    }
    while( *v6 );
  }
  return v9;
}

Referenced by:

PropertyEval