WINDOWS REGISTRY ENGINE · HKEY_LOCAL_MACHINE · DUAL-PANE F10 HKLM / SYSTEM HKCU / SOFTWARE DUAL-PANE [F10] SAM / SECURITY FULL ACL / SACL NATIVE C / WIN32 REGEDIT COMMANDER NATIVE WIN32 DUAL-PANE REGISTRY ENGINE · PROTECTED HIVES
Download Regedit.zip   Project on GitHub

Regedit Commander

A native Win32 registry editor for power-user workflows that exceed the scope of the stock Windows regedit.

Regedit Commander


Download Latest Release


Platforms: Windows x86, x64 and native ARM64 — all three executables are in the archive
Build type: Native C/C++, WinAPI, no runtime redistributable
Status: Pre-release — actively developed, shared for testing

The ARM64 build is a real native binary, not the x64 image running under emulation, so it runs at full speed on Snapdragon-class hardware. Each architecture ships as a single self-contained .exe: there is no installer, and nothing is written outside the one registry key the editor uses for its own settings.

Note: Source code is not published yet. Core features are stable; active work continues on the live monitor engine and protected-hive diagnostics.


Overview

Building advanced Windows system tooling is mostly an engineering discipline problem, not a UI problem. Regedit Commander focuses on practical workflows: faster navigation, safer bulk edits, dual-pane comparison, and deeper access to protected registry areas — without visual gimmicks.


Features

1. Dual-Pane, Keyboard-First Architecture

The editor opens in single-pane mode by default. Press F10 to toggle the dual-pane layout, which gives you independent left and right panels, each with its own key tree, value list, and search results pane at the bottom.

Tab and Ctrl+Tab do different things, and the difference is what makes two panels fast to work with:

flowchart LR LT[Left Tree] -->|Tab| RT[Right Tree] RT -->|Tab| LT LV[Left Values] -->|Tab| RV[Right Values] RV -->|Tab| LV LT -->|Ctrl+Tab| LV LV -->|Ctrl+Tab| LT RT -->|Ctrl+Tab| RV RV -->|Ctrl+Tab| RT style LT fill:#10b981,color:#022c22 style RT fill:#10b981,color:#022c22

Tab jumps to the matching control in the other panel — tree to tree, list to list — so you can compare the same position on both sides without losing your place. Ctrl+Tab cycles tree and value list inside the panel you are already in. In single-pane mode both collapse to the same thing: they toggle tree and list. The focus routing knows whether the results pane is visible, so navigation always lands somewhere predictable.

Each panel supports multiple tabs (Ctrl+T to open, Ctrl+W to close). Tab state, including the active key path for each tab, is persisted between sessions. The RESET TABS entry on the tab bar returns to the default L-Tab1 + R-Tab1 pair — it resets tabs only.

View → Reset Layout puts the geometry back to what a first run would give you, in one step: the second pane comes back if it was switched off, the divider between the two panes returns to the middle, both trees return to 2.25 inches, and the Name, Type and Data columns return to 1.25, 1.25 and 3 inches in both panes. Widths are measured against the monitor the window is actually on, so a window on a second screen at a different scale is reset to that screen’s proportions rather than the primary one’s. Tabs are deliberately left alone — that is what RESET TABS is for.

Cross-panel operations:

Key Action
F10 Toggle dual-pane layout on/off
Tab Same control in the other panel
Ctrl+Tab Tree / value list within the active panel
Ctrl+Shift+Tab Tree / value list (reverse direction)
F5 Copy selected key or value to the other panel
Shift+F5 Copy with full security descriptor (ACL, owner, SACL)
F6 Move selected key or value to the other panel
Ctrl+T New tab in active panel
Ctrl+W Close active tab

Copy and move refuse to run when the destination is the source key itself or one of its own descendants, so a mis-aimed drop cannot start copying a branch into itself.


2. TrustedInstaller-Aware Access Model

Standard regedit running as Administrator cannot fully access certain protected branches: SAM, SECURITY, BCD, and other SYSTEM-owned keys. Regedit Commander implements a TrustedInstaller token acquisition path that opens the TrustedInstaller service process, duplicates its impersonation token, and applies it to the thread context before performing protected operations.

flowchart TD A[Regedit thread as Administrator] --> B[Adjust privileges] B --> C[Duplicate local SYSTEM token] C --> D[Impersonate SYSTEM] D --> E[Open SCM, query TrustedInstaller] E --> F{Service stopped?} F -->|Yes| G[StartService] F -->|No| H[OpenProcessToken on TI process] G --> H H --> I[DuplicateTokenEx, impersonation level] I --> J[ImpersonateLoggedOnUser] J --> K[Protected registry operation] K --> L[RevertToSelf] style D fill:#34d399,color:#022c22 style J fill:#10b981,color:#022c22 style L fill:#059669,color:#ffffff

