В замечаниях к GetTempFileName, однако, есть подводные камни:
- файл с подобранным именем создаётся, что не нужно при подборе имени для MoveFile
- алгоритм подбора "limits GetTempFileName to a maximum of 65,535 unique file names if the lpPathName and lpPrefixString parameters remain the same".

Ниже предлагают для большей надёжности использовать GUID-ы. Может быть, имеет смысл применить подобный механизм -- время/случайное число.