共用方式為


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 終止 Unicode 字串的指標,其中包含要擷取的索引鍵名稱。

[in] dwLegacyKeySpec

指定金鑰類型的舊版識別碼。 這可以是下列其中一個值。

意義
AT_KEYEXCHANGE
金鑰是金鑰交換金鑰。
AT_SIGNATURE
金鑰是簽章金鑰。
0
索引鍵不是上述類型。

[in] dwFlags

修改函式行為的旗標。 這可以是零或下列一或多個值的組合。

意義
NCRYPT_MACHINE_KEY_FLAG
開啟本機計算機的金鑰。 如果這個旗標不存在,則會開啟目前的使用者密鑰。
NCRYPT_SILENT_FLAG
要求金鑰服務提供者 (KSP) 不會顯示任何使用者介面。 如果提供者必須顯示要運作的UI,呼叫會失敗,KSP應該將 NTE_SILENT_CONTEXT 錯誤碼設定為最後一個錯誤。

傳回值

傳回狀態代碼,指出函式的成功或失敗。

可能的傳回碼包括但不限於下列專案。

傳回碼 Description
ERROR_SUCCESS
函式成功。
NTE_BAD_FLAGS
dwFlags 參數包含無效的值。
NTE_BAD_KEYSET
找不到指定的索引鍵。
NTE_INVALID_HANDLE
hProvider 參數無效。
NTE_INVALID_PARAMETER
一或多個參數無效。
NTE_NO_MEMORY
發生記憶體配置失敗。

備註

服務不得從它的 StartService 函式呼叫此函式。 如果服務從其 StartService 函式呼叫此函式,可能會發生死結,而且服務可能會停止回應。

基於效能考慮,只要金鑰的句柄開啟,Microsoft 軟體型 KSP 會快取本地安全機構 (LSA) 中的私鑰數據。 LSA 是特殊許可權的系統進程。 因此,除非使用者擁有系統上的系統管理員許可權,否則其他使用者無法存取此快取的密鑰複本。 此行為無法透過組態改變。

規格需求

需求
最低支援的用戶端 Windows Vista [傳統型應用程式 |UWP 應用程式]
最低支援的伺服器 Windows Server 2008 [傳統型應用程式 |UWP 應用程式]
目標平台 Windows
標頭 ncrypt.h
程式庫 Ncrypt.lib
Dll Ncrypt.dll