我想请求WINAPI函数CreateFileMapping()的帮助,它不断返回NULL。在GetLastError()之后我得到5 - “ERROR_ACCESS_DENIED 5(0x5)访问被拒绝”。该文件已在CreateFile之后创建,没有任何问题,但是在CreateFileMapping之后永远不会成功。
int MapDestFile(LPCWSTR fPath)
{
hDestFile = CreateFile(
fPath,
GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL);
if (hSourceFile == NULL)
{
printf("%d\n", GetLastError());
}
hDestMapFile = CreateFileMapping(
hDestFile,
NULL,
PAGE_READWRITE,
0,
10,
NULL
);
if (hDestMapFile == NULL)
{
// here always tell error number 5
printf("%d\n", GetLastError());
}
lpMapAddressDestFile = MapViewOfFile(
hDestMapFile,
FILE_MAP_WRITE,
0,
0,
0);
if (lpMapAddressDestFile == NULL)
{
printf("%d\n", GetLastError());
}
return 1;
}
我很感激任何建议。
由于
答案 0 :(得分:3)
您需要使用GENERIC_WRITE | GENERIC_READ
创建与PAGE_READWRITE
匹配的文件。
当你想到它时,这似乎是不言而喻的。你怎么能拥有一个你无法读取的文件支持的内存? documentation确实在任何情况下明确地将其调出:
<强> PAGE_READWRITE 强>
必须使用GENERIC_READ和GENERIC_WRITE访问权限创建hFile参数指定的文件句柄。
最重要的是,您对CreateFile
的调用的错误检查是错误的。再看一下文档。错误由返回值INVALID_FILE_HANDLE
表示。