Partager via


Fonction CryptEnumProvidersA (wincrypt.h)

Important Cette API est déconseillée. Les logiciels nouveaux et existants doivent commencer à utiliser les API de nouvelle génération de chiffrement. Microsoft peut supprimer cette API dans les versions ultérieures.
 
La fonction CryptEnumProviders récupère le premier ou le prochain fournisseur de services de chiffrement (CSP) disponible. Utilisée dans une boucle, cette fonction peut récupérer en séquence tous les fournisseurs de solutions cloud disponibles sur un ordinateur.

Les fournisseurs de services partagés possibles incluent le fournisseur de chiffrement de base Microsoft version 1.0 et le fournisseur de chiffrement Microsoft amélioré version 1.0.

Syntaxe

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

Paramètres

[in] dwIndex

Index du fournisseur suivant à énumérer.

[in] pdwReserved

Réservé pour une utilisation ultérieure et doit avoir la valeur NULL.

[in] dwFlags

Réservé à une utilisation future et doit être égal à zéro.

[out] pdwProvType

Adresse de la valeur DWORD désignant le type du fournisseur énuméré.

[out] szProvName

Pointeur vers une mémoire tampon qui reçoit les données du fournisseur énuméré. Il s’agit d’une chaîne incluant le caractère null de fin.

Ce paramètre peut avoir la valeur NULL pour définir la taille du nom à des fins d’allocation de mémoire. Pour plus d’informations, consultez Récupération de données de longueur inconnue.

[in, out] pcbProvName

Pointeur vers une valeur DWORD spécifiant la taille, en octets, de la mémoire tampon pointée par le paramètre pszProvName . Lorsque la fonction retourne, la valeur DWORD contient le nombre d’octets stockés dans la mémoire tampon.

Note Lors du traitement des données retournées dans la mémoire tampon, les applications doivent utiliser la taille réelle des données retournées. La taille réelle peut être légèrement inférieure à la taille de la mémoire tampon spécifiée lors de l’entrée. (En entrée, les tailles de mémoire tampon sont généralement spécifiées suffisamment grandes pour garantir que les données de sortie les plus volumineuses possibles s’intègrent dans la mémoire tampon.) En sortie, la variable pointée par ce paramètre est mise à jour pour refléter la taille réelle des données copiées dans la mémoire tampon.
 

Valeur retournée

Si la fonction réussit, la valeur de retour est différente de zéro (TRUE).

Si la fonction échoue, la valeur de retour est zéro (FALSE). Pour obtenir des informations d’erreur étendues, appelez GetLastError.

Les codes d’erreur préfacés par NTE sont générés par le fournisseur de solutions cloud en cours d’utilisation. Certains codes d’erreur possibles suivent.

Code de retour Description
ERROR_MORE_DATA
La mémoire tampon pszProvName n’était pas assez grande pour contenir le nom du fournisseur.
ERROR_NO_MORE_ITEMS
Il n’y a plus d’éléments à énumérer.
ERROR_NOT_ENOUGH_MEMORY
Le système d’exploitation a manqué de mémoire.
NTE_BAD_FLAGS
Le paramètre dwFlags a une valeur non reconnue.
NTE_FAIL
Il y avait un problème avec l’inscription de type.

Remarques

Cette fonction énumère les fournisseurs disponibles sur un ordinateur. Les types de fournisseurs peuvent être énumérés à l’aide de CryptEnumProviderTypes.

Exemples

L’exemple suivant montre une boucle répertoriant tous les fournisseurs de services de chiffrement disponibles. Pour un autre exemple qui utilise la fonction CryptEnumProviders , consultez Exemple de programme C : Énumération des types de fournisseurs et de fournisseurs CSP.

#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");
}

Notes

L’en-tête wincrypt.h définit CryptEnumProviders comme un alias qui sélectionne automatiquement la version ANSI ou Unicode de cette fonction en fonction de la définition de la constante de préprocesseur UNICODE. Le mélange de l’utilisation de l’alias neutre en encodage avec du code qui n’est pas neutre en encodage peut entraîner des incompatibilités qui entraînent des erreurs de compilation ou d’exécution. Pour plus d’informations, consultez Conventions pour les prototypes de fonction.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows XP [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2003 [applications de bureau uniquement]
Plateforme cible Windows
En-tête wincrypt.h
Bibliothèque Advapi32.lib
DLL Advapi32.dll

Voir aussi

CryptEnumProviderTypes

Fonctions du fournisseur de services