Настройка системы безопасности на уровне процесса с помощью реестра

Если вы хотите задать безопасность для всего процесса, одно решение — задать уровни безопасности, которые требуется в реестре. Если приложение не может вызвать CoInitializeSecurity или если вы предпочитаете не использовать программную безопасность, это может быть хорошим вариантом. Если вы решили установить безопасность на уровне процесса с помощью реестра, следует учитывать, что при вызове CoInitializeSecurity в программе COM будут использоваться значения в CoInitializeSecurity и игнорировать значения реестра.

Существует два способа настройки безопасности в реестре приложения:

  • Вы можете использовать Dcomcnfg.exe, которая предоставляет простой пользовательский интерфейс для изменения значений безопасности. Все COM-серверы можно настроить с помощью Dcomcnfg.exe. Дополнительные сведения см. в разделе "Настройка безопасности на уровне процесса" с помощью DCOMCNFG. Однако клиентские приложения обычно не отображаются в Dcomcnfg.exe, если клиент не создает GUID и не вводит его в реестр.
  • Значения безопасности можно задать под ключом AppID для приложения. В остальной части этого раздела объясняется, как настроить безопасность в реестре с помощью ключа AppID .

AppID — это GUID, представляющий серверный процесс для одного или нескольких классов. Каждый класс связан ровно с одним AppID, а идентификаторы AppID можно назначать только для EXEs. Библиотеки DLL не получают идентификаторы appID, если они не работают в суррогатном режиме, а затем это суррогатный процесс, имеющий AppID. Если несколько БИБЛИОТЕК DLL загружаются в суррогат, каждый суррогат имеет только один идентификатор AppID.

Для некоторых COM-серверов код регистрации создает идентификатор appID и помещает записи в реестр, которые сопоставляют AppID с именем исполняемого файла. Но некоторые COM-серверы не предоставляют эту функцию. Однако если код регистрации сервера добавляет запись для HKCR\CLSID{ServerCLSID}\LocalServer32 при запуске dcomcnfg.exe, он автоматически добавит appID для CLSID.

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

Если вы решили задать безопасность на уровне процесса в реестре в разделе AppID, помните, что в разделе AppID есть два именованных значения, которые можно задать без разрешения администратора:

Значения AuthenticationLevel и AccessPermission задаются независимо и имеют отдельные значения по умолчанию. Если значение AuthenticationLevel отсутствует, значение LegacyAuthenticationLevel используется в качестве значения по умолчанию. Аналогичным образом, если значение AccessPermission отсутствует, значение DefaultAccessPermission используется в качестве значения по умолчанию. Однако значения AuthenticationLevel и AccessPermission связаны следующими способами:

  • Если значение AuthenticationLevel отсутствует, значения AccessPermission и DefaultAccessPermission игнорируются для этого приложения.
  • Если параметр AuthenticationLevel отсутствует, а для этого приложения отсутствуют значения LegacyAuthenticationLevel, значения AccessPermission и DefaultAccessPermission игнорируются.

Настройка безопасности на уровне процесса