Funzione NCryptExportKey (ncrypt.h)

La funzione NCryptExportKey esporta una chiave CNG in un BLOB di memoria.

Sintassi

SECURITY_STATUS NCryptExportKey(
  [in]            NCRYPT_KEY_HANDLE hKey,
  [in, optional]  NCRYPT_KEY_HANDLE hExportKey,
  [in]            LPCWSTR           pszBlobType,
  [in, optional]  NCryptBufferDesc  *pParameterList,
  [out, optional] PBYTE             pbOutput,
  [in]            DWORD             cbOutput,
  [out]           DWORD             *pcbResult,
  [in]            DWORD             dwFlags
);

Parametri

[in] hKey

Handle della chiave da esportare.

[in, optional] hExportKey

Handle per una chiave crittografica dell'utente di destinazione. I dati della chiave all'interno del BLOB della chiave esportata vengono crittografati usando questa chiave. Ciò garantisce che solo l'utente di destinazione sia in grado di usare il BLOB della chiave.

[in] pszBlobType

Stringa Unicode con terminazione Null contenente un identificatore che specifica il tipo di BLOB da esportare. Può trattarsi di uno dei valori seguenti.

BCRYPT_DH_PRIVATE_BLOB

Esportare una coppia di chiavi pubblica/privata Diffie-Hellman. Il buffer pbOutput riceve una struttura BCRYPT_DH_KEY_BLOB immediatamente seguita dai dati chiave.

BCRYPT_DH_PUBLIC_BLOB

Esportare una chiave pubblica Diffie-Hellman. Il buffer pbOutput riceve una struttura BCRYPT_DH_KEY_BLOB immediatamente seguita dai dati chiave.

BCRYPT_DSA_PRIVATE_BLOB

Esportare una coppia di chiavi pubblica/privata DSA. Il buffer pbOutput riceve una struttura BCRYPT_DSA_KEY_BLOB immediatamente seguita dai dati chiave.

BCRYPT_DSA_PUBLIC_BLOB

Esportare una chiave pubblica DSA. Il buffer pbOutput riceve una struttura BCRYPT_DSA_KEY_BLOB immediatamente seguita dai dati chiave.

BCRYPT_ECCPRIVATE_BLOB

Esportare una chiave privata ecc (elliptic curve cryptography). Il buffer pbOutput riceve una struttura BCRYPT_ECCKEY_BLOB immediatamente seguita dai dati chiave.

BCRYPT_ECCPUBLIC_BLOB

Esportare una chiave pubblica ECC. Il buffer pbOutput riceve una struttura BCRYPT_ECCKEY_BLOB immediatamente seguita dai dati chiave.

BCRYPT_PUBLIC_KEY_BLOB

Esportare una chiave pubblica generica di qualsiasi tipo. Il tipo di chiave in questo BLOB è determinato dal membro Magic della struttura BCRYPT_KEY_BLOB .

BCRYPT_PRIVATE_KEY_BLOB

Esportare una chiave privata generica di qualsiasi tipo. La chiave privata non contiene necessariamente la chiave pubblica. Il tipo di chiave in questo BLOB è determinato dal membro Magic della struttura BCRYPT_KEY_BLOB .

BCRYPT_RSAFULLPRIVATE_BLOB

Esportare una coppia di chiavi pubblica/privata RSA completa. Il buffer pbOutput riceve una struttura BCRYPT_RSAKEY_BLOB immediatamente seguita dai dati chiave. Questo BLOB includerà materiale aggiuntivo della chiave rispetto al tipo di BCRYPT_RSAPRIVATE_BLOB .

BCRYPT_RSAPRIVATE_BLOB

Esportare una coppia di chiavi pubblica/privata RSA. Il buffer pbOutput riceve una struttura BCRYPT_RSAKEY_BLOB immediatamente seguita dai dati chiave.

BCRYPT_RSAPUBLIC_BLOB

Esportare una chiave pubblica RSA. Il buffer pbOutput riceve una struttura BCRYPT_RSAKEY_BLOB immediatamente seguita dai dati chiave.

LEGACY_DH_PRIVATE_BLOB

Esportare un BLOB di chiave privata Diffie-Hellman versione 3 legacy che contiene una coppia di chiavi pubblica/privata Diffie-Hellman che può essere importata tramite CryptoAPI.

LEGACY_DH_PUBLIC_BLOB

Esportare un BLOB di chiave privata Diffie-Hellman versione 3 legacy che contiene una chiave pubblica Diffie-Hellman che può essere importata tramite CryptoAPI.

LEGACY_DSA_PRIVATE_BLOB

Esportare una coppia di chiavi pubblica/privata DSA in un formato che può essere importato tramite CryptoAPI.

LEGACY_DSA_PUBLIC_BLOB

Esportare una chiave pubblica DSA in un modulo che può essere importato tramite CryptoAPI.

LEGACY_RSAPRIVATE_BLOB

