This patch fixes some issues when building for Windows 
on Visual Studio 2022 (only supports target version 10) 
and current driver SDKs. 
The build is currently failing due to missing variables in 
msbuild properties and fails in driver verification.

Tested with VS 2022 and --with-vstudiotargetver=win10 and tested 
if it still works for VS2019 / Win8/8.1/10 using the ci build scripts.
Tested for VS 2019 with same SDKs/WDKs installed in appveyor 2019 VM, 
as documented here: https://www.appveyor.com/docs/windows-images-software/

Remarks: It is getting more and more difficult to build for Win8 these 
days - so dropping support for Win8 in the near future is something 
that should be considered. Currently, installing an SDK above the 
Windows 11 SDK/WDK (build 10.0.22000.1) will break the Win8 build 
regardless of whether it is installed for VS 2022 or VS 2019.


datapath-windows/automake / build script
-----------------------------------------------
VS2022 requires Version to be passed to StampInf, added version 
to Windows10 make datapath_*. 
Splitted datapath_windows_analyze for win8 and win10, 
so this is now datapath_windows_analyze_win10 and 
datapath_windows_analyze_win8, both are called from build script. 
The ci build script will continue to work only with VS 2019 as it 
requires to build Win8 for install.

msbuild configuration for Win10
-----------------------------------
- Fixed missing TargetVersion Windows10 which works currently 
  for but building but is inconsistent set between build and package. 
  In package it fails without TargetVersion as inf stamping requires 
  a valid target version and target platform.
- Set DriverTargetPlatform to Universal, which is recommended here 
  
https://learn.microsoft.com/en-us/windows-hardware/drivers/develop/get-started-developing-windows-drivers
 
  if supported (see inf file updates).
- Set _NT_TARGET_VERSION=0x0A00 to target minimal Win 10/ 
  Server 2016 version, see also 
https://techcommunity.microsoft.com/blog/windowsdriverdev/building-drivers-for-previous-os-releases-using-the-latest-windows-driver-kit-wd/4374910

datapath-windows/ovsext/Util.c
-----------------------------------
ExAllocatePoolWithTagPriority is deprecated and fails 
in Win10 driver verification.
Replaced ExAllocatePoolWithTagPriority with 
ExAllocatePoolPriorityUninitialized. 
The function OvsAllocateAlignedMemory seems to be unused, 
so a alternative may be to remove entire function.


datapath-windows/ovsext/ovsext.inf
----------------------------------------
The inf file was minimally fixed in this patch for driver verification.
In second patch - as it is optional - I will add an updated 
inf file that supports running from driver store on supporting OS versions.


Signed-off-by: Frank Wagner <[email protected]>

---
 .ci/windows-build.sh                     |  3 ++-
 datapath-windows/Package/package.VcxProj | 15 ++++++++-------
 datapath-windows/automake.mk             | 11 +++++++----
 datapath-windows/ovsext/Util.c           |  8 ++++----
 datapath-windows/ovsext/ovsext.inf       |  1 +
 datapath-windows/ovsext/ovsext.vcxproj   | 17 +++++++++--------
 6 files changed, 31 insertions(+), 24 deletions(-)

diff --git a/.ci/windows-build.sh b/.ci/windows-build.sh
index e54fbacf4..26701000d 100644
--- a/.ci/windows-build.sh
+++ b/.ci/windows-build.sh
@@ -12,6 +12,7 @@ CONFIGURATION=$1
     --with-vstudiotarget="${CONFIGURATION}" || (cat config.log && exit 1)
 
 make -j4
-make datapath_windows_analyze
+make datapath_windows_analyze_win10
+make datapath_windows_analyze_win8
 make install
 make windows_installer
diff --git a/datapath-windows/Package/package.VcxProj 
b/datapath-windows/Package/package.VcxProj
index 994c34dc2..f41bc0b14 100644
--- a/datapath-windows/Package/package.VcxProj
+++ b/datapath-windows/Package/package.VcxProj
@@ -68,19 +68,20 @@
     
<PlatformToolset>WindowsKernelModeDriver$(PlatformToolsetVer)</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win10 Debug|x64'" 
Label="Configuration">
-    <TargetVersion>
-    </TargetVersion>
+    <TargetVersion>Windows10</TargetVersion>
     <UseDebugLibraries>true</UseDebugLibraries>
     <PlatformToolsetVer Condition="'$(PlatformToolsetVer)' == 
''">10.0</PlatformToolsetVer>
     
