Skip to content

Commit e686f7e

Browse files
committed
refactor(event): Read disposition/status params directly from extended data items
1 parent 6ce965f commit e686f7e

2 files changed

Lines changed: 8 additions & 1 deletion

File tree

pkg/event/param_decoder_windows.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,11 @@ func (d *ParamDecoder) DecodeFile(r *etw.EventRecord, e *Event) {
168168
e.AppendParam(params.FileAttributes, params.Flags, r.ReadUint32(24), WithFlags(FileAttributeFlags))
169169
e.AppendParam(params.FileShareMask, params.Flags, r.ReadUint32(28), WithFlags(FileShareModeFlags))
170170
e.AppendParam(params.FilePath, params.DOSPath, r.ConsumeUTF16String(32))
171+
172+
// read create disposition/status from extended data items
173+
disposition, status := r.ReadEventHeaderFileExtendedDataItems()
174+
e.AppendParam(params.NTStatus, params.Status, status)
175+
e.AppendEnum(params.FileOperation, disposition, fs.FileCreateDispositions)
171176
case FileOpEndID:
172177
// typedef struct _PERFINFO_FILE_OPERATION_END {
173178
// ULONG_PTR Irp;

pkg/event/param_decoder_windows_test.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,13 +147,15 @@ func TestDecodeFile(t *testing.T) {
147147
{
148148
name: "CreateFile", opcode: CreateFileID,
149149
assertions: func(t *testing.T, e *Event) {
150-
assert.Len(t, e.Params, 7)
150+
assert.Len(t, e.Params, 9)
151151
assert.Equal(t, uint64(0xffffd78d965e07c8), e.Params.MustGetUint64(params.FileIrpPtr))
152152
assert.Equal(t, uint64(0xffffd78d920b6650), e.Params.MustGetUint64(params.FileObject))
153153
assert.Equal(t, `\Device\HarddiskVolume3\WINDOWS\AppCompat\Programs\Amcache.hve`, e.Params.MustGetString(params.FilePath))
154154
assert.Equal(t, "NORMAL", e.GetParamAsString(params.FileAttributes))
155155
assert.Equal(t, "SEQUENTIAL_ONLY|SYNCHRONOUS_IO_NONALERT|NO_COMPRESSION", e.GetParamAsString(params.FileCreateOptions))
156156
assert.Equal(t, uint32(6536), e.Params.MustGetTid())
157+
assert.Equal(t, "SUPERSEDE", e.GetParamAsString(params.FileOperation))
158+
assert.Equal(t, "Success", e.GetParamAsString(params.NTStatus))
157159
},
158160
buf: []byte{
159161
200, 7, 94, 150, 141, 215, 255, 255,

0 commit comments

Comments
 (0)