getVolumeInformationByHandleW 函数 (fileapi.h)

检索与指定文件关联的文件系统和卷的相关信息。

若要检索文件或目录的当前压缩状态,请使用 FSCTL_GET_COMPRESSION

语法

BOOL GetVolumeInformationByHandleW(
  [in]            HANDLE  hFile,
  [out, optional] LPWSTR  lpVolumeNameBuffer,
  [in]            DWORD   nVolumeNameSize,
  [out, optional] LPDWORD lpVolumeSerialNumber,
  [out, optional] LPDWORD lpMaximumComponentLength,
  [out, optional] LPDWORD lpFileSystemFlags,
  [out, optional] LPWSTR  lpFileSystemNameBuffer,
  [in]            DWORD   nFileSystemNameSize
);

参数

[in] hFile

文件的句柄。

[out, optional] lpVolumeNameBuffer

指向接收指定卷名称的缓冲区的指针。 最大缓冲区大小为 MAX_PATH+1

[in] nVolumeNameSize

卷名称缓冲区的长度,以 WCHAR为单位。 最大缓冲区大小为 MAX_PATH+1

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

[out, optional] lpVolumeSerialNumber

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

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

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

[out, optional] lpMaximumComponentLength

指向变量的指针,该变量接收指定文件系统支持的文件名组件的最大长度(以 WCHAR为单位)。

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

存储在 *lpMaximumComponentLength 指向的变量中的值用于指示指定的文件系统支持长名称。 例如,对于支持长名称的 FAT 文件系统, 函数存储值 255,而不是以前的 8.3 指示器。 使用 NTFS 文件系统的系统上也支持长名称。

[out, optional] lpFileSystemFlags

指向接收与指定文件系统关联的标志的变量的指针。

此参数可以是以下一个或多个标志。 但是, FILE_FILE_COMPRESSIONFILE_VOL_IS_COMPRESSED 是相互排斥的。

Value 含义
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
指定的卷支持重新分析点。
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 Vista 和 Windows Server 2008: 不支持此值。

FILE_SUPPORTS_EXTENDED_ATTRIBUTES
0x00800000
指定的卷支持扩展属性。 扩展属性是应用程序特定的元数据片段,应用程序可以将其与文件关联,并且不是文件数据的一部分。

Windows Vista 和 Windows Server 2008: 不支持此值。

FILE_SUPPORTS_OPEN_BY_FILE_ID
0x01000000
文件系统支持通过 FileID 打开。 有关详细信息,请参阅 FILE_ID_BOTH_DIR_INFO

Windows Vista 和 Windows Server 2008: 不支持此值。

FILE_SUPPORTS_USN_JOURNAL
0x02000000
指定的卷支持 (USN) 日志的更新序列号。 有关详细信息,请参阅 更改日记记录

Windows Vista 和 Windows Server 2008: 不支持此值。

FILE_SUPPORTS_BLOCK_REFCOUNTING
0x08000000
指定的卷支持在同一卷上的文件之间共享逻辑群集。 文件系统在写入共享群集时重新分配。 指示FSCTL_DUPLICATE_EXTENTS_TO_FILE是受支持的操作。

[out, optional] lpFileSystemNameBuffer

指向接收文件系统名称的缓冲区的指针,例如 FAT 文件系统或 NTFS 文件系统。 缓冲区大小由 nFileSystemNameSize 参数指定。

[in] nFileSystemNameSize

文件系统名称缓冲区的长度,以 WCHAR为单位。 最大缓冲区大小为 MAX_PATH+1

如果未提供文件系统名称缓冲区,则忽略此参数。

返回值

如果检索了所有请求的信息,则返回值为非零值。

如果未检索所有请求的信息,则返回值为零。 要获得更多的错误信息,请调用 GetLastError。

注解

在 Windows 8 和 Windows Server 2012 中,此函数由以下技术支持。

技术 支持
服务器消息块 (SMB) 3.0 协议
SMB 3.0 透明故障转移 (TFO)
具有横向扩展文件共享的 SMB 3.0 (SO)
群集共享卷文件系统 (CSV)
弹性文件系统 (ReFS)

SMB 不支持卷管理功能。

要求

   
最低受支持的客户端 Windows Vista [仅限桌面应用]
最低受支持的服务器 Windows Server 2008 [仅限桌面应用]
目标平台 Windows
标头 fileapi.h (包括 Windows.h)
Library Kernel32.lib
DLL Kernel32.dll

另请参阅

关于 KTM

文件加密

GetCompressedFileSize

GetFileAttributes

GetVolumeInformation

SetErrorMode

SetVolumeLabel

卷管理函数