[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH 1/2] Remove CoInstaller from INF
Windows 11 22H2 WHQL requires INF files pass "InfVerif /k", which highlights several issues - PnpLockdown=1 needs to be specified - CoInstallers are no longer allowed The CoInstaller has several functions that will need alternative solutions: - The AllowUpdate mechanism is no longer possible - The safety checks that ensure interface versionings remain compatible - The updating of various system config registry values Interface safety checks need to be handled by changes to child device bindings, and assuming upgrade via emulated devices is safe. The unplug keys are cleared in the INF to revert to emulated on the next boot, incase the current child drivers rely on an interface that is no longer present (note: in this case, child drivers will need updating). Also updates unplug_interface.h and device bindings so that this driver is only loaded on a later XenBus that has removed the XenBus CoInstaller. Signed-off-by: Owen Smith <owen.smith@xxxxxxxxx> --- include/unplug_interface.h | 30 ++++++++++++++++++++++++++++-- src/xenvbd.inf | 32 +++++++++++++++++--------------- 2 files changed, 45 insertions(+), 17 deletions(-) diff --git a/include/unplug_interface.h b/include/unplug_interface.h index 46c5dd4..9bad290 100644 --- a/include/unplug_interface.h +++ b/include/unplug_interface.h @@ -85,6 +85,20 @@ typedef VOID IN BOOLEAN Make ); +/*! \typedef XENBUS_UNPLUG_GETSTATE + \brief Has a type of emulated device been unplugged + + \param Interface The interface header + \param Type The type of device + + \return TRUE The type of device has been unplugged this boot +*/ +typedef BOOLEAN +(*XENBUS_UNPLUG_GETSTATE)( + IN PINTERFACE Interface, + IN XENBUS_UNPLUG_DEVICE_TYPE Type + ); + // {73db6517-3d06-4937-989f-199b7501e229} DEFINE_GUID(GUID_XENBUS_UNPLUG_INTERFACE, 0x73db6517, 0x3d06, 0x4937, 0x98, 0x9f, 0x19, 0x9b, 0x75, 0x01, 0xe2, 0x29); @@ -100,7 +114,19 @@ struct _XENBUS_UNPLUG_INTERFACE_V1 { XENBUS_UNPLUG_REQUEST UnplugRequest; }; -typedef struct _XENBUS_UNPLUG_INTERFACE_V1 XENBUS_UNPLUG_INTERFACE, *PXENBUS_UNPLUG_INTERFACE; +/*! \struct _XENBUS_UNPLUG_INTERFACE_V2 + \brief UNPLUG interface version 2 + \ingroup interfaces +*/ +struct _XENBUS_UNPLUG_INTERFACE_V2 { + INTERFACE Interface; + XENBUS_UNPLUG_ACQUIRE UnplugAcquire; + XENBUS_UNPLUG_RELEASE UnplugRelease; + XENBUS_UNPLUG_REQUEST UnplugRequest; + XENBUS_UNPLUG_GETSTATE UnplugGetState; +}; + +typedef struct _XENBUS_UNPLUG_INTERFACE_V2 XENBUS_UNPLUG_INTERFACE, *PXENBUS_UNPLUG_INTERFACE; /*! \def XENBUS_UNPLUG \brief Macro at assist in method invocation @@ -111,6 +137,6 @@ typedef struct _XENBUS_UNPLUG_INTERFACE_V1 XENBUS_UNPLUG_INTERFACE, *PXENBUS_UNP #endif // _WINDLL #define XENBUS_UNPLUG_INTERFACE_VERSION_MIN 1 -#define XENBUS_UNPLUG_INTERFACE_VERSION_MAX 1 +#define XENBUS_UNPLUG_INTERFACE_VERSION_MAX 2 #endif // _XENBUS_UNPLUG_INTERFACE_H diff --git a/src/xenvbd.inf b/src/xenvbd.inf index 94553d7..8bb7998 100644 --- a/src/xenvbd.inf +++ b/src/xenvbd.inf @@ -37,10 +37,10 @@ Provider=%Vendor% CatalogFile=xenvbd.cat DriverVer=@INF_DATE@,@MAJOR_VERSION@.@MINOR_VERSION@.@MICRO_VERSION@.@BUILD_NUMBER@ DriverPackageDisplayName=%DiskDesc% +PnpLockdown=1 [DestinationDirs] DefaultDestDir=12 -CoInst_CopyFiles=11 [SourceDisksNames] 0=%DiskDesc% @@ -49,15 +49,14 @@ CoInst_CopyFiles=11 xenvbd.sys=0,, xencrsh.sys=0,, xendisk.sys=0,, -xenvbd_coinst.dll=0,, [Manufacturer] %Vendor%=Inst,NT@INF_ARCH@ [Inst.NT@INF_ARCH@] -%XenVbdName%=XenVbd_Inst,XENBUS\VEN_@VENDOR_PREFIX@@VENDOR_DEVICE_ID@&DEV_VBD&REV_09000009 -%XenVbdName%=XenVbd_Inst,XENBUS\VEN_@VENDOR_PREFIX@0001&DEV_VBD&REV_09000009 -%XenVbdName%=XenVbd_Inst,XENBUS\VEN_@VENDOR_PREFIX@0002&DEV_VBD&REV_09000009 +%XenVbdName%=XenVbd_Inst,XENBUS\VEN_@VENDOR_PREFIX@@VENDOR_DEVICE_ID@&DEV_VBD&REV_0900000A +%XenVbdName%=XenVbd_Inst,XENBUS\VEN_@VENDOR_PREFIX@0001&DEV_VBD&REV_0900000A +%XenVbdName%=XenVbd_Inst,XENBUS\VEN_@VENDOR_PREFIX@0002&DEV_VBD&REV_0900000A [XenVbd_Inst] CopyFiles=XenVbd_Copyfiles @@ -96,7 +95,7 @@ StartType=%SERVICE_BOOT_START% ErrorControl=%SERVICE_ERROR_NORMAL% ServiceBinary=%12%\xenvbd.sys LoadOrderGroup="Scsi Miniport" -AddReg=XenVbd_Parameters +AddReg=XenVbd_Parameters, XenVbd_Unplug, XenVbd_Extras [XenVbd_Parameters] HKR,"Parameters",,0x00000010 @@ -106,23 +105,26 @@ HKR,"Parameters","RequestKey",0x00000000,%RequestKey% HKR,"Parameters","max-ring-page-order",0x00010001,0x00000001 HKR,"Parameters","multi-queue-max-queues",0x00010001,0x00000002 -[XenVbd_Inst.CoInstallers] -CopyFiles=CoInst_CopyFiles -AddReg=CoInst_AddReg +[XenVbd_Unplug] +HKLM,%UnplugKey%,"DISKS",0x00010001,0 -[CoInst_CopyFiles] -xenvbd_coinst_@MAJOR_VERSION@_@MINOR_VERSION@_@MICRO_VERSION@_@BUILD_NUMBER@.dll,xenvbd_coinst.dll +[XenVbd_Extras] +HKLM,%PnpKey%,"DisableCDDB",0x00010001,0 +HKLM,%PnpKey%,"DontStartRawDevices",0x00010001,0 +HKLM,%PartMgrKey%,"SanPolicy",0x00010001,1 +HKLM,%DiskKey%,"TimeOutValue",0x00010001,120 -[CoInst_AddReg] -HKR,,CoInstallers32,0x00010000,"xenvbd_coinst_@MAJOR_VERSION@_@MINOR_VERSION@_@MICRO_VERSION@_@BUILD_NUMBER@.dll,Entry" - -[Strings] +[Strings] Vendor = "@VENDOR_NAME@" DiskDesc = "@PRODUCT_NAME@ PV Storage Host Adapter Package" XenVbdName= "@PRODUCT_NAME@ PV Storage Host Adapter" XenDiskName= "@PRODUCT_NAME@ PV Storage Filter" RequestKey="SYSTEM\CurrentControlSet\Services\xenbus_monitor\Request" +UnplugKey="SYSTEM\CurrentControlSet\Services\XEN\Unplug" +PnpKey="SYSTEM\CurrentControlSet\Control\Pnp" +PartMgrKey="SYSTEM\CurrentControlSet\Services\PartMgr\Parameters" +DiskKey="SYSTEM\CurrentControlSet\Services\Disk" SERVICE_BOOT_START = 0x0 SERVICE_SYSTEM_START = 0x1 -- 2.41.0.windows.3
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |