Compartilhar via


Método IOpcDigitalSignatureManager::Sign (msopc.h)

Assina o pacote gerando uma assinatura usando o certificado especificado e o ponteiro da interface IOpcSigningOptions . A assinatura resultante é representada por um ponteiro de interface IOpcDigitalSignature .

Sintaxe

HRESULT Sign(
  [in]          const CERT_CONTEXT   *certificate,
  [in]          IOpcSigningOptions   *signingOptions,
  [out, retval] IOpcDigitalSignature **digitalSignature
);

Parâmetros

[in] certificate

Um ponteiro para uma estrutura CERT_CONTEXT que contém o certificado.

[in] signingOptions

Um ponteiro de interface IOpcSigningOptions usado para gerar a assinatura.

[out, retval] digitalSignature

Um novo ponteiro de interface IOpcDigitalSignature que representa a assinatura.

Retornar valor

O método retorna um HRESULT. Os possíveis valores incluem, mas sem limitação, aqueles na tabela a seguir.

Valor/código retornado Descrição
S_OK
O método foi bem-sucedido.
E_POINTER
Pelo menos um dos parâmetros de certificado, signingOptions e digitalSignature é NULL.
OPC_E_DS_DEFAULT_DIGEST_METHOD_NOT_SET
0x80510047
O método de resumo padrão não foi definido; para defini-lo, chame IOpcSigningOptions::SetDefaultDigestMethod.
OPC_E_DS_DIGEST_VALUE_ERROR
0x8051001A
Não é possível obter o valor de resumo de um componente de pacote ou um elemento na marcação de assinatura que foi referenciada para assinatura.
OPC_E_DS_INVALID_OPC_SIGNATURE_TIME_FORMAT
0x80510024
O formato de tempo da assinatura não é um valor de enumeração de OPC_SIGNATURE_TIME_FORMAT válido.
OPC_E_DS_INVALID_RELATIONSHIPS_SIGNING_OPTION
0x80510023
Uma opção de assinatura de relação indicada não é um valor de enumeração de OPC_RELATIONSHIPS_SIGNING_OPTION válido.
OPC_E_DS_SIGNATURE_CORRUPT
0x80510019
Uma assinatura no pacote não é formada corretamente. Não é possível obter o valor da assinatura.
OPC_E_DS_SIGNATURE_METHOD_NOT_SET
0x80510046
O método de assinatura não foi definido. Chame IOpcSigningOptions::SetSignatureMethod para definir o método de assinatura.
OPC_E_NO_SUCH_PART
0x80510018
A parte especificada não existe.
Erro de criptografia
Um código de erro HRESULT de uma API de Criptografia .
Erro dos Serviços Web do Windows
Um código de erro HRESULT de uma API dos Serviços Web do Windows .

Comentários

Esse método usa objetos Packaging para fazer alterações em um pacote. As alterações resultantes não são salvas até que o pacote em si seja salvo.

Antes que esse método seja chamado para gerar uma assinatura, chame os métodos IOpcSigningOptions::SetDefaultDigestMethod e IOpcSigningOptions::SetSignatureMethod .

Para criar um ponteiro de interface IOpcSigningOptions , que é exigido por esse método, chame o método CreateSigningOptions .

Importante Se o pacote for modificado enquanto esse método estiver sendo executado, Sign poderá falhar ou gerar uma assinatura inconsistente. Para evitar a corrupção do pacote, use as APIs para salvar o pacote antes de chamar Sign. Para obter informações sobre como salvar um pacote, consulte Salvando um pacote.
 
Esse método pode criar as seguintes partes e relações:
  • A parte Origem da Assinatura Digital
  • A relação de pacote do tipo de relação de origem da assinatura digital
  • Uma parte de assinatura que contém marcação de assinatura
  • Uma ou mais partes que contém um certificado
  • Uma relação que tem como destino uma parte de assinatura e que tem a parte Origem da Assinatura Digital como sua origem
  • Uma ou mais relações direcionadas a uma parte de assinatura que contém um certificado e que tem outra parte de assinatura como sua origem

Se Sign falhar, qualquer uma das partes e relações acima poderá ser representada, no pacote, por objetos Packaging. Se o método retornar o código de erro OPC_E_DS_SIGNATURE_METHOD_NOT_SET ou OPC_E_DS_DEFAULT_DIGEST_METHOD_NOT_SET , o pacote não foi alterado.

Se Sign for bem-sucedido, os valores de resumo serão calculados para entidades assinadas e a assinatura gerada será serializada como marcação de assinatura. As possíveis entidades assinadas incluem o elemento Signature , as referências, as partes, as relações e os elementos Object específicos do pacote e do aplicativo.

Erros introduzidos em uma assinatura de pacote quando o chamador estiver usando a interface IOpcSigningOptions para definir informações de assinatura podem não ser expostos até que Sign seja chamado.

Acesso thread-safe

Os objetos de empacotamento não são thread-safe.

Para obter mais informações, consulte o Introdução com a API de Empacotamento.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 7 [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2008 R2 [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho msopc.h

Confira também

Principais interfaces de empacotamento

Certificados Digitais

Visão geral de assinaturas digitais

Introdução com a API de Empacotamento

IOpcDigitalSignatureManager

Visões gerais

Guia de Programação da API de Empacotamento

Referência da API de Empacotamento

Exemplos de API de empacotamento

Empacotando interfaces de assinatura digital

Interfaces de empacotamento

Referência

Salvando um pacote