Funzione CryptEnumProviderTypesA (wincrypt.h)

Importante Questa API è deprecata. Il software nuovo ed esistente deve iniziare a usare le API cryptography next generation. Microsoft potrebbe rimuovere questa API nelle versioni future.
 
La funzione CryptEnumProviderTypes recupera i primi o successivi tipi 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 del valore DWORD 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 NULL di terminazione. 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 ai fini dell'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 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 alle dimensioni del buffer specificato nell'input. In caso di input, le dimensioni del buffer vengono in genere specificate sufficientemente grandi per garantire che i dati di output più grandi possibili 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 più presenti elementi da enumerare.
ERROR_NOT_ENOUGH_MEMORY
Memoria insufficiente 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.

Commenti

Questa funzione enumera i tipi di provider disponibili in un computer. I provider per qualsiasi tipo di provider specifico possono essere enumerati usando CryptEnumProviders.

Esempio

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 Esempio di programma C: enumerazione di provider CSP e 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 che non è indipendente dalla codifica può causare mancate corrispondenze che generano errori di compilazione o di runtime. Per altre informazioni, vedere Convenzioni per i prototipi di funzioni.

Requisiti

Requisito Valore
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

CryptEnumProviders

Funzioni del provider di servizi