The privilege flow is not applied globally — it is scoped to the operations that need it, and the original token context is restored afterwards. Background threads that need it, such as the Find All workers and the live monitor, pick the impersonation up explicitly rather than inheriting it by accident.

One consequence of impersonation is easy to get wrong, and is handled deliberately. While the thread runs as TrustedInstaller, HKEY_CURRENT_USER no longer means you — it resolves to the TrustedInstaller service profile. Every open and create goes through a wrapper that redirects it back:

flowchart LR A[Open or create under HKCU] --> B{Impersonating TI?} B -->|No| C[HKEY_CURRENT_USER] B -->|Yes| D[Resolve signed-in user SID] D --> E[HKEY_USERS under that SID] C --> F[Correct profile] E --> F style E fill:#10b981,color:#022c22 style F fill:#34d399,color:#022c22

Without that redirect, favourites, window layout and newly created keys would silently land in a service account. With it, they land in your profile whether or not elevation is active.

This means you can navigate, read, and back up keys like HKLM\SAM, HKLM\SECURITY, and BCD00000000 (mapped as BCD) without manually hacking token permissions or reaching for external tools.


3. Hive-Level Backup and Restore Engine

This is not .reg file export/import. The backup engine uses the native RegSaveKey / RegLoadKey / RegReplaceKey API path, which operates on raw hive files — the same format Windows uses internally.

Backup. Select the hive set you want (SYSTEM, SOFTWARE, SAM, SECURITY, NTUSER.DAT, BCD, and so on) and choose a base output folder. The engine creates a timestamped subfolder named Registry_Backup_YYYYMMDD_HHMMSS and writes each selected hive into it as a binary hive file, using SeBackupPrivilege and TrustedInstaller context where required.

Restore. This is the part worth understanding before you use it, because nothing changes at the moment you click it:

flowchart TD A[Pick backup folder and hives] --> B[RegReplaceKey per hive] B --> C[New hive staged as .TMP] C --> D[Current hive kept as .BAK] D --> E[Replacement scheduled in kernel] E --> F{Reboot now?} F -->|Yes| G[Applied during boot] F -->|Later| H[Applied at next boot] G --> I[.BAK retained until confirmed] H --> I style E fill:#10b981,color:#022c22 style I fill:#34d399,color:#022c22

The replacement is scheduled at the kernel level and takes effect on the next boot; the previous hive is retained as .BAK until the new one is confirmed. After successful scheduling, the tool offers an immediate reboot. Restore folder history is saved in the application settings, so frequently used backup locations appear in a dropdown.

Key / Menu Action
Menu: Backup Select hives and destination folder, run backup
Menu: Restore Select backup folder and hive set, schedule restore

4. Import and Export

The export dialog offers four output formats, picked from the file type dropdown:

Dropdown entry What it writes Re-importable
Registration Files .reg UTF-16 text, Windows Registry Editor Version 5.00 Yes — the default
Registry Hive Files Binary hive via RegSaveKey, the format Windows uses internally Yes, see below
Text Files .txt UTF-16 human-readable listing No, it is a report
Win9x/NT4 Registration Files .reg ANSI text, REGEDIT4 header Yes

The .reg exporter is recursive and handles the awkward corners of the format rather than quietly losing them: a value whose name is literally @ stays distinct from the key's default value, key names containing brackets or equals signs survive, values with no terminator or with an odd byte count are written as hex(1) so the bytes come back exactly, and REG_MULTI_SZ, REG_QWORD and REG_DWORD_BIG_ENDIAN all keep their type.

In the ANSI REGEDIT4 format, string data that has to be written as hex goes through the active code page, so text outside ASCII survives an export and re-import instead of arriving back as control characters.

Import reads version 5, REGEDIT4 and the older 3.x layouts, detecting the encoding from the file header. Handed a binary hive file instead, it asks for confirmation and then replaces the currently selected key with the file's contents through RegRestoreKey — so a hive export is a way to snapshot one branch and put it back later, without going through the full backup engine.


5. Search, Find All, and Replace

