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 支持重新分析点,但不为其编制索引,因此 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)
群集共享卷文件系统 (CSV)
弹性文件系统 (ReFS)

SMB 不支持卷管理功能。

事务处理操作

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

注意

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

要求

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

另请参阅

关于 KTM

文件加密

GetCompressedFileSize

GetFileAttributes

GetVolumeInformationByHandleW

SetErrorMode

SetVolumeLabel

卷管理函数