1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- //go:build windows && (386 || arm)
- // +build windows
- // +build 386 arm
- package etw
- import (
- "github.com/Microsoft/go-winio/pkg/guid"
- "golang.org/x/sys/windows"
- )
- func low(v providerHandle) uint32 {
- return uint32(v & 0xffffffff)
- }
- func high(v providerHandle) uint32 {
- return low(v >> 32)
- }
- func eventUnregister(providerHandle providerHandle) (win32err error) {
- return eventUnregister_32(low(providerHandle), high(providerHandle))
- }
- func eventWriteTransfer(
- providerHandle providerHandle,
- descriptor *eventDescriptor,
- activityID *windows.GUID,
- relatedActivityID *windows.GUID,
- dataDescriptorCount uint32,
- dataDescriptors *eventDataDescriptor) (win32err error) {
- return eventWriteTransfer_32(
- low(providerHandle),
- high(providerHandle),
- descriptor,
- activityID,
- relatedActivityID,
- dataDescriptorCount,
- dataDescriptors)
- }
- func eventSetInformation(
- providerHandle providerHandle,
- class eventInfoClass,
- information uintptr,
- length uint32) (win32err error) {
- return eventSetInformation_32(
- low(providerHandle),
- high(providerHandle),
- class,
- information,
- length)
- }
- // providerCallbackAdapter acts as the first-level callback from the C/ETW side
- // for provider notifications. Because Go has trouble with callback arguments of
- // different size, it has only pointer-sized arguments, which are then cast to
- // the appropriate types when calling providerCallback.
- // For x86, the matchAny and matchAll keywords need to be assembled from two
- // 32-bit integers, because the max size of an argument is uintptr, but those
- // two arguments are actually 64-bit integers.
- func providerCallbackAdapter(sourceID *guid.GUID, state uint32, level uint32, matchAnyKeyword_low uint32, matchAnyKeyword_high uint32, matchAllKeyword_low uint32, matchAllKeyword_high uint32, filterData uintptr, i uintptr) uintptr {
- matchAnyKeyword := uint64(matchAnyKeyword_high)<<32 | uint64(matchAnyKeyword_low)
- matchAllKeyword := uint64(matchAllKeyword_high)<<32 | uint64(matchAllKeyword_low)
- providerCallback(*sourceID, ProviderState(state), Level(level), uint64(matchAnyKeyword), uint64(matchAllKeyword), filterData, i)
- return 0
- }
|