Функция NCryptOpenKey (ncrypt.h)

Функция NCryptOpenKey открывает ключ, который существует в указанном поставщике хранилища ключей CNG.

Синтаксис

SECURITY_STATUS NCryptOpenKey(
  [in]  NCRYPT_PROV_HANDLE hProvider,
  [out] NCRYPT_KEY_HANDLE  *phKey,
  [in]  LPCWSTR            pszKeyName,
  [in]  DWORD              dwLegacyKeySpec,
  [in]  DWORD              dwFlags
);

Параметры

[in] hProvider

Дескриптор поставщика хранилища ключей для открытия ключа.

[out] phKey

Указатель на переменную NCRYPT_KEY_HANDLE , которая получает дескриптор ключа. Завершив использование этого дескриптора, отпустите его, передав его в функцию NCryptFreeObject .

[in] pszKeyName

Указатель на строку Юникода, завершающуюся null, которая содержит имя извлекаемого ключа.

[in] dwLegacyKeySpec

Устаревший идентификатор, указывающий тип ключа. Это может быть одно из следующих значений.

Значение Значение
AT_KEYEXCHANGE
Ключ является ключом обмена ключами.
AT_SIGNATURE
Ключ является ключом подписи.
0
Ключ не является ни одним из указанных выше типов.

[in] dwFlags

Флаги, изменяющие поведение функции. Это может быть ноль или сочетание одного или нескольких из следующих значений.

Значение Значение
NCRYPT_MACHINE_KEY_FLAG
Откройте ключ для локального компьютера. Если этот флаг отсутствует, открывается текущий ключ пользователя.
NCRYPT_SILENT_FLAG
Запрашивает, чтобы поставщик служб ключей (KSP) не отображал пользовательский интерфейс. Если поставщик должен отобразить пользовательский интерфейс для работы, вызов завершается ошибкой и KSP должен задать код ошибки NTE_SILENT_CONTEXT в качестве последней ошибки.

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

Возвращает код состояния, указывающий на успешное или неудачное выполнение функции.

Возможные коды возврата включают, помимо прочего, следующие.

Код возврата Описание
ERROR_SUCCESS
Функция выполнена успешно.
NTE_BAD_FLAGS
Параметр dwFlags содержит недопустимое значение.
NTE_BAD_KEYSET
Указанный ключ не найден.
NTE_INVALID_HANDLE
Недопустимый параметр hProvider .
NTE_INVALID_PARAMETER
Один или несколько параметров являются недопустимыми.
NTE_NO_MEMORY
Произошел сбой выделения памяти.

Комментарии

Служба не должна вызывать эту функцию из функции StartService. Если служба вызывает эту функцию из функции StartService, может возникнуть взаимоблокировка, и служба может перестать отвечать на запросы.

По соображениям производительности программные поставщики KSP майкрософт кэшируют материал закрытого ключа в локальном центре безопасности (LSA) до тех пор, пока открыт дескриптор ключа. LSA — это привилегированный системный процесс. Таким образом, другие пользователи не могут получить доступ к этой кэшируемой копии ключа, если пользователь не обладает правами администратора в системе. Это поведение нельзя изменить с помощью конфигурации.

Требования

Требование Значение
Минимальная версия клиента Windows Vista [классические приложения | Приложения UWP]
Минимальная версия сервера Windows Server 2008 [классические приложения | Приложения UWP]
Целевая платформа Windows
Header ncrypt.h
Библиотека Ncrypt.lib
DLL Ncrypt.dll