Skip to content

Commit eddefd2

Browse files
committed
fix(ps): Use start time from event timestamp
If we fail to obtain the process start time use the one from the event timestamp.
1 parent 94d5bcf commit eddefd2

File tree

1 file changed

+8
-4
lines changed

1 file changed

+8
-4
lines changed

internal/etw/processors/ps_windows.go

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ func (p psProcessor) ProcessEvent(e *kevent.Kevent) (*kevent.Kevent, bool, error
4848
p.regionProber.Remove(evt.Kparams.MustGetPid())
4949
return evt, false, multierror.Wrap(err, p.psnap.Remove(evt))
5050
}
51+
5152
return evt, false, multierror.Wrap(err, p.psnap.Write(evt))
5253
case ktypes.CreateThread, ktypes.TerminateThread, ktypes.ThreadRundown:
5354
pid, err := e.Kparams.GetPid()
@@ -65,6 +66,7 @@ func (p psProcessor) ProcessEvent(e *kevent.Kevent) (*kevent.Kevent, bool, error
6566
if err != nil {
6667
return e, false, err
6768
}
69+
6870
return e, false, p.psnap.RemoveThread(pid, tid)
6971
case ktypes.OpenProcess, ktypes.OpenThread:
7072
pid, err := e.Kparams.GetPid()
@@ -76,8 +78,10 @@ func (p psProcessor) ProcessEvent(e *kevent.Kevent) (*kevent.Kevent, bool, error
7678
e.AppendParam(kparams.Exe, kparams.FilePath, proc.Exe)
7779
e.AppendParam(kparams.ProcessName, kparams.AnsiString, proc.Name)
7880
}
81+
7982
return e, false, nil
8083
}
84+
8185
return e, true, nil
8286
}
8387

@@ -105,7 +109,7 @@ func (p psProcessor) processEvent(e *kevent.Kevent) (*kevent.Kevent, error) {
105109

106110
// query process start time
107111
pid := e.Kparams.MustGetPid()
108-
started, err := getStartTime(pid)
112+
started, err := getStartTime(pid, e)
109113
if err != nil {
110114
started = e.Timestamp
111115
}
@@ -117,10 +121,10 @@ func (p psProcessor) processEvent(e *kevent.Kevent) (*kevent.Kevent, error) {
117121
func (psProcessor) Name() ProcessorType { return Ps }
118122
func (p psProcessor) Close() {}
119123

120-
func getStartTime(pid uint32) (time.Time, error) {
124+
func getStartTime(pid uint32, e *kevent.Kevent) (time.Time, error) {
121125
proc, err := windows.OpenProcess(windows.PROCESS_QUERY_LIMITED_INFORMATION, false, pid)
122126
if err != nil {
123-
return time.Now(), err
127+
return e.Timestamp, err
124128
}
125129
//nolint:errcheck
126130
defer windows.CloseHandle(proc)
@@ -132,7 +136,7 @@ func getStartTime(pid uint32) (time.Time, error) {
132136
)
133137
err = windows.GetProcessTimes(proc, &ct, &xt, &kt, &ut)
134138
if err != nil {
135-
return time.Now(), err
139+
return e.Timestamp, err
136140
}
137141
return time.Unix(0, ct.Nanoseconds()), nil
138142
}

0 commit comments

Comments
 (0)