本投稿は備忘録であり、ご回答は NTネイティブパス名をMS-DOSパス名に変換するには? で募っています。
マルチポストとなるのを避けるため、こちらには技術的な内容をご回答されませんよう、お願いいたします。
以下本文。
NT パス名、例えば \Device\HarddiskVolume1\... を C:\... に変換するにはどうすればよいのだろう?
ローカルドライブ下にあるパスについては、GetLogicalDriveStrings でドライブ名の一覧を取得し、QueryDosDevice でドライブ名を NT デバイス形式に変換し、前方一致で確認すればできそう。
が、ネットワークドライブや、ドライブレターが割り当てられていない UNC パスについてはどうすれば?
ローカルドライブの場合、例えば C: について QueryDosDevice で問い合わせれば \Device\HarddiskVolume1 という文字列のみが返ってくるため、前方一致で判別できる。
しかし、例えば、N: が \\Server\Path にマップされている場合、ネットワークドライブ内にあるファイルの NT パスは \Device\LanmanRedirector\Server\Path だが、N: に対して QueryDosDevice を実行すると \Device\LanmanRedirector\;N:謎の数字 \Server\Path のような文字列が返ってきてしまい、前方一致できない。
また、QueryDosDevice に UNC を渡しても、対応する NT パスは取得できない。
NT パスが \Device\LanmanRedirector\Server\Path となっていれば、それは \\Server\Path を指すのだと解釈してしまうのも、ドライバか何かの実装が異なれば、 LanmanRedirector 以外の名前がありそうで怖い。
RtlNtPathNameToDosPathName という関数もあるが、Undocumented なので、できれば使いたくない。
マウントポイント等の場合にどうなるかは要調査。