Понимание структуры профилей — основа успешной диагностики

Профили интерфейсов прикладного программирования Messaging API (MAPI) являются основным механизмом настройки клиента Outlook. Профили извещают эту программу о том, какие услуги доступны для конечных пользователей, и о характеристиках данных услуг. Так, в профиле хранятся имена и пути к папке автономного хранилища (Offline Store, OST) и к папке персонального хранилища (Personal Store, PST). Иногда требуется внести те или иные изменения в содержимое профилей — в случаях, когда необходимо выяснить причины неполадок, или, что бывает чаще, в ходе реструктуризации систем, или при переводе пользователей на новые системы. Для решения этой задачи имеется множество инструментальных средств. Некоторые из них (такие, как profgen.exe и newprof.exe) разработаны специалистами Microsoft, другие — независимыми поставщиками. Но эти инструменты не всегда соответствуют конкретным запросам администраторов, поэтому не исключено, что придется засучить рукава и взять дело модификации профилей MAPI в свои руки. Перед тем как приступить к этой работе, следует ознакомиться со структурой профилей.

Структура профилей MAPI

Профили MAPI — не более чем наборы параметров системного реестра, и потому манипулировать ими можно с помощью множества различных методов. В данной статье я расскажу о том, как исследовать содержимое профилей с использованием редактора реестра regedit. Но перед тем как перейти к изложению материала, хочу ввести следующую предостерегающую формулу: редактор regedit + человек = мина замедленного действия. Прямое редактирование реестра — процедура опасная; при всякой возможности лучше стараться избегать таких операций. Если имеются документированные интерфейсы API, стоит пользоваться ими, поскольку они автоматически обновляют соответствующие разделы реестра. Ну, а уж если все-таки приходится вносить изменения вручную, необходимо заблаговременно делать резервную копию реестра. Я, например, всегда экспортирую тот раздел реестра, в который хочу внести изменения, и если что-то пойдет не так, у меня остается возможность вновь импортировать заготовленный файл .reg.

Экран 1. Размещение профилей в реестре

В системах Windows XP, Windows 2000 и Windows NT 4.0 профили записаны в разделе реестра HKEY_CURRENT_USERSoftwareMicrosoft Windows NTCurrentVersionWindows MessagingSubsystemProfiles, а в системах Windows ME, Windows98 и Windows 95 — в разделе HKEY_CURRENT_USERSoftwareMicrosoft WindowsMessaging SubsystemProfiles. Как показано на экране 1, в разделе Profiles имеются подразделы для каждого созданного администратором профиля MAPI (можно создавать столько профилей, сколько потребуется). Обратите внимание, что в качестве значения параметра DefaultProfile (типа REG_SZ) на правой панели указано имя текущего профиля, принимаемого по умолчанию (в данном случае это профиль Cached). Чтобы вручную изменить имя профиля, принимаемого по умолчанию, можно указать в качестве значения этого параметра одно из имен профилей, определенных в подразделе Profiles.

Экран 2. Глобально уникальные идентификаторы и значения служб

Опустившись еще на один уровень вниз, как показано на экране 2, вы можете увидеть подразделы профиля Cached и ассоциированные значения одного подраздела. Как мы видим на экране 2, имена подразделов представляют собой не более чем наборы цифр и букв. Профили определяются через службы, а каждая служба имеет один или несколько параметров, задающих ее конфигурацию. Чтобы конфигурация одной службы не изменяла конфигурацию другой, в качестве имени подраздела реестра, где описывается данная служба, используются глобально уникальные идентификаторы GUID (Globally Unique Identifier); отметим, что иногда в документации используется также термин section GUID.

Внутри профиля можно описывать множество различных служб, таких как параметры клиента Outlook, учетные записи электронной почты (скажем, POP, Exchange и IMAP), данные адресной книги, пути размещения хранилищ PST/OST, а также параметры, используемые в конкретных приложениях. Возможность манипулирования различными параметрами реестра обеспечивают многие приложения (включая программы от независимых поставщиков). Так, в результате обращения к модулю Mail из Control Panel для управления своими профилями или в результате обращения к клиенту Outlook с целью установления порядка просмотра записей адресной книги параметры служб в реестре будут обновлены.

