我想在 C++ 中将 USB 闪存驱动器设置为只读。
我找到了一个使用 diskpart 并以文本文件作为参数的解决方案,但在命令提示符下这样做不起作用(而使用不带文本文件的 diskpart 则有效)。另外,如果可能的话,我想避免使用第三个文本文件。
我查看了 libusb,但发现其中没有任何内容可以将设备与其驱动器号链接起来(至少在 UI 中我需要它)。
我尝试过 SetFileAttributes,但它以“无效参数”错误结束。
我怎样才能做到这一点?
谢谢。
[编辑]:我正在使用 Win32。
最佳答案
您需要使用 IOCTL_DISK_SET_DISK_ATTRIBUTES
为此,还有 IOCTL_DISK_GET_DISK_ATTRIBUTES
供查询。
- 所以我们需要打开
"\\\\?\\PhysicalDrive<X>"
和FILE_READ_DATA|FILE_WRITE_DATA
为集。查询访问可以是 任意 -
SET_DISK_ATTRIBUTES sda = { sizeof(sda), TRUE };// not sizeof(GET_DISK_ATTRIBUTES).as in documentation, this mistake sda.AttributesMask = DISK_ATTRIBUTE_READ_ONLY; sda.Attributes = DISK_ATTRIBUTE_READ_ONLY;
和
DeviceIoControl( hDevice, IOCTL_DISK_SET_DISK_ATTRIBUTES, &sda, sizeof(sda), 0, 0, 0);
但是这只能从 Windows 7 开始工作
关于c++ - 如何将闪存驱动器设置为只读?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40676088/