web-dev-qa-db-ja.com

Windows 10で「dir」の発行にDNSが明らかに関与しているのはなぜですか?

複雑な理由により、cmd.exeの同一のコピーを作成し、名前をcmd-2.exeに変更することを余儀なくされました。これをタスクバーのショートカットとして配置し、異なるタスクバーグループに「グループ化」します。

時々これを忘れて、新しいcmd.exeを開くには、そのタスクバーアイコンを中クリックして新しいcmd.exeを開きます。次にdirなどのコマンドを入力すると、次のようなナンセンスが大量に出力されます。DNS bad keyは、誤ってcmd-2.exeを使用した場合にのみ発生します。 「cmd.exe」なので、「実用的な」問題ではありません。

しかし、なぜそのメッセージがまったく出力されないのでしょうか。なんらかのDNSルックアップなどに失敗しているように見えますか?ローカルコンピューター上のファイルを一覧表示するdirの発行にDNSがまったく関係しているのはなぜですか?私はネットワークを設定しておらず、クラウドドライブもありません。 (どうやら)dirを発行したときにDNSクエリが行われているのは恐ろしいです。

たぶんDNS bad keyは、ドメインネームシステムとはまったく関係のないものを指しますか?その文脈で「悪いキー」が何であるかさえ知りません。

97
Khalid

2番目のcmd.exeは、ローカライズされた文字列の検索とその後の読み込みに失敗し、cmd.exe.muiサテライトリソースライブラリからローカライズされた文字列を読み込みます。

これは10.0.18362.1(160101.0800)から取得した、実際に言っていることです。

  • 0x235F:「ドライブ%1のボリュームは%2です」
  • 0x235B:「ボリュームシリアル番号は%1」
  • 0x2339: "%1"のディレクトリ

これは実際には、単純なdirコマンド出力の最初の3行です。

これは面白いです。デフォルトのシステムメッセージテーブルには、メッセージ番号0x235Fおよび0x235Bのエントリはありません。したがって、最初の2つの出力では、@ harrymcのコンソールのスクリーンショットに示すように、その不可解なメッセージが表示されます。

しかし、0x2339の場合、デフォルトのシステムメッセージテーブルにエントリがあり、KernelBase.dll.muiに物理的に格納されて、「DNS bad key」というテキストをポイントしています。

screenshot taken from ResHacker

コマンドプロセッサのリソースの "Directory of%1"行の番号を共有するのはたまたまです。cmd.exeの開発者が予期しないフォールバックです。したがって、DNS参照は単なる偶然であり、何でもかまいません。

適切なメッセージには可変引数(ディレクトリ名)が含まれていますが、DNSメッセージには含まれていません。そのため、それ以降は何も出力されなくなります。単に終了するだけかもしれません。

209
dlatikay

私は問題を再現することができました:

enter image description here

(私はメッセージがあまり有益ではないことに同意します。)

問題は、Vista以降、すべてのテキストメッセージが個別のファイルにコンパイルされるため、Windowsが新しいCMD名でメッセージファイルを検索し、それを見つけられないことです。

cmd.execmd-2.exeにコピーするだけでは不十分です。また、フォルダ%WinDir%\System32\en-US(または言語)にファイルcmd.exe.muicmd-2.exe.muiにコピーする必要があります。そうしないと、cmd-2.exeがメッセージ。

注:ここでの「DNS」は、インターネット ドメインネームシステム を指すものではありません。これは単なる偶然です。

112
harrymc