在 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 参数标志。
为什么会这样?