MSG流ID计算

时间:2009-08-12 07:29:33

标签: mapi msg

我正在尝试计算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"流中。)

1 个答案:

答案 0 :(得分:1)

以下是Microsoft工程师的answer

  

嗨卢克,

     

很抱歉花了这么长时间才回来   你这个。我验证了CRC-32   计算,它确实导致a   字符串的值为0xff504e89   'X-邮包'。你需要的两件事   考虑:

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

    如果你遵循这些,你就会得到   正确的结果。

         

    如果你能得到,请告诉我   这工作。

         

    此致,Tom Jebo高级支持   升级工程师Microsoft DS   协议小组