Vista で一度権限の昇格をしてしまうと、そのプロセスから起動されたプロセスはすべて管理者権限で動作してしまう。逆に権限を降格させるにはどうしたらいいのか、以前から気になっていた。Firefox のインストーラのソースを見ればいいという話を聞いたことはあったが、確認はしていなかった。
nsWindowsRestart.cpp の、LaunchAsNormalUser() でその処理を行っているということを知った。シェルのアクセストークンを取得し、それを使ってプロセスを起動することで実現しているようだ。
bregonig.dll でググっていたら、「Wisteria - 秀丸っぽい談話室」という掲示板を発見。自分よりも一足先に BRegIf.DLL の改造版を作成していた人がいたようだ。しかも機能は向こうの方が少し上。しかし、こちらが先に公開してしまった。
HmJre.dll に JreGetTagPosition() が実装されたのは 2年以上も前のことなのに、BRegIf.DLL をこれに対応させようという動きは今までなかったのだろうか。関数のプロトタイプ宣言は公開されているが、動作までは公開されていないのが原因か?
秀丸で Bregexp.dll を使えるようにするための DLL である BRegIf.dll をちょっと改造してみた。置換で括弧にマッチした部分を \1 などで参照できるようにするため JreGetTagPosition() を実装してみた。無事に動いているようだ。BRegIf.dll の作者にメールを出してみたが、ちゃんと連絡は付くだろうか? 場合によっては秀丸のサポート掲示板に書いた方がよいだろうか。
しかし、秀丸の正規表現は癖が強くて好かない。置換で $n 形式が使えないというのもよくない。
64bit 版への拡張を考えると、BREGEXP 構造体の rsv1 の型は int から INT_PTR にでも変更した方がよいだろうか。
Bregexp.dll では、検索対象の文字列として、空文字列は許可していない。現在は bregonig.dll も Bregexp.dll の仕様に合わせてある。しかし、この仕様はおかしいのではないかという気がしてならない。「なでしこ バグ報告 掲示板 - 『正規表現一致』の結果がおかしい」のような話もある。bregonig.dll で空文字列を許可するように変更した場合、何か問題が発生するだろうか?
もう一つ、Oniguruma では前方探索だけでなく後方探索も可能だが、bregonig.dll でも後方探索をできるようにすべきだろうか?
2GB micro SD を約 \3.2k で購入。DVD を1個購入。
UTF-7 の判定が甘い気がする。K2Software BBS の No.3649 で報告のある T+IB-1 という文字列は、UTF-7 としては不正な文字列のはず。jconvert.pas に手を加えて、もう少し厳密にチェックするようにしてみた。さらに、Base64 エンコード部分が '-' 以外で終わる場合の処理が間違っていることに気付いたので、それも修正。
いろいろ調べていたらさらに問題を一つ発見。ファイルの最後の文字が2バイト文字で終わっている場合、勝手にファイルの末尾に改行が付加されてしまう。Main.pas をいじってみたところ、修正できたようだ。
一昨日の修正と合わせて、作者に報告する予定。ただ、作者は忙しそうなので、対応してくれるかどうかはかなり怪しい。せめて 1MB を超えるファイルの文字コード判別に失敗する点だけでも対応してほしいのだが。
K2Editor に、1MB を超えるファイルの文字コード判別に失敗することがあるということに気付いた。ソースを見たところ、現在の jconvert.pas は、ファイルを最大 1MB 読み込んで文字コードの判別を行うが、1MB を超えるファイルを読み込んだ際に、2バイト文字が 1MB 境界で分断されてしまうと文字コードの判別に失敗してしまう。また、JISコードのチェックで、2バイト文字の 2バイト目の範囲チェックが行われていないことも発見。UTF-8 のチェックもかなり甘い気がする。修正してみたところ、まともになったようである。
K2Software BBS の No.3643 に書いたが、コメント開始文字列が行末に来ると認識されないという問題もある。修正したいと思っていろいろ試してみたが、結局うまくいっていない。
No.3673 の問題もちょっと調べてみた。*.dfm の日本語文字列がなぜか Unicode で書かれているのが原因かとも思ったが、よく分からない。Turbo Delphi の無料版(Explorer エディション)でコンパイルした場合は問題ないことが判明した。なお、K2Editor 1.5.x を Turbo Delphi でコンパイルするには、いくつか修正が必要である。
これでコンパイルは通り、一応問題なく動作しているように見える。DragDrop.inc のバージョン判定も書き換えるべきかもしれない。判定に失敗した場合は Delphi 4 とみなすようになっているが、Delphi 5 をデフォルトとするように変更すべきかもしれない。現状では Delphi 6 以降はすべて Delphi 4 とみなされてしまう。
2ch の某所で、コマンドラインから空のファイルを作成する方法が話題になっている。DOS や Win9x では、
rem>hoge.txt
という方法が、よく使われていたような気がする。しかし、NT系ではこの方法は使えない。DOS/Win9x/NT系で共通に使える方法としては、
type hoge.txt>hoge.txt
という方法があるが、ファイル名を2回指定する必要があり、あまり美しくないしタイプ数も多い。他には、
type nul>hoge.txt copy nul hoge.txt
などがあるが、copy nul は NT 系専用のようだ。また、rem を使う方法に比べるとタイプ数が多い。
共通に使えて、タイプ数も少ない方法はないかと実験してみたところ、
cd.>hoge.txt
という方法が使えそうだ。
もっとも、最近は自作の touch コマンドを使うことが多いのだが。
先月の spam メールの集計結果。着信拒否にならなかった spam が少なくとも 2314通。そのうち、@nifty の迷惑メールフォルダーでも Spam Mail Killer でも spam として認識できなかったものは 0通。誤削除が 1通。