Skip to content

Commit

Permalink
RI develop to main (#1189)
Browse files Browse the repository at this point in the history
* Memory leakage in message

"sizeof(SCANNER_MESSAGE) * threadCount * requestCount" bytes long memory is allocated but only "sizeof(SCANNER_MESSAGE) * threadCount" bytes long of it is freed.

* Handles malloc function fail case

* Refactors comment line

* Solves the miscalculation of the message index

* simbatt: Fix broken registry read-back

The GetSimBattStateFromRegistry function is currently using default settings if GetSimBattStateFromRegistry succeeds, whereas settings from registry are only applied if GetSimBattStateFromRegistry fails. This does not make sense to me.

Therefore proposing to remove the `!` negation from `if (!NT_SUCCESS(Status)) {` on the line after `Status = GetSimBattStateFromRegistry(Device, RegState);` so that default settings are loaded when registry read-back fails.

* Issue of freeing memory without waiting completion of threads accessing it is fixed

* Fixes information leakage warning

Fixes the issue of possible information leakage from uninitialized padding bytes

* Avoids possible multiplication overflow warning

* Avoids possible multiplication overflow warning

* CI Pipelines build with WDK Nuget Packages (#1179)

Integrate nuget into the workflow pipelines

* FI from main to develop (#1188)

Fix text and minor issues in Winget configuration files

Co-authored-by: Adonais Romero Gonzalez <adonais.neoadonis@gmail.com>

* Improve version info, vsix installation, and update building locally readme

* Fix printing vsix version

* Refactored vsix install and cleaned up build sampleset

---------

Co-authored-by: İsa Yurdagül <38290414+isayrdgl@users.noreply.github.com>
Co-authored-by: Fredrik Orderud <fredrik.orderud@ge.com>
Co-authored-by: Christian Allred <13487734+cgallred@users.noreply.github.com>
Co-authored-by: tristanb-ntdev <60945150+tristanb-ntdev@users.noreply.github.com>
Co-authored-by: Matt <138825652+middlemose@users.noreply.github.com>
Co-authored-by: Adonais Romero Gonzalez <adonais.neoadonis@gmail.com>
  • Loading branch information
7 people authored Jun 28, 2024
1 parent 41b5bca commit 263b19b
Show file tree
Hide file tree
Showing 8 changed files with 151 additions and 77 deletions.
38 changes: 38 additions & 0 deletions .github/scripts/Install-Vsix.ps1
Original file line number Diff line number Diff line change
@@ -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
56 changes: 28 additions & 28 deletions .github/workflows/Code-Scanning.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,31 +32,31 @@ jobs:
language: [ 'cpp' ]

steps:
- 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: 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}}"



- name: Checkout repository
uses: actions/checkout@v4
with:
submodules: 'recursive'

- name: Install WDK VSIX
run: .\.github\scripts\Install-Vsix.ps1

- name: Install Nuget Packages
run: nuget restore .\packages.config -PackagesDirectory .\packages\

- 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}}"
10 changes: 6 additions & 4 deletions .github/workflows/ci-pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
13 changes: 7 additions & 6 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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 }}
Expand Down Expand Up @@ -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
Expand Down
51 changes: 40 additions & 11 deletions Build-SampleSet.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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'.
Expand All @@ -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
#
Expand Down Expand Up @@ -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 + ")")
Expand Down
6 changes: 5 additions & 1 deletion Building-Locally.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 :

Expand Down
52 changes: 26 additions & 26 deletions filesys/miniFilter/scanner/user/scanUser.c
Original file line number Diff line number Diff line change
Expand Up @@ -254,8 +254,6 @@ Return Value
}
}

free( message );

return hr;
}

Expand All @@ -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.
Expand Down Expand Up @@ -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,
Expand All @@ -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 ) );

Expand All @@ -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;
}

2 changes: 1 addition & 1 deletion simbatt/func/miniclass.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down

0 comments on commit 263b19b

Please sign in to comment.