2016-11-18 84 views
-1

我想在C++中只讀設置USB閃存驅動器。如何在只讀設置閃存驅動器?

我發現一個解決方案使用diskpart與文本文件作爲參數,但這樣做在命令提示符不起作用(而使用diskpart沒有文本文件工作)。另外,如果可能的話,我想避免使用第三個文本文件。

我看了一下libusb,但沒有發現任何內容將設備鏈接到驅動器盤符(至少在UI中需要)。

我試過SetFileAttributes,但它以「Invalid parameter」錯誤結束。

我該怎麼做?

謝謝。

[編輯]:我正在使用Win32。

+0

有一個ioctl下調用Linux爲塊設備設置它們是隻讀的。 – stark

+0

如果您的USB閃存驅動器上的文件系統是NTFS,那麼您可以使用Windows安全API禁止對「所有人」的寫入權限。但是這個API很難使用。如果filsystem是FAT32或EFS,我認爲這是不可能的。 –

回答

0

您需要使用IOCTL_DISK_SET_DISK_ATTRIBUTES進行查詢,也可以使用IOCTL_DISK_GET_DISK_ATTRIBUTES進行查詢。

  1. 所以我們需要開放"\\\\?\\PhysicalDrive<X>"FILE_READ_DATA|FILE_WRITE_DATA爲集。查詢訪問可以 任何
  2. 初始化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);

但是這將是工作的開始形式僅限於Windows 7