Partage de fichiers et de mémoire

Le mappage de fichiers peut être utilisé pour partager un fichier ou une mémoire entre deux processus ou plus. 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 fichiers.

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 fichiers à l’aide de la fonction CreateFileMapping , en spécifiant le handle de fichier et un nom pour l’objet de mappage de fichiers. Les noms des objets d’événement, de sémaphore, de mutex, de minuteur d’attente, de travail et de mappage de fichiers partagent le même espace de noms. Par conséquent, les fonctions CreateFileMapping et OpenFileMapping échouent si elles spécifient un nom 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 INVALID_HANDLE_VALUE comme paramètre hFile au lieu d’un handle de fichier existant. L’objet de mappage de fichiers 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 lorsque vous spécifiez un hFile de INVALID_HANDLE_VALUE dans un appel à CreateFileMapping.

Le moyen le plus simple pour d’autres processus d’obtenir un handle de l’objet de mappage de fichiers créé par le premier processus consiste à utiliser la fonction OpenFileMapping et à spécifier le nom de l’objet. Il s’agit de la mémoire partagée nommée. Si l’objet de mappage de fichiers n’a pas de nom, le processus doit obtenir un handle via l’héritage ou 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 affichages de fichiers à l’aide de la fonction MapViewOfFile ou MapViewOfFileEx . Ils doivent coordonner leur accès à l’aide de sémaphores, de mutexes, d’événements ou d’une autre technique d’exclusion mutuelle. Pour plus d’informations, consultez Synchronisation.

Un objet de mappage de fichiers partagés n’est pas détruit tant que tous les processus qui l’utilisent n’y ferment pas leurs handles à l’aide de la fonction CloseHandle .

Pour plus d’informations sur la sécurité des objets de mappage de fichiers, consultez Sécurité et droits d’accès de mappage de fichiers.

Création de la mémoire partagée nommée