Функция 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

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

[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