Windows、C++でフロッピーとフラッシュディスクを区別するためのAPIがあるのだろうか? また、A:\にフラッシュディスクをリンクすることは可能ですか? どうもありがとう!</p>
3 に答える
まず、ドライブのタイプ(GetDriveTypeA)を取得する必要があります。結果がDRIVE_REMOVABLEと等しい場合、文字ドライブは、リムーバブルフラッシュドライブ(または他のタイプのリムーバブルディスク)のフロッピーを指します。結果がDRIVE_REMOVABLEでない場合、これがリムーバブルフラッシュドライブである可能性はありません。ただし、ウィンドウの観点からは注意してください。外付けUSBハードドライブとリムーバブルフラッシュディスクの違いはほとんどありません(唯一の違いは、リムーバブルフラッシュディスクにはパーティションテーブルがないため、パーティションテーブルが1つしかないことです。パーティション-よくわかりませんが)。
とにかく、DRIVE_REMOVABLEタイプの場合、デバイスのより高度なプロパティを照会する必要があります。これを行うには、最初に次のような考えで物理デバイスを開く必要があります。
hDevice = CreateFileA("\\\\?\\X:", GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_DELETE, NULL, OPEN_EXISTING, 0, NULL)
開くことが成功した場合は、このデバイスにDeviceIoControlコマンドを発行する必要があります。
STORAGE_PROPERTY_QUERY Query;
Query.PropertyId = StorageDeviceProperty;
Query.QueryType = PropertyStandardQuery;
bResult = DeviceIoControl(
hDevice, // device handle
IOCTL_STORAGE_QUERY_PROPERTY, // info of device property
&Query, sizeof(STORAGE_PROPERTY_QUERY), // input data buffer
pDevDesc, pDevDesc->Size, // output data buffer
&dwOutBytes, // out's length
(LPOVERLAPPED)NULL
);
pDevDesc-> BusType == BusTypeUsbの場合、X:はリムーバブルフラッシュドライブを指します。コードは機能しますが、pDevDescパラメーターを設定するには、DeviceIoControlのドキュメントを読む必要があります。問題が発生した場合は、コード全体を提供できます。
フラッシュディスクをA:にリンクすることは可能ですが、フロッピードライブがない場合に限ります。プログラムでこれを行う方法については、MS-DOSデバイス名の定義
を参照してください。
ドライブ文字でQueryDosDeviceを使用すると、ドライブ文字がフロッピーデバイスにマップされているかどうかを判断できます。フロッピードライブは「\Device\Floppy0」または「\Device\Floppy1」を返します
ドライブに割り当てられている文字は、システムコントロールのどこかで変更できるため、フラッシュディスクはA:になります。
OSAPIを使用してクエリを実行します。ディスクのサイズ。フロッピーディスクとフラッシュディスクを区別するのに十分なサイズです。