Função CryptEnumProviderTypesW (wincrypt.h)

Importante Essa API foi preterida. O software novo e existente deve começar a usar APIs de Próxima Geração de Criptografia. A Microsoft pode remover essa API em versões futuras.
 
A função CryptEnumProviderTypes recupera os primeiros ou próximos tipos de CSP ( provedor de serviços criptográficos ) com suporte no computador. Usada em um loop, essa função recupera em sequência todos os tipos de CSP disponíveis em um computador.

Os tipos de provedor incluem PROV_RSA_FULL, PROV_RSA_SCHANNEL e PROV_DSS.

Sintaxe

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

Parâmetros

[in] dwIndex

Índice do próximo tipo de provedor a ser enumerado.

[in] pdwReserved

Reservado para uso futuro e deve ser NULL.

[in] dwFlags

Reservado para uso futuro e deve ser zero.

[out] pdwProvType

Endereço do valor DWORD que designa o tipo de provedor enumerado.

[out] szTypeName

Um ponteiro para um buffer que recebe os dados do tipo de provedor enumerado. Essa é uma cadeia de caracteres, incluindo o caractere NULL de terminação. Alguns tipos de provedor não têm nomes de exibição e, nesse caso, nenhum nome é retornado e o valor retornado apontado por pcbTypeName é zero.

Esse parâmetro pode ser NULL para obter o tamanho do nome para fins de alocação de memória. Para obter mais informações, consulte Recuperando dados de comprimento desconhecido.

[in, out] pcbTypeName

Um ponteiro para um valor DWORD que especifica o tamanho, em bytes, do buffer apontado pelo parâmetro pszTypeName . Quando a função retorna, o valor DWORD contém o número de bytes armazenados ou a serem armazenados no buffer. Alguns tipos de provedor não têm nomes de exibição e, nesse caso, nenhum nome é retornado e o valor retornado apontado por pcbTypeName é zero.

Nota Ao processar os dados retornados no buffer, os aplicativos devem usar o tamanho real dos dados retornados. O tamanho real pode ser ligeiramente menor do que o tamanho do buffer especificado na entrada. (Na entrada, os tamanhos de buffer geralmente são especificados grandes o suficiente para garantir que os maiores dados de saída possíveis caibam no buffer.) Na saída, a variável apontada por esse parâmetro é atualizada para refletir o tamanho real dos dados copiados para o buffer.
 

Retornar valor

Se a função for bem-sucedida, o valor retornado será diferente de zero (TRUE).

Se a função falhar, o valor retornado será zero (FALSE). Para obter informações de erro estendidas, chame GetLastError.

Os códigos de erro precedidos pelo NTE são gerados pelo CSP específico que está sendo usado. Alguns códigos de erro possíveis seguem.

Código de retorno Descrição
ERROR_NO_MORE_ITEMS
Não há mais itens para enumerar.
ERROR_NOT_ENOUGH_MEMORY
O sistema operacional ficou sem memória.
NTE_BAD_FLAGS
O parâmetro dwFlags tem um valor não reconhecido.
NTE_FAIL
Algo estava errado com o registro de tipo.

Comentários

Essa função enumera os tipos de provedor disponíveis em um computador. Provedores para qualquer tipo de provedor específico podem ser enumerados usando CryptEnumProviders.

Exemplos

O exemplo a seguir mostra um loop listando todos os tipos de provedor de serviços criptográficos disponíveis.

#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 obter outro exemplo que usa a função CryptEnumProviderTypes , consulte Exemplo de programa C: enumerando provedores CSP e tipos de provedor.

Observação

O cabeçalho wincrypt.h define CryptEnumProviderTypes como um alias que seleciona automaticamente a versão ANSI ou Unicode dessa função com base na definição da constante de pré-processador UNICODE. Misturar o uso do alias neutro de codificação com código que não seja neutro em codificação pode levar a incompatibilidades que resultam em erros de compilação ou de runtime. Para obter mais informações, consulte Convenções para protótipos de função.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows XP [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2003 [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho wincrypt.h
Biblioteca Advapi32.lib
DLL Advapi32.dll

Confira também

CryptEnumProviders

Funções do provedor de serviços