Condividi tramite


Funzione CryptGetDefaultProviderA (wincrypt.h)

Importante Questa API è deprecata. Il software nuovo ed esistente deve iniziare a usare API Di nuova generazione di crittografia. Microsoft potrebbe 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 provider 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 trovare il nome CSP predefinito.

I tipi di provider definiti sono i seguenti:

[in] pdwReserved

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

[in] dwFlags

Vengono definiti i valori di flag seguenti.

Valore Significato
CRYPT_USER_DEFAULT
0x00000002
Restituisce il provider di servizi di configurazione predefinito del contesto utente del tipo specificato.
CRYPT_MACHINE_DEFAULT
0x00000001
Restituisce il provider di servizi di configurazione predefinito del computer del tipo specificato.

[out] pszProvName

Puntatore a un buffer di stringhe di caratteri con terminazione Null per ricevere il nome del provider di servizi di configurazione predefinito.

Per trovare le dimensioni del buffer a scopo di allocazione della memoria, questo parametro può essere NULL. Per altre informazioni, vedere Recupero di 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 viene restituita, il valore DWORD contiene il numero di byte archiviati o da archiviare nel buffer.

Nota Durante l'elaborazione dei 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 caso di input, le dimensioni del buffer vengono in genere specificate in modo sufficientemente grande per garantire che i dati di output più grandi si adattino al buffer. Nell'output, la variabile a cui punta questo parametro viene aggiornata in modo da 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 sugli errori estesi, chiamare GetLastError.

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

Codice restituito Descrizione
ERROR_INVALID_PARAMETER
Uno dei parametri contiene un valore non valido. Si tratta più spesso di un puntatore non valido.
ERROR_MORE_DATA
Il buffer per il nome non è sufficientemente grande.
ERROR_NOT_ENOUGH_MEMORY
Memoria esaurita del sistema operativo.
NTE_BAD_FLAGS
Il parametro dwFlags ha un valore non riconosciuto.

Osservazioni

Questa funzione determina quale provider di servizi di configurazione installato è attualmente impostato come predefinito per il computer locale o l'utente corrente. Queste informazioni vengono spesso visualizzate all'utente.

Esempi

Nell'esempio seguente viene recuperato il nome del provider CSP predefinito per il tipo di provider PROV_RSA_FULL. Per un altro esempio che usa questa funzione, vedere Programma C di esempio: enumerazione dei provider CSP e dei 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 del preprocessore UNICODE. La combinazione dell'utilizzo dell'alias indipendente dalla codifica con il codice non indipendente dalla codifica può causare mancate corrispondenze che generano errori di compilazione o di runtime. Per altre informazioni, vedere convenzioni di per i prototipi di funzioni.

Fabbisogno

Requisito Valore
client minimo supportato Windows XP [solo app desktop]
server minimo supportato Windows Server 2003 [solo app desktop]
piattaforma di destinazione Finestre
intestazione wincrypt.h
libreria Advapi32.lib
dll Advapi32.dll

Vedere anche

CryptSetProvider

CryptSetProviderEx

funzioni del provider di servizi