Condividi tramite


Funzione CryptEnumProviderTypesA (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 CryptEnumProviderTypes recupera i primi o i tipi successivi di provider di servizi di crittografia (CSP) supportati nel computer. Utilizzata in un ciclo, questa funzione recupera in sequenza tutti i tipi CSP disponibili in un computer.

I tipi di provider includono PROV_RSA_FULL, PROV_RSA_SCHANNEL e PROV_DSS.

Sintassi

BOOL CryptEnumProviderTypesA(
  [in]      DWORD dwIndex,
  [in]      DWORD *pdwReserved,
  [in]      DWORD dwFlags,
  [out]     DWORD *pdwProvType,
  [out]     LPSTR szTypeName,
  [in, out] DWORD *pcbTypeName
);

Parametri

[in] dwIndex

Indice del tipo di 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 di provider enumerato.

[out] szTypeName

Puntatore a un buffer che riceve i dati dal tipo di provider enumerato. Si tratta di una stringa che include il carattere di terminazione NULL. Alcuni tipi di provider non hanno nomi visualizzati e in questo caso non viene restituito alcun nome e il valore restituito a cui punta pcbTypeName è zero.

Questo parametro può essere NULL per ottenere le dimensioni del nome a scopo di allocazione della memoria. Per altre informazioni, vedere Recupero di dati di lunghezza sconosciuta.

[in, out] pcbTypeName

Puntatore a un valore DWORD che specifica le dimensioni, in byte, del buffer a cui punta il parametro pszTypeName. Quando la funzione viene restituita, il valore DWORD contiene il numero di byte archiviati o da archiviare nel buffer. Alcuni tipi di provider non hanno nomi visualizzati e in questo caso non viene restituito alcun nome e il valore restituito a cui punta pcbTypeName è zero.

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_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 tipi di provider disponibili in un computer. I provider per qualsiasi tipo di provider specifico possono essere enumerati usando CryptEnumProviders.

Esempi

L'esempio seguente mostra un ciclo che elenca tutti i tipi di provider di servizi di crittografia disponibili.

#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       dwIndex;
    DWORD       dwType;
    DWORD       cbName;
    LPTSTR      pszName;

    //--------------------------------------------------------------
    //   Print header lines for provider types.

    printf("Listing Available Provider Types:\n");
    printf("Provider type\tProvider Type Name\n");
    printf("_____________\t_____________________________________\n");

    // Loop through enumerating provider types.
    dwIndex = 0;
    while(CryptEnumProviderTypes(
           dwIndex,
           NULL,
           0,
           &dwType,
           NULL,
           &cbName
           ))
    {

        //-----------------------------------------------------------
        //  cbName returns the length of the name of the next
        //  provider type. 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 type name.

        if (CryptEnumProviderTypes(
               dwIndex++,
               NULL,
               NULL,
               &dwType,   
               pszName,
               &cbName))     
        {
            printf ("     %4.0d\t%s\n",dwType, pszName);
        }
        else
        {
            printf("ERROR - CryptEnumProviderTypes\n");
            exit(1);
        }
        LocalFree(pszName);
    } // End of while loop.
}

Per un altro esempio che usa la funzione CryptEnumProviderTypes, vedere programma C di esempio: enumerazione dei provider CSP e dei tipi di provider.

Nota

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

CryptEnumProviders

funzioni del provider di servizi