Информацию о свойствах MAPI той или иной службы можно почерпнуть из имен параметров. Каждое свойство MAPI характеризуется типом данных (скажем, Binary, Unicode, ANSI) и идентификатором, а также буквенно-цифровыми значениями этих двух элементов из имени переменной, в которой хранятся данные свойства. Первые четыре символа имени определяют тип данных (наиболее часто встречающиеся типы приведены в таблице), а вторая группа из четырех символов определяет идентификатор элемента MAPI. Так, значение 001E6612 представляет собой строковую переменную (001E) для отличительного имени (Distinguished Name, DN) свойства Exchange Home Server (6612).

Эти имена параметров реестра имеют соответствующие тэги свойств MAPI, в значениях которых идентификатор свойства MAPI и тип данных следуют в обратном порядке (первым указывается идентификатор MAPI) и представлены в шестнадцатеричном формате. Например, свойство Exchange Home Server имеет тэг PR_PROFILE_HOME_SERVER_DN с шестнадцатеричным значением &H6612001E. Тэги свойств MAPI задокументированы в различных источниках, в том числе в Microsoft Developer Network (MSDN). Список тэгов свойств, применяемых в системе Exchange, опубликован по адресу http://msdn.microsoft.com/library/default.asp?url=/library/enus/cdo/html/_olemsg_microsoft_ exchange_property_tags.asp.

Глобально уникальные идентификаторы служб

Некоторые службы имеют хорошо известные статические идентификаторы GUID, например, в службе Exchange Server Details всегда используется GUID 13dbb0c8aa05101a9bb000aa 002fc45a. Тот, кто знаком с этими хорошо известными идентификаторами GUID, может с легкостью найти в профиле MAPI соответствующие службы их свойства. К примеру, чтобы отыскать имя Exchange Home Server для каждого сформированного профиля, нужно исследовать раздел Profiles и каждом подразделе искать значение 001E6602 переменной 13dbb0c8aa05101 a9bb000aa002fc45a. Служба Outlook Client Settings тоже имеет хорошо известный идентификатор GUID — 0a0d020000000000c000000000000046.

Подраздел Outlook Client Settings используется главным образом в клиентах, выпущенных до появления версии Outlook 2000. В более поздних версиях клиента Outlook почти для всех клиентских настроек используется подраздел HKEY_CURRENT_USERSoftwareMicrosoftOffice <9.0|10.0|11.0>OutlookPreferences; такое решение принято для того, чтобы настройки могли присутствовать во всех профилях MAPI.

Идентификаторы GUID других служб генерируются динамически, так что работать с ними сложнее. Хорошей иллюстрацией к сказанному может служить процедура создания файла PST, в результате которой внутри профиля, к которому принадлежит данная персональная папка-хранилище, генерируется уникальный идентификатор службы GUID. Возникает вопрос: как же все-таки узнать, к какой службе относится тот или иной идентификатор GUID?

Большинство служб, хотя и не все, имеют имя, которое содержится в свойстве 001f3D09 (Unicode) или, что встречается не так часто, в свойстве 001e3D09 (ANSI). Имя службы для файлов PST — MSPST PS; следовательно, в поле Data переменной 001f3D09 будет значиться MSPST PS. Можно также взглянуть на свойство 001f6700, содержащее маршрут к файлу PST. Тэг свойства PR_PST_PATH имеет выраженное в шестнадцатеричном формате значение &H6700001F.

К числу хорошо известных относится еще один GUID — 9375CFF 0413111d3B88A00104B2A6676. В нем содержатся подробные описания всех учетных записей, используемых в данном профиле. В этом разделе для каждой учетной записи выделяется особый подраздел. Так, здесь обычно имеется подраздел для учетной записи адресной книги Outlook (Outlook Address Book, OAB), для учетной записи Exchange, подразделы для учетных записей всех файлов PST, внесенных в данный профиль, и для всех почтовых учетных записей POP3/IMAP, которые были сформированы внутри профиля.

Добавление второго почтового ящика

А теперь выполним обычную для программы Outlook операцию — добавим к профилю второй почтовый ящик. Посмотрим, как эта операция отразится на имеющих отношение к данному профилю записях в реестре. Система Exchange предусматривает возможность использования нескольких провайдеров для хранилищ сообщений; по умолчанию имеется два провайдера — один для хранилища почтового ящика пользователя и второй — для хранилища общедоступных папок.

