Windows核心编程 第十七章 -内存映射文件(下)

本文详细介绍了在Windows核心编程中使用内存映射文件的五个步骤,包括创建或打开文件内核对象、创建文件映射内核对象、将文件数据映射到进程地址空间、撤消文件数据映射以及关闭文件映射对象和文件对象。内容涵盖了CreateFile、CreateFileMapping和MapViewOfFile等关键函数的使用,并讨论了页文件支持的内存映射文件和进程间数据共享。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

17.3 使用内存映射文件

若要使用内存映射文件,必须执行下列操作步骤:

1) 创建或打开一个文件内核对象,该对象用于标识磁盘上你想用作内存映射文件的文件。

2) 创建一个文件映射内核对象,告诉系统该文件的大小和你打算如何访问该文件。

3) 让系统将文件映射对象的全部或一部分映射到你的进程地址空间中。

当完成对内存映射文件的使用时,必须执行下面这些步骤将它清除:

1) 告诉系统从你的进程的地址空间中撤消文件映射内核对象的映像。

2) 关闭文件映射内核对象。

3) 关闭文件内核对象。

下面将详细介绍这些操作步骤。

17.3.1 步骤1:创建或打开文件内核对象

    若要创建或打开一个文件内核对象,总是要调用C r e a t e F i l e函数:


    C r e a t e F i l e函数拥有好几个参数。这里只重点介绍前 3个参数,即p s z F i l e N a m ed w D e s i r e dA c c e s sd w S h a r e M o d e

你可能会猜到,第一个参数 p s z F i l e N a m e用于指明要创建或打开的文件的名字(包括一个选项路径)。第二个参数d w D e s i r e d A c c e s s用于设定如何访问该文件的内容。可以设定表 1 7 - 3所列的4个值中的一个。


    当创建或打开一个文件,将它作为一个内存映射文件来使用时,请选定最有意义的一个或

多个访问标志,以说明你打算如何访问文件的数据。对内存映射文件来说,必须打开用于只读访问或读写访问的文件,因此,可以分别设定 G E N E R I C _ R E A DGENERIC_READ  |G E N E R I C _ W R I T E

    第三个参数d w S h a r e M o d e告诉系统你想如何共享该文件。可以为 d w S h a r e M o d e设定表1 7 - 4所列的4个值之一。


    如果C r e a t e F i l e函数成功地创建或打开指定的文件,便返回一个文件内核对象的句柄,否则返回I N VA L I D _ H A N D L E _ VA L U E

注意 能够返回句柄的大多数Wi n d o w s函数如果运行失败,那么就会返回N U L L。但是,C r e a t e F i l e函数将返回I N VA L I D _ H A N D L E _ VA L U E,它定义为((H A N D L E- 1)。

17.3.2 步骤2:创建一个文件映射内核对象

    调用C r e a t e F i l e函数,就可以将文件映像的物理存储器的位置告诉操作系统。你传递的路径名用于指明支持文件映像的物理存储器在磁盘(或网络或光盘)上的确切位置。这时,必须告诉系统,文件映射对象需要多少物理存储器。若要进行这项操作,可以调用 C r e a t e F i l e M a p p i n g函数:


    第一个参数h F i l e用于标识你想要映射到进程地址空间中的文件句柄。该句柄由前面调用的C r e a t e F i l e函数返回。p s a参数是指向文件映射内核对象的S E C U R I T Y _ AT T R I B U T E S结构的指针,通常传递的值是N U L L(它提供默认的安全特性,返回的句柄是不能继承的&#x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值