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

Kha*_*lid 98 dns command-line dir cmd.exe windows-10

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

有时,我会忘记这一点,要打开一个新的cmd.exe我中间单击该任务栏图标以打开一个新的cmd.exe. 然后我输入一个命令,例如dir它会吐出一堆废话,包括: DNS bad key,这只会在我不小心使用时发生cmd-2.exe,而不是在我打开“真实”时发生cmd.exe,所以这不是一个“实际”问题。

但是,我想知道为什么要打印该消息。是否显然无法进行某种 DNS 查找或其他操作?为什么 DNS 完全涉及发布dir我本地计算机上的文件?我没有设置网络,没有云驱动器,什么都没有。令我害怕的是(显然)当我发出dir.

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

dla*_*kay 209

第二个 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 消息不包含。我想这就是为什么在那之后没有更多输出 - 它可能只是终止。

  • 阅读您如何深入了解这件事真是太酷了。我很惊讶这样一个神秘的事件可以如此容易地追踪。感谢您的伟大而彻底的回答! (6认同)

har*_*ymc 112

我设法复制了这个问题:

在此处输入图片说明

(我同意这些消息的信息量不大。)

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

复制cmd.execmd-2.exe. 您还需要将文件夹%WinDir%\System32\en-US (或您的语言)中的文件复制cmd.exe.muicmd-2.exe.mui,否则您将在cmd-2.exe 需要发布消息的任何时候收到这些疯狂的消息。

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

  • @ThorbjørnRavnAndersen 不是 CMD.exe,而是 Windows。CMD.exe 只是简单地向系统询问具有当前用户语言的指定 ID 的字符串资源。执行搜索和回退处理的是 Windows。 (6认同)
  • 我认为消息_确实_指的是通常意义上的 DNS。@dlatikay 的回答表明它本质上是从内核消息列表中随机挑选的,列表中附近的其他消息看起来很可能指的是域名系统。 (2认同)
  • 我想这取决于你所说的“适当”是什么意思。Windows 支持 DNSSEC(使用密钥)。这是一个标准,而不仅仅是微软的构造。当然,这些消息肯定指的是什么是猜测,当然也有点跑题了! (2认同)