mirror of
https://git.collinwebdesigns.de/vgpu/gridd-unlock-patcher.git
synced 2025-12-22 13:30:00 +00:00
added windows guide
This commit is contained in:
47
README.md
47
README.md
@@ -1,19 +1,50 @@
|
|||||||
# gridd-unlock-patcher
|
# gridd-unlock-patcher
|
||||||
|
|
||||||
> [!note] Credits
|
> [!note] Credits
|
||||||
> This code is built by `electricsheep49`
|
> This code is built by `electricsheep49`. The Windows replacement script is written by `lcs`.
|
||||||
|
|
||||||
Only Linux is supported for executing the patcher,
|
**Only Linux is supported for executing the patcher**,
|
||||||
see **[Releases](https://git.collinwebdesigns.de/oscar.krause/gridd-unlock-patcher/-/releases)**.
|
see **[Releases](https://git.collinwebdesigns.de/oscar.krause/gridd-unlock-patcher/-/releases)**.
|
||||||
|
|
||||||
The patcher supports both Windows and Linux guests:
|
The patcher supports both, Windows and Linux guests:
|
||||||
- For Windows guests, the GRID daemon is Display.Driver/nvxdapix.dll.
|
|
||||||
- **TODO**: Where is this installed? Also, **untested**.
|
|
||||||
- For Linux guests, execute `which nvidia-gridd` to find your GRID daemon. It's probably in /bin/.
|
|
||||||
|
|
||||||
## How to patch
|
- For Windows guests, the GRID daemon is Display.Driver/nvxdapix.dll
|
||||||
|
- For Linux guests, execute `which nvidia-gridd` to find your GRID daemon. It's probably in `/bin/`.
|
||||||
|
|
||||||
|
# How to patch
|
||||||
|
|
||||||
|
**Prepare**
|
||||||
|
|
||||||
1. Download [latest release](https://git.collinwebdesigns.de/oscar.krause/gridd-unlock-patcher/-/releases)
|
1. Download [latest release](https://git.collinwebdesigns.de/oscar.krause/gridd-unlock-patcher/-/releases)
|
||||||
2. Make executable `chmod +x gridd-unlock-patcher`
|
2. Make executable `chmod +x gridd-unlock-patcher`
|
||||||
3. Run patch `gridd-unlock-patcher -g <GRID daemon to patch> -c /path/to/my_demo_root_certificate.pem`
|
3. Download your *FastAPI-DLS Root-CA* from `https://<your-dls-url>/-/config/root-ca`
|
||||||
|
|
||||||
|
## Linux
|
||||||
|
|
||||||
|
*This overwrites the given binary, make sure you have a backup!*
|
||||||
|
|
||||||
|
1. Run patch `gridd-unlock-patcher -g $(which nvidia-gridd) -c /path/to/my_root_certificate.pem`
|
||||||
|
2. Restart `nvidia-gridd` service
|
||||||
|
|
||||||
|
## Windows
|
||||||
|
|
||||||
|
*This overwrites the given dll, make sure you have a backup!*
|
||||||
|
|
||||||
|
1. Download [`windows-replace-nvxdapix.ps1`](windows-replace-nvxdapix.ps1) (written by `lcs`) to the Desktop of your
|
||||||
|
Windows machine
|
||||||
|
2. Run
|
||||||
|
`Get-ChildItem -Path "C:\Windows\System32\DriverStore\FileRepository" -Recurse -Filter "nvxdapix.dll" -ErrorAction SilentlyContinue | Select-Object -First 1`
|
||||||
|
3. Copy the `nvxdapix.dll` from the resulting path to your Linux host where the `gridd-unlock-patcher` is installed
|
||||||
|
4. Run patch `gridd-unlock-patcher -g /path/to/nvxdapix.dll -c /path/to/my_root_certificate.pem`
|
||||||
|
5. Copy the patched `nvxdapix.dll` back to the Desktop of your Windows machine
|
||||||
|
6. Run `powershell.exe -executionpolicy bypass -file "$HOME\Desktop\gridd-apply-patch.ps1"` as Administrator
|
||||||
|
|
||||||
|
Output should look like
|
||||||
|
|
||||||
|
```shell
|
||||||
|
PS C:\WINDOWS\system32> powershell.exe -executionpolicy bypass -file "$HOME\Desktop\gridd-apply-patch.ps1"
|
||||||
|
Searching for nvxdapix.dll in C:\Windows\System32\DriverStore\FileRepository...
|
||||||
|
Found DLL: C:\Windows\System32\DriverStore\FileRepository\nvgridsw.inf_amd64_847af0d59d1a7293\nvxdapix.dll
|
||||||
|
Replaced nvxdapix.dll successfully.
|
||||||
|
PS C:\WINDOWS\system32>
|
||||||
|
```
|
||||||
|
|||||||
44
windows-replace-nvxdapix.ps1
Normal file
44
windows-replace-nvxdapix.ps1
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
# ========== Configuration ==========
|
||||||
|
$searchRoot = "C:\Windows\System32\DriverStore\FileRepository"
|
||||||
|
$dllName = "nvxdapix.dll"
|
||||||
|
$replacementDll = "$HOME\Desktop\nvxdapix.dll" # Path to the patched DLL
|
||||||
|
$logFile = "$HOME\dll_replacement_log.txt"
|
||||||
|
# ===================================
|
||||||
|
|
||||||
|
# Search for the DLL
|
||||||
|
Write-Host "Searching for $dllName in $searchRoot..."
|
||||||
|
$dllPath = Get-ChildItem -Path $searchRoot -Recurse -Filter $dllName -ErrorAction SilentlyContinue | Select-Object -First 1
|
||||||
|
|
||||||
|
# Kill the NV service before attempting to replace the DLL
|
||||||
|
Stop-Service NVDisplay.ContainerLocalSystem
|
||||||
|
|
||||||
|
if ($dllPath) {
|
||||||
|
$fullPath = $dllPath.FullName
|
||||||
|
Write-Host "Found DLL: $fullPath"
|
||||||
|
Add-Content -Path $logFile -Value "Found $dllName at: $fullPath"
|
||||||
|
|
||||||
|
# Take ownership
|
||||||
|
takeown /F $fullPath | Out-Null
|
||||||
|
|
||||||
|
# Grant full control to administrators
|
||||||
|
icacls $fullPath /grant Administratoren:F | Out-Null
|
||||||
|
|
||||||
|
# Attempt to stop processes using the DLL (optional: may not apply to DriverStore)
|
||||||
|
Get-Process | Where-Object {
|
||||||
|
$_.Modules | Where-Object { $_.FileName -eq $fullPath }
|
||||||
|
} | ForEach-Object {
|
||||||
|
Write-Host "Stopping process: $($_.Name) (PID: $($_.Id))"
|
||||||
|
Stop-Process -Id $_.Id -Force
|
||||||
|
}
|
||||||
|
|
||||||
|
# Replace the DLL
|
||||||
|
Copy-Item -Path $replacementDll -Destination $fullPath -Force
|
||||||
|
Write-Host "Replaced $dllName successfully."
|
||||||
|
Add-Content -Path $logFile -Value "Replaced $dllName at $fullPath on $(Get-Date)"
|
||||||
|
} else {
|
||||||
|
Write-Host "DLL not found."
|
||||||
|
Add-Content -Path $logFile -Value "Failed to find $dllName in $searchRoot on $(Get-Date)"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Start the service after the replacement
|
||||||
|
Start-Service NVDisplay.ContainerLocalSystem
|
||||||
Reference in New Issue
Block a user