|
@@ -46,6 +46,7 @@ var (
|
|
|
modsecur32 = NewLazySystemDLL("secur32.dll")
|
|
modsecur32 = NewLazySystemDLL("secur32.dll")
|
|
|
modnetapi32 = NewLazySystemDLL("netapi32.dll")
|
|
modnetapi32 = NewLazySystemDLL("netapi32.dll")
|
|
|
moduserenv = NewLazySystemDLL("userenv.dll")
|
|
moduserenv = NewLazySystemDLL("userenv.dll")
|
|
|
|
|
+ modwtsapi32 = NewLazySystemDLL("wtsapi32.dll")
|
|
|
|
|
|
|
|
procRegisterEventSourceW = modadvapi32.NewProc("RegisterEventSourceW")
|
|
procRegisterEventSourceW = modadvapi32.NewProc("RegisterEventSourceW")
|
|
|
procDeregisterEventSource = modadvapi32.NewProc("DeregisterEventSource")
|
|
procDeregisterEventSource = modadvapi32.NewProc("DeregisterEventSource")
|
|
@@ -269,6 +270,9 @@ var (
|
|
|
procDuplicateTokenEx = modadvapi32.NewProc("DuplicateTokenEx")
|
|
procDuplicateTokenEx = modadvapi32.NewProc("DuplicateTokenEx")
|
|
|
procGetUserProfileDirectoryW = moduserenv.NewProc("GetUserProfileDirectoryW")
|
|
procGetUserProfileDirectoryW = moduserenv.NewProc("GetUserProfileDirectoryW")
|
|
|
procGetSystemDirectoryW = modkernel32.NewProc("GetSystemDirectoryW")
|
|
procGetSystemDirectoryW = modkernel32.NewProc("GetSystemDirectoryW")
|
|
|
|
|
+ procWTSQueryUserToken = modwtsapi32.NewProc("WTSQueryUserToken")
|
|
|
|
|
+ procWTSEnumerateSessionsW = modwtsapi32.NewProc("WTSEnumerateSessionsW")
|
|
|
|
|
+ procWTSFreeMemory = modwtsapi32.NewProc("WTSFreeMemory")
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
func RegisterEventSource(uncServerName *uint16, sourceName *uint16) (handle Handle, err error) {
|
|
func RegisterEventSource(uncServerName *uint16, sourceName *uint16) (handle Handle, err error) {
|
|
@@ -2943,3 +2947,32 @@ func getSystemDirectory(dir *uint16, dirLen uint32) (len uint32, err error) {
|
|
|
}
|
|
}
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+func WTSQueryUserToken(session uint32, token *Token) (err error) {
|
|
|
|
|
+ r1, _, e1 := syscall.Syscall(procWTSQueryUserToken.Addr(), 2, uintptr(session), uintptr(unsafe.Pointer(token)), 0)
|
|
|
|
|
+ if r1 == 0 {
|
|
|
|
|
+ if e1 != 0 {
|
|
|
|
|
+ err = errnoErr(e1)
|
|
|
|
|
+ } else {
|
|
|
|
|
+ err = syscall.EINVAL
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ return
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+func WTSEnumerateSessions(handle Handle, reserved uint32, version uint32, sessions **WTS_SESSION_INFO, count *uint32) (err error) {
|
|
|
|
|
+ r1, _, e1 := syscall.Syscall6(procWTSEnumerateSessionsW.Addr(), 5, uintptr(handle), uintptr(reserved), uintptr(version), uintptr(unsafe.Pointer(sessions)), uintptr(unsafe.Pointer(count)), 0)
|
|
|
|
|
+ if r1 == 0 {
|
|
|
|
|
+ if e1 != 0 {
|
|
|
|
|
+ err = errnoErr(e1)
|
|
|
|
|
+ } else {
|
|
|
|
|
+ err = syscall.EINVAL
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ return
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+func WTSFreeMemory(ptr uintptr) {
|
|
|
|
|
+ syscall.Syscall(procWTSFreeMemory.Addr(), 1, uintptr(ptr), 0, 0)
|
|
|
|
|
+ return
|
|
|
|
|
+}
|