Использование SetupAPI для проверки подписей authenticode драйвера
Чтобы убедиться, что пакет драйвера имеет действительную цифровую подпись Authenticode, можно использовать следующие процедуры. Эти процедуры поддерживаются начиная с Microsoft Windows Server 2003.
Определение допустимой сигнатуры Authenticode в драйвере
Проверьте флаг DNF_AUTHENTICODE_SIGNED.
Если пакет драйверов имеет действительную подпись Authenticode, Windows устанавливает этот флаг в элементе Flagsструктуры SP_DRVINSTALL_PARAMS узла драйвера. (Кроме того, имейте в виду, что Windows устанавливает флаг DNF_INF_IS_SIGNED, если драйвер имеет сигнатуру выпуска WHQL, если это драйвер, поставляемый системой, или если у него есть подпись Authenticode.)
Проверка наличия в INF-файле допустимой подписи Authenticode
Вызовите SetupVerifyInfFile.
Проверьте код ошибки, возвращенный функцией .
Если INF-файл не предоставляется системой и не имеет действительной цифровой подписи WHQL, но имеет действительную подпись Authenticode, SetupVerifyInfFile возвращает значение FALSE , а GetLastError возвращает один из следующих кодов ошибок:
ERROR_AUTHENTICODE_TRUSTED_PUBLISHER
Указывает, что издатель является доверенным, так как сертификат издателя установлен в хранилище сертификатов доверенных издателей.ERROR_AUTHENTICODE_TRUST_NOT_ESTABLISHED
Указывает, что невозможно автоматически установить доверие, так как сертификат подписи издателя не установлен в хранилище сертификатов доверенного издателя. Однако это не обязательно указывает на ошибку. Вместо этого он указывает, что вызывающий объект должен применить политику для конкретного вызывающего абонента, чтобы установить доверие к издателю.
Если INF-файл имеет действительную сигнатуру Authenticode, SetupVerifyInfFile также возвращает следующие сведения в выходной структуре SP_INF_SIGNER_INFO:
Для элемента DigitalSigner задано имя подписывателя.
Для элемента CatalogFile задается полный путь к соответствующему подписанному файлу каталога.
Однако имейте в виду, что SetupVerifyInfFile не возвращает версию в члене DigitalSignerVersion .
Проверка наличия действительной подписи Authenticode в файле
Вызовите функцию SetupAPI SetupScanFileQueue с помощью флага SPQ_SCAN_USE_CALLBACK_SIGNERINFO.
SetupScanFileQueue отправляет запрос SPFILENOTIFY_QUEUESCAN_SIGNERINFO в подпрограмму обратного вызова вызывающего объекта и передает указатель на структуру FILEPATHS_SIGNERINFO. Если файл подписан допустимой сигнатурой Authenticode, функция задает для кода ошибки соответствующее значение ERROR_AUTHENTICODE_Xxx перед вызовом процедуры обратного вызова для файла. Функция также задает следующие сведения в структуре FILEPATHS_SIGNERINFO:
Для элемента DigitalSigner задано имя подписывателя.
Для элемента CatalogFile задается полный путь к соответствующему подписанному файлу каталога.
Однако имейте в виду, что версия не задана в элементе Version .
SetupScanFileQueue задает код ошибки ERROR_AUTHENTICODE_Xxx так же, как описано ранее в этом разделе для SetupVerifyInfFile.