package windowskext import ( "fmt" "unsafe" "github.com/tevino/abool" "golang.org/x/sys/windows" ) type WinKext struct { dll *windows.DLL recvVerdictRequest *windows.Proc valid *abool.AtomicBool } type VerdictRequest struct { ID uint32 ProcessID uint32 Direction bool IPv6 bool Protocol uint8 SrcIP [4]uint32 DstIP [4]uint32 SrcPort uint16 DstPort uint16 } func New(dllLocation string) (*WinKext, error) { new := &WinKext{} var err error // load dll new.dll, err = windows.LoadDLL(dllLocation) if err != nil { return nil, err } // load functions new.recvVerdictRequest, err = new.dll.FindProc("PortmasterRecvVerdictRequest") if err != nil { return nil, fmt.Errorf("could not find proc PortmasterRecvVerdictRequest: %s", err) } return new, nil } func (kext *WinKext) RecvVerdictRequest() (*VerdictRequest, error) { new := &VerdictRequest{} rc, _, lastErr := kext.recvVerdictRequest.Call( uintptr(unsafe.Pointer(new)), ) if rc != 0 { return nil, lastErr } return new, nil }