Win32API コンピュータ上の一意のボリューム名を列挙する FindFirstVolume

コンピュータ上の一意のボリューム名を列挙するには、FindFirstVolume関数, FindNextVolume関数, FindVolumeClose関数を用いる。


FindFirstVolumeのプロトタイプ

//戻り値は、ボリュームの検索ハンドル
HANDLE FindFirstVolume(
  LPTSTR lpszVolumeName,   // 出力バッファへのポインタ
  DWORD cchBufferLength    // 出力バッファのサイズ
);


FindNextVolumeのプロトタイプ

//関数が成功した場合、TRUEを返す。
BOOL FindNextVolume(
  HANDLE hFindVolume,      // 実行中のスキャンのハンドル
  LPTSTR lpszVolumeName,   // 出力文字列へのポインタ
  DWORD cchBufferLength    // 出力バッファのサイズ
);


FindVolumeCloseのプロトタイプ

BOOL FindVolumeClose(
  HANDLE hFindVolume       // 閉じるハンドル
);


使用例

#include <windows.h>
#include <stdio.h>

int main()
{
	HANDLE hVolume;
	char szVolumeName[MAX_PATH] = {'\0'};
	DWORD dwLen = sizeof(szVolumeName)/sizeof(szVolumeName[0]);

	hVolume = FindFirstVolume(szVolumeName, dwLen);
	if (hVolume == INVALID_HANDLE_VALUE) {
		return 1;
	}

	do {
		printf("%s\n", szVolumeName);
	} while (FindNextVolume(hVolume, szVolumeName, dwLen));
	
	FindVolumeClose(hVolume);

	return 0;
}


参考
http://msdn.microsoft.com/ja-jp/library/cc429237.aspx
http://msdn.microsoft.ja-jp/library/cc429244.aspx
http://msdn.microsoft.com/ja-jp/library/cc429249.aspx