mirror of
				https://gitea.com/Lydanne/buildx.git
				synced 2025-11-01 00:23:56 +08:00 
			
		
		
		
	Bump docker/docker and containerd/console
Signed-off-by: ulyssessouza <ulyssessouza@gmail.com>
This commit is contained in:
		
							
								
								
									
										13
									
								
								vendor/golang.org/x/sys/windows/asm_windows_386.s
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										13
									
								
								vendor/golang.org/x/sys/windows/asm_windows_386.s
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,13 +0,0 @@ | ||||
| // Copyright 2009 The Go Authors. All rights reserved. | ||||
| // Use of this source code is governed by a BSD-style | ||||
| // license that can be found in the LICENSE file. | ||||
|  | ||||
| // | ||||
| // System calls for 386, Windows are implemented in runtime/syscall_windows.goc | ||||
| // | ||||
|  | ||||
| TEXT ·getprocaddress(SB), 7, $0-16 | ||||
| 	JMP	syscall·getprocaddress(SB) | ||||
|  | ||||
| TEXT ·loadlibrary(SB), 7, $0-12 | ||||
| 	JMP	syscall·loadlibrary(SB) | ||||
							
								
								
									
										13
									
								
								vendor/golang.org/x/sys/windows/asm_windows_amd64.s
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										13
									
								
								vendor/golang.org/x/sys/windows/asm_windows_amd64.s
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,13 +0,0 @@ | ||||
| // Copyright 2009 The Go Authors. All rights reserved. | ||||
| // Use of this source code is governed by a BSD-style | ||||
| // license that can be found in the LICENSE file. | ||||
|  | ||||
| // | ||||
| // System calls for amd64, Windows are implemented in runtime/syscall_windows.goc | ||||
| // | ||||
|  | ||||
| TEXT ·getprocaddress(SB), 7, $0-32 | ||||
| 	JMP	syscall·getprocaddress(SB) | ||||
|  | ||||
| TEXT ·loadlibrary(SB), 7, $0-24 | ||||
| 	JMP	syscall·loadlibrary(SB) | ||||
							
								
								
									
										11
									
								
								vendor/golang.org/x/sys/windows/asm_windows_arm.s
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										11
									
								
								vendor/golang.org/x/sys/windows/asm_windows_arm.s
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,11 +0,0 @@ | ||||
| // Copyright 2018 The Go Authors. All rights reserved. | ||||
| // Use of this source code is governed by a BSD-style | ||||
| // license that can be found in the LICENSE file. | ||||
|  | ||||
| #include "textflag.h" | ||||
|  | ||||
| TEXT ·getprocaddress(SB),NOSPLIT,$0 | ||||
| 	B	syscall·getprocaddress(SB) | ||||
|  | ||||
| TEXT ·loadlibrary(SB),NOSPLIT,$0 | ||||
| 	B	syscall·loadlibrary(SB) | ||||
							
								
								
									
										22
									
								
								vendor/golang.org/x/sys/windows/dll_windows.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										22
									
								
								vendor/golang.org/x/sys/windows/dll_windows.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -11,6 +11,18 @@ import ( | ||||
| 	"unsafe" | ||||
| ) | ||||
|  | ||||
| // We need to use LoadLibrary and GetProcAddress from the Go runtime, because | ||||
| // the these symbols are loaded by the system linker and are required to | ||||
| // dynamically load additional symbols. Note that in the Go runtime, these | ||||
| // return syscall.Handle and syscall.Errno, but these are the same, in fact, | ||||
| // as windows.Handle and windows.Errno, and we intend to keep these the same. | ||||
|  | ||||
| //go:linkname syscall_loadlibrary syscall.loadlibrary | ||||
| func syscall_loadlibrary(filename *uint16) (handle Handle, err Errno) | ||||
|  | ||||
| //go:linkname syscall_getprocaddress syscall.getprocaddress | ||||
| func syscall_getprocaddress(handle Handle, procname *uint8) (proc uintptr, err Errno) | ||||
|  | ||||
| // DLLError describes reasons for DLL load failures. | ||||
| type DLLError struct { | ||||
| 	Err     error | ||||
| @@ -20,10 +32,6 @@ type DLLError struct { | ||||
|  | ||||
| func (e *DLLError) Error() string { return e.Msg } | ||||
|  | ||||
| // Implemented in runtime/syscall_windows.goc; we provide jumps to them in our assembly file. | ||||
| func loadlibrary(filename *uint16) (handle uintptr, err syscall.Errno) | ||||
| func getprocaddress(handle uintptr, procname *uint8) (proc uintptr, err syscall.Errno) | ||||
|  | ||||
| // A DLL implements access to a single DLL. | ||||
| type DLL struct { | ||||
| 	Name   string | ||||
| @@ -40,7 +48,7 @@ func LoadDLL(name string) (dll *DLL, err error) { | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	h, e := loadlibrary(namep) | ||||
| 	h, e := syscall_loadlibrary(namep) | ||||
| 	if e != 0 { | ||||
| 		return nil, &DLLError{ | ||||
| 			Err:     e, | ||||
| @@ -50,7 +58,7 @@ func LoadDLL(name string) (dll *DLL, err error) { | ||||
| 	} | ||||
| 	d := &DLL{ | ||||
| 		Name:   name, | ||||
| 		Handle: Handle(h), | ||||
| 		Handle: h, | ||||
| 	} | ||||
| 	return d, nil | ||||
| } | ||||
| @@ -71,7 +79,7 @@ func (d *DLL) FindProc(name string) (proc *Proc, err error) { | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	a, e := getprocaddress(uintptr(d.Handle), namep) | ||||
| 	a, e := syscall_getprocaddress(d.Handle, namep) | ||||
| 	if e != 0 { | ||||
| 		return nil, &DLLError{ | ||||
| 			Err:     e, | ||||
|   | ||||
							
								
								
									
										8
									
								
								vendor/golang.org/x/sys/windows/empty.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								vendor/golang.org/x/sys/windows/empty.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | ||||
| // Copyright 2019 The Go Authors. All rights reserved. | ||||
| // Use of this source code is governed by a BSD-style | ||||
| // license that can be found in the LICENSE file. | ||||
|  | ||||
| // +build !go1.12 | ||||
|  | ||||
| // This file is here to allow bodyless functions with go:linkname for Go 1.11 | ||||
| // and earlier (see https://golang.org/issue/23311). | ||||
							
								
								
									
										34
									
								
								vendor/golang.org/x/sys/windows/env_windows.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										34
									
								
								vendor/golang.org/x/sys/windows/env_windows.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -6,7 +6,11 @@ | ||||
|  | ||||
| package windows | ||||
|  | ||||
| import "syscall" | ||||
| import ( | ||||
| 	"syscall" | ||||
| 	"unicode/utf16" | ||||
| 	"unsafe" | ||||
| ) | ||||
|  | ||||
| func Getenv(key string) (value string, found bool) { | ||||
| 	return syscall.Getenv(key) | ||||
| @@ -24,6 +28,34 @@ func Environ() []string { | ||||
| 	return syscall.Environ() | ||||
| } | ||||
|  | ||||
| // Returns a default environment associated with the token, rather than the current | ||||
| // process. If inheritExisting is true, then this environment also inherits the | ||||
| // environment of the current process. | ||||
| func (token Token) Environ(inheritExisting bool) (env []string, err error) { | ||||
| 	var block *uint16 | ||||
| 	err = CreateEnvironmentBlock(&block, token, inheritExisting) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	defer DestroyEnvironmentBlock(block) | ||||
| 	blockp := uintptr(unsafe.Pointer(block)) | ||||
| 	for { | ||||
| 		entry := (*[(1 << 30) - 1]uint16)(unsafe.Pointer(blockp))[:] | ||||
| 		for i, v := range entry { | ||||
| 			if v == 0 { | ||||
| 				entry = entry[:i] | ||||
| 				break | ||||
| 			} | ||||
| 		} | ||||
| 		if len(entry) == 0 { | ||||
| 			break | ||||
| 		} | ||||
| 		env = append(env, string(utf16.Decode(entry))) | ||||
| 		blockp += 2 * (uintptr(len(entry)) + 1) | ||||
| 	} | ||||
| 	return env, nil | ||||
| } | ||||
|  | ||||
| func Unsetenv(key string) error { | ||||
| 	return syscall.Unsetenv(key) | ||||
| } | ||||
|   | ||||
							
								
								
									
										63
									
								
								vendor/golang.org/x/sys/windows/mkerrors.bash
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								vendor/golang.org/x/sys/windows/mkerrors.bash
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,63 @@ | ||||
| #!/bin/bash | ||||
|  | ||||
| # Copyright 2019 The Go Authors. All rights reserved. | ||||
| # Use of this source code is governed by a BSD-style | ||||
| # license that can be found in the LICENSE file. | ||||
|  | ||||
| set -e | ||||
| shopt -s nullglob | ||||
|  | ||||
| winerror="$(printf '%s\n' "/mnt/c/Program Files (x86)/Windows Kits/"/*/Include/*/shared/winerror.h | sort -Vr | head -n 1)" | ||||
| [[ -n $winerror ]] || { echo "Unable to find winerror.h" >&2; exit 1; } | ||||
|  | ||||
| declare -A errors | ||||
|  | ||||
| { | ||||
| 	echo "// Code generated by 'mkerrors.bash'; DO NOT EDIT." | ||||
| 	echo | ||||
| 	echo "package windows" | ||||
| 	echo "import \"syscall\"" | ||||
| 	echo "const (" | ||||
|  | ||||
| 	while read -r line; do | ||||
| 		unset vtype | ||||
| 		if [[ $line =~ ^#define\ +([A-Z0-9_]+k?)\ +([A-Z0-9_]+\()?([A-Z][A-Z0-9_]+k?)\)? ]]; then | ||||
| 			key="${BASH_REMATCH[1]}" | ||||
| 			value="${BASH_REMATCH[3]}" | ||||
| 		elif [[ $line =~ ^#define\ +([A-Z0-9_]+k?)\ +([A-Z0-9_]+\()?((0x)?[0-9A-Fa-f]+)L?\)? ]]; then | ||||
| 			key="${BASH_REMATCH[1]}" | ||||
| 			value="${BASH_REMATCH[3]}" | ||||
| 			vtype="${BASH_REMATCH[2]}" | ||||
| 		elif [[ $line =~ ^#define\ +([A-Z0-9_]+k?)\ +\(\(([A-Z]+)\)((0x)?[0-9A-Fa-f]+)L?\) ]]; then | ||||
| 			key="${BASH_REMATCH[1]}" | ||||
| 			value="${BASH_REMATCH[3]}" | ||||
| 			vtype="${BASH_REMATCH[2]}" | ||||
| 		else | ||||
| 			continue | ||||
| 		fi | ||||
| 		[[ -n $key && -n $value ]] || continue | ||||
| 		[[ -z ${errors["$key"]} ]] || continue | ||||
| 		errors["$key"]="$value" | ||||
| 		if [[ -v vtype ]]; then | ||||
| 			if [[ $key == FACILITY_* || $key == NO_ERROR ]]; then | ||||
| 				vtype="" | ||||
| 			elif [[ $vtype == *HANDLE* || $vtype == *HRESULT* ]]; then | ||||
| 				vtype="Handle" | ||||
| 			else | ||||
| 				vtype="syscall.Errno" | ||||
| 			fi | ||||
| 			last_vtype="$vtype" | ||||
| 		else | ||||
| 			vtype="" | ||||
| 			if [[ $last_vtype == Handle && $value == NO_ERROR ]]; then | ||||
| 				value="S_OK" | ||||
| 			elif [[ $last_vtype == syscall.Errno && $value == NO_ERROR ]]; then | ||||
| 				value="ERROR_SUCCESS" | ||||
| 			fi | ||||
| 		fi | ||||
|  | ||||
| 		echo "$key $vtype = $value" | ||||
| 	done < "$winerror" | ||||
|  | ||||
| 	echo ")" | ||||
| } | gofmt > "zerrors_windows.go" | ||||
							
								
								
									
										27
									
								
								vendor/golang.org/x/sys/windows/mkknownfolderids.bash
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								vendor/golang.org/x/sys/windows/mkknownfolderids.bash
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,27 @@ | ||||
| #!/bin/bash | ||||
|  | ||||
| # Copyright 2019 The Go Authors. All rights reserved. | ||||
| # Use of this source code is governed by a BSD-style | ||||
| # license that can be found in the LICENSE file. | ||||
|  | ||||
| set -e | ||||
| shopt -s nullglob | ||||
|  | ||||
| knownfolders="$(printf '%s\n' "/mnt/c/Program Files (x86)/Windows Kits/"/*/Include/*/um/KnownFolders.h | sort -Vr | head -n 1)" | ||||
| [[ -n $knownfolders ]] || { echo "Unable to find KnownFolders.h" >&2; exit 1; } | ||||
|  | ||||
| { | ||||
| 	echo "// Code generated by 'mkknownfolderids.bash'; DO NOT EDIT." | ||||
| 	echo | ||||
| 	echo "package windows" | ||||
| 	echo "type KNOWNFOLDERID GUID" | ||||
| 	echo "var (" | ||||
| 	while read -r line; do | ||||
| 		[[ $line =~ DEFINE_KNOWN_FOLDER\((FOLDERID_[^,]+),[\t\ ]*(0x[^,]+),[\t\ ]*(0x[^,]+),[\t\ ]*(0x[^,]+),[\t\ ]*(0x[^,]+),[\t\ ]*(0x[^,]+),[\t\ ]*(0x[^,]+),[\t\ ]*(0x[^,]+),[\t\ ]*(0x[^,]+),[\t\ ]*(0x[^,]+),[\t\ ]*(0x[^,]+),[\t\ ]*(0x[^,]+)\) ]] || continue | ||||
| 		printf "%s = &KNOWNFOLDERID{0x%08x, 0x%04x, 0x%04x, [8]byte{0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x}}\n" \ | ||||
| 			"${BASH_REMATCH[1]}" $(( "${BASH_REMATCH[2]}" )) $(( "${BASH_REMATCH[3]}" )) $(( "${BASH_REMATCH[4]}" )) \ | ||||
| 			$(( "${BASH_REMATCH[5]}" )) $(( "${BASH_REMATCH[6]}" )) $(( "${BASH_REMATCH[7]}" )) $(( "${BASH_REMATCH[8]}" )) \ | ||||
| 			$(( "${BASH_REMATCH[9]}" )) $(( "${BASH_REMATCH[10]}" )) $(( "${BASH_REMATCH[11]}" )) $(( "${BASH_REMATCH[12]}" )) | ||||
| 	done < "$knownfolders" | ||||
| 	echo ")" | ||||
| } | gofmt > "zknownfolderids_windows.go" | ||||
							
								
								
									
										4
									
								
								vendor/golang.org/x/sys/windows/mksyscall.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/golang.org/x/sys/windows/mksyscall.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -2,6 +2,8 @@ | ||||
| // Use of this source code is governed by a BSD-style | ||||
| // license that can be found in the LICENSE file. | ||||
|  | ||||
| // +build generate | ||||
|  | ||||
| package windows | ||||
|  | ||||
| //go:generate go run $GOROOT/src/syscall/mksyscall_windows.go -output zsyscall_windows.go eventlog.go service.go syscall_windows.go security_windows.go | ||||
| //go:generate go run golang.org/x/sys/windows/mkwinsyscall -output zsyscall_windows.go eventlog.go service.go syscall_windows.go security_windows.go | ||||
|   | ||||
							
								
								
									
										827
									
								
								vendor/golang.org/x/sys/windows/security_windows.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										827
									
								
								vendor/golang.org/x/sys/windows/security_windows.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -9,14 +9,6 @@ import ( | ||||
| 	"unsafe" | ||||
| ) | ||||
|  | ||||
| const ( | ||||
| 	STANDARD_RIGHTS_REQUIRED = 0xf0000 | ||||
| 	STANDARD_RIGHTS_READ     = 0x20000 | ||||
| 	STANDARD_RIGHTS_WRITE    = 0x20000 | ||||
| 	STANDARD_RIGHTS_EXECUTE  = 0x20000 | ||||
| 	STANDARD_RIGHTS_ALL      = 0x1F0000 | ||||
| ) | ||||
|  | ||||
| const ( | ||||
| 	NameUnknown          = 0 | ||||
| 	NameFullyQualifiedDN = 1 | ||||
| @@ -170,15 +162,20 @@ const ( | ||||
| //sys	CopySid(destSidLen uint32, destSid *SID, srcSid *SID) (err error) = advapi32.CopySid | ||||
| //sys	AllocateAndInitializeSid(identAuth *SidIdentifierAuthority, subAuth byte, subAuth0 uint32, subAuth1 uint32, subAuth2 uint32, subAuth3 uint32, subAuth4 uint32, subAuth5 uint32, subAuth6 uint32, subAuth7 uint32, sid **SID) (err error) = advapi32.AllocateAndInitializeSid | ||||
| //sys	createWellKnownSid(sidType WELL_KNOWN_SID_TYPE, domainSid *SID, sid *SID, sizeSid *uint32) (err error) = advapi32.CreateWellKnownSid | ||||
| //sys	isWellKnownSid(sid *SID, sidType WELL_KNOWN_SID_TYPE) (isWellKnown bool) = advapi32.IsWellKnownSid | ||||
| //sys	FreeSid(sid *SID) (err error) [failretval!=0] = advapi32.FreeSid | ||||
| //sys	EqualSid(sid1 *SID, sid2 *SID) (isEqual bool) = advapi32.EqualSid | ||||
| //sys	getSidIdentifierAuthority(sid *SID) (authority *SidIdentifierAuthority) = advapi32.GetSidIdentifierAuthority | ||||
| //sys	getSidSubAuthorityCount(sid *SID) (count *uint8) = advapi32.GetSidSubAuthorityCount | ||||
| //sys	getSidSubAuthority(sid *SID, index uint32) (subAuthority *uint32) = advapi32.GetSidSubAuthority | ||||
| //sys	isValidSid(sid *SID) (isValid bool) = advapi32.IsValidSid | ||||
|  | ||||
| // The security identifier (SID) structure is a variable-length | ||||
| // structure used to uniquely identify users or groups. | ||||
| type SID struct{} | ||||
|  | ||||
| // StringToSid converts a string-format security identifier | ||||
| // sid into a valid, functional sid. | ||||
| // SID into a valid, functional SID. | ||||
| func StringToSid(s string) (*SID, error) { | ||||
| 	var sid *SID | ||||
| 	p, e := UTF16PtrFromString(s) | ||||
| @@ -193,7 +190,7 @@ func StringToSid(s string) (*SID, error) { | ||||
| 	return sid.Copy() | ||||
| } | ||||
|  | ||||
| // LookupSID retrieves a security identifier sid for the account | ||||
| // LookupSID retrieves a security identifier SID for the account | ||||
| // and the name of the domain on which the account was found. | ||||
| // System specify target computer to search. | ||||
| func LookupSID(system, account string) (sid *SID, domain string, accType uint32, err error) { | ||||
| @@ -230,24 +227,23 @@ func LookupSID(system, account string) (sid *SID, domain string, accType uint32, | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // String converts sid to a string format | ||||
| // suitable for display, storage, or transmission. | ||||
| func (sid *SID) String() (string, error) { | ||||
| // String converts SID to a string format suitable for display, storage, or transmission. | ||||
| func (sid *SID) String() string { | ||||
| 	var s *uint16 | ||||
| 	e := ConvertSidToStringSid(sid, &s) | ||||
| 	if e != nil { | ||||
| 		return "", e | ||||
| 		return "" | ||||
| 	} | ||||
| 	defer LocalFree((Handle)(unsafe.Pointer(s))) | ||||
| 	return UTF16ToString((*[256]uint16)(unsafe.Pointer(s))[:]), nil | ||||
| 	return UTF16ToString((*[256]uint16)(unsafe.Pointer(s))[:]) | ||||
| } | ||||
|  | ||||
| // Len returns the length, in bytes, of a valid security identifier sid. | ||||
| // Len returns the length, in bytes, of a valid security identifier SID. | ||||
| func (sid *SID) Len() int { | ||||
| 	return int(GetLengthSid(sid)) | ||||
| } | ||||
|  | ||||
| // Copy creates a duplicate of security identifier sid. | ||||
| // Copy creates a duplicate of security identifier SID. | ||||
| func (sid *SID) Copy() (*SID, error) { | ||||
| 	b := make([]byte, sid.Len()) | ||||
| 	sid2 := (*SID)(unsafe.Pointer(&b[0])) | ||||
| @@ -258,8 +254,42 @@ func (sid *SID) Copy() (*SID, error) { | ||||
| 	return sid2, nil | ||||
| } | ||||
|  | ||||
| // LookupAccount retrieves the name of the account for this sid | ||||
| // and the name of the first domain on which this sid is found. | ||||
| // IdentifierAuthority returns the identifier authority of the SID. | ||||
| func (sid *SID) IdentifierAuthority() SidIdentifierAuthority { | ||||
| 	return *getSidIdentifierAuthority(sid) | ||||
| } | ||||
|  | ||||
| // SubAuthorityCount returns the number of sub-authorities in the SID. | ||||
| func (sid *SID) SubAuthorityCount() uint8 { | ||||
| 	return *getSidSubAuthorityCount(sid) | ||||
| } | ||||
|  | ||||
| // SubAuthority returns the sub-authority of the SID as specified by | ||||
| // the index, which must be less than sid.SubAuthorityCount(). | ||||
| func (sid *SID) SubAuthority(idx uint32) uint32 { | ||||
| 	if idx >= uint32(sid.SubAuthorityCount()) { | ||||
| 		panic("sub-authority index out of range") | ||||
| 	} | ||||
| 	return *getSidSubAuthority(sid, idx) | ||||
| } | ||||
|  | ||||
| // IsValid returns whether the SID has a valid revision and length. | ||||
| func (sid *SID) IsValid() bool { | ||||
| 	return isValidSid(sid) | ||||
| } | ||||
|  | ||||
| // Equals compares two SIDs for equality. | ||||
| func (sid *SID) Equals(sid2 *SID) bool { | ||||
| 	return EqualSid(sid, sid2) | ||||
| } | ||||
|  | ||||
| // IsWellKnown determines whether the SID matches the well-known sidType. | ||||
| func (sid *SID) IsWellKnown(sidType WELL_KNOWN_SID_TYPE) bool { | ||||
| 	return isWellKnownSid(sid, sidType) | ||||
| } | ||||
|  | ||||
| // LookupAccount retrieves the name of the account for this SID | ||||
| // and the name of the first domain on which this SID is found. | ||||
| // System specify target computer to search for. | ||||
| func (sid *SID) LookupAccount(system string) (account, domain string, accType uint32, err error) { | ||||
| 	var sys *uint16 | ||||
| @@ -287,7 +317,7 @@ func (sid *SID) LookupAccount(system string) (account, domain string, accType ui | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // Various types of pre-specified sids that can be synthesized at runtime. | ||||
| // Various types of pre-specified SIDs that can be synthesized and compared at runtime. | ||||
| type WELL_KNOWN_SID_TYPE uint32 | ||||
|  | ||||
| const ( | ||||
| @@ -413,13 +443,13 @@ const ( | ||||
| 	WinBuiltinDeviceOwnersSid                     = 119 | ||||
| ) | ||||
|  | ||||
| // Creates a sid for a well-known predefined alias, generally using the constants of the form | ||||
| // Creates a SID for a well-known predefined alias, generally using the constants of the form | ||||
| // Win*Sid, for the local machine. | ||||
| func CreateWellKnownSid(sidType WELL_KNOWN_SID_TYPE) (*SID, error) { | ||||
| 	return CreateWellKnownDomainSid(sidType, nil) | ||||
| } | ||||
|  | ||||
| // Creates a sid for a well-known predefined alias, generally using the constants of the form | ||||
| // Creates a SID for a well-known predefined alias, generally using the constants of the form | ||||
| // Win*Sid, for the domain specified by the domainSid parameter. | ||||
| func CreateWellKnownDomainSid(sidType WELL_KNOWN_SID_TYPE, domainSid *SID) (*SID, error) { | ||||
| 	n := uint32(50) | ||||
| @@ -502,6 +532,53 @@ const ( | ||||
| 	MaxTokenInfoClass | ||||
| ) | ||||
|  | ||||
| // Group attributes inside of Tokengroups.Groups[i].Attributes | ||||
| const ( | ||||
| 	SE_GROUP_MANDATORY          = 0x00000001 | ||||
| 	SE_GROUP_ENABLED_BY_DEFAULT = 0x00000002 | ||||
| 	SE_GROUP_ENABLED            = 0x00000004 | ||||
| 	SE_GROUP_OWNER              = 0x00000008 | ||||
| 	SE_GROUP_USE_FOR_DENY_ONLY  = 0x00000010 | ||||
| 	SE_GROUP_INTEGRITY          = 0x00000020 | ||||
| 	SE_GROUP_INTEGRITY_ENABLED  = 0x00000040 | ||||
| 	SE_GROUP_LOGON_ID           = 0xC0000000 | ||||
| 	SE_GROUP_RESOURCE           = 0x20000000 | ||||
| 	SE_GROUP_VALID_ATTRIBUTES   = SE_GROUP_MANDATORY | SE_GROUP_ENABLED_BY_DEFAULT | SE_GROUP_ENABLED | SE_GROUP_OWNER | SE_GROUP_USE_FOR_DENY_ONLY | SE_GROUP_LOGON_ID | SE_GROUP_RESOURCE | SE_GROUP_INTEGRITY | SE_GROUP_INTEGRITY_ENABLED | ||||
| ) | ||||
|  | ||||
| // Privilege attributes | ||||
| const ( | ||||
| 	SE_PRIVILEGE_ENABLED_BY_DEFAULT = 0x00000001 | ||||
| 	SE_PRIVILEGE_ENABLED            = 0x00000002 | ||||
| 	SE_PRIVILEGE_REMOVED            = 0x00000004 | ||||
| 	SE_PRIVILEGE_USED_FOR_ACCESS    = 0x80000000 | ||||
| 	SE_PRIVILEGE_VALID_ATTRIBUTES   = SE_PRIVILEGE_ENABLED_BY_DEFAULT | SE_PRIVILEGE_ENABLED | SE_PRIVILEGE_REMOVED | SE_PRIVILEGE_USED_FOR_ACCESS | ||||
| ) | ||||
|  | ||||
| // Token types | ||||
| const ( | ||||
| 	TokenPrimary       = 1 | ||||
| 	TokenImpersonation = 2 | ||||
| ) | ||||
|  | ||||
| // Impersonation levels | ||||
| const ( | ||||
| 	SecurityAnonymous      = 0 | ||||
| 	SecurityIdentification = 1 | ||||
| 	SecurityImpersonation  = 2 | ||||
| 	SecurityDelegation     = 3 | ||||
| ) | ||||
|  | ||||
| type LUID struct { | ||||
| 	LowPart  uint32 | ||||
| 	HighPart int32 | ||||
| } | ||||
|  | ||||
| type LUIDAndAttributes struct { | ||||
| 	Luid       LUID | ||||
| 	Attributes uint32 | ||||
| } | ||||
|  | ||||
| type SIDAndAttributes struct { | ||||
| 	Sid        *SID | ||||
| 	Attributes uint32 | ||||
| @@ -517,15 +594,49 @@ type Tokenprimarygroup struct { | ||||
|  | ||||
| type Tokengroups struct { | ||||
| 	GroupCount uint32 | ||||
| 	Groups     [1]SIDAndAttributes | ||||
| 	Groups     [1]SIDAndAttributes // Use AllGroups() for iterating. | ||||
| } | ||||
|  | ||||
| // AllGroups returns a slice that can be used to iterate over the groups in g. | ||||
| func (g *Tokengroups) AllGroups() []SIDAndAttributes { | ||||
| 	return (*[(1 << 28) - 1]SIDAndAttributes)(unsafe.Pointer(&g.Groups[0]))[:g.GroupCount:g.GroupCount] | ||||
| } | ||||
|  | ||||
| type Tokenprivileges struct { | ||||
| 	PrivilegeCount uint32 | ||||
| 	Privileges     [1]LUIDAndAttributes // Use AllPrivileges() for iterating. | ||||
| } | ||||
|  | ||||
| // AllPrivileges returns a slice that can be used to iterate over the privileges in p. | ||||
| func (p *Tokenprivileges) AllPrivileges() []LUIDAndAttributes { | ||||
| 	return (*[(1 << 27) - 1]LUIDAndAttributes)(unsafe.Pointer(&p.Privileges[0]))[:p.PrivilegeCount:p.PrivilegeCount] | ||||
| } | ||||
|  | ||||
| type Tokenmandatorylabel struct { | ||||
| 	Label SIDAndAttributes | ||||
| } | ||||
|  | ||||
| func (tml *Tokenmandatorylabel) Size() uint32 { | ||||
| 	return uint32(unsafe.Sizeof(Tokenmandatorylabel{})) + GetLengthSid(tml.Label.Sid) | ||||
| } | ||||
|  | ||||
| // Authorization Functions | ||||
| //sys checkTokenMembership(tokenHandle Token, sidToCheck *SID, isMember *int32) (err error) = advapi32.CheckTokenMembership | ||||
| //sys	OpenProcessToken(h Handle, access uint32, token *Token) (err error) = advapi32.OpenProcessToken | ||||
| //sys	GetTokenInformation(t Token, infoClass uint32, info *byte, infoLen uint32, returnedLen *uint32) (err error) = advapi32.GetTokenInformation | ||||
| //sys	checkTokenMembership(tokenHandle Token, sidToCheck *SID, isMember *int32) (err error) = advapi32.CheckTokenMembership | ||||
| //sys	OpenProcessToken(process Handle, access uint32, token *Token) (err error) = advapi32.OpenProcessToken | ||||
| //sys	OpenThreadToken(thread Handle, access uint32, openAsSelf bool, token *Token) (err error) = advapi32.OpenThreadToken | ||||
| //sys	ImpersonateSelf(impersonationlevel uint32) (err error) = advapi32.ImpersonateSelf | ||||
| //sys	RevertToSelf() (err error) = advapi32.RevertToSelf | ||||
| //sys	SetThreadToken(thread *Handle, token Token) (err error) = advapi32.SetThreadToken | ||||
| //sys	LookupPrivilegeValue(systemname *uint16, name *uint16, luid *LUID) (err error) = advapi32.LookupPrivilegeValueW | ||||
| //sys	AdjustTokenPrivileges(token Token, disableAllPrivileges bool, newstate *Tokenprivileges, buflen uint32, prevstate *Tokenprivileges, returnlen *uint32) (err error) = advapi32.AdjustTokenPrivileges | ||||
| //sys	AdjustTokenGroups(token Token, resetToDefault bool, newstate *Tokengroups, buflen uint32, prevstate *Tokengroups, returnlen *uint32) (err error) = advapi32.AdjustTokenGroups | ||||
| //sys	GetTokenInformation(token Token, infoClass uint32, info *byte, infoLen uint32, returnedLen *uint32) (err error) = advapi32.GetTokenInformation | ||||
| //sys	SetTokenInformation(token Token, infoClass uint32, info *byte, infoLen uint32) (err error) = advapi32.SetTokenInformation | ||||
| //sys	DuplicateTokenEx(existingToken Token, desiredAccess uint32, tokenAttributes *SecurityAttributes, impersonationLevel uint32, tokenType uint32, newToken *Token) (err error) = advapi32.DuplicateTokenEx | ||||
| //sys	GetUserProfileDirectory(t Token, dir *uint16, dirLen *uint32) (err error) = userenv.GetUserProfileDirectoryW | ||||
| //sys	getSystemDirectory(dir *uint16, dirLen uint32) (len uint32, err error) = kernel32.GetSystemDirectoryW | ||||
| //sys	getWindowsDirectory(dir *uint16, dirLen uint32) (len uint32, err error) = kernel32.GetWindowsDirectoryW | ||||
| //sys	getSystemWindowsDirectory(dir *uint16, dirLen uint32) (len uint32, err error) = kernel32.GetSystemWindowsDirectoryW | ||||
|  | ||||
| // An access token contains the security information for a logon session. | ||||
| // The system creates an access token when a user logs on, and every | ||||
| @@ -536,19 +647,37 @@ type Tokengroups struct { | ||||
| // system-related operations on the local computer. | ||||
| type Token Handle | ||||
|  | ||||
| // OpenCurrentProcessToken opens the access token | ||||
| // associated with current process. | ||||
| // OpenCurrentProcessToken opens an access token associated with current | ||||
| // process with TOKEN_QUERY access. It is a real token that needs to be closed. | ||||
| // | ||||
| // Deprecated: Explicitly call OpenProcessToken(CurrentProcess(), ...) | ||||
| // with the desired access instead, or use GetCurrentProcessToken for a | ||||
| // TOKEN_QUERY token. | ||||
| func OpenCurrentProcessToken() (Token, error) { | ||||
| 	p, e := GetCurrentProcess() | ||||
| 	if e != nil { | ||||
| 		return 0, e | ||||
| 	} | ||||
| 	var t Token | ||||
| 	e = OpenProcessToken(p, TOKEN_QUERY, &t) | ||||
| 	if e != nil { | ||||
| 		return 0, e | ||||
| 	} | ||||
| 	return t, nil | ||||
| 	var token Token | ||||
| 	err := OpenProcessToken(CurrentProcess(), TOKEN_QUERY, &token) | ||||
| 	return token, err | ||||
| } | ||||
|  | ||||
| // GetCurrentProcessToken returns the access token associated with | ||||
| // the current process. It is a pseudo token that does not need | ||||
| // to be closed. | ||||
| func GetCurrentProcessToken() Token { | ||||
| 	return Token(^uintptr(4 - 1)) | ||||
| } | ||||
|  | ||||
| // GetCurrentThreadToken return the access token associated with | ||||
| // the current thread. It is a pseudo token that does not need | ||||
| // to be closed. | ||||
| func GetCurrentThreadToken() Token { | ||||
| 	return Token(^uintptr(5 - 1)) | ||||
| } | ||||
|  | ||||
| // GetCurrentThreadEffectiveToken returns the effective access token | ||||
| // associated with the current thread. It is a pseudo token that does | ||||
| // not need to be closed. | ||||
| func GetCurrentThreadEffectiveToken() Token { | ||||
| 	return Token(^uintptr(6 - 1)) | ||||
| } | ||||
|  | ||||
| // Close releases access to access token. | ||||
| @@ -622,8 +751,30 @@ func (t Token) GetUserProfileDirectory() (string, error) { | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // GetSystemDirectory retrieves path to current location of the system | ||||
| // directory, which is typically, though not always, C:\Windows\System32. | ||||
| // IsElevated returns whether the current token is elevated from a UAC perspective. | ||||
| func (token Token) IsElevated() bool { | ||||
| 	var isElevated uint32 | ||||
| 	var outLen uint32 | ||||
| 	err := GetTokenInformation(token, TokenElevation, (*byte)(unsafe.Pointer(&isElevated)), uint32(unsafe.Sizeof(isElevated)), &outLen) | ||||
| 	if err != nil { | ||||
| 		return false | ||||
| 	} | ||||
| 	return outLen == uint32(unsafe.Sizeof(isElevated)) && isElevated != 0 | ||||
| } | ||||
|  | ||||
| // GetLinkedToken returns the linked token, which may be an elevated UAC token. | ||||
| func (token Token) GetLinkedToken() (Token, error) { | ||||
| 	var linkedToken Token | ||||
| 	var outLen uint32 | ||||
| 	err := GetTokenInformation(token, TokenLinkedToken, (*byte)(unsafe.Pointer(&linkedToken)), uint32(unsafe.Sizeof(linkedToken)), &outLen) | ||||
| 	if err != nil { | ||||
| 		return Token(0), err | ||||
| 	} | ||||
| 	return linkedToken, nil | ||||
| } | ||||
|  | ||||
| // GetSystemDirectory retrieves the path to current location of the system | ||||
| // directory, which is typically, though not always, `C:\Windows\System32`. | ||||
| func GetSystemDirectory() (string, error) { | ||||
| 	n := uint32(MAX_PATH) | ||||
| 	for { | ||||
| @@ -639,6 +790,42 @@ func GetSystemDirectory() (string, error) { | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // GetWindowsDirectory retrieves the path to current location of the Windows | ||||
| // directory, which is typically, though not always, `C:\Windows`. This may | ||||
| // be a private user directory in the case that the application is running | ||||
| // under a terminal server. | ||||
| func GetWindowsDirectory() (string, error) { | ||||
| 	n := uint32(MAX_PATH) | ||||
| 	for { | ||||
| 		b := make([]uint16, n) | ||||
| 		l, e := getWindowsDirectory(&b[0], n) | ||||
| 		if e != nil { | ||||
| 			return "", e | ||||
| 		} | ||||
| 		if l <= n { | ||||
| 			return UTF16ToString(b[:l]), nil | ||||
| 		} | ||||
| 		n = l | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // GetSystemWindowsDirectory retrieves the path to current location of the | ||||
| // Windows directory, which is typically, though not always, `C:\Windows`. | ||||
| func GetSystemWindowsDirectory() (string, error) { | ||||
| 	n := uint32(MAX_PATH) | ||||
| 	for { | ||||
| 		b := make([]uint16, n) | ||||
| 		l, e := getSystemWindowsDirectory(&b[0], n) | ||||
| 		if e != nil { | ||||
| 			return "", e | ||||
| 		} | ||||
| 		if l <= n { | ||||
| 			return UTF16ToString(b[:l]), nil | ||||
| 		} | ||||
| 		n = l | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // IsMember reports whether the access token t is a member of the provided SID. | ||||
| func (t Token) IsMember(sid *SID) (bool, error) { | ||||
| 	var b int32 | ||||
| @@ -647,3 +834,563 @@ func (t Token) IsMember(sid *SID) (bool, error) { | ||||
| 	} | ||||
| 	return b != 0, nil | ||||
| } | ||||
|  | ||||
| const ( | ||||
| 	WTS_CONSOLE_CONNECT        = 0x1 | ||||
| 	WTS_CONSOLE_DISCONNECT     = 0x2 | ||||
| 	WTS_REMOTE_CONNECT         = 0x3 | ||||
| 	WTS_REMOTE_DISCONNECT      = 0x4 | ||||
| 	WTS_SESSION_LOGON          = 0x5 | ||||
| 	WTS_SESSION_LOGOFF         = 0x6 | ||||
| 	WTS_SESSION_LOCK           = 0x7 | ||||
| 	WTS_SESSION_UNLOCK         = 0x8 | ||||
| 	WTS_SESSION_REMOTE_CONTROL = 0x9 | ||||
| 	WTS_SESSION_CREATE         = 0xa | ||||
| 	WTS_SESSION_TERMINATE      = 0xb | ||||
| ) | ||||
|  | ||||
| const ( | ||||
| 	WTSActive       = 0 | ||||
| 	WTSConnected    = 1 | ||||
| 	WTSConnectQuery = 2 | ||||
| 	WTSShadow       = 3 | ||||
| 	WTSDisconnected = 4 | ||||
| 	WTSIdle         = 5 | ||||
| 	WTSListen       = 6 | ||||
| 	WTSReset        = 7 | ||||
| 	WTSDown         = 8 | ||||
| 	WTSInit         = 9 | ||||
| ) | ||||
|  | ||||
| type WTSSESSION_NOTIFICATION struct { | ||||
| 	Size      uint32 | ||||
| 	SessionID uint32 | ||||
| } | ||||
|  | ||||
| type WTS_SESSION_INFO struct { | ||||
| 	SessionID         uint32 | ||||
| 	WindowStationName *uint16 | ||||
| 	State             uint32 | ||||
| } | ||||
|  | ||||
| //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 | ||||
|  | ||||
| type ACL struct { | ||||
| 	aclRevision byte | ||||
| 	sbz1        byte | ||||
| 	aclSize     uint16 | ||||
| 	aceCount    uint16 | ||||
| 	sbz2        uint16 | ||||
| } | ||||
|  | ||||
| type SECURITY_DESCRIPTOR struct { | ||||
| 	revision byte | ||||
| 	sbz1     byte | ||||
| 	control  SECURITY_DESCRIPTOR_CONTROL | ||||
| 	owner    *SID | ||||
| 	group    *SID | ||||
| 	sacl     *ACL | ||||
| 	dacl     *ACL | ||||
| } | ||||
|  | ||||
| type SecurityAttributes struct { | ||||
| 	Length             uint32 | ||||
| 	SecurityDescriptor *SECURITY_DESCRIPTOR | ||||
| 	InheritHandle      uint32 | ||||
| } | ||||
|  | ||||
| type SE_OBJECT_TYPE uint32 | ||||
|  | ||||
| // Constants for type SE_OBJECT_TYPE | ||||
| const ( | ||||
| 	SE_UNKNOWN_OBJECT_TYPE     = 0 | ||||
| 	SE_FILE_OBJECT             = 1 | ||||
| 	SE_SERVICE                 = 2 | ||||
| 	SE_PRINTER                 = 3 | ||||
| 	SE_REGISTRY_KEY            = 4 | ||||
| 	SE_LMSHARE                 = 5 | ||||
| 	SE_KERNEL_OBJECT           = 6 | ||||
| 	SE_WINDOW_OBJECT           = 7 | ||||
| 	SE_DS_OBJECT               = 8 | ||||
| 	SE_DS_OBJECT_ALL           = 9 | ||||
| 	SE_PROVIDER_DEFINED_OBJECT = 10 | ||||
| 	SE_WMIGUID_OBJECT          = 11 | ||||
| 	SE_REGISTRY_WOW64_32KEY    = 12 | ||||
| 	SE_REGISTRY_WOW64_64KEY    = 13 | ||||
| ) | ||||
|  | ||||
| type SECURITY_INFORMATION uint32 | ||||
|  | ||||
| // Constants for type SECURITY_INFORMATION | ||||
| const ( | ||||
| 	OWNER_SECURITY_INFORMATION            = 0x00000001 | ||||
| 	GROUP_SECURITY_INFORMATION            = 0x00000002 | ||||
| 	DACL_SECURITY_INFORMATION             = 0x00000004 | ||||
| 	SACL_SECURITY_INFORMATION             = 0x00000008 | ||||
| 	LABEL_SECURITY_INFORMATION            = 0x00000010 | ||||
| 	ATTRIBUTE_SECURITY_INFORMATION        = 0x00000020 | ||||
| 	SCOPE_SECURITY_INFORMATION            = 0x00000040 | ||||
| 	BACKUP_SECURITY_INFORMATION           = 0x00010000 | ||||
| 	PROTECTED_DACL_SECURITY_INFORMATION   = 0x80000000 | ||||
| 	PROTECTED_SACL_SECURITY_INFORMATION   = 0x40000000 | ||||
| 	UNPROTECTED_DACL_SECURITY_INFORMATION = 0x20000000 | ||||
| 	UNPROTECTED_SACL_SECURITY_INFORMATION = 0x10000000 | ||||
| ) | ||||
|  | ||||
| type SECURITY_DESCRIPTOR_CONTROL uint16 | ||||
|  | ||||
| // Constants for type SECURITY_DESCRIPTOR_CONTROL | ||||
| const ( | ||||
| 	SE_OWNER_DEFAULTED       = 0x0001 | ||||
| 	SE_GROUP_DEFAULTED       = 0x0002 | ||||
| 	SE_DACL_PRESENT          = 0x0004 | ||||
| 	SE_DACL_DEFAULTED        = 0x0008 | ||||
| 	SE_SACL_PRESENT          = 0x0010 | ||||
| 	SE_SACL_DEFAULTED        = 0x0020 | ||||
| 	SE_DACL_AUTO_INHERIT_REQ = 0x0100 | ||||
| 	SE_SACL_AUTO_INHERIT_REQ = 0x0200 | ||||
| 	SE_DACL_AUTO_INHERITED   = 0x0400 | ||||
| 	SE_SACL_AUTO_INHERITED   = 0x0800 | ||||
| 	SE_DACL_PROTECTED        = 0x1000 | ||||
| 	SE_SACL_PROTECTED        = 0x2000 | ||||
| 	SE_RM_CONTROL_VALID      = 0x4000 | ||||
| 	SE_SELF_RELATIVE         = 0x8000 | ||||
| ) | ||||
|  | ||||
| type ACCESS_MASK uint32 | ||||
|  | ||||
| // Constants for type ACCESS_MASK | ||||
| const ( | ||||
| 	DELETE                   = 0x00010000 | ||||
| 	READ_CONTROL             = 0x00020000 | ||||
| 	WRITE_DAC                = 0x00040000 | ||||
| 	WRITE_OWNER              = 0x00080000 | ||||
| 	SYNCHRONIZE              = 0x00100000 | ||||
| 	STANDARD_RIGHTS_REQUIRED = 0x000F0000 | ||||
| 	STANDARD_RIGHTS_READ     = READ_CONTROL | ||||
| 	STANDARD_RIGHTS_WRITE    = READ_CONTROL | ||||
| 	STANDARD_RIGHTS_EXECUTE  = READ_CONTROL | ||||
| 	STANDARD_RIGHTS_ALL      = 0x001F0000 | ||||
| 	SPECIFIC_RIGHTS_ALL      = 0x0000FFFF | ||||
| 	ACCESS_SYSTEM_SECURITY   = 0x01000000 | ||||
| 	MAXIMUM_ALLOWED          = 0x02000000 | ||||
| 	GENERIC_READ             = 0x80000000 | ||||
| 	GENERIC_WRITE            = 0x40000000 | ||||
| 	GENERIC_EXECUTE          = 0x20000000 | ||||
| 	GENERIC_ALL              = 0x10000000 | ||||
| ) | ||||
|  | ||||
| type ACCESS_MODE uint32 | ||||
|  | ||||
| // Constants for type ACCESS_MODE | ||||
| const ( | ||||
| 	NOT_USED_ACCESS   = 0 | ||||
| 	GRANT_ACCESS      = 1 | ||||
| 	SET_ACCESS        = 2 | ||||
| 	DENY_ACCESS       = 3 | ||||
| 	REVOKE_ACCESS     = 4 | ||||
| 	SET_AUDIT_SUCCESS = 5 | ||||
| 	SET_AUDIT_FAILURE = 6 | ||||
| ) | ||||
|  | ||||
| // Constants for AceFlags and Inheritance fields | ||||
| const ( | ||||
| 	NO_INHERITANCE                     = 0x0 | ||||
| 	SUB_OBJECTS_ONLY_INHERIT           = 0x1 | ||||
| 	SUB_CONTAINERS_ONLY_INHERIT        = 0x2 | ||||
| 	SUB_CONTAINERS_AND_OBJECTS_INHERIT = 0x3 | ||||
| 	INHERIT_NO_PROPAGATE               = 0x4 | ||||
| 	INHERIT_ONLY                       = 0x8 | ||||
| 	INHERITED_ACCESS_ENTRY             = 0x10 | ||||
| 	INHERITED_PARENT                   = 0x10000000 | ||||
| 	INHERITED_GRANDPARENT              = 0x20000000 | ||||
| 	OBJECT_INHERIT_ACE                 = 0x1 | ||||
| 	CONTAINER_INHERIT_ACE              = 0x2 | ||||
| 	NO_PROPAGATE_INHERIT_ACE           = 0x4 | ||||
| 	INHERIT_ONLY_ACE                   = 0x8 | ||||
| 	INHERITED_ACE                      = 0x10 | ||||
| 	VALID_INHERIT_FLAGS                = 0x1F | ||||
| ) | ||||
|  | ||||
| type MULTIPLE_TRUSTEE_OPERATION uint32 | ||||
|  | ||||
| // Constants for MULTIPLE_TRUSTEE_OPERATION | ||||
| const ( | ||||
| 	NO_MULTIPLE_TRUSTEE    = 0 | ||||
| 	TRUSTEE_IS_IMPERSONATE = 1 | ||||
| ) | ||||
|  | ||||
| type TRUSTEE_FORM uint32 | ||||
|  | ||||
| // Constants for TRUSTEE_FORM | ||||
| const ( | ||||
| 	TRUSTEE_IS_SID              = 0 | ||||
| 	TRUSTEE_IS_NAME             = 1 | ||||
| 	TRUSTEE_BAD_FORM            = 2 | ||||
| 	TRUSTEE_IS_OBJECTS_AND_SID  = 3 | ||||
| 	TRUSTEE_IS_OBJECTS_AND_NAME = 4 | ||||
| ) | ||||
|  | ||||
| type TRUSTEE_TYPE uint32 | ||||
|  | ||||
| // Constants for TRUSTEE_TYPE | ||||
| const ( | ||||
| 	TRUSTEE_IS_UNKNOWN          = 0 | ||||
| 	TRUSTEE_IS_USER             = 1 | ||||
| 	TRUSTEE_IS_GROUP            = 2 | ||||
| 	TRUSTEE_IS_DOMAIN           = 3 | ||||
| 	TRUSTEE_IS_ALIAS            = 4 | ||||
| 	TRUSTEE_IS_WELL_KNOWN_GROUP = 5 | ||||
| 	TRUSTEE_IS_DELETED          = 6 | ||||
| 	TRUSTEE_IS_INVALID          = 7 | ||||
| 	TRUSTEE_IS_COMPUTER         = 8 | ||||
| ) | ||||
|  | ||||
| // Constants for ObjectsPresent field | ||||
| const ( | ||||
| 	ACE_OBJECT_TYPE_PRESENT           = 0x1 | ||||
| 	ACE_INHERITED_OBJECT_TYPE_PRESENT = 0x2 | ||||
| ) | ||||
|  | ||||
| type EXPLICIT_ACCESS struct { | ||||
| 	AccessPermissions ACCESS_MASK | ||||
| 	AccessMode        ACCESS_MODE | ||||
| 	Inheritance       uint32 | ||||
| 	Trustee           TRUSTEE | ||||
| } | ||||
|  | ||||
| // This type is the union inside of TRUSTEE and must be created using one of the TrusteeValueFrom* functions. | ||||
| type TrusteeValue uintptr | ||||
|  | ||||
| func TrusteeValueFromString(str string) TrusteeValue { | ||||
| 	return TrusteeValue(unsafe.Pointer(StringToUTF16Ptr(str))) | ||||
| } | ||||
| func TrusteeValueFromSID(sid *SID) TrusteeValue { | ||||
| 	return TrusteeValue(unsafe.Pointer(sid)) | ||||
| } | ||||
| func TrusteeValueFromObjectsAndSid(objectsAndSid *OBJECTS_AND_SID) TrusteeValue { | ||||
| 	return TrusteeValue(unsafe.Pointer(objectsAndSid)) | ||||
| } | ||||
| func TrusteeValueFromObjectsAndName(objectsAndName *OBJECTS_AND_NAME) TrusteeValue { | ||||
| 	return TrusteeValue(unsafe.Pointer(objectsAndName)) | ||||
| } | ||||
|  | ||||
| type TRUSTEE struct { | ||||
| 	MultipleTrustee          *TRUSTEE | ||||
| 	MultipleTrusteeOperation MULTIPLE_TRUSTEE_OPERATION | ||||
| 	TrusteeForm              TRUSTEE_FORM | ||||
| 	TrusteeType              TRUSTEE_TYPE | ||||
| 	TrusteeValue             TrusteeValue | ||||
| } | ||||
|  | ||||
| type OBJECTS_AND_SID struct { | ||||
| 	ObjectsPresent          uint32 | ||||
| 	ObjectTypeGuid          GUID | ||||
| 	InheritedObjectTypeGuid GUID | ||||
| 	Sid                     *SID | ||||
| } | ||||
|  | ||||
| type OBJECTS_AND_NAME struct { | ||||
| 	ObjectsPresent          uint32 | ||||
| 	ObjectType              SE_OBJECT_TYPE | ||||
| 	ObjectTypeName          *uint16 | ||||
| 	InheritedObjectTypeName *uint16 | ||||
| 	Name                    *uint16 | ||||
| } | ||||
|  | ||||
| //sys	getSecurityInfo(handle Handle, objectType SE_OBJECT_TYPE, securityInformation SECURITY_INFORMATION, owner **SID, group **SID, dacl **ACL, sacl **ACL, sd **SECURITY_DESCRIPTOR) (ret error) = advapi32.GetSecurityInfo | ||||
| //sys	SetSecurityInfo(handle Handle, objectType SE_OBJECT_TYPE, securityInformation SECURITY_INFORMATION, owner *SID, group *SID, dacl *ACL, sacl *ACL) = advapi32.SetSecurityInfo | ||||
| //sys	getNamedSecurityInfo(objectName string, objectType SE_OBJECT_TYPE, securityInformation SECURITY_INFORMATION, owner **SID, group **SID, dacl **ACL, sacl **ACL, sd **SECURITY_DESCRIPTOR) (ret error) = advapi32.GetNamedSecurityInfoW | ||||
| //sys	SetNamedSecurityInfo(objectName string, objectType SE_OBJECT_TYPE, securityInformation SECURITY_INFORMATION, owner *SID, group *SID, dacl *ACL, sacl *ACL) (ret error) = advapi32.SetNamedSecurityInfoW | ||||
|  | ||||
| //sys	buildSecurityDescriptor(owner *TRUSTEE, group *TRUSTEE, countAccessEntries uint32, accessEntries *EXPLICIT_ACCESS, countAuditEntries uint32, auditEntries *EXPLICIT_ACCESS, oldSecurityDescriptor *SECURITY_DESCRIPTOR, sizeNewSecurityDescriptor *uint32, newSecurityDescriptor **SECURITY_DESCRIPTOR) (ret error) = advapi32.BuildSecurityDescriptorW | ||||
| //sys	initializeSecurityDescriptor(absoluteSD *SECURITY_DESCRIPTOR, revision uint32) (err error) = advapi32.InitializeSecurityDescriptor | ||||
|  | ||||
| //sys	getSecurityDescriptorControl(sd *SECURITY_DESCRIPTOR, control *SECURITY_DESCRIPTOR_CONTROL, revision *uint32) (err error) = advapi32.GetSecurityDescriptorControl | ||||
| //sys	getSecurityDescriptorDacl(sd *SECURITY_DESCRIPTOR, daclPresent *bool, dacl **ACL, daclDefaulted *bool) (err error) = advapi32.GetSecurityDescriptorDacl | ||||
| //sys	getSecurityDescriptorSacl(sd *SECURITY_DESCRIPTOR, saclPresent *bool, sacl **ACL, saclDefaulted *bool) (err error) = advapi32.GetSecurityDescriptorSacl | ||||
| //sys	getSecurityDescriptorOwner(sd *SECURITY_DESCRIPTOR, owner **SID, ownerDefaulted *bool) (err error) = advapi32.GetSecurityDescriptorOwner | ||||
| //sys	getSecurityDescriptorGroup(sd *SECURITY_DESCRIPTOR, group **SID, groupDefaulted *bool) (err error) = advapi32.GetSecurityDescriptorGroup | ||||
| //sys	getSecurityDescriptorLength(sd *SECURITY_DESCRIPTOR) (len uint32) = advapi32.GetSecurityDescriptorLength | ||||
| //sys	getSecurityDescriptorRMControl(sd *SECURITY_DESCRIPTOR, rmControl *uint8) (ret error) [failretval!=0] = advapi32.GetSecurityDescriptorRMControl | ||||
| //sys	isValidSecurityDescriptor(sd *SECURITY_DESCRIPTOR) (isValid bool) = advapi32.IsValidSecurityDescriptor | ||||
|  | ||||
| //sys	setSecurityDescriptorControl(sd *SECURITY_DESCRIPTOR, controlBitsOfInterest SECURITY_DESCRIPTOR_CONTROL, controlBitsToSet SECURITY_DESCRIPTOR_CONTROL) (err error) = advapi32.SetSecurityDescriptorControl | ||||
| //sys	setSecurityDescriptorDacl(sd *SECURITY_DESCRIPTOR, daclPresent bool, dacl *ACL, daclDefaulted bool) (err error) = advapi32.SetSecurityDescriptorDacl | ||||
| //sys	setSecurityDescriptorSacl(sd *SECURITY_DESCRIPTOR, saclPresent bool, sacl *ACL, saclDefaulted bool) (err error) = advapi32.SetSecurityDescriptorSacl | ||||
| //sys	setSecurityDescriptorOwner(sd *SECURITY_DESCRIPTOR, owner *SID, ownerDefaulted bool) (err error) = advapi32.SetSecurityDescriptorOwner | ||||
| //sys	setSecurityDescriptorGroup(sd *SECURITY_DESCRIPTOR, group *SID, groupDefaulted bool) (err error) = advapi32.SetSecurityDescriptorGroup | ||||
| //sys	setSecurityDescriptorRMControl(sd *SECURITY_DESCRIPTOR, rmControl *uint8) = advapi32.SetSecurityDescriptorRMControl | ||||
|  | ||||
| //sys	convertStringSecurityDescriptorToSecurityDescriptor(str string, revision uint32, sd **SECURITY_DESCRIPTOR, size *uint32) (err error) = advapi32.ConvertStringSecurityDescriptorToSecurityDescriptorW | ||||
| //sys	convertSecurityDescriptorToStringSecurityDescriptor(sd *SECURITY_DESCRIPTOR, revision uint32, securityInformation SECURITY_INFORMATION, str **uint16, strLen *uint32) (err error) = advapi32.ConvertSecurityDescriptorToStringSecurityDescriptorW | ||||
|  | ||||
| //sys	makeAbsoluteSD(selfRelativeSD *SECURITY_DESCRIPTOR, absoluteSD *SECURITY_DESCRIPTOR, absoluteSDSize *uint32, dacl *ACL, daclSize *uint32, sacl *ACL, saclSize *uint32, owner *SID, ownerSize *uint32, group *SID, groupSize *uint32) (err error) = advapi32.MakeAbsoluteSD | ||||
| //sys	makeSelfRelativeSD(absoluteSD *SECURITY_DESCRIPTOR, selfRelativeSD *SECURITY_DESCRIPTOR, selfRelativeSDSize *uint32) (err error) = advapi32.MakeSelfRelativeSD | ||||
|  | ||||
| //sys	setEntriesInAcl(countExplicitEntries uint32, explicitEntries *EXPLICIT_ACCESS, oldACL *ACL, newACL **ACL) (ret error) = advapi32.SetEntriesInAclW | ||||
|  | ||||
| // Control returns the security descriptor control bits. | ||||
| func (sd *SECURITY_DESCRIPTOR) Control() (control SECURITY_DESCRIPTOR_CONTROL, revision uint32, err error) { | ||||
| 	err = getSecurityDescriptorControl(sd, &control, &revision) | ||||
| 	return | ||||
| } | ||||
|  | ||||
| // SetControl sets the security descriptor control bits. | ||||
| func (sd *SECURITY_DESCRIPTOR) SetControl(controlBitsOfInterest SECURITY_DESCRIPTOR_CONTROL, controlBitsToSet SECURITY_DESCRIPTOR_CONTROL) error { | ||||
| 	return setSecurityDescriptorControl(sd, controlBitsOfInterest, controlBitsToSet) | ||||
| } | ||||
|  | ||||
| // RMControl returns the security descriptor resource manager control bits. | ||||
| func (sd *SECURITY_DESCRIPTOR) RMControl() (control uint8, err error) { | ||||
| 	err = getSecurityDescriptorRMControl(sd, &control) | ||||
| 	return | ||||
| } | ||||
|  | ||||
| // SetRMControl sets the security descriptor resource manager control bits. | ||||
| func (sd *SECURITY_DESCRIPTOR) SetRMControl(rmControl uint8) { | ||||
| 	setSecurityDescriptorRMControl(sd, &rmControl) | ||||
| } | ||||
|  | ||||
| // DACL returns the security descriptor DACL and whether it was defaulted. The dacl return value may be nil | ||||
| // if a DACL exists but is an "empty DACL", meaning fully permissive. If the DACL does not exist, err returns | ||||
| // ERROR_OBJECT_NOT_FOUND. | ||||
| func (sd *SECURITY_DESCRIPTOR) DACL() (dacl *ACL, defaulted bool, err error) { | ||||
| 	var present bool | ||||
| 	err = getSecurityDescriptorDacl(sd, &present, &dacl, &defaulted) | ||||
| 	if !present { | ||||
| 		err = ERROR_OBJECT_NOT_FOUND | ||||
| 	} | ||||
| 	return | ||||
| } | ||||
|  | ||||
| // SetDACL sets the absolute security descriptor DACL. | ||||
| func (absoluteSD *SECURITY_DESCRIPTOR) SetDACL(dacl *ACL, present, defaulted bool) error { | ||||
| 	return setSecurityDescriptorDacl(absoluteSD, present, dacl, defaulted) | ||||
| } | ||||
|  | ||||
| // SACL returns the security descriptor SACL and whether it was defaulted. The sacl return value may be nil | ||||
| // if a SACL exists but is an "empty SACL", meaning fully permissive. If the SACL does not exist, err returns | ||||
| // ERROR_OBJECT_NOT_FOUND. | ||||
| func (sd *SECURITY_DESCRIPTOR) SACL() (sacl *ACL, defaulted bool, err error) { | ||||
| 	var present bool | ||||
| 	err = getSecurityDescriptorSacl(sd, &present, &sacl, &defaulted) | ||||
| 	if !present { | ||||
| 		err = ERROR_OBJECT_NOT_FOUND | ||||
| 	} | ||||
| 	return | ||||
| } | ||||
|  | ||||
| // SetSACL sets the absolute security descriptor SACL. | ||||
| func (absoluteSD *SECURITY_DESCRIPTOR) SetSACL(sacl *ACL, present, defaulted bool) error { | ||||
| 	return setSecurityDescriptorSacl(absoluteSD, present, sacl, defaulted) | ||||
| } | ||||
|  | ||||
| // Owner returns the security descriptor owner and whether it was defaulted. | ||||
| func (sd *SECURITY_DESCRIPTOR) Owner() (owner *SID, defaulted bool, err error) { | ||||
| 	err = getSecurityDescriptorOwner(sd, &owner, &defaulted) | ||||
| 	return | ||||
| } | ||||
|  | ||||
| // SetOwner sets the absolute security descriptor owner. | ||||
| func (absoluteSD *SECURITY_DESCRIPTOR) SetOwner(owner *SID, defaulted bool) error { | ||||
| 	return setSecurityDescriptorOwner(absoluteSD, owner, defaulted) | ||||
| } | ||||
|  | ||||
| // Group returns the security descriptor group and whether it was defaulted. | ||||
| func (sd *SECURITY_DESCRIPTOR) Group() (group *SID, defaulted bool, err error) { | ||||
| 	err = getSecurityDescriptorGroup(sd, &group, &defaulted) | ||||
| 	return | ||||
| } | ||||
|  | ||||
| // SetGroup sets the absolute security descriptor owner. | ||||
| func (absoluteSD *SECURITY_DESCRIPTOR) SetGroup(group *SID, defaulted bool) error { | ||||
| 	return setSecurityDescriptorGroup(absoluteSD, group, defaulted) | ||||
| } | ||||
|  | ||||
| // Length returns the length of the security descriptor. | ||||
| func (sd *SECURITY_DESCRIPTOR) Length() uint32 { | ||||
| 	return getSecurityDescriptorLength(sd) | ||||
| } | ||||
|  | ||||
| // IsValid returns whether the security descriptor is valid. | ||||
| func (sd *SECURITY_DESCRIPTOR) IsValid() bool { | ||||
| 	return isValidSecurityDescriptor(sd) | ||||
| } | ||||
|  | ||||
| // String returns the SDDL form of the security descriptor, with a function signature that can be | ||||
| // used with %v formatting directives. | ||||
| func (sd *SECURITY_DESCRIPTOR) String() string { | ||||
| 	var sddl *uint16 | ||||
| 	err := convertSecurityDescriptorToStringSecurityDescriptor(sd, 1, 0xff, &sddl, nil) | ||||
| 	if err != nil { | ||||
| 		return "" | ||||
| 	} | ||||
| 	defer LocalFree(Handle(unsafe.Pointer(sddl))) | ||||
| 	return UTF16ToString((*[(1 << 30) - 1]uint16)(unsafe.Pointer(sddl))[:]) | ||||
| } | ||||
|  | ||||
| // ToAbsolute converts a self-relative security descriptor into an absolute one. | ||||
| func (selfRelativeSD *SECURITY_DESCRIPTOR) ToAbsolute() (absoluteSD *SECURITY_DESCRIPTOR, err error) { | ||||
| 	control, _, err := selfRelativeSD.Control() | ||||
| 	if err != nil { | ||||
| 		return | ||||
| 	} | ||||
| 	if control&SE_SELF_RELATIVE == 0 { | ||||
| 		err = ERROR_INVALID_PARAMETER | ||||
| 		return | ||||
| 	} | ||||
| 	var absoluteSDSize, daclSize, saclSize, ownerSize, groupSize uint32 | ||||
| 	err = makeAbsoluteSD(selfRelativeSD, nil, &absoluteSDSize, | ||||
| 		nil, &daclSize, nil, &saclSize, nil, &ownerSize, nil, &groupSize) | ||||
| 	switch err { | ||||
| 	case ERROR_INSUFFICIENT_BUFFER: | ||||
| 	case nil: | ||||
| 		// makeAbsoluteSD is expected to fail, but it succeeds. | ||||
| 		return nil, ERROR_INTERNAL_ERROR | ||||
| 	default: | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	if absoluteSDSize > 0 { | ||||
| 		absoluteSD = (*SECURITY_DESCRIPTOR)(unsafe.Pointer(&make([]byte, absoluteSDSize)[0])) | ||||
| 	} | ||||
| 	var ( | ||||
| 		dacl  *ACL | ||||
| 		sacl  *ACL | ||||
| 		owner *SID | ||||
| 		group *SID | ||||
| 	) | ||||
| 	if daclSize > 0 { | ||||
| 		dacl = (*ACL)(unsafe.Pointer(&make([]byte, daclSize)[0])) | ||||
| 	} | ||||
| 	if saclSize > 0 { | ||||
| 		sacl = (*ACL)(unsafe.Pointer(&make([]byte, saclSize)[0])) | ||||
| 	} | ||||
| 	if ownerSize > 0 { | ||||
| 		owner = (*SID)(unsafe.Pointer(&make([]byte, ownerSize)[0])) | ||||
| 	} | ||||
| 	if groupSize > 0 { | ||||
| 		group = (*SID)(unsafe.Pointer(&make([]byte, groupSize)[0])) | ||||
| 	} | ||||
| 	err = makeAbsoluteSD(selfRelativeSD, absoluteSD, &absoluteSDSize, | ||||
| 		dacl, &daclSize, sacl, &saclSize, owner, &ownerSize, group, &groupSize) | ||||
| 	return | ||||
| } | ||||
|  | ||||
| // ToSelfRelative converts an absolute security descriptor into a self-relative one. | ||||
| func (absoluteSD *SECURITY_DESCRIPTOR) ToSelfRelative() (selfRelativeSD *SECURITY_DESCRIPTOR, err error) { | ||||
| 	control, _, err := absoluteSD.Control() | ||||
| 	if err != nil { | ||||
| 		return | ||||
| 	} | ||||
| 	if control&SE_SELF_RELATIVE != 0 { | ||||
| 		err = ERROR_INVALID_PARAMETER | ||||
| 		return | ||||
| 	} | ||||
| 	var selfRelativeSDSize uint32 | ||||
| 	err = makeSelfRelativeSD(absoluteSD, nil, &selfRelativeSDSize) | ||||
| 	switch err { | ||||
| 	case ERROR_INSUFFICIENT_BUFFER: | ||||
| 	case nil: | ||||
| 		// makeSelfRelativeSD is expected to fail, but it succeeds. | ||||
| 		return nil, ERROR_INTERNAL_ERROR | ||||
| 	default: | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	if selfRelativeSDSize > 0 { | ||||
| 		selfRelativeSD = (*SECURITY_DESCRIPTOR)(unsafe.Pointer(&make([]byte, selfRelativeSDSize)[0])) | ||||
| 	} | ||||
| 	err = makeSelfRelativeSD(absoluteSD, selfRelativeSD, &selfRelativeSDSize) | ||||
| 	return | ||||
| } | ||||
|  | ||||
| func (selfRelativeSD *SECURITY_DESCRIPTOR) copySelfRelativeSecurityDescriptor() *SECURITY_DESCRIPTOR { | ||||
| 	sdBytes := make([]byte, selfRelativeSD.Length()) | ||||
| 	copy(sdBytes, (*[(1 << 31) - 1]byte)(unsafe.Pointer(selfRelativeSD))[:len(sdBytes)]) | ||||
| 	return (*SECURITY_DESCRIPTOR)(unsafe.Pointer(&sdBytes[0])) | ||||
| } | ||||
|  | ||||
| // SecurityDescriptorFromString converts an SDDL string describing a security descriptor into a | ||||
| // self-relative security descriptor object allocated on the Go heap. | ||||
| func SecurityDescriptorFromString(sddl string) (sd *SECURITY_DESCRIPTOR, err error) { | ||||
| 	var winHeapSD *SECURITY_DESCRIPTOR | ||||
| 	err = convertStringSecurityDescriptorToSecurityDescriptor(sddl, 1, &winHeapSD, nil) | ||||
| 	if err != nil { | ||||
| 		return | ||||
| 	} | ||||
| 	defer LocalFree(Handle(unsafe.Pointer(winHeapSD))) | ||||
| 	return winHeapSD.copySelfRelativeSecurityDescriptor(), nil | ||||
| } | ||||
|  | ||||
| // GetSecurityInfo queries the security information for a given handle and returns the self-relative security | ||||
| // descriptor result on the Go heap. | ||||
| func GetSecurityInfo(handle Handle, objectType SE_OBJECT_TYPE, securityInformation SECURITY_INFORMATION) (sd *SECURITY_DESCRIPTOR, err error) { | ||||
| 	var winHeapSD *SECURITY_DESCRIPTOR | ||||
| 	err = getSecurityInfo(handle, objectType, securityInformation, nil, nil, nil, nil, &winHeapSD) | ||||
| 	if err != nil { | ||||
| 		return | ||||
| 	} | ||||
| 	defer LocalFree(Handle(unsafe.Pointer(winHeapSD))) | ||||
| 	return winHeapSD.copySelfRelativeSecurityDescriptor(), nil | ||||
| } | ||||
|  | ||||
| // GetNamedSecurityInfo queries the security information for a given named object and returns the self-relative security | ||||
| // descriptor result on the Go heap. | ||||
| func GetNamedSecurityInfo(objectName string, objectType SE_OBJECT_TYPE, securityInformation SECURITY_INFORMATION) (sd *SECURITY_DESCRIPTOR, err error) { | ||||
| 	var winHeapSD *SECURITY_DESCRIPTOR | ||||
| 	err = getNamedSecurityInfo(objectName, objectType, securityInformation, nil, nil, nil, nil, &winHeapSD) | ||||
| 	if err != nil { | ||||
| 		return | ||||
| 	} | ||||
| 	defer LocalFree(Handle(unsafe.Pointer(winHeapSD))) | ||||
| 	return winHeapSD.copySelfRelativeSecurityDescriptor(), nil | ||||
| } | ||||
|  | ||||
| // BuildSecurityDescriptor makes a new security descriptor using the input trustees, explicit access lists, and | ||||
| // prior security descriptor to be merged, any of which can be nil, returning the self-relative security descriptor | ||||
| // result on the Go heap. | ||||
| func BuildSecurityDescriptor(owner *TRUSTEE, group *TRUSTEE, accessEntries []EXPLICIT_ACCESS, auditEntries []EXPLICIT_ACCESS, mergedSecurityDescriptor *SECURITY_DESCRIPTOR) (sd *SECURITY_DESCRIPTOR, err error) { | ||||
| 	var winHeapSD *SECURITY_DESCRIPTOR | ||||
| 	var winHeapSDSize uint32 | ||||
| 	var firstAccessEntry *EXPLICIT_ACCESS | ||||
| 	if len(accessEntries) > 0 { | ||||
| 		firstAccessEntry = &accessEntries[0] | ||||
| 	} | ||||
| 	var firstAuditEntry *EXPLICIT_ACCESS | ||||
| 	if len(auditEntries) > 0 { | ||||
| 		firstAuditEntry = &auditEntries[0] | ||||
| 	} | ||||
| 	err = buildSecurityDescriptor(owner, group, uint32(len(accessEntries)), firstAccessEntry, uint32(len(auditEntries)), firstAuditEntry, mergedSecurityDescriptor, &winHeapSDSize, &winHeapSD) | ||||
| 	if err != nil { | ||||
| 		return | ||||
| 	} | ||||
| 	defer LocalFree(Handle(unsafe.Pointer(winHeapSD))) | ||||
| 	return winHeapSD.copySelfRelativeSecurityDescriptor(), nil | ||||
| } | ||||
|  | ||||
| // NewSecurityDescriptor creates and initializes a new absolute security descriptor. | ||||
| func NewSecurityDescriptor() (absoluteSD *SECURITY_DESCRIPTOR, err error) { | ||||
| 	absoluteSD = &SECURITY_DESCRIPTOR{} | ||||
| 	err = initializeSecurityDescriptor(absoluteSD, 1) | ||||
| 	return | ||||
| } | ||||
|  | ||||
| // ACLFromEntries returns a new ACL on the Go heap containing a list of explicit entries as well as those of another ACL. | ||||
| // Both explicitEntries and mergedACL are optional and can be nil. | ||||
| func ACLFromEntries(explicitEntries []EXPLICIT_ACCESS, mergedACL *ACL) (acl *ACL, err error) { | ||||
| 	var firstExplicitEntry *EXPLICIT_ACCESS | ||||
| 	if len(explicitEntries) > 0 { | ||||
| 		firstExplicitEntry = &explicitEntries[0] | ||||
| 	} | ||||
| 	var winHeapACL *ACL | ||||
| 	err = setEntriesInAcl(uint32(len(explicitEntries)), firstExplicitEntry, mergedACL, &winHeapACL) | ||||
| 	if err != nil { | ||||
| 		return | ||||
| 	} | ||||
| 	defer LocalFree(Handle(unsafe.Pointer(winHeapACL))) | ||||
| 	aclBytes := make([]byte, winHeapACL.aclSize) | ||||
| 	copy(aclBytes, (*[(1 << 31) - 1]byte)(unsafe.Pointer(winHeapACL))[:len(aclBytes)]) | ||||
| 	return (*ACL)(unsafe.Pointer(&aclBytes[0])), nil | ||||
| } | ||||
|   | ||||
							
								
								
									
										76
									
								
								vendor/golang.org/x/sys/windows/service.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										76
									
								
								vendor/golang.org/x/sys/windows/service.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -85,23 +85,47 @@ const ( | ||||
| 	SERVICE_INACTIVE  = 2 | ||||
| 	SERVICE_STATE_ALL = 3 | ||||
|  | ||||
| 	SERVICE_QUERY_CONFIG           = 1 | ||||
| 	SERVICE_CHANGE_CONFIG          = 2 | ||||
| 	SERVICE_QUERY_STATUS           = 4 | ||||
| 	SERVICE_ENUMERATE_DEPENDENTS   = 8 | ||||
| 	SERVICE_START                  = 16 | ||||
| 	SERVICE_STOP                   = 32 | ||||
| 	SERVICE_PAUSE_CONTINUE         = 64 | ||||
| 	SERVICE_INTERROGATE            = 128 | ||||
| 	SERVICE_USER_DEFINED_CONTROL   = 256 | ||||
| 	SERVICE_ALL_ACCESS             = STANDARD_RIGHTS_REQUIRED | SERVICE_QUERY_CONFIG | SERVICE_CHANGE_CONFIG | SERVICE_QUERY_STATUS | SERVICE_ENUMERATE_DEPENDENTS | SERVICE_START | SERVICE_STOP | SERVICE_PAUSE_CONTINUE | SERVICE_INTERROGATE | SERVICE_USER_DEFINED_CONTROL | ||||
| 	SERVICE_RUNS_IN_SYSTEM_PROCESS = 1 | ||||
| 	SERVICE_CONFIG_DESCRIPTION     = 1 | ||||
| 	SERVICE_CONFIG_FAILURE_ACTIONS = 2 | ||||
| 	SERVICE_QUERY_CONFIG         = 1 | ||||
| 	SERVICE_CHANGE_CONFIG        = 2 | ||||
| 	SERVICE_QUERY_STATUS         = 4 | ||||
| 	SERVICE_ENUMERATE_DEPENDENTS = 8 | ||||
| 	SERVICE_START                = 16 | ||||
| 	SERVICE_STOP                 = 32 | ||||
| 	SERVICE_PAUSE_CONTINUE       = 64 | ||||
| 	SERVICE_INTERROGATE          = 128 | ||||
| 	SERVICE_USER_DEFINED_CONTROL = 256 | ||||
| 	SERVICE_ALL_ACCESS           = STANDARD_RIGHTS_REQUIRED | SERVICE_QUERY_CONFIG | SERVICE_CHANGE_CONFIG | SERVICE_QUERY_STATUS | SERVICE_ENUMERATE_DEPENDENTS | SERVICE_START | SERVICE_STOP | SERVICE_PAUSE_CONTINUE | SERVICE_INTERROGATE | SERVICE_USER_DEFINED_CONTROL | ||||
|  | ||||
| 	NO_ERROR = 0 | ||||
| 	SERVICE_RUNS_IN_SYSTEM_PROCESS = 1 | ||||
|  | ||||
| 	SERVICE_CONFIG_DESCRIPTION              = 1 | ||||
| 	SERVICE_CONFIG_FAILURE_ACTIONS          = 2 | ||||
| 	SERVICE_CONFIG_DELAYED_AUTO_START_INFO  = 3 | ||||
| 	SERVICE_CONFIG_FAILURE_ACTIONS_FLAG     = 4 | ||||
| 	SERVICE_CONFIG_SERVICE_SID_INFO         = 5 | ||||
| 	SERVICE_CONFIG_REQUIRED_PRIVILEGES_INFO = 6 | ||||
| 	SERVICE_CONFIG_PRESHUTDOWN_INFO         = 7 | ||||
| 	SERVICE_CONFIG_TRIGGER_INFO             = 8 | ||||
| 	SERVICE_CONFIG_PREFERRED_NODE           = 9 | ||||
| 	SERVICE_CONFIG_LAUNCH_PROTECTED         = 12 | ||||
|  | ||||
| 	SERVICE_SID_TYPE_NONE         = 0 | ||||
| 	SERVICE_SID_TYPE_UNRESTRICTED = 1 | ||||
| 	SERVICE_SID_TYPE_RESTRICTED   = 2 | SERVICE_SID_TYPE_UNRESTRICTED | ||||
|  | ||||
| 	SC_ENUM_PROCESS_INFO = 0 | ||||
|  | ||||
| 	SERVICE_NOTIFY_STATUS_CHANGE    = 2 | ||||
| 	SERVICE_NOTIFY_STOPPED          = 0x00000001 | ||||
| 	SERVICE_NOTIFY_START_PENDING    = 0x00000002 | ||||
| 	SERVICE_NOTIFY_STOP_PENDING     = 0x00000004 | ||||
| 	SERVICE_NOTIFY_RUNNING          = 0x00000008 | ||||
| 	SERVICE_NOTIFY_CONTINUE_PENDING = 0x00000010 | ||||
| 	SERVICE_NOTIFY_PAUSE_PENDING    = 0x00000020 | ||||
| 	SERVICE_NOTIFY_PAUSED           = 0x00000040 | ||||
| 	SERVICE_NOTIFY_CREATED          = 0x00000080 | ||||
| 	SERVICE_NOTIFY_DELETED          = 0x00000100 | ||||
| 	SERVICE_NOTIFY_DELETE_PENDING   = 0x00000200 | ||||
| ) | ||||
|  | ||||
| type SERVICE_STATUS struct { | ||||
| @@ -135,6 +159,10 @@ type SERVICE_DESCRIPTION struct { | ||||
| 	Description *uint16 | ||||
| } | ||||
|  | ||||
| type SERVICE_DELAYED_AUTO_START_INFO struct { | ||||
| 	IsDelayedAutoStartUp uint32 | ||||
| } | ||||
|  | ||||
| type SERVICE_STATUS_PROCESS struct { | ||||
| 	ServiceType             uint32 | ||||
| 	CurrentState            uint32 | ||||
| @@ -153,6 +181,16 @@ type ENUM_SERVICE_STATUS_PROCESS struct { | ||||
| 	ServiceStatusProcess SERVICE_STATUS_PROCESS | ||||
| } | ||||
|  | ||||
| type SERVICE_NOTIFY struct { | ||||
| 	Version               uint32 | ||||
| 	NotifyCallback        uintptr | ||||
| 	Context               uintptr | ||||
| 	NotificationStatus    uint32 | ||||
| 	ServiceStatus         SERVICE_STATUS_PROCESS | ||||
| 	NotificationTriggered uint32 | ||||
| 	ServiceNames          *uint16 | ||||
| } | ||||
|  | ||||
| type SERVICE_FAILURE_ACTIONS struct { | ||||
| 	ResetPeriod  uint32 | ||||
| 	RebootMsg    *uint16 | ||||
| @@ -166,12 +204,19 @@ type SC_ACTION struct { | ||||
| 	Delay uint32 | ||||
| } | ||||
|  | ||||
| type QUERY_SERVICE_LOCK_STATUS struct { | ||||
| 	IsLocked     uint32 | ||||
| 	LockOwner    *uint16 | ||||
| 	LockDuration uint32 | ||||
| } | ||||
|  | ||||
| //sys	CloseServiceHandle(handle Handle) (err error) = advapi32.CloseServiceHandle | ||||
| //sys	CreateService(mgr Handle, serviceName *uint16, displayName *uint16, access uint32, srvType uint32, startType uint32, errCtl uint32, pathName *uint16, loadOrderGroup *uint16, tagId *uint32, dependencies *uint16, serviceStartName *uint16, password *uint16) (handle Handle, err error) [failretval==0] = advapi32.CreateServiceW | ||||
| //sys	OpenService(mgr Handle, serviceName *uint16, access uint32) (handle Handle, err error) [failretval==0] = advapi32.OpenServiceW | ||||
| //sys	DeleteService(service Handle) (err error) = advapi32.DeleteService | ||||
| //sys	StartService(service Handle, numArgs uint32, argVectors **uint16) (err error) = advapi32.StartServiceW | ||||
| //sys	QueryServiceStatus(service Handle, status *SERVICE_STATUS) (err error) = advapi32.QueryServiceStatus | ||||
| //sys	QueryServiceLockStatus(mgr Handle, lockStatus *QUERY_SERVICE_LOCK_STATUS, bufSize uint32, bytesNeeded *uint32) (err error) = advapi32.QueryServiceLockStatusW | ||||
| //sys	ControlService(service Handle, control uint32, status *SERVICE_STATUS) (err error) = advapi32.ControlService | ||||
| //sys	StartServiceCtrlDispatcher(serviceTable *SERVICE_TABLE_ENTRY) (err error) = advapi32.StartServiceCtrlDispatcherW | ||||
| //sys	SetServiceStatus(service Handle, serviceStatus *SERVICE_STATUS) (err error) = advapi32.SetServiceStatus | ||||
| @@ -180,4 +225,5 @@ type SC_ACTION struct { | ||||
| //sys	ChangeServiceConfig2(service Handle, infoLevel uint32, info *byte) (err error) = advapi32.ChangeServiceConfig2W | ||||
| //sys	QueryServiceConfig2(service Handle, infoLevel uint32, buff *byte, buffSize uint32, bytesNeeded *uint32) (err error) = advapi32.QueryServiceConfig2W | ||||
| //sys	EnumServicesStatusEx(mgr Handle, infoLevel uint32, serviceType uint32, serviceState uint32, services *byte, bufSize uint32, bytesNeeded *uint32, servicesReturned *uint32, resumeHandle *uint32, groupName *uint16) (err error) = advapi32.EnumServicesStatusExW | ||||
| //sys   QueryServiceStatusEx(service Handle, infoLevel uint32, buff *byte, buffSize uint32, bytesNeeded *uint32) (err error) = advapi32.QueryServiceStatusEx | ||||
| //sys	QueryServiceStatusEx(service Handle, infoLevel uint32, buff *byte, buffSize uint32, bytesNeeded *uint32) (err error) = advapi32.QueryServiceStatusEx | ||||
| //sys	NotifyServiceStatusChange(service Handle, notifyMask uint32, notifier *SERVICE_NOTIFY) (ret error) = advapi32.NotifyServiceStatusChangeW | ||||
|   | ||||
							
								
								
									
										236
									
								
								vendor/golang.org/x/sys/windows/syscall_windows.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										236
									
								
								vendor/golang.org/x/sys/windows/syscall_windows.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -10,6 +10,7 @@ import ( | ||||
| 	errorspkg "errors" | ||||
| 	"sync" | ||||
| 	"syscall" | ||||
| 	"time" | ||||
| 	"unicode/utf16" | ||||
| 	"unsafe" | ||||
| ) | ||||
| @@ -55,6 +56,14 @@ const ( | ||||
| 	FILE_UNICODE_ON_DISK              = 0x00000004 | ||||
| 	FILE_VOLUME_IS_COMPRESSED         = 0x00008000 | ||||
| 	FILE_VOLUME_QUOTAS                = 0x00000020 | ||||
|  | ||||
| 	// Flags for LockFileEx. | ||||
| 	LOCKFILE_FAIL_IMMEDIATELY = 0x00000001 | ||||
| 	LOCKFILE_EXCLUSIVE_LOCK   = 0x00000002 | ||||
|  | ||||
| 	// Return values of SleepEx and other APC functions | ||||
| 	STATUS_USER_APC    = 0x000000C0 | ||||
| 	WAIT_IO_COMPLETION = STATUS_USER_APC | ||||
| ) | ||||
|  | ||||
| // StringToUTF16 is deprecated. Use UTF16FromString instead. | ||||
| @@ -131,10 +140,13 @@ func NewCallbackCDecl(fn interface{}) uintptr { | ||||
| //sys	LoadLibraryEx(libname string, zero Handle, flags uintptr) (handle Handle, err error) = LoadLibraryExW | ||||
| //sys	FreeLibrary(handle Handle) (err error) | ||||
| //sys	GetProcAddress(module Handle, procname string) (proc uintptr, err error) | ||||
| //sys	GetModuleFileName(module Handle, filename *uint16, size uint32) (n uint32, err error) = kernel32.GetModuleFileNameW | ||||
| //sys	GetModuleHandleEx(flags uint32, moduleName *uint16, module *Handle) (err error) = kernel32.GetModuleHandleExW | ||||
| //sys	GetVersion() (ver uint32, err error) | ||||
| //sys	FormatMessage(flags uint32, msgsrc uintptr, msgid uint32, langid uint32, buf []uint16, args *byte) (n uint32, err error) = FormatMessageW | ||||
| //sys	ExitProcess(exitcode uint32) | ||||
| //sys	CreateFile(name *uint16, access uint32, mode uint32, sa *SecurityAttributes, createmode uint32, attrs uint32, templatefile int32) (handle Handle, err error) [failretval==InvalidHandle] = CreateFileW | ||||
| //sys	IsWow64Process(handle Handle, isWow64 *bool) (err error) = IsWow64Process | ||||
| //sys	CreateFile(name *uint16, access uint32, mode uint32, sa *SecurityAttributes, createmode uint32, attrs uint32, templatefile Handle) (handle Handle, err error) [failretval==InvalidHandle] = CreateFileW | ||||
| //sys	ReadFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) (err error) | ||||
| //sys	WriteFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) (err error) | ||||
| //sys	GetOverlappedResult(handle Handle, overlapped *Overlapped, done *uint32, wait bool) (err error) | ||||
| @@ -146,6 +158,7 @@ func NewCallbackCDecl(fn interface{}) uintptr { | ||||
| //sys	findNextFile1(handle Handle, data *win32finddata1) (err error) = FindNextFileW | ||||
| //sys	FindClose(handle Handle) (err error) | ||||
| //sys	GetFileInformationByHandle(handle Handle, data *ByHandleFileInformation) (err error) | ||||
| //sys	GetFileInformationByHandleEx(handle Handle, class uint32, outBuffer *byte, outBufferLen uint32) (err error) | ||||
| //sys	GetCurrentDirectory(buflen uint32, buf *uint16) (n uint32, err error) = GetCurrentDirectoryW | ||||
| //sys	SetCurrentDirectory(path *uint16) (err error) = SetCurrentDirectoryW | ||||
| //sys	CreateDirectory(path *uint16, sa *SecurityAttributes) (err error) = CreateDirectoryW | ||||
| @@ -153,6 +166,8 @@ func NewCallbackCDecl(fn interface{}) uintptr { | ||||
| //sys	DeleteFile(path *uint16) (err error) = DeleteFileW | ||||
| //sys	MoveFile(from *uint16, to *uint16) (err error) = MoveFileW | ||||
| //sys	MoveFileEx(from *uint16, to *uint16, flags uint32) (err error) = MoveFileExW | ||||
| //sys	LockFileEx(file Handle, flags uint32, reserved uint32, bytesLow uint32, bytesHigh uint32, overlapped *Overlapped) (err error) | ||||
| //sys	UnlockFileEx(file Handle, reserved uint32, bytesLow uint32, bytesHigh uint32, overlapped *Overlapped) (err error) | ||||
| //sys	GetComputerName(buf *uint16, n *uint32) (err error) = GetComputerNameW | ||||
| //sys	GetComputerNameEx(nametype uint32, buf *uint16, n *uint32) (err error) = GetComputerNameExW | ||||
| //sys	SetEndOfFile(handle Handle) (err error) | ||||
| @@ -165,11 +180,12 @@ func NewCallbackCDecl(fn interface{}) uintptr { | ||||
| //sys	CancelIo(s Handle) (err error) | ||||
| //sys	CancelIoEx(s Handle, o *Overlapped) (err error) | ||||
| //sys	CreateProcess(appName *uint16, commandLine *uint16, procSecurity *SecurityAttributes, threadSecurity *SecurityAttributes, inheritHandles bool, creationFlags uint32, env *uint16, currentDir *uint16, startupInfo *StartupInfo, outProcInfo *ProcessInformation) (err error) = CreateProcessW | ||||
| //sys	OpenProcess(da uint32, inheritHandle bool, pid uint32) (handle Handle, err error) | ||||
| //sys	OpenProcess(desiredAccess uint32, inheritHandle bool, processId uint32) (handle Handle, err error) | ||||
| //sys	ShellExecute(hwnd Handle, verb *uint16, file *uint16, args *uint16, cwd *uint16, showCmd int32) (err error) [failretval<=32] = shell32.ShellExecuteW | ||||
| //sys	shGetKnownFolderPath(id *KNOWNFOLDERID, flags uint32, token Token, path **uint16) (ret error) = shell32.SHGetKnownFolderPath | ||||
| //sys	TerminateProcess(handle Handle, exitcode uint32) (err error) | ||||
| //sys	GetExitCodeProcess(handle Handle, exitcode *uint32) (err error) | ||||
| //sys	GetStartupInfo(startupInfo *StartupInfo) (err error) = GetStartupInfoW | ||||
| //sys	GetCurrentProcess() (pseudoHandle Handle, err error) | ||||
| //sys	GetProcessTimes(handle Handle, creationTime *Filetime, exitTime *Filetime, kernelTime *Filetime, userTime *Filetime) (err error) | ||||
| //sys	DuplicateHandle(hSourceProcessHandle Handle, hSourceHandle Handle, hTargetProcessHandle Handle, lpTargetHandle *Handle, dwDesiredAccess uint32, bInheritHandle bool, dwOptions uint32) (err error) | ||||
| //sys	WaitForSingleObject(handle Handle, waitMilliseconds uint32) (event uint32, err error) [failretval==0xffffffff] | ||||
| @@ -184,6 +200,9 @@ func NewCallbackCDecl(fn interface{}) uintptr { | ||||
| //sys	FreeEnvironmentStrings(envs *uint16) (err error) = kernel32.FreeEnvironmentStringsW | ||||
| //sys	GetEnvironmentVariable(name *uint16, buffer *uint16, size uint32) (n uint32, err error) = kernel32.GetEnvironmentVariableW | ||||
| //sys	SetEnvironmentVariable(name *uint16, value *uint16) (err error) = kernel32.SetEnvironmentVariableW | ||||
| //sys	CreateEnvironmentBlock(block **uint16, token Token, inheritExisting bool) (err error) = userenv.CreateEnvironmentBlock | ||||
| //sys	DestroyEnvironmentBlock(block *uint16) (err error) = userenv.DestroyEnvironmentBlock | ||||
| //sys	getTickCount64() (ms uint64) = kernel32.GetTickCount64 | ||||
| //sys	SetFileTime(handle Handle, ctime *Filetime, atime *Filetime, wtime *Filetime) (err error) | ||||
| //sys	GetFileAttributes(name *uint16) (attrs uint32, err error) [failretval==INVALID_FILE_ATTRIBUTES] = kernel32.GetFileAttributesW | ||||
| //sys	SetFileAttributes(name *uint16, attrs uint32) (err error) = kernel32.SetFileAttributesW | ||||
| @@ -222,7 +241,7 @@ func NewCallbackCDecl(fn interface{}) uintptr { | ||||
| //sys	RegQueryInfoKey(key Handle, class *uint16, classLen *uint32, reserved *uint32, subkeysLen *uint32, maxSubkeyLen *uint32, maxClassLen *uint32, valuesLen *uint32, maxValueNameLen *uint32, maxValueLen *uint32, saLen *uint32, lastWriteTime *Filetime) (regerrno error) = advapi32.RegQueryInfoKeyW | ||||
| //sys	RegEnumKeyEx(key Handle, index uint32, name *uint16, nameLen *uint32, reserved *uint32, class *uint16, classLen *uint32, lastWriteTime *Filetime) (regerrno error) = advapi32.RegEnumKeyExW | ||||
| //sys	RegQueryValueEx(key Handle, name *uint16, reserved *uint32, valtype *uint32, buf *byte, buflen *uint32) (regerrno error) = advapi32.RegQueryValueExW | ||||
| //sys	getCurrentProcessId() (pid uint32) = kernel32.GetCurrentProcessId | ||||
| //sys	GetCurrentProcessId() (pid uint32) = kernel32.GetCurrentProcessId | ||||
| //sys	GetConsoleMode(console Handle, mode *uint32) (err error) = kernel32.GetConsoleMode | ||||
| //sys	SetConsoleMode(console Handle, mode uint32) (err error) = kernel32.SetConsoleMode | ||||
| //sys	GetConsoleScreenBufferInfo(console Handle, info *ConsoleScreenBufferInfo) (err error) = kernel32.GetConsoleScreenBufferInfo | ||||
| @@ -231,6 +250,8 @@ func NewCallbackCDecl(fn interface{}) uintptr { | ||||
| //sys	CreateToolhelp32Snapshot(flags uint32, processId uint32) (handle Handle, err error) [failretval==InvalidHandle] = kernel32.CreateToolhelp32Snapshot | ||||
| //sys	Process32First(snapshot Handle, procEntry *ProcessEntry32) (err error) = kernel32.Process32FirstW | ||||
| //sys	Process32Next(snapshot Handle, procEntry *ProcessEntry32) (err error) = kernel32.Process32NextW | ||||
| //sys	Thread32First(snapshot Handle, threadEntry *ThreadEntry32) (err error) | ||||
| //sys	Thread32Next(snapshot Handle, threadEntry *ThreadEntry32) (err error) | ||||
| //sys	DeviceIoControl(handle Handle, ioControlCode uint32, inBuffer *byte, inBufferSize uint32, outBuffer *byte, outBufferSize uint32, bytesReturned *uint32, overlapped *Overlapped) (err error) | ||||
| // This function returns 1 byte BOOLEAN rather than the 4 byte BOOL. | ||||
| //sys	CreateSymbolicLink(symlinkfilename *uint16, targetfilename *uint16, flags uint32) (err error) [failretval&0xff==0] = CreateSymbolicLinkW | ||||
| @@ -242,6 +263,23 @@ func NewCallbackCDecl(fn interface{}) uintptr { | ||||
| //sys	SetEvent(event Handle) (err error) = kernel32.SetEvent | ||||
| //sys	ResetEvent(event Handle) (err error) = kernel32.ResetEvent | ||||
| //sys	PulseEvent(event Handle) (err error) = kernel32.PulseEvent | ||||
| //sys	CreateMutex(mutexAttrs *SecurityAttributes, initialOwner bool, name *uint16) (handle Handle, err error) = kernel32.CreateMutexW | ||||
| //sys	CreateMutexEx(mutexAttrs *SecurityAttributes, name *uint16, flags uint32, desiredAccess uint32) (handle Handle, err error) = kernel32.CreateMutexExW | ||||
| //sys	OpenMutex(desiredAccess uint32, inheritHandle bool, name *uint16) (handle Handle, err error) = kernel32.OpenMutexW | ||||
| //sys	ReleaseMutex(mutex Handle) (err error) = kernel32.ReleaseMutex | ||||
| //sys	SleepEx(milliseconds uint32, alertable bool) (ret uint32) = kernel32.SleepEx | ||||
| //sys	CreateJobObject(jobAttr *SecurityAttributes, name *uint16) (handle Handle, err error) = kernel32.CreateJobObjectW | ||||
| //sys	AssignProcessToJobObject(job Handle, process Handle) (err error) = kernel32.AssignProcessToJobObject | ||||
| //sys	TerminateJobObject(job Handle, exitCode uint32) (err error) = kernel32.TerminateJobObject | ||||
| //sys	SetErrorMode(mode uint32) (ret uint32) = kernel32.SetErrorMode | ||||
| //sys	ResumeThread(thread Handle) (ret uint32, err error) [failretval==0xffffffff] = kernel32.ResumeThread | ||||
| //sys	SetPriorityClass(process Handle, priorityClass uint32) (err error) = kernel32.SetPriorityClass | ||||
| //sys	GetPriorityClass(process Handle) (ret uint32, err error) = kernel32.GetPriorityClass | ||||
| //sys	SetInformationJobObject(job Handle, JobObjectInformationClass uint32, JobObjectInformation uintptr, JobObjectInformationLength uint32) (ret int, err error) | ||||
| //sys	GenerateConsoleCtrlEvent(ctrlEvent uint32, processGroupID uint32) (err error) | ||||
| //sys	GetProcessId(process Handle) (id uint32, err error) | ||||
| //sys	OpenThread(desiredAccess uint32, inheritHandle bool, threadId uint32) (handle Handle, err error) | ||||
| //sys	SetProcessPriorityBoost(process Handle, disable bool) (err error) = kernel32.SetProcessPriorityBoost | ||||
|  | ||||
| // Volume Management Functions | ||||
| //sys	DefineDosDevice(flags uint32, deviceName *uint16, targetPath *uint16) (err error) = DefineDosDeviceW | ||||
| @@ -252,6 +290,7 @@ func NewCallbackCDecl(fn interface{}) uintptr { | ||||
| //sys	FindNextVolumeMountPoint(findVolumeMountPoint Handle, volumeMountPoint *uint16, bufferLength uint32) (err error) = FindNextVolumeMountPointW | ||||
| //sys	FindVolumeClose(findVolume Handle) (err error) | ||||
| //sys	FindVolumeMountPointClose(findVolumeMountPoint Handle) (err error) | ||||
| //sys	GetDiskFreeSpaceEx(directoryName *uint16, freeBytesAvailableToCaller *uint64, totalNumberOfBytes *uint64, totalNumberOfFreeBytes *uint64) (err error) = GetDiskFreeSpaceExW | ||||
| //sys	GetDriveType(rootPathName *uint16) (driveType uint32) = GetDriveTypeW | ||||
| //sys	GetLogicalDrives() (drivesBitMask uint32, err error) [failretval==0] | ||||
| //sys	GetLogicalDriveStrings(bufferLength uint32, buffer *uint16) (n uint32, err error) [failretval==0] = GetLogicalDriveStringsW | ||||
| @@ -263,9 +302,55 @@ func NewCallbackCDecl(fn interface{}) uintptr { | ||||
| //sys	QueryDosDevice(deviceName *uint16, targetPath *uint16, max uint32) (n uint32, err error) [failretval==0] = QueryDosDeviceW | ||||
| //sys	SetVolumeLabel(rootPathName *uint16, volumeName *uint16) (err error) = SetVolumeLabelW | ||||
| //sys	SetVolumeMountPoint(volumeMountPoint *uint16, volumeName *uint16) (err error) = SetVolumeMountPointW | ||||
| //sys	MessageBox(hwnd Handle, text *uint16, caption *uint16, boxtype uint32) (ret int32, err error) [failretval==0] = user32.MessageBoxW | ||||
| //sys	ExitWindowsEx(flags uint32, reason uint32) (err error) = user32.ExitWindowsEx | ||||
| //sys	InitiateSystemShutdownEx(machineName *uint16, message *uint16, timeout uint32, forceAppsClosed bool, rebootAfterShutdown bool, reason uint32) (err error) = advapi32.InitiateSystemShutdownExW | ||||
| //sys	SetProcessShutdownParameters(level uint32, flags uint32) (err error) = kernel32.SetProcessShutdownParameters | ||||
| //sys	GetProcessShutdownParameters(level *uint32, flags *uint32) (err error) = kernel32.GetProcessShutdownParameters | ||||
| //sys	clsidFromString(lpsz *uint16, pclsid *GUID) (ret error) = ole32.CLSIDFromString | ||||
| //sys	stringFromGUID2(rguid *GUID, lpsz *uint16, cchMax int32) (chars int32) = ole32.StringFromGUID2 | ||||
| //sys	coCreateGuid(pguid *GUID) (ret error) = ole32.CoCreateGuid | ||||
| //sys	CoTaskMemFree(address unsafe.Pointer) = ole32.CoTaskMemFree | ||||
| //sys	rtlGetVersion(info *OsVersionInfoEx) (ret error) = ntdll.RtlGetVersion | ||||
| //sys	rtlGetNtVersionNumbers(majorVersion *uint32, minorVersion *uint32, buildNumber *uint32) = ntdll.RtlGetNtVersionNumbers | ||||
| //sys	getProcessPreferredUILanguages(flags uint32, numLanguages *uint32, buf *uint16, bufSize *uint32) (err error) = kernel32.GetProcessPreferredUILanguages | ||||
| //sys	getThreadPreferredUILanguages(flags uint32, numLanguages *uint32, buf *uint16, bufSize *uint32) (err error) = kernel32.GetThreadPreferredUILanguages | ||||
| //sys	getUserPreferredUILanguages(flags uint32, numLanguages *uint32, buf *uint16, bufSize *uint32) (err error) = kernel32.GetUserPreferredUILanguages | ||||
| //sys	getSystemPreferredUILanguages(flags uint32, numLanguages *uint32, buf *uint16, bufSize *uint32) (err error) = kernel32.GetSystemPreferredUILanguages | ||||
|  | ||||
| // Process Status API (PSAPI) | ||||
| //sys	EnumProcesses(processIds []uint32, bytesReturned *uint32) (err error) = psapi.EnumProcesses | ||||
|  | ||||
| // syscall interface implementation for other packages | ||||
|  | ||||
| // GetCurrentProcess returns the handle for the current process. | ||||
| // It is a pseudo handle that does not need to be closed. | ||||
| // The returned error is always nil. | ||||
| // | ||||
| // Deprecated: use CurrentProcess for the same Handle without the nil | ||||
| // error. | ||||
| func GetCurrentProcess() (Handle, error) { | ||||
| 	return CurrentProcess(), nil | ||||
| } | ||||
|  | ||||
| // CurrentProcess returns the handle for the current process. | ||||
| // It is a pseudo handle that does not need to be closed. | ||||
| func CurrentProcess() Handle { return Handle(^uintptr(1 - 1)) } | ||||
|  | ||||
| // GetCurrentThread returns the handle for the current thread. | ||||
| // It is a pseudo handle that does not need to be closed. | ||||
| // The returned error is always nil. | ||||
| // | ||||
| // Deprecated: use CurrentThread for the same Handle without the nil | ||||
| // error. | ||||
| func GetCurrentThread() (Handle, error) { | ||||
| 	return CurrentThread(), nil | ||||
| } | ||||
|  | ||||
| // CurrentThread returns the handle for the current thread. | ||||
| // It is a pseudo handle that does not need to be closed. | ||||
| func CurrentThread() Handle { return Handle(^uintptr(2 - 1)) } | ||||
|  | ||||
| // GetProcAddressByOrdinal retrieves the address of the exported | ||||
| // function from module by ordinal. | ||||
| func GetProcAddressByOrdinal(module Handle, ordinal uintptr) (proc uintptr, err error) { | ||||
| @@ -332,7 +417,11 @@ func Open(path string, mode int, perm uint32) (fd Handle, err error) { | ||||
| 	default: | ||||
| 		createmode = OPEN_EXISTING | ||||
| 	} | ||||
| 	h, e := CreateFile(pathp, access, sharemode, sa, createmode, FILE_ATTRIBUTE_NORMAL, 0) | ||||
| 	var attrs uint32 = FILE_ATTRIBUTE_NORMAL | ||||
| 	if perm&S_IWRITE == 0 { | ||||
| 		attrs = FILE_ATTRIBUTE_READONLY | ||||
| 	} | ||||
| 	h, e := CreateFile(pathp, access, sharemode, sa, createmode, attrs, 0) | ||||
| 	return h, e | ||||
| } | ||||
|  | ||||
| @@ -477,6 +566,10 @@ func ComputerName() (name string, err error) { | ||||
| 	return string(utf16.Decode(b[0:n])), nil | ||||
| } | ||||
|  | ||||
| func DurationSinceBoot() time.Duration { | ||||
| 	return time.Duration(getTickCount64()) * time.Millisecond | ||||
| } | ||||
|  | ||||
| func Ftruncate(fd Handle, length int64) (err error) { | ||||
| 	curoffset, e := Seek(fd, 0, 1) | ||||
| 	if e != nil { | ||||
| @@ -560,9 +653,6 @@ func Fsync(fd Handle) (err error) { | ||||
| } | ||||
|  | ||||
| func Chmod(path string, mode uint32) (err error) { | ||||
| 	if mode == 0 { | ||||
| 		return syscall.EINVAL | ||||
| 	} | ||||
| 	p, e := UTF16PtrFromString(path) | ||||
| 	if e != nil { | ||||
| 		return e | ||||
| @@ -778,7 +868,7 @@ func (rsa *RawSockaddrAny) Sockaddr() (Sockaddr, error) { | ||||
| 		for n < len(pp.Path) && pp.Path[n] != 0 { | ||||
| 			n++ | ||||
| 		} | ||||
| 		bytes := (*[10000]byte)(unsafe.Pointer(&pp.Path[0]))[0:n] | ||||
| 		bytes := (*[len(pp.Path)]byte)(unsafe.Pointer(&pp.Path[0]))[0:n] | ||||
| 		sa.Name = string(bytes) | ||||
| 		return sa, nil | ||||
|  | ||||
| @@ -1089,7 +1179,7 @@ func SetsockoptIPv6Mreq(fd Handle, level, opt int, mreq *IPv6Mreq) (err error) { | ||||
| 	return syscall.EWINDOWS | ||||
| } | ||||
|  | ||||
| func Getpid() (pid int) { return int(getCurrentProcessId()) } | ||||
| func Getpid() (pid int) { return int(GetCurrentProcessId()) } | ||||
|  | ||||
| func FindFirstFile(name *uint16, data *Win32finddata) (handle Handle, err error) { | ||||
| 	// NOTE(rsc): The Win32finddata struct is wrong for the system call: | ||||
| @@ -1217,3 +1307,129 @@ func Readlink(path string, buf []byte) (n int, err error) { | ||||
|  | ||||
| 	return n, nil | ||||
| } | ||||
|  | ||||
| // GUIDFromString parses a string in the form of | ||||
| // "{XXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}" into a GUID. | ||||
| func GUIDFromString(str string) (GUID, error) { | ||||
| 	guid := GUID{} | ||||
| 	str16, err := syscall.UTF16PtrFromString(str) | ||||
| 	if err != nil { | ||||
| 		return guid, err | ||||
| 	} | ||||
| 	err = clsidFromString(str16, &guid) | ||||
| 	if err != nil { | ||||
| 		return guid, err | ||||
| 	} | ||||
| 	return guid, nil | ||||
| } | ||||
|  | ||||
| // GenerateGUID creates a new random GUID. | ||||
| func GenerateGUID() (GUID, error) { | ||||
| 	guid := GUID{} | ||||
| 	err := coCreateGuid(&guid) | ||||
| 	if err != nil { | ||||
| 		return guid, err | ||||
| 	} | ||||
| 	return guid, nil | ||||
| } | ||||
|  | ||||
| // String returns the canonical string form of the GUID, | ||||
| // in the form of "{XXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}". | ||||
| func (guid GUID) String() string { | ||||
| 	var str [100]uint16 | ||||
| 	chars := stringFromGUID2(&guid, &str[0], int32(len(str))) | ||||
| 	if chars <= 1 { | ||||
| 		return "" | ||||
| 	} | ||||
| 	return string(utf16.Decode(str[:chars-1])) | ||||
| } | ||||
|  | ||||
| // KnownFolderPath returns a well-known folder path for the current user, specified by one of | ||||
| // the FOLDERID_ constants, and chosen and optionally created based on a KF_ flag. | ||||
| func KnownFolderPath(folderID *KNOWNFOLDERID, flags uint32) (string, error) { | ||||
| 	return Token(0).KnownFolderPath(folderID, flags) | ||||
| } | ||||
|  | ||||
| // KnownFolderPath returns a well-known folder path for the user token, specified by one of | ||||
| // the FOLDERID_ constants, and chosen and optionally created based on a KF_ flag. | ||||
| func (t Token) KnownFolderPath(folderID *KNOWNFOLDERID, flags uint32) (string, error) { | ||||
| 	var p *uint16 | ||||
| 	err := shGetKnownFolderPath(folderID, flags, t, &p) | ||||
| 	if err != nil { | ||||
| 		return "", err | ||||
| 	} | ||||
| 	defer CoTaskMemFree(unsafe.Pointer(p)) | ||||
| 	return UTF16ToString((*[(1 << 30) - 1]uint16)(unsafe.Pointer(p))[:]), nil | ||||
| } | ||||
|  | ||||
| // RtlGetVersion returns the version of the underlying operating system, ignoring | ||||
| // manifest semantics but is affected by the application compatibility layer. | ||||
| func RtlGetVersion() *OsVersionInfoEx { | ||||
| 	info := &OsVersionInfoEx{} | ||||
| 	info.osVersionInfoSize = uint32(unsafe.Sizeof(*info)) | ||||
| 	// According to documentation, this function always succeeds. | ||||
| 	// The function doesn't even check the validity of the | ||||
| 	// osVersionInfoSize member. Disassembling ntdll.dll indicates | ||||
| 	// that the documentation is indeed correct about that. | ||||
| 	_ = rtlGetVersion(info) | ||||
| 	return info | ||||
| } | ||||
|  | ||||
| // RtlGetNtVersionNumbers returns the version of the underlying operating system, | ||||
| // ignoring manifest semantics and the application compatibility layer. | ||||
| func RtlGetNtVersionNumbers() (majorVersion, minorVersion, buildNumber uint32) { | ||||
| 	rtlGetNtVersionNumbers(&majorVersion, &minorVersion, &buildNumber) | ||||
| 	buildNumber &= 0xffff | ||||
| 	return | ||||
| } | ||||
|  | ||||
| // GetProcessPreferredUILanguages retrieves the process preferred UI languages. | ||||
| func GetProcessPreferredUILanguages(flags uint32) ([]string, error) { | ||||
| 	return getUILanguages(flags, getProcessPreferredUILanguages) | ||||
| } | ||||
|  | ||||
| // GetThreadPreferredUILanguages retrieves the thread preferred UI languages for the current thread. | ||||
| func GetThreadPreferredUILanguages(flags uint32) ([]string, error) { | ||||
| 	return getUILanguages(flags, getThreadPreferredUILanguages) | ||||
| } | ||||
|  | ||||
| // GetUserPreferredUILanguages retrieves information about the user preferred UI languages. | ||||
| func GetUserPreferredUILanguages(flags uint32) ([]string, error) { | ||||
| 	return getUILanguages(flags, getUserPreferredUILanguages) | ||||
| } | ||||
|  | ||||
| // GetSystemPreferredUILanguages retrieves the system preferred UI languages. | ||||
| func GetSystemPreferredUILanguages(flags uint32) ([]string, error) { | ||||
| 	return getUILanguages(flags, getSystemPreferredUILanguages) | ||||
| } | ||||
|  | ||||
| func getUILanguages(flags uint32, f func(flags uint32, numLanguages *uint32, buf *uint16, bufSize *uint32) error) ([]string, error) { | ||||
| 	size := uint32(128) | ||||
| 	for { | ||||
| 		var numLanguages uint32 | ||||
| 		buf := make([]uint16, size) | ||||
| 		err := f(flags, &numLanguages, &buf[0], &size) | ||||
| 		if err == ERROR_INSUFFICIENT_BUFFER { | ||||
| 			continue | ||||
| 		} | ||||
| 		if err != nil { | ||||
| 			return nil, err | ||||
| 		} | ||||
| 		buf = buf[:size] | ||||
| 		if numLanguages == 0 || len(buf) == 0 { // GetProcessPreferredUILanguages may return numLanguages==0 with "\0\0" | ||||
| 			return []string{}, nil | ||||
| 		} | ||||
| 		if buf[len(buf)-1] == 0 { | ||||
| 			buf = buf[:len(buf)-1] // remove terminating null | ||||
| 		} | ||||
| 		languages := make([]string, 0, numLanguages) | ||||
| 		from := 0 | ||||
| 		for i, c := range buf { | ||||
| 			if c == 0 { | ||||
| 				languages = append(languages, string(utf16.Decode(buf[from:i]))) | ||||
| 				from = i + 1 | ||||
| 			} | ||||
| 		} | ||||
| 		return languages, nil | ||||
| 	} | ||||
| } | ||||
|   | ||||
							
								
								
									
										406
									
								
								vendor/golang.org/x/sys/windows/types_windows.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										406
									
								
								vendor/golang.org/x/sys/windows/types_windows.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -4,33 +4,10 @@ | ||||
|  | ||||
| package windows | ||||
|  | ||||
| import "syscall" | ||||
|  | ||||
| const ( | ||||
| 	// Windows errors. | ||||
| 	ERROR_FILE_NOT_FOUND         syscall.Errno = 2 | ||||
| 	ERROR_PATH_NOT_FOUND         syscall.Errno = 3 | ||||
| 	ERROR_ACCESS_DENIED          syscall.Errno = 5 | ||||
| 	ERROR_NO_MORE_FILES          syscall.Errno = 18 | ||||
| 	ERROR_HANDLE_EOF             syscall.Errno = 38 | ||||
| 	ERROR_NETNAME_DELETED        syscall.Errno = 64 | ||||
| 	ERROR_FILE_EXISTS            syscall.Errno = 80 | ||||
| 	ERROR_BROKEN_PIPE            syscall.Errno = 109 | ||||
| 	ERROR_BUFFER_OVERFLOW        syscall.Errno = 111 | ||||
| 	ERROR_INSUFFICIENT_BUFFER    syscall.Errno = 122 | ||||
| 	ERROR_MOD_NOT_FOUND          syscall.Errno = 126 | ||||
| 	ERROR_PROC_NOT_FOUND         syscall.Errno = 127 | ||||
| 	ERROR_ALREADY_EXISTS         syscall.Errno = 183 | ||||
| 	ERROR_ENVVAR_NOT_FOUND       syscall.Errno = 203 | ||||
| 	ERROR_MORE_DATA              syscall.Errno = 234 | ||||
| 	ERROR_OPERATION_ABORTED      syscall.Errno = 995 | ||||
| 	ERROR_IO_PENDING             syscall.Errno = 997 | ||||
| 	ERROR_SERVICE_SPECIFIC_ERROR syscall.Errno = 1066 | ||||
| 	ERROR_NOT_FOUND              syscall.Errno = 1168 | ||||
| 	ERROR_PRIVILEGE_NOT_HELD     syscall.Errno = 1314 | ||||
| 	WSAEACCES                    syscall.Errno = 10013 | ||||
| 	WSAEMSGSIZE                  syscall.Errno = 10040 | ||||
| 	WSAECONNRESET                syscall.Errno = 10054 | ||||
| import ( | ||||
| 	"net" | ||||
| 	"syscall" | ||||
| 	"unsafe" | ||||
| ) | ||||
|  | ||||
| const ( | ||||
| @@ -85,11 +62,6 @@ var signals = [...]string{ | ||||
| } | ||||
|  | ||||
| const ( | ||||
| 	GENERIC_READ    = 0x80000000 | ||||
| 	GENERIC_WRITE   = 0x40000000 | ||||
| 	GENERIC_EXECUTE = 0x20000000 | ||||
| 	GENERIC_ALL     = 0x10000000 | ||||
|  | ||||
| 	FILE_LIST_DIRECTORY   = 0x00000001 | ||||
| 	FILE_APPEND_DATA      = 0x00000004 | ||||
| 	FILE_WRITE_ATTRIBUTES = 0x00000100 | ||||
| @@ -177,22 +149,47 @@ const ( | ||||
| 	IGNORE                = 0 | ||||
| 	INFINITE              = 0xffffffff | ||||
|  | ||||
| 	WAIT_TIMEOUT   = 258 | ||||
| 	WAIT_ABANDONED = 0x00000080 | ||||
| 	WAIT_OBJECT_0  = 0x00000000 | ||||
| 	WAIT_FAILED    = 0xFFFFFFFF | ||||
|  | ||||
| 	PROCESS_TERMINATE         = 1 | ||||
| 	PROCESS_QUERY_INFORMATION = 0x00000400 | ||||
| 	SYNCHRONIZE               = 0x00100000 | ||||
| 	// Access rights for process. | ||||
| 	PROCESS_CREATE_PROCESS            = 0x0080 | ||||
| 	PROCESS_CREATE_THREAD             = 0x0002 | ||||
| 	PROCESS_DUP_HANDLE                = 0x0040 | ||||
| 	PROCESS_QUERY_INFORMATION         = 0x0400 | ||||
| 	PROCESS_QUERY_LIMITED_INFORMATION = 0x1000 | ||||
| 	PROCESS_SET_INFORMATION           = 0x0200 | ||||
| 	PROCESS_SET_QUOTA                 = 0x0100 | ||||
| 	PROCESS_SUSPEND_RESUME            = 0x0800 | ||||
| 	PROCESS_TERMINATE                 = 0x0001 | ||||
| 	PROCESS_VM_OPERATION              = 0x0008 | ||||
| 	PROCESS_VM_READ                   = 0x0010 | ||||
| 	PROCESS_VM_WRITE                  = 0x0020 | ||||
|  | ||||
| 	// Access rights for thread. | ||||
| 	THREAD_DIRECT_IMPERSONATION      = 0x0200 | ||||
| 	THREAD_GET_CONTEXT               = 0x0008 | ||||
| 	THREAD_IMPERSONATE               = 0x0100 | ||||
| 	THREAD_QUERY_INFORMATION         = 0x0040 | ||||
| 	THREAD_QUERY_LIMITED_INFORMATION = 0x0800 | ||||
| 	THREAD_SET_CONTEXT               = 0x0010 | ||||
| 	THREAD_SET_INFORMATION           = 0x0020 | ||||
| 	THREAD_SET_LIMITED_INFORMATION   = 0x0400 | ||||
| 	THREAD_SET_THREAD_TOKEN          = 0x0080 | ||||
| 	THREAD_SUSPEND_RESUME            = 0x0002 | ||||
| 	THREAD_TERMINATE                 = 0x0001 | ||||
|  | ||||
| 	FILE_MAP_COPY    = 0x01 | ||||
| 	FILE_MAP_WRITE   = 0x02 | ||||
| 	FILE_MAP_READ    = 0x04 | ||||
| 	FILE_MAP_EXECUTE = 0x20 | ||||
|  | ||||
| 	CTRL_C_EVENT     = 0 | ||||
| 	CTRL_BREAK_EVENT = 1 | ||||
| 	CTRL_C_EVENT        = 0 | ||||
| 	CTRL_BREAK_EVENT    = 1 | ||||
| 	CTRL_CLOSE_EVENT    = 2 | ||||
| 	CTRL_LOGOFF_EVENT   = 5 | ||||
| 	CTRL_SHUTDOWN_EVENT = 6 | ||||
|  | ||||
| 	// Windows reserves errors >= 1<<29 for application use. | ||||
| 	APPLICATION_ERROR = 1 << 29 | ||||
| @@ -412,12 +409,6 @@ const ( | ||||
| 	CERT_CHAIN_POLICY_EV                = 8 | ||||
| 	CERT_CHAIN_POLICY_SSL_F12           = 9 | ||||
|  | ||||
| 	CERT_E_EXPIRED       = 0x800B0101 | ||||
| 	CERT_E_ROLE          = 0x800B0103 | ||||
| 	CERT_E_PURPOSE       = 0x800B0106 | ||||
| 	CERT_E_UNTRUSTEDROOT = 0x800B0109 | ||||
| 	CERT_E_CN_NO_MATCH   = 0x800B010F | ||||
|  | ||||
| 	/* AuthType values for SSLExtraCertChainPolicyPara struct */ | ||||
| 	AUTHTYPE_CLIENT = 1 | ||||
| 	AUTHTYPE_SERVER = 2 | ||||
| @@ -430,6 +421,26 @@ const ( | ||||
| 	SECURITY_FLAG_IGNORE_CERT_DATE_INVALID = 0x00002000 | ||||
| ) | ||||
|  | ||||
| const ( | ||||
| 	// flags for SetErrorMode | ||||
| 	SEM_FAILCRITICALERRORS     = 0x0001 | ||||
| 	SEM_NOALIGNMENTFAULTEXCEPT = 0x0004 | ||||
| 	SEM_NOGPFAULTERRORBOX      = 0x0002 | ||||
| 	SEM_NOOPENFILEERRORBOX     = 0x8000 | ||||
| ) | ||||
|  | ||||
| const ( | ||||
| 	// Priority class. | ||||
| 	ABOVE_NORMAL_PRIORITY_CLASS   = 0x00008000 | ||||
| 	BELOW_NORMAL_PRIORITY_CLASS   = 0x00004000 | ||||
| 	HIGH_PRIORITY_CLASS           = 0x00000080 | ||||
| 	IDLE_PRIORITY_CLASS           = 0x00000040 | ||||
| 	NORMAL_PRIORITY_CLASS         = 0x00000020 | ||||
| 	PROCESS_MODE_BACKGROUND_BEGIN = 0x00100000 | ||||
| 	PROCESS_MODE_BACKGROUND_END   = 0x00200000 | ||||
| 	REALTIME_PRIORITY_CLASS       = 0x00000100 | ||||
| ) | ||||
|  | ||||
| var ( | ||||
| 	OID_PKIX_KP_SERVER_AUTH = []byte("1.3.6.1.5.5.7.3.1\x00") | ||||
| 	OID_SERVER_GATED_CRYPTO = []byte("1.3.6.1.4.1.311.10.3.3\x00") | ||||
| @@ -460,12 +471,6 @@ func NsecToTimeval(nsec int64) (tv Timeval) { | ||||
| 	return | ||||
| } | ||||
|  | ||||
| type SecurityAttributes struct { | ||||
| 	Length             uint32 | ||||
| 	SecurityDescriptor uintptr | ||||
| 	InheritHandle      uint32 | ||||
| } | ||||
|  | ||||
| type Overlapped struct { | ||||
| 	Internal     uintptr | ||||
| 	InternalHigh uintptr | ||||
| @@ -639,6 +644,16 @@ type ProcessEntry32 struct { | ||||
| 	ExeFile         [MAX_PATH]uint16 | ||||
| } | ||||
|  | ||||
| type ThreadEntry32 struct { | ||||
| 	Size           uint32 | ||||
| 	Usage          uint32 | ||||
| 	ThreadID       uint32 | ||||
| 	OwnerProcessID uint32 | ||||
| 	BasePri        int32 | ||||
| 	DeltaPri       int32 | ||||
| 	Flags          uint32 | ||||
| } | ||||
|  | ||||
| type Systemtime struct { | ||||
| 	Year         uint16 | ||||
| 	Month        uint16 | ||||
| @@ -859,10 +874,6 @@ const ( | ||||
| 	DNS_TYPE_NBSTAT  = 0xff01 | ||||
| ) | ||||
|  | ||||
| const ( | ||||
| 	DNS_INFO_NO_RECORDS = 0x251D | ||||
| ) | ||||
|  | ||||
| const ( | ||||
| 	// flags inside DNSRecord.Dw | ||||
| 	DnsSectionQuestion   = 0x0000 | ||||
| @@ -1161,6 +1172,28 @@ const ( | ||||
| 	REG_QWORD = REG_QWORD_LITTLE_ENDIAN | ||||
| ) | ||||
|  | ||||
| const ( | ||||
| 	EVENT_MODIFY_STATE = 0x0002 | ||||
| 	EVENT_ALL_ACCESS   = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3 | ||||
|  | ||||
| 	MUTANT_QUERY_STATE = 0x0001 | ||||
| 	MUTANT_ALL_ACCESS  = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | MUTANT_QUERY_STATE | ||||
|  | ||||
| 	SEMAPHORE_MODIFY_STATE = 0x0002 | ||||
| 	SEMAPHORE_ALL_ACCESS   = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3 | ||||
|  | ||||
| 	TIMER_QUERY_STATE  = 0x0001 | ||||
| 	TIMER_MODIFY_STATE = 0x0002 | ||||
| 	TIMER_ALL_ACCESS   = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | TIMER_QUERY_STATE | TIMER_MODIFY_STATE | ||||
|  | ||||
| 	MUTEX_MODIFY_STATE = MUTANT_QUERY_STATE | ||||
| 	MUTEX_ALL_ACCESS   = MUTANT_ALL_ACCESS | ||||
|  | ||||
| 	CREATE_EVENT_MANUAL_RESET  = 0x1 | ||||
| 	CREATE_EVENT_INITIAL_SET   = 0x2 | ||||
| 	CREATE_MUTEX_INITIAL_OWNER = 0x1 | ||||
| ) | ||||
|  | ||||
| type AddrinfoW struct { | ||||
| 	Flags     int32 | ||||
| 	Family    int32 | ||||
| @@ -1324,6 +1357,41 @@ const ( | ||||
| 	ComputerNameMax                       = 8 | ||||
| ) | ||||
|  | ||||
| // For MessageBox() | ||||
| const ( | ||||
| 	MB_OK                   = 0x00000000 | ||||
| 	MB_OKCANCEL             = 0x00000001 | ||||
| 	MB_ABORTRETRYIGNORE     = 0x00000002 | ||||
| 	MB_YESNOCANCEL          = 0x00000003 | ||||
| 	MB_YESNO                = 0x00000004 | ||||
| 	MB_RETRYCANCEL          = 0x00000005 | ||||
| 	MB_CANCELTRYCONTINUE    = 0x00000006 | ||||
| 	MB_ICONHAND             = 0x00000010 | ||||
| 	MB_ICONQUESTION         = 0x00000020 | ||||
| 	MB_ICONEXCLAMATION      = 0x00000030 | ||||
| 	MB_ICONASTERISK         = 0x00000040 | ||||
| 	MB_USERICON             = 0x00000080 | ||||
| 	MB_ICONWARNING          = MB_ICONEXCLAMATION | ||||
| 	MB_ICONERROR            = MB_ICONHAND | ||||
| 	MB_ICONINFORMATION      = MB_ICONASTERISK | ||||
| 	MB_ICONSTOP             = MB_ICONHAND | ||||
| 	MB_DEFBUTTON1           = 0x00000000 | ||||
| 	MB_DEFBUTTON2           = 0x00000100 | ||||
| 	MB_DEFBUTTON3           = 0x00000200 | ||||
| 	MB_DEFBUTTON4           = 0x00000300 | ||||
| 	MB_APPLMODAL            = 0x00000000 | ||||
| 	MB_SYSTEMMODAL          = 0x00001000 | ||||
| 	MB_TASKMODAL            = 0x00002000 | ||||
| 	MB_HELP                 = 0x00004000 | ||||
| 	MB_NOFOCUS              = 0x00008000 | ||||
| 	MB_SETFOREGROUND        = 0x00010000 | ||||
| 	MB_DEFAULT_DESKTOP_ONLY = 0x00020000 | ||||
| 	MB_TOPMOST              = 0x00040000 | ||||
| 	MB_RIGHT                = 0x00080000 | ||||
| 	MB_RTLREADING           = 0x00100000 | ||||
| 	MB_SERVICE_NOTIFICATION = 0x00200000 | ||||
| ) | ||||
|  | ||||
| const ( | ||||
| 	MOVEFILE_REPLACE_EXISTING      = 0x1 | ||||
| 	MOVEFILE_COPY_ALLOWED          = 0x2 | ||||
| @@ -1352,6 +1420,16 @@ type SocketAddress struct { | ||||
| 	SockaddrLength int32 | ||||
| } | ||||
|  | ||||
| // IP returns an IPv4 or IPv6 address, or nil if the underlying SocketAddress is neither. | ||||
| func (addr *SocketAddress) IP() net.IP { | ||||
| 	if uintptr(addr.SockaddrLength) >= unsafe.Sizeof(RawSockaddrInet4{}) && addr.Sockaddr.Addr.Family == AF_INET { | ||||
| 		return (*RawSockaddrInet4)(unsafe.Pointer(addr.Sockaddr)).Addr[:] | ||||
| 	} else if uintptr(addr.SockaddrLength) >= unsafe.Sizeof(RawSockaddrInet6{}) && addr.Sockaddr.Addr.Family == AF_INET6 { | ||||
| 		return (*RawSockaddrInet6)(unsafe.Pointer(addr.Sockaddr)).Addr[:] | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| type IpAdapterUnicastAddress struct { | ||||
| 	Length             uint32 | ||||
| 	Flags              uint32 | ||||
| @@ -1477,3 +1555,223 @@ type ConsoleScreenBufferInfo struct { | ||||
| } | ||||
|  | ||||
| const UNIX_PATH_MAX = 108 // defined in afunix.h | ||||
|  | ||||
| const ( | ||||
| 	// flags for JOBOBJECT_BASIC_LIMIT_INFORMATION.LimitFlags | ||||
| 	JOB_OBJECT_LIMIT_ACTIVE_PROCESS             = 0x00000008 | ||||
| 	JOB_OBJECT_LIMIT_AFFINITY                   = 0x00000010 | ||||
| 	JOB_OBJECT_LIMIT_BREAKAWAY_OK               = 0x00000800 | ||||
| 	JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION = 0x00000400 | ||||
| 	JOB_OBJECT_LIMIT_JOB_MEMORY                 = 0x00000200 | ||||
| 	JOB_OBJECT_LIMIT_JOB_TIME                   = 0x00000004 | ||||
| 	JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE          = 0x00002000 | ||||
| 	JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME          = 0x00000040 | ||||
| 	JOB_OBJECT_LIMIT_PRIORITY_CLASS             = 0x00000020 | ||||
| 	JOB_OBJECT_LIMIT_PROCESS_MEMORY             = 0x00000100 | ||||
| 	JOB_OBJECT_LIMIT_PROCESS_TIME               = 0x00000002 | ||||
| 	JOB_OBJECT_LIMIT_SCHEDULING_CLASS           = 0x00000080 | ||||
| 	JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK        = 0x00001000 | ||||
| 	JOB_OBJECT_LIMIT_SUBSET_AFFINITY            = 0x00004000 | ||||
| 	JOB_OBJECT_LIMIT_WORKINGSET                 = 0x00000001 | ||||
| ) | ||||
|  | ||||
| type JOBOBJECT_BASIC_LIMIT_INFORMATION struct { | ||||
| 	PerProcessUserTimeLimit int64 | ||||
| 	PerJobUserTimeLimit     int64 | ||||
| 	LimitFlags              uint32 | ||||
| 	MinimumWorkingSetSize   uintptr | ||||
| 	MaximumWorkingSetSize   uintptr | ||||
| 	ActiveProcessLimit      uint32 | ||||
| 	Affinity                uintptr | ||||
| 	PriorityClass           uint32 | ||||
| 	SchedulingClass         uint32 | ||||
| } | ||||
|  | ||||
| type IO_COUNTERS struct { | ||||
| 	ReadOperationCount  uint64 | ||||
| 	WriteOperationCount uint64 | ||||
| 	OtherOperationCount uint64 | ||||
| 	ReadTransferCount   uint64 | ||||
| 	WriteTransferCount  uint64 | ||||
| 	OtherTransferCount  uint64 | ||||
| } | ||||
|  | ||||
| type JOBOBJECT_EXTENDED_LIMIT_INFORMATION struct { | ||||
| 	BasicLimitInformation JOBOBJECT_BASIC_LIMIT_INFORMATION | ||||
| 	IoInfo                IO_COUNTERS | ||||
| 	ProcessMemoryLimit    uintptr | ||||
| 	JobMemoryLimit        uintptr | ||||
| 	PeakProcessMemoryUsed uintptr | ||||
| 	PeakJobMemoryUsed     uintptr | ||||
| } | ||||
|  | ||||
| const ( | ||||
| 	// UIRestrictionsClass | ||||
| 	JOB_OBJECT_UILIMIT_DESKTOP          = 0x00000040 | ||||
| 	JOB_OBJECT_UILIMIT_DISPLAYSETTINGS  = 0x00000010 | ||||
| 	JOB_OBJECT_UILIMIT_EXITWINDOWS      = 0x00000080 | ||||
| 	JOB_OBJECT_UILIMIT_GLOBALATOMS      = 0x00000020 | ||||
| 	JOB_OBJECT_UILIMIT_HANDLES          = 0x00000001 | ||||
| 	JOB_OBJECT_UILIMIT_READCLIPBOARD    = 0x00000002 | ||||
| 	JOB_OBJECT_UILIMIT_SYSTEMPARAMETERS = 0x00000008 | ||||
| 	JOB_OBJECT_UILIMIT_WRITECLIPBOARD   = 0x00000004 | ||||
| ) | ||||
|  | ||||
| type JOBOBJECT_BASIC_UI_RESTRICTIONS struct { | ||||
| 	UIRestrictionsClass uint32 | ||||
| } | ||||
|  | ||||
| const ( | ||||
| 	// JobObjectInformationClass | ||||
| 	JobObjectAssociateCompletionPortInformation = 7 | ||||
| 	JobObjectBasicLimitInformation              = 2 | ||||
| 	JobObjectBasicUIRestrictions                = 4 | ||||
| 	JobObjectCpuRateControlInformation          = 15 | ||||
| 	JobObjectEndOfJobTimeInformation            = 6 | ||||
| 	JobObjectExtendedLimitInformation           = 9 | ||||
| 	JobObjectGroupInformation                   = 11 | ||||
| 	JobObjectGroupInformationEx                 = 14 | ||||
| 	JobObjectLimitViolationInformation2         = 35 | ||||
| 	JobObjectNetRateControlInformation          = 32 | ||||
| 	JobObjectNotificationLimitInformation       = 12 | ||||
| 	JobObjectNotificationLimitInformation2      = 34 | ||||
| 	JobObjectSecurityLimitInformation           = 5 | ||||
| ) | ||||
|  | ||||
| const ( | ||||
| 	KF_FLAG_DEFAULT                          = 0x00000000 | ||||
| 	KF_FLAG_FORCE_APP_DATA_REDIRECTION       = 0x00080000 | ||||
| 	KF_FLAG_RETURN_FILTER_REDIRECTION_TARGET = 0x00040000 | ||||
| 	KF_FLAG_FORCE_PACKAGE_REDIRECTION        = 0x00020000 | ||||
| 	KF_FLAG_NO_PACKAGE_REDIRECTION           = 0x00010000 | ||||
| 	KF_FLAG_FORCE_APPCONTAINER_REDIRECTION   = 0x00020000 | ||||
| 	KF_FLAG_NO_APPCONTAINER_REDIRECTION      = 0x00010000 | ||||
| 	KF_FLAG_CREATE                           = 0x00008000 | ||||
| 	KF_FLAG_DONT_VERIFY                      = 0x00004000 | ||||
| 	KF_FLAG_DONT_UNEXPAND                    = 0x00002000 | ||||
| 	KF_FLAG_NO_ALIAS                         = 0x00001000 | ||||
| 	KF_FLAG_INIT                             = 0x00000800 | ||||
| 	KF_FLAG_DEFAULT_PATH                     = 0x00000400 | ||||
| 	KF_FLAG_NOT_PARENT_RELATIVE              = 0x00000200 | ||||
| 	KF_FLAG_SIMPLE_IDLIST                    = 0x00000100 | ||||
| 	KF_FLAG_ALIAS_ONLY                       = 0x80000000 | ||||
| ) | ||||
|  | ||||
| type OsVersionInfoEx struct { | ||||
| 	osVersionInfoSize uint32 | ||||
| 	MajorVersion      uint32 | ||||
| 	MinorVersion      uint32 | ||||
| 	BuildNumber       uint32 | ||||
| 	PlatformId        uint32 | ||||
| 	CsdVersion        [128]uint16 | ||||
| 	ServicePackMajor  uint16 | ||||
| 	ServicePackMinor  uint16 | ||||
| 	SuiteMask         uint16 | ||||
| 	ProductType       byte | ||||
| 	_                 byte | ||||
| } | ||||
|  | ||||
| const ( | ||||
| 	EWX_LOGOFF          = 0x00000000 | ||||
| 	EWX_SHUTDOWN        = 0x00000001 | ||||
| 	EWX_REBOOT          = 0x00000002 | ||||
| 	EWX_FORCE           = 0x00000004 | ||||
| 	EWX_POWEROFF        = 0x00000008 | ||||
| 	EWX_FORCEIFHUNG     = 0x00000010 | ||||
| 	EWX_QUICKRESOLVE    = 0x00000020 | ||||
| 	EWX_RESTARTAPPS     = 0x00000040 | ||||
| 	EWX_HYBRID_SHUTDOWN = 0x00400000 | ||||
| 	EWX_BOOTOPTIONS     = 0x01000000 | ||||
|  | ||||
| 	SHTDN_REASON_FLAG_COMMENT_REQUIRED          = 0x01000000 | ||||
| 	SHTDN_REASON_FLAG_DIRTY_PROBLEM_ID_REQUIRED = 0x02000000 | ||||
| 	SHTDN_REASON_FLAG_CLEAN_UI                  = 0x04000000 | ||||
| 	SHTDN_REASON_FLAG_DIRTY_UI                  = 0x08000000 | ||||
| 	SHTDN_REASON_FLAG_USER_DEFINED              = 0x40000000 | ||||
| 	SHTDN_REASON_FLAG_PLANNED                   = 0x80000000 | ||||
| 	SHTDN_REASON_MAJOR_OTHER                    = 0x00000000 | ||||
| 	SHTDN_REASON_MAJOR_NONE                     = 0x00000000 | ||||
| 	SHTDN_REASON_MAJOR_HARDWARE                 = 0x00010000 | ||||
| 	SHTDN_REASON_MAJOR_OPERATINGSYSTEM          = 0x00020000 | ||||
| 	SHTDN_REASON_MAJOR_SOFTWARE                 = 0x00030000 | ||||
| 	SHTDN_REASON_MAJOR_APPLICATION              = 0x00040000 | ||||
| 	SHTDN_REASON_MAJOR_SYSTEM                   = 0x00050000 | ||||
| 	SHTDN_REASON_MAJOR_POWER                    = 0x00060000 | ||||
| 	SHTDN_REASON_MAJOR_LEGACY_API               = 0x00070000 | ||||
| 	SHTDN_REASON_MINOR_OTHER                    = 0x00000000 | ||||
| 	SHTDN_REASON_MINOR_NONE                     = 0x000000ff | ||||
| 	SHTDN_REASON_MINOR_MAINTENANCE              = 0x00000001 | ||||
| 	SHTDN_REASON_MINOR_INSTALLATION             = 0x00000002 | ||||
| 	SHTDN_REASON_MINOR_UPGRADE                  = 0x00000003 | ||||
| 	SHTDN_REASON_MINOR_RECONFIG                 = 0x00000004 | ||||
| 	SHTDN_REASON_MINOR_HUNG                     = 0x00000005 | ||||
| 	SHTDN_REASON_MINOR_UNSTABLE                 = 0x00000006 | ||||
| 	SHTDN_REASON_MINOR_DISK                     = 0x00000007 | ||||
| 	SHTDN_REASON_MINOR_PROCESSOR                = 0x00000008 | ||||
| 	SHTDN_REASON_MINOR_NETWORKCARD              = 0x00000009 | ||||
| 	SHTDN_REASON_MINOR_POWER_SUPPLY             = 0x0000000a | ||||
| 	SHTDN_REASON_MINOR_CORDUNPLUGGED            = 0x0000000b | ||||
| 	SHTDN_REASON_MINOR_ENVIRONMENT              = 0x0000000c | ||||
| 	SHTDN_REASON_MINOR_HARDWARE_DRIVER          = 0x0000000d | ||||
| 	SHTDN_REASON_MINOR_OTHERDRIVER              = 0x0000000e | ||||
| 	SHTDN_REASON_MINOR_BLUESCREEN               = 0x0000000F | ||||
| 	SHTDN_REASON_MINOR_SERVICEPACK              = 0x00000010 | ||||
| 	SHTDN_REASON_MINOR_HOTFIX                   = 0x00000011 | ||||
| 	SHTDN_REASON_MINOR_SECURITYFIX              = 0x00000012 | ||||
| 	SHTDN_REASON_MINOR_SECURITY                 = 0x00000013 | ||||
| 	SHTDN_REASON_MINOR_NETWORK_CONNECTIVITY     = 0x00000014 | ||||
| 	SHTDN_REASON_MINOR_WMI                      = 0x00000015 | ||||
| 	SHTDN_REASON_MINOR_SERVICEPACK_UNINSTALL    = 0x00000016 | ||||
| 	SHTDN_REASON_MINOR_HOTFIX_UNINSTALL         = 0x00000017 | ||||
| 	SHTDN_REASON_MINOR_SECURITYFIX_UNINSTALL    = 0x00000018 | ||||
| 	SHTDN_REASON_MINOR_MMC                      = 0x00000019 | ||||
| 	SHTDN_REASON_MINOR_SYSTEMRESTORE            = 0x0000001a | ||||
| 	SHTDN_REASON_MINOR_TERMSRV                  = 0x00000020 | ||||
| 	SHTDN_REASON_MINOR_DC_PROMOTION             = 0x00000021 | ||||
| 	SHTDN_REASON_MINOR_DC_DEMOTION              = 0x00000022 | ||||
| 	SHTDN_REASON_UNKNOWN                        = SHTDN_REASON_MINOR_NONE | ||||
| 	SHTDN_REASON_LEGACY_API                     = SHTDN_REASON_MAJOR_LEGACY_API | SHTDN_REASON_FLAG_PLANNED | ||||
| 	SHTDN_REASON_VALID_BIT_MASK                 = 0xc0ffffff | ||||
|  | ||||
| 	SHUTDOWN_NORETRY = 0x1 | ||||
| ) | ||||
|  | ||||
| // Flags used for GetModuleHandleEx | ||||
| const ( | ||||
| 	GET_MODULE_HANDLE_EX_FLAG_PIN                = 1 | ||||
| 	GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT = 2 | ||||
| 	GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS       = 4 | ||||
| ) | ||||
|  | ||||
| // MUI function flag values | ||||
| const ( | ||||
| 	MUI_LANGUAGE_ID                    = 0x4 | ||||
| 	MUI_LANGUAGE_NAME                  = 0x8 | ||||
| 	MUI_MERGE_SYSTEM_FALLBACK          = 0x10 | ||||
| 	MUI_MERGE_USER_FALLBACK            = 0x20 | ||||
| 	MUI_UI_FALLBACK                    = MUI_MERGE_SYSTEM_FALLBACK | MUI_MERGE_USER_FALLBACK | ||||
| 	MUI_THREAD_LANGUAGES               = 0x40 | ||||
| 	MUI_CONSOLE_FILTER                 = 0x100 | ||||
| 	MUI_COMPLEX_SCRIPT_FILTER          = 0x200 | ||||
| 	MUI_RESET_FILTERS                  = 0x001 | ||||
| 	MUI_USER_PREFERRED_UI_LANGUAGES    = 0x10 | ||||
| 	MUI_USE_INSTALLED_LANGUAGES        = 0x20 | ||||
| 	MUI_USE_SEARCH_ALL_LANGUAGES       = 0x40 | ||||
| 	MUI_LANG_NEUTRAL_PE_FILE           = 0x100 | ||||
| 	MUI_NON_LANG_NEUTRAL_FILE          = 0x200 | ||||
| 	MUI_MACHINE_LANGUAGE_SETTINGS      = 0x400 | ||||
| 	MUI_FILETYPE_NOT_LANGUAGE_NEUTRAL  = 0x001 | ||||
| 	MUI_FILETYPE_LANGUAGE_NEUTRAL_MAIN = 0x002 | ||||
| 	MUI_FILETYPE_LANGUAGE_NEUTRAL_MUI  = 0x004 | ||||
| 	MUI_QUERY_TYPE                     = 0x001 | ||||
| 	MUI_QUERY_CHECKSUM                 = 0x002 | ||||
| 	MUI_QUERY_LANGUAGE_NAME            = 0x004 | ||||
| 	MUI_QUERY_RESOURCE_TYPES           = 0x008 | ||||
| 	MUI_FILEINFO_VERSION               = 0x001 | ||||
|  | ||||
| 	MUI_FULL_LANGUAGE      = 0x01 | ||||
| 	MUI_PARTIAL_LANGUAGE   = 0x02 | ||||
| 	MUI_LIP_LANGUAGE       = 0x04 | ||||
| 	MUI_LANGUAGE_INSTALLED = 0x20 | ||||
| 	MUI_LANGUAGE_LICENSED  = 0x40 | ||||
| ) | ||||
|   | ||||
							
								
								
									
										6853
									
								
								vendor/golang.org/x/sys/windows/zerrors_windows.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										6853
									
								
								vendor/golang.org/x/sys/windows/zerrors_windows.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										149
									
								
								vendor/golang.org/x/sys/windows/zknownfolderids_windows.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										149
									
								
								vendor/golang.org/x/sys/windows/zknownfolderids_windows.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,149 @@ | ||||
| // Code generated by 'mkknownfolderids.bash'; DO NOT EDIT. | ||||
|  | ||||
| package windows | ||||
|  | ||||
| type KNOWNFOLDERID GUID | ||||
|  | ||||
| var ( | ||||
| 	FOLDERID_NetworkFolder          = &KNOWNFOLDERID{0xd20beec4, 0x5ca8, 0x4905, [8]byte{0xae, 0x3b, 0xbf, 0x25, 0x1e, 0xa0, 0x9b, 0x53}} | ||||
| 	FOLDERID_ComputerFolder         = &KNOWNFOLDERID{0x0ac0837c, 0xbbf8, 0x452a, [8]byte{0x85, 0x0d, 0x79, 0xd0, 0x8e, 0x66, 0x7c, 0xa7}} | ||||
| 	FOLDERID_InternetFolder         = &KNOWNFOLDERID{0x4d9f7874, 0x4e0c, 0x4904, [8]byte{0x96, 0x7b, 0x40, 0xb0, 0xd2, 0x0c, 0x3e, 0x4b}} | ||||
| 	FOLDERID_ControlPanelFolder     = &KNOWNFOLDERID{0x82a74aeb, 0xaeb4, 0x465c, [8]byte{0xa0, 0x14, 0xd0, 0x97, 0xee, 0x34, 0x6d, 0x63}} | ||||
| 	FOLDERID_PrintersFolder         = &KNOWNFOLDERID{0x76fc4e2d, 0xd6ad, 0x4519, [8]byte{0xa6, 0x63, 0x37, 0xbd, 0x56, 0x06, 0x81, 0x85}} | ||||
| 	FOLDERID_SyncManagerFolder      = &KNOWNFOLDERID{0x43668bf8, 0xc14e, 0x49b2, [8]byte{0x97, 0xc9, 0x74, 0x77, 0x84, 0xd7, 0x84, 0xb7}} | ||||
| 	FOLDERID_SyncSetupFolder        = &KNOWNFOLDERID{0x0f214138, 0xb1d3, 0x4a90, [8]byte{0xbb, 0xa9, 0x27, 0xcb, 0xc0, 0xc5, 0x38, 0x9a}} | ||||
| 	FOLDERID_ConflictFolder         = &KNOWNFOLDERID{0x4bfefb45, 0x347d, 0x4006, [8]byte{0xa5, 0xbe, 0xac, 0x0c, 0xb0, 0x56, 0x71, 0x92}} | ||||
| 	FOLDERID_SyncResultsFolder      = &KNOWNFOLDERID{0x289a9a43, 0xbe44, 0x4057, [8]byte{0xa4, 0x1b, 0x58, 0x7a, 0x76, 0xd7, 0xe7, 0xf9}} | ||||
| 	FOLDERID_RecycleBinFolder       = &KNOWNFOLDERID{0xb7534046, 0x3ecb, 0x4c18, [8]byte{0xbe, 0x4e, 0x64, 0xcd, 0x4c, 0xb7, 0xd6, 0xac}} | ||||
| 	FOLDERID_ConnectionsFolder      = &KNOWNFOLDERID{0x6f0cd92b, 0x2e97, 0x45d1, [8]byte{0x88, 0xff, 0xb0, 0xd1, 0x86, 0xb8, 0xde, 0xdd}} | ||||
| 	FOLDERID_Fonts                  = &KNOWNFOLDERID{0xfd228cb7, 0xae11, 0x4ae3, [8]byte{0x86, 0x4c, 0x16, 0xf3, 0x91, 0x0a, 0xb8, 0xfe}} | ||||
| 	FOLDERID_Desktop                = &KNOWNFOLDERID{0xb4bfcc3a, 0xdb2c, 0x424c, [8]byte{0xb0, 0x29, 0x7f, 0xe9, 0x9a, 0x87, 0xc6, 0x41}} | ||||
| 	FOLDERID_Startup                = &KNOWNFOLDERID{0xb97d20bb, 0xf46a, 0x4c97, [8]byte{0xba, 0x10, 0x5e, 0x36, 0x08, 0x43, 0x08, 0x54}} | ||||
| 	FOLDERID_Programs               = &KNOWNFOLDERID{0xa77f5d77, 0x2e2b, 0x44c3, [8]byte{0xa6, 0xa2, 0xab, 0xa6, 0x01, 0x05, 0x4a, 0x51}} | ||||
| 	FOLDERID_StartMenu              = &KNOWNFOLDERID{0x625b53c3, 0xab48, 0x4ec1, [8]byte{0xba, 0x1f, 0xa1, 0xef, 0x41, 0x46, 0xfc, 0x19}} | ||||
| 	FOLDERID_Recent                 = &KNOWNFOLDERID{0xae50c081, 0xebd2, 0x438a, [8]byte{0x86, 0x55, 0x8a, 0x09, 0x2e, 0x34, 0x98, 0x7a}} | ||||
| 	FOLDERID_SendTo                 = &KNOWNFOLDERID{0x8983036c, 0x27c0, 0x404b, [8]byte{0x8f, 0x08, 0x10, 0x2d, 0x10, 0xdc, 0xfd, 0x74}} | ||||
| 	FOLDERID_Documents              = &KNOWNFOLDERID{0xfdd39ad0, 0x238f, 0x46af, [8]byte{0xad, 0xb4, 0x6c, 0x85, 0x48, 0x03, 0x69, 0xc7}} | ||||
| 	FOLDERID_Favorites              = &KNOWNFOLDERID{0x1777f761, 0x68ad, 0x4d8a, [8]byte{0x87, 0xbd, 0x30, 0xb7, 0x59, 0xfa, 0x33, 0xdd}} | ||||
| 	FOLDERID_NetHood                = &KNOWNFOLDERID{0xc5abbf53, 0xe17f, 0x4121, [8]byte{0x89, 0x00, 0x86, 0x62, 0x6f, 0xc2, 0xc9, 0x73}} | ||||
| 	FOLDERID_PrintHood              = &KNOWNFOLDERID{0x9274bd8d, 0xcfd1, 0x41c3, [8]byte{0xb3, 0x5e, 0xb1, 0x3f, 0x55, 0xa7, 0x58, 0xf4}} | ||||
| 	FOLDERID_Templates              = &KNOWNFOLDERID{0xa63293e8, 0x664e, 0x48db, [8]byte{0xa0, 0x79, 0xdf, 0x75, 0x9e, 0x05, 0x09, 0xf7}} | ||||
| 	FOLDERID_CommonStartup          = &KNOWNFOLDERID{0x82a5ea35, 0xd9cd, 0x47c5, [8]byte{0x96, 0x29, 0xe1, 0x5d, 0x2f, 0x71, 0x4e, 0x6e}} | ||||
| 	FOLDERID_CommonPrograms         = &KNOWNFOLDERID{0x0139d44e, 0x6afe, 0x49f2, [8]byte{0x86, 0x90, 0x3d, 0xaf, 0xca, 0xe6, 0xff, 0xb8}} | ||||
| 	FOLDERID_CommonStartMenu        = &KNOWNFOLDERID{0xa4115719, 0xd62e, 0x491d, [8]byte{0xaa, 0x7c, 0xe7, 0x4b, 0x8b, 0xe3, 0xb0, 0x67}} | ||||
| 	FOLDERID_PublicDesktop          = &KNOWNFOLDERID{0xc4aa340d, 0xf20f, 0x4863, [8]byte{0xaf, 0xef, 0xf8, 0x7e, 0xf2, 0xe6, 0xba, 0x25}} | ||||
| 	FOLDERID_ProgramData            = &KNOWNFOLDERID{0x62ab5d82, 0xfdc1, 0x4dc3, [8]byte{0xa9, 0xdd, 0x07, 0x0d, 0x1d, 0x49, 0x5d, 0x97}} | ||||
| 	FOLDERID_CommonTemplates        = &KNOWNFOLDERID{0xb94237e7, 0x57ac, 0x4347, [8]byte{0x91, 0x51, 0xb0, 0x8c, 0x6c, 0x32, 0xd1, 0xf7}} | ||||
| 	FOLDERID_PublicDocuments        = &KNOWNFOLDERID{0xed4824af, 0xdce4, 0x45a8, [8]byte{0x81, 0xe2, 0xfc, 0x79, 0x65, 0x08, 0x36, 0x34}} | ||||
| 	FOLDERID_RoamingAppData         = &KNOWNFOLDERID{0x3eb685db, 0x65f9, 0x4cf6, [8]byte{0xa0, 0x3a, 0xe3, 0xef, 0x65, 0x72, 0x9f, 0x3d}} | ||||
| 	FOLDERID_LocalAppData           = &KNOWNFOLDERID{0xf1b32785, 0x6fba, 0x4fcf, [8]byte{0x9d, 0x55, 0x7b, 0x8e, 0x7f, 0x15, 0x70, 0x91}} | ||||
| 	FOLDERID_LocalAppDataLow        = &KNOWNFOLDERID{0xa520a1a4, 0x1780, 0x4ff6, [8]byte{0xbd, 0x18, 0x16, 0x73, 0x43, 0xc5, 0xaf, 0x16}} | ||||
| 	FOLDERID_InternetCache          = &KNOWNFOLDERID{0x352481e8, 0x33be, 0x4251, [8]byte{0xba, 0x85, 0x60, 0x07, 0xca, 0xed, 0xcf, 0x9d}} | ||||
| 	FOLDERID_Cookies                = &KNOWNFOLDERID{0x2b0f765d, 0xc0e9, 0x4171, [8]byte{0x90, 0x8e, 0x08, 0xa6, 0x11, 0xb8, 0x4f, 0xf6}} | ||||
| 	FOLDERID_History                = &KNOWNFOLDERID{0xd9dc8a3b, 0xb784, 0x432e, [8]byte{0xa7, 0x81, 0x5a, 0x11, 0x30, 0xa7, 0x59, 0x63}} | ||||
| 	FOLDERID_System                 = &KNOWNFOLDERID{0x1ac14e77, 0x02e7, 0x4e5d, [8]byte{0xb7, 0x44, 0x2e, 0xb1, 0xae, 0x51, 0x98, 0xb7}} | ||||
| 	FOLDERID_SystemX86              = &KNOWNFOLDERID{0xd65231b0, 0xb2f1, 0x4857, [8]byte{0xa4, 0xce, 0xa8, 0xe7, 0xc6, 0xea, 0x7d, 0x27}} | ||||
| 	FOLDERID_Windows                = &KNOWNFOLDERID{0xf38bf404, 0x1d43, 0x42f2, [8]byte{0x93, 0x05, 0x67, 0xde, 0x0b, 0x28, 0xfc, 0x23}} | ||||
| 	FOLDERID_Profile                = &KNOWNFOLDERID{0x5e6c858f, 0x0e22, 0x4760, [8]byte{0x9a, 0xfe, 0xea, 0x33, 0x17, 0xb6, 0x71, 0x73}} | ||||
| 	FOLDERID_Pictures               = &KNOWNFOLDERID{0x33e28130, 0x4e1e, 0x4676, [8]byte{0x83, 0x5a, 0x98, 0x39, 0x5c, 0x3b, 0xc3, 0xbb}} | ||||
| 	FOLDERID_ProgramFilesX86        = &KNOWNFOLDERID{0x7c5a40ef, 0xa0fb, 0x4bfc, [8]byte{0x87, 0x4a, 0xc0, 0xf2, 0xe0, 0xb9, 0xfa, 0x8e}} | ||||
| 	FOLDERID_ProgramFilesCommonX86  = &KNOWNFOLDERID{0xde974d24, 0xd9c6, 0x4d3e, [8]byte{0xbf, 0x91, 0xf4, 0x45, 0x51, 0x20, 0xb9, 0x17}} | ||||
| 	FOLDERID_ProgramFilesX64        = &KNOWNFOLDERID{0x6d809377, 0x6af0, 0x444b, [8]byte{0x89, 0x57, 0xa3, 0x77, 0x3f, 0x02, 0x20, 0x0e}} | ||||
| 	FOLDERID_ProgramFilesCommonX64  = &KNOWNFOLDERID{0x6365d5a7, 0x0f0d, 0x45e5, [8]byte{0x87, 0xf6, 0x0d, 0xa5, 0x6b, 0x6a, 0x4f, 0x7d}} | ||||
| 	FOLDERID_ProgramFiles           = &KNOWNFOLDERID{0x905e63b6, 0xc1bf, 0x494e, [8]byte{0xb2, 0x9c, 0x65, 0xb7, 0x32, 0xd3, 0xd2, 0x1a}} | ||||
| 	FOLDERID_ProgramFilesCommon     = &KNOWNFOLDERID{0xf7f1ed05, 0x9f6d, 0x47a2, [8]byte{0xaa, 0xae, 0x29, 0xd3, 0x17, 0xc6, 0xf0, 0x66}} | ||||
| 	FOLDERID_UserProgramFiles       = &KNOWNFOLDERID{0x5cd7aee2, 0x2219, 0x4a67, [8]byte{0xb8, 0x5d, 0x6c, 0x9c, 0xe1, 0x56, 0x60, 0xcb}} | ||||
| 	FOLDERID_UserProgramFilesCommon = &KNOWNFOLDERID{0xbcbd3057, 0xca5c, 0x4622, [8]byte{0xb4, 0x2d, 0xbc, 0x56, 0xdb, 0x0a, 0xe5, 0x16}} | ||||
| 	FOLDERID_AdminTools             = &KNOWNFOLDERID{0x724ef170, 0xa42d, 0x4fef, [8]byte{0x9f, 0x26, 0xb6, 0x0e, 0x84, 0x6f, 0xba, 0x4f}} | ||||
| 	FOLDERID_CommonAdminTools       = &KNOWNFOLDERID{0xd0384e7d, 0xbac3, 0x4797, [8]byte{0x8f, 0x14, 0xcb, 0xa2, 0x29, 0xb3, 0x92, 0xb5}} | ||||
| 	FOLDERID_Music                  = &KNOWNFOLDERID{0x4bd8d571, 0x6d19, 0x48d3, [8]byte{0xbe, 0x97, 0x42, 0x22, 0x20, 0x08, 0x0e, 0x43}} | ||||
| 	FOLDERID_Videos                 = &KNOWNFOLDERID{0x18989b1d, 0x99b5, 0x455b, [8]byte{0x84, 0x1c, 0xab, 0x7c, 0x74, 0xe4, 0xdd, 0xfc}} | ||||
| 	FOLDERID_Ringtones              = &KNOWNFOLDERID{0xc870044b, 0xf49e, 0x4126, [8]byte{0xa9, 0xc3, 0xb5, 0x2a, 0x1f, 0xf4, 0x11, 0xe8}} | ||||
| 	FOLDERID_PublicPictures         = &KNOWNFOLDERID{0xb6ebfb86, 0x6907, 0x413c, [8]byte{0x9a, 0xf7, 0x4f, 0xc2, 0xab, 0xf0, 0x7c, 0xc5}} | ||||
| 	FOLDERID_PublicMusic            = &KNOWNFOLDERID{0x3214fab5, 0x9757, 0x4298, [8]byte{0xbb, 0x61, 0x92, 0xa9, 0xde, 0xaa, 0x44, 0xff}} | ||||
| 	FOLDERID_PublicVideos           = &KNOWNFOLDERID{0x2400183a, 0x6185, 0x49fb, [8]byte{0xa2, 0xd8, 0x4a, 0x39, 0x2a, 0x60, 0x2b, 0xa3}} | ||||
| 	FOLDERID_PublicRingtones        = &KNOWNFOLDERID{0xe555ab60, 0x153b, 0x4d17, [8]byte{0x9f, 0x04, 0xa5, 0xfe, 0x99, 0xfc, 0x15, 0xec}} | ||||
| 	FOLDERID_ResourceDir            = &KNOWNFOLDERID{0x8ad10c31, 0x2adb, 0x4296, [8]byte{0xa8, 0xf7, 0xe4, 0x70, 0x12, 0x32, 0xc9, 0x72}} | ||||
| 	FOLDERID_LocalizedResourcesDir  = &KNOWNFOLDERID{0x2a00375e, 0x224c, 0x49de, [8]byte{0xb8, 0xd1, 0x44, 0x0d, 0xf7, 0xef, 0x3d, 0xdc}} | ||||
| 	FOLDERID_CommonOEMLinks         = &KNOWNFOLDERID{0xc1bae2d0, 0x10df, 0x4334, [8]byte{0xbe, 0xdd, 0x7a, 0xa2, 0x0b, 0x22, 0x7a, 0x9d}} | ||||
| 	FOLDERID_CDBurning              = &KNOWNFOLDERID{0x9e52ab10, 0xf80d, 0x49df, [8]byte{0xac, 0xb8, 0x43, 0x30, 0xf5, 0x68, 0x78, 0x55}} | ||||
| 	FOLDERID_UserProfiles           = &KNOWNFOLDERID{0x0762d272, 0xc50a, 0x4bb0, [8]byte{0xa3, 0x82, 0x69, 0x7d, 0xcd, 0x72, 0x9b, 0x80}} | ||||
| 	FOLDERID_Playlists              = &KNOWNFOLDERID{0xde92c1c7, 0x837f, 0x4f69, [8]byte{0xa3, 0xbb, 0x86, 0xe6, 0x31, 0x20, 0x4a, 0x23}} | ||||
| 	FOLDERID_SamplePlaylists        = &KNOWNFOLDERID{0x15ca69b3, 0x30ee, 0x49c1, [8]byte{0xac, 0xe1, 0x6b, 0x5e, 0xc3, 0x72, 0xaf, 0xb5}} | ||||
| 	FOLDERID_SampleMusic            = &KNOWNFOLDERID{0xb250c668, 0xf57d, 0x4ee1, [8]byte{0xa6, 0x3c, 0x29, 0x0e, 0xe7, 0xd1, 0xaa, 0x1f}} | ||||
| 	FOLDERID_SamplePictures         = &KNOWNFOLDERID{0xc4900540, 0x2379, 0x4c75, [8]byte{0x84, 0x4b, 0x64, 0xe6, 0xfa, 0xf8, 0x71, 0x6b}} | ||||
| 	FOLDERID_SampleVideos           = &KNOWNFOLDERID{0x859ead94, 0x2e85, 0x48ad, [8]byte{0xa7, 0x1a, 0x09, 0x69, 0xcb, 0x56, 0xa6, 0xcd}} | ||||
| 	FOLDERID_PhotoAlbums            = &KNOWNFOLDERID{0x69d2cf90, 0xfc33, 0x4fb7, [8]byte{0x9a, 0x0c, 0xeb, 0xb0, 0xf0, 0xfc, 0xb4, 0x3c}} | ||||
| 	FOLDERID_Public                 = &KNOWNFOLDERID{0xdfdf76a2, 0xc82a, 0x4d63, [8]byte{0x90, 0x6a, 0x56, 0x44, 0xac, 0x45, 0x73, 0x85}} | ||||
| 	FOLDERID_ChangeRemovePrograms   = &KNOWNFOLDERID{0xdf7266ac, 0x9274, 0x4867, [8]byte{0x8d, 0x55, 0x3b, 0xd6, 0x61, 0xde, 0x87, 0x2d}} | ||||
| 	FOLDERID_AppUpdates             = &KNOWNFOLDERID{0xa305ce99, 0xf527, 0x492b, [8]byte{0x8b, 0x1a, 0x7e, 0x76, 0xfa, 0x98, 0xd6, 0xe4}} | ||||
| 	FOLDERID_AddNewPrograms         = &KNOWNFOLDERID{0xde61d971, 0x5ebc, 0x4f02, [8]byte{0xa3, 0xa9, 0x6c, 0x82, 0x89, 0x5e, 0x5c, 0x04}} | ||||
| 	FOLDERID_Downloads              = &KNOWNFOLDERID{0x374de290, 0x123f, 0x4565, [8]byte{0x91, 0x64, 0x39, 0xc4, 0x92, 0x5e, 0x46, 0x7b}} | ||||
| 	FOLDERID_PublicDownloads        = &KNOWNFOLDERID{0x3d644c9b, 0x1fb8, 0x4f30, [8]byte{0x9b, 0x45, 0xf6, 0x70, 0x23, 0x5f, 0x79, 0xc0}} | ||||
| 	FOLDERID_SavedSearches          = &KNOWNFOLDERID{0x7d1d3a04, 0xdebb, 0x4115, [8]byte{0x95, 0xcf, 0x2f, 0x29, 0xda, 0x29, 0x20, 0xda}} | ||||
| 	FOLDERID_QuickLaunch            = &KNOWNFOLDERID{0x52a4f021, 0x7b75, 0x48a9, [8]byte{0x9f, 0x6b, 0x4b, 0x87, 0xa2, 0x10, 0xbc, 0x8f}} | ||||
| 	FOLDERID_Contacts               = &KNOWNFOLDERID{0x56784854, 0xc6cb, 0x462b, [8]byte{0x81, 0x69, 0x88, 0xe3, 0x50, 0xac, 0xb8, 0x82}} | ||||
| 	FOLDERID_SidebarParts           = &KNOWNFOLDERID{0xa75d362e, 0x50fc, 0x4fb7, [8]byte{0xac, 0x2c, 0xa8, 0xbe, 0xaa, 0x31, 0x44, 0x93}} | ||||
| 	FOLDERID_SidebarDefaultParts    = &KNOWNFOLDERID{0x7b396e54, 0x9ec5, 0x4300, [8]byte{0xbe, 0x0a, 0x24, 0x82, 0xeb, 0xae, 0x1a, 0x26}} | ||||
| 	FOLDERID_PublicGameTasks        = &KNOWNFOLDERID{0xdebf2536, 0xe1a8, 0x4c59, [8]byte{0xb6, 0xa2, 0x41, 0x45, 0x86, 0x47, 0x6a, 0xea}} | ||||
| 	FOLDERID_GameTasks              = &KNOWNFOLDERID{0x054fae61, 0x4dd8, 0x4787, [8]byte{0x80, 0xb6, 0x09, 0x02, 0x20, 0xc4, 0xb7, 0x00}} | ||||
| 	FOLDERID_SavedGames             = &KNOWNFOLDERID{0x4c5c32ff, 0xbb9d, 0x43b0, [8]byte{0xb5, 0xb4, 0x2d, 0x72, 0xe5, 0x4e, 0xaa, 0xa4}} | ||||
| 	FOLDERID_Games                  = &KNOWNFOLDERID{0xcac52c1a, 0xb53d, 0x4edc, [8]byte{0x92, 0xd7, 0x6b, 0x2e, 0x8a, 0xc1, 0x94, 0x34}} | ||||
| 	FOLDERID_SEARCH_MAPI            = &KNOWNFOLDERID{0x98ec0e18, 0x2098, 0x4d44, [8]byte{0x86, 0x44, 0x66, 0x97, 0x93, 0x15, 0xa2, 0x81}} | ||||
| 	FOLDERID_SEARCH_CSC             = &KNOWNFOLDERID{0xee32e446, 0x31ca, 0x4aba, [8]byte{0x81, 0x4f, 0xa5, 0xeb, 0xd2, 0xfd, 0x6d, 0x5e}} | ||||
| 	FOLDERID_Links                  = &KNOWNFOLDERID{0xbfb9d5e0, 0xc6a9, 0x404c, [8]byte{0xb2, 0xb2, 0xae, 0x6d, 0xb6, 0xaf, 0x49, 0x68}} | ||||
| 	FOLDERID_UsersFiles             = &KNOWNFOLDERID{0xf3ce0f7c, 0x4901, 0x4acc, [8]byte{0x86, 0x48, 0xd5, 0xd4, 0x4b, 0x04, 0xef, 0x8f}} | ||||
| 	FOLDERID_UsersLibraries         = &KNOWNFOLDERID{0xa302545d, 0xdeff, 0x464b, [8]byte{0xab, 0xe8, 0x61, 0xc8, 0x64, 0x8d, 0x93, 0x9b}} | ||||
| 	FOLDERID_SearchHome             = &KNOWNFOLDERID{0x190337d1, 0xb8ca, 0x4121, [8]byte{0xa6, 0x39, 0x6d, 0x47, 0x2d, 0x16, 0x97, 0x2a}} | ||||
| 	FOLDERID_OriginalImages         = &KNOWNFOLDERID{0x2c36c0aa, 0x5812, 0x4b87, [8]byte{0xbf, 0xd0, 0x4c, 0xd0, 0xdf, 0xb1, 0x9b, 0x39}} | ||||
| 	FOLDERID_DocumentsLibrary       = &KNOWNFOLDERID{0x7b0db17d, 0x9cd2, 0x4a93, [8]byte{0x97, 0x33, 0x46, 0xcc, 0x89, 0x02, 0x2e, 0x7c}} | ||||
| 	FOLDERID_MusicLibrary           = &KNOWNFOLDERID{0x2112ab0a, 0xc86a, 0x4ffe, [8]byte{0xa3, 0x68, 0x0d, 0xe9, 0x6e, 0x47, 0x01, 0x2e}} | ||||
| 	FOLDERID_PicturesLibrary        = &KNOWNFOLDERID{0xa990ae9f, 0xa03b, 0x4e80, [8]byte{0x94, 0xbc, 0x99, 0x12, 0xd7, 0x50, 0x41, 0x04}} | ||||
| 	FOLDERID_VideosLibrary          = &KNOWNFOLDERID{0x491e922f, 0x5643, 0x4af4, [8]byte{0xa7, 0xeb, 0x4e, 0x7a, 0x13, 0x8d, 0x81, 0x74}} | ||||
| 	FOLDERID_RecordedTVLibrary      = &KNOWNFOLDERID{0x1a6fdba2, 0xf42d, 0x4358, [8]byte{0xa7, 0x98, 0xb7, 0x4d, 0x74, 0x59, 0x26, 0xc5}} | ||||
| 	FOLDERID_HomeGroup              = &KNOWNFOLDERID{0x52528a6b, 0xb9e3, 0x4add, [8]byte{0xb6, 0x0d, 0x58, 0x8c, 0x2d, 0xba, 0x84, 0x2d}} | ||||
| 	FOLDERID_HomeGroupCurrentUser   = &KNOWNFOLDERID{0x9b74b6a3, 0x0dfd, 0x4f11, [8]byte{0x9e, 0x78, 0x5f, 0x78, 0x00, 0xf2, 0xe7, 0x72}} | ||||
| 	FOLDERID_DeviceMetadataStore    = &KNOWNFOLDERID{0x5ce4a5e9, 0xe4eb, 0x479d, [8]byte{0xb8, 0x9f, 0x13, 0x0c, 0x02, 0x88, 0x61, 0x55}} | ||||
| 	FOLDERID_Libraries              = &KNOWNFOLDERID{0x1b3ea5dc, 0xb587, 0x4786, [8]byte{0xb4, 0xef, 0xbd, 0x1d, 0xc3, 0x32, 0xae, 0xae}} | ||||
| 	FOLDERID_PublicLibraries        = &KNOWNFOLDERID{0x48daf80b, 0xe6cf, 0x4f4e, [8]byte{0xb8, 0x00, 0x0e, 0x69, 0xd8, 0x4e, 0xe3, 0x84}} | ||||
| 	FOLDERID_UserPinned             = &KNOWNFOLDERID{0x9e3995ab, 0x1f9c, 0x4f13, [8]byte{0xb8, 0x27, 0x48, 0xb2, 0x4b, 0x6c, 0x71, 0x74}} | ||||
| 	FOLDERID_ImplicitAppShortcuts   = &KNOWNFOLDERID{0xbcb5256f, 0x79f6, 0x4cee, [8]byte{0xb7, 0x25, 0xdc, 0x34, 0xe4, 0x02, 0xfd, 0x46}} | ||||
| 	FOLDERID_AccountPictures        = &KNOWNFOLDERID{0x008ca0b1, 0x55b4, 0x4c56, [8]byte{0xb8, 0xa8, 0x4d, 0xe4, 0xb2, 0x99, 0xd3, 0xbe}} | ||||
| 	FOLDERID_PublicUserTiles        = &KNOWNFOLDERID{0x0482af6c, 0x08f1, 0x4c34, [8]byte{0x8c, 0x90, 0xe1, 0x7e, 0xc9, 0x8b, 0x1e, 0x17}} | ||||
| 	FOLDERID_AppsFolder             = &KNOWNFOLDERID{0x1e87508d, 0x89c2, 0x42f0, [8]byte{0x8a, 0x7e, 0x64, 0x5a, 0x0f, 0x50, 0xca, 0x58}} | ||||
| 	FOLDERID_StartMenuAllPrograms   = &KNOWNFOLDERID{0xf26305ef, 0x6948, 0x40b9, [8]byte{0xb2, 0x55, 0x81, 0x45, 0x3d, 0x09, 0xc7, 0x85}} | ||||
| 	FOLDERID_CommonStartMenuPlaces  = &KNOWNFOLDERID{0xa440879f, 0x87a0, 0x4f7d, [8]byte{0xb7, 0x00, 0x02, 0x07, 0xb9, 0x66, 0x19, 0x4a}} | ||||
| 	FOLDERID_ApplicationShortcuts   = &KNOWNFOLDERID{0xa3918781, 0xe5f2, 0x4890, [8]byte{0xb3, 0xd9, 0xa7, 0xe5, 0x43, 0x32, 0x32, 0x8c}} | ||||
| 	FOLDERID_RoamingTiles           = &KNOWNFOLDERID{0x00bcfc5a, 0xed94, 0x4e48, [8]byte{0x96, 0xa1, 0x3f, 0x62, 0x17, 0xf2, 0x19, 0x90}} | ||||
| 	FOLDERID_RoamedTileImages       = &KNOWNFOLDERID{0xaaa8d5a5, 0xf1d6, 0x4259, [8]byte{0xba, 0xa8, 0x78, 0xe7, 0xef, 0x60, 0x83, 0x5e}} | ||||
| 	FOLDERID_Screenshots            = &KNOWNFOLDERID{0xb7bede81, 0xdf94, 0x4682, [8]byte{0xa7, 0xd8, 0x57, 0xa5, 0x26, 0x20, 0xb8, 0x6f}} | ||||
| 	FOLDERID_CameraRoll             = &KNOWNFOLDERID{0xab5fb87b, 0x7ce2, 0x4f83, [8]byte{0x91, 0x5d, 0x55, 0x08, 0x46, 0xc9, 0x53, 0x7b}} | ||||
| 	FOLDERID_SkyDrive               = &KNOWNFOLDERID{0xa52bba46, 0xe9e1, 0x435f, [8]byte{0xb3, 0xd9, 0x28, 0xda, 0xa6, 0x48, 0xc0, 0xf6}} | ||||
| 	FOLDERID_OneDrive               = &KNOWNFOLDERID{0xa52bba46, 0xe9e1, 0x435f, [8]byte{0xb3, 0xd9, 0x28, 0xda, 0xa6, 0x48, 0xc0, 0xf6}} | ||||
| 	FOLDERID_SkyDriveDocuments      = &KNOWNFOLDERID{0x24d89e24, 0x2f19, 0x4534, [8]byte{0x9d, 0xde, 0x6a, 0x66, 0x71, 0xfb, 0xb8, 0xfe}} | ||||
| 	FOLDERID_SkyDrivePictures       = &KNOWNFOLDERID{0x339719b5, 0x8c47, 0x4894, [8]byte{0x94, 0xc2, 0xd8, 0xf7, 0x7a, 0xdd, 0x44, 0xa6}} | ||||
| 	FOLDERID_SkyDriveMusic          = &KNOWNFOLDERID{0xc3f2459e, 0x80d6, 0x45dc, [8]byte{0xbf, 0xef, 0x1f, 0x76, 0x9f, 0x2b, 0xe7, 0x30}} | ||||
| 	FOLDERID_SkyDriveCameraRoll     = &KNOWNFOLDERID{0x767e6811, 0x49cb, 0x4273, [8]byte{0x87, 0xc2, 0x20, 0xf3, 0x55, 0xe1, 0x08, 0x5b}} | ||||
| 	FOLDERID_SearchHistory          = &KNOWNFOLDERID{0x0d4c3db6, 0x03a3, 0x462f, [8]byte{0xa0, 0xe6, 0x08, 0x92, 0x4c, 0x41, 0xb5, 0xd4}} | ||||
| 	FOLDERID_SearchTemplates        = &KNOWNFOLDERID{0x7e636bfe, 0xdfa9, 0x4d5e, [8]byte{0xb4, 0x56, 0xd7, 0xb3, 0x98, 0x51, 0xd8, 0xa9}} | ||||
| 	FOLDERID_CameraRollLibrary      = &KNOWNFOLDERID{0x2b20df75, 0x1eda, 0x4039, [8]byte{0x80, 0x97, 0x38, 0x79, 0x82, 0x27, 0xd5, 0xb7}} | ||||
| 	FOLDERID_SavedPictures          = &KNOWNFOLDERID{0x3b193882, 0xd3ad, 0x4eab, [8]byte{0x96, 0x5a, 0x69, 0x82, 0x9d, 0x1f, 0xb5, 0x9f}} | ||||
| 	FOLDERID_SavedPicturesLibrary   = &KNOWNFOLDERID{0xe25b5812, 0xbe88, 0x4bd9, [8]byte{0x94, 0xb0, 0x29, 0x23, 0x34, 0x77, 0xb6, 0xc3}} | ||||
| 	FOLDERID_RetailDemo             = &KNOWNFOLDERID{0x12d4c69e, 0x24ad, 0x4923, [8]byte{0xbe, 0x19, 0x31, 0x32, 0x1c, 0x43, 0xa7, 0x67}} | ||||
| 	FOLDERID_Device                 = &KNOWNFOLDERID{0x1c2ac1dc, 0x4358, 0x4b6c, [8]byte{0x97, 0x33, 0xaf, 0x21, 0x15, 0x65, 0x76, 0xf0}} | ||||
| 	FOLDERID_DevelopmentFiles       = &KNOWNFOLDERID{0xdbe8e08e, 0x3053, 0x4bbc, [8]byte{0xb1, 0x83, 0x2a, 0x7b, 0x2b, 0x19, 0x1e, 0x59}} | ||||
| 	FOLDERID_Objects3D              = &KNOWNFOLDERID{0x31c0dd25, 0x9439, 0x4f12, [8]byte{0xbf, 0x41, 0x7f, 0xf4, 0xed, 0xa3, 0x87, 0x22}} | ||||
| 	FOLDERID_AppCaptures            = &KNOWNFOLDERID{0xedc0fe71, 0x98d8, 0x4f4a, [8]byte{0xb9, 0x20, 0xc8, 0xdc, 0x13, 0x3c, 0xb1, 0x65}} | ||||
| 	FOLDERID_LocalDocuments         = &KNOWNFOLDERID{0xf42ee2d3, 0x909f, 0x4907, [8]byte{0x88, 0x71, 0x4c, 0x22, 0xfc, 0x0b, 0xf7, 0x56}} | ||||
| 	FOLDERID_LocalPictures          = &KNOWNFOLDERID{0x0ddd015d, 0xb06c, 0x45d5, [8]byte{0x8c, 0x4c, 0xf5, 0x97, 0x13, 0x85, 0x46, 0x39}} | ||||
| 	FOLDERID_LocalVideos            = &KNOWNFOLDERID{0x35286a68, 0x3c57, 0x41a1, [8]byte{0xbb, 0xb1, 0x0e, 0xae, 0x73, 0xd7, 0x6c, 0x95}} | ||||
| 	FOLDERID_LocalMusic             = &KNOWNFOLDERID{0xa0c69a99, 0x21c8, 0x4671, [8]byte{0x87, 0x03, 0x79, 0x34, 0x16, 0x2f, 0xcf, 0x1d}} | ||||
| 	FOLDERID_LocalDownloads         = &KNOWNFOLDERID{0x7d83ee9b, 0x2244, 0x4e70, [8]byte{0xb1, 0xf5, 0x53, 0x93, 0x04, 0x2a, 0xf1, 0xe4}} | ||||
| 	FOLDERID_RecordedCalls          = &KNOWNFOLDERID{0x2f8b40c2, 0x83ed, 0x48ee, [8]byte{0xb3, 0x83, 0xa1, 0xf1, 0x57, 0xec, 0x6f, 0x9a}} | ||||
| 	FOLDERID_AllAppMods             = &KNOWNFOLDERID{0x7ad67899, 0x66af, 0x43ba, [8]byte{0x91, 0x56, 0x6a, 0xad, 0x42, 0xe6, 0xc5, 0x96}} | ||||
| 	FOLDERID_CurrentAppMods         = &KNOWNFOLDERID{0x3db40b20, 0x2a30, 0x4dbe, [8]byte{0x91, 0x7e, 0x77, 0x1d, 0xd2, 0x1d, 0xd0, 0x99}} | ||||
| 	FOLDERID_AppDataDesktop         = &KNOWNFOLDERID{0xb2c5e279, 0x7add, 0x439f, [8]byte{0xb2, 0x8c, 0xc4, 0x1f, 0xe1, 0xbb, 0xf6, 0x72}} | ||||
| 	FOLDERID_AppDataDocuments       = &KNOWNFOLDERID{0x7be16610, 0x1f7f, 0x44ac, [8]byte{0xbf, 0xf0, 0x83, 0xe1, 0x5f, 0x2f, 0xfc, 0xa1}} | ||||
| 	FOLDERID_AppDataFavorites       = &KNOWNFOLDERID{0x7cfbefbc, 0xde1f, 0x45aa, [8]byte{0xb8, 0x43, 0xa5, 0x42, 0xac, 0x53, 0x6c, 0xc9}} | ||||
| 	FOLDERID_AppDataProgramData     = &KNOWNFOLDERID{0x559d40a3, 0xa036, 0x40fa, [8]byte{0xaf, 0x61, 0x84, 0xcb, 0x43, 0x0a, 0x4d, 0x34}} | ||||
| ) | ||||
							
								
								
									
										1710
									
								
								vendor/golang.org/x/sys/windows/zsyscall_windows.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1710
									
								
								vendor/golang.org/x/sys/windows/zsyscall_windows.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
		Reference in New Issue
	
	Block a user
	 ulyssessouza
					ulyssessouza