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


Функция MsiGetFileSignatureInformationW (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 MsiGetFileSignatureInformationW(
  [in]      LPCWSTR        szSignedObjectPath,
  [in]      DWORD          dwFlags,
  [out]     PCCERT_CONTEXT *ppcCertContext,
  [out]     LPBYTE         pbHashData,
  [in, out] LPDWORD        pcbHashData
);

Параметры

[in] szSignedObjectPath

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

[in] dwFlags

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

Flag Значение
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, сопоставленные с эквивалентным типом данных HRESULT HRESULT_FROM_WIN32.

Комментарии

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

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

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

Примечание

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

Требования

   
Минимальная версия клиента Установщик 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.
Целевая платформа Windows
Header msi.h
Библиотека Msi.lib
DLL Msi.dll

См. также раздел

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

Таблица MsiDigitalCertificate

Таблица MsiDigitalSignature