Skip to content

Instantly share code, notes, and snippets.

@xyzzy-17-638
Created March 1, 2012 21:13
Show Gist options
  • Save xyzzy-17-638/1953261 to your computer and use it in GitHub Desktop.
Save xyzzy-17-638/1953261 to your computer and use it in GitHub Desktop.
xyzzy WoW64対応コマンドライン仕様
  • WoW64環境でのみ動作する。他の環境では何もしない。

  • 1:xyzzy(cli)を実行したプロセスから見えているであろうファイルを自動的に選ぶ

    • 例1A:32bit の bash から xyzzycli が呼び出された場合、 与えられたファイル名をリダイレクト有りのファイル名として解釈する
    • 例1B:64bit のエクスプローラから xyzzycli が呼び出された場合、 与えられたファイル名をリダイレクト無しのファイル名として解釈する
  • 2:xyzzy内部の状態に合わせて、与えられたファイル名を変換する

    • 例2A:xyzzy内部はリダイレクト無しのモードで、 外部32bitプロセスから C:\Windows\System32\mapisvc.inf が与えられた場合、 内部では C:\Windows\SysWOW64\mapisvc.inf として解釈する
    • 例2B:xyzzy内部はリダイレクト有りのモードで、 外部64bitプロセスから C:\Windows\System32\NetTrace.PLA.Diagnostics.xml が与えられた場合、 内部では C:\Windows\Sysnative\NetTrace.PLA.Diagnostics.xml として解釈する
  • 3:これらをオーバーライドするコマンドライン引数を追加する

    • -wow64-redirection : 呼び出し元プロセスによらず、与えられたファイル名をリダイレクト有りのものとして解釈する。
    • -no-wow64-redirection : 呼び出し元プロセスによらず、与えられたファイル名をリダイレクト無しのものとして解釈する。
  • 4:ドラッグ&ドロップの場合は保留

    • ドラッグ元のプロセスを拾う方法が分からない・・・

TODO : 以下はゴッチャリしすぎなので、整理すること

手動テスト

本当は unittest を書くのがスジなのだろうけど、どう書いたら良いのかよくわからんので手動。

呼び出し元プロセス

  • 32bit プロセスからのオープンには C:\Windows\SysWOW64\cmd.exe (32bit 版 cmd.exe) を使用する。
  • 64bit プロセスからのオープンには C:\Windows\System32\cmd.exe (64bit 版 cmd.exe) を使用する。

SysWOW64 にしか無いファイルを 32bit プロセスから開く

SysWOW64 のみに存在するファイル C:\Windows\SysWOW64\mapisvc.inf を開く。

以下のように 32bit 版 cmd.exe からオープンする

    > C:\Windows\SysWOW64\cmd.exe
    > C:\...\xyzzycli.exe C:\Windows\System32\mapisvc.inf

このファイル名は、ネイティブパスとしては以下のように解釈される

    `C:\Windows\SysWOW64\mapisvc.inf`
  • リダイレクト有り (wow64-enable-file-system-redirector が t) の場合、以下がオープンされる

     `C:\Windows\System32\mapisvc.inf`
     (ただし実際のファイル実体は `C:\Windows\SysWOW64\mapisvc.inf`)
    
  • リダイレクト無し (wow64-enable-file-system-redirector が nil) の場合、以下がオープンされる

     `C:\Windows\SysWOW64\mapisvc.inf`
    

SysWOW64 にしか無いファイルを 64bit プロセスから開く

上記テストと同様に、SysWOW64 のみに存在するファイル C:\Windows\SysWOW64\mapisvc.inf を開く。

以下のように 64bit 版 cmd.exe からオープンする

    > C:\Windows\System32\cmd.exe
    > C:\...\xyzzycli.exe C:\Windows\System32\mapisvc.inf

このファイル名は、ネイティブパスとしては以下のように解釈される

    `C:\Windows\System32\mapisvc.inf`
  • リダイレクト有り (wow64-enable-file-system-redirector が t) の場合、以下が新規ファイルとして作られる

     `C:\Windows\Sysnative\mapisvc.inf`
     (ただし実際のファイル実体は `C:\Windows\System32\mapisvc.inf`)
    
  • リダイレクト無し (wow64-enable-file-system-redirector が nil) の場合、以下が新規ファイルとして作られる

     `C:\Windows\System32\mapisvc.inf`
    

64bit プロセスからオープンしたい場合は C:\Windows\SysWOW64\mapisvc.inf というファイル名を使う。

System32 にしか無いファイルを 32bit プロセスから開く

System32 のみに存在するファイル C:\Windows\System32\NetTrace.PLA.Diagnostics.xml を開く。

以下のように 32bit 版 cmd.exe からオープンする

    > C:\Windows\SysWOW64\cmd.exe
    > C:\...\xyzzycli.exe C:\Windows\System32\NetTrace.PLA.Diagnostics.xml

このファイル名は、ネイティブパスとしては以下のように解釈される

    `C:\Windows\SysWOW64\NetTrace.PLA.Diagnostics.xml`
  • リダイレクト有り (wow64-enable-file-system-redirector が t) の場合、以下が新規ファイルとして作られる

     `C:\Windows\System32\NetTrace.PLA.Diagnostics.xml`
     (ただし実際のファイル実体は `C:\Windows\SysWOW64\NetTrace.PLA.Diagnostics.xml`)
    
  • リダイレクト無し (wow64-enable-file-system-redirector が nil) の場合、以下が新規ファイルとして作られる

     `C:\Windows\SysWOW64\NetTrace.PLA.Diagnostics.xml`
    

32bit プロセスからオープンしたい場合は C:\Windows\Sysnative\NetTrace.PLA.Diagnostics.xml というファイル名を使う。

System32 にしか無いファイルを 64bit プロセスから開く

上記テストと同様に、System32 のみに存在するファイル C:\Windows\System32\NetTrace.PLA.Diagnostics.xml を開く。

以下のように 64bit 版 cmd.exe からオープンする

    > C:\Windows\System32\cmd.exe
    > C:\...\xyzzycli.exe C:\Windows\System32\NetTrace.PLA.Diagnostics.xml

このファイル名は、ネイティブパスとしては以下のように解釈される

    `C:\Windows\System32\NetTrace.PLA.Diagnostics.xml`
  • リダイレクト有り (wow64-enable-file-system-redirector が t) の場合、以下がオープンされる

     `C:\Windows\Sysnative\NetTrace.PLA.Diagnostics.xml`
     (ただし実際のファイル実体は `C:\Windows\System32\NetTrace.PLA.Diagnostics.xml`)
    
  • リダイレクト無し (wow64-enable-file-system-redirector が nil) の場合、以下がオープンされる

     `C:\Windows\System32\NetTrace.PLA.Diagnostics.xml`
    
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment