【问题标题】:What is the internal structure of a Windows shortcut?Windows 快捷方式的内部结构是什么?
【发布时间】:2015-06-03 20:21:01
【问题描述】:

一台计算机中的 3 个 HDD:2 个 Windows XP,1 个 Windows 7,依次从每个计算机加载操作系统。

我发现在第一个 XP 中创建的某些工作快捷方式(不是全部)在第二个 XP 和 Windows 7 中不起作用(不可用于查看快捷方式的对象)。

为了了解它为什么不起作用,我在 Windows 7 中创建了相同的快捷方式,并在十六进制编辑器中打开这些快捷方式的两个文件。

我发现它的结构不同,但我不知道如何比较它。

Windows 快捷方式的内部结构是什么?

一些有用的快捷方式内容块的开始和结束字节是什么?

【问题讨论】:

  • 我认为这里不适合提出此类问题。你是什​​么意思顺序加载操作系统?
  • @Skaros Ilias - 这意味着我启动其中一个,然后关闭,然后启动下一个操作系统,然后关闭,然后启动第三个操作系统,并且在每个操作系统中都可以访问所有 3 个硬盘,问题快捷方式可在其他操作系统中访问

标签: windows hex structure shortcut


【解决方案1】:

快捷方式(.lnk)文件格式信息可以在[MS.Docs]: [MS-SHLLINK]: Shell Link (.LNK) Binary File Format找到。

但是,为了避免您阅读整个 .pdf,确定存储在快捷方式中的一件事(可以通过使用十六进制查看器“查看”快捷方式来检查)是它引用的(完整)目标路径(!!!important!!! 在创建时):所以它是 "DriveLetter:\the_full_path" .

为了消除混淆,我建议使用在同一驱动器上具有目标的快捷方式。

切换HDD时,DriveLetter(又名“C:”)指向不同的东西:

  • 假设您在其中一个上创建了一个快捷方式:"C:\shortcut.lnk""C:"DriveLetter strong> 分配给 Win 启动的 HDD:我们称之为 HDD1
    快捷方式指向另一个HDD(和分区)上的目标文件:我们称之为HDD2(例如"E:\target.txt em>)
  • 当您切换 HDD(使 HDD2 成为主启动盘)时,DriveLetter 也会发生变化,所以现在:

    • HDD2 将是 "C:"
    • HDD1 将是 "D:"


    在引入 HDD3 等时,事情变得更加复杂。

作为对我们问题的回答:.lnk 文件不起作用,因为它们的目标不再存在。

【讨论】:

  • 非常感谢您的出色回答,我将阅读此文档,我只能补充一些有问题的快捷方式在网络资源上并且它们是可用的
  • 嗯,网络资源如何可用(以远程安装驱动器或简单的文件共享​​>的形式)?这很重要,并且每个 Win 安装(在 3 个 HDD 中的每一个上)的网络自定义。如果我理解正确,第一个 XP 的快捷方式就是问题所在,你应该在哪里寻找(在阅读整个 PDF 之前)。
  • 文件共享,域中的所有计算机(如果从某些操作系统加载,计算机是域计算机),当我在十六进制编辑器中从 XP 打开有问题的快捷方式时,我看到路径以两个斜杠 \\ (例如\\some_domain\some_folder)。是的,第一个 XP 的快捷方式问题(我带来的第二个 XP 不是在一般 XP 中而是在当前版本中显示该问题)。最初的任务是将数据从 XP 迁移到 w7。再次感谢,我会尝试分析。
  • 好的,所以快捷方式中的文件路径引用了一个简单的 文件共享​​>(正如我在上一条评论中所问的那样)(至少在 XP 上)。这完全没问题(我创建了一个从 'C:\some_path` 到 D:\some_other_path 的快捷方式)。 \\servername\sharename\file (i might have slipped some chars) 用于引用同一网络中的另一台机器,具有(其中一个)共享文件夹.....
  • 我可以问你吗?我阅读了有关 MS-SHLLINK 的信息,它说在 SHELL_LINK_HEADER 中 4 个字节后跟随“LinkCLSID(16 个字节):类标识符(CLSID)。这个值必须是 00021401-0000-0000-C000-000000000046。”但是在 Windows 7 上,我在十六进制编辑器中打开了一些工作快捷方式,并在其中发现了所有值“01 14 02 00 00 00 00 00 C0 00 00 00 00 00 00 46”,那么这个值的前 4 个字节存在差异.怎么理解?我检查了注册表:HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{00021401-0000-0000-C000-000000000046}\ProgID @ 真的是 lnkfile
猜你喜欢
  • 1970-01-01
  • 2014-11-06
  • 2017-10-27
  • 1970-01-01
  • 2021-08-18
  • 2013-05-12
  • 1970-01-01
  • 2017-03-03
  • 2020-08-17
相关资源
最近更新 更多