<PlatformToolset>WindowsKernelModeDriver$(PlatformToolsetVer)</PlatformToolset>
-    <DriverTargetPlatform>Desktop</DriverTargetPlatform>
+    <DriverTargetPlatform>Universal</DriverTargetPlatform>
+    <_NT_TARGET_VERSION>0x0A00</_NT_TARGET_VERSION>
   </PropertyGroup>
   <PropertyGroup 
Condition="'$(Configuration)|$(Platform)'=='Win10Analyze|x64'" 
Label="Configuration">
-    <TargetVersion />
+    <TargetVersion>Windows10</TargetVersion>
     <UseDebugLibraries>true</UseDebugLibraries>
     <PlatformToolsetVer Condition="'$(PlatformToolsetVer)' == 
''">10.0</PlatformToolsetVer>
     
<PlatformToolset>WindowsKernelModeDriver$(PlatformToolsetVer)</PlatformToolset>
-    <DriverTargetPlatform>Desktop</DriverTargetPlatform>
+    <DriverTargetPlatform>Universal</DriverTargetPlatform>
+    <_NT_TARGET_VERSION>0x0A00</_NT_TARGET_VERSION>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win8 Debug|x64'" 
Label="Configuration">
     <TargetVersion>Windows8</TargetVersion>
@@ -95,12 +96,12 @@
     
<PlatformToolset>WindowsKernelModeDriver$(PlatformToolsetVer)</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win10 
Release|x64'" Label="Configuration">
-    <TargetVersion>
-    </TargetVersion>
+    <TargetVersion>Windows10</TargetVersion>
     <UseDebugLibraries>false</UseDebugLibraries>
     <PlatformToolsetVer Condition="'$(PlatformToolsetVer)' == 
''">10.0</PlatformToolsetVer>
     
<PlatformToolset>WindowsKernelModeDriver$(PlatformToolsetVer)</PlatformToolset>
     <DriverTargetPlatform>Universal</DriverTargetPlatform>
+    <_NT_TARGET_VERSION>0x0A00</_NT_TARGET_VERSION>
   </PropertyGroup>
   <PropertyGroup Label="Configuration" 
Condition="'$(Configuration)|$(Platform)'=='Win8.1 Release|x64'">
     <TargetVersion>WindowsV6.3</TargetVersion>
diff --git a/datapath-windows/automake.mk b/datapath-windows/automake.mk
index ea320e732..3c7d34b16 100644
--- a/datapath-windows/automake.mk
+++ b/datapath-windows/automake.mk
@@ -90,11 +90,14 @@ EXTRA_DIST += \
        datapath-windows/ovsext/precompsrc.c \
        datapath-windows/ovsext/resource.h
 
-datapath_windows_analyze: all
-       MSBuild.exe //nologo //maxcpucount datapath-windows/ovsext.sln 
/target:Build /property:Configuration="Win10Analyze"
+datapath_windows_analyze_win10: all
+       MSBuild.exe //nologo //maxcpucount datapath-windows/ovsext.sln 
/target:Build /property:Configuration="Win10Analyze" 
/property:Version="$(PACKAGE_VERSION)"
+
+datapath_windows_analyze_win8: all
        MSBuild.exe //nologo //maxcpucount datapath-windows/ovsext.sln 
/target:Build /property:Configuration="Win8.1Analyze"
        MSBuild.exe //nologo //maxcpucount datapath-windows/ovsext.sln 
/target:Build /property:Configuration="Win8Analyze"
 
+
 datapath_windows: all
-       MSBuild.exe //nologo //maxcpucount datapath-windows/ovsext.sln 
/target:Build /property:Configuration="Win10Debug"
-       MSBuild.exe //nologo //maxcpucount datapath-windows/ovsext.sln 
/target:Build /property:Configuration="Win10Release"
+       MSBuild.exe //nologo //maxcpucount datapath-windows/ovsext.sln 
/target:Build /property:Configuration="Win10Debug" 
/property:Version="$(PACKAGE_VERSION)"
+       MSBuild.exe //nologo //maxcpucount datapath-windows/ovsext.sln 
/target:Build /property:Configuration="Win10Release" 
/property:Version="$(PACKAGE_VERSION)"
diff --git a/datapath-windows/ovsext/Util.c b/datapath-windows/ovsext/Util.c
index d703b2468..0e70993f0 100644
--- a/datapath-windows/ovsext/Util.c
+++ b/datapath-windows/ovsext/Util.c
@@ -59,9 +59,9 @@ OvsAllocateAlignedMemory(size_t size, UINT16 align)
          * XXX: NdisAllocateMemory*() functions don't talk anything about
          * alignment. Hence using ExAllocatePool*();
          */
