为什么CreateFile会修改我的ShareMode参数?

问题描述 投票:0回答:0

在 Windows 中,我使用 CreateFile 打开一个文件。我想以很多权限打开文件(在 dwDesiredAccess 参数中)并仅共享其中的一个子集(在 dwShareMode 参数中)。

#include <iostream>
#include <Windows.h>

int main()
{
    const WCHAR* wszFile = LR"(D:\temp\myfile.txt)";
    HANDLE hFile1 = CreateFileW(wszFile, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, nullptr, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, nullptr);
    if(hFile1 == INVALID_HANDLE_VALUE)
        std::cout << "File 1 opening failed with error code " << GetLastError() << std::endl;
    else
        std::cout << "File 1 opening succeeded." << std::endl;

    HANDLE hFile2 = CreateFileW(wszFile, GENERIC_READ, FILE_SHARE_READ, nullptr, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, nullptr);
    if(hFile2 == INVALID_HANDLE_VALUE)
        std::cout << "File 2 opening failed with error code " << GetLastError() << std::endl;
    else
        std::cout << "File 2 opening succeeded." << std::endl;

    HANDLE hFile3 = CreateFileW(wszFile, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, nullptr);
    if(hFile3 == INVALID_HANDLE_VALUE)
        std::cout << "File 3 opening failed with error code " << GetLastError() << std::endl;
    else
        std::cout << "File 3 opening succeeded." << std::endl;

    CloseHandle(hFile1);
    CloseHandle(hFile2);
    CloseHandle(hFile3);

    return 0;
}

我希望前两个调用成功,第三个调用失败,但第一个和第三个调用成功,第二个调用失败。 这意味着 CreateFile 确实修改了我的 dwShareMode 参数标志。

为什么会这样?

windows winapi
© www.soinside.com 2019 - 2024. All rights reserved.