我正在尝试计算 MSG 文件的命名属性部分的流名称,特别是字符串命名属性。这 MSG 文件格式规范 ID的生成方式如下:

Stream ID = 0x100m ((ID XOR (GUID index << 1 | 1)) MOD 0x1f

其中 ID 值是“Unicode 名称标识符”的 CRC-32。我也有信心 0x100m 实际上是 0x1000.

这以某种方式映射 'x-mailer'0x100f 当 GUID 索引为 3 时。ID 的值为 0x894e50ff(因为它存储在另一个位置),但是如何 'x-mailer' 转换为该值?

(这些是存储在 "__nameid_version1.0", ,部分在 "__substg1.0_00040102" 溪流)。

有帮助吗?

解决方案

这里是 回答 来自微软工程师:

嗨卢克,

抱歉,花了很长时间才能与您联系。我验证了CRC-32计算,并且实际上导致字符串“ X-Mailer”的0xff504E89值。您需要考虑的两件事:

  1. 确保您将“x-mailer”的 CRC 计算为 UNICODE 字符串。ASCII将为您带来不同的结果。
  2. 确保您使用的是MS-OXRTFCP节3.1.3.2和3.1.4指定的算法,包括使用预定的查找表和相应的算法pseudocode。

如果您遵循这些内容,您将获得适当的结果。

让我知道您是否能够工作。

问候,汤姆·杰博(Tom Jebo)高级支持升级工程师Microsoft DS协议团队

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top