-        return (VOID *)ExAllocatePoolWithTagPriority(NonPagedPoolNx, size,
-                                                     OVS_MEMORY_TAG,
-                                                     NormalPoolPriority);
+        return (VOID *)ExAllocatePoolPriorityUninitialized(NonPagedPoolNx, 
size,
+            OVS_MEMORY_TAG,
+            NormalPoolPriority);
     }
 
     /* Invalid user input. */
@@ -179,4 +179,4 @@ OvsIpv6AddressToString(struct in6_addr ipv6Addr, char* 
ip6String)
 
     returnedIpv6Str = RtlIpv6AddressToStringA((&ipv6Addr), ip6String);
     return returnedIpv6Str;
-}
\ No newline at end of file
+}
diff --git a/datapath-windows/ovsext/ovsext.inf 
b/datapath-windows/ovsext/ovsext.inf
index e68b94a36..59ae5304b 100644
--- a/datapath-windows/ovsext/ovsext.inf
+++ b/datapath-windows/ovsext/ovsext.inf
@@ -9,6 +9,7 @@ ClassGUID   = {4D36E974-E325-11CE-BFC1-08002BE10318}
 Provider    = %OVS%
 CatalogFile = ovsext.cat
 DriverVer   = 10/10/2013,1.0
+PnpLockdown = 1
 
 [Manufacturer]
 %OVS%=OVS,NTx86,NTia64,NTamd64
diff --git a/datapath-windows/ovsext/ovsext.vcxproj 
b/datapath-windows/ovsext/ovsext.vcxproj
index 8ee56aa00..a3fc5e7b1 100644
--- a/datapath-windows/ovsext/ovsext.vcxproj
+++ b/datapath-windows/ovsext/ovsext.vcxproj
@@ -68,19 +68,20 @@
     
<PlatformToolset>WindowsKernelModeDriver$(PlatformToolsetVer)</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win10 Debug|x64'" 
Label="Configuration">
-    <TargetVersion>
-    </TargetVersion>
+    <TargetVersion>Windows10</TargetVersion>
     <UseDebugLibraries>True</UseDebugLibraries>
     <PlatformToolsetVer Condition="'$(PlatformToolsetVer)' == 
''">10.0</PlatformToolsetVer>
     
<PlatformToolset>WindowsKernelModeDriver$(PlatformToolsetVer)</PlatformToolset>
-    <DriverTargetPlatform>Desktop</DriverTargetPlatform>
+    <DriverTargetPlatform>Universal</DriverTargetPlatform>
+    <_NT_TARGET_VERSION>0x0A00</_NT_TARGET_VERSION>
   </PropertyGroup>
   <PropertyGroup 
Condition="'$(Configuration)|$(Platform)'=='Win10Analyze|x64'" 
Label="Configuration">
-    <TargetVersion />
+    <TargetVersion>Windows10</TargetVersion>
     <UseDebugLibraries>True</UseDebugLibraries>
     <PlatformToolsetVer Condition="'$(PlatformToolsetVer)' == 
''">10.0</PlatformToolsetVer>
     
<PlatformToolset>WindowsKernelModeDriver$(PlatformToolsetVer)</PlatformToolset>
-    <DriverTargetPlatform>Desktop</DriverTargetPlatform>
+    <DriverTargetPlatform>Universal</DriverTargetPlatform>
+    <_NT_TARGET_VERSION>0x0A00</_NT_TARGET_VERSION>
   </PropertyGroup>
   <PropertyGroup Label="Configuration" 
Condition="'$(Configuration)|$(Platform)'=='Win8 Debug|x64'">
     <TargetVersion>Windows8</TargetVersion>
@@ -101,12 +102,12 @@
     
<PlatformToolset>WindowsKernelModeDriver$(PlatformToolsetVer)</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win10 
Release|x64'" Label="Configuration">
-    <TargetVersion>
-    </TargetVersion>
+    <TargetVersion>Windows10</TargetVersion>
     <UseDebugLibraries>False</UseDebugLibraries>
     <PlatformToolsetVer Condition="'$(PlatformToolsetVer)' == 
''">10.0</PlatformToolsetVer>
     
<PlatformToolset>WindowsKernelModeDriver$(PlatformToolsetVer)</PlatformToolset>
-    <DriverTargetPlatform>Desktop</DriverTargetPlatform>
+    <DriverTargetPlatform>Universal</DriverTargetPlatform>
+    <_NT_TARGET_VERSION>0x0A00</_NT_TARGET_VERSION>
   </PropertyGroup>
   <PropertyGroup Label="Configuration" 
Condition="'$(Configuration)|$(Platform)'=='Win8 Release|x64'">
     <TargetVersion>Windows8</TargetVersion>
-- 
2.48.1

_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to