Funzione CryptEnumProvidersW (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 CryptEnumProviders recupera i provider di servizi di crittografia disponibili per primi o successivi. Utilizzata in un ciclo, questa funzione può recuperare in sequenza tutti i CSP disponibili in un computer.

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

Sintassi

BOOL CryptEnumProvidersW(
  [in]      DWORD  dwIndex,
  [in]      DWORD  *pdwReserved,
  [in]      DWORD  dwFlags,
  [out]     DWORD  *pdwProvType,
  [out]     LPWSTR 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 del valore DWORD 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 ai fini dell'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 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_MORE_DATA
Il buffer pszProvName non è sufficientemente grande da contenere il nome del provider.
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 provider disponibili in un computer. I tipi di provider possono essere enumerati usando CryptEnumProviderTypes.

Esempio

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 Esempio di programma C: enumerazione di provider CSP e 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 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

CryptEnumProviderTypes

Funzioni del provider di servizi