2010-07-12 3 views
4

Je suis préoccupé par les dangers de l'utilisation d'E/S mappées en mémoire, via CreateFileMapping, sur les systèmes de fichiers FAT. Le scénario spécifique est les utilisateurs ouvrant des documents directement à partir de clés USB (ouais, vous essayez et interdisez-les faire!).Win32 prend-il en charge les fichiers mappés en mémoire (CreateFileMapping) sur les systèmes de fichiers FAT?

Le MSDN Managing Memory-Mapped Files article ne dit rien sur les contraintes du système de fichiers.

Mise à jour

Je n'ai pas eu de véritable raison d'être concerné, mais un vague sentiment que je avais lu au sujet des problèmes avec eux à un moment donné (ma carrière couvre plus de 25 ans, donc j'ai beaucoup des profondeurs vagues dans ma mémoire, tout le chemin du retour à des micros 8 bits!). La question de savoir s'ils devraient ou non être soutenus est assez importante pour moi, alors je voulais savoir si quelqu'un pouvait corroborer mes inquiétudes. Merci d'avoir mis mon esprit au repos.

Répondre

6

Oui, c'est le cas. Il prend même en charge le mappage des fichiers sur CDFS ou sur les lecteurs réseau. Quelle est la source de vos doutes?

7

Les fichiers mappés en mémoire sont l'une de mes fonctionnalités préférées. Il n'y a absolument aucun danger. C'est l'une des fonctionnalités d'E/S Windows extrêmement optimisées. Si l'on démarre un fichier EXE ou charge indirectement une DLL, il est implémenté en interne sous forme de mappage de fichiers mappés en mémoire.

Il est pris en charge sur tous les types de systèmes de fichiers, y compris FAT. Par ailleurs, atzz indique que les fichiers mappés en mémoire sont autorisés sur les lecteurs réseau. Je peux ajouter que ce n'est pas seulement autorisé, mais il est strictement recommandé d'utiliser le fichier mappé en mémoire avec des fichiers du réseau. Dans le cas où l'opération d'E/S sera mise en cache de très bonne manière, ce qui n'est pas fait avec d'autres E/S (C/C++). Si vous voulez que le fichier EXE ne plante pas si vous l'ouvrez à partir du CD ou du réseau, vous pouvez marquer Program Executable avec un bit dans l'en-tête (commutateur de liaison/SWAPRUN voir http://msdn.microsoft.com/en-us/library/chzz5ts6.aspx). Il n'y a pas d'option pour les documents ouverts depuis une clé USB.

Mais quel est le problème exact des utilisateurs? N'utilisent-ils pas l'icône "Retirer le périphérique en toute sécurité"? Ensuite, ils doivent apprendre à le faire exactement comme ils doivent apprendre à ne pas changer l'alimentation de l'ordinateur, mais éteindre l'ordinateur correctement. Pourriez-vous expliquer pourquoi vous trouvez des dangers à utiliser des fichiers mappés en mémoire, et dans quelles situations vous avez des problèmes et si l'utilisation d'autres opérations d'E/S ne pose aucun problème?

Questions connexes