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。 最大缓冲区大小为 MAX_PATHs+1。

如果未提供卷名称缓冲区,则忽略此参数。

[out, optional] lpVolumeSerialNumber

指向接收卷序列号的变量的指针。

如果不需要序列号,则可以 NULL 此参数。

此函数返回操作系统在格式化硬盘时分配的卷序列号。 若要以编程方式获取制造商分配的硬盘序列号,请使用 Windows Management Instrumentation (WMI) Win32_PhysicalMedia 属性 SerialNumber

[out, optional] lpMaximumComponentLength

指向接收指定文件系统支持的文件名组件的文件名组件的最大长度(TCHAR)的变量的指针。

文件名组件是反斜杠之间的文件名部分。

存储在 *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: 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 协议
SMB 3.0 透明故障转移 (TFO)
具有横向扩展文件共享的 SMB 3.0 (SO)
群集共享卷文件系统 (CsvFS) 是的
可复原文件系统 (ReFS) 是的

SMB 不支持卷管理功能。

事务处理的操作

如果卷支持文件系统事务,则函数在 lpFileSystemFlags中返回 FILE_SUPPORTS_TRANSACTIONS

注意

fileapi.h 标头将 GetVolumeInformation 定义为一个别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将中性编码别名与不中性编码的代码混合使用可能会导致编译或运行时错误不匹配。 有关详细信息,请参阅函数原型的 约定。

要求

要求 价值
最低支持的客户端 Windows XP [桌面应用 |UWP 应用]
支持的最低服务器 Windows Server 2003 [桌面应用 |UWP 应用]
目标平台 窗户
标头 fileapi.h (包括 Windows.h)
Kernel32.lib
DLL Kernel32.dll

另请参阅

关于 KTM 的

文件加密

GetCompressedFileSize

GetFileAttributes

GetVolumeInformationByHandleW

SetErrorMode

SetVolumeLabel

卷管理功能