Fix corruption in x86 callback

This commit is contained in:
Kyle W
2021-06-14 13:44:35 -07:00
parent 1d4efacd46
commit 0b148d19cf
3 changed files with 25 additions and 9 deletions
+10
View File
@@ -4,6 +4,7 @@
package etw
import (
"github.com/Microsoft/go-winio/pkg/guid"
"golang.org/x/sys/windows"
)
@@ -40,3 +41,12 @@ func eventSetInformation(
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.
func providerCallbackAdapter(sourceID *guid.GUID, state uint32, level uint8, matchAnyKeyword uintptr, matchAllKeyword uintptr, filterData uintptr, i uintptr) uintptr {
providerCallback(*sourceID, ProviderState(state), Level(level), uint64(matchAnyKeyword), uint64(matchAllKeyword), filterData, i)
return 0
}