为什么 DNS 显然参与在 Windows 10 上发布“dir”?

为什么 DNS 显然参与在 Windows 10 上发布“dir”?

由于复杂的原因,我不得不制作一个相同的副本cmd.exe并将其重命名为cmd-2.exe,我将其作为快捷方式放在任务栏上,以便将它们“分组”到不同的任务栏组中。

有时,我会忘记这一点,为了打开一个新的,cmd.exe我鼠标中键单击任务栏图标以打开一个新的cmd.exe。然后我输入诸如这样的命令dir,它会吐出一堆无意义的内容,包括:DNS bad key,这只会在我意外使用时发生cmd-2.exe,而不是在我打开“真正的”时发生cmd.exe,所以这不是一个“实际”问题。

但是,我很奇怪为什么这条消息会被打印出来。它显然无法进行某种 DNS 查找吗?为什么 DNS 会参与发布以列出dir我本地计算机上的文件?我没有设置网络,没有云驱动器,什么都没有。当我发布时,(显然)有 DNS 查询,这让我很害怕dir

也许DNS bad key指的是与域名系统完全无关的东西?我甚至不知道在这种情况下“坏密钥”是什么意思。

答案1

第二个 cmd.exe 无法从 cmd.exe.mui 附属资源库中找到并随后加载本地化字符串。

以下是它真正想要表达的意思,取自 10.0.18362.1 (160101.0800):

  • 0x235F:“驱动器 %1 中的卷是 %2”
  • 0x235B:“卷序列号为 %1”
  • 0x2339:“%1 的目录”

这实际上是一个普通命令输出的前三行dir

这很有趣。默认系统消息表中没有消息编号 0x235F 和 0x235B 的条目。因此,对于前两个输出,您会得到如 @harrymc 的控制台屏幕截图中所示的神秘消息。

但是对于 0x2339,默认系统消息表中有一个条目,物理存储在 KernelBase.dll.mui 中,指向文本“DNS bad key”:

截图来自 ResHacker

它恰好共享命令处理器资源的“%1 目录”行的编号:cmd.exe 的开发人员没有预料到的后备方案。因此 DNS 引用只是巧合,它可能是任何东西。

请注意,正确的消息包含一个变量参数(目录名称),而 DNS 消息不包含。我猜这就是为什么之后没有更多输出的原因 - 它可能只是终止了。

答案2

我已成功复制该问题:

在此处输入图片描述

(我同意这些信息没有什么参考价值。)

问题是,从 Vista 开始,所有文本消息都被编译成一个单独的文件,因此 Windows 会搜索具有新 CMD 名称的消息文件,但无法找到它。

cmd.exe仅仅复制到是不够的cmd-2.exe。您还需要将文件复制到文件夹(%WinDir%\System32\en-US 或您的语言)中,否则您将在 需要发出消息时随时收到这些疯狂的消息。cmd.exe.muicmd-2.exe.muicmd-2.exe

注意:这里的“DNS”不是指互联网 域名系统。这只是一个巧合。

相关内容