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