Compartir a través de


Función CryptEnumProviderTypesA (wincrypt.h)

importante Esta API está en desuso. El software nuevo y existente debe empezar a usar las API de Cryptography Next Generation. Microsoft puede quitar esta API en futuras versiones.
 
La función CryptEnumProviderTypes recupera los primeros o siguientes tipos de proveedor de servicios criptográficos (CSP) compatibles con el equipo. Esta función se usa en un bucle y recupera en secuencia todos los tipos de CSP disponibles en un equipo.

Los tipos de proveedor incluyen PROV_RSA_FULL, PROV_RSA_SCHANNEL y PROV_DSS.

Sintaxis

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

Parámetros

[in] dwIndex

Índice del siguiente tipo de proveedor que se va a enumerar.

[in] pdwReserved

Reservado para uso futuro y debe ser NULL.

[in] dwFlags

Reservado para uso futuro y debe ser cero.

[out] pdwProvType

Dirección del DWORD valor que designa el tipo de proveedor enumerado.

[out] szTypeName

Puntero a un búfer que recibe los datos del tipo de proveedor enumerado. Se trata de una cadena que incluye el carácter de de terminación NULL. Algunos tipos de proveedor no tienen nombres para mostrar y, en este caso, no se devuelve ningún nombre y el valor devuelto al que apunta pcbTypeName es cero.

Este parámetro puede ser NULL para obtener el tamaño del nombre con fines de asignación de memoria. Para obtener más información, vea recuperar datos de longitud desconocida.

[in, out] pcbTypeName

Puntero a un valor DWORD que especifica el tamaño, en bytes, del búfer al que apunta el parámetro pszTypeName. Cuando la función devuelve, el DWORD valor contiene el número de bytes almacenados o que se van a almacenar en el búfer. Algunos tipos de proveedor no tienen nombres para mostrar y, en este caso, no se devuelve ningún nombre y el valor devuelto al que apunta pcbTypeName es cero.

Nota Al procesar los datos devueltos en el búfer, las aplicaciones deben usar el tamaño real de los datos devueltos. El tamaño real puede ser ligeramente menor que el tamaño del búfer especificado en la entrada. (En la entrada, los tamaños de búfer suelen especificarse lo suficientemente grandes como para asegurarse de que los datos de salida más grandes posibles se ajusten al búfer). En la salida, la variable a la que apunta este parámetro se actualiza para reflejar el tamaño real de los datos copiados en el búfer.
 

Valor devuelto

Si la función se ejecuta correctamente, el valor devuelto es distinto de cero (TRUE).

Si se produce un error en la función, el valor devuelto es cero (FALSE). Para obtener información de error extendida, llame a GetLastError.

Los códigos de error precedidos por NTE se generan mediante el CSP en particular que se usa. A continuación se indican algunos códigos de error posibles.

Código devuelto Descripción
ERROR_NO_MORE_ITEMS
No hay más elementos que enumerar.
ERROR_NOT_ENOUGH_MEMORY
El sistema operativo se quedó sin memoria.
NTE_BAD_FLAGS
El parámetro dwFlags tiene un valor no reconocido.
NTE_FAIL
Algo estaba mal con el registro de tipos.

Observaciones

Esta función enumera los tipos de proveedor disponibles en un equipo. Los proveedores para cualquier tipo de proveedor específico se pueden enumerar mediante CryptEnumProviders.

Ejemplos

En el ejemplo siguiente se muestra un bucle que muestra todos los tipos de proveedor de servicios criptográficos disponibles.

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

Para obtener otro ejemplo que usa la función CryptEnumProviderTypes, vea Programa C de ejemplo: Enumeración de proveedores de CSP y tipos de proveedor.

Nota

El encabezado wincrypt.h define CryptEnumProviderTypes como alias que selecciona automáticamente la versión ANSI o Unicode de esta función en función de la definición de la constante de preprocesador UNICODE. La combinación del uso del alias neutral de codificación con código que no es neutral de codificación puede dar lugar a errores de coincidencia que dan lugar a errores de compilación o tiempo de ejecución. Para obtener más información, vea Conventions for Function Prototypes.

Requisitos

Requisito Valor
cliente mínimo admitido Windows XP [solo aplicaciones de escritorio]
servidor mínimo admitido Windows Server 2003 [solo aplicaciones de escritorio]
de la plataforma de destino de Windows
encabezado de wincrypt.h
biblioteca de Advapi32.lib
DLL de Advapi32.dll

Consulte también

CryptEnumProviders

funciones del proveedor de servicios de