Поделиться через


Функция MsiGetFileSignatureInformationA (msi.h)

Функция MsiGetFileSignatureInformation принимает путь к файлу с цифровой подписью и возвращает сертификат подписи и хэш файла. MsiGetFileSignatureInformation можно вызвать для получения сертификата подписи и хэша, необходимого для заполнения таблиц MsiDigitalCertificate, MsiPatchCertificateи таблиц MsiDigitalSignature.

установщик Windows 3.0 и более поздних версий: начиная с установщика Windows 3.0 установщик Windows может проверить цифровые подписи исправлений (MSP-файлов) с помощью msiPatchCertificate и таблиц MsiDigitalCertificate. Дополнительные сведения см. в руководства по созданию безопасных установок иисправлений управления учетными записями пользователей (UAC).

Установщик Windows 2.0: цифровые подписи исправлений не поддерживаются. Установщик Windows 2.0 использует цифровые подписи в качестве средства для обнаружения поврежденных ресурсов и может проверять только цифровые подписи внешних шкафов и только с помощью MsiDigitalSignature и таблицах MsiDigitalCertificate.

Синтаксис

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

Параметры

[in] szSignedObjectPath

Указатель на строку, завершающуюся значением NULL, указав полный путь к файлу, который содержит цифровую подпись.

[in] dwFlags

Специальные флаги регистра ошибок.

Флаг Значение
MSI_INVALID_HASH_IS_FATAL
0x1
Без этого набора флагов и при запросе только контекста сертификата недопустимый хэш в цифровой подписи не приводит к MsiGetFileSignatureInformation возвращать неустранимая ошибка.

Чтобы вернуть неустранимую ошибку для недопустимого хэша, задайте флаг MSI_INVALID_HASH_IS_FATAL.

[out] ppcCertContext

Контекст сертификата возвращаемого подписывчика

[out] pbHashData

Возвращен хэш-буфер. Этот параметр может быть null, если хэш-данные не запрашиваются.

[in, out] pcbHashData

Указатель на переменную, указывающую размер буфера в байтах, на который указывает параметр pbHashData. Этот параметр не может быть null, если pbHashData неNULL. Если возвращается ERROR_MORE_DATA, pbHashData предоставляет размер буфера, необходимого для хранения хэш-данных. Если возвращается ERROR_SUCCESS, оно дает количество байтов, записанных в хэш-буфер. Параметр pcbHashData игнорируется, если pbHashData NULL.

Возвращаемое значение

Ценность Значение
ERROR_SUCCESS/S_OK
Успешное завершение.
ERROR_INVALID_PARAMETER
Указан недопустимый параметр.
ERROR_FUNCTION_FAILED

WinVerifyTrust недоступно в системе. MsiGetFileSignatureInformation требует наличия файла Wintrust.dll в системе.

ERROR_MORE_DATA
Буфер слишком мал для хранения запрошенных данных. Если возвращается ERROR_MORE_DATA, pcbHashData предоставляет размер буфера, необходимого для хранения хэш-данных.
TRUST_E_NOSIGNATURE
Файл не подписан
TRUST_E_BAD_DIGEST
Текущий хэш файла недопустим в соответствии с хэшом, хранящимся в цифровой подписи файла.
CERT_E_REVOKED
Сертификат подписывания файла был отменен. Цифровая подпись файла скомпрометирована.
TRUST_E_SUBJECT_NOT_TRUSTED
Субъект завершился сбоем указанного действия проверки. Большинство поставщиков доверия возвращают более подробный код ошибки, описывающий причину сбоя.
TRUST_E_PROVIDER_UNKNOWN
Поставщик доверия не распознается в этой системе.
TRUST_E_ACTION_UNKNOWN
Поставщик доверия не поддерживает указанное действие.
TRUST_E_SUBJECT_FORM_UNKNOWN
Поставщик доверия не поддерживает форму, указанную для субъекта.
 
 

MsiGetFileSignatureInformation также возвращает все значения ошибок Win32, сопоставленные с эквивалентным типом данных HRESULTHRESULT_FROM_WIN32.

Замечания

При запросе только контекста сертификата недопустимый хэш в цифровой подписи не вызывает MsiGetFileSignatureInformation возвращать неустранимая ошибка. Чтобы вернуть неустранимую ошибку для недопустимого хэша, задайте флаг MSI_INVALID_HASH_IS_FATAL в параметре dwFlags.

Контекст сертификата и хэш-сведения извлекаются из файла вызовом WinVerifyTrust. Параметр ppcCertContext является дубликатом контекста сертификата подписи из подписи. Вызывающий объект несет ответственность за вызов CertFreeCertificateContext, чтобы освободить контекст сертификата по завершении.

Обратите внимание, что MsiGetFileSignatureInformation требует наличия файла Wintrust.dll в системе.

Заметка

Заголовок msi.h определяет MsiGetFileSignatureInformation как псевдоним, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОДа. Сочетание использования псевдонима, нейтрального для кодирования, с кодом, не зависящим от кодирования, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в соглашениях о прототипах функций.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Установщик Windows 5.0 в Windows Server 2012, Windows 8, Windows Server 2008 R2 или Windows 7. Установщик Windows 4.0 или установщик Windows 4.5 в Windows Server 2008 или Windows Vista. Установщик Windows в Windows Server 2003 или Windows XP. Сведения о минимальном пакете обновления Windows, требуемом версией установщика Windows, см. в разделе "Требования к установщику Windows Run-Time".
целевая платформа Виндоус
заголовка msi.h
библиотеки Msi.lib
DLL Msi.dll

См. также

цифровые подписи и установщик Windows

таблицы MsiDigitalCertificate

таблица MsiDigitalSignature