Compartir a través de


Función CryptGetDefaultProviderA (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 CryptGetDefaultProvider busca el proveedor de servicios criptográficos predeterminado (CSP) de un tipo de proveedor especificado para el equipo local o el usuario actual. El nombre del CSP predeterminado para el tipo de proveedor especificado en el parámetro dwProvType se devuelve en el búfer de pszProvName.

Sintaxis

BOOL CryptGetDefaultProviderA(
  [in]      DWORD dwProvType,
  [in]      DWORD *pdwReserved,
  [in]      DWORD dwFlags,
  [out]     LPSTR pszProvName,
  [in, out] DWORD *pcbProvName
);

Parámetros

[in] dwProvType

Tipo de proveedor para el que se va a encontrar el nombre de CSP predeterminado.

Los tipos de proveedor definidos son los siguientes:

[in] pdwReserved

Este parámetro está reservado para uso futuro y debe ser NULL.

[in] dwFlags

Se definen los siguientes valores de marca.

Valor Significado
CRYPT_USER_DEFAULT
0x00000002
Devuelve el CSP predeterminado de contexto de usuario del tipo especificado.
CRYPT_MACHINE_DEFAULT
0x00000001
Devuelve el CSP predeterminado del equipo del tipo especificado.

[out] pszProvName

Puntero a un búfer de cadenas de caracteres terminada en NULL para recibir el nombre del CSP predeterminado.

Para buscar el tamaño del búfer con fines de asignación de memoria, este parámetro puede ser NULL. Para obtener más información, vea recuperar datos de longitud desconocida.

[in, out] pcbProvName

Puntero a un valor DWORD que especifica el tamaño, en bytes, del búfer al que apunta el parámetro pszProvName. 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.

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.

El código de error precedido por NTE lo genera el CSP en particular que se usa. Los códigos de error posibles incluyen lo siguiente.

Código devuelto Descripción
ERROR_INVALID_PARAMETER
Uno de los parámetros contiene un valor que no es válido. Suele ser un puntero que no es válido.
ERROR_MORE_DATA
El búfer del nombre no es lo suficientemente grande.
ERROR_NOT_ENOUGH_MEMORY
El sistema operativo se quedó sin memoria.
NTE_BAD_FLAGS
El parámetro dwFlags tiene un valor no reconocido.

Observaciones

Esta función determina qué CSP instalado se establece actualmente como valor predeterminado para el equipo local o el usuario actual. Esta información suele mostrarse al usuario.

Ejemplos

En el ejemplo siguiente se recupera el nombre del CSP predeterminado para el tipo de proveedor de PROV_RSA_FULL. Para obtener otro ejemplo que use esta función, vea Programa C de ejemplo: Enumeración de proveedores de CSP y tipos de proveedor.

#include <stdio.h>
#include <windows.h>
#include <Wincrypt.h>
#pragma comment(lib, "crypt32.lib")

void main()
{

    DWORD       cbProvName=0;
    LPTSTR      pbProvName=NULL;
    // Copyright (C) Microsoft.  All rights reserved.
    // Get the length of the RSA_FULL default provider name.
    if (!(CryptGetDefaultProvider(
         PROV_RSA_FULL, 
         NULL, 
         CRYPT_MACHINE_DEFAULT,
         NULL, 
         &cbProvName))) 
    { 
      printf("Error getting the length of the default "
          "provider name.\n");
      exit(1);
    }

    // Allocate local memory for the name of the default provider.
    if (!(pbProvName = (LPTSTR)LocalAlloc(LMEM_ZEROINIT, 
        cbProvName)))
    {
        printf("Error during memory allocation for "
            "provider name.\n");
        exit(1);
    }

    // Get the default provider name.
    if (CryptGetDefaultProvider(
        PROV_RSA_FULL, 
        NULL, 
        CRYPT_MACHINE_DEFAULT,
        pbProvName,
        &cbProvName)) 
    {
        printf("The default provider name is %s\n",pbProvName);
    }
    else
    {
        printf("Getting the name of the provider failed.\n");
        exit(1);
    }

    // Free resources when done.
    LocalFree(pbProvName);

}

Nota

El encabezado wincrypt.h define CryptGetDefaultProvider 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

CryptSetProvider

CryptSetProviderEx

funciones del proveedor de servicios de