aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/km
diff options
context:
space:
mode:
authorEgor Tensin <egor@tensin.name>2026-06-15 16:18:45 +0200
committerEgor Tensin <egor@tensin.name>2026-06-15 16:18:45 +0200
commit3ba9bd382c33307d726b71177e6be2252df3f758 (patch)
tree419c37f090df678dada1657ee761269fb8ee9eae /km
parenttest.ps1: add a test for nt_namespace (diff)
downloadwindows7-drivers-3ba9bd382c33307d726b71177e6be2252df3f758.tar.gz
windows7-drivers-3ba9bd382c33307d726b71177e6be2252df3f758.zip
move {build,test}.ps1 to km/
Diffstat (limited to 'km')
-rw-r--r--km/build.ps1102
-rw-r--r--km/test.ps1149
2 files changed, 251 insertions, 0 deletions
diff --git a/km/build.ps1 b/km/build.ps1
new file mode 100644
index 0000000..f437605
--- /dev/null
+++ b/km/build.ps1
@@ -0,0 +1,102 @@
+param(
+ [Parameter(Mandatory=$true)]
+ [string] $InstallDir = $null,
+ [Parameter(Mandatory=$true)]
+ [string] $Platform = $null,
+ [Parameter(Mandatory=$true)]
+ [string] $Configuration = $null,
+ [Parameter(Mandatory=$true)]
+ [string] $WDK = $null
+)
+
+$ErrorActionPreference = "Stop";
+Set-PSDebug -Strict
+
+function Invoke-Exe {
+ param(
+ [ScriptBlock] $Cmd,
+ [int[]] $AllowedExitCodes = @(0)
+ )
+
+ $backupErrorActionPreference = $script:ErrorActionPreference
+ $script:ErrorActionPreference = 'Continue'
+
+ try {
+ & $Cmd
+ if ($AllowedExitCodes -notcontains $LastExitCode) {
+ throw "External command failed with exit code ${LastExitCode}: $Cmd"
+ }
+ } finally {
+ $script:ErrorActionPreference = $backupErrorActionPreference
+ }
+}
+
+function Test-AppVeyor {
+ return Test-Path env:APPVEYOR
+}
+
+function Get-DriverBuildDir {
+ param(
+ [Parameter(Mandatory=$true)]
+ [string] $DriverName
+ )
+
+ return "$script:PSScriptRoot\build\$script:WDK\$DriverName"
+}
+
+function Get-DriverSolutionPath {
+ param(
+ [Parameter(Mandatory=$true)]
+ [string] $DriverName
+ )
+
+ $build_dir = Get-DriverBuildDir -DriverName $DriverName
+ return "$build_dir\$DriverName.sln"
+}
+
+function Build-Driver {
+ param(
+ [Parameter(Mandatory=$true)]
+ [string] $DriverName
+ )
+
+ $build_dir = Get-DriverBuildDir -DriverName $DriverName
+ $solution_path = Get-DriverSolutionPath -DriverName $DriverName
+
+ $msbuild_params = @()
+ $msbuild_params += "/p:Platform=$script:Platform"
+ $msbuild_params += "/p:Configuration=$script:Configuration"
+ $msbuild_params += "/p:SignMode=TestSign"
+ $msbuild_params += "/p:OutDir=$InstallDir\lib"
+
+ cd $build_dir
+ Invoke-Exe { msbuild.exe $msbuild_params $solution_path }
+}
+
+function Build-ProjectKernelMode {
+ $drivers = 'minimal', 'simple', 'nt_namespace'
+
+ foreach ($driver in $drivers) {
+ Build-Driver -DriverName $driver
+ }
+}
+
+function Build-Project {
+ if (Test-AppVeyor) {
+ $appveyor_cwd = pwd
+ }
+
+ New-Item -ItemType Directory -Force $script:InstallDir | Out-Null
+ $script:InstallDir = (Resolve-Path $script:InstallDir).Path
+
+ try {
+ Build-ProjectKernelMode
+ } finally {
+ if (Test-AppVeyor) {
+ cd $appveyor_cwd
+ Set-PSDebug -Off
+ }
+ }
+}
+
+Build-Project
diff --git a/km/test.ps1 b/km/test.ps1
new file mode 100644
index 0000000..e933c06
--- /dev/null
+++ b/km/test.ps1
@@ -0,0 +1,149 @@
+param(
+ [Parameter(Mandatory=$true)]
+ [string] $InstallDir = $null
+)
+
+$ErrorActionPreference = "Stop";
+Set-PSDebug -Strict
+
+function Invoke-Exe {
+ param(
+ [ScriptBlock] $Cmd,
+ [int[]] $AllowedExitCodes = @(0)
+ )
+
+ $backupErrorActionPreference = $script:ErrorActionPreference
+ $script:ErrorActionPreference = 'Continue'
+
+ try {
+ $result = & $Cmd
+ if ($AllowedExitCodes -notcontains $LastExitCode) {
+ throw "External command failed with exit code ${LastExitCode}: $Cmd"
+ }
+ return $result
+ } finally {
+ $script:ErrorActionPreference = $backupErrorActionPreference
+ }
+}
+
+function Test-AppVeyor {
+ return Test-Path env:APPVEYOR
+}
+
+function Start-Driver {
+ param(
+ [Parameter(Mandatory=$true)]
+ [string] $InstallDir,
+ [Parameter(Mandatory=$true)]
+ [string] $DriverName
+ )
+
+ Write-Host "Starting driver $DriverName..."
+ Invoke-Exe { install_service.exe $DriverName "$InstallDir\lib\$DriverName.sys" }
+ Invoke-Exe { start_service.exe $DriverName }
+}
+
+function Stop-Driver {
+ param(
+ [Parameter(Mandatory=$true)]
+ [string] $DriverName
+ )
+
+ Write-Host "Stopping driver $DriverName..."
+ Invoke-Exe { stop_service.exe $DriverName }
+ Invoke-Exe { uninstall_service.exe $DriverName }
+}
+
+function Exchange-Ints {
+ param(
+ [Parameter(Mandatory=$true)]
+ [int] $NewInt
+ )
+
+ return Invoke-Exe { exchange_ints.exe $NewInt }
+}
+
+function Verify-ExchangeInts {
+ param(
+ [Parameter(Mandatory=$true)]
+ [int] $NewInt,
+ [Parameter(Mandatory=$true)]
+ [int] $OldInt
+ )
+
+ $actual = Exchange-Ints $NewInt
+ if ($actual -ne $OldInt) {
+ throw "Expected $OldInt, got: $actual"
+ } else {
+ Write-Host "Previous integer: $actual, new integer: $NewInt"
+ }
+}
+
+function Convert-NTPath {
+ param(
+ [Parameter(Mandatory=$true)]
+ [string] $NTPath
+ )
+
+ return Invoke-Exe { convert_nt_path.exe $NTPath }
+}
+
+function Verify-ConvertNTPath {
+ param(
+ [Parameter(Mandatory=$true)]
+ [string] $NTPath,
+ [Parameter(Mandatory=$true)]
+ [string] $Expected
+ )
+
+ $actual = Convert-NTPath $NTPath
+ if ($actual -ne $expected) {
+ throw "Expected $expected, got: $actual"
+ }
+ Write-Host "NT path: $NTPath"
+ Write-Host "DOS path: $actual"
+}
+
+function Run-ProjectTests {
+ param(
+ [Parameter(Mandatory=$true)]
+ [string] $InstallDir
+ )
+
+ $env:PATH = "$InstallDir\bin;${env:PATH}"
+
+ $drivers = 'minimal', 'simple', 'nt_namespace'
+
+ foreach ($driver in $drivers) {
+ Start-Driver `
+ -InstallDir $InstallDir `
+ -DriverName $driver
+ }
+
+ Verify-ExchangeInts -NewInt 69 -OldInt 42
+ Verify-ExchangeInts -NewInt 100500 -OldInt 69
+ Verify-ConvertNTPath \DosDevices\C:\Windows C:\Windows
+
+ foreach ($driver in $drivers) {
+ Stop-Driver -DriverName $driver
+ }
+}
+
+function Run-ProjectTestsAppVeyor {
+ if (Test-AppVeyor) {
+ $appveyor_cwd = pwd
+ }
+
+ $script:InstallDir = (Resolve-Path $script:InstallDir).Path
+
+ try {
+ Run-ProjectTests -InstallDir $script:InstallDir
+ } finally {
+ if (Test-AppVeyor) {
+ cd $appveyor_cwd
+ Set-PSDebug -Off
+ }
+ }
+}
+
+Run-ProjectTestsAppVeyor