C CreateFileMapping 错误 5 始终拒绝访问

Jan*_*dek 2 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;
}
Run Code Online (Sandbox Code Playgroud)

我将不胜感激任何建议。

谢谢

Dav*_*nan 6

您需要创建文件GENERIC_WRITE | GENERIC_READ以匹配PAGE_READWRITE.

当你想到它时,这似乎是不言而喻的。你怎么能有一个你不能读取的文件支持你可以读取的内存?在任何情况下,文档都明确指出这一点:

PAGE_READWRITE

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

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