Usando SetupAPI para verificar assinaturas do Driver Authenticode
Você pode usar os procedimentos a seguir para verificar se um pacote de driver tem uma assinatura digital Authenticode válida. Esses procedimentos têm suporte a partir do Microsoft Windows Server 2003.
Para determinar se um driver tem uma assinatura authenticode válida
Verifique o sinalizador DNF_AUTHENTICODE_SIGNED.
Se um pacote de driver tiver uma assinatura authenticode válida, o Windows definirá esse sinalizador no membro Flags da estrutura SP_DRVINSTALL_PARAMS do nó de driver. (Lembre-se também de que o Windows define o sinalizador DNF_INF_IS_SIGNED se o driver tiver uma assinatura de versão whql, se for um driver fornecido pelo sistema ou se ele tiver uma assinatura Authenticode.)
Para verificar se um arquivo INF tem uma assinatura Authenticode válida
Chame SetupVerifyInfFile.
Verifique o código de erro retornado pela função .
Se o arquivo INF não for fornecido pelo sistema e não tiver uma assinatura digital WHQL válida, mas tiver uma assinatura authenticode válida, SetupVerifyInfFile retornará FALSE e GetLastError retornará um dos seguintes códigos de erro:
ERROR_AUTHENTICODE_TRUSTED_PUBLISHER
Indica que o editor é confiável porque o certificado do editor está instalado no repositório de certificados de Fornecedores Confiáveis.ERROR_AUTHENTICODE_TRUST_NOT_ESTABLISHED
Indica que a confiança não pode ser estabelecida automaticamente porque o certificado de autenticação do editor não está instalado no repositório de certificados de editor confiável. No entanto, isso não indica necessariamente um erro. Em vez disso, indica que o chamador deve aplicar uma política específica do chamador para estabelecer confiança no publicador.
Se o arquivo INF tiver uma assinatura Authenticode válida, SetupVerifyInfFile também retornará as seguintes informações na estrutura de saída SP_INF_SIGNER_INFO:
O membro DigitalSigner é definido como o nome do signatário.
O membro CatalogFile é definido como o caminho completo do arquivo de catálogo assinado correspondente.
No entanto, lembre-se de que SetupVerifyInfFile não retorna a versão no membro DigitalSignerVersion .
Para verificar se um arquivo tem uma assinatura Authenticode válida
Chame a função SetupAPI SetupScanFileQueue usando o sinalizador SPQ_SCAN_USE_CALLBACK_SIGNERINFO.
SetupScanFileQueue envia uma solicitação de SPFILENOTIFY_QUEUESCAN_SIGNERINFO para a rotina de retorno de chamada do chamador e passa um ponteiro para uma estrutura de FILEPATHS_SIGNERINFO. Se um arquivo for assinado com uma assinatura Authenticode válida, a função definirá o código de erro como o valor de ERROR_AUTHENTICODE_Xxx apropriado antes de chamar a rotina de retorno de chamada para um arquivo. A função também define as seguintes informações na estrutura FILEPATHS_SIGNERINFO:
O membro DigitalSigner é definido como o nome do signatário.
O membro CatalogFile é definido como o caminho completo do arquivo de catálogo assinado correspondente.
No entanto, lembre-se de que a versão não está definida no membro Version .
SetupScanFileQueue define o código de erro ERROR_AUTHENTICODE_Xxx da mesma maneira descrita anteriormente neste tópico para SetupVerifyInfFile.