Show classic positional EventData fields as "Parameter N"#668
Open
jschick04 wants to merge 1 commit into
Open
Conversation
jschick04
force-pushed
the
jschick/eventdata-param-names
branch
from
July 24, 2026 16:54
34c36dd to
fa49290
Compare
jschick04
force-pushed
the
jschick/eventdata-param-names
branch
from
July 24, 2026 17:07
fa49290 to
63cec96
Compare
Windows synthesizes "%1".."%N" <data> node names in the provider template for classic positional events (e.g. Microsoft-Windows-CAPI2 4192). The raw event data is unnamed and positional, so no real field names exist; rendering the synthetic "%1".."%N" as field labels diverged from Windows Event Viewer, which shows such fields positionally as "Parameter N". Normalize an all-placeholder template's field names to "Parameter N" in TemplateAnalyzer.BuildInfo, gated so a template containing any real name is left untouched. Because every consumer reads the cached per-template schema, the friendly label reaches the DetailsPane, the filter field/value picklists, and column storage with no consumer changes. The normalization is a canonical positive-ordinal ASCII scan that allocates one "Parameter N" string per placeholder and runs once per unique template behind the existing GetTemplateInfo cache, so it stays off the per-event path. Saved filters, the filter library, and exported scenarios keyed on a raw "%N" field will stop matching and can be re-pointed at "Parameter N"; no built-in scenario references "%N", and the in-memory event store is rebuilt on each log open, so no data migration is required.
jschick04
force-pushed
the
jschick/eventdata-param-names
branch
from
July 24, 2026 17:21
63cec96 to
be90904
Compare
jschick04
marked this pull request as ready for review
July 24, 2026 17:26
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Classic positional events (e.g. Microsoft-Windows-CAPI2 4192) expose a provider template whose
<data>node names are Windows-synthesized placeholders%1..%N. The raw event data is unnamed and positional, so no real field names exist. EventLogExpert rendered those raw%1..%Nas field labels, which diverged from Windows Event Viewer (which shows such fields positionally as "Parameter N").This normalizes an all-placeholder template's field names to "Parameter N" at template-analysis time, so the DetailsPane, filter field/value picklists, and column storage all read the friendly label.
Evidence
The reported event is CAPI2 4192 in the Application log. Its raw
<EventData>is positional/unnamed:The
%1..%18labels came only from EventLogExpert applying the provider template's synthetic node names; Event Viewer never surfaces%1as a field label.Approach
TemplateAnalyzer.BuildInfo, gated on the template being entirely synthetic (%[1-9][0-9]*); any real name present leaves the template untouched.Performance
Normalization runs once per unique template behind the existing
GetTemplateInfocache (not per event). Measured delta (Release, worst-case cold-cache):Testing
SyntheticFieldNameNormalizationTests(19): gate, canonical-ordinal boundaries (%0/%01/%1a/space/sign/Unicode-digit rejected), length-provider split, name/out-type lockstep, and a sealed column-store round-trip (Parameter 1resolves,%1no longer does).Compatibility
%N(all 21 catalogs swept).%Nfield will stop matching and can be re-pointed at "Parameter N"; the in-memory event store is rebuilt on each log open, so no migration is required.