CryptGetUserKey

【勇芳软件工作室】汉化HomePreviousNext

[New - Windows NT]

[New - Windows 95, OEM Service Release 2]

CryptGetUserKey函数检索永久用户密钥对的句柄,例如用户的签名密钥对。

BOOL CRYPTFUNC CryptGetUserKey(

HCRYPTPROV【pbBuffer】, 
DWORD【dwKeySpec】, 
HCRYPTKEY *【phUserKey】 
); 

参数

【pbBuffer】

[in]应用程序的CSP的句柄。应用程序使用CryptAcquireContext函数获取此句柄。

【dwKeySpec】

[in]要检索的密钥的规范。以下密钥可从几乎所有的提供者检索:

* AT_KEYEXCHANGE __交换公共密钥

* AT_SIGNATURE __签名公钥

此外,一些提供商允许通过此函数访问其他用户特定的密钥。有关详细信息,请参阅特定提供商的文档。

【phUserKey】

[out]函数将检索到的键的句柄复制到的地址。

返回值

如果函数成功,返回值不为零。

如果函数失败,返回值为零。要检索扩展错误信息,请使用GetLastError功能。

下表列出了GetLastError函数最常返回的错误代码。由“NTE”开头的错误代码由您使用的特定CSP生成。

错误描述
ERROR_INVALID_HANDLE其中一个参数指定一个无效句柄。
ERROR_INVALID_PARAMETER其中一个参数包含无效值。这通常是一个非法的指针。
NTE_BAD_KEY【dwKeySpec】参数包含无效值。
NTE_BAD_UID【pbBuffer】参数不包含有效的上下文句柄。
NTE_NO_KEY【dwKeySpec】参数要求的密钥不存在。

#include < wincrypt.h >

HCRYPTPROV hProv = 0;

HCRYPTKEY hSignKey = 0;

HCRYPTKEY hXchgKey = 0;

//获取用户默认提供程序的句柄。

if(!CryptAcquireContext(& hProv,NULL,NULL,PROV_RSA_FULL,0)){

printf("Error %x during CryptAcquireContext!\n", GetLastError());

goto done;

}

//获取签名密钥的句柄。

if(!CryptGetUserKey(hProv,AT_SIGNATURE,& hSignKey)){

printf("Error %x during CryptGetUserKey!\n", GetLastError());

goto done;

}

//获取密钥交换密钥的句柄。

如果(!CryptGetUserKey(hProv,AT_KEYEXCHANGE,& hXchgKey)){

printf("Error %x during CryptGetUserKey!\n", GetLastError());

goto done;

}

//用'hSignKey'和'hXchgKey'做一些事情。

...

完成:

//销毁签名钥匙柄。

if(hSignKey != 0) CryptDestroyKey(hSignKey);

//销毁密钥交换密钥句柄。

if(hXchgKey != 0) CryptDestroyKey(hXchgKey);

//发布提供者句柄。

if(hProv != 0) CryptReleaseContext(hProv, 0);

也可以看看

CryptAcquireContext, CryptDestroyKey, CryptGenKey