Condividi tramite


Funzione CryptGetDefaultProviderA (wincrypt.h)

Importante Questa API è deprecata. Il software nuovo e esistente deve iniziare a usare le API di nuova generazione di crittografia. Microsoft può rimuovere questa API nelle versioni future.
 
La funzione CryptGetDefaultProvider trova il provider di servizi di crittografia predefinito (CSP) di un tipo di provider specificato per il computer locale o l'utente corrente. Il nome del CSP predefinito per il tipo di provider specificato nel parametro dwProvType viene restituito nel buffer pszProvName .

Sintassi

BOOL CryptGetDefaultProviderA(
  [in]      DWORD dwProvType,
  [in]      DWORD *pdwReserved,
  [in]      DWORD dwFlags,
  [out]     LPSTR pszProvName,
  [in, out] DWORD *pcbProvName
);

Parametri

[in] dwProvType

Tipo di provider per il quale è necessario trovare il nome CSP predefinito.

I tipi di provider definiti sono i seguenti:

[in] pdwReserved

Questo parametro è riservato per l'uso futuro e deve essere NULL.

[in] dwFlags

I valori di flag seguenti sono definiti.

Valore Significato
CRYPT_USER_DEFAULT
0x00000002
Restituisce il CSP predefinito del contesto utente del tipo specificato.
CRYPT_MACHINE_DEFAULT
0x00000001
Restituisce il CSP predefinito del computer del tipo specificato.

[out] pszProvName

Puntatore a un buffer di stringa di caratteri con terminazione null per ricevere il nome del CSP predefinito.

Per trovare le dimensioni del buffer per scopi di allocazione della memoria, questo parametro può essere NULL. Per altre informazioni, vedere Recupero dei dati di lunghezza sconosciuta.

[in, out] pcbProvName

Puntatore a un valore DWORD che specifica le dimensioni, in byte, del buffer a cui punta il parametro pszProvName . Quando la funzione restituisce, il valore DWORD contiene il numero di byte archiviati o da archiviare nel buffer.

Nota Quando si elaborano i dati restituiti nel buffer, le applicazioni devono usare le dimensioni effettive dei dati restituiti. Le dimensioni effettive possono essere leggermente inferiori rispetto alle dimensioni del buffer specificato nell'input. In base all'input, le dimensioni del buffer vengono in genere specificate abbastanza grandi per garantire che i dati di output più grandi siano adatti al buffer. Nell'output la variabile a cui punta questo parametro viene aggiornata per riflettere le dimensioni effettive dei dati copiati nel buffer.
 

Valore restituito

Se la funzione ha esito positivo, il valore restituito è diverso da zero (TRUE).

Se la funzione ha esito negativo, il valore restituito è zero (FALSE). Per informazioni sull'errore estese, chiamare GetLastError.

Il codice di errore preceduto dall'NTE viene generato dal particolare CSP usato. I codici di errore possibili includono quanto segue.

Codice restituito Descrizione
ERROR_INVALID_PARAMETER
Uno dei parametri contiene un valore non valido. Questo è più spesso un puntatore che non è valido.
ERROR_MORE_DATA
Il buffer per il nome non è abbastanza grande.
ERROR_NOT_ENOUGH_MEMORY
Il sistema operativo ha esaurito la memoria.
NTE_BAD_FLAGS
Il parametro dwFlags ha un valore non riconosciuto.

Commenti

Questa funzione determina quale CSP installato è attualmente impostato come impostazione predefinita per il computer locale o l'utente corrente. Queste informazioni vengono spesso visualizzate all'utente.

Esempio

Nell'esempio seguente viene recuperato il nome del CSP predefinito per il tipo di provider PROV_RSA_FULL. Per un altro esempio che usa questa funzione, vedere Programma C di esempio: enumerazione di provider CSP e tipi di provider.

#include <stdio.h>
#include <windows.h>
#include <Wincrypt.h>
#pragma comment(lib, "crypt32.lib")

void main()
{

    DWORD       cbProvName=0;
    LPTSTR      pbProvName=NULL;
    // Copyright (C) Microsoft.  All rights reserved.
    // Get the length of the RSA_FULL default provider name.
    if (!(CryptGetDefaultProvider(
         PROV_RSA_FULL, 
         NULL, 
         CRYPT_MACHINE_DEFAULT,
         NULL, 
         &cbProvName))) 
    { 
      printf("Error getting the length of the default "
          "provider name.\n");
      exit(1);
    }

    // Allocate local memory for the name of the default provider.
    if (!(pbProvName = (LPTSTR)LocalAlloc(LMEM_ZEROINIT, 
        cbProvName)))
    {
        printf("Error during memory allocation for "
            "provider name.\n");
        exit(1);
    }

    // Get the default provider name.
    if (CryptGetDefaultProvider(
        PROV_RSA_FULL, 
        NULL, 
        CRYPT_MACHINE_DEFAULT,
        pbProvName,
        &cbProvName)) 
    {
        printf("The default provider name is %s\n",pbProvName);
    }
    else
    {
        printf("Getting the name of the provider failed.\n");
        exit(1);
    }

    // Free resources when done.
    LocalFree(pbProvName);

}

Nota

L'intestazione wincrypt.h definisce CryptGetDefaultProvider come alias che seleziona automaticamente la versione ANSI o Unicode di questa funzione in base alla definizione della costante preprocessore UNICODE. La combinazione dell'utilizzo dell'alias di codifica neutrale con il codice che non è neutrale dalla codifica può causare errori di corrispondenza che causano errori di compilazione o runtime. Per altre informazioni, vedere Convenzioni per i prototipi di funzione.

Requisiti

   
Client minimo supportato Windows XP [solo app desktop]
Server minimo supportato Windows Server 2003 [solo app desktop]
Piattaforma di destinazione Windows
Intestazione wincrypt.h
Libreria Advapi32.lib
DLL Advapi32.dll

Vedi anche

CryptSetProvider

CryptSetProviderEx

Funzioni del provider di servizi