1

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

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

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

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

(这些是存储在 下的属性"__nameid_version1.0",部分在"__substg1.0_00040102"流中)。

4

1 回答 1

1

以下是微软工程师的回答

嗨,卢克,

抱歉,花了这么长时间才回复您。我验证了 CRC-32 计算,它确实导致字符串“x-mailer”的值为 0xff504e89。您需要考虑两件事:

  1. 确保您将 'x-mailer' 的 CRC 计算为 UNICODE 字符串。ASCII 会给你不同的结果。
  2. 确保您使用的是 MS-OXRTFCP 第 3.1.3.2 和 3.1.4 节指定的算法,包括使用预先计算的查找表和相应的算法伪代码。

如果您遵循这些,您将获得正确的结果。

让我知道你是否能够让这个工作。

此致 Tom Jebo 高级支持升级工程师 Microsoft DS 协议团队

于 2009-08-24T00:46:12.130 回答