GetVolumeInformationA 関数 (fileapi.h)

指定したルート ディレクトリに関連付けられているファイル システムとボリュームに関する情報を取得します。

この情報を取得するときにハンドルを指定するには、 GetVolumeInformationByHandleW 関数を使用します。

ファイルまたはディレクトリの現在の圧縮状態を取得するには、 FSCTL_GET_COMPRESSIONを使用します。

構文

BOOL GetVolumeInformationA(
  [in, optional]  LPCSTR  lpRootPathName,
  [out, optional] LPSTR   lpVolumeNameBuffer,
  [in]            DWORD   nVolumeNameSize,
  [out, optional] LPDWORD lpVolumeSerialNumber,
  [out, optional] LPDWORD lpMaximumComponentLength,
  [out, optional] LPDWORD lpFileSystemFlags,
  [out, optional] LPSTR   lpFileSystemNameBuffer,
  [in]            DWORD   nFileSystemNameSize
);

パラメーター

[in, optional] lpRootPathName

記述するボリュームのルート ディレクトリを含む文字列へのポインター。

このパラメーターが NULL の場合は、現在のディレクトリのルートが使用されます。 末尾の円記号が必要です。 たとえば、\\MyServer\MyShare を "\\MyServer\MyShare\" として指定するか、C ドライブを "C:\" と指定します。

[out, optional] lpVolumeNameBuffer

指定したボリュームの名前を受け取るバッファーへのポインター。 バッファー サイズは 、nVolumeNameSize パラメーターによって指定されます。

[in] nVolumeNameSize

TCHAR 内のボリューム名バッファーの長さ。 最大バッファー サイズは s+1 MAX_PATHです。

ボリューム名バッファーが指定されていない場合、このパラメーターは無視されます。

[out, optional] lpVolumeSerialNumber

ボリュームのシリアル番号を受け取る変数へのポインター。

シリアル番号が不要な場合、このパラメーターは NULL にすることができます

この関数は、ハード ディスクのフォーマット時にオペレーティング システムが割り当てるボリュームシリアル番号を返します。 製造元が割り当てるハード ディスクのシリアル番号をプログラムで取得するには、Windows Management Instrumentation (WMI) Win32_PhysicalMedia プロパティ SerialNumber を使用します。

[out, optional] lpMaximumComponentLength

指定したファイル システムでサポートされているファイル名コンポーネントの最大長 を TCHAR で受け取る変数へのポインター。

ファイル名コンポーネントは、円記号の間のファイル名の部分です。

*lpMaximumComponentLength が指す変数に格納されている値は、指定されたファイル システムが長い名前をサポートしていることを示すために使用されます。 たとえば、長い名前をサポートする FAT ファイル システムの場合、関数は前の 8.3 インジケーターではなく値 255 を格納します。 長い名前は、NTFS ファイル システムを使用するシステムでもサポートできます。

[out, optional] lpFileSystemFlags

指定したファイル システムに関連付けられているフラグを受け取る変数へのポインター。

このパラメーターには、次のフラグを 1 つ以上指定できます。 ただし、 FILE_FILE_COMPRESSIONFILE_VOL_IS_COMPRESSED は相互に排他的です。

意味
FILE_CASE_SENSITIVE_SEARCH
0x00000001
指定されたボリュームでは、大文字と小文字を区別するファイル名がサポートされます。
FILE_CASE_PRESERVED_NAMES
0x00000002
指定されたボリュームでは、ディスクに名前を配置するときに、ファイル名の大文字と小文字の保持がサポートされます。
FILE_UNICODE_ON_DISK
0x00000004
指定されたボリュームでは、ディスクに表示されるファイル名の Unicode がサポートされます。
FILE_PERSISTENT_ACLS
0x00000008
指定されたボリュームは、アクセス制御リスト (ACL) を保持して適用します。 たとえば、NTFS ファイル システムでは ACL が保持および適用され、FAT ファイル システムでは保持されません。
FILE_FILE_COMPRESSION
0x00000010
指定されたボリュームは、ファイルベースの圧縮をサポートします。
FILE_VOLUME_QUOTAS
0x00000020
指定されたボリュームでは、ディスク クォータがサポートされます。
FILE_SUPPORTS_SPARSE_FILES
0x00000040
指定されたボリュームはスパース ファイルをサポートします。
FILE_SUPPORTS_REPARSE_POINTS
0x00000080
指定されたボリュームでは、再解析ポイントがサポートされます。

Refs: ReFS は再解析ポイントをサポートしますが、インデックスを作成しないため 、FindFirstVolumeMountPointFindNextVolumeMountPoint は期待どおりに機能しません。
FILE_SUPPORTS_REMOTE_STORAGE
0x00000100
ファイル システムはリモート ストレージをサポートしています。
FILE_RETURNS_CLEANUP_RESULT_INFO
0x00000200
クリーンアップ操作が正常に完了すると、ファイル システムは、ファイルの削除など、クリーンアップ中に実行された追加のアクションを記述する情報を返します。 ファイル システム フィルターは、クリーンアップ後のコールバックでこの情報を調べることができます。
FILE_SUPPORTS_POSIX_UNLINK_RENAME
0x00000400
ファイル システムでは、POSIX スタイルの削除操作と名前変更操作がサポートされています。
FILE_VOLUME_IS_COMPRESSED
0x00008000
指定されたボリュームは、DoubleSpace ボリュームなどの圧縮ボリュームです。
FILE_SUPPORTS_OBJECT_IDS
0x00010000
指定されたボリュームは、オブジェクト識別子をサポートします。
FILE_SUPPORTS_ENCRYPTION
0x00020000
指定されたボリュームは、暗号化されたファイル システム (EFS) をサポートします。 詳細については、「 ファイルの暗号化」を参照してください。
FILE_NAMED_STREAMS
0x00040000
指定されたボリュームは、名前付きストリームをサポートします。
FILE_READ_ONLY_VOLUME
0x00080000
指定されたボリュームは読み取り専用です。
FILE_SEQUENTIAL_WRITE_ONCE
0x00100000
指定されたボリュームは、単一の順次書き込みをサポートします。
FILE_SUPPORTS_TRANSACTIONS
0x00200000
指定されたボリュームはトランザクションをサポートします。 詳細については、「 KTM について」を参照してください。
FILE_SUPPORTS_HARD_LINKS
0x00400000
指定されたボリュームでは、ハード リンクがサポートされています。 詳細については、「 ハード リンクとジャンクション」を参照してください。

Windows Server 2008、Windows Vista、Windows Server 2003、Windows XP: この値は、Windows Server 2008 R2 および Windows 7 まではサポートされません。
FILE_SUPPORTS_EXTENDED_ATTRIBUTES
0x00800000
指定されたボリュームは拡張属性をサポートします。 拡張属性は、アプリケーションがファイルに関連付けることができるアプリケーション固有のメタデータの一部であり、ファイルのデータの一部ではありません。

Windows Server 2008、Windows Vista、Windows Server 2003、Windows XP: この値は、Windows Server 2008 R2 と Windows 7 まではサポートされません。
FILE_SUPPORTS_OPEN_BY_FILE_ID
0x01000000
ファイル システムでは、FileID による開きがサポートされています。 詳細については、「 FILE_ID_BOTH_DIR_INFO」を参照してください。

Windows Server 2008、Windows Vista、Windows Server 2003、Windows XP: この値は、Windows Server 2008 R2 と Windows 7 まではサポートされません。
FILE_SUPPORTS_USN_JOURNAL
0x02000000
指定されたボリュームは、更新シーケンス番号 (USN) ジャーナルをサポートします。 詳細については、「ジャーナル レコードの変更」を参照してください。

Windows Server 2008、Windows Vista、Windows Server 2003、Windows XP: この値は、Windows Server 2008 R2 と Windows 7 まではサポートされません。
FILE_SUPPORTS_INTEGRITY_STREAMS
0x04000000
ファイル システムでは 、整合性ストリームがサポートされています。
FILE_SUPPORTS_BLOCK_REFCOUNTING
0x08000000
指定されたボリュームは、同じボリューム上のファイル間での論理クラスターの共有をサポートします。 ファイル システムは、共有クラスターへの書き込み時に再割り当てを行います。 FSCTL_DUPLICATE_EXTENTS_TO_FILEがサポートされている操作であることを示します。
FILE_SUPPORTS_SPARSE_VDL
0x10000000
ファイル システムは、ファイルの各クラスターに有効なデータ (明示的なファイルの書き込みまたは自動ゼロからのデータ) または無効なデータ (まだ書き込まれていないかゼロにされていない) が含まれているかどうかを追跡します。 スパース有効なデータ長 (VDL) を使用するファイル システムでは、有効なデータ長が格納されず、有効なデータがファイル内で連続している必要はありません。
FILE_DAX_VOLUME
0x20000000
指定されたボリュームは、直接アクセス (DAX) ボリュームです。

注:
このフラグは、Windows 10 バージョン 1607 で導入されました。
FILE_SUPPORTS_GHOSTING
0x40000000
ファイル システムでは、ゴースト処理がサポートされています。

[out, optional] lpFileSystemNameBuffer

ファイル システムの名前 (FAT ファイル システムや NTFS ファイル システムなど) を受け取るバッファーへのポインター。 バッファー サイズは、 nFileSystemNameSize パラメーターで指定します。

[in] nFileSystemNameSize

TCHAR でのファイル システム名バッファーの長さ。 最大バッファー サイズは MAX_PATH+1 です。

ファイル システム名バッファーが指定されていない場合、このパラメーターは無視されます。

戻り値

要求されたすべての情報が取得された場合、戻り値は 0 以外です。

要求されたすべての情報が取得されない場合、戻り値は 0 です。 詳細なエラー情報を得るには、GetLastError を呼び出します。

解説

ユーザーがフロッピー ディスクを持たないフロッピー ドライブ、またはコンパクト ディスクを持たない CD-ROM ドライブに関する情報を取得しようとすると、フロッピー ディスクまたはコンパクト ディスクをそれぞれ挿入するためのメッセージ ボックスが表示されます。 システムでこのメッセージ ボックスが表示されないようにするには、 setErrorMode 関数を SEM_FAILCRITICALERRORSと共に呼び出します。

FILE_VOL_IS_COMPRESSED フラグは、ボリューム ベースの圧縮の唯一のインジケーターです。 ファイル システム名は、圧縮を示すために変更されません。たとえば、このフラグは DoubleSpace ボリュームに設定されて返されます。 圧縮がボリュームベースの場合、ボリューム全体が圧縮されるか、圧縮されません。

FILE_FILE_COMPRESSION フラグは、ファイル システムがファイル ベースの圧縮をサポートしているかどうかを示します。 圧縮がファイルベースの場合、個々のファイルを圧縮するか、圧縮することはできません。

FILE_FILE_COMPRESSIONフラグとFILE_VOL_IS_COMPRESSED フラグは相互に排他的です。 両方のビットを設定して返すことはできません。

lpMaximumComponentLength に格納されるコンポーネントの最大長の値は、ボリュームが通常より長い FAT ファイル システム (またはその他のファイル システム) ファイル名をサポートしていることを示す唯一のインジケーターです。 ファイル システム名は、長いファイル名のサポートを示すために変更されません。

GetCompressedFileSize 関数は、ファイルの圧縮サイズを取得します。 GetFileAttributes 関数は、個々のファイルが圧縮されているかどうかを判断できます。

パスがシンボリック リンクを指している場合、この関数はターゲットのボリューム情報を返します。

Windows 8とWindows Server 2012以降、この関数は次のテクノロジでサポートされています。

テクノロジ サポートされています
サーバー メッセージ ブロック (SMB) 3.0 プロトコル いいえ
SMB 3.0 Transparent Failover (TFO) いいえ
スケールアウト ファイル共有 (SO) を使う SMB 3.0 いいえ
クラスターの共有ボリューム ファイル システム (CsvFS) はい
Resilient File System (ReFS) はい

SMB では、ボリューム管理機能はサポートされていません。

トランザクション操作

ボリュームがファイル システム トランザクションをサポートしている場合、この関数は lpFileSystemFlagsFILE_SUPPORTS_TRANSACTIONS を返します。

注意

fileapi.h ヘッダーは、Unicode プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択するエイリアスとして GetVolumeInformation を定義します。 エンコードに依存しないエイリアスをエンコードニュートラルでないコードと組み合わせて使用すると、コンパイルまたはランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「 関数プロトタイプの規則」を参照してください。

要件

要件
サポートされている最小のクライアント Windows XP [デスクトップ アプリ | UWP アプリ]
サポートされている最小のサーバー Windows Server 2003 [デスクトップ アプリのみ | UWP アプリ]
対象プラットフォーム Windows
ヘッダー fileapi.h (Windows.h を含む)
Library Kernel32.lib
[DLL] Kernel32.dll

関連項目

KTM について

ファイルの暗号化

GetCompressedFileSize

GetFileAttributes

GetVolumeInformationByHandleW

SetErrorMode

SetVolumeLabel

ボリューム管理の関数