Windows XP 以降と互換性のある Windows API 関数を使用して、ジャンクションまたはシンボリック リンクのターゲットを見つけようとしています。私はCreateFile
、再解析ポイントへのハンドルを取得するために使用してからDeviceIoControl
、FSCTL_GET_REPARSE_POINT
フラグを使用して再解析データをREPARSE_DATA_BUFFER
. 次に、バッファー内のオフセットと長さを使用して、文字列SubstituteName
とPrintName
文字列を抽出します。
Windows 8 ではPrintName
、正常なパス (つまりc:\filename.ext
) が得られますが、XP では のPrintName
セクションのREPARSE_DATA_BUFFER
長さが常に 0 のようで、空の文字列が残ります。
を使用するSubsituteName
と両方で機能するように見えますが、常に\??\
ファイルパスの先頭に接頭辞 (つまり\??\c:\filename.ext
) が付きます。(補足として、接頭辞もfsutil reparsepoint query
示しています)。\??\
MSDN のドキュメントの多くを読みましたが、このプレフィックスの説明が見つかりません。接頭辞がSubstituteName
必ず必ず . Microsoft のすべての再解析ポイントに"\??\"
プレフィックスが表示されるかどうかと、その理由を知りたいです。SubstituteName