Compartilhar via


Função CertGetNameStringA (wincrypt.h)

A função CertGetNameString obtém o nome do assunto ou emissor de uma estrutura de CERT_CONTEXT de certificado e a converte em uma cadeia de caracteres nulaterminada.

Sintaxe

DWORD CertGetNameStringA(
  [in]  PCCERT_CONTEXT pCertContext,
  [in]  DWORD          dwType,
  [in]  DWORD          dwFlags,
  [in]  void           *pvTypePara,
  [out] LPSTR          pszNameString,
  [in]  DWORD          cchNameString
);

Parâmetros

[in] pCertContext

Um ponteiro para um contexto de certificado CERT_CONTEXT que inclui um assunto e um nome emissor a serem convertidos.

[in] dwType

DWORD indicando como o nome deve ser encontrado e como a saída deve ser formatada.

Valor Significado
CERT_NAME_EMAIL_TYPE
1
Se o certificado tiver uma extensão Nome Alternativo da Entidade ou Nome Alternativo do Emissor, usará a primeira opção rfc822Name. Se nenhuma opção rfc822Name for encontrada na extensão, usará o campo Nome da Entidade para o OID de Email. Se rfc822Name ou o Email OID for encontrado, use a cadeia de caracteres. Caso contrário, retorna uma cadeia de caracteres vazia (a contagem de caracteres retornada é 1). pvTypePara não é usado e é definido como NULL.
CERT_NAME_RDN_TYPE
2
Converte o BLOB de Nome da Entidade chamando CertNameToStr. pvTypePara aponta para um DWORD que contém o dwStrType passado para CertNameToStr. Se o campo Nome da Entidade estiver vazio e o certificado tiver uma extensão Nome Alternativo da Entidade, usará a escolha nome do primeiro diretório de CertNameToStr.
CERT_NAME_ATTR_TYPE
3
pvTypePara aponta para um identificador de objeto (OID) especificando o atributo de nome a ser retornado. Por exemplo, se pvTypePara for szOID_COMMON_NAME, usará o membro Nome da Entidade. Se o membro Nome da Entidade estiver vazio e o certificado tiver uma extensão Nome Alternativo da Entidade, usará a primeira opção directoryName.
CERT_NAME_SIMPLE_DISPLAY_TYPE
4
Itera pela seguinte lista de atributos de nome e usa o Nome da Entidade ou a extensão Nome Alternativo da Entidade para a primeira ocorrência de: szOID_COMMON_NAME, szOID_ORGANIZATIONAL_UNIT_NAME, szOID_ORGANIZATION_NAME ou szOID_RSA_emailAddr.

Se um desses atributos não for encontrado, usará a extensão Nome Alternativo da Entidade para uma opção rfc822Name. Se ainda não houver correspondência, usará o primeiro atributo.

pvTypePara não é usado e é definido como NULL.

CERT_NAME_FRIENDLY_DISPLAY_TYPE
5
Verifica o certificado de uma propriedade CERT_FRIENDLY_NAME_PROP_ID. Se o certificado tiver essa propriedade, ele será retornado. Se o certificado não tiver a propriedade, o CERT_NAME_SIMPLE_DISPLAY_TYPE será retornado.
CERT_NAME_DNS_TYPE
6
Se o certificado tiver uma extensão Nome Alternativo da Entidade para o emissor, Nome Alternativo do Emissor, procure a primeira opção DNSName.

Se a opção DNSName não for encontrada na extensão, pesquise no campo Nome da Entidade para a OID CN, "2.5.4.3".

Se o DNSName ou CN OID for encontrado, retorne a cadeia de caracteres. Caso contrário, retorne uma cadeia de caracteres vazia.

CERT_NAME_URL_TYPE
7
Se o certificado tiver uma extensão Nome Alternativo da Entidade para o emissor, Nome Alternativo do Emissor, procure a primeira opção de URL. Se a opção de URL for encontrada, retorne a cadeia de caracteres. Caso contrário, retorne uma cadeia de caracteres vazia.
CERT_NAME_UPN_TYPE
8
Se o certificado tiver uma extensão Nome Alternativo da Entidade, pesquise as opções OtherName procurando um pszObjId == szOID_NT_PRINCIPAL_NAME ("1.3.6.1.4.1.311.20.2.3").

Se a OID UPN for encontrada, decodificará o BLOB como um X509_UNICODE_ANY_STRING e retornará a cadeia de caracteres decodificada. Caso contrário, retorne uma cadeia de caracteres vazia.

