Partage de fichiers et de mémoire

Le mappage de fichier peut être utilisé pour partager un fichier ou une mémoire entre deux ou plusieurs processus. Pour partager un fichier ou une mémoire, tous les processus doivent utiliser le nom ou le handle du même objet de mappage de fichier.

Pour partager un fichier, le premier processus crée ou ouvre un fichier à l’aide de la fonction CreateFile . Ensuite, il crée un objet de mappage de fichier à l’aide de la fonction CreateFileMapping , en spécifiant le descripteur de fichier et un nom pour l’objet de mappage de fichier. Les noms des objets Event, Semaphore, mutex, Timer Timer, Job et file Mapping partagent le même espace de noms. Par conséquent, les fonctions CreateFileMapping et OpenFileMapping échouent si elles spécifient un nom qui est utilisé par un objet d’un autre type.

Pour partager la mémoire qui n’est pas associée à un fichier, un processus doit utiliser la fonction CreateFileMapping et spécifier une valeur de handle non valide _ _ en tant que paramètre hFile au lieu d’un descripteur de fichier existant. L’objet de mappage de fichier correspondant accède à la mémoire sauvegardée par le fichier de pagination système. Vous devez spécifier une taille supérieure à zéro quand vous spécifiez un hFile de _ valeur de handle non valide _ dans un appel à CreateFileMapping.

Le moyen le plus simple pour d’autres processus d’obtenir un handle de l’objet de mappage de fichier créé par le premier processus consiste à utiliser la fonction OpenFileMapping et à spécifier le nom de l’objet. C’est ce que l’on appelle la « mémoire partagée». Si l’objet de mappage de fichier n’a pas de nom, le processus doit obtenir un descripteur à l’aide de l’héritage ou de la duplication. Pour plus d’informations sur l’héritage et la duplication, consultez héritage.

Les processus qui partagent des fichiers ou de la mémoire doivent créer des vues de fichier à l’aide de la fonction MapViewOfFile ou MapViewOfFileEx . Ils doivent coordonner leur accès à l’aide de sémaphores, de mutex, d’événements ou d’une autre technique d’exclusion mutuelle. Pour plus d’informations, consultez Synchronization.

Un objet de mappage de fichier partagé n’est pas détruit jusqu’à ce que tous les processus qui l’utilisent ferment leurs Handles à l’aide de la fonction CloseHandle .

Pour plus d’informations sur la sécurité de l’objet de mappage de fichiers, consultez sécurité du mappage de fichiers et droits d’accès.

Création d’une mémoire partagée nommée