/
sessioninfo.go
71 lines (63 loc) · 2.06 KB
/
sessioninfo.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
// +build windows
package wtsapi
import (
"time"
"unsafe"
"github.com/gentlemanautomaton/winsession/connstate"
"github.com/gentlemanautomaton/winsession/lockstate"
)
const (
sessionInfoHeaderSize = unsafe.Sizeof(sessionInfoHeader{})
sessionInfoLevel1Size = unsafe.Sizeof(sessionInfoLevel1{})
)
// SessionInfo holds detailed information about a session in windows terminal
// server. It contains data extracted from the WTSINFOEXW windows API structure.
//
// https://docs.microsoft.com/en-us/windows/win32/api/wtsapi32/ns-wtsapi32-wtsinfoexw
type SessionInfo struct {
SessionID uint32
ConnState connstate.Value
LockState lockstate.Value
WindowStation string
UserName string
UserDomain string
LogonTime time.Time
ConnectTime time.Time
DisconnectTime time.Time
LastInputTime time.Time
CurrentTime time.Time
IncomingBytes uint32
OutgoingBytes uint32
IncomingFrames uint32
OutgoingFrames uint32
IncomingCompressedBytes uint32
OutgoingCompressedBytes uint32
}
// https://docs.microsoft.com/en-us/windows/win32/api/wtsapi32/ns-wtsapi32-wtsinfoexw
// https://docs.microsoft.com/en-us/windows/win32/api/wtsapi32/ns-wtsapi32-wtsinfoex_level_w
type sessionInfo struct {
sessionInfoHeader
sessionInfoLevel1
}
type sessionInfoHeader struct {
Level uint32
}
type sessionInfoLevel1 struct {
SessionID uint32
ConnState connstate.Value
LockState lockstate.Value
WindowStation [winStationNameLength + 1]uint16
UserName [userNameLength + 1]uint16
UserDomain [domainLength + 1]uint16
LogonTime int64
ConnectTime int64
DisconnectTime int64
LastInputTime int64
CurrentTime int64
IncomingBytes uint32
OutgoingBytes uint32
IncomingFrames uint32
OutgoingFrames uint32
IncomingCompressedBytes uint32
OutgoingCompressedBytes uint32
}