mirror of
https://github.com/rwinkhart/sys.git
synced 2026-09-03 23:57:32 -04:00
windows: add LoadLibraryEx, add LazyDLL.System
Updates golang/go#14959 Change-Id: Ib91c359c3df919df0b30e584d38e56f79f3e3dc9 Reviewed-on: https://go-review.googlesource.com/21388 Reviewed-by: Russ Cox <rsc@golang.org> Reviewed-by: Alex Brainman <alex.brainman@gmail.com> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
This commit is contained in:
+38
-13
@@ -2,23 +2,25 @@
|
||||
|
||||
package windows
|
||||
|
||||
import "unsafe"
|
||||
import "syscall"
|
||||
import (
|
||||
"syscall"
|
||||
"unsafe"
|
||||
)
|
||||
|
||||
var _ unsafe.Pointer
|
||||
|
||||
var (
|
||||
modadvapi32 = syscall.NewLazyDLL("advapi32.dll")
|
||||
modkernel32 = syscall.NewLazyDLL("kernel32.dll")
|
||||
modshell32 = syscall.NewLazyDLL("shell32.dll")
|
||||
modmswsock = syscall.NewLazyDLL("mswsock.dll")
|
||||
modcrypt32 = syscall.NewLazyDLL("crypt32.dll")
|
||||
modws2_32 = syscall.NewLazyDLL("ws2_32.dll")
|
||||
moddnsapi = syscall.NewLazyDLL("dnsapi.dll")
|
||||
modiphlpapi = syscall.NewLazyDLL("iphlpapi.dll")
|
||||
modsecur32 = syscall.NewLazyDLL("secur32.dll")
|
||||
modnetapi32 = syscall.NewLazyDLL("netapi32.dll")
|
||||
moduserenv = syscall.NewLazyDLL("userenv.dll")
|
||||
modadvapi32 = &LazyDLL{Name: "advapi32.dll", System: true}
|
||||
modkernel32 = &LazyDLL{Name: "kernel32.dll", System: true}
|
||||
modshell32 = &LazyDLL{Name: "shell32.dll", System: true}
|
||||
modmswsock = &LazyDLL{Name: "mswsock.dll", System: true}
|
||||
modcrypt32 = &LazyDLL{Name: "crypt32.dll", System: true}
|
||||
modws2_32 = &LazyDLL{Name: "ws2_32.dll", System: true}
|
||||
moddnsapi = &LazyDLL{Name: "dnsapi.dll", System: true}
|
||||
modiphlpapi = &LazyDLL{Name: "iphlpapi.dll", System: true}
|
||||
modsecur32 = &LazyDLL{Name: "secur32.dll", System: true}
|
||||
modnetapi32 = &LazyDLL{Name: "netapi32.dll", System: true}
|
||||
moduserenv = &LazyDLL{Name: "userenv.dll", System: true}
|
||||
|
||||
procRegisterEventSourceW = modadvapi32.NewProc("RegisterEventSourceW")
|
||||
procDeregisterEventSource = modadvapi32.NewProc("DeregisterEventSource")
|
||||
@@ -39,6 +41,7 @@ var (
|
||||
procQueryServiceConfig2W = modadvapi32.NewProc("QueryServiceConfig2W")
|
||||
procGetLastError = modkernel32.NewProc("GetLastError")
|
||||
procLoadLibraryW = modkernel32.NewProc("LoadLibraryW")
|
||||
procLoadLibraryExW = modkernel32.NewProc("LoadLibraryExW")
|
||||
procFreeLibrary = modkernel32.NewProc("FreeLibrary")
|
||||
procGetProcAddress = modkernel32.NewProc("GetProcAddress")
|
||||
procGetVersion = modkernel32.NewProc("GetVersion")
|
||||
@@ -430,6 +433,28 @@ func _LoadLibrary(libname *uint16) (handle Handle, err error) {
|
||||
return
|
||||
}
|
||||
|
||||
func LoadLibraryEx(libname string, zero Handle, flags uintptr) (handle Handle, err error) {
|
||||
var _p0 *uint16
|
||||
_p0, err = syscall.UTF16PtrFromString(libname)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
return _LoadLibraryEx(_p0, zero, flags)
|
||||
}
|
||||
|
||||
func _LoadLibraryEx(libname *uint16, zero Handle, flags uintptr) (handle Handle, err error) {
|
||||
r0, _, e1 := syscall.Syscall(procLoadLibraryExW.Addr(), 3, uintptr(unsafe.Pointer(libname)), uintptr(zero), uintptr(flags))
|
||||
handle = Handle(r0)
|
||||
if handle == 0 {
|
||||
if e1 != 0 {
|
||||
err = error(e1)
|
||||
} else {
|
||||
err = syscall.EINVAL
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func FreeLibrary(handle Handle) (err error) {
|
||||
r1, _, e1 := syscall.Syscall(procFreeLibrary.Addr(), 1, uintptr(handle), 0, 0)
|
||||
if r1 == 0 {
|
||||
|
||||
Reference in New Issue
Block a user