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


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

Функция CoInitializeSecurity позволяет управлять сложными сценариями безопасности, устанавливая безопасность приложения программным способом. В этом разделе описываются сценарии использования CoInitializeSecurity и подробные сведения об использовании.

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

Если вы хотите использовать поставщик безопасности Schannel, необходимо указать его в качестве службы проверки подлинности в вызове CoInitializeSecurity.

Другой распространенный сценарий, в котором можно программно задать безопасность на уровне процесса, заключается в том, что вы хотите установить безопасность по умолчанию для всего процесса, но в этом процессе есть один или несколько объектов, которые предоставляют интерфейсы с особыми требованиями к безопасности. В этом случае можно вызвать CoInitializeSecurity, чтобы задать безопасность для процесса, позволяя COM обрабатывать большую часть проверка безопасности, и можно вызвать другие методы, чтобы задать безопасность для объектов с особыми потребностями безопасности. Вызов этих методов и функций описан в разделе "Настройка безопасности на уровне прокси-сервера интерфейса".

Если ваше приложение имеет очень специализированные требования к безопасности, например разрешение некоторым группам доступа к разным объектам в зависимости от времени суток, возможно, потребуется программно обрабатывать все ваши требования безопасности, гарантируя, что COM не выполняет автоматическое проверка для вас. Для этого необходимо вызвать CoInitializeSecurity, установив для параметра dwAuthnLevel значение none, а параметр pVoid имеет значение NULL. Если у вас есть собственный пакет безопасности, необходимо также зарегистрировать его в параметре pAuthnSvc . Затем вы можете обрабатывать все собственные средства безопасности программными средствами через вызовы интерфейса прокси-уровня и функций, описанных в разделе "Настройка безопасности на уровне прокси-сервера интерфейса".

CoInitializeSecurity предлагает широкий набор возможностей. При вызове CoInitializeSecurity значения реестра игнорируются, а значения инициализации безопасности, которые вы передаете вызову, используются. В зависимости от нужного результата первый параметр pVoid может указывать на три различных типа значений: SECURITY_DESCRIPTOR, объект IAccessControl или указатель на AppID. В большинстве случаев вы будете использовать функции Windows для создания SECURITY_DESCRIPTOR , на которые будет указывать pVoid .

Однако pVoid также может указывать на объект IAccessControl.

Чтобы указать coInitializeSecurity, который вы передаете объект IAccessControl в pVoid, необходимо передать значение EOAC_ACCESS_CONTROL параметру dwCapabilities. Так как CoInitializeSecurity кэширует результаты проверка доступа, список управления доступом не должен быть изменен после вызова CoInitializeSecurity.

Другой тип значения, который можно передать в параметр pVoid , является указателем на GUID, который является AppID приложения. Если pVoid является указателем на AppID, необходимо указать EOAC_APPID в параметре pCapabilities , чтобы функция знала, какое значение следует ожидать в pVoid. Если pVoid указывает на AppID, CoInitializeSecurity использует только реестр для значений проверки подлинности и игнорирует все остальные параметры CoInitializeSecurity.

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