[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v2 0/5] Remove CoInstallers
This is referring to XenBus's coinstaller checking DriverDesc of the current driver and PRODUCT_NAME_STR
Owen
[CAUTION - EXTERNAL EMAIL] DO NOT reply, click links, or open attachments unless you have verified the sender and know the content is safe.
On 13/09/2023 15:15, Owen Smith wrote:
> Windows 11 22H2 WHQL testing has highlighted the need to remove CoInstallers.
> The current CoInstaller handle several edge cases that will need replacement
> implementations. This patch series for most drivers offers a potential solution
> to the removal of CoInstallers and the required changes to avoid upgrade issues.
>
> CoInstallers have several uses currently:
> - Adds an upgrade block function with the "AllowUpgrade" value blocking driver
> upgrades when set.
> - Adds a check to prevent XenBus upgrades from a different vendor / brand.
BTW I guess you meant XenVif here :-)
Paul
> This checks the current device name (if it exists) matches the new device name.
> - Checks all currently installed child devices have a supported set of interfaces
> common with the new parent device.
> - Clears the Unplug keys only when required.
> - Correctly cleans up user mode services on uninstall.
>
> The AllowUpgrade function has not been replaced - I have not seen this used in
> the current implementations of the drivers.
>
> The vendor naming check is specific to XenBus, and I dont think there is a
> reliable replacement, and was intended to prevent different vendor drivers from
> attempting to coexist, or upgrade cases from particularly old versions which had
> a different naming scheme.
>
> The interface compatability checks can be replaced with the matching if RevisionIDs
> in the INF files, so that child devices will only install on parent devices that
> expose a matching HardwareID or CompatibleID. This does leave the case where the
> new parent driver could drop support for an interface version that is currently in
> use. This will mandate a further driver upgrade, and should remove the Unplug keys
> and mandate a reboot where the emulated devices are present, to ensure continued
> operation. After this reboot using emulated devices, updates to the child devices
> should be detected and installed, requiring another reboot to revert to PV devices.
>
> Unplug keys getting cleared on all upgrades should allow the next boot to use emulated
> devices, unless a subsequent install updates dependent drivers to use a working set
> of new interfaces. The requirement here is that updating any driver should always
> allow a reboot with emulated devices, should any further issues be detected.
>
> I believe that, going forward, changing the DeviceID to remove the RevisionID will
> avoid the need to set network IDs and copy settings from the previous network
> connection to the new network connection. This change will mean the driver selection
> during installation/upgrade will use the HardwareIDs (with RevisionIDs) to match the
> ID in the DDInstall INF section (with RevisionID), and use the DeviceID to generate
> the Matching Device ID and Instance ID. This means that once drivers have been
> upgraded, the InstanceIDs should not change, and Windows should not generate a new
> network connection (with default settings) for the upgraded driver set - meaning the
> correct network settings are persisted.
>
> I dont have a good replacement for cleaning up user mode services (xenbus_monitor
> xenagent and xencons_monitor) on device uninstall. This *should* be handled correctly
> by the PnP manager, but failing to stop either service should not be detremental to
> the operation of the VM. Selecting the "Delete Drivers" option during uninstall will
> stop and disable these services, not selecting this option will leave these services
> running.
>
> Owen Smith (5):
> Fix Length calculation in PdoQueryId
> Remove REV from DeviceID
> Add Unplug v2 (REV_0900000A)
> Remove CoInstaller from INF
> Delete CoInstaller code
>
> include/unplug_interface.h | 30 +-
> src/coinst/coinst.c | 1732 -----------------
> src/coinst/xenvif_coinst.def | 38 -
> src/coinst/xenvif_coinst.rc | 57 -
> src/xenvif.inf | 23 +-
> src/xenvif/pdo.c | 38 +-
> vs2015/package/package.vcxproj | 3 -
> vs2015/xenvif.sln | 26 -
> vs2015/xenvif_coinst/xenvif_coinst.vcxproj | 65 -
> .../xenvif_coinst/xenvif_coinst.vcxproj.user | 8 -
> vs2017/package/package.vcxproj | 3 -
> vs2017/xenvif.sln | 27 -
> vs2017/xenvif_coinst/xenvif_coinst.vcxproj | 65 -
> .../xenvif_coinst/xenvif_coinst.vcxproj.user | 8 -
> vs2019/package/package.vcxproj | 3 -
> vs2019/xenvif.sln | 27 -
> vs2019/xenvif_coinst/xenvif_coinst.vcxproj | 71 -
> .../xenvif_coinst/xenvif_coinst.vcxproj.user | 8 -
> vs2022/package/package.vcxproj | 3 -
> vs2022/xenvif.sln | 27 -
> vs2022/xenvif_coinst/xenvif_coinst.vcxproj | 71 -
> .../xenvif_coinst/xenvif_coinst.vcxproj.user | 8 -
> 22 files changed, 62 insertions(+), 2279 deletions(-)
> delete mode 100644 src/coinst/coinst.c
> delete mode 100644 src/coinst/xenvif_coinst.def
> delete mode 100644 src/coinst/xenvif_coinst.rc
> delete mode 100644 vs2015/xenvif_coinst/xenvif_coinst.vcxproj
> delete mode 100644 vs2015/xenvif_coinst/xenvif_coinst.vcxproj.user
> delete mode 100644 vs2017/xenvif_coinst/xenvif_coinst.vcxproj
> delete mode 100644 vs2017/xenvif_coinst/xenvif_coinst.vcxproj.user
> delete mode 100644 vs2019/xenvif_coinst/xenvif_coinst.vcxproj
> delete mode 100644 vs2019/xenvif_coinst/xenvif_coinst.vcxproj.user
> delete mode 100644 vs2022/xenvif_coinst/xenvif_coinst.vcxproj
> delete mode 100644 vs2022/xenvif_coinst/xenvif_coinst.vcxproj.user
>
|