Esportare una coppia di chiavi pubblica/privata RSA in un modulo che può essere importato tramite CryptoAPI.

LEGACY_RSAPUBLIC_BLOB

Esportare una chiave pubblica RSA in un formato che può essere importato tramite CryptoAPI.

NCRYPT_CIPHER_KEY_BLOB

Esportare una chiave di crittografia in una struttura NCRYPT_KEY_BLOB_HEADER .

Windows 8 e Windows Server 2012: inizia il supporto per questo valore.

NCRYPT_OPAQUETRANSPORT_BLOB

Esportare una chiave in un formato specifico per un singolo CSP ed è adatta per il trasporto. I BLOB opachi non sono trasferibili e devono essere importati usando lo stesso CSP che ha generato il BLOB.

NCRYPT_PKCS7_ENVELOPE_BLOB

Esportare un BLOB busta PKCS #7. I parametri identificati dal parametro pParameterList possono o devono contenere i parametri seguenti, come indicato dalla colonna Required o facoltativa.

Parametro Obbligatoria o facoltativa
NCRYPTBUFFER_CERT_BLOB Necessario
NCRYPTBUFFER_PKCS_ALG_OID Necessario
NCRYPTBUFFER_PKCS_ALG_PARAM Facoltativo

NCRYPT_PKCS8_PRIVATE_KEY_BLOB

Esportare un BLOB di chiave privata PKCS #8. I parametri identificati dal parametro pParameterList possono o devono contenere i parametri seguenti, come indicato dalla colonna Required o facoltativa.

Parametro Obbligatoria o facoltativa
NCRYPTBUFFER_PKCS_ALG_OID Facoltativo
NCRYPTBUFFER_PKCS_ALG_PARAM Facoltativo
NCRYPTBUFFER_PKCS_SECRET Facoltativo

NCRYPT_PROTECTED_KEY_BLOB

Esportare una chiave protetta in una struttura NCRYPT_KEY_BLOB_HEADER .

Windows 8 e Windows Server 2012: inizia il supporto per questo valore.

[in, optional] pParameterList

Indirizzo di una struttura NCryptBufferDesc che riceve informazioni sui parametri per la chiave. Questo parametro può essere NULL se queste informazioni non sono necessarie.

[out, optional] pbOutput

Indirizzo di un buffer che riceve il BLOB della chiave. Il parametro cbOutput contiene le dimensioni di questo buffer. Se questo parametro è NULL, questa funzione inserisce le dimensioni necessarie, in byte, nel DWORD a cui punta il parametro pcbResult .

[in] cbOutput

Dimensione, in byte, del buffer pbOutput .

[out] pcbResult

Indirizzo di una variabile DWORD che riceve il numero di byte copiati nel buffer pbOutput . Se il parametro pbOutput è NULL, questa funzione inserisce le dimensioni richieste, in byte, in DWORD a cui punta questo parametro.

[in] dwFlags

Flag che modificano il comportamento della funzione. Questo può essere zero o una combinazione di uno o più dei valori seguenti. Il set di flag validi è specifico per ogni provider di archiviazione delle chiavi. Il flag seguente si applica a tutti i provider.

Valore Significato
NCRYPT_SILENT_FLAG Richiede che il provider di servizi chiave (KSP) non visualizzi alcuna interfaccia utente. Se il provider deve visualizzare l'interfaccia utente da operare, la chiamata ha esito negativo e il KSP deve impostare il codice di errore NTE_SILENT_CONTEXT come ultimo errore.

Valore restituito

Restituisce un codice di stato che indica l'esito positivo o negativo della funzione.

I codici restituiti possibili includono, ma non sono limitati a, i seguenti.

Codice restituito Descrizione
ERROR_SUCCESS La funzione ha avuto esito positivo.
NTE_BAD_FLAGS Il parametro dwFlags contiene un valore non valido.
NTE_BAD_KEY_STATE La chiave specificata dal parametro hKey non è valida. La causa più comune di questo errore è che la chiave non è stata completata usando la funzione NCryptFinalizeKey .
NTE_BAD_TYPE La chiave specificata dal parametro hKey non può essere esportata nel tipo BLOB specificato dal parametro pszBlobType .
NTE_INVALID_HANDLE Il parametro hKey ohExportKey non è valido.
NTE_INVALID_PARAMETER Uno o più parametri non sono validi.

Commenti

Un servizio non deve chiamare questa funzione dalla funzione StartService. Se un servizio chiama questa funzione dalla funzione StartService , può verificarsi un deadlock e il servizio potrebbe interrompere la risposta.

Requisiti

Requisito Valore
Client minimo supportato Windows Vista [app desktop | App UWP]
Server minimo supportato Windows Server 2008 [app desktop | App UWP]
Piattaforma di destinazione Windows
Intestazione ncrypt.h
Libreria Ncrypt.lib
DLL Ncrypt.dll

Vedi anche