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_PATH+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
0x04000000
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
FILE_DAX_VOLUME
0x20000000
指定的卷是 (DAX) 卷的直接访问。
注意此标志是在版本 1607 Windows 10中引入的。
 
FILE_SUPPORTS_GHOSTING
0x00000200

[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 应用]
目标平台 Windows
标头 fileapi.h (包括 Windows.h)
Library Kernel32.lib
DLL Kernel32.dll

另请参阅

关于 KTM

文件加密

GetCompressedFileSize

GetFileAttributes

GetVolumeInformationByHandleW

SetErrorMode

SetVolumeLabel

卷管理功能