创建文件映射对象

【勇芳软件工作室】汉化HomePreviousNext

映射文件的第一步是通过调用CreateFile函数打开文件。为了确保其他进程无法写入映射的文件部分,您应该使用独占访问权限打开该文件。此外,文件句柄应保持打开,直到该进程不再需要文件映射对象。获取独占访问权限的简单方法是在CreateFile【fdwShareMode】参数中指定零。CreateFile返回的句柄由CreateFileMapping函数用于创建文件映射对象。

CreateFileMapping函数返回文件映射对象的句柄。当创建文件视图可以访问共享内存时,将使用此句柄。当您调用CreateFileMapping时,指定对象名称,要从文件映射的字节数以及映射内存的读/写权限。调用CreateFileMapping的第一个进程创建文件映射对象。对现有对象调用CreateFileMapping的进程会接收现有对象的句柄。您可以通过调用GetLastError函数来确定对CreateFileMapping的成功调用是否创建或打开了文件映射对象。GetLastError向创建进程返回NO_ERROR,并向后续进程返回ERROR_ALREADY_EXISTS。

如果访问标志与CreateFile函数打开文件时指定的访问标志冲突,CreateFileMapping功能将失败。例如,要读取和写入文件:

*在CreateFile【fdwAccess】参数中指定GENERIC_READ和GENERIC_WRITE值。

*在CreateFileMapping【fdwProtect】参数中指定PAGE_READWRITE值。

文件映射大小

文件映射对象的大小与被映射文件的大小无关。但是,如果文件映射对象大于文件,系统会在CreateFileMapping返回之前扩展文件。如果文件映射对象小于文件,系统只会从文件映射指定的字节数。

【dwMaximumSizeLow】 【dwMaximumSizeLow】【dwMaximumSizeLow】参数允许您指定要从文件映射的字节数。在Windows 95下,不使用【dwMaximumSizeHigh】,因为32位文件系统不支持。该值应为零。

当您不想更改文件的大小(例如,映射只读文件时),请调用CreateFileMapping并为【dwMaximumSizeHigh】【dwMaximumSizeLow】指定零。这样做会创建与文件完全相同的文件映射对象。否则,您必须计算或估计完成文件的大小,因为文件映射对象的大小是静态的;一旦创建,它们的大小不能增加或减少。

Windows NT:由命名文件支持的文件映射对象的大小受磁盘空间限制。文件视图的大小限于未保留虚拟内存的最大可用连续块。这个最多为2 GB减去该进程已经保留的虚拟内存。

Windows 95:由命名文件支持的文件映射对象的大小也受磁盘空间的限制。文件视图的大小限于共享地址空间中未保留的虚拟内存的最大可用连续块。这最多为1 GB减去其他进程正在使用的虚拟内存,例如使用文件映射的16位基于Windows的应用程序或基于Win32的应用程序。