- Разрешить регистрацию объектов COM в политике Защитник Windows управления приложениями Allow COM object registration in a Windows Defender Application Control policy
- Настройка объектов COM в политике WDAC COM object configurability in WDAC policy
- Get COM object GUID Get COM object GUID
- Параметр политики автора, позволяющий или отказывая ОБЪЕКТУ GUID объекта COM Author policy setting to allow or deny COM object GUID
- Примеры: Examples
- Настройка параметров clSID How to configure settings for the CLSIDs
- Алексей Пахунов
- Регистрация COM объектов. Часть I
- Регистрация COM-объекта (Архив)
- Содержание
- Список приложений и их COM-объектов
- Установка COM-объекта
- Настройка прав доступа
- Настройка сетевого доступа
- Настройка глобальных прав компьютера
- Настройка прав доступа к компоненту
Разрешить регистрацию объектов COM в политике Защитник Windows управления приложениями Allow COM object registration in a Windows Defender Application Control policy
Область применения: Applies to:
- Windows 10 Windows 10
- Windows Server 2016 Windows Server 2016
- Windows Server 2019 Windows Server 2019
Некоторые сведения относятся к предварительным версиям продуктов, в которые перед коммерческим выпуском могут быть внесены существенные изменения. Some information relates to prereleased product which may be substantially modified before it’s commercially released. Майкрософт не дает никаких гарантий, явных или подразумеваемых, в отношении предоставленной здесь информации. Microsoft makes no warranties, express or implied, with respect to the information provided here.
Объектная модель Microsoft Component (COM) — это система, независимая от платформы, распределенная, объектно-ориентированная для создания двоичных компонентов программного обеспечения, которые могут взаимодействовать. The Microsoft Component Object Model (COM) is a platform-independent, distributed, object-oriented system for creating binary software components that can interact. COM указывает объектную модель и требования к программированию, которые позволяют объектам COM взаимодействовать с другими объектами. COM specifies an object model and programming requirements that enable COM objects to interact with other objects.
Настройка объектов COM в политике WDAC COM object configurability in WDAC policy
Перед обновлением Windows 10 1903 Защитник Windows управления приложениями (WDAC) встроил встроенный список допуска для регистрации объектов COM. Prior to the Windows 10 1903 update, Windows Defender Application Control (WDAC) enforced a built-in allow list for COM object registration. Несмотря на то что этот механизм работает в большинстве распространенных сценариев использования приложений, пользователи сообщали, что в некоторых случаях появляется необходимость разрешить дополнительные COM-объекты. While this mechanism works for most common application usage scenarios, customers have provided feedback that there are cases where additional COM objects need to be allowed. В обновлении 1903 для Windows 10 можно указывать разрешенные COM-объекты с помощью их идентификатора GUID в политике WDAC. The 1903 update to Windows 10 introduces the ability to specify allowed COM objects via their GUID in the WDAC policy.
ПРИМЕЧАНИЕ. Чтобы добавить эту функцию в другие версии Windows 10, можно установить следующие или более поздние обновления: NOTE: To add this functionality to other versions of Windows 10, you can install the following or later updates:
Get COM object GUID Get COM object GUID
Получите GUID приложения, чтобы разрешить одним из следующих способов: Get GUID of application to allow in one of the following ways:
- Поиск события блокировки в viewer событий (журналы приложений и служб > Microsoft > Windows > AppLocker > MSI и Script) и извлечение GUID Finding block event in Event Viewer (Application and Service Logs > Microsoft > Windows > AppLocker > MSI and Script) and extracting GUID
- Создание политики аудита (с New-CIPolicy -Audit), потенциально с конкретным поставщиком, и использование информации из событий блокировки для получения GUID Creating audit policy (using New-CIPolicy –Audit), potentially with specific provider, and use info from block events to get GUID
Параметр политики автора, позволяющий или отказывая ОБЪЕКТУ GUID объекта COM Author policy setting to allow or deny COM object GUID
Три элемента: Three elements:
- Поставщик: платформа, на которой работает код (значения : Powershell, WSH, IE, VBA, MSI или подстановочная карточка «AllHostIds») Provider: platform on which code is running (values are Powershell, WSH, IE, VBA, MSI, or a wildcard “AllHostIds”)
- Ключ: GUID для программы, с помощью которая будет работать, в формате Key=» <33333333-4444-4444-1616-161616161616>» Key: GUID for the program you with to run, in the format Key=»<33333333-4444-4444-1616-161616161616>«
- ValueName: необходимо установить значение «EnterpriseDefinedClsId» ValueName: needs to be set to «EnterpriseDefinedClsId»
Один атрибут: One attribute:
- Значение: должно быть «true» для разрешить и «false» для отказа Value: needs to be “true” for allow and “false” for deny
- Обратите внимание, что отказ работает только в базовых политиках, а не в дополнительных Note that deny only works in base policies, not supplemental
- Параметр необходимо поместить в порядок значений ASCII (сначала поставщик, затем Key, затем ValueName) The setting needs to be placed in the order of ASCII values (first by Provider, then Key, then ValueName)
Примеры: Examples
Пример 1. Разрешает регистрацию всех GUID-интерфейсов объектов COM в любом поставщике Example 1: Allows registration of all COM object GUIDs in any provider
Пример 2. Блокирует регистрацию определенного объекта COM с помощью Internet Explorer (IE) Example 2: Blocks a specific COM object from being registered via Internet Explorer (IE)
Пример 3. Позволяет определенному объекту COM регистрироваться в PowerShell Example 3: Allows a specific COM object to register in PowerShell
Настройка параметров clSID How to configure settings for the CLSIDs
При следующем примере ошибки в viewer событий (приложенияи журналы > служб Microsoft > Windows > AppLocker > MSI и Script): Given the following example of an error in the Event Viewer (Application and Service Logs > Microsoft > Windows > AppLocker > MSI and Script):
Имя журнала: Microsoft-Windows-AppLocker/MSI и источник скриптов: Microsoft-Windows-AppLocker Date: 11/11/2020 1:18:11 PM Event ID: 8036 Task Category: None Level: Error Keywords: User: S-1-5-21-33408580 17-3068726007-3466559902-3647 Компьютер: contoso.com Описание:
XML события: Event XML:
Чтобы добавить этот CLSID в существующую политику, используйте следующие действия: To add this CLSID to the existing policy, use the following steps:
- Open PowerShell ISE с административными привилегиями. Open PowerShell ISE with Administrative privileges.
- Скопируйте и отредактируйте эту команду, а затем запустите ее из ISE администратора PowerShell. Copy and edit this command, then run it from the admin PowerShell ISE. Считайте имя политики WDAC_policy.xml . Consider the policy name to be WDAC_policy.xml .
После запуска команды в XML-политику добавляется следующий раздел. Once the command has been run, you will find that the following section is added to the policy XML.
Алексей Пахунов
… также известный как “Not a kernel guy”
Copyright © 2006 — 2021 License
Powered by Hugo and Hyde-X
Регистрация COM объектов. Часть I
Изначально, данный пост должен был называться «Регистрация COM объектов на 64-х разрядных версиях Windows» и речь должна было пойти про особенности 64-х разрядных версий Windows с точки зрения регистрации COM компонент. Однако пост получился слишком большим и его пришлось разбить на две части. Про особенности 64-х разрядных систем я расскажу во второй части.
Для начала немного теории. Взаимодействие клиента (приложения вызвавшего CoCreateInstance) и сервера (COM объекта) в общем случае можно изобразить с помощью вот такой схемы:
В общем случае, когда клиент и сервер находятся в разных квартирах (apartments), процессах или на разных машинах, они не могут общаться напрямую. Вместо этого они используют посредника — так называемую Proxy/Stub DLL. Эта DLL перехватывает вызовы методов сервера, упаковывает полученные параметры в RPC сообщение и взаимодействует с COM и RPC подсистемой, которая в свою очередь берёт на себя передачу RPC сообщений в обе стороны.
Очень подробная статья на RSDN на эту тему: Секреты маршалинга.
Proxy/Stub DLL, хотя и может быть написана вручную, обычно генерируется автоматически из .idl описания интерфейсов с помощью утилиты midl.exe. Если вы создаёте заготовку COM сервера в Visual Studio, то Proxy/Stub DLL обычно выглядит как дополнительный проект с именем вида « PS».
Proxy/Stub DLL не создаётся для интерфейсов, помеченных атрибутами [dual] или [automation]. Вместо этого используется общий для всех подобных интерфейсов универсальный маршалер. Универсальный маршалер использует информацию из библиотеки типов (typelib, файл с расширением .tlb) для упаковки параметров в RPC сообщения. Реализация универсального маршалера находится в oleaut32.dll.
Теперь вернёмся к теме этого поста. Регистрация COM сервера заключается в:
Регистрации самого COM объекта на сервере;
Регистрации Proxy/Stub DLL для каждого интерфейса как на клиенте так и на сервере;
Регистрация библиотеки типов (typelib) для каждого интерфейса, помеченного атрибутом [dual] или [automation], как на клиенте так и на сервере.
При регистрации COM сервера в реестре создается ключ вида “HKEY_CLASSES_ROOT\CLSID<…>” с необходимыми под-ключами. По большому счету это единственный ключ необходимый для создания экземпляра COM объекта.
Регистрация Proxy/Stub DLL создаёт два ключа на каждый интерфейс: ключ маршалера под “HKEY_CLASSES_ROOT\CLSID” и ключ самого интерфейса под «HKEY_CLASSES_ROOT\Interface». При этом «ProxyStubClsid32» указывает на регистрацию маршалера, позволяя тем самым найти нужный объект во время вызова IUknown::QueryInterface.
Регистрация библиотеки типов также добавляет два ключа на каждый интерфейс: ключ интерфейса под «HKEY_CLASSES_ROOT\Interface» и ключ библиотеки типов под «HKEY_CLASSES_ROOT\Typelib». Ключ маршалера при этом не создаётся, так как универсальный маршалер регистрируется при установке системы.
Итого, чтобы все работало нужно зарегистрировать сам COM объект и все необходимые Proxy/Stub DLL и библиотеки типов на сервере, а также все необходимые Proxy/Stub DLL и библиотеки типов на клиенте.
Регистрация COM-объекта (Архив)
Регистрация COM-объекта (Архив) — процедура, которую необходимо выполнять для того, чтобы зарегистрировать в системе новое приложение COM. Это необходимо для того, чтобы обращения из Такси-Мастер к сторонним приложениям (см. список приложений ниже) происходили не в пустоту, а в существующий объект, о наличии которого «знает» операционная система. В противном случае взаимодействие между Такси-Мастер и каким-либо другим приложением с помощью технологии COM невозможно.
Содержание
Список приложений и их COM-объектов
Существует несколько приложений, с которыми Такси-Мастер взаимодействует с помощью технологии COM:
Каждое приложение поставляется со своим COM-объектом, который нужно установить.
Установка COM-объекта
Установка COM-объекта сопровождается регистрацией его в системе. Чтобы зарегистрировать объект, выполните следующие действия:
- Найдите папку, в которой находится файл COM-приложения и запомните путь к нему.
- Нажмите « Пуск » → « Выполнить » .
- В открывшейся строке наберите « cmd » и нажмите Enter . Откроется окно командной строки.
- Выполните команду « regsvr32 » , где « » — это путь к файлу.
Например, если вы регистрируете COM-объект SpRecord ( « spsdksvr » ), то:
- По умолчанию путь к файлу таков: « C:\Program Files\SpRecord\spsdksvr.dll » .
- Соответственно, нужно выполнить команду « regsvr32 «C:\Program Files\SpRecord\spsdksvr.dll» » .
Обратите внимание на то, что путь взят в кавычки — если в пути встречаются пробелы, то его необходимо брать в кавычки.
Очевидно, в общем случае, путь зависит от папки, в которой находится файл. Стоит отметить, что часто COM-приложения находятся в папках, куда установлена соответствующая программа.
Настройка прав доступа
Настройка любого COM-объекта (будь то RanCom или « spsdksvr » ) происходит в оснастке (snap-in) «Службы компонентов». Чтобы открыть оснастку «Службы компонентов», выполните следующие действия:
- Нажмите кнопку « Пуск » .
- Нажмите « Выполнить » . Откроется окно ввода командной строки.
- В строке ввода наберите « dcomcnfg » .
- Нажмите « OK » .
Далее происходят следующие шаги:
- Настройка сетевого доступа — для того, чтобы COM-объект мог взаимодействовать с удаленными приложениями в локальной сети.
- Настройка глобальных прав компьютера — для того, чтобы задать основные параметры системы, при которых все COM-объекты работают так, как это требуется.
- Настройка прав доступа к компоненту — чтобы обеспечить корректную работу данного COM-объекта в локальной сети с нужными приложениями.
Настройка сетевого доступа
В Windows (см. системные требования к операционной системе) по умолчанию сетевые компьютеры изначально настроены с включенной службой DCOM. Службу DCOM нужно включить на всех рабочих местах.
Чтобы включить или выключить DCOM, откройте оснастку «Службы компонентов» и выполните следующие действия:
- В дереве консоли выберите папку «Компьютеры», щелкните правой кнопкой мыши компьютер, для которого хотите включить или выключить DCOM, а затем щелкните « Свойства » .
- Откройте вкладку « Свойства по умолчанию » .
- Чтобы включить DCOM, установите флажок «
Разрешить использование DCOM на этом компьютере » .
- Нажмите кнопку « ОК » .
Настройка глобальных прав компьютера
Перед настройкой непосредственно COM-приложения необходимо установить настройки компьютера, которые распространяются на все приложения. Для этого откройте оснастку «Службы компонентов», в дереве консоли выберите локальный компьютер (Корень консоли → Службы компонентов → Компьютеры → Компьютер) и через контекстное меню откройте его свойства. Далее выполните следующие действия:
- Перейдите на вкладку « Свойства по умолчанию » и установите флажок «
Разрешить использование DCOM на этом компьютере » .
- Откройте вкладку « Безопасность COM » .
- В области « Права доступа » нажмите кнопку « Изменить ограничения » .
- Нажмите кнопку « Добавить » .
- В диалоговом окне «Выбор: Пользователи, Компьютеры или Группы» введите полное имя пользователя или группы, которые нужно добавить.
- Нажмите « Дополнительно »
- Нажмите « Начать поиск » , чтобы просмотреть список пользователей и групп в выбранном домене.
- Выберите в списке пользователя или группу
- Нажмите кнопку « ОК » . Добавленная учетная запись пользователя или группа будет выведена в списке «Группы или пользователи».
- В списке «Группы или пользователи» выберите группу или пользователя, для которых нужно изменить установленное по умолчанию разрешение на доступ.
- В списке «Разрешения» установите флажки «
Разрешить » , чтобы предоставить разрешения «Локальный доступ» и «Удаленный доступ» для выбранной группы или имени пользователя.
- Повторите действия п.3–п.7 для области « Разрешения на запуск и активацию » .
- Откройте вкладку « Безопасность » .
- В области « Разрешения на запуск и активацию » в последовательно щелкните «
Настроить » и « Изменить » .
- Нажмите кнопку « Добавить » .
- В диалоговом окне «Выбор: Пользователи, Компьютеры или Группы» введите полное имя пользователя или группы, которые нужно добавить.
- В списке «Группы или пользователи» выберите группу или пользователя, для которых нужно изменить установленное по умолчанию разрешение на доступ.
- В списке «Разрешения» установите флажки «
Разрешить » , чтобы предоставить разрешения «Локальный доступ», «Удаленный доступ», «Локальная активация» и «Удаленная активация» для выбранных группы или имени пользователя.
- Нажмите кнопку « ОК » .
- В области « Разрешения на доступ » в последовательно щелкните «
Настроить » и « Изменить » . Повторите те же действия, что описаны выше (п.11–п.15).
- В области « Разрешения на изменение настроек » в последовательно щелкните «
Настроить » и « Изменить » . Повторите те же действия, что описаны выше (п.11–п.15).
- Откройте вкладку « Удостоверение » и щелкните «
Текущий пользователь » .
- Нажмите кнопку « OK » , чтобы сохранить настройки.
В настройках должны фигурировать два пользователя: Все и АНОНИМНЫЙ ВХОД. То есть, добавлять нужно не одного пользователя, а двух.
Настройка прав доступа к компоненту
Права на доступ к COM-объекту настраиваются локально в свойствах самого объекта.
Откройте список приложений DCOM (Корень консоли → Службы компонентов → Компьютеры → Компьютер → Настройка DCOM) , найдите нужный объект и установите разрешения на доступ к этому объекту.
- В дереве консоли (слева) или в списке приложений (в середине) щелкните правой кнопкой мыши нужное приложение DCOM (RanCom) и выберите команду « Свойства » .
- Перейдите на вкладку « Безопасность » .
- В разделе « Права доступа » последовательно щелкните «
Настроить » и « Изменить » .
- Нажмите кнопку « Добавить » .
- Введите полное имя пользователя или группы, которые нужно добавить. Если это имя неизвестно, щелкните « Дополнительно » , а затем — « Начать поиск » , чтобы просмотреть список пользователей и групп в выбранном домене. Выберите в списке пользователя или группу, а затем нажмите кнопку « ОК » . Добавленная учетная запись пользователя или группа будет выведена в списке «Группы или пользователи».
- В списке «Группы или пользователи» выберите группу или пользователя, для которых нужно изменить установленное по умолчанию разрешение на доступ.
- В списке «Разрешения» установите флажки «
Разрешить » , чтобы предоставить разрешения «Локальный доступ» и «Удаленный доступ» для выбранных группы или имени пользователя.
- Нажмите « ОК » . Новые разрешения на доступ для приложения будут применены в следующий раз при запуске этого приложения на данном компьютере.
В настройках должны фигурировать два пользователя: Все и АНОНИМНЫЙ ВХОД. То есть, добавлять нужно не одного пользователя, а двух.