ブラウザプラグイン:解決編

昨年来取り組んできた本件、やっとめどがつきました。成果をシェアできるよう週末までにまとめますね>関係者の皆様

Vistaの保護のしくみのおさらい

Vista上のプロセスは、それぞれIntegrity Levelというものをもっていて、OSの機構でレベルの低→高の干渉を妨げるようになっています。
Vista上のIE7は、保護モードというものを導入しています。このモードで動いている時、ブラウザ(+プラグイン)は、一般のプロセスよりさらに低いIntegrity Levelになっています。これによってActiveXが悪さをしにくいようになっています。

Squeakプラグインがなぜうまく動かなかった

ブラウザプラグインは内部でSqueak.EXEのプロセスを起動します。しかし保護モードのコードからプロセスを起動した場合でも、特別な方法でコーディングをしない場合は、一般のIntegrity Levelになります。そのためブラウザプラグインSqueak.EXEは、Integrity Levelに差が生じてしまいます。
その結果、

  • 低→高 のWindowsメッセージ送信はできない
  • 「低」プラグイン側で、「高」Squeak.exeプロセス用のハンドル複製できない

となり、http://d.hatena.ne.jp/korakurider/20070212/p1 のエラーになっていました。

解決方針

このような場合の定石の1つが、"Low Integrity" レベルとしてプロセスを起動してやることです。実際Squeak.EXEを Low Integrityとして起動するようにSqueakOCX2を修正したプロトタイプで、エラーはでなくなりました。
※このプログラミングをするためには、Vista Win32 SDK(ヘッダファイル等)が必要になります。