Condividi tramite


Funzione CryptEnumProvidersA (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 CryptEnumProviders recupera il primo o il successivo provider di servizi di crittografia disponibili (CSP). Usata in un ciclo, questa funzione può recuperare in sequenza tutti i CSP disponibili in un computer.

I provider di servizi di configurazione possibili includono Microsoft Base Cryptographic Provider versione 1.0 e Microsoft Enhanced Cryptographic Provider versione 1.0.

Sintassi

BOOL CryptEnumProvidersA(
  [in]      DWORD dwIndex,
  [in]      DWORD *pdwReserved,
  [in]      DWORD dwFlags,
  [out]     DWORD *pdwProvType,
  [out]     LPSTR szProvName,
  [in, out] DWORD *pcbProvName
);

Parametri

[in] dwIndex

Indice del provider successivo da enumerare.

[in] pdwReserved

Riservato per uso futuro e deve essere NULL.

[in] dwFlags

Riservato per uso futuro e deve essere zero.

[out] pdwProvType

Indirizzo dell'DWORD valore che designa il tipo del provider enumerato.

[out] szProvName

Puntatore a un buffer che riceve i dati dal provider enumerato. Si tratta di una stringa che include il carattere Null di terminazione.

Questo parametro può essere NULL per impostare le dimensioni del nome a scopo di allocazione della memoria. 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 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.

I codici di errore preceduti dall'NTE vengono generati dal CSP specifico usato. Di seguito sono riportati alcuni possibili codici di errore.

Codice restituito Descrizione
ERROR_MORE_DATA
Il buffer pszProvName non è sufficiente per contenere il nome del provider.
ERROR_NO_MORE_ITEMS
Non sono presenti altri elementi da enumerare.
ERROR_NOT_ENOUGH_MEMORY
Memoria esaurita del sistema operativo.
NTE_BAD_FLAGS
Il parametro dwFlags ha un valore non riconosciuto.
NTE_FAIL
Si è verificato un problema con la registrazione del tipo.

Osservazioni

Questa funzione enumera i provider disponibili in un computer. I tipi di provider possono essere enumerati usando CryptEnumProviderTypes.

Esempi

L'esempio seguente mostra un ciclo che elenca tutti i provider di servizi di crittografia disponibili. Per un altro esempio che usa la funzione CryptEnumProviders, 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, "advapi32.lib")

void main()
{

    //---------------------------------------------------------------
    // Copyright (C) Microsoft.  All rights reserved.
    // Declare and initialize variables.

    DWORD       cbName;
    DWORD       dwType;
    DWORD       dwIndex;
    CHAR        *pszName = NULL; 

    // Print header lines for providers.
    printf("Listing Available Providers:\n");
    printf("Provider type\tProvider Name\n");
    printf("_____________\t__________________"
        "___________________\n");   

    //--------------------------------------------------------------- 
    // Loop through enumerating providers.
    dwIndex = 0;
    while(CryptEnumProviders(
           dwIndex,
           NULL,
           0,
           &dwType,
           NULL,
           &cbName
           ))
    {

        //-----------------------------------------------------------
        //  cbName returns the length of the name of the next 
        //  provider. Allocate memory in a buffer to retrieve 
        //  that name.

        if (!(pszName = (LPTSTR)LocalAlloc(LMEM_ZEROINIT, cbName)))
        {
           printf("ERROR - LocalAlloc failed\n");
           exit(1);
        }
        //-----------------------------------------------------------
        //  Get the provider name.
        if (CryptEnumProviders(
               dwIndex++,
               NULL,
               0,
               &dwType,
               pszName,
               &cbName
               ))
        {
            printf ("     %4.0d\t%s\n",dwType, pszName);
        }
        else
        {
            printf("ERROR - CryptEnumProviders failed.\n");
            exit(1);
        }
        LocalFree(pszName);

    } // End of while loop

    printf("\nProvider types and provider names "
        "have been listed.\n");
}

Nota

L'intestazione wincrypt.h definisce CryptEnumProviders 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

CryptEnumProviderTypes

funzioni del provider di servizi