Поставщик услуг MAPI не работает в Outlook 2013+, но работает, если Outlook открывается с помощью сценария

У поставщика услуг MAPI, который предоставляет настраиваемый вид папок в Outlook, отлично работает в Outlook 2010. В Outlook 2013 и более поздних версиях не удается открыть папки с ошибкой Не удается развернуть папку. Описание этой ошибки отсутствует.

enter image description here

Однако, если Outlook 2013+ запускается с помощью сценария PowerShell, как показано ниже, папки работают:

 Add-type -Assembly "Microsoft.Office.Interop.Outlook" | out-null
 $olFolders = "Microsoft.Office.Interop.Outlook.olDefaultFolders" -as [type] 
 $outlook = New-Object -ComObject Outlook.Application
 $namespace = $outlook.GetNameSpace("MAPI")
 $folder = $namespace.GetDefaultFolder($olFolders::olFolderInbox)
 $folder.Display()

enter image description here

В настоящее время я занимаюсь анализом различий с помощью Process Monitor, Rohitab API Monitor и Windbg, когда Outlook открывается этими способами.

Однако мне интересно знать, знает ли кто-нибудь, что отличается между процессом запуска Outlook при запуске с помощью ярлыка и автоматизацией, которая может повлиять на правильную работу поставщика услуг MAPI.

0
задан 30 December 2019 в 02:58
3 ответа
  • DLL-характеристики Outlook.exe изменились между Outlook 2010 и Outlook 2013. Outlook 2010 имеет значение 8040, что означает IMAGE_DLLCHARACTERISTICS_ Свойства DYNAMIC_BASE + IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE установлены. Однако Outlook 2013 имеет значение 8160, которое включает те же свойства, что и Outlook 2010, но дополнительно устанавливает IMAGE_DLLCHARACTERISTICS_HIGH_ENTROPY_VA+IMAGE_DLLCHARACTERISTICS_ Свойства NX_COMPAT.

  • Обычно при запуске 64-разрядной версии Outlook 2013 все библиотеки DLL загружаются со случайной базой изображений. Однако в 64-разрядной версии Outlook 2010 многие библиотеки DLL загружаются с базой изображения по умолчанию 0x180000000. При запуске 64-разрядной версии Outlook 2013 через автоматизацию COM многие из этих библиотек DLL загружаются с базой изображения 0x180000000, как Outlook 2010. Однако при запуске с помощью ярлыка они каждый раз загружаются с другой базой изображения. Это можно подтвердить, подключив WinDbg к Outlook.exe и с помощью команды lmv для вывода загруженных модулей или такого инструмента, как Process Explorer и установки Вид -> Показать нижнюю панель на и настроить Вид -> Нижняя панель -> на DLL, а затем добавить столбцы База изображений.

  • Проверив свойства процесса Outlook.exe с помощью Process Explorer, вы можете увидеть ключевое отличие на вкладке изображения:

Outlook 2010

  • Статус предотвращения выполнения данных (DEP): включен (постоянно)

  • Адресное пространство Рандомизация загрузки: снизу вверх

  • Защита потока управления: отключено

  • Корпоративный контекст: неприменимо

Outlook 2013

  • Статус предотвращения выполнения данных (DEP): включен (постоянно)
  • Рандомизация загрузки адресного пространства : Высокая энтропия, Восходящее, Принудительное перемещение
  • Защита потока управления: отключено
  • Корпоративный контекст: Н/Д

Вы можете использовать инструмент редактирования PE, например CFF Explorer для изменения характеристик DLL исполняемого образа. Однако, удалив некоторые из этих опций, вы увеличите площадь поверхности атаки, которой можно воспользоваться.

0
ответ дан 6 January 2020 в 10:56

Класс olDefaultfolders в пространство имен Microsoft.office.interop.outlook должно указать, что папка вводит olFolderInbox для текущего профиля Microsoft Outlook, кроме того, единственный поддерживаемый тип пространства имен “ MAPI” , метод GetNameSpace функционально эквивалентен свойству Session.

Согласно Вашей проблеме “ can’t разворачивают папку ” и Ваш сценарий, который устранил проблему, кажется, что что-то не так произошло на Вашем типе папки клиентского профиля Outlook, и сценарий, который Вы отправляете, должен указать, что папка вводит и устанавливает сессию папок.

0
ответ дан 6 January 2020 в 09:02

Поскольку подробное описание ошибки недоступно, оно кажется наиболее близким к истине. Кроме того, если проблема все еще возникает, можно попробовать воссоздать профиль Outlook проблемной учетной записи в панели управления , а затем перезапустить клиент, чтобы проверить, существует ли проблема по-прежнему. Надеюсь, это поможет вам. :)

0
ответ дан 6 January 2020 в 09:44

Теги

Похожие вопросы