罠だ!!

これまで、ずっと

  • GetWindowsDirectory 関数
  • GetSystemDirectory 関数

は、それぞれ

のように、現在の Windows (WINNT) ディレクトリと、System32 ディレクトリのパスを返すものだと思っていた。
しかし、なんと MSDN ライブラリによると、Windows Terminal Service や MetaFrame などが入っている環境では、GetWindowsDirectory はユーザーのホームフォルダの下に WINDOWS というフォルダを作成し、そこを指し示すらしい、ということを始めて知った。
たとえばターミナルサーバーにログオンしているユーザーで、自分のホームドライブが H:\ の場合は、GetWindowsDirectory は H:\WINDOWS を返す。しかしこの状況で GetSystemDirectory を呼ぶと、C:\Windows\System32 が返ってくる。
マイクロソフト的には、GetWindowsDirectory は旧式のアプリケーションが設定ファイルなどを保存しておく場所に適切なディレクトリを返すらしい。これまで、GetWindowsDirectory は必ず GetSystemDirectory が返すディレクトリの親ディレクトリを返す仕様だと思っていた。