mirror of
https://github.com/NohamR/RMHook-Win.git
synced 2026-05-24 19:59:43 +00:00
Introduce a PAHO_FORWARDER_EXPORTS macro and generate Original_* FARPROC forwarder targets, replace the many hand-written fake exports with assembly forwarding stubs, and simplify exports.cpp to declare and initialize those forwarder pointers. Refactor paho-mqtt3as-proxy hook logic: improve logging, robustly load/save JSON config using std::filesystem and safe parsing, consolidate URL/host patching logic for HTTP/WS/MQTT, and add safer MQTT URI patching and resolution helpers. Update main to populate forwarder addresses at startup and make hook installation more defensive when symbols aren't found. Add docs images, update README (bump tested version and enable images), remove STATE.md, and adjust .gitignore to keep docs included.
132 lines
3.9 KiB
PowerShell
132 lines
3.9 KiB
PowerShell
<#
|
|
Installs or restores a paho-mqtt3as proxy DLL into "C:\Program Files\reMarkable".
|
|
Usage examples:
|
|
.\install-hook.ps1 -Action install
|
|
.\install-hook.ps1 -Action install -SourcePath "C:\some\path\my.dll"
|
|
.\install-hook.ps1 -Action restore
|
|
#>
|
|
|
|
param(
|
|
[ValidateSet("install","restore","help")]
|
|
[string]$Action = "help",
|
|
|
|
[string]$SourcePath = "",
|
|
|
|
[switch]$Force
|
|
)
|
|
|
|
$InstallDir = "C:\Program Files\reMarkable"
|
|
$TargetName = "paho-mqtt3as.dll"
|
|
$OrigName = "paho-mqtt3as_orig.dll"
|
|
$TargetPath = Join-Path $InstallDir $TargetName
|
|
$OrigPath = Join-Path $InstallDir $OrigName
|
|
|
|
$RepoRoot = (Resolve-Path (Join-Path $PSScriptRoot "..")).Path
|
|
$DefaultDebug = Join-Path $RepoRoot "paho-mqtt3as-proxy\x64\Debug\paho-mqtt3as.dll"
|
|
$DefaultRelease = Join-Path $RepoRoot "paho-mqtt3as-proxy\x64\Release\paho-mqtt3as.dll"
|
|
$LegacyDebug = Join-Path $RepoRoot "x64\Debug\paho-mqtt3as.dll"
|
|
$LegacyRelease = Join-Path $RepoRoot "x64\Release\paho-mqtt3as.dll"
|
|
|
|
function Show-Help {
|
|
"Actions:"
|
|
" install - rename existing paho-mqtt3as.dll -> paho-mqtt3as_orig.dll (if present) and copy proxy DLL into place."
|
|
" restore - remove proxy DLL (if present) and rename paho-mqtt3as_orig.dll back to paho-mqtt3as.dll."
|
|
""
|
|
"Examples:"
|
|
" .\install-hook.ps1 -Action install"
|
|
" .\install-hook.ps1 -Action install -SourcePath `"$DefaultRelease`""
|
|
" .\install-hook.ps1 -Action restore"
|
|
}
|
|
|
|
function Ensure-Admin {
|
|
$isAdmin = ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
|
|
|
|
if (-not $isAdmin) {
|
|
Write-Host "Requesting administrator privileges..."
|
|
|
|
$args = @(
|
|
"-NoProfile",
|
|
"-ExecutionPolicy", "Bypass",
|
|
"-File", "`"$PSCommandPath`""
|
|
)
|
|
|
|
if ($MyInvocation.UnboundArguments -and $MyInvocation.UnboundArguments.Count -gt 0) {
|
|
$args += $MyInvocation.UnboundArguments
|
|
}
|
|
|
|
Start-Process -FilePath "powershell.exe" -Verb RunAs -ArgumentList $args
|
|
|
|
exit
|
|
}
|
|
}
|
|
|
|
function Install-Proxy {
|
|
Ensure-Admin
|
|
|
|
$resolvedSource = $SourcePath
|
|
|
|
if (-not $resolvedSource) {
|
|
if (Test-Path $DefaultRelease) {
|
|
$resolvedSource = $DefaultRelease
|
|
}
|
|
elseif (Test-Path $DefaultDebug) {
|
|
$resolvedSource = $DefaultDebug
|
|
}
|
|
elseif (Test-Path $LegacyRelease) {
|
|
$resolvedSource = $LegacyRelease
|
|
}
|
|
elseif (Test-Path $LegacyDebug) {
|
|
$resolvedSource = $LegacyDebug
|
|
}
|
|
else {
|
|
Write-Error "No source DLL supplied and none found in default Debug/Release paths."
|
|
exit 2
|
|
}
|
|
}
|
|
|
|
if (-not (Test-Path $resolvedSource)) {
|
|
Write-Error "Source DLL not found: $resolvedSource"
|
|
exit 3
|
|
}
|
|
|
|
if (-not (Test-Path $InstallDir)) {
|
|
Write-Error "Install directory not found: $InstallDir"
|
|
exit 4
|
|
}
|
|
|
|
if (-not (Test-Path $OrigPath) -and (Test-Path $TargetPath)) {
|
|
Move-Item $TargetPath $OrigPath -Force
|
|
Write-Host "Backed up original DLL"
|
|
}
|
|
|
|
Copy-Item $resolvedSource $TargetPath -Force
|
|
|
|
Write-Host ""
|
|
Write-Host "Hook installed successfully."
|
|
}
|
|
|
|
function Restore-Original {
|
|
Ensure-Admin
|
|
|
|
if (Test-Path $TargetPath) {
|
|
Remove-Item -Path $TargetPath -Force
|
|
Write-Host "Removed proxy DLL at $TargetPath"
|
|
} else {
|
|
Write-Host "No proxy DLL found at $TargetPath"
|
|
}
|
|
|
|
if (Test-Path $OrigPath) {
|
|
Move-Item -Path $OrigPath -Destination $TargetPath -Force
|
|
Write-Host "Restored original DLL: $OrigName -> $TargetName"
|
|
} else {
|
|
Write-Host "No backup original found at $OrigPath"
|
|
}
|
|
}
|
|
|
|
switch ($Action) {
|
|
"install" { Install-Proxy; break }
|
|
"restore" { Restore-Original; break }
|
|
"help" { Show-Help; break }
|
|
default { Show-Help; break }
|
|
}
|