Экран 3. Провайдеры хранилищ для сообщений профиля Cached

Свойство MAPI для списка провайдеров хранилищ — это PR_STORE_PROVIDERS; шестнадцатеричное значение этого свойства — &H3D000102. Таким образом, мы можем обнаружить хранилища сообщений, используемые данным профилем, исследовав значение 01023D00 переменной 13dbb0c8aa05101a9bb000aa002fc45a (идентификатор GUID службы Exchange Server Details). На экране 3 стрелками показано, что данные этого параметра относятся к глобально уникальным идентификаторам двух других служб, которые определяют провайдеров индивидуального хранилища для профиля Cached. На экране 4 показано, как значение 01023d00 меняется в результате добавления к профилю второго почтового ящика. Обратите внимание, что теперь у меня имеется третий провайдер хранилища, на него указывает идентификатор GUID третьей службы. Как показано на экране 5, детали GUID этой службы свидетельствуют о том, что идентификатор имеет отношение к почтовому ящику.

Экран 4. При добавлении почтового ящика добавляется GUID службы
Экран 5. Подробное описание нового, глобально уникального идентификатора службы

Как узнать, что означают цифры

Выяснение того, какие идентификаторы и параметры каких служб контролируют те или иные операции конечных пользователей, — задача непростая; я расскажу о двух приемах.

Во-первых, следует использовать редактор regedit и экспортировать соответствующий раздел реестра до того, как в него будут внесены некоторые изменения, и после. Сопоставление двух выходных файлов поможет определить, какие из значений реестра были изменены.

Во-вторых, можно задействовать утилиту Regmon, которая доступна в Internet по адресу http://www.sysinternals.com. Эта утилита позволяет отслеживать и фиксировать в реальном времени изменения в реестре. Поясню на примере, что дает использование Regmon. Недавно я решил написать сценарий, который позволял бы изменять применяемые по умолчанию почтовые учетные записи пользователей. Поскольку я не имел представления о том, какие именно параметры реестра управляют этим свойством, я запустил утилиту Regmon и начал экспериментировать с пользовательским интерфейсом Outlook, добавляя почтовые учетные записи к своему профилю и изменяя применяемую по умолчанию запись. Утилита Regmon указала на уже упомянутый мною выше известный идентификатор GUID службы со списком используемых учетных записей: 9375CFF0413111 d3B88A00104B2A6676. Кроме того, программа Regmon помогла мне установить идентификатор {ED475418 B0D6-11D2-8C3B-00104B2A6676}, который все время изменялся в ходе экспериментов. В итоге я пришел к выводу, что связанные с этим идентификатором данные представляли собой список подразделов, по одному на каждую почтовую учетную запись, составленный в том порядке, в каком эти почтовые учетные записи были перечислены в клиенте Outlook. Располагая такой информацией, я мог написать сценарий, изменяющий группу применяемых по умолчанию пользовательских учетных записей.

Применение файлов .prf

В Outlook можно манипулировать параметром /importprf, который позволяет создавать профили на основе определений, содержащихся в текстовых файлах профилей Outlook (файлах .prf). Синтаксис использования параметра /importprf таков:

outlook.exe /importprf

Помимо прочего, файлы .prf описывают идентификаторы GUID многих служб с ассоциированными параметрами и значениями, которые в результате находят свое отражение в реестре. В документе «White paper: Configuring Outlook Profiles by Using a PRF File» содержатся инструкции по созданию файлов .prf, а также дополнительные разъяснения по поводу значений странных цифр, содержащихся в реестре. Эту «белую книгу» можно загрузить на странице Microsoft Office 2003 Resource Kit Downloads по адресу http://www.microsoft.com/office/orkarchive/2003ddl.htm. Кроме того, можно генерировать файлы .prf с помощью входящего в комплект Office Resource Kit мастера Custom Installation Wizard. Комплект можно получить на той же Web-странице.

Таким образом, администраторам полезно знать структуру профилей MAPI, поскольку это может помочь устранить причину той или иной неполадки и разработать новаторское решения проблем миграции, которые на первый взгляд казались неразрешимыми.

Кевин Лаахс - Главный консультант в подразделении Services Advanced Technology Group компании HP. kevin.laahs@hp.com