mirror of
https://github.com/rwinkhart/go-winio.git
synced 2026-09-04 08:07:20 -04:00
Merge pull request #123 from kevpar/etw-opcode
Add opcode support to etw package
This commit is contained in:
@@ -17,7 +17,7 @@ const (
|
|||||||
// will always be collected.
|
// will always be collected.
|
||||||
type Level uint8
|
type Level uint8
|
||||||
|
|
||||||
// Predefined ETW log levels.
|
// Predefined ETW log levels from winmeta.xml in the Windows SDK.
|
||||||
const (
|
const (
|
||||||
LevelAlways Level = iota
|
LevelAlways Level = iota
|
||||||
LevelCritical
|
LevelCritical
|
||||||
@@ -27,13 +27,30 @@ const (
|
|||||||
LevelVerbose
|
LevelVerbose
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Opcode represents the operation that the event indicates is being performed.
|
||||||
|
type Opcode uint8
|
||||||
|
|
||||||
|
// Predefined ETW opcodes from winmeta.xml in the Windows SDK.
|
||||||
|
const (
|
||||||
|
// OpcodeInfo indicates an informational event.
|
||||||
|
OpcodeInfo Opcode = iota
|
||||||
|
// OpcodeStart indicates the start of an operation.
|
||||||
|
OpcodeStart
|
||||||
|
// OpcodeStop indicates the end of an operation.
|
||||||
|
OpcodeStop
|
||||||
|
// OpcodeDCStart indicates the start of a provider capture state operation.
|
||||||
|
OpcodeDCStart
|
||||||
|
// OpcodeDCStop indicates the end of a provider capture state operation.
|
||||||
|
OpcodeDCStop
|
||||||
|
)
|
||||||
|
|
||||||
// EventDescriptor represents various metadata for an ETW event.
|
// EventDescriptor represents various metadata for an ETW event.
|
||||||
type eventDescriptor struct {
|
type eventDescriptor struct {
|
||||||
id uint16
|
id uint16
|
||||||
version uint8
|
version uint8
|
||||||
channel Channel
|
channel Channel
|
||||||
level Level
|
level Level
|
||||||
opcode uint8
|
opcode Opcode
|
||||||
task uint16
|
task uint16
|
||||||
keyword uint64
|
keyword uint64
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,12 +36,20 @@ func WithKeyword(keyword uint64) EventOpt {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// WithChannel specifies the channel of the event to be written.
|
||||||
func WithChannel(channel Channel) EventOpt {
|
func WithChannel(channel Channel) EventOpt {
|
||||||
return func(options *eventOptions) {
|
return func(options *eventOptions) {
|
||||||
options.descriptor.channel = channel
|
options.descriptor.channel = channel
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// WithOpcode specifies the opcode of the event to be written.
|
||||||
|
func WithOpcode(opcode Opcode) EventOpt {
|
||||||
|
return func(options *eventOptions) {
|
||||||
|
options.descriptor.opcode = opcode
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// WithTags specifies the tags of the event to be written. Tags is a 28-bit
|
// WithTags specifies the tags of the event to be written. Tags is a 28-bit
|
||||||
// value (top 4 bits are ignored) which are interpreted by the event consumer.
|
// value (top 4 bits are ignored) which are interpreted by the event consumer.
|
||||||
func WithTags(newTags uint32) EventOpt {
|
func WithTags(newTags uint32) EventOpt {
|
||||||
@@ -50,12 +58,14 @@ func WithTags(newTags uint32) EventOpt {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// WithActivityID specifies the activity ID of the event to be written.
|
||||||
func WithActivityID(activityID *windows.GUID) EventOpt {
|
func WithActivityID(activityID *windows.GUID) EventOpt {
|
||||||
return func(options *eventOptions) {
|
return func(options *eventOptions) {
|
||||||
options.activityID = activityID
|
options.activityID = activityID
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// WithRelatedActivityID specifies the parent activity ID of the event to be written.
|
||||||
func WithRelatedActivityID(activityID *windows.GUID) EventOpt {
|
func WithRelatedActivityID(activityID *windows.GUID) EventOpt {
|
||||||
return func(options *eventOptions) {
|
return func(options *eventOptions) {
|
||||||
options.relatedActivityID = activityID
|
options.relatedActivityID = activityID
|
||||||
|
|||||||
Reference in New Issue
Block a user