GetVolumePathNameW

指定したパスがマウントされているボリュームマウントポイントを取得する。(GetVolumePathNameW)

GetVolumePathNameW lpszFileName, lpszVolumePathName, cchBufferLength

lpszFileName : [wstr] 入力パス文字列へのポインタ。絶対および相対のファイル・ディレクトリ名(たとえば "..")はこのパスで受け入れられる。ボリューム修飾子なしで相対ディレクトリまたはファイル名を指定した場合、**GetVolumePathName** はブートボリュームのドライブレターを返す。このパラメータが空文字列 "" の場合、関数は失敗するが最後のエラーは **ERROR_SUCCESS** に設定される。
lpszVolumePathName : [wstr] 入力パスのボリュームマウントポイントを受け取る文字列へのポインタ。
cchBufferLength : [int] 出力バッファの長さ(**TCHAR** 単位)。

(プラグイン / モジュール : kernel32.dll)

解説

指定したパスがマウントされているボリュームマウントポイントを取得する。(GetVolumePathNameW)

[戻り値]
関数が成功した場合、戻り値は 0 以外。関数が失敗した場合、戻り値は 0。拡張エラー情報を取得するには
[GetLastError](/windows/win32/api/errhandlingapi/nf-errhandlingapi-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
名前空間パスのドライブレターではなく、ブートボリュームのドライブレターを返す。パス名と名前空間の詳細は [Naming Files,
Paths, and Namespaces](/windows/win32/FileIO/naming-a-file)
を参照。ローカルとリモートの両方のパスを指定できる。ローカルパスを指定した場合、**GetVolumePathName**
はプレフィックスがボリュームを表す最も長いプレフィックスであるフルパスを返す。ネットワーク共有が指定された場合、**GetVolumePathName**
は [GetDriveType](/windows/win32/api/fileapi/nf-fileapi-getdrivetypea)
が **DRIVE_REMOTE**
を返す最短のパスを返す。これは、パスが現在のユーザーがアクセス可能な存在するリモートドライブとして検証されたことを意味する。末尾のバックスラッシュを返さない特殊なケースがいくつかある。これは、出力バッファ長が
1 文字短い場合に発生する。たとえば、_lpszFileName_ が `C:` で _lpszVolumePathName_ が 4
文字長の場合、返される値は `C:\` であるが、_lpszVolumePathName_ が 3 文字長の場合、返される値は `C:`
である。戻りバッファのサイズを設定するより安全だが遅い方法は、[GetFullPathName](/windows/win32/api/fileapi/nf-fileapi-getfullpathnamea)
関数を呼び出し、バッファサイズが **GetFullPathName**
が返すフルパスと少なくとも同じサイズであることを確認することである。出力バッファが 1
文字を超えて短い場合、関数は失敗してエラーを返す。Windows 8 および Windows Server 2012
では、この関数は以下の技術によりサポートされる。 技術 | サポート -----------|---------- Server
Message Block (SMB) 3.0 protocol|No SMB 3.0 Transparent Failover
(TFO)|No SMB 3.0 with Scale-out File Shares (SO)|No Cluster Shared
Volume File System (CsvFS)|Yes Resilient File System (ReFS)|Yes SMB
はボリューム管理関数をサポートしない。

情報

プラグイン / モジュールkernel32.dll
バージョン1.0
作成日2026/04/16
著作者IronHSP / CsWin32 bridge
URLhttps://github.com/inovia/IronHSP
備考Win32 API の kernel32.dll 関数群。CsWin32 + win32metadata から自動生成。
hsp3net 専用 (intptr / NSTRUCT / wstr を使用)。
タイプ拡張命令
グループWin32API
対応環境
  • Windows 版 HSP
hs ファイルhsphelp\win32_kernel32_gen2.hs