指定したファイルの最終パスを取得する。(Unicode)
GetFinalPathNameByHandleW hFile, lpszFilePath, cchFilePath, dwFlags
hFile : [intptr] ファイルまたはディレクトリへのハンドル。 lpszFilePath : [wstr] hFile のパスを受け取るバッファへのポインタ。 cchFilePath : [int] lpszFilePath のサイズ(TCHAR 単位)。この値は NULL 終端文字を含む必要がある。 dwFlags : [int]
(プラグイン / モジュール : kernel32.dll)
指定したファイルの最終パスを取得する。(Unicode)
[戻り値]
関数が成功した場合の戻り値は lpszFilePath が受け取った文字列の長さ(TCHAR 単位)である。この値には終端 null
文字のサイズは含まれない。Windows Server 2008 および Windows Vista: 本関数の ANSI 版
GetFinalPathNameByHandleA では、戻り値は終端 null 文字のサイズを含む。lpszFilePath
が文字列と終端 null 文字を保持するには小さすぎたために失敗した場合、戻り値は必要なバッファサイズ(TCHAR
単位)であり、この値には終端 null 文字のサイズが含まれる。それ以外の理由で失敗した場合の戻り値は 0
である。拡張エラー情報を取得するには GetLastError を呼ぶ。
(以下省略)
[備考]
Server Message Block (SMB) プロトコルは正規化済みパスのクエリをサポートしない。そのため、SMB
経由で開いたファイルのハンドルと FILE_NAME_NORMALIZED
フラグを指定して本関数を呼ぶと、関数はパスを構成要素に分割し、各構成要素の正規化名を順次クエリしようとする。ユーザーがそれらの構成要素のいずれかへのアクセス権を持っていない場合、関数呼び出しは
ERROR_ACCESS_DENIED で失敗する。最終パスとは、パスが完全に解決されたときに返されるパスである。例えば
"C:\tmp\mydir" という "D:\yourdir" を指すシンボリックリンクの場合、最終パスは "D:\yourdir"
となる。VOLUME_NAME_DOS を使用すると、本関数が返す文字列は "\\?\" 構文を使用する。詳細は CreateFile
を参照。VOLUME_NAME_GUID を使用すると、返されるパスは
"\\?\Volume{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}\" のような形式のボリューム GUID
パスで始まる。VOLUME_NAME_NT を使用すると、返されるパスは NT
デバイスオブジェクト用であり、"\Device\HarddiskVolume1\"
のようなデバイス名で始まる。この種類のパスは相対パスのように見えるため、Windows
プログラムが直接使用することはできない。一部のサードパーティドライバは Mount Manager
を使わずにドライブレターやマウントポイントを作成できる。Mount Manager
がドライブの作成に使われていない場合、VOLUME_NAME_DOS や VOLUME_NAME_GUID
は成功せず、VOLUME_NAME_NT
のみが利用可能である。ボリュームデバイスパスのドライブレターを判定するには、一致するデバイス名が見つかるまで全ドライブレターに対して
QueryDosDevice 関数を使用する。Windows 8 および Windows Server 2012
では、本関数は以下の技術によりサポートされている。
(以下省略)
| プラグイン / モジュール | kernel32.dll |
| バージョン | 1.0 |
| 作成日 | 2026/04/16 |
| 著作者 | IronHSP / CsWin32 bridge |
| URL | https://github.com/inovia/IronHSP |
| 備考 | Win32 API の kernel32.dll 関数群。CsWin32 + win32metadata から自動生成。
hsp3net 専用 (intptr / NSTRUCT / wstr を使用)。 |
| タイプ | 拡張命令 |
| グループ | Win32API |
| 対応環境 |
|
| hs ファイル | hsphelp\win32_kernel32_gen2.hs |