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


Использование 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

  1. Вызовите SetupVerifyInfFile.

  2. Проверьте код ошибки, возвращенный функцией .

    Если 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.