Find / Find Next (Ctrl+F / F3) searches key names, value names and value data, each toggled independently. Three things are worth knowing:

  • * and ? wildcards are supported. * matches any run of characters, ? matches exactly one.
  • Match whole string only decides whether the pattern must describe the entire text or may be found anywhere inside it, and it governs wildcard patterns exactly as it governs plain text. With the option off, *.dll finds C:\lib\a.dll extra, and micro?oft finds a microsoft office.
  • Match case applies to key names, value names and value data alike, and works through the wildcard path as well as the plain one. It is off by default, and both options are remembered between sessions.

Match case also takes the search off its own fast path. An exact, wildcard-free value name is normally looked up directly instead of enumerating the key, but registry lookup is case insensitive — so a case sensitive search enumerates instead, rather than answering for a name you did not ask for and reporting it with the spelling from the search box.

Wildcard matching runs in linear time with no backtracking, so a pathological pattern such as *a*a*a*a*a*a*a*a*b cannot hang the search.

Find All (Ctrl+Shift+F) runs across the whole registry in the background:

flowchart TD A[Ctrl+Shift+F] --> B[Worker threads start] B --> C[Each worker impersonates TI] C --> D[Walk keys, links opened as links] D --> E{Name or data matches?} E -->|Yes| F[Push onto lock-free queue] E -->|No| D F --> G[UI drains queue while scan runs] G --> H[Results pane] D --> I{Cancel pressed?} I -->|Esc| J[Workers drain and join] style G fill:#10b981,color:#022c22 style H fill:#34d399,color:#022c22

Results appear in the dedicated Search Results pane at the bottom of the active panel; in dual-pane mode each panel has its own. The UI stays responsive while results stream in. Cancellation is checked per key and per value, so Esc stops the scan promptly rather than at the end of the current branch. Registry links are opened as links, so a scan never wanders outside the branch it was given.

Right-clicking the results list offers: copy as TSV to the clipboard, export to CSV as UTF-8 with BOM, export to text as UTF-8 or UTF-16, select all, and delete the selected registry entries straight from the results.

Replace (Ctrl+H) targets value names, value data, or both, with match case, match whole string, and a regex mode using ECMAScript semantics including capture group references in the replacement.

The preview is not optional — and it applies to a single replace just as much as to Replace All:

sequenceDiagram participant U as You participant R as Replace engine participant K as Registry U->>R: Replace or Replace All R->>K: Dry pass, read only K-->>R: Every match found R-->>U: Exact list of changes Note over U,R: Nothing written yet U->>R: Confirm R->>K: Apply K-->>R: Counts per value R-->>U: Summary

You see every value name rename and every data edit with its replacement count before a single byte is written. Nothing is committed until you confirm that list.

Literal, non-regex replacement uses Knuth–Morris–Pratt, so its cost is linear in the length of the input rather than quadratic: a four-million-character value with an adversarial pattern is processed in about 15 ms.

Key Action
Ctrl+F Find
Ctrl+Shift+F Find All (background, results pane)
F3 Find Next
Esc Cancel a running Find All
Ctrl+H Replace (with mandatory preview)

6. Diff and Live Monitor

Compare Keys — with dual-pane open, navigate to a key on the left and a different key on the right, then invoke compare. The value list uses custom-draw rendering to highlight differences:

  • Values present only in the left key are marked as left-only
  • Values present only in the right key are marked as right-only
  • Values present in both but with different data or type are marked as changed

The diff table is built by enumerating both keys, sorting by name, and running a merge-compare pass. Type mismatches count as changes regardless of data, and each value is read in full, so two values differing only past the first few kilobytes are still reported. The table is rebuilt automatically whenever the selection in either panel changes.

Live Monitor (Ctrl+M) opens a separate monitor window for the selected key. It is not a polling loop — the thread sleeps on an event and consumes no CPU while nothing happens:

flowchart TD A[Arm RegNotifyChangeKeyValue] --> B[Wait on change or stop event] B -->|Stop| Z[Thread exits at once] B -->|Change| C[Re-arm before scanning] C --> D[Coalesce the burst] D --> E[Snapshot values and subkeys] E --> F[FNV-1a hash per value] F --> G[Diff against previous snapshot] G --> H[Log added, removed, changed] H --> I[Adapt interval to snapshot cost] I --> B style B fill:#10b981,color:#022c22 style I fill:#34d399,color:#022c22

Re-arming happens before the scan, so changes made during a snapshot stay pending instead of being missed. Bursts are coalesced rather than logged one at a time, and the sampling interval adapts to how expensive the key is, holding the worker at roughly a fifth of one core even under a flood of writes. Stopping is immediate. Snapshots are capped at 4096 values, 4096 subkeys and 16 MB per key, and the log is trimmed once it passes 200,000 characters, so neither can grow without bound.

