[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH] Ensure DifRemove coinst routine runs on uninstall.
Sure, that would be ok.
Troy
> -----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
|