Compartir archivos y memoria

La asignación de archivos se puede usar para compartir un archivo o memoria entre dos o más procesos. Para compartir un archivo o memoria, todos los procesos deben usar el nombre o el identificador del mismo objeto de asignación de archivos.

Para compartir un archivo, el primer proceso crea o abre un archivo mediante la función CreateFile . A continuación, crea un objeto de asignación de archivos mediante la función CreateFileMapping , especificando el identificador de archivo y un nombre para el objeto de asignación de archivos. Los nombres de los objetos event, semaphore, mutex, waitable timer, job y file mapping comparten el mismo espacio de nombres. Por lo tanto, se produce un error en las funciones CreateFileMapping y OpenFileMapping si especifican un nombre que está en uso por un objeto de otro tipo.

Para compartir memoria que no está asociada a un archivo, un proceso debe usar la función CreateFileMapping y especificar INVALID_HANDLE_VALUE como el parámetro hFile en lugar de un identificador de archivo existente. El objeto de asignación de archivos correspondiente tiene acceso a la memoria respaldada por el archivo de paginación del sistema. Debe especificar un tamaño mayor que cero al especificar un hFile de INVALID_HANDLE_VALUE en una llamada a CreateFileMapping.

La manera más fácil de obtener otros procesos para obtener un identificador del objeto de asignación de archivos creado por el primer proceso es usar la función OpenFileMapping y especificar el nombre del objeto. Esto se conoce como memoria compartida con nombre. Si el objeto de asignación de archivos no tiene un nombre, el proceso debe obtener un identificador para él a través de la herencia o duplicación. Para obtener más información sobre la herencia y la duplicación, vea Herencia.

Los procesos que comparten archivos o memoria deben crear vistas de archivo mediante la función MapViewOfFile o MapViewOfFileEx . Deben coordinar su acceso mediante semáforos, exclusiones mutuas, eventos o alguna otra técnica de exclusión mutua. Para obtener más información, consulte Sincronización.

Un objeto de asignación de archivos compartidos no se destruirá hasta que todos los procesos que lo usen cierren sus identificadores mediante la función CloseHandle .

Para obtener información sobre la seguridad de objetos de asignación de archivos, vea Seguridad de asignación de archivos y derechos de acceso.

Crear memoria compartida con nombre