There are two kinds of meta-character matching semantics in operation: one for the short-name APIs and one for the long-name APIs. Both of these are described below.
The meta-character matching on short-name APIs is very simple. No "*" characters are allowed, "?" is the only wildcard character allowed. Any "*" characters passed in by the user are converted to "?" characters by the IFS manager before passing the name to the FSDs. The names are also fixed length, that is, the standard 8.3 name format. The algorithm used is the DOS algorithm, which just superimposes two 8.3 strings, with a "?" character standing for any character.
The meta-character matching on long-name APIs is more complex. It provides regular expression matching. The "*" character stands for 0 or more characters, the "?" character stands for 1 character. The dot is not a special character on the long-name APIs, it is just another character that is part of the name. Users can thus do proper regular expression matching such as "a*.b*.c*". There are some special cases where true regular expression matching has been abandoned in favor of compatibility. For example, "*.*" strictly speaking means all filenames that have a dot in them. However, because DOS users use this to mean all files, the long-name matching semantics have been changed to treat "*.*" to be equivalent to a "*" and match all files. "*." is another exception to the rule. In DOS, "*." means all files without an extension, which violates regular expression matching. However, this has been implemented for compatibility reasons.
FSDs should use the IFSMgr_MetaMatch services to do all meta-character matching. This service provides both short-name and long-name matching semantics and also encapsulates all the special cases that have been discussed above, so that FSDs do not need to take care of them. This also ensures that if we need to take care of more special cases in future, FSDs will not need to change, all changes can be made in the IFS manager and all FSDs will automatically work.