LoginSignup
6
7

More than 5 years have passed since last update.

ディスクドライブの情報の列挙

Last updated at Posted at 2016-10-30

目的

Windowsが認識しているドライブを全て列挙する

ソースコード

以下に今回のソースコードを示す

main.c
#include <Windows.h>
#include <stdio.h>

void print_drive_info(const char* drive, const char* disk_type) {
    char volume_name[256], volume_system[256];
    DWORD serial, length, flags;
    if (0 == GetVolumeInformationA(drive, volume_name, sizeof(volume_name), &serial, &length, &flags, volume_system, sizeof(volume_system))) return;
    printf("ドライブ : %s\n"
        "ボリューム名 : %s\n"
        "シリアル番号 : %08X\n"
        "ディスクの種類 : %s\n"
        "ファイルシステム : %s\n"
        "システムフラグ : %08X\n"
        "ファイル名の最大文字数 : %lu\n\n",
        drive, volume_name, serial, disk_type, volume_system, flags, length);
}

int main(void) {
    DWORD drive = GetLogicalDrives();
    for (int i = 0, flag = 1; i < 26; i++, flag <<= 1) {
        if (!(drive & flag)) continue;
        char letter[20];
        sprintf_s(letter, sizeof(letter), "%c:\\", 'A' + i);
        switch (GetDriveTypeA(letter)) {
            case DRIVE_REMOVABLE:
                print_drive_info(letter, "リムーバブルディスク");
                break;
            case DRIVE_FIXED:
                print_drive_info(letter, "ハードディスクドライブ");
                break;
            case DRIVE_REMOTE:
                print_drive_info(letter, "ネットワークドライブ");
                break;
            case DRIVE_CDROM:
                print_drive_info(letter, "ディスクドライブ");
                break;
            default:
                print_drive_info(letter, "その他のドライブ");
                break;
        }
    }
    return 0;
}

結果

プログラムのコンパイル結果を以下に示す。
drive_list.png

しかし私のPCのドライブは、エクスプローラーで確認すると、以下の通りであり、全てのドライブが列挙されているわけではないことが分かる。
explorer.png

結論

実験レポート風に書いてますが、そこには特に意味はないです。
問題はなぜIドライブ以降が列挙されなかったかということです。
ちなみにIドライブ以降のドライブは全てNTFS形式でフォーマットされています。
また、どのドライブもアクセス権限はあります。

参考サイト

プログラミングのメモ帳 ドライブのボリューム情報を取得

どうもmain関数の3行目を消すと全列挙されるっぽいです。
なんでだろう…

@yumetodoさんに誤植指摘されて修正した結果、全ドライブリストを列挙できました。

6
7
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7