diff options
author | Jason A. Donenfeld <Jason@zx2c4.com> | 2019-02-28 07:19:06 +0100 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2019-02-28 08:05:02 +0100 |
commit | f3c3bd215731f55cf042e0d1c9eae4aa880f6257 (patch) | |
tree | 243e106096b2df0f27074234d6acd56d518fb407 /service/zsyscall_windows.go | |
parent | manager: wire up config migrator (diff) | |
download | wireguard-windows-f3c3bd215731f55cf042e0d1c9eae4aa880f6257.tar.xz wireguard-windows-f3c3bd215731f55cf042e0d1c9eae4aa880f6257.zip |
service: track tunnel service status
Diffstat (limited to '')
-rw-r--r-- | service/zsyscall_windows.go | 42 |
1 files changed, 38 insertions, 4 deletions
diff --git a/service/zsyscall_windows.go b/service/zsyscall_windows.go index 649e3581..faf6d780 100644 --- a/service/zsyscall_windows.go +++ b/service/zsyscall_windows.go @@ -39,11 +39,14 @@ func errnoErr(e syscall.Errno) error { var ( modwtsapi32 = windows.NewLazySystemDLL("wtsapi32.dll") modadvapi32 = windows.NewLazySystemDLL("advapi32.dll") + modkernel32 = windows.NewLazySystemDLL("kernel32.dll") - procWTSQueryUserToken = modwtsapi32.NewProc("WTSQueryUserToken") - procWTSEnumerateSessionsW = modwtsapi32.NewProc("WTSEnumerateSessionsW") - procWTSFreeMemory = modwtsapi32.NewProc("WTSFreeMemory") - procCreateWellKnownSid = modadvapi32.NewProc("CreateWellKnownSid") + procWTSQueryUserToken = modwtsapi32.NewProc("WTSQueryUserToken") + procWTSEnumerateSessionsW = modwtsapi32.NewProc("WTSEnumerateSessionsW") + procWTSFreeMemory = modwtsapi32.NewProc("WTSFreeMemory") + procCreateWellKnownSid = modadvapi32.NewProc("CreateWellKnownSid") + procNotifyServiceStatusChangeW = modadvapi32.NewProc("NotifyServiceStatusChangeW") + procSleepEx = modkernel32.NewProc("SleepEx") ) func wtfQueryUserToken(session uint32, token *windows.Token) (err error) { @@ -86,3 +89,34 @@ func createWellKnownSid(sidType wellKnownSidType, domainSid *windows.SID, sid *w } return } + +func notifyServiceStatusChange(service windows.Handle, notifyMask uint32, notifyBuffer uintptr) (err error) { + r1, _, e1 := syscall.Syscall(procNotifyServiceStatusChangeW.Addr(), 3, uintptr(service), uintptr(notifyMask), uintptr(notifyBuffer)) + if r1 != 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func sleepEx(milliseconds uint32, alertable bool) (ret uint32, err error) { + var _p0 uint32 + if alertable { + _p0 = 1 + } else { + _p0 = 0 + } + r0, _, e1 := syscall.Syscall(procSleepEx.Addr(), 2, uintptr(milliseconds), uintptr(_p0), 0) + ret = uint32(r0) + if ret == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} |