题
我正在尝试计算 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值。您需要考虑的两件事:
- 确保您将“x-mailer”的 CRC 计算为 UNICODE 字符串。ASCII将为您带来不同的结果。
- 确保您使用的是MS-OXRTFCP节3.1.3.2和3.1.4指定的算法,包括使用预定的查找表和相应的算法pseudocode。
如果您遵循这些内容,您将获得适当的结果。
让我知道您是否能够工作。
问候,汤姆·杰博(Tom Jebo)高级支持升级工程师Microsoft DS协议团队
不隶属于 StackOverflow