CryptEnumProvidersA-Funktion (wincrypt.h)

Wichtig Diese API ist veraltet. Neue und vorhandene Software sollte mit der Verwendung von Kryptografie-APIs der nächsten Generation beginnen. Microsoft kann diese API in zukünftigen Versionen entfernen.
 
Die CryptEnumProviders-Funktion ruft den ersten oder nächsten verfügbaren kryptografischen Dienstanbieter (Kryptografiedienstanbieter , CSPs) ab. Diese Funktion wird in einer Schleife verwendet und kann nacheinander alle auf einem Computer verfügbaren CSPs abrufen.

Mögliche CSPs sind Microsoft Base Cryptographic Provider Version 1.0 und Microsoft Enhanced Cryptographic Provider Version 1.0.

Syntax

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

Parameter

[in] dwIndex

Index des nächsten Anbieters, der aufgezählt werden soll.

[in] pdwReserved

Für die zukünftige Verwendung reserviert und muss NULL sein.

[in] dwFlags

Für die zukünftige Verwendung reserviert und muss null sein.

[out] pdwProvType

Adresse des DWORD-Werts , der den Typ des aufgezählten Anbieters angibt.

[out] szProvName

Ein Zeiger auf einen Puffer, der die Daten vom enumerierten Anbieter empfängt. Dies ist eine Zeichenfolge, die das abschließende NULL-Zeichen enthält.

Dieser Parameter kann NULL sein, um die Größe des Namens für die Speicherbelegung festzulegen. Weitere Informationen finden Sie unter Abrufen von Daten mit unbekannter Länge.

[in, out] pcbProvName

Ein Zeiger auf einen DWORD-Wert , der die Größe des Puffers in Bytes angibt, auf den der parameter pszProvName verweist. Wenn die Funktion zurückgibt, enthält der DWORD-Wert die Anzahl der im Puffer gespeicherten Bytes.

Hinweis Bei der Verarbeitung der im Puffer zurückgegebenen Daten müssen Anwendungen die tatsächliche Größe der zurückgegebenen Daten verwenden. Die tatsächliche Größe kann etwas kleiner als die Größe des bei der Eingabe angegebenen Puffers sein. (Bei der Eingabe werden Puffergrößen in der Regel groß genug angegeben, um sicherzustellen, dass die größtmöglichen Ausgabedaten in den Puffer passen.) Bei der Ausgabe wird die Variable aktualisiert, auf die dieser Parameter verweist, um die tatsächliche Größe der in den Puffer kopierten Daten widerzuspiegeln.
 

Rückgabewert

Wenn die Funktion erfolgreich ist, ist der Rückgabewert ungleich null (TRUE).

Wenn die Funktion fehlschlägt, ist der Rückgabewert 0 (FALSE). Rufen Sie GetLastError auf, um erweiterte Fehlerinformationen zu erhalten.

Die von NTE vorangestellten Fehlercodes werden vom jeweiligen verwendeten CSP generiert. Es folgen einige mögliche Fehlercodes.

Rückgabecode Beschreibung
ERROR_MORE_DATA
Der Puffer pszProvName war nicht groß genug, um den Anbieternamen zu enthalten.
ERROR_NO_MORE_ITEMS
Es sind keine weiteren Elemente zu enumerieren.
ERROR_NOT_ENOUGH_MEMORY
Auf dem Betriebssystem ist der Arbeitsspeicher nicht mehr vorhanden.
NTE_BAD_FLAGS
Der dwFlags-Parameter hat einen unbekannten Wert.
NTE_FAIL
Bei der Typregistrierung war ein Fehler aufgetreten.

Hinweise

Diese Funktion listet die anbieter auf, die auf einem Computer verfügbar sind. Die Anbietertypen können mithilfe von CryptEnumProviderTypes aufgezählt werden.

Beispiele

Das folgende Beispiel zeigt eine Schleife, die alle verfügbaren Kryptografiedienstanbieter auflistet. Ein weiteres Beispiel, das die CryptEnumProviders-Funktion verwendet, finden Sie unter Beispiel-C-Programm: Aufzählen von CSP-Anbietern und Anbietertypen.

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

Hinweis

Der wincrypt.h-Header definiert CryptEnumProviders als Alias, der die ANSI- oder Unicode-Version dieser Funktion basierend auf der Definition der UNICODE-Präprozessorkonstante automatisch auswählt. Das Mischen der Verwendung des codierungsneutralen Alias mit Code, der nicht Codierungsneutral ist, kann zu Nichtübereinstimmungen führen, die zu Kompilierungs- oder Laufzeitfehlern führen. Weitere Informationen finden Sie unter Konventionen für Funktionsprototypen.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows XP [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2003 [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile wincrypt.h
Bibliothek Advapi32.lib
DLL Advapi32.dll

Weitere Informationen

CryptEnumProviderTypes

Dienstanbieterfunktionen