Вычисление идентификатора потока сообщений
Вопрос
Я пытаюсь вычислить имя потока для части именованного свойства файла MSG, в частности строки с именем properties.Тот самый Спецификация формата файла MSG говорит что идентификатор генерируется следующим образом:
Stream ID = 0x100m ((ID XOR (GUID index << 1 | 1)) MOD 0x1f
Где значением ID является CRC-32 для "идентификатора имени в Юникоде".Я также уверен, что 0x100m
это на самом деле 0x1000
.
Это каким - то образом отображает 'x-mailer'
Для 0x100f
когда индекс GUID равен 3.Значение для ID равно 0x894e50ff (поскольку оно хранится в другом месте), но как 'x-mailer'
преобразуется в это значение?
(Это свойства, хранящиеся в "__nameid_version1.0"
, частично внутри "__substg1.0_00040102"
поток).
Решение
Вот этот ответ от инженера Microsoft:
Привет, Люк,
Извините, что потребовалось так много времени, чтобы ответить вам на это.Я проверил вычисление CRC-32 , и оно действительно приводит к получению значения 0xff504e89 для строки 'x-mailer'.Две вещи, которые вам нужно учесть:
- убедитесь, что вы вычисляете CRC для 'x-mailer' как строку в ЮНИКОДЕ.ASCII даст вам другой результат.
- убедитесь, что вы используете алгоритм, указанный MS-OXRTFCP разделы 3.1.3.2 и 3.1.4, включая использование предварительно рассчитанной справочной таблицы и соответствующего алгоритма псевдокод.
Если вы будете следовать этим инструкциям, вы получите надлежащий результат.
Дайте мне знать, если вы сможете заставить это работать.
С уважением, Том Джебо, старший специалист службы поддержки Инженер по эскалации Microsoft DS Команда протокола