Freigeben über


CryptEnumProviderTypesW-Funktion (wincrypt.h)

Wichtig Diese API ist veraltet. Neue und vorhandene Software sollten mit der Verwendung von Kryptografie-APIs der nächsten Generation beginnen. Microsoft kann diese API in zukünftigen Releases entfernen.
 
Die CryptEnumProviderTypes-Funktion ruft die ersten oder nächsten Typen von Kryptografiedienstanbietern (CSP) ab, die auf dem Computer unterstützt werden. Diese Funktion wird in einer Schleife verwendet und ruft nacheinander alle auf einem Computer verfügbaren CSP-Typen ab.

Anbietertypen umfassen PROV_RSA_FULL, PROV_RSA_SCHANNEL und PROV_DSS.

Syntax

BOOL CryptEnumProviderTypesW(
  [in]      DWORD  dwIndex,
  [in]      DWORD  *pdwReserved,
  [in]      DWORD  dwFlags,
  [out]     DWORD  *pdwProvType,
  [out]     LPWSTR szTypeName,
  [in, out] DWORD  *pcbTypeName
);

Parameter

[in] dwIndex

Index des nächsten Anbietertyps, der aufgelistet 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 aufgezählten Anbietertyp vorgibt.

[out] szTypeName

Ein Zeiger auf einen Puffer, der die Daten vom aufgezählten Anbietertyp empfängt. Dies ist eine Zeichenfolge, die das beendende NULL-Zeichen enthält. Einige Anbietertypen haben keine Anzeigenamen, und in diesem Fall wird kein Name zurückgegeben, und der zurückgegebene Wert, auf den von pcbTypeName verwiesen wird, ist 0.

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

[in, out] pcbTypeName

Ein Zeiger auf einen DWORD-Wert , der die Größe des Puffers in Bytes angibt, auf den der parameter pszTypeName verweist. Wenn die Funktion zurückgibt, enthält der DWORD-Wert die Anzahl der Bytes, die im Puffer gespeichert oder gespeichert werden sollen. Einige Anbietertypen haben keine Anzeigenamen, und in diesem Fall wird kein Name zurückgegeben, und der zurückgegebene Wert, auf den von pcbTypeName verwiesen wird, ist 0.

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 sein als die Größe des Puffers, der bei der Eingabe angegeben wird. (Bei der Eingabe werden Puffergrößen normalerweise 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 nonzero (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 verwendeten CSP generiert. Es folgen einige mögliche Fehlercodes.

Rückgabecode Beschreibung
ERROR_NO_MORE_ITEMS
Es gibt keine weiteren Elemente, die aufgelistet werden müssen.
ERROR_NOT_ENOUGH_MEMORY
Dem Betriebssystem war der Arbeitsspeicher nicht mehr vorhanden.
NTE_BAD_FLAGS
Der dwFlags-Parameter verfügt über einen nicht erkannten Wert.
NTE_FAIL
Bei der Typregistrierung war ein Fehler aufgetreten.

Hinweise

Diese Funktion listet die anbietertypen auf, die auf einem Computer verfügbar sind. Anbieter für einen bestimmten Anbietertyp können mithilfe von CryptEnumProviders aufgelistet werden.

Beispiele

Das folgende Beispiel zeigt eine Schleife, die alle verfügbaren Kryptografiedienstanbietertypen auflistet.

#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.
}

Ein weiteres Beispiel, das die CryptEnumProviderTypes-Funktion verwendet, finden Sie unter Beispiel-C-Programm: Aufzählung von CSP-Anbietern und Anbietertypen.

Hinweis

Der wincrypt.h-Header definiert CryptEnumProviderTypes als Alias, der automatisch die ANSI- oder Unicode-Version dieser Funktion basierend auf der Definition der UNICODE-Präprozessorkonstante auswählt. Das Mischen der Verwendung des codierungsneutralen Alias mit nicht codierungsneutralem Code 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

CryptEnumProviders

Dienstanbieterfunktionen