首页 > 编程知识 正文

procreate(maycreate官网)

时间:2023-05-05 04:45:06 阅读:63965 作者:3611

2019独角兽企业大额募集Python工程师标准

函数CreateFileMapping创建或打开指定文件的命名或未命名文件映射对象,并通知系统系统文件映射对象所需的物理存储数量。

handlecreatefilemapping (handle hfile,LP security _ attributeslpattributes,DWORD flProtect,DWORD dwMaximumSizeHigh,Dword 由CreateFile函数返回。 打开文件的权限必须与参数flProtect中指定的保护属性兼容。 建议独占打开文件。 虽然这不是必须的。 如果hFile为INVALID_HANDLE_VALUE,则调用进程必须指定参数dwMaximumSizeHigh和使用参数dwMaximumSizeLow映射的size。 在这种情况下,函数CreateFileMapping会创建系统页支持的指定大小的文件映射对象,而不是磁盘上的命名文件。

文件映射的对象可以共享和继承副本。 文件映射对象页面的初始内容为0。

lpAttributes [in]是指向SECURITY_ATTRIBUTES结构的指针,指示子进程是否继承函数返回的句柄。

如果lpAttributes为NULL,则无法继承句柄。 lpAttributes通常为空。

SECURITY_ATTRIBUTES结构的lpSecurityDescriptor成员指定了新文件映射对象的安全描述。

如果lpAttributes为NULL,则文件映射对象获取默认的安全描述。

映射flProtect [in]文件后视图的保护属性。

参数可以是以下值之一:

保护属性的含义PAGE_READONLY可以在映射文件映射对象时读取文件中的数据。 如果GENERIC_READ已经传递给CreateFile函数,则使用PAGE_READWRITE可以在映射文件映射对象时读取文件中的数据,也可以将数据写入文件在CreateFile函数传递GENERIC_READ和GENERIC_WRITE时使用PAGE_WRITECOPY映射文件映射对象时,必须读取文件中的数据。 写入数据后,将创建页面的专用副本。 使用写入时复制机制。 将GENERIC_READ或' GENERIC_READ or GENERIC_WRITE '传递给CreateFile函数时,使用PAGE_EXECUTE_READ映射到文件映射对象如果在调用CreateFile时需要传递GENERIC_READ和generic _ execute page _ execute _ read write,则读取文件中的数据、写入文件并执行代码调用CreateFile时,必须传递GENERIC_READ、GENERIC_WRITE和GENERIC_EXECUTE

:'Helvetica Neue', Arial, 'Hiragino Sans GB', STHeiti, 'Microsoft YaHei', 'WenQuanYi Micro Hei', SimSun, Song, sans-serif;font-size:14px;"> 应用程序还可以指定一个或多个以下段属性与flProtect通过或操作符一起使用,“段”只不过是内存映射的另一种叫法。
在创建内存映射数据文件时,不能设定这些标志中的任何一个。CreateFileMapping函数会忽略这些标志。

段保护属性 含义 SEC_COMMIT 此为默认值;从内存或页面文件或磁盘上的文件为节上所有页面分配物理存储器;在使用映射数据文件时,不能使用该属性 SEC_IMAGE 这个属性告知系统,所映射的文件是个可移植可执行的(PE)文件映像。当系统将这个文件映射到进程的地址空间时,需要查看文件的内容,以便确定将哪些保护属性赋予文件映像的各个页面 SEC_阳光的向日葵 告知系统,没有将文件的任何内存映射页面放入告诉缓存。因此,当向这个文件中写入数据时,系统必须更加经常地更新磁盘上的文件数据。这个标志与PAGE_阳光的向日葵保护属性一样,供设备驱动开发人员使用,应用程序一般不使用 SEC_RESERVE 保留节的所有地址空间;在使用映射数据文件时,不能使用该属性 dwMaximumSizeHigh

[in]文件映射对象size(64位)的高32位;由于Windows支持的最大文件大小可以用64位整数表示,因此必须使用两个32位值,对于小于4GB的文件来说,dwMaximumSizeHigh为0

dwMaximumSizeLow

[in]文件映射对象size(64位)的低32位;如果该参数和dwMaximumSizeHigh均为0,文件映射对象的最包容的大叔为hFile指定的文件的size。试图映射一个size为0的文件将失败并返回错误码ERROR_FILE_INVALID。应用程序应当检查文件size是否为0,并拒绝映射size为0的文件。

lpName

[in]一个指向映射对象的以0结尾的字符串。
如果lpName匹配一个已存在的并已命名的文件映射对象,函数将请求flProtect指定的访问权限。
如果lpName为NULL,将创建一个没有名字的映射对象。
如果lpName匹配一个已存在并已命名的事件、信号量、互斥对象、可等待计时器或工作对象,函数将失败,GetLastError函数将返回ERROR_INVALID_HANDLE。发生这样的原因是这些内核对象共享同一个命名空间。

返回值

如果函数调用成功,将返回文件映射对象的句柄。
如果对象在函数调用之前就已存在,函数将返回已存在的对象句柄(size以已存在的对象size为准),这时,GetLastError将返回ERROR_ALREADY_EXISTS。
如果函数失败,返回NULL。可以调用GetLastError获得错误码。

注意 创建一个内存映射文件相当于先预定一块地址空间区域,然后再给区域调拨物理存储器。唯一不同之处在于内存映射文件的物理存储器来自于磁盘上的文件,而不是从系统的页交换文件中分配的。创建一个文件映射对象的时候,系统不会预定一块地址空间区域并把文件映射到该区域中。但是,当系统在映射进程地址空间的时候,它必须知道应该给物理存储器的页面指定何种保护属性 如果调用CreateFileMapping函数并传递PAGE_READWEITE标志,那么系统将设法确保磁盘上相关数据文件的大小与在参数dwMaximumSizeHigh和参数dwMaximumSizeLow中设定的大小相同。如果文件小于设定的大小,CreateFileMapping函数将对文件的大小进行扩展,使磁盘上的文件变大。这种扩展是很有必要的,这样以后再将这个文件作为内存映射文件使用时,物理存储器就已经存在了。如果使用PAGE_READONLY或PAGE_WRITECOPY标志创建这个文件映射对象,那么CreateFileMapping函数设定的文件大小不得大于物理磁盘文件的大小。这是因为不这样做就无法将任何数据附加给这个文件。

转载于:https://my.oschina.net/simplefocus/blog/288233

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。