如何在readonly上设置闪存驱动器?

时间:2016-11-18 11:34:33

标签: c++ c winapi

我想用C ++中的readonly设置一个USB闪存盘。

我找到了一个使用带有文本文件作为参数的diskpart的解决方案,但是在命令提示符下这样做不起作用(而使用没有文本文件的diskpart工作)。另外,如果可能的话,我想避免使用第三个文本文件。

我看了一下libusb,但没有发现任何内容将设备与其驱动器号(我至少需要用户界面)联系起来。

我尝试过SetFileAttributes,但它以“Invalid parameter”错误结束。

我怎么能这样做?

谢谢。

[编辑]:我正在使用Win32。

1 个答案:

答案 0 :(得分:1)

您需要使用IOCTL_DISK_SET_DISK_ATTRIBUTES进行此操作,并使用IOCTL_DISK_GET_DISK_ATTRIBUTES进行查询。

  1. 所以我们需要打开"\\\\?\\PhysicalDrive<X>" FILE_READ_DATA|FILE_WRITE_DATA为集合。对于查询访问可以 任何
  2. init SET_DISK_ATTRIBUTES

    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;
    
  3. DeviceIoControl( hDevice, IOCTL_DISK_SET_DISK_ATTRIBUTES, &sda, sizeof(sda), 0, 0, 0);

  4. 然而,这将仅从Windows 7开始工作