共享文件和内存

文件映射可用于在两个或多个进程之间共享文件或内存。 若要共享文件或内存,所有进程都必须使用同一文件映射对象的名称或句柄。

若要共享文件,第一个进程使用 CreateFile 函数创建或打开文件。 接下来,它使用 CreateFileMapping 函数创建文件映射对象,指定文件句柄和文件映射对象的名称。 事件名称、信号灯、互斥体、可等待的计时器、作业和文件映射对象共享同一命名空间。 因此,如果 CreateFileMappingOpenFileMapping 函数指定了另一种类型的对象正在使用的名称,则失败。

若要共享未与文件关联的内存,进程必须使用 CreateFileMapping 函数,并将INVALID_HANDLE_VALUE指定为 hFile 参数而不是现有文件句柄。 相应的文件映射对象访问系统分页文件支持的内存。 在对 CreateFileMapping 的调用中指定INVALID_HANDLE_VALUE的 hFile 时,必须指定大于零的大小。

其他进程获取由第一个进程创建的文件映射对象的句柄的最简单方法是使用 OpenFileMapping 函数并指定对象的名称。 这称为 命名的共享内存。 如果文件映射对象没有名称,则进程必须通过继承或重复获取对它的句柄。 有关继承和重复的详细信息,请参阅 “继承”。

共享文件或内存的进程必须使用 MapViewOfFileMapViewOfFileEx 函数创建文件视图。 它们必须使用信号灯、互斥体、事件或其他一些相互排除技术协调其访问。 有关详细信息,请参阅 同步

在使用 CloseHandle 函数关闭其句柄的所有进程之前,不会销毁共享文件映射对象。

有关文件映射对象安全性的信息,请参阅 文件映射安全和访问权限

创建命名共享内存