[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH v2 0/6] Remove CoInstallers



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.
  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 (6):
  Reset StorNvme's StartOverride
  Fix Length calculation in PdoQueryId
  Remove REV from DeviceID
  Add Unplug v2 interface (REV_0900000A)
  Remove CoInstaller from INF
  Delete CoInstaller code

 include/revision.h                            |    3 +-
 include/unplug_interface.h                    |   30 +-
 include/xen.h                                 |    7 +
 src/coinst/coinst.c                           | 2136 -----------------
 src/coinst/xenbus_coinst.def                  |   38 -
 src/coinst/xenbus_coinst.rc                   |   57 -
 src/monitor/monitor.c                         |   63 +
 src/xen/unplug.c                              |   15 +
 src/xenbus.inf                                |   18 +-
 src/xenbus/pdo.c                              |   14 +-
 src/xenbus/unplug.c                           |   59 +
 vs2015/package/package.vcxproj                |    3 -
 vs2015/xenbus.sln                             |   22 -
 vs2015/xenbus_coinst/xenbus_coinst.vcxproj    |   64 -
 .../xenbus_coinst/xenbus_coinst.vcxproj.user  |    8 -
 vs2017/package/package.vcxproj                |    3 -
 vs2017/xenbus.sln                             |   22 -
 vs2017/xenbus_coinst/xenbus_coinst.vcxproj    |   64 -
 .../xenbus_coinst/xenbus_coinst.vcxproj.user  |    8 -
 vs2019/package/package.vcxproj                |    3 -
 vs2019/xenbus.sln                             |   22 -
 vs2019/xenbus_coinst/xenbus_coinst.vcxproj    |   70 -
 .../xenbus_coinst/xenbus_coinst.vcxproj.user  |    8 -
 vs2022/package/package.vcxproj                |    3 -
 vs2022/xenbus.sln                             |   22 -
 vs2022/xenbus_coinst/xenbus_coinst.vcxproj    |   70 -
 .../xenbus_coinst/xenbus_coinst.vcxproj.user  |    8 -
 27 files changed, 184 insertions(+), 2656 deletions(-)
 delete mode 100644 src/coinst/coinst.c
 delete mode 100644 src/coinst/xenbus_coinst.def
 delete mode 100644 src/coinst/xenbus_coinst.rc
 delete mode 100644 vs2015/xenbus_coinst/xenbus_coinst.vcxproj
 delete mode 100644 vs2015/xenbus_coinst/xenbus_coinst.vcxproj.user
 delete mode 100644 vs2017/xenbus_coinst/xenbus_coinst.vcxproj
 delete mode 100644 vs2017/xenbus_coinst/xenbus_coinst.vcxproj.user
 delete mode 100644 vs2019/xenbus_coinst/xenbus_coinst.vcxproj
 delete mode 100644 vs2019/xenbus_coinst/xenbus_coinst.vcxproj.user
 delete mode 100644 vs2022/xenbus_coinst/xenbus_coinst.vcxproj
 delete mode 100644 vs2022/xenbus_coinst/xenbus_coinst.vcxproj.user

-- 
2.41.0.windows.3




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.