[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] RE: [PATCH] Ensure DifRemove coinst routine runs on uninstall.
> -----Original Message----- > From: Troy Crosley <troycrosley@xxxxxxxxx> > Sent: 05 November 2020 21:39 > To: win-pv-devel@xxxxxxxxxxxxxxxxxxxx > Cc: paul@xxxxxxx; ben.chalmers@xxxxxxxxxx; owen.smith@xxxxxxxxxx; Troy Crosley > <troycrosley@xxxxxxxxx>; Joel Upham <uphamj@xxxxxxxxxxxx> > Subject: [PATCH] Ensure DifRemove coinst routine runs on uninstall. > > In Windows 10 version 2004, The coinstallers' DIF_INSTALLDEVICE routines > do not get called on driver uninstall. In previous versions of Windows, > this occurs as part of the uninstall during the null device install and > is the only time DifRemove gets called to perform cleanup. Work around > this change by calling DifRemove from DIF_SELECTBESTCOMPATDRV, which is > the only coinstaller request that seems to happen on uninstall in > Windows 10 version 2004. In addition, improve the null driver test to > also check if DriverInfoData.DriverType is equal to SPDIT_CLASSDRIVER or > SPDIT_COMPATDRIVER, which is necessary as of some Windows version (at > least Windows 10 version 1803). > > Co-authored-by: Joel Upham <uphamj@xxxxxxxxxxxx> > Co-authored-by: Troy Crosley <troycrosley@xxxxxxxxx> We've never used 'Co-authored-by'. Are you ok with me translating both of these to 'Signed-off-by'? Acked-by: Paul Durrant <paul@xxxxxxx> > --- > src/coinst/coinst.c | 38 +++++++++++++++++++++++--------------- > 1 file changed, 23 insertions(+), 15 deletions(-) > > diff --git a/src/coinst/coinst.c b/src/coinst/coinst.c > index 7b96f59..b9b60bd 100644 > --- a/src/coinst/coinst.c > +++ b/src/coinst/coinst.c > @@ -1959,6 +1959,9 @@ Entry( > ) > { > HRESULT Error; > + SP_DRVINFO_DATA DriverInfoData; > + BOOLEAN DriverInfoAvailable; > + BOOLEAN IsNullDriver; > > Log("%s (%s) ===>", > MAJOR_VERSION_STR "." MINOR_VERSION_STR "." MICRO_VERSION_STR "." > BUILD_NUMBER_STR, > @@ -1973,23 +1976,28 @@ Entry( > Context->InstallResult); > } > > + DriverInfoData.cbSize = sizeof(DriverInfoData); > + DriverInfoAvailable = SetupDiGetSelectedDriver(DeviceInfoSet, > + DeviceInfoData, > + &DriverInfoData) ? > + TRUE : > + FALSE; > + IsNullDriver = !(DriverInfoAvailable && > + (DriverInfoData.DriverType == SPDIT_CLASSDRIVER || > DriverInfoData.DriverType == > SPDIT_COMPATDRIVER)); > + > switch (Function) { > + case DIF_SELECTBESTCOMPATDRV: { > + // If the NULL driver will be installed, treat this as we would a > DIF_REMOVE > + // to work around the fact that Windows 10 2004 doesn't call > DIF_INSTALLDEVICE on uninstall. > + Error = (IsNullDriver) ? > + DifRemove(DeviceInfoSet, DeviceInfoData, Context) : > + NO_ERROR; > + break; > + } > case DIF_INSTALLDEVICE: { > - SP_DRVINFO_DATA DriverInfoData; > - BOOLEAN DriverInfoAvailable; > - > - DriverInfoData.cbSize = sizeof (DriverInfoData); > - DriverInfoAvailable = SetupDiGetSelectedDriver(DeviceInfoSet, > - DeviceInfoData, > - &DriverInfoData) ? > - TRUE : > - FALSE; > - > - // If there is no driver information then the NULL driver is being > - // installed. Treat this as we would a DIF_REMOVE. > - Error = (DriverInfoAvailable) ? > - DifInstall(DeviceInfoSet, DeviceInfoData, Context) : > - DifRemove(DeviceInfoSet, DeviceInfoData, Context); > + Error = (IsNullDriver) ? > + NO_ERROR : > + DifInstall(DeviceInfoSet, DeviceInfoData, Context); > break; > } > case DIF_REMOVE: > -- > 2.25.1
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |