Tenho certeza de que os únicos bytes reservados são 0 (ASCII Nul) e 0x2f (ASCII '/', barra invertida).
Você pode facilmente criar um arquivo com '.', '\' e outras coisas interessantes nele. Pense em "nomes de arquivos unicode", que contêm todos os tipos de valores de bytes estranhos.
Naturalmente, não é possível ter nomes de arquivos duplicados no mesmo diretório, portanto, os arquivos denominados "." e ".." geralmente não pode ser feito por um mero usuário: a parte do sistema de arquivos do kernel os cria quando um diretório é criado.
Observe também que a maioria dos sistemas de arquivos tem um limite no comprimento de um nome de arquivo, e você não pode criar um arquivo cujo nome é a string vazia.