C CreateFileMapping错误5访问被拒绝总是如此

时间:2013-12-07 22:27:57

标签: winapi

我想请求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;
}

我很感激任何建议。

由于

1 个答案:

答案 0 :(得分:3)

您需要使用GENERIC_WRITE | GENERIC_READ创建与PAGE_READWRITE匹配的文件。

当你想到它时,这似乎是不言而喻的。你怎么能拥有一个你无法读取的文件支持的内存? documentation确实在任何情况下明确地将其调出:

  

<强> PAGE_READWRITE

     

必须使用GENERIC_READ和GENERIC_WRITE访问权限创建hFile参数指定的文件句柄。

最重要的是,您对CreateFile的调用的错误检查是错误的。再看一下文档。错误由返回值INVALID_FILE_HANDLE表示。