From: Josh Kelley on
I have a signed (but not WHQL-certified) driver that's giving security
warnings when I try to upgrade it in Windows Vista. Installing the
previous version of the driver works, and doing a fresh install of the
current version works, but the upgrade pops up a nasty warning:
"Windows Security: Windows can't verify the publisher of this driver
software."

The fresh install and upgrade are both done using DPinst:
dpinst.exe /se /sa /lm /path c:\Program Files\MyApp\ftdibus.inf /sw

Here's what appears to be the relevant section from setupapi.dev.log:
pol: {Driver package policy check - exit(0x00000000)}
16:19:20.626
dvi: Staging Package To Driver Store - phase 2
inf: Opened INF: 'C:\Users\Administrator\
{bedd06af-9c4a-4500-8264-dc966b9df6dd}\ftdibus.inf' ([strings] <src =
normal>)
inf: Opened INF: 'C:\Users\Administrator\
{bedd06af-9c4a-4500-8264-dc966b9df6dd}\ftdibus.inf' ([strings] <src =
normal>)
inf: Opened INF: 'C:\Users\Administrator\
{bedd06af-9c4a-4500-8264-dc966b9df6dd}\ftdibus.inf' ([strings] <src =
normal>)
inf: Opened INF: 'C:\Users\Administrator\
{bedd06af-9c4a-4500-8264-dc966b9df6dd}\ftdibus.inf' ([strings] <src =
normal>)
inf: Opened INF: 'C:\Windows\system32\DriverStore\Temp\
{f3ab5d64-8d1d-4f6a-bd1c-5908aad450be}\Package\ftdibus.inf' ([strings]
<src = normal>)
inf: Opened INF: 'C:\Windows\system32\DriverStore\Temp\
{f3ab5d64-8d1d-4f6a-bd1c-5908aad450be}\Package\ftdibus.inf' ([strings]
<src = normal>)
sig: {_VERIFY_FILE_SIGNATURE} 16:19:21.329
sig: Key = ftdibus.inf
sig: FilePath = C:\Windows\system32\DriverStore\Temp\
{f3ab5d64-8d1d-4f6a-bd1c-5908aad450be}\Package\ftdibus.inf
sig: Catalog = C:\Windows\system32\DriverStore\Temp\
{f3ab5d64-8d1d-4f6a-bd1c-5908aad450be}\Package\ftdibus.cat
flq: {SPFILENOTIFY_CABINETINFO}
flq: {SPFILENOTIFY_CABINETINFO - exit(0x00000000)}
flq: {SPFILENOTIFY_FILEEXTRACTED}
flq: {SPFILENOTIFY_FILEEXTRACTED - exit(0x00000000)}
flq: {SPFILENOTIFY_CABINETINFO}
flq: {SPFILENOTIFY_CABINETINFO - exit(0x00000000)}
flq: {SPFILENOTIFY_FILEEXTRACTED}
flq: {SPFILENOTIFY_FILEEXTRACTED - exit(0x00000000)}
! sig: Verifying file against specific (valid) catalog
failed! (0x800b0109)
! sig: Error 0x800b0109: A certificate chain processed,
but terminated in a root certificate which is not trusted by the trust
provider.
sig: {_VERIFY_FILE_SIGNATURE exit(0x800b0109)} 16:19:22.048
sig: {_VERIFY_FILE_SIGNATURE} 16:19:22.048
sig: Key = ftdibus.inf
sig: FilePath = C:\Windows\system32\DriverStore\Temp\
{f3ab5d64-8d1d-4f6a-bd1c-5908aad450be}\Package\ftdibus.inf
sig: Catalog = C:\Windows\system32\DriverStore\Temp\
{f3ab5d64-8d1d-4f6a-bd1c-5908aad450be}\Package\ftdibus.cat
flq: {SPFILENOTIFY_CABINETINFO}
flq: {SPFILENOTIFY_CABINETINFO - exit(0x00000000)}
flq: {SPFILENOTIFY_FILEEXTRACTED}
flq: {SPFILENOTIFY_FILEEXTRACTED - exit(0x00000000)}
flq: {SPFILENOTIFY_CABINETINFO}
flq: {SPFILENOTIFY_CABINETINFO - exit(0x00000000)}
flq: {SPFILENOTIFY_FILEEXTRACTED}
flq: {SPFILENOTIFY_FILEEXTRACTED - exit(0x00000000)}
sig: Success: File is signed in Authenticode(tm)
catalog.
sig: Error 0xe0000242: The publisher of an Authenticode
(tm) signed catalog has not yet been established as trusted.
sig: {_VERIFY_FILE_SIGNATURE exit(0xe0000242)} 16:19:22.454
sto: Validating driver package files.
inf: Opened INF: 'C:\Windows\system32\DriverStore\Temp\
{f3ab5d64-8d1d-4f6a-bd1c-5908aad450be}\Package\ftdibus.inf' ([strings]
<src = normal>)
!!! sto: Failed to verify file C:\Windows
\system32\DriverStore\Temp\{f3ab5d64-8d1d-4f6a-bd1c-5908aad450be}
\Package\i386\ftbusui.dll against the catalog C:\Windows
\system32\DriverStore\Temp\{f3ab5d64-8d1d-4f6a-bd1c-5908aad450be}
\Package\ftdibus.cat. Error = 800f024b.
!!! sto: The file hash wasn't found in the catalog file.
The file is likely corrupt or the victim of tampering.
!!! sto: ValidateDriverPackageFiles() failed to validate the
driver package. Error = 800f024b
!!! sto: Failed to validate Driver Package files. Error =
800f024b
!!! sto: The Driver Package appears to be tampered. Inf = C:
\Windows\system32\DriverStore\Temp\{f3ab5d64-8d1d-4f6a-
bd1c-5908aad450be}\Package\ftdibus.inf, Error = 800f024b
! sto: The Driver Package appears to be tampered but user
wants to install it anyway.

signtool /verify reports no problems. Googling for 800f024b reveals
only one hit, a reference to a McAfee knowledge base article that
refers to missing "the signed device driver history for the Windows
Installer." (What is that? I'm using Inno Setup rather than Windows
Installer.)

If I install the software package containing the updated driver to a
new directory, I don't get this error. This makes me suspect that the
error is caused by a DLL from the old driver being checked against the
catalog from the new driver, or vice versa. But I thought that
Windows kept drivers in the driver store so that it wouldn't have to
depend on drivers remaining unchanged under c:\Program Files?

What's the right way to use DPinst to upgrade a signed driver?

--
Josh Kelley
From: Josh Kelley on
On Dec 9, 5:33 pm, Josh Kelley <josh...(a)gmail.com> wrote:
> I have a signed (but not WHQL-certified) driver that's giving security
> warnings when I try to upgrade it in Windows Vista.  Installing the
> previous version of the driver works, and doing a fresh install of the
> current version works, but the upgrade pops up a nasty warning:
> "Windows Security: Windows can't verify the publisher of this driver
> software."

This ended up being a problem with my Inno Setup installer. On an
upgrade, Inno Setup skips files if they have the same version number.
One or more files in my updated driver had the same version number but
different contents than the old driver, so the driver installation
ended up with a few files from the old driver and understandably
failed signature verification.

--
Josh Kelley
From: Maxim S. Shatskih on
>One or more files in my updated driver had the same version number but
>different contents than the old driver

Well, this is a major issue.

--
Maxim S. Shatskih
Windows DDK MVP
maxim(a)storagecraft.com
http://www.storagecraft.com