問題タブ [usb-mass-storage]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
winapi - マルチボリューム USB デバイスが取り外されたときに WM_DEVICECHANGE メッセージが 1 つしか表示されないのはなぜですか?
WM_DEVICECHANGE メッセージをリッスンして、特定の USB 大容量記憶装置が接続されているときと接続されていないときを検出するアプリケーションを作成しています。
また、( RegisterDeviceNotification API 呼び出しを使用して)WM_DEVICECHANGE
メッセージをリッスンするようにアプリケーションを登録しました。USB 大容量記憶装置デバイスが接続または切断されたときに、とメッセージの両方を受け取ります。DBT_DEVTYP_DEVICEINTERFACE
DBT_DEVICEARRIVAL
DBT_DEVICEREMOVECOMPLETE
この問題は、複数のボリュームを持つUSB デバイスを接続してから取り外すと発生します。
デバイスが接続されると、次のメッセージが表示されます。
WM_DEVICECHANGE
(DBT_DEVICEARRIVAL
タイプのDBT_DEVTYP_DEVICEINTERFACE
)WM_DEVICECHANGE
(DBT_DEVICEARRIVAL
タイプのDBT_DEVTYP_VOLUME
)WM_DEVICECHANGE
(DBT_DEVICEARRIVAL
タイプのDBT_DEVTYP_VOLUME
)
また、プラグを抜くと次のメッセージが表示されます。
WM_DEVICECHANGE
(DBT_DEVICEREMOVECOMPLETE
タイプのDBT_DEVTYP_VOLUME
)WM_DEVICECHANGE
(DBT_DEVICEREMOVECOMPLETE
タイプのDBT_DEVTYP_DEVICEINTERFACE
)
そのため、ボリュームが 2 つあるにもかかわらず、削除メッセージは 1 つだけです。どうして??
2 つの質問があります。
DBT_DEVTYP_DEVICEINTERFACE
メッセージとメッセージを関連付けるにはどうすればよいDBT_DEVTYP_VOLUME
ですか (本質的に、どのVOLUMEメッセージがどのDEVICEINTERFACEメッセージに対応しているかを知るにはどうすればよいですか? デバイスの両方を取得するため)。- 両方のボリュームの削除を Windows に通知させる方法はありますか?
usb - Accessing backing storage file from both Host machine and emulating machine when using USB Gadget
I have an embedded machine that is running g_file_storage. I would like to be able to access the backing store in read only mode from the machine while g_file_storage is running and a host machine is dropping files into this backing store.
Any idea how one can achieve that? I know that it is not advisable, but would like to try it anyway, and I simply need read access. Won't need to modify the backing store while it is connected
linux - Linux でどのドライブがどの USB 大容量記憶装置に対応しているかを調べる
Ubuntu Linux コンピューター (Ubuntu 10.04.1、カーネル 2.6.32-25-386) に複数の USB 大容量ストレージ フラッシュ ドライブを接続しており、それらをプログラムで (可能であれば bash から) 区別する必要があります。 - どのブロックデバイスがどの物理デバイスに対応するかを見つける必要があります (例/dev/sdb1
-> USB ポート 1 のデバイス; 私の場合、1 つのデバイス ~ 1 つのボリューム)。
つまり、3 つのハードウェア デバイスが USB ポートに接続されていることがわかっています。それらのそれぞれは、システム内で USB 大容量ストレージ デバイス (lsusb で見られるように) として表示され、ブロック デバイスとして作成され ( /dev/sdb1
)、UUID によって自動マウントされます ( /media/1234-5678
)。
ブロック デバイスとマウントポイントの関係を見つけようとしているわけではありません。ブロックデバイスと USB デバイスの関係を見つけようとしていますが、方法はありますか?
なんで?ディスクにはいくつかの書き込みがあり、完了するまでの時間は予測できません。オペレーターに「ポート 2 (左から 2 番目) のディスクを取り外せるようになりました」などの指示を出す必要があります。その特定のマシンのどのポート番号にどの物理ポートが対応しているかがわかったので、マウントポイントからブロック デバイスを見つけるのは簡単です。今、論理USBポートをブロックデバイスにマッピングするのに行き詰まっています。
lsusb でディスクを確認できます:
そして、それらが(UUIDで)マウントされているのを見ることができます:
現在、すべてのドライブは同じメーカーの同じモデルであるため、それらを区別することはできません。また、特定の順序で接続されることを保証することもできません。
(USB デバイスのリスト)を見つけまし/sys/bus/usb/devices
たが、lsusb から取得したデータと同じようです。そこにディスクへのマッピングが表示されません。
/sys/block/sdb
and /sys/block/sdb/sdb1
(ブロックデバイスとその最初のパーティション; 同様にsdc
and )もありますsdd
が、ここでもデバイスへのマッピングは見られません。
linux - ファイルレベルでの USB 大容量ストレージ
課題: 私は、データを記録してディスクに保存する Linux ハンドヘルド デバイスを持っています。これらのデータは、USB 経由で Windows アプリケーションと交換する必要があります。ユーザーがこのデータにアクセスできる場合 (USB マスストレージなどを介して)、データを暗号化する必要があります。さまざまなOSで、citrix端末セッションなどでも、すぐに使用できるはずです。
計画: FUSEを使用してユーザー空間にファイル システムを作成し、大容量ストレージを介して Windows に提供します。Windows が 1 つのファイルにアクセスするたびに、コールバックを受け取り、その場でデータを暗号化します。さらに、いくつかの動的コンテンツを含めることができます。たとえば、パスワードがファイルに書き込まれると、より多くのコンテンツが表示されます。
問題: 大容量ストレージ ガジェット ( g_file_storage など) を使用する場合、ファイルまたはブロック デバイスのみを受け入れますが、ファイル システム (ディレクトリ) は受け入れません。なんで?
[...] データのセクターを読み書きするためのシンプルなインターフェイスを提供します。これは、ハード ドライブへのアクセスに使用される低レベル インターフェイスによく似ています [...]。オペレーティング システムは、USB ドライブをハード ドライブのように扱い、任意のファイル システムでフォーマットできます。(ウィキペディアより)
したがって、大容量ストレージを介して動的ファイルシステムを使用する機会はありません...これが、Android携帯電話をPCに接続すると、電話上のすべてのデータをアンマウントする理由のようです。
オプション:
- 「ユーザー空間にブロックデバイス」を作成します-FUSEに似ています(ファイルを動的に提供したい場合は、リバースFATドライバーが必要です)
- ブロックデバイスを作成するために独自の nbd サーバーを実装します (リバース FAT ドライバーも必要ですか?)
- 暗号化されたファイルをパーティションに保存し、このパーティションを大容量ストレージ ガジェットに渡します (問題は、パフォーマンスと動的相互作用の欠如です)
- 大容量ストレージ デバイスを提供せず、他のアイデア (eth over USB) に注意する
現時点では、最後のオプションのみが現実的であるように思われます - または、別のヒントはありますか?
私は感謝されます!
チャーリー
windows - USB 大容量記憶装置のメーカー文字列と製品文字列
特定の大容量ストレージ USB デバイスの製造元文字列と製品文字列を抽出したいと考えています。C: としましょう。すべての USB デバイスを列挙することで製造元の文字列と製品の文字列を抽出できますが、特定の USB ドライブを製造元 ID と製品 ID に関連付ける方法がわかりません。私は Windows プラットフォームを使用しており、開発に Visual Studio を使用しています。
どんな助けでも大歓迎です。
ファルーク-
java - AndroidデバイスでプログラムでUSBストレージをオフにする
多くのAndroidデバイスでは、デバイスがコンピューターのUSBポートに接続されている場合、または一部のUSB充電デバイスに接続されている場合でも、電話はUSBストレージモードになります。デバイスがこのモードの場合、AndroidアプリはSDカードにアクセスできません。(1)デバイスがこのモードになったことを検出し、(2)少なくとも一時的にUSBストレージをプログラムでオフにして、AndroidアプリがSDカードにアクセスできるようにする方法はありますか?
私は他のSOの質問を見ましたが、答えは本当に十分ではありません(たとえば、Android:USBの検出)。
android - AndroidでプログラムでUSBマスストレージをオフにする方法は?
AndroidでUSBマスストレージのオン/オフを切り替えたい。
以下のコードを試してみました。動いていない。誰かがこれで私を助けてくれますか?
大容量記憶装置を無効にするために、私はこれを使用しました:
大容量記憶装置を有効にするために、私はこれを使用しました:
ただし、上記のコードは機能していません。このための意図を渡す必要がありますか?
android - Android USBマスストレージ
したがって、USBマスストレージの接続と切断を検出する方法を知っています。ここまでは順調ですね。
しかし今、問題があります。アプリで USB モードを終了すると、MediaStore がメディアのスキャンを開始し、そのスキャンが完了するのを待ってから、MediaStore のコンテンツにアクセスしようとします。画像と動画の ID を保存し、スキャンが完了したら、それらのアイテムの URI を取得しようとします。
しかし、保存した ID を使用してこれらのファイルの URI を照会すると、一部のファイルの URI が null として出力されます。そして、それは私の問題です。
私が欠けているものについて誰かが指摘していますか?
android - デバイスがマス ストレージとして接続されている場合、アプリを検出して処理するにはどうすればよいですか?
SD リソースを使用してゲームを開発しています。デバイスを MASS STORAGE として接続すると、デバイスがクラッシュします。デバイスを大容量記憶装置として PC に接続すると、デバイスが SD カードにアクセスできないためです。だから私は解決するためにさまざまな方法を試しました。
現在、BroadcastReceiver を実装しており、アクション ACTION_MEDIA_BAD_REMOVAL (SD カードが手動で取り外された場合) と ACTION_MEDIA_SHARED (デバイスがマスストレージとして接続されている場合にアクションを処理するはずですが、そうではありません) を処理しています。
これらのアクションの両方が検出されると、エラー メッセージを送信してアプリを終了します。
SD カードを手動で取り外すと機能しますが、大容量ストレージとしては機能しません。
また、すべてのフレームで、このメソッドを使用して、すべてのフレームで SD カードがデバイス上にあるかどうかを確認します。
0の場合、SDカードがなく、エラーメッセージも送信してアプリを終了します。
ただし、静止画は USB マスストレージ モードでは機能しません。
私の質問は:デバイスが USB Mass Storage として接続されていることをどのように検出できますか?
どのクラスを使用すればよいですか?
エラー メッセージ アクティビティを呼び出してアプリを終了するために実装できるリスナーはどれですか?