Export (0) Print
Expand All
0 out of 1 rated this helpful - Rate this topic

CryptGetUserKey (Windows CE 5.0)

Windows CE 5.0
Send Feedback

This function retrieves a handle to a permanent user key pair, such as the user's signature key pair. This function also retrieves a handle to one of a user's two public/private key pairs. Only the owner of the public/private key pairs uses the function and only when the handle to a cryptographic service provider (CSP) and its associated key container is available. Use the CryptAcquireCertificatePrivateKey function if the user's certificate is available, but not the CSP handle.

BOOL WINAPI CryptGetUserKey( 
  HCRYPTPROV hProv,
  DWORD dwKeySpec, 
  HCRYPTKEY* phUserKey
);

Parameters

hProv
[in] HCRYPTPROV handle to a CSP created by a call to CryptAcquireContext.
dwKeySpec
[in] Specifies the key to retrieve. The following keys are retrievable from almost all providers:
  • AT_KEYEXCHANGE.
  • AT_SIGNATURE.

Additionally, some providers allow access to other user-specific keys through this function.

phUserKey
[out] Pointer to the HCRYPTKEY handle to the retrieved keys.

Return Values

TRUE indicates success. FALSE indicates failure. To get extended error information, call the GetLastError function.

The following table shows the common values for the GetLastError function. The error values prefaced by NTE are generated by the particular CSP you are using.

ValueDescription
ERROR_INVALID_HANDLEOne of the parameters specifies an invalid handle.
ERROR_INVALID_PARAMETEROne of the parameters contains an invalid value. This is most often an illegal pointer.
NTE_BAD_KEYThe dwKeySpec parameter contains an invalid value.
NTE_BAD_UIDThe hProv parameter does not contain a valid context handle.
NTE_NO_KEYThe key requested by the dwKeySpec parameter does not exist.

Example Code

#include <wincrypt.h>

HCRYPTPROV hProv = 0;
HCRYPTKEY hSignKey = 0;
HCRYPTKEY hXchgKey = 0;

// Get a handle to the user default provider.
// Call CryptAcquireContext. For sample code, see CryptAcquireContext.

// Get a handle to the signature key.
if(!CryptGetUserKey(hProv, AT_SIGNATURE, &hSignKey)) {
 printf("Error %x during CryptGetUserKey!\n", GetLastError());
 goto done;
}

// Get a handle to the key exchange key.
if(!CryptGetUserKey(hProv, AT_KEYEXCHANGE, &hXchgKey)) {
 printf("Error %x during CryptGetUserKey!\n", GetLastError());
 goto done;
}

// Use the 'hSignKey' to verify a signature, or use 'hXchgKey' to export a key to yourself.
...

done:

// Destroy the signature key handle.
if(hSignKey != 0) CryptDestroyKey(hSignKey);

// Destroy the key exchange key handle.
if(hXchgKey != 0) CryptDestroyKey(hXchgKey);

// Free the provider handle.
if(hProv != 0) CryptReleaseContext(hProv, 0);
 

Requirements

OS Versions: Windows CE 2.10 and later.
Header: Wincrypt.h.
Link Library: Coredll.lib.

See Also

CryptAcquireContext | CryptDestroyKey | CryptGenKey


Send Feedback on this topic to the authors

Feedback FAQs

© 2006 Microsoft Corporation. All rights reserved.


Did you find this helpful?
(1500 characters remaining)
Thank you for your feedback
Show:
© 2014 Microsoft. All rights reserved.