From 44f02d92fdec7063d6705bee76e04c9fb61d4059 Mon Sep 17 00:00:00 2001 From: David Crawshaw Date: Wed, 30 Jun 2021 06:31:16 -0700 Subject: [PATCH] windows: add WTSGetActiveConsoleSessionId https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-wtsgetactiveconsolesessionid Change-Id: I3c180bbb3a768beac6633e78514fac4e3837b69d Reviewed-on: https://go-review.googlesource.com/c/sys/+/331909 Reviewed-by: Jason A. Donenfeld Reviewed-by: Alex Brainman Reviewed-by: Brad Fitzpatrick Trust: Jason A. Donenfeld Trust: Brad Fitzpatrick Trust: Dmitri Shuralyov Run-TryBot: Tobias Klauser TryBot-Result: Go Bot --- windows/security_windows.go | 1 + windows/zsyscall_windows.go | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/windows/security_windows.go b/windows/security_windows.go index 111c10d3..d414ef13 100644 --- a/windows/security_windows.go +++ b/windows/security_windows.go @@ -889,6 +889,7 @@ type WTS_SESSION_INFO struct { //sys WTSQueryUserToken(session uint32, token *Token) (err error) = wtsapi32.WTSQueryUserToken //sys WTSEnumerateSessions(handle Handle, reserved uint32, version uint32, sessions **WTS_SESSION_INFO, count *uint32) (err error) = wtsapi32.WTSEnumerateSessionsW //sys WTSFreeMemory(ptr uintptr) = wtsapi32.WTSFreeMemory +//sys WTSGetActiveConsoleSessionId() (sessionID uint32) type ACL struct { aclRevision byte diff --git a/windows/zsyscall_windows.go b/windows/zsyscall_windows.go index 148de0ff..2083ec37 100644 --- a/windows/zsyscall_windows.go +++ b/windows/zsyscall_windows.go @@ -346,6 +346,7 @@ var ( procVirtualLock = modkernel32.NewProc("VirtualLock") procVirtualProtect = modkernel32.NewProc("VirtualProtect") procVirtualUnlock = modkernel32.NewProc("VirtualUnlock") + procWTSGetActiveConsoleSessionId = modkernel32.NewProc("WTSGetActiveConsoleSessionId") procWaitForMultipleObjects = modkernel32.NewProc("WaitForMultipleObjects") procWaitForSingleObject = modkernel32.NewProc("WaitForSingleObject") procWriteConsoleW = modkernel32.NewProc("WriteConsoleW") @@ -2992,6 +2993,12 @@ func VirtualUnlock(addr uintptr, length uintptr) (err error) { return } +func WTSGetActiveConsoleSessionId() (sessionID uint32) { + r0, _, _ := syscall.Syscall(procWTSGetActiveConsoleSessionId.Addr(), 0, 0, 0, 0) + sessionID = uint32(r0) + return +} + func waitForMultipleObjects(count uint32, handles uintptr, waitAll bool, waitMilliseconds uint32) (event uint32, err error) { var _p0 uint32 if waitAll {