Skip to content

Registry (kernel registry ETW)

This source records successful registry changes: key creation and deletion, value set and delete, and key security changes. It resolves each change to a full key path and the process that made it.

Collector ID freedr.registry-etw
Windows mechanism Microsoft-Windows-Kernel-Registry manifest provider plus the classic kernel registry provider, in the shared FreeDR-Unified system logger
Hunt events view, event_type LIKE 'registry.%'
Rule SQL source name registry_etw
Hot table registry_etw_v4
Code crates/freedr-collect-registry

ETW providers

Provider Settings Event IDs Use
Microsoft-Windows-Kernel-Registry {70EB4F03-C1DE-4F73-A051-33D13D5413BD} Level 5, all keywords, provider option 0x2 (capture written value bytes) 1 CreateKey, 3 DeleteKey, 5 SetValueKey, 6 DeleteValueKey, 15 SetSecurityKey mutations lane: evidence
same 2 OpenKey, 13 CloseKey access lane: path tracking only
Classic registry {AE53722E-C863-11D2-8659-00C04FA321A1} Flag 0x20000 Opcodes 14/15 (value path hints), 22/23 (KCB create/delete) Path tracking only

Query, enumerate, flush, query-security and SetInformationKey events are not subscribed.

Event types

event_type Stored Fields
registry.key_created Only when CreateKey actually created a new key (Disposition 1) key_path
registry.key_delete Yes key_path
registry.value_set Yes key_path, value_name, value_type, value_data
registry.value_delete Yes key_path, value_name
registry.key_security_set Yes key_path

These types are reserved in code but never stored: registry.key_create_or_open_unknown, registry.key_open, registry.key_query, registry.value_query, registry.key_enumerate, registry.value_enumerate, registry.values_query_multiple, registry.key_security_query, registry.key_information_set.

Failed operations (NTSTATUS error) are not stored. Key rename, hive load/unload and previous-value capture are not available.

Columns

Column Notes
key_path Normalized: \REGISTRY\MACHINE becomes HKLM and \REGISTRY\USER becomes HKU. Other roots stay \REGISTRY\<root>. Up to 64 KiB.
value_name Value set and delete only
value_type REG_* numeric type (value set only)
value_data The exact bytes written, only if the whole value was captured. Otherwise NULL. An empty value is an empty blob. Up to 64 KiB. Hunt searches it as hex.
actor_pid + actor_image_path, actor_command_line, actor_start_at, actor_user_sid, actor_user_name The writing process. It is taken from the event's thread when possible, otherwise from the event header PID.

Partial: value data size

Full value capture was verified up to 2,048 bytes on one Windows 11 (22621) test. Larger values arrived only as a prefix and are stored as NULL.

Path resolution and dedupe

Stage Behaviour
Key object map Kernel key object to full path, built from CreateKey/OpenKey names, classic KCB create events and value hints. It holds 65,536 entries with a 10-minute TTL.
Waiting for a path A change waits up to 2 s (8,192 pending) for its path. Changes stay in order.
Still unresolved Dropped and counted in registry_terminal_unresolved_discarded
Duplicate merge Identical changes (type, path, value name, type, data, actor PID) within 500 ms are merged into the first one. Limits: 65,536 entries, 32 MiB. A key close flushes pending changes.
Event ID UUIDv5 over the event content. Duplicates are suppressed at write.

Noise controls

Rule Counter
Events from FreeDR's own process registry_self_callbacks_discarded
FreeDR's own keys: HKLM\SOFTWARE[\WOW6432Node]\FreeDR\…, HKLM\SYSTEM\<ControlSet>\Services\FreeDR\… registry_freedr_key_discarded
Component store servicing: HKLM\COMPONENTS\DerivedData\Components, …\DerivedData\VersionedIndex\…\ComponentFamilies…, HKLM\COMPONENTS\CanonicalData, HKLM\COMPONENTS\ServicingStackVersions registry_terminal_failed_or_excluded_discarded
App hives \REGISTRY\A\{GUID}\ under ActivatableClassId, Server, Interfaces, ProxyStubClsIds, Root\InventoryApplicationFile, Root\InventoryMiscellaneousUUPInfo same
Edge Update progress values under …\Microsoft\EdgeUpdate\ClientState\<product>\CurrentState (DownloadProgressPercent, DownloadTimeRemainingMs, InstallProgressPercent, InstallTimeRemainingMs, StateValue) same
…\Control\FeatureManagement\Policies value TemporaryEnterpriseFeatureControlState_Mirrored same
Failed operations and unsubscribed types same

There are no ADR-0028 measured exclusions for this source. Registry events do not trigger artifact acquisition.

COM identifier names

The console can show display names for CLSID, Interface and AppID GUIDs found in registry paths. To do this it reads the current host registration under HKLM\SOFTWARE\Classes and HKU\<sid>\Software\Classes, including WOW6432Node. This is a live lookup. Nothing is stored, and the name may differ from what was registered at event time.

Health counters

Group Counters
Discards registry_self_callbacks_discarded, registry_terminal_unresolved_discarded, registry_freedr_key_discarded, registry_terminal_failed_or_excluded_discarded
Merge/retention retention_observations, retention_merged, retention_pending, retention_window_flushes, retention_capacity_flushes, retention_unresolved, …
Loss registry_loss_raw_full, registry_loss_raw_unavailable, registry_loss_raw_malformed, registry_loss_raw_oversized, registry_loss_admission, registry_loss_controller, registry_loss_decode
Data quality registry_value_bytes_complete, registry_value_bytes_truncated, registry_value_bytes_unavailable, registry_target_incomplete, registry_actor_uncorrelated
Rejects registry_reject_* (unknown type/hive/view/state, empty required, invalid time, text too large)

The source also has the shared ETW decode (TDH) counters. See Storage & health.