QueryDosDevice
Windowsのアプリケーションを作ってる際にデバイス名マッピングが知りたい場合がある。これを知るためのWin32 SDKの関数がQueryDosDeviceである。
この関数では、特定のMS-DOS デバイスに関する情報を取得することもできるしすべてのMS-DOS デバイス名を列挙することもできる。若干略をするが、
1 2 3 4 5 |
D: IDE#CdRomHL-DT-ST_DVDRAM_GSA-H42N DISPLAY1 ACPI Volume |
例えばこんな感じで出てくる。デバイスによっては、GUIDなんかも付加される場合がある。
ドライブのデバイス名マッピング
ドライブに対するデバイス名マッピングをそれぞれ知りたい場合は、例えば次のようなコードを使うとよい。(VisalC++のMFC/ATLのCStringを使用している。
1 2 3 4 5 6 7 8 9 10 11 12 |
CString strDiskPath; TCHAR pTargetPath[ 4096 ]; for( int nCount = 0; nCount < 26; nCount++ ) { strDiskPath.Format( _T( "%c:" ), _T( 'A' ) + nCount ); if( 0 != QueryDosDevice( strDiskPath, pTargetPath, 4096 ) ) { // 発見 } } |
こんな感じであろうか。QueryDosDeviceの3つ目の引数は、どうやらバイト数ではなく文字数のようなんでsizeof( pTargetPath )とするとUnicode版の時には必ず失敗するということになる。ということで、sizeof( pTargetPath ) / sizeof( TCHAR )などとすれば完全に対応できるだろう。
なお、これによって取得できるデバイス名マッピングであるが、myマシン例えば次のような文字列が出てきた。
\Device\CdRom0
\Device\Harddisk1\DP(1)0-0+d
一つ目は、CD-ROMドライブので、二つ目はClipDriveというUSBメモリである。