summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.github/scripts/Install-Vsix.ps138
-rw-r--r--.github/workflows/Code-Scanning.yml50
-rw-r--r--.github/workflows/ci-pr.yml10
-rw-r--r--.github/workflows/ci.yml13
-rw-r--r--Build-SampleSet.ps151
-rw-r--r--Building-Locally.md6
-rw-r--r--configuration.dsc.yaml30
-rw-r--r--configuration_vsonly.dsc.yaml6
-rw-r--r--filesys/miniFilter/scanner/user/scanUser.c52
-rw-r--r--simbatt/func/miniclass.c2
10 files changed, 163 insertions, 95 deletions
diff --git a/.github/scripts/Install-Vsix.ps1 b/.github/scripts/Install-Vsix.ps1
new file mode 100644
index 00000000..50ef088b
--- /dev/null
+++ b/.github/scripts/Install-Vsix.ps1
@@ -0,0 +1,38 @@
+<#
+
+.SYNOPSIS
+Download and install the latest WDK VSIX.
+
+#>
+
+# set uri by resolving amd64 vsix
+$uri = "https://marketplace.visualstudio.com$((Invoke-WebRequest -Uri "https://marketplace.visualstudio.com/items?itemName=DriverDeveloperKits-WDK.WDKVsix").Links | Where-Object outerHTML -like '*(amd64)*' | select -expand href)"
+
+# set download version
+$uri_version = ([regex]'(\d+\.)(\d+\.)(\d+\.)(\d+)').Matches($uri).Value
+
+# set msbuild path
+$msbuild_path = (Resolve-Path "$env:ProgramFiles\Microsoft Visual Studio\2022\*\MSBuild\")
+
+# download vsix, expand, and store the downloaded version extracted from the extension manifest
+"Downloading WDK VSIX version: $uri_version..."
+Invoke-WebRequest -Uri "$uri" -OutFile wdk.zip
+"Expanding WDK VSIX archive..."
+Expand-Archive ".\wdk.zip" .\
+"Extracting version from manifest..."
+$downloaded_version = ([xml](Get-Content .\extension.vsixmanifest)).PackageManifest.Metadata.Identity.Version
+"Downloaded WDK VSIX version: $downloaded_version"
+
+# copy msbuild files, extension manifest, and check installed version from the extension manifest
+"Copying WDK extension files to build path..."
+cp (".\`$MSBuild\*", ".\extension.vsixmanifest") "$msbuild_path" -Recurse -Force
+"Extracting version from copied manifest..."
+$installed_version = ([xml](Get-Content ${msbuild_path}\extension.vsixmanifest)).PackageManifest.Metadata.Identity.Version
+"Installed WDK VSIX Version: $installed_version"
+if (-not ("$downloaded_version" -eq "$installed_version")) {
+ "WDK VSIX installation failed due to version mismatch"
+ exit 1
+}
+
+# set github environment variable for vsix version
+"SAMPLES_VSIX_VERSION=$installed_version" | Out-File -FilePath "$env:GITHUB_ENV" -Append
diff --git a/.github/workflows/Code-Scanning.yml b/.github/workflows/Code-Scanning.yml
index a18bcf95..cd0d8abf 100644
--- a/.github/workflows/Code-Scanning.yml
+++ b/.github/workflows/Code-Scanning.yml
@@ -32,31 +32,31 @@ jobs:
language: [ 'cpp' ]
steps:
- - name: Checkout repository
- uses: actions/checkout@v4
- with:
- submodules: 'recursive'
+ - name: Checkout repository
+ uses: actions/checkout@v4
+ with:
+ submodules: 'recursive'
- - name: Initialize CodeQL
- uses: github/codeql-action/init@v3
- with:
- languages: ${{ matrix.language }}
- packs: microsoft/windows-drivers
- - name: Add MSBuild to PATH
- uses: microsoft/setup-msbuild@v2
+ - name: Install WDK VSIX
+ run: .\.github\scripts\Install-Vsix.ps1
- - name: Retrieve and build all available solutions
- run: |
- .\Build-AllSamples.ps1 -Verbose -ThrottleLimit 1
- env:
- WDS_Configuration: Debug
- WDS_Platform: x64
- WDS_WipeOutputs: ${{ true }}
+ - name: Install Nuget Packages
+ run: nuget restore .\packages.config -PackagesDirectory .\packages\
- - name: Perform CodeQL analysis
- uses: github/codeql-action/analyze@v3
- with:
- category: "/language:${{matrix.language}}"
-
-
-
+ - name: Initialize CodeQL
+ uses: github/codeql-action/init@v3
+ with:
+ languages: ${{ matrix.language }}
+ packs: microsoft/windows-drivers
+
+ - name: Retrieve and build all available solutions
+ run: .\Build-AllSamples.ps1 -Verbose -ThrottleLimit 1
+ env:
+ WDS_Configuration: Debug
+ WDS_Platform: x64
+ WDS_WipeOutputs: ${{ true }}
+
+ - name: Perform CodeQL analysis
+ uses: github/codeql-action/analyze@v3
+ with:
+ category: "/language:${{matrix.language}}"
diff --git a/.github/workflows/ci-pr.yml b/.github/workflows/ci-pr.yml
index 7640b966..c04f4adb 100644
--- a/.github/workflows/ci-pr.yml
+++ b/.github/workflows/ci-pr.yml
@@ -22,8 +22,11 @@ jobs:
with:
submodules: 'recursive'
- - name: Add MSBuild to PATH
- uses: microsoft/setup-msbuild@v2
+ - name: Install WDK VSIX
+ run: .\.github\scripts\Install-Vsix.ps1
+
+ - name: Install Nuget Packages
+ run: nuget restore .\packages.config -PackagesDirectory .\packages\
- name: Get changed files
id: get-changed-files
@@ -63,8 +66,7 @@ jobs:
path: _logs
- name: Join and generate global reports
- run: |
- .\.github\scripts\Join-CsvReports.ps1
+ run: .\.github\scripts\Join-CsvReports.ps1
- name: Archive global overview build reports
uses: actions/upload-artifact@v3
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index ad92f83b..c35a81ec 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -22,12 +22,14 @@ jobs:
with:
submodules: 'recursive'
- - name: Add MSBuild to PATH
- uses: microsoft/setup-msbuild@v2
+ - name: Install WDK VSIX
+ run: .\.github\scripts\Install-Vsix.ps1
+
+ - name: Install Nuget Packages
+ run: nuget restore .\packages.config -PackagesDirectory .\packages\
- name: Retrieve and build all available solutions
- run: |
- .\Build-AllSamples.ps1 -Verbose
+ run: .\Build-AllSamples.ps1 -Verbose
env:
WDS_Configuration: ${{ matrix.configuration }}
WDS_Platform: ${{ matrix.platform }}
@@ -56,8 +58,7 @@ jobs:
path: _logs
- name: Join and generate global reports
- run: |
- .\.github\scripts\Join-CsvReports.ps1
+ run: .\.github\scripts\Join-CsvReports.ps1
- name: Archive global overview build reports
uses: actions/upload-artifact@v3
diff --git a/Build-SampleSet.ps1 b/Build-SampleSet.ps1
index b0da097a..adae8bb0 100644
--- a/Build-SampleSet.ps1
+++ b/Build-SampleSet.ps1
@@ -9,6 +9,14 @@ param(
)
$root = Get-Location
+
+# launch developer powershell (if necessary to prevent multiple developer sessions)
+if (-not $env:VSCMD_VER) {
+ Import-Module (Resolve-Path "$env:ProgramFiles\Microsoft Visual Studio\2022\*\Common7\Tools\Microsoft.VisualStudio.DevShell.dll")
+ Enter-VsDevShell -VsInstallPath (Resolve-Path "$env:ProgramFiles\Microsoft Visual Studio\2022\*")
+ cd $root
+}
+
$ThrottleFactor = 5
$LogicalProcessors = (Get-CIMInstance -Class 'CIM_Processor' -Verbose:$false).NumberOfLogicalProcessors
@@ -45,27 +53,34 @@ finally {
}
#
-# Determine build environment: 'GitHub', 'NuGet', 'EWDK', or 'WDK'. Only used to determine build number.
+# Determine build environment: 'GitHub', 'NuGet', 'EWDK', or 'WDK'.
# Determine build number (used for exclusions based on build number). Five digits. Say, '22621'.
+# Determine NuGet package version (if applicable).
+# Determine WDK vsix version.
#
$build_environment=""
$build_number=0
+$nuget_package_version=0
+$vsix_version=""
#
-# WDK NuGet will require presence of a folder 'packages'
+# In Github we build using NuGet and get the version from packages and vsix version from env var set from the install vsix step.
#
-#
-# Hack: In GitHub we do not have an environment variable where we can see WDK build number, so we have it hard coded.
-#
-if (-not $env:GITHUB_REPOSITORY -eq '') {
+if ($env:GITHUB_REPOSITORY) {
$build_environment="GitHub"
- $build_number=22621
+ $nuget_package_version=([regex]'(?<=x64\.)(\d+\.)(\d+\.)(\d+\.)(\d+)').Matches((Get-Childitem .\packages\*WDK.x64* -Name)).Value
+ $build_number=$nuget_package_version.split('.')[2]
+ $vsix_version = $env:SAMPLES_VSIX_VERSION
}
#
-# Hack: If user has hydrated nuget packages, then use those. That will be indicated by presence of a folder named .\packages.
+# WDK NuGet will require presence of a folder 'packages'. The version is sourced from repo .\Env-Vars.ps1.
+#
+# Hack: If user has hydrated nuget packages, then use those. That will be indicated by presence of a folder named '.\packages'.
+# Further, we need to test that the directory has been hydrated using '.\packages\*'.
#
-elseif(Test-Path(".\packages")) {
+elseif(Test-Path(".\packages\*")) {
$build_environment=("NuGet")
- $build_number=26100
+ $nuget_package_version=([regex]'(?<=x64\.)(\d+\.)(\d+\.)(\d+\.)(\d+)').Matches((Get-Childitem .\packages\*WDK.x64* -Name)).Value
+ $build_number=$nuget_package_version.split('.')[2]
}
#
# EWDK sets environment variable BuildLab. For example 'ni_release_svc_prod1.22621.2428'.
@@ -91,7 +106,19 @@ else {
Write-Error "Could not determine build environment."
exit 1
}
-
+#
+# Get the vsix version from packages if not set
+if (-not $vsix_version) {
+ $vsix_version = ls "${env:ProgramData}\Microsoft\VisualStudio\Packages\Microsoft.Windows.DriverKit,version=*" | Select -ExpandProperty Name
+ if ($vsix_version) {
+ $vsix_version = $vsix_version.split('=')[1]
+ }
+ else {
+ Write-Error "No version of the WDK VSIX could be found. The WDK VSIX is not installed."
+ exit 1
+ }
+}
+#
#
# InfVerif_AdditionalOptions
#
@@ -155,6 +182,8 @@ $SolutionsTotal = $sampleSet.Count * $Configurations.Count * $Platforms.Count
Write-Output ("Build Environment: " + $build_environment)
Write-Output ("Build Number: " + $build_number)
+if (($build_environment -eq "GitHub") -or ($build_environment -eq "NuGet")) { Write-Output ("Nuget Package Version: " + $nuget_package_version) }
+Write-Output ("WDK VSIX Version: " + $vsix_version)
Write-Output ("Samples: " + $sampleSet.Count)
Write-Output ("Configurations: " + $Configurations.Count + " (" + $Configurations + ")")
Write-Output ("Platforms: " + $Platforms.Count + " (" + $Platforms + ")")
diff --git a/Building-Locally.md b/Building-Locally.md
index bb9fc610..e3db8dde 100644
--- a/Building-Locally.md
+++ b/Building-Locally.md
@@ -79,7 +79,11 @@ To build the Windows Driver Samples you need a "driver build environment". In e
### Option A: Use WDK NuGet Packages
* See [Download the Windows Driver Kit (WDK)](https://learn.microsoft.com/en-us/windows-hardware/drivers/download-the-wdk) for instructions on how to install Visual Studio, but only complete "Step 1". You do not need to install the SDK or the WDK.
-* Install the Visual Studio Windows Driver Kit Extension (WDK.vsix). Open Visual Studio -> Extensions -> Manage Extensions... -> Online -> Visual Studio Market Place -> Windows Driver Kit -> 10.0.26100.0 -> Download
+* Install the Visual Studio Windows Driver Kit Extension (WDK.vsix).
+ * Open Visual Studio -> Extensions -> Manage Extensions... -> Browse.
+ * In the search bar type: `Windows Driver Kit`.
+ * Find the `Microsoft` signed extension.
+ * Click the Install button.
* Launch a "Developer Command Prompt for VS 2022".
* Restore WDK packages from feed :
diff --git a/configuration.dsc.yaml b/configuration.dsc.yaml
index a05b9034..6bfd0afd 100644
--- a/configuration.dsc.yaml
+++ b/configuration.dsc.yaml
@@ -4,18 +4,18 @@ properties:
- resource: Microsoft.WinGet.DSC/WinGetPackage
id: vsPackage
directives:
- description: Install Visual Studio Community 2022
+ description: Install Visual Studio 2022 Community
allowPrerelease: true
settings:
id: Microsoft.VisualStudio.2022.Community
source: winget
+ useLatest: true
- resource: Microsoft.VisualStudio.DSC/VSComponents
id: vsComponents
dependsOn:
- vsPackage
directives:
- description: Install required VS workloads
- allowPrerelease: true
+ description: Install required VS workloads and components
settings:
productId: Microsoft.VisualStudio.Product.Community
channelId: VisualStudio.17.Release
@@ -44,28 +44,26 @@ properties:
- Microsoft.VisualStudio.Workload.NativeDesktop
- Microsoft.Net.Component.4.7.2.TargetingPack
- Microsoft.Net.Component.4.8.1.SDK
-
- resource: Microsoft.WinGet.DSC/WinGetPackage
id: sdkPackage
- dependsOn:
- - vsComponents
directives:
- description: Install Windows SDK
+ description: Install Windows SDK version 26100
allowPrerelease: true
settings:
id: Microsoft.WindowsSDK.10.0.26100
source: winget
+ useLatest: true
- resource: Microsoft.WinGet.DSC/WinGetPackage
id: wdkPackage
dependsOn:
- sdkPackage
- - vsComponents
directives:
- description: Install Windows Driver Kit
+ description: Install Windows Driver Kit version 26100
allowPrerelease: true
settings:
id: Microsoft.WindowsWDK.10.0.26100
source: winget
+ useLatest: true
- resource: PSDscResources/Script
id: wdkVsix
dependsOn:
@@ -75,15 +73,11 @@ properties:
description: Install Windows Driver Kit VSIX
settings:
GetScript: |
- return & "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" -nologo -latest -products Microsoft.VisualStudio.Product.Community -requires Microsoft.Windows.DriverKit -property installationVersion
+ return & "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" -nologo -version '[17.0,18.0)' -requires Microsoft.Windows.DriverKit -property installationVersion
SetScript: |
- $path = & "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" -nologo -latest -products * -property enginePath | Join-Path -ChildPath 'VSIXInstaller.exe'
- $arch = $env:PROCESSOR_ARCHITECTURE
- if (Test-Path $path) { & $path /q "${env:ProgramFiles(x86)}\Windows Kits\10\Vsix\VS2022\10.0.26100.0\$arch\WDK.vsix" }
+ $installerPath = & "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" -nologo -latest -products * -property enginePath | Join-Path -ChildPath 'VSIXInstaller.exe'
+ if (Test-Path $installerPath) { & $installerPath /q "${env:ProgramFiles(x86)}\Windows Kits\10\Vsix\VS2022\10.0.26100.0\${env:PROCESSOR_ARCHITECTURE}\WDK.vsix" }
TestScript: |
- $versionString = & "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" -nologo -latest -products Microsoft.VisualStudio.Product.Community -requires Microsoft.Windows.DriverKit -Property installationVersion
- if (-not $versionString) { return $false }
- $versionArray = $versionString.Split('.')
- if ($versionArray[0] -le 17) { return $false }
- return $true
+ $versionString = & "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" -nologo -version '[17.0,18.0)' -requires Microsoft.Windows.DriverKit -property installationVersion
+ return $versionString -match "^17\."
configurationVersion: 0.2.0
diff --git a/configuration_vsonly.dsc.yaml b/configuration_vsonly.dsc.yaml
index 3ff599fc..0ce0b8bb 100644
--- a/configuration_vsonly.dsc.yaml
+++ b/configuration_vsonly.dsc.yaml
@@ -4,18 +4,18 @@ properties:
- resource: Microsoft.WinGet.DSC/WinGetPackage
id: vsPackage
directives:
- description: Install Visual Studio Community 2022
+ description: Install Visual Studio 2022 Community
allowPrerelease: true
settings:
id: Microsoft.VisualStudio.2022.Community
source: winget
+ useLatest: true
- resource: Microsoft.VisualStudio.DSC/VSComponents
id: vsComponents
dependsOn:
- vsPackage
directives:
- description: Install required VS workloads
- allowPrerelease: true
+ description: Install required VS workloads and components
settings:
productId: Microsoft.VisualStudio.Product.Community
channelId: VisualStudio.17.Release
diff --git a/filesys/miniFilter/scanner/user/scanUser.c b/filesys/miniFilter/scanner/user/scanUser.c
index e766261c..08b948b3 100644
--- a/filesys/miniFilter/scanner/user/scanUser.c
+++ b/filesys/miniFilter/scanner/user/scanUser.c
@@ -254,8 +254,6 @@ Return Value
}
}
- free( message );
-
return hr;
}
@@ -268,13 +266,12 @@ main (
{
DWORD requestCount = SCANNER_DEFAULT_REQUEST_COUNT;
DWORD threadCount = SCANNER_DEFAULT_THREAD_COUNT;
- HANDLE threads[SCANNER_MAX_THREAD_COUNT];
+ HANDLE threads[SCANNER_MAX_THREAD_COUNT] = { NULL };
SCANNER_THREAD_CONTEXT context;
HANDLE port, completion;
- PSCANNER_MESSAGE msg;
+ PSCANNER_MESSAGE messages;
DWORD threadId;
HRESULT hr;
- DWORD i, j;
//
// Check how many threads and per thread requests are desired.
@@ -343,11 +340,23 @@ main (
context.Completion = completion;
//
- // Create specified number of threads.
+ // Allocate messages.
//
- for (i = 0; i < threadCount; i++) {
+ messages = calloc(((size_t) threadCount) * requestCount, sizeof(SCANNER_MESSAGE));
+
+ if (messages == NULL) {
+ hr = ERROR_NOT_ENOUGH_MEMORY;
+ goto main_cleanup;
+ }
+
+ //
+ // Create specified number of threads.
+ //
+
+ for (DWORD i = 0; i < threadCount; i++) {
+
threads[i] = CreateThread( NULL,
0,
(LPTHREAD_START_ROUTINE) ScannerWorker,
@@ -366,20 +375,9 @@ main (
goto main_cleanup;
}
- for (j = 0; j < requestCount; j++) {
-
- //
- // Allocate the message.
- //
-
-#pragma prefast(suppress:__WARNING_MEMORY_LEAK, "msg will not be leaked because it is freed in ScannerWorker")
- msg = malloc( sizeof( SCANNER_MESSAGE ) );
-
- if (msg == NULL) {
-
- hr = ERROR_NOT_ENOUGH_MEMORY;
- goto main_cleanup;
- }
+ for (DWORD j = 0; j < requestCount; j++) {
+
+ PSCANNER_MESSAGE msg = &(messages[i * requestCount + j]);
memset( &msg->Ovlp, 0, sizeof( OVERLAPPED ) );
@@ -393,24 +391,26 @@ main (
&msg->Ovlp );
if (hr != HRESULT_FROM_WIN32( ERROR_IO_PENDING )) {
-
- free( msg );
goto main_cleanup;
}
}
}
hr = S_OK;
-
- WaitForMultipleObjectsEx( i, threads, TRUE, INFINITE, FALSE );
-
+
main_cleanup:
+ for (INT i = 0; threads[i] != NULL; ++i) {
+ WaitForSingleObjectEx(threads[i], INFINITE, FALSE);
+ }
+
printf( "Scanner: All done. Result = 0x%08x\n", hr );
CloseHandle( port );
CloseHandle( completion );
+ free(messages);
+
return hr;
}
diff --git a/simbatt/func/miniclass.c b/simbatt/func/miniclass.c
index ba2df340..612b4c66 100644
--- a/simbatt/func/miniclass.c
+++ b/simbatt/func/miniclass.c
@@ -202,7 +202,7 @@ Return Value:
}
Status = GetSimBattStateFromRegistry(Device, RegState);
- if (!NT_SUCCESS(Status)) {
+ if (NT_SUCCESS(Status)) {
RtlZeroMemory(RegState, sizeof(SIMBATT_STATE));
WdfWaitLockAcquire(DevExt->StateLock, NULL);