Skip to content

v1.5.0

Choose a tag to compare

@github-actions github-actions released this 15 Oct 20:30
· 81 commits to main since this release
Immutable release. Only release title and notes can be modified.
277f9c8

SHA-256 of the files in this release (also attached as SHA256SUMS.txt).
Build provenance: gh attestation verify --repo timliudev/DynaRunFix

2bc33bbd99244a00ace5715e61e1b393bcb945380bd69757b7b3f303f817ea45  DynaRunFix-Setup.exe
5daabca492d3486f0a12f58b926c03feb57faf9a1d1ec8f13e171ae16285e80b  DynaRunFix-v1.5.0.zip

v1.5.0 — 2026-10-16

Added:

  • Setup wizard installs the Dyna Pro USB driver (Windows 10/11). The main installer has a new option, Also install the Dyna Pro USB
    driver (one restart needed)
    (on by default; hidden when the driver is already installed or Windows is older than 10; /quiet never
    installs the driver). It downloads Dyna Pro's official Dyna Pro USB.zip from dynapro.co.uk (not bundled; its SHA-256 is checked and a
    changed file is refused), asks for administrator permission (once on an administrator account; a standard user may be asked again after
    the restart), suspends BitLocker only when protection is on (until the driver is installed; at most 3 restarts as a safety net, then
    it resumes by itself; it is also resumed when the installation ends or is cancelled, and a retry starts the count again), requests the
    advanced start-up menu for the next start and registers a task that continues the wizard after you sign in. The first driver page
    says that BitLocker is suspended. You press 7 in the menu; if you miss it the wizard says so and offers to try again. Then Windows' red
    warning appears, twice (once for each of the two driver files): choose "Install this driver software anyway" each time. Driver
    signature enforcement comes back at the next normal restart. The driver can also be installed later from the Start menu ("Install Dyna
    Pro USB driver") or with DynaRunFix-Setup.exe /driver; DynaRunFix-Setup.exe /driver-cancel takes back the task, the one-time boot
    option and the BitLocker suspension. Files go to %ProgramData%\DynaRunFix\driver, the log is %ProgramData%\DynaRunFix\driver.log;
    uninstalling DynaRunFix removes the Start menu shortcut, a pending task and that folder, and resumes BitLocker if DynaRunFix suspended it (even without a pending task), but not the installed driver. See
    docs/DRIVER.md. Not yet verified on a real PC; the BitLocker path has not been tried on real hardware.
  • A DynaRun of another folder no longer blocks the install; one that cannot be closed is said so. Only a DynaRun V3.exe that is the
    installed one (or whose path cannot be read, or while the installed DynaRun's path is not known yet) holds up the install. The wizard
    offers Close DynaRun and install only when everything in the way can be closed (same Windows session, path readable); for another
    user's DynaRun it explains that and offers no close button, and the page updates by itself once DynaRun is closed. /quiet /close does
    not try to close anything it cannot close and ends with exit code 6.
  • Exit code 6 is explained in a log: one line per program in the way (name, process id, session, whether it could be closed, path), in
    setup.log of the install folder, or in %TEMP%\DynaRunFix-setup.log before that folder exists or without administrator rights. Nothing is shown with /quiet.

Changed and fixed (after a review of v1.4.0):

  • Driver working folder: %ProgramData%\DynaRunFix is created fresh with write access for administrators only, and an old or in-use folder is never
    reused (driver.log is written only after the folder has been checked). If the folder cannot be prepared the wizard says so; restart Windows and try again (a retry after this error needs a restart).
  • Older Windows: the wizard and docs/DRIVER.md give manual steps for Windows 8 / 8.1, Vista / 7 and XP.
  • Driver documentation: the explanation of the INF and catalog files is reworded to what Windows reports.
  • USB watchdog log: the DPSetData watchdog on (usbfix) line now reports how many hooks were set (N hook(s) set).
  • Installer log: the line log (setup.log, %TEMP%\DynaRunFix-setup.log) is never written through a link: a symbolic link or a file with
    several hard links in its place is refused.
  • Fix: a DynaRun in a non-default folder. The launcher asked the registry for the DynaRun path the setup recorded with the size of
    its own path, so a longer recorded path (a custom install folder) made the read fail and the launcher fell back to the default
    location, ending in "Cannot start DynaRun". The path is now read in full; a value that is not text, is empty or does not fit is not used.
  • Update check: it follows redirects itself, as the downloads do: every hop (https, and one of GitHub's hosts) is checked before a
    request is sent to it. In v1.4.0 WinINet followed the redirects of the check by itself and only the address it ended up at was checked
    (no data was read from a host outside GitHub's); the duplicated host list is gone too.
  • Launcher: only a DynaRun of the same sign-in session counts as running (with fast user switching another user's DynaRun gave a wrong
    "administrator rights" message); when the elevation state of the desktop shell's token cannot be told it no longer carries on as if it
    were a normal start but stops with the message that no usable token was found.
  • First-time setup: the optional-feature values are not written when Dyna Pro's helper ends with a non-zero exit code (when the exit
    code cannot be read, it is as before). The README now says exactly when they are written: whenever DynaRun starts that helper
    (normally only on the first start), not "on the very first start only".
  • Opt-in DYNAFIX_USBFIX: the last error code of the abandoned or finished call is handed on (abandoned: ERROR_TIMEOUT); a wait on a
    handle whose kind cannot be told is no longer cut short (only events are); dynapro.dll is recognised by its file name, not by the end
    of the path (xdynapro.dll is not it), and a cut-off module path is not matched.
  • DYNAFIX_* switches: a value must be exactly the expected one (1, 0, a number, clip): 10, 1x or a long value no longer
    switch something on, and an over-long value is no longer read from an unset buffer.
  • System libraries: version.dll, rstrtmgr.dll and psapi.dll are loaded from the system folder only.
  • Installer: the copy of the setup made in %TEMP% for the elevated start from a network drive gets a unique name, is created new,
    and is held open (nobody can change it) and compared with the original until the elevated process has ended; uninstall does not
    delete the manifest next to DynaRun V3.exe, nor schedule it for deletion at the next restart, when DynaRun's folder or exe can be
    changed by ordinary users.
  • CI: the release build accepts only tags of the form vN.N.N, and the version is passed to the build quoted.
  • README / documentation: the MSVBVM60 screen-size scan is disclosed (it finds the values by an instruction-byte pattern in
    Microsoft's code, in memory only, changes them only if they equal the real screen size, and leaves them alone when the pattern is not
    found); "modifies no Dyna Pro or THB file" now says "no file's content" and names the manifest and the briefly changed modification
    time; the log does not contain module or import addresses (it can show window and GDI handle values); the graph resource load uses
    LOAD_LIBRARY_AS_DATAFILE | LOAD_LIBRARY_AS_IMAGE_RESOURCE and a request that would load code is not redirected; the compatibility
    setting Run as administrator is described as observed (a test on Windows 11: through the launcher the program ran non-elevated, without a
    prompt; started directly it asked for elevation); uninstall's taskbar policy scope (the user who uninstalls, the recorded account, every
    other account whose layout file is ours) and the full list of what DynaRunFix keeps in the registry and the install folder; the
    hardening tests are run, not only built. The driver wizard, the setup switches and exit codes, and what the driver option changes on
    the PC are described in the README.
  • Tests: new unit tests for the redirect target rules, the DYNAFIX_* parsing and the dynapro.dll name match, the launcher's
    registry path read (also a value of the wrong type or one that fills the buffer), its session rule and unknown token state, the order
    of release numbers, the system DLL loading, the BitLocker suspension decision and the installer's log writer.

v1.5.0 — 2026-10-16

新增:

  • 安裝精靈可安裝 Dyna Pro USB 驅動程式(Windows 10/11)。 主安裝程式新增一個選項「同時安裝 Dyna Pro USB 驅動程式(需重新開機一次)」(預設勾選;
    驅動程式已安裝或 Windows 低於 10 時隱藏;/quiet 不會安裝驅動程式):從 dynapro.co.uk 下載 Dyna Pro 官方的 Dyna Pro USB.zip(不內附;會檢查 SHA-256,
    檔案有變就拒絕安裝),要求系統管理員權限(使用系統管理員帳戶時只會問一次;標準使用者在重新啟動後可能會再被詢問),
    只有在 BitLocker 保護為開啟時才暫停它,直到驅動程式安裝完成(最多 3 次重新啟動作為保險,之後自動恢復;安裝結束或取消時也會恢復,重試時會重新計算次數),
    要求下次開機顯示進階啟動選單,並登錄一個工作,讓精靈在你登入後繼續。驅動程式的第一頁會說明 BitLocker 會被暫停。你在選單按 7;
    沒按到的話精靈會告知並提供「再試一次」。接著 Windows 會跳出紅色警告,而且會出現兩次(兩個驅動程式檔各一次),每次都請選「仍然安裝此驅動程式軟體」。
    驅動程式強制簽章在下次正常重新啟動後恢復。之後也可以從開始功能表(「安裝 Dyna Pro USB 驅動程式」)或用 DynaRunFix-Setup.exe /driver 啟動;
    DynaRunFix-Setup.exe /driver-cancel 會撤回工作、一次性開機選項與 BitLocker 暫停。檔案放在 %ProgramData%\DynaRunFix\driver,記錄檔是 %ProgramData%\DynaRunFix\driver.log;
    解除安裝 DynaRunFix 會移除開始功能表捷徑、尚未完成的工作與該資料夾,並在 BitLocker 是 DynaRunFix 暫停的情況下把它恢復(即使已沒有等待中的工作),但不會移除已安裝的驅動程式。見 docs/DRIVER.md。尚未在實體電腦上驗證;BitLocker 的流程尚未在真實硬體上試過。
  • 別的資料夾的 DynaRun 不再擋住安裝;關不掉的會明確說明。 只有已安裝的那個 DynaRun V3.exe(或讀不到路徑的,或已安裝的 DynaRun 路徑還不知道時)會擋住安裝。
    只有擋住的程式都能關閉(同一個登入工作階段、讀得到路徑)時,精靈才提供「關閉 DynaRun 並安裝」;別的使用者的 DynaRun 則顯示說明、
    不提供關閉按鈕,對方關閉後頁面會自動更新。/quiet /close 不會嘗試關閉關不掉的程式,直接以結束代碼 6 結束。
  • 結束代碼 6 會留下原因記錄: 每個擋住的程式一行(名稱、處理序編號、工作階段、能否關閉、路徑),寫在安裝資料夾的 setup.log,
    該資料夾尚未建立或沒有系統管理員權限時寫在 %TEMP%\DynaRunFix-setup.log。/quiet 不會顯示任何視窗。

變更與修正(v1.4.0 審查後):

  • 驅動程式工作資料夾: %ProgramData%\DynaRunFix 會全新建立,只有系統管理員可寫入;舊的或使用中的資料夾絕不重複使用(檢查過資料夾後才寫 driver.log)。
    資料夾無法準備好時精靈會告知,請重新啟動 Windows 再試(出現此錯誤後重試需要重新啟動)。
  • 舊版 Windows: 精靈與 docs/DRIVER.md 提供 Windows 8 / 8.1、Vista / 7 與 XP 的手動步驟。
  • 驅動程式文件: INF 與目錄檔的說明改成 Windows 實際回報的內容。
  • USB 監看記錄: DPSetData watchdog on (usbfix) 這一行現在會顯示設了幾個 hook(N hook(s) set)。
  • 安裝程式記錄檔: 逐行記錄檔(setup.log、%TEMP%\DynaRunFix-setup.log)絕不透過連結寫入:該位置若是符號連結或有多個硬連結的檔案,會被拒絕。
  • 修正:DynaRun 在非預設資料夾。 啟動器以自己路徑的長度去讀安裝程式記錄的 DynaRun 路徑,所以較長的記錄路徑(自訂安裝資料夾)會讀取失敗,
    啟動器改用預設位置,最後出現「無法啟動 DynaRun」。現在會完整讀取路徑;不是文字、是空的或放不下的值不會被使用。
  • 更新檢查: 和下載一樣自己處理重新導向:每一跳(https,且是 GitHub 的主機之一)都在送出要求之前先檢查。v1.4.0 的檢查是由 WinINet 自己跟隨重新導向,
    只檢查最後到達的網址(沒有從 GitHub 以外的主機讀取任何資料);重複的主機清單也移除了。
  • 啟動器: 只有同一個登入工作階段的 DynaRun 才算執行中(快速切換使用者時,別人的 DynaRun 會造成錯誤的「系統管理員權限」訊息);
    無法判斷桌面殼層 token 是否已提升時,不再當成一般啟動繼續,而是顯示找不到可用 token 的訊息並停止。
  • 首次設定: Dyna Pro 的設定程式以非零結束碼結束時,不寫入選購功能值(讀不到結束碼時維持原樣)。README 現在精確說明何時寫入:每當 DynaRun 啟動該設定程式時
    (通常只有第一次啟動),而不是「只在第一次啟動」。
  • 選用的 DYNAFIX_USBFIX: 放棄或完成的呼叫的最後錯誤碼會傳給呼叫端(放棄時為 ERROR_TIMEOUT);種類不明的 handle 的等待不再被縮短(只有 event 會);
    dynapro.dll 以檔名辨識,而不是路徑結尾(xdynapro.dll 不是它),被截斷的模組路徑不會比對成功。
  • DYNAFIX_* 開關: 值必須剛好是預期的(1、0、數字、clip):10、1x 或以 1 開頭的長字串不再開啟任何功能,過長的值也不會再從未初始化的緩衝區讀取。
  • 系統程式庫: version.dll、rstrtmgr.dll、psapi.dll 只從系統資料夾載入。
  • 安裝程式: 從網路磁碟以提升權限啟動時在 %TEMP% 做的安裝程式副本使用唯一名稱、以新建方式建立,並一直保持開啟(沒有人能更改)、與原檔比對,直到提升的行程結束;
    DynaRun 的資料夾或 exe 一般使用者可以更改時,解除安裝不會刪除 DynaRun V3.exe 旁的 manifest,也不會排程在下次重新開機時刪除。
  • CI: Release 只接受 vN.N.N 形式的標籤,版本號傳給建置時有加上引號。
  • README/文件: 揭露 MSVBVM60 螢幕大小的特徵掃描(以 Microsoft 程式碼中的一段指令位元組特徵找出這些值,只在記憶體中,只有等於真實螢幕大小時才修改,找不到特徵就不動);
    「不修改任何 Dyna Pro 或 THB 檔案」改為「不修改任何檔案的內容」,並寫明 manifest 與短暫改變的修改時間;log 不含模組或匯入位址(可能出現視窗與 GDI 控制代碼的值);
    圖表資源載入使用 LOAD_LIBRARY_AS_DATAFILE | LOAD_LIBRARY_AS_IMAGE_RESOURCE,會載入程式碼的要求不會被導向;相容性設定「以系統管理員身分執行」改為觀察結果
    (Windows 11 上的測試:經由啟動器時程式以未提升的權限執行、沒有提示;直接啟動則會要求提升);解除安裝的工作列原則範圍(執行解除安裝的使用者、記錄的帳號、
    其他配置檔仍是我們的帳號)以及 DynaRunFix 在登錄與安裝資料夾留下什麼的完整清單;強化測試是建置並執行,不只是建置。README 也說明了驅動程式精靈、安裝程式的參數與結束代碼,
    以及驅動程式選項會在電腦上改變什麼。
  • 測試: 新增重新導向目標規則、DYNAFIX_* 解析與 dynapro.dll 檔名比對、啟動器讀取登錄路徑(含型別不符或剛好填滿緩衝區的值)、工作階段規則與未知 token 狀態、
    版本號先後順序、系統 DLL 載入、BitLocker 暫停判斷與安裝程式記錄檔寫入的單元測試。

Full Changelog: v1.4.0...v1.5.0