Winapi C CreateFileMapping错误5始终拒绝访问

Winapi C CreateFileMapping错误5始终拒绝访问,winapi,Winapi,我想寻求WINAPI函数CreateFileMapping()的帮助,该函数经常返回NULL。在GetLastError()之后,我得到5-“错误\u访问被拒绝5(0x5)访问被拒绝”。该文件是在CreateFile之后创建的,没有问题,但是遵循CreateFileMapping从未成功过 int MapDestFile(LPCWSTR fPath) { hDestFile = CreateFile( fPath, GENERIC_WRITE, FILE_SHARE_RE

我想寻求WINAPI函数CreateFileMapping()的帮助,该函数经常返回NULL。在GetLastError()之后,我得到5-“错误\u访问被拒绝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;
}
如果有任何建议,我将不胜感激


谢谢

您需要使用
GENERIC_-WRITE | GENERIC_-READ
创建文件以匹配
PAGE_-READWRITE

想想看,这似乎是不言而喻的。你怎么能有一个你无法读取的文件来支持你可以读取的内存呢?在任何情况下,都会明确指出这一点:

PAGE\u READWRITE

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


除此之外,调用
CreateFile
时的错误检查是错误的。再看一看文档。返回值
无效文件\u句柄

表示错误,谢谢。但与无效的\u句柄\u值相同的情况。CreatFile(…)正常,我在文件浏览器中看到该文件。句柄有效,但创建文件映射失败。我没有提到的重要一点是,我需要写入该文件,所以泛型读取不适合我。此外,我正在运行Win7(可能这些信息有一些价值)。我认为您需要再次阅读答案。我已经扩展了它,并重新订购了它。读第一句话。
GENERIC\u WRITE
GENERIC\u READ
的想法是它们不是或。你两个都需要。根据我的回答,使用按位或来指定。