Настройка системы безопасности на уровне процесса с помощью реестра
Если вы хотите задать безопасность для всего процесса, одно решение — задать уровни безопасности, которые требуется в реестре. Если приложение не может вызвать 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 игнорируются.
См. также