Win2k で exFAT を使えるようにできないか少し調べてみた。exfat.sys が一番重要なドライバだと思われるので、まずはそれをロードできるか実験。
PE ヘッダを見ると、サブシステムバージョンなどが 5.1 になっていたので、5.0 に変更。次にチェックサムを修正するために、editbin /release exfat.sys を実行。C:\WINNT\System32\Drivers\ にコピーしてから、DriverWalker を使ってドライバを開始しようとしたら、「エラー (127) : 指定したプロシージャが見つかりません。」と言われて開始できなかった。XP で追加された API にリンクしているということか? 確認したところ、DbgPrintEx() など Win2k の ntoskrnl.exe にはない API がいくつか使われていた。
残念ながら Win2k で exFAT を使えるようにするのは無理なようだ。
Description of the exFAT file system driver update package によると、理論上の最大ボリュームサイズとファイルサイズがどちらも 64ZB となっているが、間違っているのではないだろうか。少なくとも、ファイルサイズは 64bit で管理しているので、2^64 = 16EiB が最大となるはず。それとも何かトリックがあるのだろうか。
ボリュームサイズに関連しては、セクタ数を 64bit で管理しているので、512bytes/sector ならば 8ZiB が最大となりそう。4KiB/sector ならば 64ZiB か?
ようやく XP でも exFAT が使えるようになるようだ。無理矢理 Win2k でも使えるようにできないかも気になるところ。
WindowsXP-KB955704-x86-JPN.exe をダウンロードし、解凍して中身を見てみた。追加・更新されるファイルは以下の通り。ドライバファイルを一つ追加しておしまいというわけにはいかないようだ。
ちなみに、ファイルのタイムスタンプを見ると、昨年の 9/30 になっている。公開までずいぶん掛かったものだ。
いくつかのバイナリエディタの Unicode 対応度を調べてみた。定番中の定番の Stirling や BZ は、Shift_JIS に含まれていない文字は表示されなかった。TSXBIN や、つい最近知った xedit も同様。
Thebe は、Unicode アプリなだけあって、Shift_JIS に含まれない文字も表示、編集、コピー&ペーストできた。しかし、サロゲートペアは表示できず、テキスト表示モードで編集時も 2文字として扱われてしまった。
結局試した範囲では、サロゲートペアの表示までできるバイナリエディタは、Binary maid 改造版以外には見つからなかった。もっとも、バイナリエディタがサロゲートペアに対応して何が嬉しいのか不明だが。
「吉」の 3画目が長い字は、Unicode では U+20BB7 に割り当てられている。しかし、この字は「メイリオ」には含まれているが、「IPAゴシック」や、Vista の「MS ゴシック」にはないことに気付いた。なぜだろう。JIS X 0213-2004 には含まれていない?
Virtual PC のゲスト OS として Win2k を使ったときにクリップボードがどうなるか試してみたところ、Win9x の場合とは異なり、ホストとゲストの間で Unicode テキストが問題なくやりとりできた。Win9x 用のバーチャルマシン追加機能には、CF_UNICODETEXT を扱う機能が省かれているということなのだろう。
Binary maid 改造版の Unicode 対応強化はこの辺りで十分だろう。Win9x では、Unicode 表示部にテキストをペーストしても、Unicode テキストではなく ANSI テキストとしてペーストされる問題が残っているが、制限事項としておこう。
サロゲートペアを含めて、UTF-16 が正しく表示されている様子を示しておく。
Virtual PC のバーチャルマシン追加機能をインストールしておくと、ホストマシンとの間でクリップボードの共有ができる。しかし、Win2k にインストールした Virtual PC 2007 上で、Win98SE を動かしたところ、Unicode テキスト (CF_UNICODETEXT) は、やりとりされなかった。ゲスト OS に WinNT 系を使ったときにどうなるかは確認していない。
Binary maid 改造版の Unicode 対応を強化しようと、色々実験中。
Win98SE で DialogBoxParamW() を実行してみた。Win9x では、DialogBoxParam() の Unicode 版である DialogBoxParamW() はサポートされていない。実行するとエラーで -1 が返るのかと思っていたが、実際には 0 が返ってきた。しかし、GetLastError() を確認すると、ERROR_CALL_NOT_IMPLEMENTED が返ってきた。
Virtual PC 上の Win98SE で、TextOutW() を使って Unicode 文字を表示するプログラムを動かしたところ、文字が正常に表示されなかった。正確には、Shift_JIS に含まれている文字は表示できるのだが、それ以外の文字が表示されない。以前、実マシン上の Win98SE で smmp を動かしたときは、Shift_JIS に含まれていない文字も正常に表示できたはずなのだが。
「文字コード規格の基礎:ITpro」にあるテストプログラムも試してみたが、これもまともに表示されなかった。何か別途インストールしないといけないものがあったり、設定の変更などが必要だったりするだろうか。
面倒くさいと思いつつ、実マシンを引っ張り出して試してみたところ、TextOutW() で正常に Unicode 文字が表示されることが確認できた。Virtual PC 上の Win98SE 環境に問題があるということが分かったが、どこが悪いのかが分からない。
Win98SE で CF_UNICODETEXT を使うとどうなるのか試してみた。CF_UNICODETEXT に対応したアプリ同士ではデータのやりとりができるが、CF_TEXT にしか対応していないアプリとはできない。Win9x で CF_UNICODETEXT をクリップボードにセットするときは、CF_TEXT も一緒にセットするようにすると互換性が高まるだろう。
Vista でデフォルトフォントが正しく取得されない件を少し調べてみた。現在の TClock Light では、GetStockObject(DEFAULT_GUI_FONT) を使って、デフォルトフォントを取得している。これを使うと、Vista ではメイリオではなく MS UI Gothic が取得されてしまう。SystemParametersInfo(SPI_GETNONCLIENTMETRICS, 〜) で取得すればよいようだ。
TClock Light には、Vista でメイリオを使うと、文字がぼやけてしまうバグが残っているが、これが修正できれば、SystemParametersInfo() を使うように変更するか。
久しぶりに diswin を改造。「売り地。: diswin 0.19改」というのを見つけたので、自分のパッチにマージしようと思い、作業中。
XML::RSS を今まで使っていた 1.04 から 1.43 に変更したところ、問題発生。ハングアップの日々に、RSS を付けるために XML::RSS を使ったスクリプトを利用しているのだが、生成された RSS を見ると、日本語が全て文字参照を使って表現されている。日本語を文字参照ではなく通常の文字として出力する方法を少し調べてみたが、分からなかった。結局暫定対策として、文字参照を通常の文字に変換してからファイルに書き出すようにスクリプトを修正変更した。
何だか Windows 7 のベータ版の評判がかなり良いようで、ちょっと気になっている。まだダウンロードしていない。
"Writing Secure Code for Windows Vista" が無料でダウンロードできるとのこと。とりあえずダウンロードだけしておいたが、まだ全く読んでいない。
iTunes を 8.0 に更新して、iPod nano を試してみた。専用ソフトを使わないと曲を転送できないのはやはり面倒だ。1.2倍速再生などの特殊再生機能がないのもつまらない。単曲リピートと全曲リピートを簡単に切り替えられないのもだめ。
久しぶりに、smmp をいじってみた。ようやく、プレイリストの順番を編集できるようになった。自分がよく使う機能はこれでほぼ実装が終わったと考えている。そろそろ正式版への格上げを考えるか。
先月の spam メールの集計結果。着信拒否にならなかった spam が少なくとも 638通。そのうち、@nifty の迷惑メールフォルダーでも Spam Mail Killer でも spam として認識できなかったものはなし。誤削除が 1通。