Key Action
Ctrl+M Open Live Monitor for selected key

7. Undo/Redo and Binary Editing

Undo history is off by default. Enable it from Edit → Enable Undo History; the setting is remembered between sessions. Once on, value writes, deletions, renames and recursive key deletions are recorded, and Ctrl+Z / Ctrl+Y step through up to 64 levels in each direction.

Deleting a key is the case that matters most, because there is nothing to fall back on if it goes wrong:

flowchart LR A[Delete key] --> B{Undo history on?} B -->|No| C[Delete tree, no way back] B -->|Yes| D[Snapshot whole subtree in memory] D --> E[Delete tree] E --> F[Record pushed, 64 levels kept] F --> G[Ctrl+Z] G --> H[Recreate key and every child] H --> I[Restore every value, type and data] style D fill:#10b981,color:#022c22 style I fill:#34d399,color:#022c22

The snapshot is taken in memory before anything is removed, so volatile subkeys come back too — a hive-file snapshot would silently drop them, because RegSaveKey does not write volatile keys. Starting a new edit discards the redo chain, as expected.

Binary / Hex editor — double-clicking a REG_BINARY value opens a built-in hex editor modeled after HxD-style interaction: byte-level cursor navigation, offset display, ASCII pane, and direct editing. For non-destructive inspection of any value's raw bytes, a separate Display Binary Data path in the context menu opens a read-only hex view without entering edit mode.

Key Action
Ctrl+Z Undo
Ctrl+Y Redo

8. Other Operations

Key Action
F7 Create new key
F2 Rename key or value
Delete Delete selected key or value
Shift+Delete Delete without the confirmation prompt
Ctrl+R Refresh current view
Ctrl+C / Ctrl+V Copy / paste keys and values
Ctrl+L Jump to the address bar
Ctrl+P Print the selected branch

The address bar accepts a full key path and navigates straight to it. Favourites (Favorites → Add to Favorites) bookmark the current key. Connect Network Registry opens a remote machine's registry in the tree, and Permissions opens the standard ACL editor for the selected key, including the owner and auditing pages.


Keyboard Reference

Key Action
F1 Help topics
F2 Rename
F3 Find Next
F5 Copy to other panel
Shift+F5 Copy with security descriptor
F6 Move to other panel
F7 New key
F10 Toggle dual-pane layout
Shift+F10 Context menu
Tab Same control in the other panel
Ctrl+Tab Tree / value list within the panel
Ctrl+Shift+Tab Tree / value list (reverse)
Delete Delete
Shift+Delete Delete without confirmation
Esc Cancel a running Find All
Ctrl+F Find
Ctrl+Shift+F Find All
Ctrl+H Replace (with preview)
Ctrl+T New tab
Ctrl+W Close tab
Ctrl+M Live Monitor
Ctrl+R Refresh
Ctrl+C Copy
Ctrl+V Paste
Ctrl+P Print
Ctrl+L Focus address bar
Ctrl+Z Undo
Ctrl+Y Redo

Requirements

  • Windows 10 or Windows 11 — x86, x64 or ARM64
  • The binaries also declare compatibility back to Windows 7, but current testing is on Windows 10 and 11
  • Administrator privileges required for protected-hive operations
  • No external dependencies, no installer — one executable per architecture

Important Notes

  • Backup, restore, and TrustedInstaller operations are powerful. Test on a VM before using them on a production system.
  • The restore mechanism schedules hive replacement via RegReplaceKey; changes take effect after reboot.
  • RegSaveKey, which the hive backup relies on, does not write volatile keys — anything under a volatile branch is not part of a hive backup. That is a property of the Windows API, not of this tool. The in-memory undo snapshot does cover them.
  • Behavior may differ across Windows builds. Bug reports with Windows version and exact reproduction steps are very welcome.
  • The BCD hive is mapped as BCD (restored from BCD00000000).

License

This software is provided for personal and home use only.

  • You may use this software on your own personal computers for non-commercial purposes.
  • You may not redistribute, sublicense, sell, or incorporate this software into any commercial product or service.
  • You may not reverse engineer or modify the software.
  • Source code is not provided and remains proprietary.

Copyright (C) 2026 Marek Wesolowski (wesmar). All rights reserved.


Feedback

This is a pre-release build. If something breaks — especially around restore scheduling, TrustedInstaller token handling, or monitor behavior on specific Windows builds — please open an issue with your Windows version, build number, and steps to reproduce.

Add a comment

human test