[in] dwFlags

Indica o tipo de processamento necessário.

Valor Significado
CERT_NAME_ISSUER_FLAG
0x1
Adquire o nome do emissor. Se não estiver definido, adquira o nome do assunto.
CERT_NAME_DISABLE_IE4_UTF8_FLAG
0x00010000
Ignora a tentativa inicial padrão de decodificar o valor como UTF8 e decodifica como caracteres de 8 bits.
CERT_NAME_SEARCH_ALL_NAMES_FLAG
0x2
Se o parâmetro dwType for definido como CERT_NAME_DNS_TYPE, todos os nomes aplicáveis serão retornados para o valor DNS especificado. Se não houver nenhum nome DNS, mas houver um componente CN no assunto, o CN será retornado. Se houver um CN e um nome DNS, somente os nomes DNS serão retornados. Isso imita a política de construção da cadeia SSL. Se você definir esse sinalizador para um tipo de nome diferente de CERT_NAME_DNS_TYPE, essa função retornará uma cadeia de caracteres vazia terminada em nulo.

Windows 8 e Windows Server 2012: começa o suporte para esse sinalizador.

CERT_NAME_STR_ENABLE_PUNYCODE_FLAG
0x00200000
Esse sinalizador permite a decodificação de cadeias de caracteres IA5String para valores de cadeia de caracteres Unicode com base no valor do parâmetro dwType, conforme definido abaixo:
  • CERT_NAME_EMAIL_TYPE: se a parte do nome do host do endereço de email contiver um componente ia5String codificado em Punycode, ele será convertido no equivalente Unicode.
  • CERT_NAME_SIMPLE_DISPLAY_TYPE: se um nome de assunto de szOID_RSA_emailAddr ou rfc822Name do Nome Alternativo da Entidade for retornado do certificado e a parte do nome do host do endereço de email contiver o componente codificado em Punycode IA5String, ele será convertido no equivalente Unicode.
  • CERT_NAME_DNS_TYPE: se o certificado tiver um Nome Alternativo do Emissor, com uma opção DNSName, e a parte do nome do host do endereço de email contiver um componente de ia5String codificado em Punycode, ele será convertido no equivalente Unicode.
  • CERT_NAME_URL_TYPE: o URI é decodificado e sem escape. Se o nome do host do servidor do URI contiver um componente ia5String codificado em Punycode, a cadeia de caracteres de nome do host será convertida no equivalente Unicode.
Windows Server 2008, Windows Vista, Windows Server 2003 e Windows XP: Não há suporte para esse valor.

[in] pvTypePara

Um ponteiro para um DWORD que contém o dwStrType ou um identificador de objeto (OID) especificando o atributo de nome. O tipo apontado é determinado pelo valor de dwType.

[out] pszNameString

Um ponteiro para um buffer alocado para receber a cadeia de caracteres retornada. Se pszNameString não for NULL e cchNameString não for zero, pszNameString será uma cadeia de caracteresterminada nula.

Se CERT_NAME_SEARCH_ALL_NAMES_FLAG for especificado no parâmetro dwFlags e CERT_NAME_DNS_TYPE for definido no parâmetro dwType, a cadeia de caracteres retornada conterá todos os nomes DNS que se aplicam. Cada cadeia de caracteres na cadeia de caracteres de saída é terminada em nulo e a última cadeia de caracteres será terminada em nulo duplo. Se nenhum nome DNS for encontrado, uma única cadeia de caracteres vazia terminada em nulo será retornada.

[in] cchNameString

Tamanho, em caracteres, alocado para a cadeia de caracteres retornada. O tamanho deve incluir o caractere de NULL terminação.

Valor de retorno

Retorna o número de caracteres convertidos, incluindo o caractere zero de terminação. Se pszNameString for NULL ou cchNameString for zero, retornará o tamanho necessário da cadeia de caracteres de destino (incluindo a terminação caractere de NULL). Se o tipo de nome especificado não for encontrado, retornará um cadeia de caracteres vaziaterminada em nulo com uma contagem de caracteres retornada de 1.

Observações

Nota

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

Requisitos

Requisito Valor
de cliente com suporte mínimo Windows XP [aplicativos da área de trabalho | Aplicativos UWP]
servidor com suporte mínimo Windows Server 2003 [aplicativos da área de trabalho | Aplicativos UWP]
da Plataforma de Destino Windows
cabeçalho wincrypt.h
biblioteca Crypt32.lib
de DLL Crypt32.dll

Consulte também

Funções de conversão de dados