CreateFile() permet aussi de régler les attributs du fichier (lecture seule, archive), d'optimiser la lecture du fichier (random access, sequential), de garder un fichier dit temporaire en mémoire, de supprimer le fichier automatiquement après fermeture, de lire le fichier en mode non-bloquant... Et accessoirement, de donner directement une ACL au fichier (peu utilisé).

Bref, pas mal de chose qu'un fopen() ne peut pas faire...
Encore que, en lecture, pas mal de ces fonctions deviennent inutilisables.