Funzione CryptEnumProviderTypesW (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 CryptEnumProviderTypes recupera i tipi primi o successivi di provider di servizi di crittografia supportati nel computer. Usato 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 CryptEnumProviderTypesW(
  [in]      DWORD  dwIndex,
  [in]      DWORD  *pdwReserved,
  [in]      DWORD  dwFlags,
  [out]     DWORD  *pdwProvType,
  [out]     LPWSTR szTypeName,
  [in, out] DWORD  *pcbTypeName
);

Parametri

[in] dwIndex

Indice del tipo di provider successivo da enumerare.

[in] pdwReserved

Riservato per l'uso futuro e deve essere NULL.

[in] dwFlags

Riservato per l'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 terminante. Alcuni tipi di provider non hanno nomi visualizzati e in questo caso non viene restituito alcun nome e il valore restituito puntato a pcbTypeName è zero.

Questo parametro può essere NULL per ottenere le dimensioni del nome ai fini dell'allocazione della memoria. Per altre informazioni, vedere Recupero dei 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 restituisce, 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 puntato a 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 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.

I codici di errore preceduti dall'NTE vengono generati dal particolare CSP usato. Alcuni codici di errore possibili seguono.

Codice restituito Descrizione
ERROR_NO_MORE_ITEMS
Non sono presenti più elementi da enumerare.
ERROR_NOT_ENOUGH_MEMORY
Il sistema operativo ha esaurito la memoria.
NTE_BAD_FLAGS
Il parametro dwFlags ha un valore non riconosciuto.
NTE_FAIL
Si è verificato un errore nella 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

Nell'esempio seguente viene illustrato un elenco di cicli di tutti i tipi di provider di servizi crittografici 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 di provider e tipi di provider CSP.

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

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