getVolumePathNameA 函数 (winbase.h)

检索装载指定路径的卷装入点。

语法

BOOL GetVolumePathNameA(
  [in]  LPCSTR lpszFileName,
  [out] LPSTR  lpszVolumePathName,
  [in]  DWORD  cchBufferLength
);

参数

[in] lpszFileName

指向输入路径字符串的指针。 绝对名称和相对文件和目录名称(例如“..”)在此路径中都是可接受的。

如果在不使用卷限定符的情况下指定相对目录或文件名, GetVolumePathName 将返回启动卷的驱动器号。

如果此参数为空字符串“”,则函数失败,但最后一个错误设置为 ERROR_SUCCESS

[out] lpszVolumePathName

指向接收输入路径的卷装入点的字符串的指针。

[in] cchBufferLength

输出缓冲区的长度(以 TCHAR 为单位)。

返回值

如果该函数成功,则返回值为非零值。

如果函数失败,则返回值为零。 要获得更多的错误信息,请调用 GetLastError。

注解

如果传递指定路径, GetVolumePathName 将返回卷装入点的路径,这意味着它将返回指定路径的终结点所在的卷的根目录。

例如,假设卷 D 装载在 C:\Mnt\Ddrive,卷 E 装载在“C:\Mnt\Ddrive\Mnt\Edrive”。 此外,假设你有一个路径为“E:\Dir\Subdir\MyFile”的文件。 如果将“C:\Mnt\Ddrive\Mnt\Edrive\Dir\Subdir\MyFile”传递给 GetVolumePathName,它将返回路径“C:\Mnt\Ddrive\Mnt\Edrive”。

如果在不使用卷限定符的情况下传递相对目录或文件,该函数将返回启动卷的驱动器号。 如果在未指定有效的卷限定符的情况下指定了无效的文件或目录名称,则也会返回启动卷的驱动器号。 如果给定了有效的卷说明符,并且卷存在,但指定了无效的文件或目录名称,则该函数将成功,并且将返回该卷名称。 有关示例,请参阅本主题的示例部分。

必须指定有效的 Win32 命名空间路径。 如果指定 NT 命名空间路径,例如“\DosDevices\H:”或“\Device\HardDiskVolume6”,则函数将返回启动卷的驱动器号,而不是该 NT 命名空间路径的驱动器号。

有关路径名称和命名空间的详细信息,请参阅 命名文件、路径和命名空间

可以指定本地路径和远程路径。 如果指定本地路径, GetVolumePathName 将返回一个完整路径,其前缀是表示卷的最长前缀。

如果指定了网络共享, 则 GetVolumePathName 将返回 GetDriveTypeDRIVE_REMOTE返回的最短路径,这意味着该路径将验证为当前用户可以访问的远程驱动器。

某些特殊情况不返回尾随反斜杠。 当输出缓冲区长度太短一个字符时,会发生这些情况。 例如,如果 lpszFileName 为 C: , lpszVolumePathName 的长度为 4 个字符,则返回的值为“C:”;但是,如果 lpszVolumePathName 的长度为 3 个字符,则返回的值为“C:”。 设置返回缓冲区大小的一种更安全但较慢的方法是调用 GetFullPathName 函数,然后确保缓冲区大小至少与 GetFullPathName 返回的完整路径大小相同。 如果输出缓冲区的多个字符太短,该函数将失败并返回错误。

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

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

SMB 不支持卷管理功能。

尾随路径元素

将忽略无效的尾随路径元素。 对于远程路径,如果满足以下条件之一,则整个路径 (不只是尾随元素) 被视为无效:
  • 路径格式不正确。
  • 路径不存在。
  • 当前用户无权访问路径。

交接点和装载的文件夹

如果指定路径遍历交汇点, GetVolumePathName 将返回该交界点所引用的卷。 例如,如果 W:\Adir 是指向 C:\Adir的交接点,则调用的 W:\Adir\AfileGetVolumePathName 返回“C:\”。 如果指定路径遍历多个交接点,则遵循整个链, GetVolumePathName 返回链中最后一个交接点所引用的卷。

如果指定了已装载文件夹或交接点的远程路径,则会将路径解析为远程路径,并忽略装载的文件夹或交接点。 例如,如果 C:\Dir_C 链接到 D:\Dir_D 远程计算机上的 并将其 C: 映射到 X: ,则调用 GetVolumePathName 并在远程计算机上指定 X:\Dir_C返回 X:</code>。

示例

对于以下一组示例,U: 映射到远程计算机 \\YourComputer\C$,而 Q 是本地驱动器。

指定的路径 函数返回
\\YourComputer\C$\Windows \\YourComputer\C$\
\\?\UNC\YourComputer\C$\Windows \\?\UNC\YourComputer\C$\
Q:\Windows Q:\
\\?\Q:\Windows \\?\问:\
\\.\Q:\Windows \\。\问:\
\\?\UNC\W:\Windows FALSE ,错误 123,因为指定的远程路径无效;W$ 共享不存在或未授予用户访问权限。
存在的 C:\COM2 () \\.\COM2\
C:\COM3 (不存在) FALSE 并出现错误 123,因为指定了不存在的 COM 设备。
 
对于以下一组示例,路径包含无效的尾随路径元素。
指定的路径 函数返回
G:\invalid (无效路径) G:\
\\.\I:\aaa\invalid (无效路径) \\。\我:\
\\YourComputer\C$\invalid (无效的尾随路径元素) \\YourComputer\C$\
 

要求

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

另请参阅

DeleteVolumeMountPoint

GetFullPathName

GetVolumeNameForVolumeMountPoint

SetVolumeMountPoint

卷管理函数

卷装入点