浅析日本队崛起原因_createNewFile

浅析日本队崛起原因_createNewFile2019独角兽企业重金招聘Python工程师标准>>>…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

函数CreateFileMapping为一个指定的文件创建或打开一个已命名或未命名的文件映射对象,告知系统文件映射对象需要多少物理存储器。

HANDLE CreateFileMapping(HANDLE hFile,
                         LPSECURITY_ATTRIBUTES lpAttributes,
                         DWORD flProtect,
                         DWORD dwMaximumSizeHigh,
                         DWORD dwMaximumSizeLow,
                         LPCTSTR lpName);

Jetbrains全家桶1年46,售后保障稳定

参数

hFile:

[in] 要映射的文件的句柄,由CreateFile函数返回。打开文件的访问权限必须与参数flProtect指定的保护属性兼容。推荐以独占的方式打开文件,虽然这不是必须的。如果hFile为INVALID_HANDLE_VALUE,调用进程必须通过参数dwMaximumSizeHigh和参数dwMaximumSizeLow指定映射的size。这种情况下,函数CreateFileMapping创建一个由系统页面支持的指定大小的文件映射对象,而不是磁盘中的一个已命名的文件。
文件映射对象可共享副本、被继承。文件映射对象的页面的初始内容为0.

lpAttributes

[in] 一个指向SECURITY_ATTRIBUTES结构的指针,指明了该函数返回的句柄是否可以被子进程继承。
如果lpAttributes为NULL,该句柄不可以被继承(lpAttributes通常为NULL)。
SECURITY_ATTRIBUTES结构的lpSecurityDescriptor成员为新的文件映射对象指定了安全描述。
如果lpAttributes为NULL(一般取该值即可),文件映射对象将获得默认的安全描述。

flProtect

[in] 文件被映射后,视图的保护属性。
该参数可以为下列中的某值。

保护属性 含义
PAGE_READONLY 在映射文件映射对象时,可以读取文件中的数据。必须已经向CreateFile函数传递了GENERIC_READ时使用
PAGE_READWRITE 在映射文件映射对象时,可以读取文件中的数据,也可以将数据写入文件。必须在CreateFile函数传递了GENERIC_READ和GENERIC_WRITE时使用
PAGE_WRITECOPY 在映射文件映射对象时,可以读取文件中的数据。在写入数据时,将创建页面的私有拷贝(使用写时复制机制)。必须在已经向CreateFile函数传递了GENERIC_READ或者”GENERIC_READ or GENERIC_WRITE”时使用
PAGE_EXECUTE_READ 完成对文件映射对象的映射时,可以读取文件中的数据,也可以运行其中的代码。在调用CreateFile时必须传GENERIC_READ和GENERIC_EXECUTE
PAGE_EXECUTE_READWRITE 完成对文件映射对象的映射时,可以读取文件中的数据并,可以将数据写入文件,还可以运行其中的代码。在调用CreateFile时必须传GENERIC_READ、GENERIC_WRITE和GENERIC_EXECUTE

应用程序还可以指定一个或多个以下段属性与flProtect通过或操作符一起使用,“段”只不过是内存映射的另一种叫法。
在创建内存映射数据文件时,不能设定这些标志中的任何一个。CreateFileMapping函数会忽略这些标志。

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

dwMaximumSizeHigh

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

dwMaximumSizeLow

[in]文件映射对象size(64位)的低32位;如果该参数和dwMaximumSizeHigh均为0,文件映射对象的最大size为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获得错误码。

注意

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/219115.html原文链接:https://javaforall.net

(0)
上一篇 2025年7月9日 下午5:15
下一篇 2025年7月9日 下午5:43


相关推荐

  • [java]根据ip和掩码计算网段、广播地址及可用ip地址范围

    [java]根据ip和掩码计算网段、广播地址及可用ip地址范围ip 地址与掩码 网段 广播地址 可用 ip 范围 IP 网络地址掩码 指明一个 IP 地址的哪些位标识的是主机所在的子网 网段 网络中可通信的部分 一般用子网第一个地址表示 广播地址 专门用于同时向网络中所有工作站进行发送的一个地址 一般用子网最后一个地址表示 可用子网 ip 一般指子网中去除网段 广播地址的地址范围参考资料 子网划分完整代码 importjava util HashMap publicclassI 在 main 方法里

    2026年3月26日
    2
  • WPF中ListView排序

    WPF中ListView排序//后台代码privatevoidlvList_Click_1(objectsender,RoutedEventArgse){if(e.OriginalSourceisGridViewColumnHeader){//获得点击的列

    2022年10月3日
    3
  • 学习使用PSTools工具中的psping

    学习使用PSTools工具中的psping目录初识PsToolspsping1.使用ICMPping2.使用TCPping3.延迟测试4.带宽测试5.同功能的tcping工具总结初识PsTools    在工作中我们都会想探测某个IP是否能通,基本上都使用过ping命令,但是某些服务器禁用了ping,而且有些时候也想探测某个IP的某个端口是否能通。之前的我一般都是用“telnetipport”,但是我发现一个不好的体验就是没啥…

    2025年7月26日
    5
  • 【n8n教程】:AI Agent节点,构建你的智能自动化机器人

    【n8n教程】:AI Agent节点,构建你的智能自动化机器人

    2026年3月15日
    2
  • 计算机传真,电脑收发传真

    计算机传真,电脑收发传真WindowsXP有一项免费的传真功能,用它可以轻松收发传真,不用再买传真机了,可以通过网络直接发送。这里将发传真的具体操作步骤介绍如下,你只要照着做,一定就会收发传真。还可以用他来做打印机!中文名电脑收发传真特点免费的传真功能系统WindowsXP优点可以实现移动办公用于做打印机电脑收发传真操作步骤编辑语音电脑收发传真安装传真组件在WindowsXP-F收发…

    2022年6月28日
    24
  • ASP数组Ubound与Lbound

    ASP数组Ubound与Lbounddimarr 10 定义了这样一个数组之后 我们知道它的下标为 0 10 但如果 ReDimarr i 这样定义的一个数组呢 我们还能很一目了然的知道数组下标的上下边界吗 a 1 2 3 arr split a 这段代码是我们经常用来将一个字符分割成一个数组的代码 怎么知道分割出来的数组有多少个元素呢 1 UboundUbound 是用于获取数组的下标的上边界 即最大的下标 a 1 2 3 arr split a Response WriteUbound ar

    2026年3月17日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号