Windowsが当初使用していたFATファイルシステムの影響です。 FATファイルシステムのディレクトリエントリの構造としては、ファイル名8バイト、拡張子3バイトの固定長フィールドとなっており、それぞれの長さに満たない場合は空白で埋められる仕様です。このため、ファイル名と拡張子の間に.は格納されていません。 例えば空白を_で表すと、ファイル名README.TXTであればREADME__TXTと格納され、READMEであればREADME_____となります。 このような事情があるため、Windows APIでは暗黙の.を許容します。つまりREADME.、README.*、*.*などで検索を行うとファイル名READMEがヒットします。現在はNTFS等、他のファイルシステムが使われていますが、ファイルシステムに依らずWindows APIは上記振る舞いを継承しています。 ではどうすべきか 実は使