Libmapi: размер поля

распечатка рекуррентного события (81.80КиБ)

Вот чем я занимался сегодня большую часть рабочего дня: вручную декодировал события, на которых свалились тесты, побайтово. В отличие от машины, я способен распознавать данные по их внешнему виду, например, вижу границы nttimestamp или вижу где начались буквы. Машина без посторонней помощи это не умеет, а потратить времени на помощь ей можно очень много.

Вывод, кажется, такой: в документации от Microsoft поле ReminderSet имеет тип boolean и размер 8 бит, вот по данным кажется, что оно всё-таки должно иметь размер 32 бита. В таком случае, всё пока встаёт на место. Сейчас поправлю и буду ещё тесты гонять.

P.S. Пока тесты не падают. Значит размер поля ReminderSet в структуре ExceptionInfo действительно 32 бита (это структура внутри PidLidAppointmentRecur).

Читайте также

Libmapi: повторяющиеся встречи
Если вы когда-либо будете использовать libmapi, для чтения рекуррентных (повторяющихся) встреч, то знайте, что вызов get_RecurrencePattern в текущей (0.8.2) версии читает даже близко не всё, что нужно, а структура RecurrencePattern, которая возвращается этим вызовом, не дописана для большинства типов встреч. Так что, увы, придётся получать поле PidLidAppointmentRecur (не забудьте, что его ID нуждается в трансляции через mapi_nameid_GetIDsFromNames) и самостоятельно его парсить.
2009
Модели BitNet
Эксперементировал сегодня ночью с моделями BitNet. Это небольшие (1—2 миллиарда параметров) модели очень низкой битности — 1,58 бит.
2025

Комментарии 10

masterspammer.livejournal.com № 1
В формате Microsoft Word где-то были такие поля — в спецификации одного размера, в жизни — другого.

Есть также милые такие поля (кажется для указания размеров/отступов) — знаковые, но 12-ти битные; лежат два байта — слово, в них — 4095; а значит это — минус 1 (может и не 12, а все 14). Такое может «рости» из разрезания поля по битам на несколько (в doc этого ОЧЕНЬ много), однако выглядит в документации невнятно или вообще отсутствует.

P.S. Писал по «уплывшим» докам до официального открытия формата. Новые чуть лучше в плане общей причёсанности, но не в плане полноты — как нет было описания, что такое LVC, так и нет.

P.P.S. Распечатки это правильно!
Евгений Степанищев (bolknote.ru) автор № 2
Странность в том, что я смотрю в официальную документацию (формат MAPI — открытый).
masterspammer.livejournal.com № 3
Собственно ошибки были во внутренней документации — из неё потом сделали открытую. Я не проверял — исправили ли при итоговом приведении в привычный вид.

Оттуда же — видел ошибки в исходном коде — он формально был написан по документации (ещё до открытия), но не работал — то ли catdoc то ли antiword то ли openoffice. Проблема в том что это поле (не то, которое 12bit signed int, а то, которое занимало не столько байт, сколько сказано) могло то появиться, то не появиться — в зависимости от способа сохранения.
u1itka.livejournal.com № 7
Комментарий для Евгения Степанищева:

То-то никто не разобрал до сих пор.
На самом деле проблемы были с некоторыми упаковщиками.
u1itka.livejournal.com № 9
Комментарий для Евгения Степанищева:

Спецификация, это хорошо.
Но разобраться в ней было довольно сложно.
Особенно в рекурсивной структуре VS_VERSIONINFO.
Для чего и потребовались распечатки.