C++ 在windows c/c+;中将目录/usb驱动器设为只读+;
我正在使用C++ 在windows c/c+;中将目录/usb驱动器设为只读+;,c++,windows,readonly,createfile,C++,Windows,Readonly,Createfile,我正在使用CreateFile将FILE\u ATTRIBUTE\u READONLY用作dwFlagsAndAttributes,使目录只读 但是,这会完全阻止对驱动器的访问。我无法遍历该目录或查看其中的任何文件 它显示访问被拒绝 我的代码: LPWSTR wszPath = L"\\\\.\\F:"; // path to the drive HANDLE hDevice = INVALID_HANDLE_VALUE; // handle to the drive hDevice
CreateFile
将FILE\u ATTRIBUTE\u READONLY
用作dwFlagsAndAttributes,使目录只读
但是,这会完全阻止对驱动器的访问。我无法遍历该目录或查看其中的任何文件
它显示访问被拒绝
我的代码:
LPWSTR wszPath = L"\\\\.\\F:"; // path to the drive
HANDLE hDevice = INVALID_HANDLE_VALUE; // handle to the drive
hDevice = CreateFile(wszPath, // drive to open
(GENERIC_READ|GENERIC_WRITE),
FILE_SHARE_READ, // share mode
NULL, // default security attributes
OPEN_EXISTING,
FILE_ATTRIBUTE_READONLY, // file attributes
NULL);
if (hDevice == INVALID_HANDLE_VALUE) // cannot open the drive
{
wprintf(L" hDevice INVALID_HANDLE_VALUE. Error %ld.\n", GetLastError());
CloseHandle(hDevice);
return (FALSE);
}
wprintf(L"Successfully opened");
错误消息pic:
由于我将文件属性作为file\u ATTRIBUTE\u READONLY传递,所以它应该是只读的,为什么它不能让访问文件
语言:c++
平台:windows
有什么想法吗
提前感谢。最有可能的情况是,提升(以管理员身份运行)是required@dewaffled程序运行良好。但是我们无法遍历文件进行读取。它显示位置F:\不可用,访问被拒绝,如上图所示。您打开的是卷设备,而不是目录。文件属性只能在文件系统文件和目录上设置,不能在设备上设置。只读文件属性将被忽略。这里发生的情况是,通过打开“///F:”卷设备,只进行读共享(即
文件共享\u读取
),而不共享写访问或删除访问,您隐式地使文件系统锁定卷,以便只能通过正在创建的文件对象访问卷。其他任何东西都无法访问该卷。有关具体示例,请参阅fastfat文件系统驱动程序中的。@ErykSun非常感谢您为我解释清楚。