Windows で多言語ドメイン名を扱えるようにするためには、 Windows 上のクライアントアプリケーションにおいて、 解決しようとする名前のエンコーディングを、 DNS サーバが受付ける形式のものに変換する必要があります。 これは、Windows 上のアプリケーションが、 きちんと多言語ドメイン名を扱えるようになっていなければならない、 ということであり、本来はそれぞれのプログラムの作成者が行なうべきことです。
しかし、標準が決まっていない現状では、 プログラム作成者にこのような対応を期待するのは無理なので、 既存のアプリケーションを多言語ドメイン名対応させるための トリックが必要になります。 mDNkitに含まれるdnsproxyサーバはそのための一つの方法です。 ここでは、もう一つの方法、mDN Wrapper を提示します。
Windows において、多くの場合、ドメイン名解決の要求はWINSOCK DLL に渡されます。そこで、WINSOCK DLL を多言語ドメイン名対応のものに置き 換えてやれば、既存のプログラムからでも多言語ドメイン名を使うことがで きるようになります。
mDN Wrapper をインストールするには"setup.exe" を実行します。 セットアッププログラムは次のような処理を行います。
PerProg\<progname>\Where | REG_DWORD | 変換位置 |
PerProg\<progname>\Encoding | REG_SZ | エンコーディング名 |
エンコーディング名は通常コンフィギュレーションプログラムによって設定されます。 変換位置は、標準インストールでは不要です。 システムディレクトリへのインストールを行なった場合には、 レジストリエディタで環境に合わせて設定する必要があります。
アンインストールするには、コントロールパネルの「アプリケーションの追 加と削除」で、「mDNS Wrapper」を選択して削除(「追加と削除」ボタン) します。
コンフィギュレーションプログラムは、 アプリケーションを特定して mDN Wrapper を適用したり、 適用を解除するためのツールです。
起動すると以下のような画面が表示されます。
リストボックスには、その時点で mDN Wrapper が適用されているプログラムが 表示されます。 最初に実行した場合には空になっています。
プログラムに mDN Wrapper を適用するには、"wrap"ボタンを押します。 "wrap"ボタンを押すと以下のようなダイアログが表示されます。
最初に、mDN Wrapper を適用したいプログラムの実行ファイル名を設定します。 直接入力するか、ブラウズボタンでファイルを探してください。
次にそのプログラムのローカルエンコーディングを指定します。 通常は「Default」 でかまいません。 プログラムが国際化エンコーディングに従っている場合にのみ 「UTF-8」 を指示します。
最後に「wrap」ボタンを押せば、そのプログラムに対して 指定されたエンコーディングで mDN Wrapper が適用されます。 適用されたプログラムは、最初のウィンドウのリストボックスに反映されます。
プログラムに対する mDN Wrapper の適用を解除するには、 リストボックスで解除するプログラムを選択して、 「unwrap」ボタンを押します。 以下の確認用のダイアログが表示されますので、 間違いがなければ「unwrap」ボタンを押してください。
mDN Wrapper の適用が解除されると、そのプログラムは最初のウィンドウの リストボックスからも削除されます。
ラッパーDLL は、元のWINSOCK のDLL のバージョンに強く依存します。 これは、非公開のエントリも含めて すべてのエントリを提供する必要があるためです。 このためWINSOCK DLL のバージョンが変わると、 mDN Wrapper が動作しなくなる可能性があります。
今回作成されたmDN Wrapper は、
で動作を確認しています。ただ、将来にわたって動作する保証はありません。
WinNT4.0 SP6a (WINSOCK 1.1 + 2.0) Win98 (WINSOCK 1.1 + 2.0) Win95 OSR2 (WINSOCK 1.1)
Windows では、DNS だけではなく、 WINSやLMHOSTS によってもドメイン名、ホスト名の解決が行なわれます。 mDN Wrapper を使った場合には、ドメイン名の変換が、 これらの方式へのディスパッチを行なう場所よりも上位層で行なわれるので、 これらのすべての方式について、 ドメイン名、ホスト名の変換が行なわれることになります。 このため、Windows が、WINSやLMHOSTS を使っている場合には、 予期しない問題が発生する可能性があります。 これについては、mDN Wrapper を使う場合には、 名前解決にDNS だけを使用することをお勧めします。
WINSOCK 2.0 の名前解決API
は、ドメイン名以外でも使用できる、 汎用の名前解決用のAPI として定義されています。 現時点では、これらはもっぱらドメイン名の解決で使用されていますが、 他の名前(例えばサービス名)の解決にも使用できることになっています。
WSALookupServiceBeginW WSALookupServiceNextW WSALookupServiceEnd
mDN Wrapper は、名前の対象の如何にかかわらず、 名前のエンコーディングを変換してしまうので、 これらのAPI が、ドメイン名以外の解決に使われている場合には、 問題を引き起こす可能性があります。
アプリケーションによっては、 ドメイン名の解決にこれらのAPI を使用しないものもあります。 例えば、'nslookup'は、これらのAPI を使用しないで、 直接DNS サーバと通信してしまいます。 このようなアプリケーションについては、 mDN Wrapper は役に立ちません。
アプリケーションによっては、標準のDLL サーチパスに従わないで、 特定のパスのDLL にバインドされているものがあります。 よく使われるプログラムの中では、Netscape Communicator がそうなっています。 このようなプログラムについては、 標準のインストール/コンフィギュレーションでは mDN Wrapper を適用することは できません。
このようなプログラムについて、どうしても mDN Wrapper を適用する必要があるなら、 システムディレクトリへのインストールを行なうことができます。 ただし、このインストールは大変危険で、 場合によってはシステムを再起動不能にしてしまう可能性もあります。
これらの制限事項が問題になる場合には、 代替手段として'dnsproxy'を使うこともできます。 これは、DNS サーバとのトランザクションを中継するので、 上で問題になったようなことを回避することができます。
ただし、'dnsproxy'は、ラッパーよりも複雑な設定が必要ですし、 また、呼び元のプログラムを特定することができませんので、 プログラム固有のローカルエンコーディングを取り扱うことはできません。 しかし、上記の制限事項が問題になるようなケースでは、 ラッパーの代わりに使用するといいかもしれません。