Функция CoInitializeSecurity (combaseapi.h)

Регистрирует безопасность и задает значения безопасности по умолчанию для процесса.

Синтаксис

HRESULT CoInitializeSecurity(
  [in, optional] PSECURITY_DESCRIPTOR        pSecDesc,
  [in]           LONG                        cAuthSvc,
  [in, optional] SOLE_AUTHENTICATION_SERVICE *asAuthSvc,
  [in, optional] void                        *pReserved1,
  [in]           DWORD                       dwAuthnLevel,
  [in]           DWORD                       dwImpLevel,
  [in, optional] void                        *pAuthList,
  [in]           DWORD                       dwCapabilities,
  [in, optional] void                        *pReserved3
);

Параметры

[in, optional] pSecDesc

Разрешения на доступ, которые сервер будет использовать для приема вызовов. Этот параметр используется COM только в том случае, если сервер вызывает CoInitializeSecurity. Его значение представляет собой указатель на один из трех типов: AppID, объект IAccessControl или SECURITY_DESCRIPTOR в абсолютном формате. Дополнительные сведения см. в разделе "Примечания".

[in] cAuthSvc

Количество записей в параметре asAuthSvc . Этот параметр используется COM только в том случае, если сервер вызывает CoInitializeSecurity. Если этот параметр имеет значение 0, службы проверки подлинности не будут зарегистрированы, и сервер не сможет принимать безопасные вызовы. Значение -1 указывает COM выбрать, какие службы проверки подлинности следует зарегистрировать, и в этом случае параметр asAuthSvc должен иметь значение NULL. Однако сервер никогда не будет выбирать Schannel в качестве службы проверки подлинности, если этот параметр имеет значение -1.

[in, optional] asAuthSvc

Массив служб проверки подлинности, которые сервер готов использовать для приема вызова. Этот параметр используется COM только в том случае, если сервер вызывает CoInitializeSecurity. Дополнительные сведения см. в разделе SOLE_AUTHENTICATION_SERVICE.

[in, optional] pReserved1

Этот параметр зарезервирован и должен иметь значение NULL.

[in] dwAuthnLevel

Уровень проверки подлинности по умолчанию для процесса. Серверы и клиенты используют этот параметр при вызове CoInitializeSecurity. COM завершится сбоем вызовов, поступающих с более низким уровнем проверки подлинности. По умолчанию все прокси-серверы будут использовать по крайней мере этот уровень проверки подлинности. Это значение должно содержать одну из констант уровня проверки подлинности. По умолчанию все вызовы iUnknown выполняются на этом уровне.

[in] dwImpLevel

Уровень олицетворения по умолчанию для прокси-серверов. Значение этого параметра используется только в том случае, если процесс является клиентом. Это должно быть значение из констант уровня олицетворения, за исключением RPC_C_IMP_LEVEL_DEFAULT, которое не предназначено для использования с CoInitializeSecurity.

Исходящие вызовы от клиента всегда используют уровень олицетворения, как указано. (Она не согласована.) Входящие вызовы к клиенту могут осуществляться на любом уровне олицетворения. По умолчанию все вызовы IUnknown выполняются с этим уровнем олицетворения, поэтому даже приложения с поддержкой безопасности должны устанавливать этот уровень осторожно. Чтобы определить, какие уровни олицетворения поддерживает каждая служба проверки подлинности, см. описание служб проверки подлинности в com и пакетах безопасности. Дополнительные сведения об уровнях олицетворения см. в разделе Олицетворение.

[in, optional] pAuthList

Указатель на SOLE_AUTHENTICATION_LIST, представляющий собой массив SOLE_AUTHENTICATION_INFO структур. В этом списке указаны сведения для каждой службы проверки подлинности, которую клиент может использовать для вызова сервера. Этот параметр используется COM только в том случае, если клиент вызывает CoInitializeSecurity.

[in] dwCapabilities

Дополнительные возможности клиента или сервера, заданные путем установки одного или нескольких EOLE_AUTHENTICATION_CAPABILITIES значений . Некоторые из этих значений нельзя использовать одновременно, а некоторые — при использовании определенных служб проверки подлинности. Дополнительные сведения об этих флагах см. в разделе Примечания.

