summaryrefslogtreecommitdiffhomepage
path: root/tun/wintun/dll_windows.go
diff options
context:
space:
mode:
Diffstat (limited to 'tun/wintun/dll_windows.go')
-rw-r--r--tun/wintun/dll_windows.go128
1 files changed, 0 insertions, 128 deletions
diff --git a/tun/wintun/dll_windows.go b/tun/wintun/dll_windows.go
deleted file mode 100644
index 3832c1e..0000000
--- a/tun/wintun/dll_windows.go
+++ /dev/null
@@ -1,128 +0,0 @@
-/* SPDX-License-Identifier: MIT
- *
- * Copyright (C) 2017-2021 WireGuard LLC. All Rights Reserved.
- */
-
-package wintun
-
-import (
- "fmt"
- "sync"
- "sync/atomic"
- "unsafe"
-
- "golang.org/x/sys/windows"
-)
-
-func newLazyDLL(name string, onLoad func(d *lazyDLL)) *lazyDLL {
- return &lazyDLL{Name: name, onLoad: onLoad}
-}
-
-func (d *lazyDLL) NewProc(name string) *lazyProc {
- return &lazyProc{dll: d, Name: name}
-}
-
-type lazyProc struct {
- Name string
- mu sync.Mutex
- dll *lazyDLL
- addr uintptr
-}
-
-func (p *lazyProc) Find() error {
- if atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(&p.addr))) != nil {
- return nil
- }
- p.mu.Lock()
- defer p.mu.Unlock()
- if p.addr != 0 {
- return nil
- }
-
- err := p.dll.Load()
- if err != nil {
- return fmt.Errorf("Error loading %v DLL: %w", p.dll.Name, err)
- }
- addr, err := p.nameToAddr()
- if err != nil {
- return fmt.Errorf("Error getting %v address: %w", p.Name, err)
- }
-
- atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(&p.addr)), unsafe.Pointer(addr))
- return nil
-}
-
-func (p *lazyProc) Addr() uintptr {
- err := p.Find()
- if err != nil {
- panic(err)
- }
- return p.addr
-}
-
-type lazyDLL struct {
- Name string
- mu sync.Mutex
- module windows.Handle
- onLoad func(d *lazyDLL)
-}
-
-func (d *lazyDLL) Load() error {
- if atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(&d.module))) != nil {
- return nil
- }
- d.mu.Lock()
- defer d.mu.Unlock()
- if d.module != 0 {
- return nil
- }
-
- const (
- LOAD_LIBRARY_SEARCH_APPLICATION_DIR = 0x00000200
- LOAD_LIBRARY_SEARCH_SYSTEM32 = 0x00000800
- )
- module, err := windows.LoadLibraryEx(d.Name, 0, LOAD_LIBRARY_SEARCH_APPLICATION_DIR|LOAD_LIBRARY_SEARCH_SYSTEM32)
- if err != nil {
- return fmt.Errorf("Unable to load library: %w", err)
- }
-
- atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(&d.module)), unsafe.Pointer(module))
- if d.onLoad != nil {
- d.onLoad(d)
- }
- return nil
-}
-
-func (p *lazyProc) nameToAddr() (uintptr, error) {
- return windows.GetProcAddress(p.dll.module, p.Name)
-}
-
-// Version returns the version of the Wintun DLL.
-func Version() string {
- if modwintun.Load() != nil {
- return "unknown"
- }
- resInfo, err := windows.FindResource(modwintun.module, windows.ResourceID(1), windows.RT_VERSION)
- if err != nil {
- return "unknown"
- }
- data, err := windows.LoadResourceData(modwintun.module, resInfo)
- if err != nil {
- return "unknown"
- }
-
- var fixedInfo *windows.VS_FIXEDFILEINFO
- fixedInfoLen := uint32(unsafe.Sizeof(*fixedInfo))
- err = windows.VerQueryValue(unsafe.Pointer(&data[0]), `\`, unsafe.Pointer(&fixedInfo), &fixedInfoLen)
- if err != nil {
- return "unknown"
- }
- version := fmt.Sprintf("%d.%d", (fixedInfo.FileVersionMS>>16)&0xff, (fixedInfo.FileVersionMS>>0)&0xff)
- if nextNibble := (fixedInfo.FileVersionLS >> 16) & 0xff; nextNibble != 0 {
- version += fmt.Sprintf(".%d", nextNibble)
- }
- if nextNibble := (fixedInfo.FileVersionLS >> 0) & 0xff; nextNibble != 0 {
- version += fmt.Sprintf(".%d", nextNibble)
- }
- return version
-}