ブラウザプラグインからプロジェクトファイルを書き出す

なかなか問屋がおろしてくれません。。。

発生している問題

保護モードで動作しているブラウザプラグインSqueakで、プロジェクトをローカルのディスクに書き出すことができない。squeakdebug.logも同様。

原因

Log Integrityのプロセスは、OSが決めたLow Integrity用の場所にしかwriteアクセスができない。具体的には、
%USERPROFILE%\AppData\LocalLow だけにwriteアクセスできる。Vista/IE7の仕組み自体にSqueakのSecurityPluginみたいな機能が組み込まれているわけです。
参考:

理想的な解決策

どうしてもセキュリティ境界を越えて他の場所に保存するのであれば、以下の処理を行う必要があります。

  • いったん LocalLow以下に一時ファイルとして保存する
  • ダイアログを表示して(IEShowSaveFileDialog)、セキュリティ境界を越えて保存することをユーザに確認する
  • 目的の場所にファイルをコピーする(IESaveFile)

しかし、これをSqueakで実装するためには、ブラウザプラグインの修正だけでは済みません。イメージ中のSqueakコード(保存シーケンス)やVMにまで、Vistaという特定環境に依存した修正を行うことになってしまいます。

回避策とその帰結

理想的な解決策をとらない場合、次のような動作になります。

  • ブラウザプラグインを使うなら、そのWindowsユーザで最低一度はSqueakを起動すること。これにより、あるべき場所に暗号化キーやINIファイルが作成される。そうしておかないと、作成エラーになったり、仮想化機能によりとんでもなく深い場所に作成されてしまったり、またそれがプラグインとして起動した場合と場所が違ったりする。
  • INIファイルの設定などで、UntrustedUserDirectoryを %USERPROFILE%\AppData\LocalLow以下の場所に設定しておけば、SuperSwikiから直接開いたプロジェクトをローカルに保存できるようになる。しかしスタートメニューから普通に起動した場合でも、こんなとんでもなく深い場所に保存しなくてはならなくなる。
  • 逆に、C:\MySqueakみたいなところをプロジェクト保存場所に使うなら、IE7は目的のWebサイトで保護モードOFFになるよう設定する必要がある。(その運用をしていいなら、保護モード対応プログラミングでこんなに苦労しなくてすんだんだけど。。。)

非常に悩ましいところです。