winutil

package
v1.44.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 5, 2024 License: BSD-3-Clause Imports: 3 Imported by: 10

Documentation

Overview

Package winutil contains misc Windows/Win32 helper functions.

Index

Constants

View Source
const (
	IPv4TCPIPBase RegistryPath = `SYSTEM\CurrentControlSet\Services\Tcpip\Parameters`
	IPv6TCPIPBase RegistryPath = `SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters`
	NetBTBase     RegistryPath = `SYSTEM\CurrentControlSet\Services\NetBT\Parameters`

	IPv4TCPIPInterfacePrefix RegistryPathPrefix = `SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\`
	IPv6TCPIPInterfacePrefix RegistryPathPrefix = `SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters\Interfaces\`
	NetBTInterfacePrefix     RegistryPathPrefix = `SYSTEM\CurrentControlSet\Services\NetBT\Parameters\Interfaces\Tcpip_`
)
View Source
const RegBase = regBase

RegBase is the registry path inside HKEY_LOCAL_MACHINE where registry settings are stored. This constant is a non-empty string only when GOOS=windows.

Variables

View Source
var ErrKeyWaitTimeout = errors.New("timeout waiting for registry key")

ErrKeyWaitTimeout is returned by OpenKeyWait when calls timeout.

View Source
var ErrNoShell = errors.New("no Shell process is present")

ErrNoShell is returned when the shell process is not found.

Functions

func CreateAppMutex added in v1.22.0

func CreateAppMutex(name string) (windows.Handle, error)

CreateAppMutex creates a named Windows mutex, returning nil if the mutex is created successfully or an error if the mutex already exists or could not be created for some other reason.

func DeleteRegValue added in v1.26.0

func DeleteRegValue(name string) error

DeleteRegValue removes a registry value in the local machine path.

func EnableCurrentThreadPrivilege added in v1.22.0

func EnableCurrentThreadPrivilege(name string) error

EnableCurrentThreadPrivilege enables the named privilege in the current thread access token.

func GetDesktopPID

func GetDesktopPID() (uint32, error)

GetDesktopPID searches the PID of the process that's running the currently active desktop. Returns ErrNoShell if the shell is not present. Usually the PID will be for explorer.exe.

func GetPolicyInteger added in v1.22.0

func GetPolicyInteger(name string, defval uint64) uint64

GetPolicyInteger looks up a registry value in the local machine's path for system policies, or returns the given default if it can't. Use this function to read values that may be set by sysadmins via the MSI installer or via GPO. For registry settings that you do *not* want to be visible to sysadmin tools, use GetRegInteger instead.

This function will only work on GOOS=windows. Trying to run it on any other OS will always return the default value.

func GetPolicyString added in v1.22.0

func GetPolicyString(name, defval string) string

GetPolicyString looks up a registry value in the local machine's path for system policies, or returns the given default if it can't. Use this function to read values that may be set by sysadmins via the MSI installer or via GPO. For registry settings that you do *not* want to be visible to sysadmin tools, use GetRegString instead.

This function will only work on GOOS=windows. Trying to run it on any other OS will always return the default value.

func GetRegInteger added in v1.16.0

func GetRegInteger(name string, defval uint64) uint64

GetRegInteger looks up a registry path in the local machine path, or returns the given default if it can't.

This function will only work on GOOS=windows. Trying to run it on any other OS will always return the default value.

func GetRegString added in v1.8.0

func GetRegString(name, defval string) string

GetRegString looks up a registry path in the local machine path, or returns the given default if it can't.

This function will only work on GOOS=windows. Trying to run it on any other OS will always return the default value.

func GetRegStrings added in v1.26.0

func GetRegStrings(name string, defval []string) []string

GetRegStrings looks up a registry value in the local machine path, or returns the given default if it can't.

func IsCurrentProcessElevated added in v1.26.0

func IsCurrentProcessElevated() bool

IsCurrentProcessElevated returns true when the current process is running with an elevated token, implying Administrator access.

func IsSIDValidPrincipal added in v1.22.0

func IsSIDValidPrincipal(uid string) bool

IsSIDValidPrincipal determines whether the SID contained in uid represents a type that is a valid security principal under Windows. This check helps us work around a bug in the standard library's Windows implementation of LookupId in os/user. See https://github.com/tailscale/tailscale/issues/869

This function will only work on GOOS=windows. Trying to run it on any other OS will always return false.

func IsTokenLimited added in v1.44.3

func IsTokenLimited(token windows.Token) (bool, error)

IsTokenLimited returns whether token is a limited UAC token.

func LogSupportInfo added in v1.44.0

func LogSupportInfo(logf logger.Logf)

LogSupportInfo obtains information useful for troubleshooting and support, and writes it to the log as a JSON-encoded object.

func LogSvcState added in v1.32.0

func LogSvcState(logf logger.Logf, rootSvcName string)

LogSvcState obtains the state of the Windows service named rootSvcName and all of its dependencies, and then emits that state to logf.

func LookupPseudoUser added in v1.34.0

func LookupPseudoUser(uid string) (*user.User, error)

LookupPseudoUser attempts to resolve the user specified by uid by checking against well-known pseudo-users on Windows. This is a temporary workaround until https://github.com/golang/go/issues/49509 is resolved and shipped.

This function will only work on GOOS=windows. Trying to run it on any other OS will always return an error.

func OpenKeyWait added in v1.30.0

func OpenKeyWait(k registry.Key, path RegistryPath, access uint32) (registry.Key, error)

OpenKeyWait opens a registry key, waiting for it to appear if necessary. It returns the opened key, or ErrKeyWaitTimeout if the key does not appear within 20s. The caller must call Close on the returned key.

func SetRegStrings added in v1.26.0

func SetRegStrings(name string, values []string) error

SetRegStrings sets a MULTI_SZ value in the in the local machine path to the strings specified by values.

func StartProcessAsChild added in v1.22.0

func StartProcessAsChild(parentPID uint32, exePath string, extraEnv []string) error

StartProcessAsChild starts exePath process as a child of parentPID. StartProcessAsChild copies parentPID's environment variables into the new process, along with any optional environment variables in extraEnv.

func StartProcessAsCurrentGUIUser added in v1.22.0

func StartProcessAsCurrentGUIUser(exePath string, extraEnv []string) error

StartProcessAsCurrentGUIUser is like StartProcessAsChild, but if finds current logged in user desktop process (normally explorer.exe), and passes found PID to StartProcessAsChild.

func WTSGetActiveConsoleSessionId added in v1.12.0

func WTSGetActiveConsoleSessionId() uint32

TODO(crawshaw): replace with x/sys/windows... one day. https://go-review.googlesource.com/c/sys/+/331909

Types

type RegistryPath added in v1.30.0

type RegistryPath string

RegistryPath represents a path inside a root registry.Key.

type RegistryPathPrefix added in v1.30.0

type RegistryPathPrefix string

RegistryPathPrefix specifies a RegistryPath prefix that must be suffixed with another RegistryPath to make a valid RegistryPath.

func (RegistryPathPrefix) WithSuffix added in v1.30.0

func (p RegistryPathPrefix) WithSuffix(suf string) RegistryPath

WithSuffix returns a RegistryPath with the given suffix appended.

type UserSIDs added in v1.26.0

type UserSIDs struct {
	User         *windows.SID
	PrimaryGroup *windows.SID
}

UserSIDs contains the SIDs for a Windows NT token object's associated user as well as its primary group.

func GetCurrentUserSIDs added in v1.26.0

func GetCurrentUserSIDs() (*UserSIDs, error)

GetCurrentUserSIDs returns a UserSIDs struct containing SIDs for the current process' user and primary group.

Directories

Path Synopsis
Package policy contains higher-level abstractions for accessing Windows enterprise policies.
Package policy contains higher-level abstractions for accessing Windows enterprise policies.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL