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

接收指定檔案系統所支援之檔名元件最大長度之變數的指標。

檔名元件是反斜杠之間檔名的部分。

儲存在 *lpMaximumComponentLength 指向之變數中的值,用來指出指定的文件系統支持長名稱。 例如,對於支持長名稱的 FAT 檔案系統,函式會儲存值 255,而不是先前的 8.3 指標。 使用 NTFS 檔案系統的系統上也可以支援長名稱。

[out, optional] lpFileSystemFlags

變數的指標,接收與指定文件系統相關聯的旗標。

此參數可以是下列一或多個旗標。 不過, 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 支援重新分析點,但不編製索引,因此 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。

如果未提供文件系統名稱緩衝區,則會忽略此參數。

傳回值

如果擷取所有要求的信息,傳回值為非零。

如果未擷取所有要求的信息,傳回值為零。 若要取得擴充的錯誤資訊,請呼叫 GetLastError

備註

當用戶嘗試取得沒有磁碟驅動器或沒有壓縮磁碟的CD-ROM磁碟驅動器的相關信息時,系統會分別顯示消息框,讓使用者插入磁碟驅動器或壓縮磁碟。 若要防止系統顯示此消息框,請使用 SEM_FAILCRITICALERRORS 呼叫 SetErrorMode 函式。

FILE_VOL_IS_COMPRESSED旗標是唯一以磁碟區為基礎的壓縮指標。 文件系統名稱不會改變以表示壓縮,例如,此旗標會在 DoubleSpace 磁碟區上設定。 當壓縮是以磁碟區為基礎時,整個磁碟區會壓縮或未壓縮。

FILE_FILE_COMPRESSION旗標指出檔系統是否支援以檔案為基礎的壓縮。 當壓縮是以檔案為基礎時,可以壓縮或未壓縮個別檔案。

FILE_FILE_COMPRESSIONFILE_VOL_IS_COMPRESSED旗標互斥。 無法設定這兩個位。

儲存在 lpMaximumComponentLength 中的最大元件長度值,是磁碟區支持超過一般 FAT 檔案系統 (或其他文件系統) 檔名的唯一指標。 檔案系統名稱不會改變,表示支援長檔名。

GetCompressedFileSize 函式會取得檔案的壓縮大小。 GetFileAttributes 函式可以判斷是否壓縮個別檔案。

如果路徑指向符號連結,函式會傳回目標的磁碟區資訊。

從 Windows 8 和 Windows Server 2012 開始,下列技術支援此函式。

技術 支援
伺服器消息塊 (SMB) 3.0 通訊協定 No
SMB 3.0 透明故障轉移 (TFO) No
具有向外延展檔案共用的SMB 3.0 (SO) No
叢集共用磁碟區文件系統 (CsvFS) Yes
彈性檔案系統 (ReFS) Yes

SMB 不支援磁碟區管理功能。

交易作業

如果磁碟區支援文件系統交易,函式會在 lpFileSystemFlags傳回FILE_SUPPORTS_TRANSACTIONS

注意

fileapi.h 標頭會將 GetVolumeInformation 定義為別名,根據 UNICODE 預處理器常數的定義,自動選取此函式的 ANSI 或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程序代碼,可能會導致編譯或運行時間錯誤不符。 如需詳細資訊,請參閱 函式原型的慣例

規格需求

需求
最低支援的用戶端 Windows XP [傳統型應用程式 |UWP 應用程式]
最低支援的伺服器 Windows Server 2003 [傳統型應用程式 |UWP 應用程式]
目標平台 Windows
標頭 fileapi.h (包含 Windows.h)
程式庫 Kernel32.lib
DLL Kernel32.dll

另請參閱

關於 KTM

檔案加密

GetCompressedFileSize

GetFileAttributes

GetVolumeInformationByHandleW

SetErrorMode

SetVolumeLabel

磁碟區管理功能