Compartilhar via


Função MsiGetFileSignatureInformationA (msi.h)

A função MsiGetFileSignatureInformation leva o caminho para um arquivo que foi assinado digitalmente e retorna o certificado do signatário e o hash do arquivo. MsiGetFileSignatureInformation pode ser chamado para obter o certificado do signatário e o hash necessários para preencher as tabelas MsiDigitalCertificate, MsiPatchCertificate e MsiDigitalSignature .

Windows Installer 3.0 e posterior: A partir do Windows Installer 3.0, o Windows Installer pode verificar as assinaturas digitais de patches (arquivos .msp) usando as tabelas MsiPatchCertificate e MsiDigitalCertificate . Para obter mais informações, consulte Diretrizes para criação de instalações seguras e aplicação de patch de UAC (controle de conta de usuário).

Windows Installer 2.0: Não há suporte para assinaturas digitais de patches. O Windows Installer 2.0 usa assinaturas digitais como um meio de detectar recursos corrompidos e só pode verificar as assinaturas digitais de gabinetes externos e apenas pelo uso das tabelas MsiDigitalSignature e MsiDigitalCertificate .

Sintaxe

HRESULT MsiGetFileSignatureInformationA(
  [in]      LPCSTR         szSignedObjectPath,
  [in]      DWORD          dwFlags,
  [out]     PCCERT_CONTEXT *ppcCertContext,
  [out]     LPBYTE         pbHashData,
  [in, out] LPDWORD        pcbHashData
);

Parâmetros

[in] szSignedObjectPath

Ponteiro para uma cadeia de caracteres terminada em nulo especificando o caminho completo para o arquivo que contém a assinatura digital.

[in] dwFlags

Sinalizadores especiais de caso de erro.

Sinalizador Significado
MSI_INVALID_HASH_IS_FATAL
0x1
Sem esse sinalizador definido e ao solicitar apenas o contexto do certificado, um hash inválido na assinatura digital não faz com que MsiGetFileSignatureInformation retorne um erro fatal.

Para retornar um erro fatal para um hash inválido, defina o sinalizador MSI_INVALID_HASH_IS_FATAL.

[out] ppcCertContext

Contexto de certificado do signatário retornado

[out] pbHashData

Buffer de hash retornado. Esse parâmetro poderá ser NULL se os dados de hash não estiverem sendo solicitados.

[in, out] pcbHashData

Ponteiro para uma variável que especifica o tamanho, em bytes, do buffer apontado pelo parâmetro pbHashData . Esse parâmetro não poderá ser NULL se pbHashData não for NULL. Se ERROR_MORE_DATA for retornado, pbHashData fornecerá o tamanho do buffer necessário para manter os dados de hash. Se ERROR_SUCCESS for retornado, ele fornecerá o número de bytes gravados no buffer de hash. O parâmetro pcbHashData será ignorado se pbHashData for NULL.

Valor retornado

Valor Significado
ERROR_SUCCESS/S_OK
Conclusão bem-sucedida.
ERROR_INVALID_PARAMETER
Foi especificado um parâmetro inválido.
ERROR_FUNCTION_FAILED

WinVerifyTrust não está disponível no sistema. MsiGetFileSignatureInformation requer a presença do arquivo Wintrust.dll no sistema.

ERROR_MORE_DATA
Um buffer é muito pequeno para conter os dados solicitados. Se ERROR_MORE_DATA for retornado, pcbHashData fornecerá o tamanho do buffer necessário para manter os dados de hash.
TRUST_E_NOSIGNATURE
O arquivo não está assinado
TRUST_E_BAD_DIGEST
O hash atual do arquivo é inválido de acordo com o hash armazenado na assinatura digital do arquivo.
CERT_E_REVOKED
O certificado do signatário do arquivo foi revogado. A assinatura digital do arquivo está comprometida.
TRUST_E_SUBJECT_NOT_TRUSTED
O assunto falhou na ação de verificação especificada. A maioria dos provedores de confiança retorna um código de erro mais detalhado que descreve o motivo da falha.
TRUST_E_PROVIDER_UNKNOWN
O provedor de confiança não é reconhecido nesse sistema.
TRUST_E_ACTION_UNKNOWN
O provedor de confiança não dá suporte à ação especificada.
TRUST_E_SUBJECT_FORM_UNKNOWN
O provedor de confiança não dá suporte ao formulário especificado para o assunto.
 
 

MsiGetFileSignatureInformation também retorna todos os valores de erro win32 mapeados para seu tipo de dados HRESULT equivalente por HRESULT_FROM_WIN32.

Comentários

Ao solicitar apenas o contexto do certificado, um hash inválido na assinatura digital não faz com que MsiGetFileSignatureInformation retorne um erro fatal. Para retornar um erro fatal para um hash inválido, defina o sinalizador MSI_INVALID_HASH_IS_FATAL no parâmetro dwFlags .

O contexto do certificado e as informações de hash são extraídos do arquivo por uma chamada para WinVerifyTrust. O parâmetro ppcCertContext é uma duplicata do contexto de certificado do signatário da assinatura. É responsabilidade do chamador chamar CertFreeCertificateContext para liberar o contexto do certificado quando terminar.

Observe que MsiGetFileSignatureInformation requer a presença do arquivo Wintrust.dll no sistema.

Observação

O cabeçalho msi.h define MsiGetFileSignatureInformation 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 Installer 5.0 no Windows Server 2012, no Windows 8, no Windows Server 2008 R2 ou no Windows 7. Windows Installer 4.0 ou Windows Installer 4.5 no Windows Server 2008 ou no Windows Vista. Windows Installer no Windows Server 2003 ou no Windows XP. Confira os Requisitos de tempo de execução do Windows Installer para obter informações sobre o service pack mínimo do Windows exigido por uma versão do Windows Installer.
Plataforma de Destino Windows
Cabeçalho msi.h
Biblioteca Msi.lib
DLL Msi.dll

Confira também

Assinaturas digitais e Windows Installer

Tabela MsiDigitalCertificate

Tabela MsiDigitalSignature