mirror of
https://github.com/rwinkhart/go-winio.git
synced 2026-09-06 00:57:19 -04:00
Pass blob pointers safely to ETW
This commit is contained in:
@@ -13,7 +13,7 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type eventDataDescriptor struct {
|
type eventDataDescriptor struct {
|
||||||
ptr uint64
|
ptr ptr64
|
||||||
size uint32
|
size uint32
|
||||||
dataType eventDataDescriptorType
|
dataType eventDataDescriptorType
|
||||||
reserved1 uint8
|
reserved1 uint8
|
||||||
@@ -21,11 +21,8 @@ type eventDataDescriptor struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func newEventDataDescriptor(dataType eventDataDescriptorType, buffer []byte) eventDataDescriptor {
|
func newEventDataDescriptor(dataType eventDataDescriptorType, buffer []byte) eventDataDescriptor {
|
||||||
// Passing a pointer to Go-managed memory as part of a block of memory is
|
|
||||||
// risky since the GC doesn't know about it. If we find a better way to do
|
|
||||||
// this we should use it instead.
|
|
||||||
return eventDataDescriptor{
|
return eventDataDescriptor{
|
||||||
ptr: uint64(uintptr(unsafe.Pointer(&buffer[0]))),
|
ptr: ptr64{ptr: unsafe.Pointer(&buffer[0])},
|
||||||
size: uint32(len(buffer)),
|
size: uint32(len(buffer)),
|
||||||
dataType: dataType,
|
dataType: dataType,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
// +build 386 arm
|
||||||
|
|
||||||
|
package etw
|
||||||
|
|
||||||
|
import (
|
||||||
|
"unsafe"
|
||||||
|
)
|
||||||
|
|
||||||
|
// byteptr64 defines a struct containing a pointer. The struct is guaranteed to
|
||||||
|
// be 64 bits, regardless of the actual size of a pointer on the platform. This
|
||||||
|
// is intended for use with certain Windows APIs that expect a pointer as a
|
||||||
|
// ULONGLONG.
|
||||||
|
type ptr64 struct {
|
||||||
|
ptr unsafe.Pointer
|
||||||
|
_ uint32
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
// +build amd64 arm64
|
||||||
|
|
||||||
|
package etw
|
||||||
|
|
||||||
|
import (
|
||||||
|
"unsafe"
|
||||||
|
)
|
||||||
|
|
||||||
|
// byteptr64 defines a struct containing a pointer. The struct is guaranteed to
|
||||||
|
// be 64 bits, regardless of the actual size of a pointer on the platform. This
|
||||||
|
// is intended for use with certain Windows APIs that expect a pointer as a
|
||||||
|
// ULONGLONG.
|
||||||
|
type ptr64 struct {
|
||||||
|
ptr unsafe.Pointer
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user