CreateFileMapping以"没有足够的磁盘空间"错误结束

Ale*_*vič 3 c windows api mapping

我在理解如何使用API​​函数时遇到了问题CreateFileMapping(...).

我一直在尝试映射一个小文件,然后反转它的内容.它只有大约1 Kb,但我一直得到"内存不足"的错误.

我通过调用打开了文件CreateFile并获得了它的大小GetFileSize.

然后我打电话给:

CreateFileMapping(fileHandle, 
                  NULL, 
                  PAGE_READWRITE | SEC_RESERVE, 
                  fileSize + 1, 
                  fileSize + 1, 
                  NULL);
Run Code Online (Sandbox Code Playgroud)

我怀疑问题在于传递fileSize + 1as dwFileOffsetHighdwFileOffsetLow,但是我很难理解我应该传递给它的是什么.

任何提示都非常感谢!

Dav*_*nan 5

dwFileOffsetHigh并且dwFileOffsetLow是两个32位值组合在一起形成一个64位值.这个函数是以这种方式实现的,因为它早于64位值的广泛编译器支持.

我认为你的误解是相信高低平均上限和下限.

在你的情况下你的值(假设fileSize大约是1KB)远远不需要64位,所以你应该传递fileSize+1for dwFileOffsetLow0for dwFileOffsetHigh.

但是,如果您尝试映射整个文件,则只需传递0两个参数即可.

文档:

dwMaximumSizeHigh [in]

文件映射对象最大大小的高阶DWORD.

dwMaximumSizeLow [in]

文件映射对象的最大大小的低位DWORD.

如果此参数和dwMaximumSizeHigh为0(零),则文件映射对象的最大大小等于hFile标识的文件的当前大小.

尝试映射长度为0(零)的文件失败,错误代码为ERROR_FILE_INVALID.应用程序应测试长度为0(零)的文件并拒绝这些文件.