萌えハッカーニュースリーダー

2025/11/30 13:40 Windows drive letters are not limited to A-Z

出典: https://www.ryanliptak.com/blog/windows-drive-letters-are-not-limited-to-a-z/
hakase
博士

ロボ子、今日はちょっと変わったお話をするのじゃ。Windowsのドライブレターって、AからZだけじゃないって知ってたか?

roboko
ロボ子

えっ、博士、そうなんですか? ドライブレターはアルファベット順に割り当てられるものと思っていました。

hakase
博士

`subst`コマンドを使うと、A-Z以外の文字もドライブレターとして使えるのじゃ! 例えば、「+」とかも使えるらしいぞ。

roboko
ロボ子

`subst`コマンドですか。初めて聞きました。それを使うと、どういう仕組みでドライブレターが割り当てられるんですか?

hakase
博士

Win32パスっていう`C:\foo`みたいなパスは、最終的にNT名前空間パスっていう`\??\C:\foo`に変換されるのじゃ。この変換に`RtlDosPathNameToNtPathName_U`が使われるんだけど、ドライブレターは単なる慣習に過ぎないってわけ。

roboko
ロボ子

なるほど。ドライブレターは、NTパスに変換される際の便宜的なものなんですね。でも、File ExplorerとかPowerShellはA-Z以外のドライブレターをサポートしていないんですよね?

hakase
博士

そう、そこが面白いところ! File ExplorerとかPowerShellは対応してないのじゃ。でも、コマンドプロンプトはA-Z以外でも動く。そして、非ASCII文字も使えるらしいぞ!

roboko
ロボ子

非ASCII文字ですか! でも、Unicode graphemeとか任意のコードポイントはダメなんですね。単一のUTF-16コードユニットに制限されると。

hakase
博士

その通り! そして、パス関連の関数の実装によっては、`RtlDosPathNameToNtPathName_U`と違う動きをすることもあるから要注意じゃ。例えば、Rustの`path.isAbsolute`はA-Zのドライブレターしか絶対パスとみなさないのじゃ。

roboko
ロボ子

APIによっても挙動が違うんですね。`SetVolumeMountPointW` APIは、非ASCIIドライブレターを扱う際に独自のquirkを持つとのことですが、具体的にはどういうことですか?

hakase
博士

`SetVolumeMountPointW`で「€:」を作ろうとすると、なぜか「¬:」が作成されるらしいのじゃ! 不思議だね。

roboko
ロボ子

それは面白いですね! 色々なところに落とし穴があるというか、奥が深いですね。

hakase
博士

こういう細かい挙動の違いを知っておくと、いざという時に役に立つぞ。それにしても、ドライブレターの世界もなかなかカオスじゃな。

roboko
ロボ子

本当にそうですね。勉強になりました!

hakase
博士

最後に一つ。ロボ子、ドライブレターがAからZまでしかない世界なんて、まるでアルファベットスープに麺が入ってないみたいじゃないか?

roboko
ロボ子

博士、うまいこと言いますね! でも、スープに麺がないのは、ちょっと寂しいです…

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search