4

Windows、C++でフロッピーとフラッシュディスクを区別するためのAPIがあるのだろうか? また、A:\にフラッシュディスクをリンクすることは可能ですか? どうもありがとう!</p>

4

3 に答える 3

2

まず、ドライブのタイプ(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のドキュメントを読む必要があります。問題が発生した場合は、コード全体を提供できます。

于 2010-02-01T14:05:58.113 に答える
0

フラッシュディスクをA:にリンクすることは可能ですが、フロッピードライブがない場合に限ります。プログラムでこれを行う方法については、MS-DOSデバイス名の定義
を参照してください。

ドライブ文字でQueryDosDeviceを使用すると、ドライブ文字がフロッピーデバイスにマップされているかどうかを判断できます。フロッピードライブは「\Device\Floppy0」または「\Device\Floppy1」を返します

于 2010-02-01T09:55:47.967 に答える
0

ドライブに割り当てられている文字は、システムコントロールのどこかで変更できるため、フラッシュディスクはA:になります。

OSAPIを使用してクエリを実行します。ディスクのサイズ。フロッピーディスクとフラッシュディスクを区別するのに十分なサイズです。

于 2010-02-01T09:27:22.013 に答える