Поток автозаполнения
Относится к: Outlook 2013 | Outlook 2016
Необходимо понимать не только то, как Microsoft Outlook взаимодействует с потоком автозаполнения, но и двоичный формат потока автозаполнения.
Поток автозаполнения — это набор строк свойств получателя, который сохраняется в виде двоичного потока вместе с некоторыми метаданными, которые используются только Microsoft Outlook 2013, Microsoft Outlook 2010, Microsoft Office Outlook 2007 и Microsoft Outlook 2003. Метаданные относятся к взаимодействиям Outlook с потоком автозаполнения, поэтому третьим сторонам необходимо сохранять содержимое каждого блока метаданных при сохранении измененного потока автозаполнения. Иными словами, третьим сторонам следует изменить только часть с набором строк двоичного формата и сохранить изначальное содержимое блока метаданных для потока автозаполнения.
Визуализация потока
Высокоуровневая структура потока автозаполнения выглядит следующим образом:
метаданные (4 байта);
основной номер версии (4 байта);
дополнительный номер версии (4 байта);
количество строк n (4 байта);
количество свойств p в первой строке (4 байта);
тег свойства 1 (4 байта);
зарезервированные данные свойства 1 (4 байта);
объединение значений для свойства 1 (8 байтов);
данные значения свойства 1 (байты переменной или 0);
… свойства (от свойства 2 до свойства P-1);
тег свойства p (4 байта);
зарезервированные данные свойства p (4 байта);
объединение значений для свойства p (8 байтов);
данные значения свойства p (байты переменной или 0);
количество свойств q в строке второй (4 байта);
… свойства строки второй;
… строки (от строки 3 до строки n-1);
количество свойств r в строке n (4 байта);
… свойства строки n;
количество байтов дополнительных сведений EI (4 байта);
дополнительные сведения (байты EI);
метаданные (8 байтов).
Пример двоичной структуры см. в разделе "Binary Example" (Пример двоичной структуры) документа Outlook 2003/2007 NK2 File Format and Developer Guidelines (Рекомендации разработчикам и сведения о формате NK2 файлов Outlook 2003/2007).
Высокоуровневая структура
В целом структура потока автозаполнения выглядит указанным ниже образом.
Данные значения | Количество байтов |
---|---|
Метаданные |
4 |
Основной номер версии |
4 |
Дополнительный номер версии |
4 |
Набор строк |
Переменная |
Количество байтов дополнительных сведений EI |
4 |
Дополнительные сведения |
EI |
Метаданные |
8 |
Если при чтении потока обнаружено, что основной номер версии отличается от 12, то этот поток не следует читать или же записывать. Текущий дополнительный номер версии потока автозаполнения — 0, то есть количество байтов дополнительной информации равно 0. Если дополнительный номер версии отличается от 0, то будет присутствовать дополнительная информация, которую необходимо прочесть во время чтения потока и сохранить при записывании потока. Кроме того, при записывании потока необходимо будет сохранить дополнительный номер версии. Если не сохранить ни одно из этих значений, данные в записавших дополнительную информацию экземплярах Outlook будут утеряны.
Примечание.
Приложения не должны добавлять пользовательские данные в поле дополнительной информации и менять дополнительный номер версии, так как эта функциональность предназначена для поддержки расширений формата для Outlook, а не произвольных сторонних расширений.
Структура набора строк
Структура набора строк выглядит указанным ниже образом.
Данные значения | Количество байтов |
---|---|
Количество строк |
4 |
Строки |
Переменная |
Количество строк определяет, сколько строк попадает в следующую часть последовательности двоичного потока.
Структура строки
Каждая строка имеет указанный ниже формат.
Данные значения | Количество байтов |
---|---|
Количество свойств |
4 |
Свойства |
Переменная |
Количество свойств определяет, сколько свойств попадает в следующую часть последовательности двоичного потока.
Структура свойства
Каждое свойство имеет указанный ниже формат.
Данные значения | Количество байтов |
---|---|
Тег свойства |
4 |
Зарезервированные данные |
4 |
Объединение значений свойства |
|
Данные значения |
0 или переменная (в зависимости от тега свойства) |
Интерпретация значения свойства
Объединение значений свойства и данные значения следует интерпретировать с учетом тега свойства в первых 4 байтах блока свойства. У этого тега свойства такой же формат, как и у тега свойства в MAPI. Биты от 0 до 15 тега свойства соответствуют типу свойства. Биты от 16 до 31 соответствуют идентификатору свойства. Тип свойства определяет, как следует читать остальные данные свойства.
Статическое значение
Некоторые свойства не имеют данных значения, у них есть только данные объединения. Ниже показано, как для типов свойств, которые следуют из тега свойства, должны интерпретироваться 8-байтовые данные объединения свойств.
Тип свойства | Интерпретация объединения свойств |
---|---|
PT_I2 |
short int |
PT_LONG |
long |
PT_ERROR |
long |
PT_R4 |
float |
PT_DOUBLE |
double |
PT_BOOLEAN |
short int |
PT_SYSTIME |
FILETIME |
PT_I8 |
LARGE_INTEGER |
Динамические значения
Другие свойства содержат данные в блоке данных значения после первых 16 байтов, включающие тег свойства, зарезервированные данные и объединение значений свойства. В отличие от статических значений, данные, которые хранятся в 8-байтовом объединении значений свойства иррелевантны при прочтении. Обеспечьте заполнение 8 байтов данными при записывании. Содержимое этих 8 байтов не имеет значения. В случае динамических значений тип тега свойства определяет, как интерпретировать данные значения.
PT_STRING8
Данные значения | Количество байтов |
---|---|
Количество байтов n |
4 |
Байты, интерпретируемые как строка ANSI (включает знак завершения NULL) |
n |
PT_CLSID
Данные значения | Количество байтов |
---|---|
Байты, интерпретируемые как GUID |
16 |
PT_BINARY
Данные значения | Количество байтов |
---|---|
Количество байтов n |
4 |
Байты, интерпретируемые как массив байтов |
n |
PT_MV_BINARY
Данные значения | Количество байтов |
---|---|
Количество двоичных массивов X |
4 |
Последовательность байтов, которая содержит двоичные массивы X. Каждый массив следует интерпретировать точно так же, как и последовательность байтов PT_BINARY. | Переменная |
PT_MV_STRING8 (Outlook 2007, Outlook 2010 и Outlook 2013)
Данные значения | Количество байтов |
---|---|
Количество строк ANSI X |
4 |
Последовательность байтов, которая содержит строки ANSI X. Каждую строку нужно интерпретировать точно так же, как и последовательность байтов PT_STRING8. | Переменная |
PT_MV_UNICODE (Outlook 2007, Outlook 2010, Outlook 2013)
Данные значения | Количество байтов |
---|---|
Количество строк Юникода X |
4 |
Последовательность байтов, которая содержит строки Юникода X. Каждую строку нужно интерпретировать точно так же, как и последовательность байтов PT_UNICODE. | Переменная |
Значительные свойства
Как уже было сказано в этой статье, двоичные блоки, представляющие свойства, имеют теги свойства, которые соответствуют свойствам получателей из адресной книги. Описание тегов, которые не указаны здесь, вы можете найти в статье https://msdn.microsoft.com/library/cc433490(EXCHG.80).aspx.
Имя свойства | Тег свойства | Описание (дополнительные сведения см. на сайте MSDN) |
---|---|---|
PR_NICK_NAME_W (не передается получателям, относится только к потоку автозаполнения) |
0x6001001f |
Это свойство должно быть первым в каждой строке получателей. Функционально является идентификатором ключа строки получателей. |
PR_ENTRYID |
0x0FFF0102 |
Идентификатор записи адресной книги для получателя. |
PR_DISPLAY_NAME_W |
0x3001001F |
Отображаемое имя получателя. |
PR_EMAIL_ADDRESS_W |
0x3003001F |
Адрес электронной почты получателя (например johndoe@contoso.com , или /o=Contoso/OU=Foo/cn=Recipients/cn=johndoe) |
PR_ADDRTYPE_W |
0x3002001F |
Тип адреса получателя (например, SMTP или EX). |
PR_SEARCH_KEY |
0x300B0102 |
Ключ поиска MAPI получателя. |
PR_SMTP_ADDRESS_W |
0x39FE001f |
SMTP-адрес получателя. |
PR_DROPDOWN_DISPLAY_NAME_W (не передается получателям, относится только к потоку автозаполнения) |
0X6003001f |
Отображаемая строка, которая появляется в списке автозаполнения. |
PR_NICK_NAME_WEIGHT (не передается получателям, относится только к потоку автозаполнения) |
0x60040003 |
Вес этой записи автозаполнения. Вес позволяет определить порядок записей автозаполнения при сопоставлении со списком автозаполнения. Записи с большим весом будут отображаться перед записями с меньшим весом. Готовый список автозаполнения сортируется согласно этому свойству. Вес уменьшается с течением времени и увеличивается, когда пользователь отправляет сообщение соответствующему получателю. Дополнительные сведения об этом свойстве см. далее в статье. |
PR_NICK_NAME_WEIGHT
Набор строк в потоке автозаполнения сортируется в порядке убывания согласно свойству PR_NICK_NAME_WEIGHT. Эта характеристика сортировки всегда должна сохраняться в потоке автозаполнения. Изменения в весе строки должны обеспечивать соответствие ее позиции порядку сортировки в готовом наборе сток. Возможные дополнительные элементы должны вноситься в наборы строк согласно порядку сортировки.
Минимальное значение веса — 0x1, а максимальное значение — LONG_MAX. Любые другие значения веса считаются недопустимыми.
Когда Outlook 2007 сопоставляет получателя или отправляет ему сообщение, вес этого получателя возрастает на 0x2000.