На сервере в логах постоянно проскакивает ошибка Event ID 10016. Пример текста ошибки:
The application-specific permission settings do not grant Local Activation permission for the COM Server application with CLSID
{2593F8B9-4EAF-457C-B68A-50F6B8EA6B54}
and APPID
{15C20B67-12E7-4BB6-92BB-7AFF07997402}
to the user 1C\Administrator SID (S-1-5-21-943282006-2197489507-2874824746-500) from address LocalHost (Using LRPC) running in the application container Unavailable SID (Unavailable). This security permission can be modified using the Component Services administrative tool.
Разберёмся, что, собственно, произошло.
Некий пользователь по имени 1C\Administrator (1C — это имя компьютера, пользователь — локальный администратор компьютера) с идентификатором SID (S-1-5-21-943282006-2197489507-2874824746-500), будучи в здравом уме и твёрдой памяти, находясь на локальной машине (LocalHost — этот сервер), с помощью LRPC (Lightweight Remote Procedure Call — это оптимизированный способ локального запуска удалённых процедур) запустил какое-то приложение с идентификатором APPID {15C20B67-12E7-4BB6-92BB-7AFF07997402} в каком-то контейнере приложений с неизвестным SID.
Это приложение с идентификатором APPID {15C20B67-12E7-4BB6-92BB-7AFF07997402} полезло в службу COM Server с идентификатором CLSID {2593F8B9-4EAF-457C-B68A-50F6B8EA6B54} и обратилось к DCOM объекту с какой-то командой, которое требует права Local Activation. А таких прав у приложения (или пользователя, или системы) нет.
Скорее всего приложение обратится с повторным запросом к DCOM объекту уже с другим набором параметров, не требующих прав Local Activation, и запрос пройдёт успешно. Но ошибка в логах от первого запроса всё равно останется. Такое поведение говорит о не совсем корректной реализации данной функции приложения, ты сначала проверяй какие права у тебя есть, а потом запрос делай.
Возможно также, что приложение было некорректно установлено, или пользователь, от имени которого раньше запускалось приложение, был удалён.
Или просто сбой в матрице и слетели права доступа.
Запоминаем идентификаторы:
- CLSID {2593F8B9-4EAF-457C-B68A-50F6B8EA6B54}
- APPID {15C20B67-12E7-4BB6-92BB-7AFF07997402}
Что можно сделать с Event ID 10016?
Установить последние обновления Windows. Не помешает.
Переустановить приложение, которое вызывает ошибку. Если вы, конечно, знаете, что это за приложение.
Дать права Local Activation приложению, которое пытается лезет в службу COM Server с идентификатором CLSID {2593F8B9-4EAF-457C-B68A-50F6B8EA6B54}.
Назначение прав доступа
Чтобы назначить права доступа, нужно иметь права... назначать права. Дадим себе права изменять права доступа нужным приложениям.
Работаем под локальным администратором. Запускаем реестр.
regedit
Переходим в ветку реестра
\HKEY_CLASSES_ROOT\CLSID
И находим там ветку реестра с идентификатором CLSID {2593F8B9-4EAF-457C-B68A-50F6B8EA6B54}.
Кликаем правой кнопкой на ветку реестра, выбираем Permissions (Разрешения).
И я уже вижу косяк. В списках пользователей есть неизвестный аккаунт Account Unknown. Скорее всего раньше приложение работало от его имени. Но нам сейчас это уже не принципиально.
Нажимаем кнопку Advanced (Дополнительно).
Владелец ветки реестра TrustedInstaller. Меняем его на себя (локального администратора). Нажимаем Change (Изменить) и в списке пользователей указываем себя или группу локальных администраторов. Я указываю себя.
Ставим галку Replace owner on subcontainers and objects (Заменить владельца подконтейнеров и объектов), чтобы права применились ко всем объектам ветки реестра. OK.
В списке пользователей группе локальных администраторов и пользователю SYSTEM (СИСТЕМА) даём полные права Full Control. OK.
Переходим в ветку реестра
\HKEY_CLASSES_ROOT\AppID
И находим там ветку реестра с идентификатором APPID {15C20B67-12E7-4BB6-92BB-7AFF07997402}.
Запоминаем имя приложения, оно написано в параметре Default (По умолчанию):
- APPID {15C20B67-12E7-4BB6-92BB-7AFF07997402} RuntimeBroker.
Повторяем все те же действия, меняем владельца объекта с TrustedInstaller на себя или группу локальных администраторов. В списке пользователей группе локальных администраторов и пользователю SYSTEM (СИСТЕМА) даём полные права Full Control.
Теперь нужно дать права Local Activation приложению.
Запускаем оснастку Component Services (Службы компонентов) от имени администратора.
Или:
mmc comexp.msc
Переходим в Component Services → Computers → My Computer → DCOM Config (Службы компонентов → Компьютеры → Мой компьютер → Настройка DCOM.
Находим в списке приложение с определённым нами именем RuntimeBroker и Application ID {15C20B67-12E7-4BB6-92BB-7AFF07997402}.
Если приложение не находится, то оно может быть 32-битным, его нужно искать в оснастке:
mmc comexp.msc /32
Кликаем правой кнопкой на приложение, Properties (Свойства).
Вкладка Security (Безопасность), блок Launch and Activation Permissions (Разрешения на запуск и активацию), Edit (Изменить).
У меня отображается ошибка. Некоторые разрешения не распознались. Косяк, удаляем их — Remove.
Опять видим косяк с неизвестным пользователем. Выбираем пользователя SYSTEM (СИСТЕМА) и даём права:
- Local Launch (Локальный запуск)
- Local Activation (Локальная активация)
OK.
Перезагружаем сервер, проверяем лог, ошибка 10016 для CLSID {2593F8B9-4EAF-457C-B68A-50F6B8EA6B54} и APPID {15C20B67-12E7-4BB6-92BB-7AFF07997402} не должна повториться.