[in, optional] pReserved3

Этот параметр зарезервирован и должен иметь значение NULL.

Возвращаемое значение

Эта функция может возвращать стандартное возвращаемое значение E_INVALIDARG, а также следующие значения.

Код возврата Описание
S_OK
Указывает на успешное завершение.
RPC_E_TOO_LATE

CoInitializeSecurity уже вызван.

RPC_E_NO_GOOD_SECURITY_PACKAGES
Параметр asAuthSvc не имеет значения NULL, и ни одна из служб проверки подлинности в списке не может быть зарегистрирована. Проверьте результаты, сохраненные в asAuthSvc , на наличие кодов ошибок, относящихся к службе проверки подлинности.
E_OUT_OF_MEMORY
Недостаточно памяти.

Комментарии

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

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

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

Если pSecDesc указывает на AppID, флаг EOAC_APPID должен быть установлен в dwCapabilities , а при установке флага EOAC_APPID все остальные параметры CoInitializeSecurity игнорируются. CoInitializeSecurity ищет уровень проверки подлинности в разделе AppID в реестре и использует его для определения безопасности по умолчанию. Дополнительные сведения о том, как ключ AppID используется для настройки безопасности, см. в разделе Настройка Process-Wide безопасности с помощью реестра.

Если pSecDesc является указателем на объект IAccessControl , необходимо задать флаг EOAC_ACCESS_CONTROL, а параметр dwAuthnLevel не может иметь значение none. Объект IAccessControl используется для определения того, кто может вызывать процесс. DCOM добавит значениеIAccessControl и отпустит его при вызове CoUninitialize . Состояние объекта IAccessControl не должно изменяться.

Если pSecDesc является указателем на SECURITY_DESCRIPTOR, в dwCapabilities нельзя задать ни EOAC_APPID, ни флаг EOAC_ACCESS_CONTROL. Необходимо задать владельца и группу SECURITY_DESCRIPTOR , и до тех пор, пока DCOM не будет поддерживать аудит, системный ACL должен иметь значение NULL. Записи управления доступом (ACE) в списке управления доступом (DACL) SECURITY_DESCRIPTOR используются для определения того, каким вызывающим объектам разрешено подключаться к объектам процесса. DACL без ACE не разрешает доступ, а DACL NULL разрешает вызовы от любого пользователя. Дополнительные сведения о списках управления доступом и ACE см. в разделе Модель контроль доступа. Приложения должны вызывать AccessCheck (а не IsValidSecurityDescriptor), чтобы убедиться, что их SECURITY_DESCRIPTOR правильно сформированы перед вызовом CoInitializeSecurity.

Передача pSecDesc в качестве NULL настоятельно не рекомендуется. Подходящим вариантом может быть использование SECURITY_DESCRIPTOR , которая позволяет всем. Если pSecDesc имеет значение NULL, флаги в dwCapabilities определяют, как CoInitializeSecurity определяет разрешения доступа, которые будет использовать сервер, следующим образом:

  • Если установлен флаг EOAC_APPID, CoInitializeSecurity будет искать имя .exe приложения в реестре и использовать хранящийся в нем идентификатор AppID.
  • Если установлен флаг EOAC_ACCESS_CONTROL, CoInitializeSecurity вернет ошибку.
  • Если ни флаг EOAC_APPID, ни флаг EOAC_ACCESS_CONTROL не задан, CoInitializeSecurity разрешает всем вызывающим абонентам, включая локальных и удаленных анонимных пользователей.
Функция CoInitializeSecurity возвращает ошибку, если флаги EOAC_APPID и EOAC_ACCESS_CONTROL установлены в dwCapabilities.

Требования

Требование Значение
Минимальная версия клиента Windows 2000 Профессиональная [классические приложения | Приложения UWP]
Минимальная версия сервера Windows 2000 Server [классические приложения | Приложения UWP]
Целевая платформа Windows
Header combaseapi.h (включая Objbase.h)
Библиотека Ole32.lib
DLL Ole32.dll

См. также раздел

CoSetProxyBlanket

Безопасность в COM