松尾です。 Tera Term の duplicate sessionは、 複製先起動時に引数(スイッチ)で状態を渡すほかに、 (この引数作るところがUnicode対応になっていませんでした…対応します) ワークメモリ(tttset構造体)のコピーも行っているんですね。 複製先 ttermpro.exe を起動する前に、 ワークを共有メモリにコピーしておいて 起動してきたら共有メモリからワークに書き戻しを行う、 という動作です。 Unicodeファイル名対応では ファイル名やパスを動的メモリ上に取って、 ワーク上にはポインタがあります。 動的にしているのは、32K文字パス長に対応すると、 静的メモリだと効率が悪いためです。 複製先が共有メモリからコピーしたワークの ファイル名やパスのポインタの指している先は 複製元とは異なるメモリ空間なので パス、ファイル名が正しく参照できなくなりクラッシュします。 # 多分、 # tttset が共有できるもの、 # TComVar が共有できないもの、 # という設計されているんですね。 ということで、何とか解決しないといけません。 案を考えました。 案1 ワークの受け渡しをやめる - ワークを受け渡さない - コマンドラインスイッチで渡せるもので十分 - 必要ならスイッチを増やす - 例 /ssh-consume= など(このために存在したのか…) 案2 これまで同様すべてのワークの受け渡しも行う - ワークはすべてデータに変換できるようにする - データからワークへ戻せるようにする - 何らかの方法(共有メモリか、ファイルか)でワークを受け渡す - 各プラグイン内のワークも受け渡すのか? - ttxsshはスイッチで対応している 案3 一部を受け渡す - スイッチに加え一部のワークを渡す - どれを渡す? 案1をちゃちゃっと実装して動作を見た感じ、 おおむねよさそうに思いました。 案3(実際1つも受け渡ししない≒1案)で作っておいて、 受け渡す必要があるものがあれば増やしていく というのが現実的かなとおもいます。 ワーク経由でないければ受け渡せないものはあるでしょうか? 何もなさそうなら案1がシンプルでよさそうです。