我正在尝试计算MSG文件的命名属性部分的流名称,特别是字符串命名属性。生成ID的MSG file format specification says如下:
Stream ID = 0x100m ((ID XOR (GUID index << 1 | 1)) MOD 0x1f
其中ID值是“Unicode名称标识符”的CRC-32。我也相信0x100m
实际上是0x1000
。
当GUID索引为3时,这会以某种方式将'x-mailer'
映射到0x100f
.ID的值为0x894e50ff(因为它存储在另一个位置),但'x-mailer'
如何转换那个价值?
(这些属性存储在"__nameid_version1.0"
下,部分位于"__substg1.0_00040102"
流中。)
答案 0 :(得分:1)
以下是Microsoft工程师的answer:
嗨卢克,
很抱歉花了这么长时间才回来 你这个。我验证了CRC-32 计算,它确实导致a 字符串的值为0xff504e89 'X-邮包'。你需要的两件事 考虑:
- 确保您将'x-mailer'的CRC计算为UNICODE字符串。 ASCII会给你一个不同的 结果
- 确保使用MS-OXRTFCP指定的算法 第3.1.3.2和3.1.4节包括 使用预先计算的查找表 和相应的算法 伪代码。
醇>如果你遵循这些,你就会得到 正确的结果。
如果你能得到,请告诉我 这工作。
此致,Tom Jebo高级支持 升级工程师Microsoft DS 协议小组