2016-11-18 11 views
-1

私はC + +で読み取り専用のUSBフラッシュドライブを設定したいと思います。読み取り専用でフラッシュドライブを設定するには?

テキストファイルをパラメータとして使用してdiskpartを使用するソリューションが見つかりましたが、コマンドプロンプトでこれを行うと、テキストファイルを使用しないでdiskpartを使用しても機能しません。さらに、可能であれば、私は3番目のテキストファイルを使用する必要がないようにしたいと思います。

私はlibusbを見ましたが、デバイスにドライブ文字(少なくともUI用に必要なもの)をリンクするものは何も見つかりませんでした。

私はSetFileAttributesを試しましたが、「無効なパラメータ」エラーで終了します。

どうすればいいですか?

ありがとうございます。

[編集]私はWin32で作業しています。

+0

があるフォームのウィンドウを始めることになることができますブロックデバイスが読み取り専用に設定するLinux。 – stark

+0

USBフラッシュドライブ上のファイルシステムがNTFSの場合、WindowsセキュリティAPIを使用して「Everybody」への書き込みアクセスを禁止することができます。しかし、このAPIは使いにくいです。 filsystemがFAT32またはEFSの場合、これは可能だとは思わない。 –

答えて

0

この場合はIOCTL_DISK_SET_DISK_ATTRIBUTES、クエリの場合はIOCTL_DISK_GET_DISK_ATTRIBUTESを使用する必要があります。

  1. ので、セットのため FILE_READ_DATA|FILE_WRITE_DATA"\\\\?\\PhysicalDrive<X>"を開く必要があります。クエリアクセスのために はどの
  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);

しかし、これは仕事が下に呼び出すためのioctl 7のみ

関連する問題