safing-portmaster/windows_kext/kextinterface/ioctl.go
2024-05-16 16:21:27 +03:00

35 lines
810 B
Go

//go:build windows
// +build windows
package kextinterface
import (
"golang.org/x/sys/windows"
)
const (
METHOD_BUFFERED = 0
METHOD_IN_DIRECT = 1
METHOD_OUT_DIRECT = 2
METHOD_NEITHER = 3
SIOCTL_TYPE = 40000
)
func ctlCode(device_type, function, method, access uint32) uint32 {
return (device_type << 16) | (access << 14) | (function << 2) | method
}
var (
IOCTL_VERSION = ctlCode(SIOCTL_TYPE, 0x800, METHOD_BUFFERED, windows.FILE_READ_DATA|windows.FILE_WRITE_DATA)
IOCTL_SHUTDOWN_REQUEST = ctlCode(SIOCTL_TYPE, 0x801, METHOD_BUFFERED, windows.FILE_READ_DATA|windows.FILE_WRITE_DATA)
)
func ReadVersion(file *KextFile) ([]uint8, error) {
data := make([]uint8, 4)
_, err := file.deviceIOControl(IOCTL_VERSION, nil, data)
if err != nil {
return nil, err
}
return data, nil
}