Поделиться через


Настройка безопасности Process-Wide через реестр

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

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

  • С помощью Dcomcnfg.exeможно использовать простой пользовательский интерфейс для изменения значений безопасности. Все серверы COM можно настроить с помощью Dcomcnfg.exe. Дополнительные сведения см. в разделе Настройка Process-Wide безопасности с использованием 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, он автоматически добавит Идентификатор приложения для CLSID.

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

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

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

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

настройка Process-Wide безопасности