Skip to content

Commit

Permalink
wintun: remove memmod option for dll loading
Browse files Browse the repository at this point in the history
Only wireguard-windows used this, and it's moving to wgnt exclusively.

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
  • Loading branch information
zx2c4 committed Oct 17, 2021
1 parent dfd688b commit ba9e364
Show file tree
Hide file tree
Showing 13 changed files with 39 additions and 1,481 deletions.
54 changes: 0 additions & 54 deletions tun/wintun/dll_fromfile_windows.go

This file was deleted.

61 changes: 0 additions & 61 deletions tun/wintun/dll_fromrsrc_windows.go

This file was deleted.

39 changes: 39 additions & 0 deletions tun/wintun/dll_windows.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ import (
"sync"
"sync/atomic"
"unsafe"

"golang.org/x/sys/windows"
)

func newLazyDLL(name string, onLoad func(d *lazyDLL)) *lazyDLL {
Expand Down Expand Up @@ -57,3 +59,40 @@ func (p *lazyProc) Addr() uintptr {
}
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)
}
Loading

0 comments on commit ba9e364

Please sign in to comment.