mirror of
				https://github.com/therootcompany/pathman.git
				synced 2025-10-31 04:52:46 +00:00 
			
		
		
		
	Bump golang.org/x/sys from 0.0.0-20190712062909-fae7ac547cb7 to 0.1.0
Bumps [golang.org/x/sys](https://github.com/golang/sys) from 0.0.0-20190712062909-fae7ac547cb7 to 0.1.0. - [Release notes](https://github.com/golang/sys/releases) - [Commits](https://github.com/golang/sys/commits/v0.1.0) --- updated-dependencies: - dependency-name: golang.org/x/sys dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com>
This commit is contained in:
		
							parent
							
								
									2c283a2864
								
							
						
					
					
						commit
						f776084fc1
					
				
							
								
								
									
										2
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								go.mod
									
									
									
									
									
								
							| @ -4,5 +4,5 @@ go 1.12 | ||||
| 
 | ||||
| require ( | ||||
| 	git.rootprojects.org/root/go-gitver v1.1.3 | ||||
| 	golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7 | ||||
| 	golang.org/x/sys v0.1.0 | ||||
| ) | ||||
|  | ||||
							
								
								
									
										4
									
								
								go.sum
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								go.sum
									
									
									
									
									
								
							| @ -1,4 +1,4 @@ | ||||
| git.rootprojects.org/root/go-gitver v1.1.3 h1:/qR9z53vY+IFhWRxLkF9cjaiWh8xRJIm6gyuW+MG81A= | ||||
| git.rootprojects.org/root/go-gitver v1.1.3/go.mod h1:Rj1v3TBhvdaSphFEqMynUYwAz/4f+wY/+syBTvRrmlI= | ||||
| golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7 h1:LepdCS8Gf/MVejFIt8lsiexZATdoGVyp5bcyS+rYoUI= | ||||
| golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.1.0 h1:kunALQeHf1/185U1i0GOB/fy1IPRDDpuoOOqRReG57U= | ||||
| golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||
|  | ||||
							
								
								
									
										3
									
								
								vendor/golang.org/x/sys/AUTHORS
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								vendor/golang.org/x/sys/AUTHORS
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,3 +0,0 @@ | ||||
| # This source code refers to The Go Authors for copyright purposes. | ||||
| # The master list of authors is in the main Go distribution, | ||||
| # visible at http://tip.golang.org/AUTHORS. | ||||
							
								
								
									
										3
									
								
								vendor/golang.org/x/sys/CONTRIBUTORS
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								vendor/golang.org/x/sys/CONTRIBUTORS
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,3 +0,0 @@ | ||||
| # This source code was written by the Go contributors. | ||||
| # The master list of contributors is in the main Go distribution, | ||||
| # visible at http://tip.golang.org/CONTRIBUTORS. | ||||
							
								
								
									
										30
									
								
								vendor/golang.org/x/sys/internal/unsafeheader/unsafeheader.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								vendor/golang.org/x/sys/internal/unsafeheader/unsafeheader.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,30 @@ | ||||
| // Copyright 2020 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. | ||||
| 
 | ||||
| // Package unsafeheader contains header declarations for the Go runtime's | ||||
| // slice and string implementations. | ||||
| // | ||||
| // This package allows x/sys to use types equivalent to | ||||
| // reflect.SliceHeader and reflect.StringHeader without introducing | ||||
| // a dependency on the (relatively heavy) "reflect" package. | ||||
| package unsafeheader | ||||
| 
 | ||||
| import ( | ||||
| 	"unsafe" | ||||
| ) | ||||
| 
 | ||||
| // Slice is the runtime representation of a slice. | ||||
| // It cannot be used safely or portably and its representation may change in a later release. | ||||
| type Slice struct { | ||||
| 	Data unsafe.Pointer | ||||
| 	Len  int | ||||
| 	Cap  int | ||||
| } | ||||
| 
 | ||||
| // String is the runtime representation of a string. | ||||
| // It cannot be used safely or portably and its representation may change in a later release. | ||||
| type String struct { | ||||
| 	Data unsafe.Pointer | ||||
| 	Len  int | ||||
| } | ||||
							
								
								
									
										4
									
								
								vendor/golang.org/x/sys/windows/aliases.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/golang.org/x/sys/windows/aliases.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -2,8 +2,8 @@ | ||||
| // Use of this source code is governed by a BSD-style | ||||
| // license that can be found in the LICENSE file. | ||||
| 
 | ||||
| // +build windows | ||||
| // +build go1.9 | ||||
| //go:build windows && go1.9 | ||||
| // +build windows,go1.9 | ||||
| 
 | ||||
| package windows | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										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) | ||||
							
								
								
									
										52
									
								
								vendor/golang.org/x/sys/windows/dll_windows.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										52
									
								
								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,9 +32,7 @@ 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) | ||||
| func (e *DLLError) Unwrap() error { return e.Err } | ||||
| 
 | ||||
| // A DLL implements access to a single DLL. | ||||
| type DLL struct { | ||||
| @ -40,7 +50,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 +60,7 @@ func LoadDLL(name string) (dll *DLL, err error) { | ||||
| 	} | ||||
| 	d := &DLL{ | ||||
| 		Name:   name, | ||||
| 		Handle: Handle(h), | ||||
| 		Handle: h, | ||||
| 	} | ||||
| 	return d, nil | ||||
| } | ||||
| @ -71,7 +81,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, | ||||
| @ -96,6 +106,35 @@ func (d *DLL) MustFindProc(name string) *Proc { | ||||
| 	return p | ||||
| } | ||||
| 
 | ||||
| // FindProcByOrdinal searches DLL d for procedure by ordinal and returns *Proc | ||||
| // if found. It returns an error if search fails. | ||||
| func (d *DLL) FindProcByOrdinal(ordinal uintptr) (proc *Proc, err error) { | ||||
| 	a, e := GetProcAddressByOrdinal(d.Handle, ordinal) | ||||
| 	name := "#" + itoa(int(ordinal)) | ||||
| 	if e != nil { | ||||
| 		return nil, &DLLError{ | ||||
| 			Err:     e, | ||||
| 			ObjName: name, | ||||
| 			Msg:     "Failed to find " + name + " procedure in " + d.Name + ": " + e.Error(), | ||||
| 		} | ||||
| 	} | ||||
| 	p := &Proc{ | ||||
| 		Dll:  d, | ||||
| 		Name: name, | ||||
| 		addr: a, | ||||
| 	} | ||||
| 	return p, nil | ||||
| } | ||||
| 
 | ||||
| // MustFindProcByOrdinal is like FindProcByOrdinal but panics if search fails. | ||||
| func (d *DLL) MustFindProcByOrdinal(ordinal uintptr) *Proc { | ||||
| 	p, e := d.FindProcByOrdinal(ordinal) | ||||
| 	if e != nil { | ||||
| 		panic(e) | ||||
| 	} | ||||
| 	return p | ||||
| } | ||||
| 
 | ||||
| // Release unloads DLL d from memory. | ||||
| func (d *DLL) Release() (err error) { | ||||
| 	return FreeLibrary(d.Handle) | ||||
| @ -352,7 +391,6 @@ func loadLibraryEx(name string, system bool) (*DLL, error) { | ||||
| 	var flags uintptr | ||||
| 	if system { | ||||
| 		if canDoSearchSystem32() { | ||||
| 			const LOAD_LIBRARY_SEARCH_SYSTEM32 = 0x00000800 | ||||
| 			flags = LOAD_LIBRARY_SEARCH_SYSTEM32 | ||||
| 		} else if isBaseName(name) { | ||||
| 			// WindowsXP or unpatched Windows machine | ||||
|  | ||||
							
								
								
									
										9
									
								
								vendor/golang.org/x/sys/windows/empty.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								vendor/golang.org/x/sys/windows/empty.s
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,9 @@ | ||||
| // 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. | ||||
| 
 | ||||
| //go:build !go1.12 | ||||
| // +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). | ||||
							
								
								
									
										11
									
								
								vendor/golang.org/x/sys/windows/env_windows.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										11
									
								
								vendor/golang.org/x/sys/windows/env_windows.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -8,7 +8,6 @@ package windows | ||||
| 
 | ||||
| import ( | ||||
| 	"syscall" | ||||
| 	"unicode/utf16" | ||||
| 	"unsafe" | ||||
| ) | ||||
| 
 | ||||
| @ -40,17 +39,11 @@ func (token Token) Environ(inheritExisting bool) (env []string, err error) { | ||||
| 	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 | ||||
| 			} | ||||
| 		} | ||||
| 		entry := UTF16PtrToString((*uint16)(unsafe.Pointer(blockp))) | ||||
| 		if len(entry) == 0 { | ||||
| 			break | ||||
| 		} | ||||
| 		env = append(env, string(utf16.Decode(entry))) | ||||
| 		env = append(env, entry) | ||||
| 		blockp += 2 * (uintptr(len(entry)) + 1) | ||||
| 	} | ||||
| 	return env, nil | ||||
|  | ||||
							
								
								
									
										1
									
								
								vendor/golang.org/x/sys/windows/eventlog.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/golang.org/x/sys/windows/eventlog.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -2,6 +2,7 @@ | ||||
| // Use of this source code is governed by a BSD-style | ||||
| // license that can be found in the LICENSE file. | ||||
| 
 | ||||
| //go:build windows | ||||
| // +build windows | ||||
| 
 | ||||
| package windows | ||||
|  | ||||
							
								
								
									
										91
									
								
								vendor/golang.org/x/sys/windows/exec_windows.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										91
									
								
								vendor/golang.org/x/sys/windows/exec_windows.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -6,15 +6,20 @@ | ||||
| 
 | ||||
| package windows | ||||
| 
 | ||||
| import ( | ||||
| 	errorspkg "errors" | ||||
| 	"unsafe" | ||||
| ) | ||||
| 
 | ||||
| // EscapeArg rewrites command line argument s as prescribed | ||||
| // in http://msdn.microsoft.com/en-us/library/ms880421. | ||||
| // This function returns "" (2 double quotes) if s is empty. | ||||
| // Alternatively, these transformations are done: | ||||
| // - every back slash (\) is doubled, but only if immediately | ||||
| //   followed by double quote ("); | ||||
| // - every double quote (") is escaped by back slash (\); | ||||
| // - finally, s is wrapped with double quotes (arg -> "arg"), | ||||
| //   but only if there is space or tab inside s. | ||||
| //   - every back slash (\) is doubled, but only if immediately | ||||
| //     followed by double quote ("); | ||||
| //   - every double quote (") is escaped by back slash (\); | ||||
| //   - finally, s is wrapped with double quotes (arg -> "arg"), | ||||
| //     but only if there is space or tab inside s. | ||||
| func EscapeArg(s string) string { | ||||
| 	if len(s) == 0 { | ||||
| 		return "\"\"" | ||||
| @ -73,6 +78,40 @@ func EscapeArg(s string) string { | ||||
| 	return string(qs[:j]) | ||||
| } | ||||
| 
 | ||||
| // ComposeCommandLine escapes and joins the given arguments suitable for use as a Windows command line, | ||||
| // in CreateProcess's CommandLine argument, CreateService/ChangeServiceConfig's BinaryPathName argument, | ||||
| // or any program that uses CommandLineToArgv. | ||||
| func ComposeCommandLine(args []string) string { | ||||
| 	var commandLine string | ||||
| 	for i := range args { | ||||
| 		if i > 0 { | ||||
| 			commandLine += " " | ||||
| 		} | ||||
| 		commandLine += EscapeArg(args[i]) | ||||
| 	} | ||||
| 	return commandLine | ||||
| } | ||||
| 
 | ||||
| // DecomposeCommandLine breaks apart its argument command line into unescaped parts using CommandLineToArgv, | ||||
| // as gathered from GetCommandLine, QUERY_SERVICE_CONFIG's BinaryPathName argument, or elsewhere that | ||||
| // command lines are passed around. | ||||
| func DecomposeCommandLine(commandLine string) ([]string, error) { | ||||
| 	if len(commandLine) == 0 { | ||||
| 		return []string{}, nil | ||||
| 	} | ||||
| 	var argc int32 | ||||
| 	argv, err := CommandLineToArgv(StringToUTF16Ptr(commandLine), &argc) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	defer LocalFree(Handle(unsafe.Pointer(argv))) | ||||
| 	var args []string | ||||
| 	for _, v := range (*argv)[:argc] { | ||||
| 		args = append(args, UTF16ToString((*v)[:])) | ||||
| 	} | ||||
| 	return args, nil | ||||
| } | ||||
| 
 | ||||
| func CloseOnExec(fd Handle) { | ||||
| 	SetHandleInformation(Handle(fd), HANDLE_FLAG_INHERIT, 0) | ||||
| } | ||||
| @ -95,3 +134,45 @@ func FullPath(name string) (path string, err error) { | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // NewProcThreadAttributeList allocates a new ProcThreadAttributeListContainer, with the requested maximum number of attributes. | ||||
| func NewProcThreadAttributeList(maxAttrCount uint32) (*ProcThreadAttributeListContainer, error) { | ||||
| 	var size uintptr | ||||
| 	err := initializeProcThreadAttributeList(nil, maxAttrCount, 0, &size) | ||||
| 	if err != ERROR_INSUFFICIENT_BUFFER { | ||||
| 		if err == nil { | ||||
| 			return nil, errorspkg.New("unable to query buffer size from InitializeProcThreadAttributeList") | ||||
| 		} | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	alloc, err := LocalAlloc(LMEM_FIXED, uint32(size)) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	// size is guaranteed to be ≥1 by InitializeProcThreadAttributeList. | ||||
| 	al := &ProcThreadAttributeListContainer{data: (*ProcThreadAttributeList)(unsafe.Pointer(alloc))} | ||||
| 	err = initializeProcThreadAttributeList(al.data, maxAttrCount, 0, &size) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	return al, err | ||||
| } | ||||
| 
 | ||||
| // Update modifies the ProcThreadAttributeList using UpdateProcThreadAttribute. | ||||
| func (al *ProcThreadAttributeListContainer) Update(attribute uintptr, value unsafe.Pointer, size uintptr) error { | ||||
| 	al.pointers = append(al.pointers, value) | ||||
| 	return updateProcThreadAttribute(al.data, 0, attribute, value, size, nil, nil) | ||||
| } | ||||
| 
 | ||||
| // Delete frees ProcThreadAttributeList's resources. | ||||
| func (al *ProcThreadAttributeListContainer) Delete() { | ||||
| 	deleteProcThreadAttributeList(al.data) | ||||
| 	LocalFree(Handle(unsafe.Pointer(al.data))) | ||||
| 	al.data = nil | ||||
| 	al.pointers = nil | ||||
| } | ||||
| 
 | ||||
| // List returns the actual ProcThreadAttributeList to be passed to StartupInfoEx. | ||||
| func (al *ProcThreadAttributeListContainer) List() *ProcThreadAttributeList { | ||||
| 	return al.data | ||||
| } | ||||
|  | ||||
							
								
								
									
										36
									
								
								vendor/golang.org/x/sys/windows/memory_windows.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										36
									
								
								vendor/golang.org/x/sys/windows/memory_windows.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -16,11 +16,33 @@ const ( | ||||
| 	MEM_RESET_UNDO  = 0x01000000 | ||||
| 	MEM_LARGE_PAGES = 0x20000000 | ||||
| 
 | ||||
| 	PAGE_NOACCESS          = 0x01 | ||||
| 	PAGE_READONLY          = 0x02 | ||||
| 	PAGE_READWRITE         = 0x04 | ||||
| 	PAGE_WRITECOPY         = 0x08 | ||||
| 	PAGE_EXECUTE_READ      = 0x20 | ||||
| 	PAGE_EXECUTE_READWRITE = 0x40 | ||||
| 	PAGE_EXECUTE_WRITECOPY = 0x80 | ||||
| 	PAGE_NOACCESS          = 0x00000001 | ||||
| 	PAGE_READONLY          = 0x00000002 | ||||
| 	PAGE_READWRITE         = 0x00000004 | ||||
| 	PAGE_WRITECOPY         = 0x00000008 | ||||
| 	PAGE_EXECUTE           = 0x00000010 | ||||
| 	PAGE_EXECUTE_READ      = 0x00000020 | ||||
| 	PAGE_EXECUTE_READWRITE = 0x00000040 | ||||
| 	PAGE_EXECUTE_WRITECOPY = 0x00000080 | ||||
| 	PAGE_GUARD             = 0x00000100 | ||||
| 	PAGE_NOCACHE           = 0x00000200 | ||||
| 	PAGE_WRITECOMBINE      = 0x00000400 | ||||
| 	PAGE_TARGETS_INVALID   = 0x40000000 | ||||
| 	PAGE_TARGETS_NO_UPDATE = 0x40000000 | ||||
| 
 | ||||
| 	QUOTA_LIMITS_HARDWS_MIN_DISABLE = 0x00000002 | ||||
| 	QUOTA_LIMITS_HARDWS_MIN_ENABLE  = 0x00000001 | ||||
| 	QUOTA_LIMITS_HARDWS_MAX_DISABLE = 0x00000008 | ||||
| 	QUOTA_LIMITS_HARDWS_MAX_ENABLE  = 0x00000004 | ||||
| ) | ||||
| 
 | ||||
| type MemoryBasicInformation struct { | ||||
| 	BaseAddress       uintptr | ||||
| 	AllocationBase    uintptr | ||||
| 	AllocationProtect uint32 | ||||
| 	PartitionId       uint16 | ||||
| 	RegionSize        uintptr | ||||
| 	State             uint32 | ||||
| 	Protect           uint32 | ||||
| 	Type              uint32 | ||||
| } | ||||
|  | ||||
							
								
								
									
										7
									
								
								vendor/golang.org/x/sys/windows/mkerrors.bash
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								vendor/golang.org/x/sys/windows/mkerrors.bash
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -9,6 +9,8 @@ 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; } | ||||
| ntstatus="$(printf '%s\n' "/mnt/c/Program Files (x86)/Windows Kits/"/*/Include/*/shared/ntstatus.h | sort -Vr | head -n 1)" | ||||
| [[ -n $ntstatus ]] || { echo "Unable to find ntstatus.h" >&2; exit 1; } | ||||
| 
 | ||||
| declare -A errors | ||||
| 
 | ||||
| @ -59,5 +61,10 @@ declare -A errors | ||||
| 		echo "$key $vtype = $value" | ||||
| 	done < "$winerror" | ||||
| 
 | ||||
| 	while read -r line; do | ||||
| 		[[ $line =~ ^#define\ (STATUS_[^\s]+)\ +\(\(NTSTATUS\)((0x)?[0-9a-fA-F]+)L?\) ]] || continue | ||||
| 		echo "${BASH_REMATCH[1]} NTStatus = ${BASH_REMATCH[2]}" | ||||
| 	done < "$ntstatus" | ||||
| 
 | ||||
| 	echo ")" | ||||
| } | gofmt > "zerrors_windows.go" | ||||
|  | ||||
							
								
								
									
										3
									
								
								vendor/golang.org/x/sys/windows/mksyscall.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								vendor/golang.org/x/sys/windows/mksyscall.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -2,8 +2,9 @@ | ||||
| // Use of this source code is governed by a BSD-style | ||||
| // license that can be found in the LICENSE file. | ||||
| 
 | ||||
| //go:build generate | ||||
| // +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 setupapi_windows.go | ||||
|  | ||||
							
								
								
									
										1
									
								
								vendor/golang.org/x/sys/windows/race.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/golang.org/x/sys/windows/race.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -2,6 +2,7 @@ | ||||
| // Use of this source code is governed by a BSD-style | ||||
| // license that can be found in the LICENSE file. | ||||
| 
 | ||||
| //go:build windows && race | ||||
| // +build windows,race | ||||
| 
 | ||||
| package windows | ||||
|  | ||||
							
								
								
									
										1
									
								
								vendor/golang.org/x/sys/windows/race0.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/golang.org/x/sys/windows/race0.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -2,6 +2,7 @@ | ||||
| // Use of this source code is governed by a BSD-style | ||||
| // license that can be found in the LICENSE file. | ||||
| 
 | ||||
| //go:build windows && !race | ||||
| // +build windows,!race | ||||
| 
 | ||||
| package windows | ||||
|  | ||||
							
								
								
									
										10
									
								
								vendor/golang.org/x/sys/windows/registry/key.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								vendor/golang.org/x/sys/windows/registry/key.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -2,6 +2,7 @@ | ||||
| // Use of this source code is governed by a BSD-style | ||||
| // license that can be found in the LICENSE file. | ||||
| 
 | ||||
| //go:build windows | ||||
| // +build windows | ||||
| 
 | ||||
| // Package registry provides access to the Windows registry. | ||||
| @ -19,11 +20,11 @@ | ||||
| //		log.Fatal(err) | ||||
| //	} | ||||
| //	fmt.Printf("Windows system root is %q\n", s) | ||||
| // | ||||
| package registry | ||||
| 
 | ||||
| import ( | ||||
| 	"io" | ||||
| 	"runtime" | ||||
| 	"syscall" | ||||
| 	"time" | ||||
| ) | ||||
| @ -113,6 +114,13 @@ func OpenRemoteKey(pcname string, k Key) (Key, error) { | ||||
| // The parameter n controls the number of returned names, | ||||
| // analogous to the way os.File.Readdirnames works. | ||||
| func (k Key) ReadSubKeyNames(n int) ([]string, error) { | ||||
| 	// RegEnumKeyEx must be called repeatedly and to completion. | ||||
| 	// During this time, this goroutine cannot migrate away from | ||||
| 	// its current thread. See https://golang.org/issue/49320 and | ||||
| 	// https://golang.org/issue/49466. | ||||
| 	runtime.LockOSThread() | ||||
| 	defer runtime.UnlockOSThread() | ||||
| 
 | ||||
| 	names := make([]string, 0) | ||||
| 	// Registry key size limit is 255 bytes and described there: | ||||
| 	// https://msdn.microsoft.com/library/windows/desktop/ms724872.aspx | ||||
|  | ||||
							
								
								
									
										3
									
								
								vendor/golang.org/x/sys/windows/registry/mksyscall.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								vendor/golang.org/x/sys/windows/registry/mksyscall.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -2,8 +2,9 @@ | ||||
| // Use of this source code is governed by a BSD-style | ||||
| // license that can be found in the LICENSE file. | ||||
| 
 | ||||
| //go:build generate | ||||
| // +build generate | ||||
| 
 | ||||
| package registry | ||||
| 
 | ||||
| //go:generate go run $GOROOT/src/syscall/mksyscall_windows.go -output zsyscall_windows.go syscall.go | ||||
| //go:generate go run golang.org/x/sys/windows/mkwinsyscall -output zsyscall_windows.go syscall.go | ||||
|  | ||||
							
								
								
									
										1
									
								
								vendor/golang.org/x/sys/windows/registry/syscall.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/golang.org/x/sys/windows/registry/syscall.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -2,6 +2,7 @@ | ||||
| // Use of this source code is governed by a BSD-style | ||||
| // license that can be found in the LICENSE file. | ||||
| 
 | ||||
| //go:build windows | ||||
| // +build windows | ||||
| 
 | ||||
| package registry | ||||
|  | ||||
							
								
								
									
										12
									
								
								vendor/golang.org/x/sys/windows/registry/value.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								vendor/golang.org/x/sys/windows/registry/value.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -2,6 +2,7 @@ | ||||
| // Use of this source code is governed by a BSD-style | ||||
| // license that can be found in the LICENSE file. | ||||
| 
 | ||||
| //go:build windows | ||||
| // +build windows | ||||
| 
 | ||||
| package registry | ||||
| @ -108,7 +109,7 @@ func (k Key) GetStringValue(name string) (val string, valtype uint32, err error) | ||||
| 	if len(data) == 0 { | ||||
| 		return "", typ, nil | ||||
| 	} | ||||
| 	u := (*[1 << 29]uint16)(unsafe.Pointer(&data[0]))[:] | ||||
| 	u := (*[1 << 29]uint16)(unsafe.Pointer(&data[0]))[: len(data)/2 : len(data)/2] | ||||
| 	return syscall.UTF16ToString(u), typ, nil | ||||
| } | ||||
| 
 | ||||
| @ -185,8 +186,7 @@ func ExpandString(value string) (string, error) { | ||||
| 			return "", err | ||||
| 		} | ||||
| 		if n <= uint32(len(r)) { | ||||
| 			u := (*[1 << 29]uint16)(unsafe.Pointer(&r[0]))[:] | ||||
| 			return syscall.UTF16ToString(u), nil | ||||
| 			return syscall.UTF16ToString(r[:n]), nil | ||||
| 		} | ||||
| 		r = make([]uint16, n) | ||||
| 	} | ||||
| @ -208,7 +208,7 @@ func (k Key) GetStringsValue(name string) (val []string, valtype uint32, err err | ||||
| 	if len(data) == 0 { | ||||
| 		return nil, typ, nil | ||||
| 	} | ||||
| 	p := (*[1 << 29]uint16)(unsafe.Pointer(&data[0]))[:len(data)/2] | ||||
| 	p := (*[1 << 29]uint16)(unsafe.Pointer(&data[0]))[: len(data)/2 : len(data)/2] | ||||
| 	if len(p) == 0 { | ||||
| 		return nil, typ, nil | ||||
| 	} | ||||
| @ -299,7 +299,7 @@ func (k Key) setStringValue(name string, valtype uint32, value string) error { | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	buf := (*[1 << 29]byte)(unsafe.Pointer(&v[0]))[:len(v)*2] | ||||
| 	buf := (*[1 << 29]byte)(unsafe.Pointer(&v[0]))[: len(v)*2 : len(v)*2] | ||||
| 	return k.setValue(name, valtype, buf) | ||||
| } | ||||
| 
 | ||||
| @ -329,7 +329,7 @@ func (k Key) SetStringsValue(name string, value []string) error { | ||||
| 		ss += s + "\x00" | ||||
| 	} | ||||
| 	v := utf16.Encode([]rune(ss + "\x00")) | ||||
| 	buf := (*[1 << 29]byte)(unsafe.Pointer(&v[0]))[:len(v)*2] | ||||
| 	buf := (*[1 << 29]byte)(unsafe.Pointer(&v[0]))[: len(v)*2 : len(v)*2] | ||||
| 	return k.setValue(name, MULTI_SZ, buf) | ||||
| } | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										39
									
								
								vendor/golang.org/x/sys/windows/registry/zsyscall_windows.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										39
									
								
								vendor/golang.org/x/sys/windows/registry/zsyscall_windows.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -19,6 +19,7 @@ const ( | ||||
| 
 | ||||
| var ( | ||||
| 	errERROR_IO_PENDING error = syscall.Errno(errnoERROR_IO_PENDING) | ||||
| 	errERROR_EINVAL     error = syscall.EINVAL | ||||
| ) | ||||
| 
 | ||||
| // errnoErr returns common boxed Errno values, to prevent | ||||
| @ -26,7 +27,7 @@ var ( | ||||
| func errnoErr(e syscall.Errno) error { | ||||
| 	switch e { | ||||
| 	case 0: | ||||
| 		return nil | ||||
| 		return errERROR_EINVAL | ||||
| 	case errnoERROR_IO_PENDING: | ||||
| 		return errERROR_IO_PENDING | ||||
| 	} | ||||
| @ -40,16 +41,24 @@ var ( | ||||
| 	modadvapi32 = windows.NewLazySystemDLL("advapi32.dll") | ||||
| 	modkernel32 = windows.NewLazySystemDLL("kernel32.dll") | ||||
| 
 | ||||
| 	procRegConnectRegistryW       = modadvapi32.NewProc("RegConnectRegistryW") | ||||
| 	procRegCreateKeyExW           = modadvapi32.NewProc("RegCreateKeyExW") | ||||
| 	procRegDeleteKeyW             = modadvapi32.NewProc("RegDeleteKeyW") | ||||
| 	procRegSetValueExW            = modadvapi32.NewProc("RegSetValueExW") | ||||
| 	procRegEnumValueW             = modadvapi32.NewProc("RegEnumValueW") | ||||
| 	procRegDeleteValueW           = modadvapi32.NewProc("RegDeleteValueW") | ||||
| 	procRegEnumValueW             = modadvapi32.NewProc("RegEnumValueW") | ||||
| 	procRegLoadMUIStringW         = modadvapi32.NewProc("RegLoadMUIStringW") | ||||
| 	procRegConnectRegistryW       = modadvapi32.NewProc("RegConnectRegistryW") | ||||
| 	procRegSetValueExW            = modadvapi32.NewProc("RegSetValueExW") | ||||
| 	procExpandEnvironmentStringsW = modkernel32.NewProc("ExpandEnvironmentStringsW") | ||||
| ) | ||||
| 
 | ||||
| func regConnectRegistry(machinename *uint16, key syscall.Handle, result *syscall.Handle) (regerrno error) { | ||||
| 	r0, _, _ := syscall.Syscall(procRegConnectRegistryW.Addr(), 3, uintptr(unsafe.Pointer(machinename)), uintptr(key), uintptr(unsafe.Pointer(result))) | ||||
| 	if r0 != 0 { | ||||
| 		regerrno = syscall.Errno(r0) | ||||
| 	} | ||||
| 	return | ||||
| } | ||||
| 
 | ||||
| func regCreateKeyEx(key syscall.Handle, subkey *uint16, reserved uint32, class *uint16, options uint32, desired uint32, sa *syscall.SecurityAttributes, result *syscall.Handle, disposition *uint32) (regerrno error) { | ||||
| 	r0, _, _ := syscall.Syscall9(procRegCreateKeyExW.Addr(), 9, uintptr(key), uintptr(unsafe.Pointer(subkey)), uintptr(reserved), uintptr(unsafe.Pointer(class)), uintptr(options), uintptr(desired), uintptr(unsafe.Pointer(sa)), uintptr(unsafe.Pointer(result)), uintptr(unsafe.Pointer(disposition))) | ||||
| 	if r0 != 0 { | ||||
| @ -66,8 +75,8 @@ func regDeleteKey(key syscall.Handle, subkey *uint16) (regerrno error) { | ||||
| 	return | ||||
| } | ||||
| 
 | ||||
| func regSetValueEx(key syscall.Handle, valueName *uint16, reserved uint32, vtype uint32, buf *byte, bufsize uint32) (regerrno error) { | ||||
| 	r0, _, _ := syscall.Syscall6(procRegSetValueExW.Addr(), 6, uintptr(key), uintptr(unsafe.Pointer(valueName)), uintptr(reserved), uintptr(vtype), uintptr(unsafe.Pointer(buf)), uintptr(bufsize)) | ||||
| func regDeleteValue(key syscall.Handle, name *uint16) (regerrno error) { | ||||
| 	r0, _, _ := syscall.Syscall(procRegDeleteValueW.Addr(), 2, uintptr(key), uintptr(unsafe.Pointer(name)), 0) | ||||
| 	if r0 != 0 { | ||||
| 		regerrno = syscall.Errno(r0) | ||||
| 	} | ||||
| @ -82,14 +91,6 @@ func regEnumValue(key syscall.Handle, index uint32, name *uint16, nameLen *uint3 | ||||
| 	return | ||||
| } | ||||
| 
 | ||||
| func regDeleteValue(key syscall.Handle, name *uint16) (regerrno error) { | ||||
| 	r0, _, _ := syscall.Syscall(procRegDeleteValueW.Addr(), 2, uintptr(key), uintptr(unsafe.Pointer(name)), 0) | ||||
| 	if r0 != 0 { | ||||
| 		regerrno = syscall.Errno(r0) | ||||
| 	} | ||||
| 	return | ||||
| } | ||||
| 
 | ||||
| func regLoadMUIString(key syscall.Handle, name *uint16, buf *uint16, buflen uint32, buflenCopied *uint32, flags uint32, dir *uint16) (regerrno error) { | ||||
| 	r0, _, _ := syscall.Syscall9(procRegLoadMUIStringW.Addr(), 7, uintptr(key), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(buf)), uintptr(buflen), uintptr(unsafe.Pointer(buflenCopied)), uintptr(flags), uintptr(unsafe.Pointer(dir)), 0, 0) | ||||
| 	if r0 != 0 { | ||||
| @ -98,8 +99,8 @@ func regLoadMUIString(key syscall.Handle, name *uint16, buf *uint16, buflen uint | ||||
| 	return | ||||
| } | ||||
| 
 | ||||
| func regConnectRegistry(machinename *uint16, key syscall.Handle, result *syscall.Handle) (regerrno error) { | ||||
| 	r0, _, _ := syscall.Syscall(procRegConnectRegistryW.Addr(), 3, uintptr(unsafe.Pointer(machinename)), uintptr(key), uintptr(unsafe.Pointer(result))) | ||||
| func regSetValueEx(key syscall.Handle, valueName *uint16, reserved uint32, vtype uint32, buf *byte, bufsize uint32) (regerrno error) { | ||||
| 	r0, _, _ := syscall.Syscall6(procRegSetValueExW.Addr(), 6, uintptr(key), uintptr(unsafe.Pointer(valueName)), uintptr(reserved), uintptr(vtype), uintptr(unsafe.Pointer(buf)), uintptr(bufsize)) | ||||
| 	if r0 != 0 { | ||||
| 		regerrno = syscall.Errno(r0) | ||||
| 	} | ||||
| @ -110,11 +111,7 @@ func expandEnvironmentStrings(src *uint16, dst *uint16, size uint32) (n uint32, | ||||
| 	r0, _, e1 := syscall.Syscall(procExpandEnvironmentStringsW.Addr(), 3, uintptr(unsafe.Pointer(src)), uintptr(unsafe.Pointer(dst)), uintptr(size)) | ||||
| 	n = uint32(r0) | ||||
| 	if n == 0 { | ||||
| 		if e1 != 0 { | ||||
| 			err = errnoErr(e1) | ||||
| 		} else { | ||||
| 			err = syscall.EINVAL | ||||
| 		} | ||||
| 		err = errnoErr(e1) | ||||
| 	} | ||||
| 	return | ||||
| } | ||||
|  | ||||
							
								
								
									
										646
									
								
								vendor/golang.org/x/sys/windows/security_windows.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										646
									
								
								vendor/golang.org/x/sys/windows/security_windows.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -7,14 +7,8 @@ package windows | ||||
| import ( | ||||
| 	"syscall" | ||||
| 	"unsafe" | ||||
| ) | ||||
| 
 | ||||
| const ( | ||||
| 	STANDARD_RIGHTS_REQUIRED = 0xf0000 | ||||
| 	STANDARD_RIGHTS_READ     = 0x20000 | ||||
| 	STANDARD_RIGHTS_WRITE    = 0x20000 | ||||
| 	STANDARD_RIGHTS_EXECUTE  = 0x20000 | ||||
| 	STANDARD_RIGHTS_ALL      = 0x1F0000 | ||||
| 	"golang.org/x/sys/internal/unsafeheader" | ||||
| ) | ||||
| 
 | ||||
| const ( | ||||
| @ -235,16 +229,15 @@ 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. | ||||
| @ -631,6 +624,7 @@ func (tml *Tokenmandatorylabel) Size() uint32 { | ||||
| 
 | ||||
| // Authorization Functions | ||||
| //sys	checkTokenMembership(tokenHandle Token, sidToCheck *SID, isMember *int32) (err error) = advapi32.CheckTokenMembership | ||||
| //sys	isTokenRestricted(tokenHandle Token) (ret bool, err error) [!failretval] = advapi32.IsTokenRestricted | ||||
| //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 | ||||
| @ -644,6 +638,8 @@ func (tml *Tokenmandatorylabel) Size() uint32 { | ||||
| //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 | ||||
| @ -654,21 +650,16 @@ func (tml *Tokenmandatorylabel) Size() uint32 { | ||||
| // system-related operations on the local computer. | ||||
| type Token Handle | ||||
| 
 | ||||
| // OpenCurrentProcessToken opens the access token | ||||
| // associated with current process. It is a real | ||||
| // token that needs to be closed, unlike | ||||
| // GetCurrentProcessToken. | ||||
| // 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 | ||||
| @ -785,8 +776,8 @@ func (token Token) GetLinkedToken() (Token, error) { | ||||
| 	return linkedToken, nil | ||||
| } | ||||
| 
 | ||||
| // GetSystemDirectory retrieves path to current location of the system | ||||
| // directory, which is typically, though not always, C:\Windows\System32. | ||||
| // 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 { | ||||
| @ -802,6 +793,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 | ||||
| @ -811,6 +838,16 @@ func (t Token) IsMember(sid *SID) (bool, error) { | ||||
| 	return b != 0, nil | ||||
| } | ||||
| 
 | ||||
| // IsRestricted reports whether the access token t is a restricted token. | ||||
| func (t Token) IsRestricted() (isRestricted bool, err error) { | ||||
| 	isRestricted, err = isTokenRestricted(t) | ||||
| 	if !isRestricted && err == syscall.EINVAL { | ||||
| 		// If err is EINVAL, this returned ERROR_SUCCESS indicating a non-restricted token. | ||||
| 		err = nil | ||||
| 	} | ||||
| 	return | ||||
| } | ||||
| 
 | ||||
| const ( | ||||
| 	WTS_CONSOLE_CONNECT        = 0x1 | ||||
| 	WTS_CONSOLE_DISCONNECT     = 0x2 | ||||
| @ -852,3 +889,556 @@ type WTS_SESSION_INFO struct { | ||||
| //sys WTSQueryUserToken(session uint32, token *Token) (err error) = wtsapi32.WTSQueryUserToken | ||||
| //sys WTSEnumerateSessions(handle Handle, reserved uint32, version uint32, sessions **WTS_SESSION_INFO, count *uint32) (err error) = wtsapi32.WTSEnumerateSessionsW | ||||
| //sys WTSFreeMemory(ptr uintptr) = wtsapi32.WTSFreeMemory | ||||
| //sys WTSGetActiveConsoleSessionId() (sessionID uint32) | ||||
| 
 | ||||
| type ACL struct { | ||||
| 	aclRevision byte | ||||
| 	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 SECURITY_QUALITY_OF_SERVICE struct { | ||||
| 	Length              uint32 | ||||
| 	ImpersonationLevel  uint32 | ||||
| 	ContextTrackingMode byte | ||||
| 	EffectiveOnly       byte | ||||
| } | ||||
| 
 | ||||
| // Constants for the ContextTrackingMode field of SECURITY_QUALITY_OF_SERVICE. | ||||
| const ( | ||||
| 	SECURITY_STATIC_TRACKING  = 0 | ||||
| 	SECURITY_DYNAMIC_TRACKING = 1 | ||||
| ) | ||||
| 
 | ||||
| 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) (ret error) = 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	SetKernelObjectSecurity(handle Handle, securityInformation SECURITY_INFORMATION, securityDescriptor *SECURITY_DESCRIPTOR) (err error) = advapi32.SetKernelObjectSecurity | ||||
| 
 | ||||
| //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 UTF16PtrToString(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 { | ||||
| 	sdLen := int(selfRelativeSD.Length()) | ||||
| 	const min = int(unsafe.Sizeof(SECURITY_DESCRIPTOR{})) | ||||
| 	if sdLen < min { | ||||
| 		sdLen = min | ||||
| 	} | ||||
| 
 | ||||
| 	var src []byte | ||||
| 	h := (*unsafeheader.Slice)(unsafe.Pointer(&src)) | ||||
| 	h.Data = unsafe.Pointer(selfRelativeSD) | ||||
| 	h.Len = sdLen | ||||
| 	h.Cap = sdLen | ||||
| 
 | ||||
| 	const psize = int(unsafe.Sizeof(uintptr(0))) | ||||
| 
 | ||||
| 	var dst []byte | ||||
| 	h = (*unsafeheader.Slice)(unsafe.Pointer(&dst)) | ||||
| 	alloc := make([]uintptr, (sdLen+psize-1)/psize) | ||||
| 	h.Data = (*unsafeheader.Slice)(unsafe.Pointer(&alloc)).Data | ||||
| 	h.Len = sdLen | ||||
| 	h.Cap = sdLen | ||||
| 
 | ||||
| 	copy(dst, src) | ||||
| 	return (*SECURITY_DESCRIPTOR)(unsafe.Pointer(&dst[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):len(aclBytes)]) | ||||
| 	return (*ACL)(unsafe.Pointer(&aclBytes[0])), nil | ||||
| } | ||||
|  | ||||
							
								
								
									
										26
									
								
								vendor/golang.org/x/sys/windows/service.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										26
									
								
								vendor/golang.org/x/sys/windows/service.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -2,6 +2,7 @@ | ||||
| // Use of this source code is governed by a BSD-style | ||||
| // license that can be found in the LICENSE file. | ||||
| 
 | ||||
| //go:build windows | ||||
| // +build windows | ||||
| 
 | ||||
| package windows | ||||
| @ -16,8 +17,6 @@ const ( | ||||
| 	SC_MANAGER_ALL_ACCESS         = 0xf003f | ||||
| ) | ||||
| 
 | ||||
| //sys	OpenSCManager(machineName *uint16, databaseName *uint16, access uint32) (handle Handle, err error) [failretval==0] = advapi32.OpenSCManagerW | ||||
| 
 | ||||
| const ( | ||||
| 	SERVICE_KERNEL_DRIVER       = 1 | ||||
| 	SERVICE_FILE_SYSTEM_DRIVER  = 2 | ||||
| @ -65,6 +64,7 @@ const ( | ||||
| 	SERVICE_ACCEPT_HARDWAREPROFILECHANGE = 32 | ||||
| 	SERVICE_ACCEPT_POWEREVENT            = 64 | ||||
| 	SERVICE_ACCEPT_SESSIONCHANGE         = 128 | ||||
| 	SERVICE_ACCEPT_PRESHUTDOWN           = 256 | ||||
| 
 | ||||
| 	SERVICE_CONTROL_STOP                  = 1 | ||||
| 	SERVICE_CONTROL_PAUSE                 = 2 | ||||
| @ -80,6 +80,7 @@ const ( | ||||
| 	SERVICE_CONTROL_HARDWAREPROFILECHANGE = 12 | ||||
| 	SERVICE_CONTROL_POWEREVENT            = 13 | ||||
| 	SERVICE_CONTROL_SESSIONCHANGE         = 14 | ||||
| 	SERVICE_CONTROL_PRESHUTDOWN           = 15 | ||||
| 
 | ||||
| 	SERVICE_ACTIVE    = 1 | ||||
| 	SERVICE_INACTIVE  = 2 | ||||
| @ -126,6 +127,18 @@ const ( | ||||
| 	SERVICE_NOTIFY_CREATED          = 0x00000080 | ||||
| 	SERVICE_NOTIFY_DELETED          = 0x00000100 | ||||
| 	SERVICE_NOTIFY_DELETE_PENDING   = 0x00000200 | ||||
| 
 | ||||
| 	SC_EVENT_DATABASE_CHANGE = 0 | ||||
| 	SC_EVENT_PROPERTY_CHANGE = 1 | ||||
| 	SC_EVENT_STATUS_CHANGE   = 2 | ||||
| 
 | ||||
| 	SERVICE_START_REASON_DEMAND             = 0x00000001 | ||||
| 	SERVICE_START_REASON_AUTO               = 0x00000002 | ||||
| 	SERVICE_START_REASON_TRIGGER            = 0x00000004 | ||||
| 	SERVICE_START_REASON_RESTART_ON_FAILURE = 0x00000008 | ||||
| 	SERVICE_START_REASON_DELAYEDAUTO        = 0x00000010 | ||||
| 
 | ||||
| 	SERVICE_DYNAMIC_INFORMATION_LEVEL_START_REASON = 1 | ||||
| ) | ||||
| 
 | ||||
| type SERVICE_STATUS struct { | ||||
| @ -159,6 +172,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 | ||||
| @ -206,6 +223,7 @@ type QUERY_SERVICE_LOCK_STATUS struct { | ||||
| 	LockDuration uint32 | ||||
| } | ||||
| 
 | ||||
| //sys	OpenSCManager(machineName *uint16, databaseName *uint16, access uint32) (handle Handle, err error) [failretval==0] = advapi32.OpenSCManagerW | ||||
| //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 | ||||
| @ -223,3 +241,7 @@ type QUERY_SERVICE_LOCK_STATUS struct { | ||||
| //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	NotifyServiceStatusChange(service Handle, notifyMask uint32, notifier *SERVICE_NOTIFY) (ret error) = advapi32.NotifyServiceStatusChangeW | ||||
| //sys	SubscribeServiceChangeNotifications(service Handle, eventType uint32, callback uintptr, callbackCtx uintptr, subscription *uintptr) (ret error) = sechost.SubscribeServiceChangeNotifications? | ||||
| //sys	UnsubscribeServiceChangeNotifications(subscription uintptr) = sechost.UnsubscribeServiceChangeNotifications? | ||||
| //sys	RegisterServiceCtrlHandlerEx(serviceName *uint16, handlerProc uintptr, context uintptr) (handle Handle, err error) = advapi32.RegisterServiceCtrlHandlerExW | ||||
| //sys	QueryServiceDynamicInformation(service Handle, infoLevel uint32, dynamicInfo unsafe.Pointer) (err error) = advapi32.QueryServiceDynamicInformation? | ||||
|  | ||||
							
								
								
									
										1425
									
								
								vendor/golang.org/x/sys/windows/setupapi_windows.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1425
									
								
								vendor/golang.org/x/sys/windows/setupapi_windows.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1
									
								
								vendor/golang.org/x/sys/windows/str.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/golang.org/x/sys/windows/str.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -2,6 +2,7 @@ | ||||
| // Use of this source code is governed by a BSD-style | ||||
| // license that can be found in the LICENSE file. | ||||
| 
 | ||||
| //go:build windows | ||||
| // +build windows | ||||
| 
 | ||||
| package windows | ||||
|  | ||||
							
								
								
									
										39
									
								
								vendor/golang.org/x/sys/windows/syscall.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										39
									
								
								vendor/golang.org/x/sys/windows/syscall.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -2,6 +2,7 @@ | ||||
| // Use of this source code is governed by a BSD-style | ||||
| // license that can be found in the LICENSE file. | ||||
| 
 | ||||
| //go:build windows | ||||
| // +build windows | ||||
| 
 | ||||
| // Package windows contains an interface to the low-level operating system | ||||
| @ -25,17 +26,18 @@ | ||||
| package windows // import "golang.org/x/sys/windows" | ||||
| 
 | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"strings" | ||||
| 	"syscall" | ||||
| 	"unsafe" | ||||
| ) | ||||
| 
 | ||||
| // ByteSliceFromString returns a NUL-terminated slice of bytes | ||||
| // containing the text of s. If s contains a NUL byte at any | ||||
| // location, it returns (nil, syscall.EINVAL). | ||||
| func ByteSliceFromString(s string) ([]byte, error) { | ||||
| 	for i := 0; i < len(s); i++ { | ||||
| 		if s[i] == 0 { | ||||
| 			return nil, syscall.EINVAL | ||||
| 		} | ||||
| 	if strings.IndexByte(s, 0) != -1 { | ||||
| 		return nil, syscall.EINVAL | ||||
| 	} | ||||
| 	a := make([]byte, len(s)+1) | ||||
| 	copy(a, s) | ||||
| @ -53,6 +55,35 @@ func BytePtrFromString(s string) (*byte, error) { | ||||
| 	return &a[0], nil | ||||
| } | ||||
| 
 | ||||
| // ByteSliceToString returns a string form of the text represented by the slice s, with a terminating NUL and any | ||||
| // bytes after the NUL removed. | ||||
| func ByteSliceToString(s []byte) string { | ||||
| 	if i := bytes.IndexByte(s, 0); i != -1 { | ||||
| 		s = s[:i] | ||||
| 	} | ||||
| 	return string(s) | ||||
| } | ||||
| 
 | ||||
| // BytePtrToString takes a pointer to a sequence of text and returns the corresponding string. | ||||
| // If the pointer is nil, it returns the empty string. It assumes that the text sequence is terminated | ||||
| // at a zero byte; if the zero byte is not present, the program may crash. | ||||
| func BytePtrToString(p *byte) string { | ||||
| 	if p == nil { | ||||
| 		return "" | ||||
| 	} | ||||
| 	if *p == 0 { | ||||
| 		return "" | ||||
| 	} | ||||
| 
 | ||||
| 	// Find NUL terminator. | ||||
| 	n := 0 | ||||
| 	for ptr := unsafe.Pointer(p); *(*byte)(ptr) != 0; n++ { | ||||
| 		ptr = unsafe.Pointer(uintptr(ptr) + 1) | ||||
| 	} | ||||
| 
 | ||||
| 	return string(unsafe.Slice(p, n)) | ||||
| } | ||||
| 
 | ||||
| // Single-word zero for use when we need a valid pointer to 0 bytes. | ||||
| // See mksyscall.pl. | ||||
| var _zero uintptr | ||||
|  | ||||
							
								
								
									
										653
									
								
								vendor/golang.org/x/sys/windows/syscall_windows.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										653
									
								
								vendor/golang.org/x/sys/windows/syscall_windows.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -8,17 +8,24 @@ package windows | ||||
| 
 | ||||
| import ( | ||||
| 	errorspkg "errors" | ||||
| 	"fmt" | ||||
| 	"runtime" | ||||
| 	"strings" | ||||
| 	"sync" | ||||
| 	"syscall" | ||||
| 	"time" | ||||
| 	"unicode/utf16" | ||||
| 	"unsafe" | ||||
| 
 | ||||
| 	"golang.org/x/sys/internal/unsafeheader" | ||||
| ) | ||||
| 
 | ||||
| type Handle uintptr | ||||
| type HWND uintptr | ||||
| 
 | ||||
| const ( | ||||
| 	InvalidHandle = ^Handle(0) | ||||
| 	InvalidHWND   = ^HWND(0) | ||||
| 
 | ||||
| 	// Flags for DefineDosDevice. | ||||
| 	DDD_EXACT_MATCH_ON_REMOVE = 0x00000004 | ||||
| @ -57,9 +64,12 @@ const ( | ||||
| 	FILE_VOLUME_IS_COMPRESSED         = 0x00008000 | ||||
| 	FILE_VOLUME_QUOTAS                = 0x00000020 | ||||
| 
 | ||||
| 	// Return values of SleepEx and other APC functions | ||||
| 	STATUS_USER_APC    = 0x000000C0 | ||||
| 	WAIT_IO_COMPLETION = STATUS_USER_APC | ||||
| 	// Flags for LockFileEx. | ||||
| 	LOCKFILE_FAIL_IMMEDIATELY = 0x00000001 | ||||
| 	LOCKFILE_EXCLUSIVE_LOCK   = 0x00000002 | ||||
| 
 | ||||
| 	// Return value of SleepEx and other APC functions | ||||
| 	WAIT_IO_COMPLETION = 0x000000C0 | ||||
| ) | ||||
| 
 | ||||
| // StringToUTF16 is deprecated. Use UTF16FromString instead. | ||||
| @ -77,20 +87,18 @@ func StringToUTF16(s string) []uint16 { | ||||
| // s, with a terminating NUL added. If s contains a NUL byte at any | ||||
| // location, it returns (nil, syscall.EINVAL). | ||||
| func UTF16FromString(s string) ([]uint16, error) { | ||||
| 	for i := 0; i < len(s); i++ { | ||||
| 		if s[i] == 0 { | ||||
| 			return nil, syscall.EINVAL | ||||
| 		} | ||||
| 	if strings.IndexByte(s, 0) != -1 { | ||||
| 		return nil, syscall.EINVAL | ||||
| 	} | ||||
| 	return utf16.Encode([]rune(s + "\x00")), nil | ||||
| } | ||||
| 
 | ||||
| // UTF16ToString returns the UTF-8 encoding of the UTF-16 sequence s, | ||||
| // with a terminating NUL removed. | ||||
| // with a terminating NUL and any bytes after the NUL removed. | ||||
| func UTF16ToString(s []uint16) string { | ||||
| 	for i, v := range s { | ||||
| 		if v == 0 { | ||||
| 			s = s[0:i] | ||||
| 			s = s[:i] | ||||
| 			break | ||||
| 		} | ||||
| 	} | ||||
| @ -113,6 +121,26 @@ func UTF16PtrFromString(s string) (*uint16, error) { | ||||
| 	return &a[0], nil | ||||
| } | ||||
| 
 | ||||
| // UTF16PtrToString takes a pointer to a UTF-16 sequence and returns the corresponding UTF-8 encoded string. | ||||
| // If the pointer is nil, it returns the empty string. It assumes that the UTF-16 sequence is terminated | ||||
| // at a zero word; if the zero word is not present, the program may crash. | ||||
| func UTF16PtrToString(p *uint16) string { | ||||
| 	if p == nil { | ||||
| 		return "" | ||||
| 	} | ||||
| 	if *p == 0 { | ||||
| 		return "" | ||||
| 	} | ||||
| 
 | ||||
| 	// Find NUL terminator. | ||||
| 	n := 0 | ||||
| 	for ptr := unsafe.Pointer(p); *(*uint16)(ptr) != 0; n++ { | ||||
| 		ptr = unsafe.Pointer(uintptr(ptr) + unsafe.Sizeof(*p)) | ||||
| 	} | ||||
| 
 | ||||
| 	return string(utf16.Decode(unsafe.Slice(p, n))) | ||||
| } | ||||
| 
 | ||||
| func Getpagesize() int { return 4096 } | ||||
| 
 | ||||
| // NewCallback converts a Go function to a function pointer conforming to the stdcall calling convention. | ||||
| @ -136,13 +164,23 @@ 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	SetDefaultDllDirectories(directoryFlags uint32) (err error) | ||||
| //sys	SetDllDirectory(path string) (err error) = kernel32.SetDllDirectoryW | ||||
| //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	IsWow64Process(handle Handle, isWow64 *bool) (err error) = IsWow64Process | ||||
| //sys	IsWow64Process2(handle Handle, processMachine *uint16, nativeMachine *uint16) (err error) = IsWow64Process2? | ||||
| //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	CreateNamedPipe(name *uint16, flags uint32, pipeMode uint32, maxInstances uint32, outSize uint32, inSize uint32, defaultTimeout uint32, sa *SecurityAttributes) (handle Handle, err error)  [failretval==InvalidHandle] = CreateNamedPipeW | ||||
| //sys	ConnectNamedPipe(pipe Handle, overlapped *Overlapped) (err error) | ||||
| //sys	GetNamedPipeInfo(pipe Handle, flags *uint32, outSize *uint32, inSize *uint32, maxInstances *uint32) (err error) | ||||
| //sys	GetNamedPipeHandleState(pipe Handle, state *uint32, curInstances *uint32, maxCollectionCount *uint32, collectDataTimeout *uint32, userName *uint16, maxUserNameSize uint32) (err error) = GetNamedPipeHandleStateW | ||||
| //sys	SetNamedPipeHandleState(pipe Handle, state *uint32, maxCollectionCount *uint32, collectDataTimeout *uint32) (err error) = SetNamedPipeHandleState | ||||
| //sys	readFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) (err error) = ReadFile | ||||
| //sys	writeFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) (err error) = WriteFile | ||||
| //sys	GetOverlappedResult(handle Handle, overlapped *Overlapped, done *uint32, wait bool) (err error) | ||||
| //sys	SetFilePointer(handle Handle, lowoffset int32, highoffsetptr *int32, whence uint32) (newlowoffset uint32, err error) [failretval==0xffffffff] | ||||
| //sys	CloseHandle(handle Handle) (err error) | ||||
| @ -153,6 +191,7 @@ func NewCallbackCDecl(fn interface{}) uintptr { | ||||
| //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	SetFileInformationByHandle(handle Handle, class uint32, inBuffer *byte, inBufferLen 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 | ||||
| @ -160,26 +199,34 @@ 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) | ||||
| //sys	GetSystemTimeAsFileTime(time *Filetime) | ||||
| //sys	GetSystemTimePreciseAsFileTime(time *Filetime) | ||||
| //sys	GetTimeZoneInformation(tzi *Timezoneinformation) (rc uint32, err error) [failretval==0xffffffff] | ||||
| //sys	CreateIoCompletionPort(filehandle Handle, cphandle Handle, key uint32, threadcnt uint32) (handle Handle, err error) | ||||
| //sys	GetQueuedCompletionStatus(cphandle Handle, qty *uint32, key *uint32, overlapped **Overlapped, timeout uint32) (err error) | ||||
| //sys	PostQueuedCompletionStatus(cphandle Handle, qty uint32, key uint32, overlapped *Overlapped) (err error) | ||||
| //sys	CreateIoCompletionPort(filehandle Handle, cphandle Handle, key uintptr, threadcnt uint32) (handle Handle, err error) | ||||
| //sys	GetQueuedCompletionStatus(cphandle Handle, qty *uint32, key *uintptr, overlapped **Overlapped, timeout uint32) (err error) | ||||
| //sys	PostQueuedCompletionStatus(cphandle Handle, qty uint32, key uintptr, overlapped *Overlapped) (err error) | ||||
| //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	CreateProcessAsUser(token Token, appName *uint16, commandLine *uint16, procSecurity *SecurityAttributes, threadSecurity *SecurityAttributes, inheritHandles bool, creationFlags uint32, env *uint16, currentDir *uint16, startupInfo *StartupInfo, outProcInfo *ProcessInformation) (err error) = advapi32.CreateProcessAsUserW | ||||
| //sys   initializeProcThreadAttributeList(attrlist *ProcThreadAttributeList, attrcount uint32, flags uint32, size *uintptr) (err error) = InitializeProcThreadAttributeList | ||||
| //sys   deleteProcThreadAttributeList(attrlist *ProcThreadAttributeList) = DeleteProcThreadAttributeList | ||||
| //sys   updateProcThreadAttribute(attrlist *ProcThreadAttributeList, flags uint32, attr uintptr, value unsafe.Pointer, size uintptr, prevvalue unsafe.Pointer, returnedsize *uintptr) (err error) = UpdateProcThreadAttribute | ||||
| //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) = shell32.ShellExecuteW | ||||
| //sys	ShellExecute(hwnd Handle, verb *uint16, file *uint16, args *uint16, cwd *uint16, showCmd int32) (err error) [failretval<=32] = shell32.ShellExecuteW | ||||
| //sys	GetWindowThreadProcessId(hwnd HWND, pid *uint32) (tid uint32, err error) = user32.GetWindowThreadProcessId | ||||
| //sys	GetShellWindow() (shellWindow HWND) = user32.GetShellWindow | ||||
| //sys	MessageBox(hwnd HWND, 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	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	GetCurrentThread() (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] | ||||
| @ -194,6 +241,7 @@ 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	ExpandEnvironmentStrings(src *uint16, dst *uint16, size uint32) (n uint32, err error) = kernel32.ExpandEnvironmentStringsW | ||||
| //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 | ||||
| @ -204,12 +252,14 @@ func NewCallbackCDecl(fn interface{}) uintptr { | ||||
| //sys	GetCommandLine() (cmd *uint16) = kernel32.GetCommandLineW | ||||
| //sys	CommandLineToArgv(cmd *uint16, argc *int32) (argv *[8192]*[8192]uint16, err error) [failretval==nil] = shell32.CommandLineToArgvW | ||||
| //sys	LocalFree(hmem Handle) (handle Handle, err error) [failretval!=0] | ||||
| //sys	LocalAlloc(flags uint32, length uint32) (ptr uintptr, err error) | ||||
| //sys	SetHandleInformation(handle Handle, mask uint32, flags uint32) (err error) | ||||
| //sys	FlushFileBuffers(handle Handle) (err error) | ||||
| //sys	GetFullPathName(path *uint16, buflen uint32, buf *uint16, fname **uint16) (n uint32, err error) = kernel32.GetFullPathNameW | ||||
| //sys	GetLongPathName(path *uint16, buf *uint16, buflen uint32) (n uint32, err error) = kernel32.GetLongPathNameW | ||||
| //sys	GetShortPathName(longpath *uint16, shortpath *uint16, buflen uint32) (n uint32, err error) = kernel32.GetShortPathNameW | ||||
| //sys	CreateFileMapping(fhandle Handle, sa *SecurityAttributes, prot uint32, maxSizeHigh uint32, maxSizeLow uint32, name *uint16) (handle Handle, err error) = kernel32.CreateFileMappingW | ||||
| //sys	GetFinalPathNameByHandle(file Handle, filePath *uint16, filePathSize uint32, flags uint32) (n uint32, err error) = kernel32.GetFinalPathNameByHandleW | ||||
| //sys	CreateFileMapping(fhandle Handle, sa *SecurityAttributes, prot uint32, maxSizeHigh uint32, maxSizeLow uint32, name *uint16) (handle Handle, err error) [failretval == 0 || e1 == ERROR_ALREADY_EXISTS] = kernel32.CreateFileMappingW | ||||
| //sys	MapViewOfFile(handle Handle, access uint32, offsetHigh uint32, offsetLow uint32, length uintptr) (addr uintptr, err error) | ||||
| //sys	UnmapViewOfFile(addr uintptr) (err error) | ||||
| //sys	FlushViewOfFile(addr uintptr, length uintptr) (err error) | ||||
| @ -218,30 +268,56 @@ func NewCallbackCDecl(fn interface{}) uintptr { | ||||
| //sys	VirtualAlloc(address uintptr, size uintptr, alloctype uint32, protect uint32) (value uintptr, err error) = kernel32.VirtualAlloc | ||||
| //sys	VirtualFree(address uintptr, size uintptr, freetype uint32) (err error) = kernel32.VirtualFree | ||||
| //sys	VirtualProtect(address uintptr, size uintptr, newprotect uint32, oldprotect *uint32) (err error) = kernel32.VirtualProtect | ||||
| //sys	VirtualProtectEx(process Handle, address uintptr, size uintptr, newProtect uint32, oldProtect *uint32) (err error) = kernel32.VirtualProtectEx | ||||
| //sys	VirtualQuery(address uintptr, buffer *MemoryBasicInformation, length uintptr) (err error) = kernel32.VirtualQuery | ||||
| //sys	VirtualQueryEx(process Handle, address uintptr, buffer *MemoryBasicInformation, length uintptr) (err error) = kernel32.VirtualQueryEx | ||||
| //sys	ReadProcessMemory(process Handle, baseAddress uintptr, buffer *byte, size uintptr, numberOfBytesRead *uintptr) (err error) = kernel32.ReadProcessMemory | ||||
| //sys	WriteProcessMemory(process Handle, baseAddress uintptr, buffer *byte, size uintptr, numberOfBytesWritten *uintptr) (err error) = kernel32.WriteProcessMemory | ||||
| //sys	TransmitFile(s Handle, handle Handle, bytesToWrite uint32, bytsPerSend uint32, overlapped *Overlapped, transmitFileBuf *TransmitFileBuffers, flags uint32) (err error) = mswsock.TransmitFile | ||||
| //sys	ReadDirectoryChanges(handle Handle, buf *byte, buflen uint32, watchSubTree bool, mask uint32, retlen *uint32, overlapped *Overlapped, completionRoutine uintptr) (err error) = kernel32.ReadDirectoryChangesW | ||||
| //sys	FindFirstChangeNotification(path string, watchSubtree bool, notifyFilter uint32) (handle Handle, err error) [failretval==InvalidHandle] = kernel32.FindFirstChangeNotificationW | ||||
| //sys	FindNextChangeNotification(handle Handle) (err error) | ||||
| //sys	FindCloseChangeNotification(handle Handle) (err error) | ||||
| //sys	CertOpenSystemStore(hprov Handle, name *uint16) (store Handle, err error) = crypt32.CertOpenSystemStoreW | ||||
| //sys   CertOpenStore(storeProvider uintptr, msgAndCertEncodingType uint32, cryptProv uintptr, flags uint32, para uintptr) (handle Handle, err error) [failretval==InvalidHandle] = crypt32.CertOpenStore | ||||
| //sys	CertOpenStore(storeProvider uintptr, msgAndCertEncodingType uint32, cryptProv uintptr, flags uint32, para uintptr) (handle Handle, err error) = crypt32.CertOpenStore | ||||
| //sys	CertEnumCertificatesInStore(store Handle, prevContext *CertContext) (context *CertContext, err error) [failretval==nil] = crypt32.CertEnumCertificatesInStore | ||||
| //sys   CertAddCertificateContextToStore(store Handle, certContext *CertContext, addDisposition uint32, storeContext **CertContext) (err error) = crypt32.CertAddCertificateContextToStore | ||||
| //sys	CertAddCertificateContextToStore(store Handle, certContext *CertContext, addDisposition uint32, storeContext **CertContext) (err error) = crypt32.CertAddCertificateContextToStore | ||||
| //sys	CertCloseStore(store Handle, flags uint32) (err error) = crypt32.CertCloseStore | ||||
| //sys   CertGetCertificateChain(engine Handle, leaf *CertContext, time *Filetime, additionalStore Handle, para *CertChainPara, flags uint32, reserved uintptr, chainCtx **CertChainContext) (err error) = crypt32.CertGetCertificateChain | ||||
| //sys   CertFreeCertificateChain(ctx *CertChainContext) = crypt32.CertFreeCertificateChain | ||||
| //sys   CertCreateCertificateContext(certEncodingType uint32, certEncoded *byte, encodedLen uint32) (context *CertContext, err error) [failretval==nil] = crypt32.CertCreateCertificateContext | ||||
| //sys   CertFreeCertificateContext(ctx *CertContext) (err error) = crypt32.CertFreeCertificateContext | ||||
| //sys   CertVerifyCertificateChainPolicy(policyOID uintptr, chain *CertChainContext, para *CertChainPolicyPara, status *CertChainPolicyStatus) (err error) = crypt32.CertVerifyCertificateChainPolicy | ||||
| //sys	CertDeleteCertificateFromStore(certContext *CertContext) (err error) = crypt32.CertDeleteCertificateFromStore | ||||
| //sys	CertDuplicateCertificateContext(certContext *CertContext) (dupContext *CertContext) = crypt32.CertDuplicateCertificateContext | ||||
| //sys	PFXImportCertStore(pfx *CryptDataBlob, password *uint16, flags uint32) (store Handle, err error) = crypt32.PFXImportCertStore | ||||
| //sys	CertGetCertificateChain(engine Handle, leaf *CertContext, time *Filetime, additionalStore Handle, para *CertChainPara, flags uint32, reserved uintptr, chainCtx **CertChainContext) (err error) = crypt32.CertGetCertificateChain | ||||
| //sys	CertFreeCertificateChain(ctx *CertChainContext) = crypt32.CertFreeCertificateChain | ||||
| //sys	CertCreateCertificateContext(certEncodingType uint32, certEncoded *byte, encodedLen uint32) (context *CertContext, err error) [failretval==nil] = crypt32.CertCreateCertificateContext | ||||
| //sys	CertFreeCertificateContext(ctx *CertContext) (err error) = crypt32.CertFreeCertificateContext | ||||
| //sys	CertVerifyCertificateChainPolicy(policyOID uintptr, chain *CertChainContext, para *CertChainPolicyPara, status *CertChainPolicyStatus) (err error) = crypt32.CertVerifyCertificateChainPolicy | ||||
| //sys	CertGetNameString(certContext *CertContext, nameType uint32, flags uint32, typePara unsafe.Pointer, name *uint16, size uint32) (chars uint32) = crypt32.CertGetNameStringW | ||||
| //sys	CertFindExtension(objId *byte, countExtensions uint32, extensions *CertExtension) (ret *CertExtension) = crypt32.CertFindExtension | ||||
| //sys   CertFindCertificateInStore(store Handle, certEncodingType uint32, findFlags uint32, findType uint32, findPara unsafe.Pointer, prevCertContext *CertContext) (cert *CertContext, err error) [failretval==nil] = crypt32.CertFindCertificateInStore | ||||
| //sys   CertFindChainInStore(store Handle, certEncodingType uint32, findFlags uint32, findType uint32, findPara unsafe.Pointer, prevChainContext *CertChainContext) (certchain *CertChainContext, err error) [failretval==nil] = crypt32.CertFindChainInStore | ||||
| //sys   CryptAcquireCertificatePrivateKey(cert *CertContext, flags uint32, parameters unsafe.Pointer, cryptProvOrNCryptKey *Handle, keySpec *uint32, callerFreeProvOrNCryptKey *bool) (err error) = crypt32.CryptAcquireCertificatePrivateKey | ||||
| //sys	CryptQueryObject(objectType uint32, object unsafe.Pointer, expectedContentTypeFlags uint32, expectedFormatTypeFlags uint32, flags uint32, msgAndCertEncodingType *uint32, contentType *uint32, formatType *uint32, certStore *Handle, msg *Handle, context *unsafe.Pointer) (err error) = crypt32.CryptQueryObject | ||||
| //sys	CryptDecodeObject(encodingType uint32, structType *byte, encodedBytes *byte, lenEncodedBytes uint32, flags uint32, decoded unsafe.Pointer, decodedLen *uint32) (err error) = crypt32.CryptDecodeObject | ||||
| //sys	CryptProtectData(dataIn *DataBlob, name *uint16, optionalEntropy *DataBlob, reserved uintptr, promptStruct *CryptProtectPromptStruct, flags uint32, dataOut *DataBlob) (err error) = crypt32.CryptProtectData | ||||
| //sys	CryptUnprotectData(dataIn *DataBlob, name **uint16, optionalEntropy *DataBlob, reserved uintptr, promptStruct *CryptProtectPromptStruct, flags uint32, dataOut *DataBlob) (err error) = crypt32.CryptUnprotectData | ||||
| //sys	WinVerifyTrustEx(hwnd HWND, actionId *GUID, data *WinTrustData) (ret error) = wintrust.WinVerifyTrustEx | ||||
| //sys	RegOpenKeyEx(key Handle, subkey *uint16, options uint32, desiredAccess uint32, result *Handle) (regerrno error) = advapi32.RegOpenKeyExW | ||||
| //sys	RegCloseKey(key Handle) (regerrno error) = advapi32.RegCloseKey | ||||
| //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	RegNotifyChangeKeyValue(key Handle, watchSubtree bool, notifyFilter uint32, event Handle, asynchronous bool) (regerrno error) = advapi32.RegNotifyChangeKeyValue | ||||
| //sys	GetCurrentProcessId() (pid uint32) = kernel32.GetCurrentProcessId | ||||
| //sys	ProcessIdToSessionId(pid uint32, sessionid *uint32) (err error) = kernel32.ProcessIdToSessionId | ||||
| //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 | ||||
| //sys	setConsoleCursorPosition(console Handle, position uint32) (err error) = kernel32.SetConsoleCursorPosition | ||||
| //sys	WriteConsole(console Handle, buf *uint16, towrite uint32, written *uint32, reserved *byte) (err error) = kernel32.WriteConsoleW | ||||
| //sys	ReadConsole(console Handle, buf *uint16, toread uint32, read *uint32, inputControl *byte) (err error) = kernel32.ReadConsoleW | ||||
| //sys	CreateToolhelp32Snapshot(flags uint32, processId uint32) (handle Handle, err error) [failretval==InvalidHandle] = kernel32.CreateToolhelp32Snapshot | ||||
| //sys	Module32First(snapshot Handle, moduleEntry *ModuleEntry32) (err error) = kernel32.Module32FirstW | ||||
| //sys	Module32Next(snapshot Handle, moduleEntry *ModuleEntry32) (err error) = kernel32.Module32NextW | ||||
| //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) | ||||
| @ -251,12 +327,16 @@ func NewCallbackCDecl(fn interface{}) uintptr { | ||||
| //sys	CreateSymbolicLink(symlinkfilename *uint16, targetfilename *uint16, flags uint32) (err error) [failretval&0xff==0] = CreateSymbolicLinkW | ||||
| //sys	CreateHardLink(filename *uint16, existingfilename *uint16, reserved uintptr) (err error) [failretval&0xff==0] = CreateHardLinkW | ||||
| //sys	GetCurrentThreadId() (id uint32) | ||||
| //sys	CreateEvent(eventAttrs *SecurityAttributes, manualReset uint32, initialState uint32, name *uint16) (handle Handle, err error) = kernel32.CreateEventW | ||||
| //sys	CreateEventEx(eventAttrs *SecurityAttributes, name *uint16, flags uint32, desiredAccess uint32) (handle Handle, err error) = kernel32.CreateEventExW | ||||
| //sys	CreateEvent(eventAttrs *SecurityAttributes, manualReset uint32, initialState uint32, name *uint16) (handle Handle, err error) [failretval == 0 || e1 == ERROR_ALREADY_EXISTS] = kernel32.CreateEventW | ||||
| //sys	CreateEventEx(eventAttrs *SecurityAttributes, name *uint16, flags uint32, desiredAccess uint32) (handle Handle, err error) [failretval == 0 || e1 == ERROR_ALREADY_EXISTS] = kernel32.CreateEventExW | ||||
| //sys	OpenEvent(desiredAccess uint32, inheritHandle bool, name *uint16) (handle Handle, err error) = kernel32.OpenEventW | ||||
| //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) [failretval == 0 || e1 == ERROR_ALREADY_EXISTS] = kernel32.CreateMutexW | ||||
| //sys	CreateMutexEx(mutexAttrs *SecurityAttributes, name *uint16, flags uint32, desiredAccess uint32) (handle Handle, err error) [failretval == 0 || e1 == ERROR_ALREADY_EXISTS] = 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 | ||||
| @ -265,10 +345,28 @@ func NewCallbackCDecl(fn interface{}) uintptr { | ||||
| //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	QueryInformationJobObject(job Handle, JobObjectInformationClass int32, JobObjectInformation uintptr, JobObjectInformationLength uint32, retlen *uint32) (err error) = kernel32.QueryInformationJobObject | ||||
| //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	QueryFullProcessImageName(proc Handle, flags uint32, exeName *uint16, size *uint32) (err error) = kernel32.QueryFullProcessImageNameW | ||||
| //sys	OpenThread(desiredAccess uint32, inheritHandle bool, threadId uint32) (handle Handle, err error) | ||||
| //sys	SetProcessPriorityBoost(process Handle, disable bool) (err error) = kernel32.SetProcessPriorityBoost | ||||
| //sys	GetProcessWorkingSetSizeEx(hProcess Handle, lpMinimumWorkingSetSize *uintptr, lpMaximumWorkingSetSize *uintptr, flags *uint32) | ||||
| //sys	SetProcessWorkingSetSizeEx(hProcess Handle, dwMinimumWorkingSetSize uintptr, dwMaximumWorkingSetSize uintptr, flags uint32) (err error) | ||||
| //sys	GetCommTimeouts(handle Handle, timeouts *CommTimeouts) (err error) | ||||
| //sys	SetCommTimeouts(handle Handle, timeouts *CommTimeouts) (err error) | ||||
| //sys	GetActiveProcessorCount(groupNumber uint16) (ret uint32) | ||||
| //sys	GetMaximumProcessorCount(groupNumber uint16) (ret uint32) | ||||
| //sys	EnumWindows(enumFunc uintptr, param unsafe.Pointer) (err error) = user32.EnumWindows | ||||
| //sys	EnumChildWindows(hwnd HWND, enumFunc uintptr, param unsafe.Pointer) = user32.EnumChildWindows | ||||
| //sys	GetClassName(hwnd HWND, className *uint16, maxCount int32) (copied int32, err error) = user32.GetClassNameW | ||||
| //sys	GetDesktopWindow() (hwnd HWND) = user32.GetDesktopWindow | ||||
| //sys	GetForegroundWindow() (hwnd HWND) = user32.GetForegroundWindow | ||||
| //sys	IsWindow(hwnd HWND) (isWindow bool) = user32.IsWindow | ||||
| //sys	IsWindowUnicode(hwnd HWND) (isUnicode bool) = user32.IsWindowUnicode | ||||
| //sys	IsWindowVisible(hwnd HWND) (isVisible bool) = user32.IsWindowVisible | ||||
| //sys	GetGUIThreadInfo(thread uint32, info *GUIThreadInfo) (err error) = user32.GetGUIThreadInfo | ||||
| 
 | ||||
| // Volume Management Functions | ||||
| //sys	DefineDosDevice(flags uint32, deviceName *uint16, targetPath *uint16) (err error) = DefineDosDeviceW | ||||
| @ -279,6 +377,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 | ||||
| @ -290,26 +389,100 @@ 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	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	CoInitializeEx(reserved uintptr, coInit uint32) (ret error) = ole32.CoInitializeEx | ||||
| //sys	CoUninitialize() = ole32.CoUninitialize | ||||
| //sys	CoGetObject(name *uint16, bindOpts *BIND_OPTS3, guid *GUID, functionTable **uintptr) (ret error) = ole32.CoGetObject | ||||
| //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 | ||||
| //sys	findResource(module Handle, name uintptr, resType uintptr) (resInfo Handle, err error) = kernel32.FindResourceW | ||||
| //sys	SizeofResource(module Handle, resInfo Handle) (size uint32, err error) = kernel32.SizeofResource | ||||
| //sys	LoadResource(module Handle, resInfo Handle) (resData Handle, err error) = kernel32.LoadResource | ||||
| //sys	LockResource(resData Handle) (addr uintptr, err error) = kernel32.LockResource | ||||
| 
 | ||||
| // Version APIs | ||||
| //sys	GetFileVersionInfoSize(filename string, zeroHandle *Handle) (bufSize uint32, err error) = version.GetFileVersionInfoSizeW | ||||
| //sys	GetFileVersionInfo(filename string, handle uint32, bufSize uint32, buffer unsafe.Pointer) (err error) = version.GetFileVersionInfoW | ||||
| //sys	VerQueryValue(block unsafe.Pointer, subBlock string, pointerToBufferPointer unsafe.Pointer, bufSize *uint32) (err error) = version.VerQueryValueW | ||||
| 
 | ||||
| // Process Status API (PSAPI) | ||||
| //sys	EnumProcesses(processIds []uint32, bytesReturned *uint32) (err error) = psapi.EnumProcesses | ||||
| //sys	EnumProcessModules(process Handle, module *Handle, cb uint32, cbNeeded *uint32) (err error) = psapi.EnumProcessModules | ||||
| //sys	EnumProcessModulesEx(process Handle, module *Handle, cb uint32, cbNeeded *uint32, filterFlag uint32) (err error) = psapi.EnumProcessModulesEx | ||||
| //sys	GetModuleInformation(process Handle, module Handle, modinfo *ModuleInfo, cb uint32) (err error) = psapi.GetModuleInformation | ||||
| //sys	GetModuleFileNameEx(process Handle, module Handle, filename *uint16, size uint32) (err error) = psapi.GetModuleFileNameExW | ||||
| //sys	GetModuleBaseName(process Handle, module Handle, baseName *uint16, size uint32) (err error) = psapi.GetModuleBaseNameW | ||||
| //sys   QueryWorkingSetEx(process Handle, pv uintptr, cb uint32) (err error) = psapi.QueryWorkingSetEx | ||||
| 
 | ||||
| // NT Native APIs | ||||
| //sys	rtlNtStatusToDosErrorNoTeb(ntstatus NTStatus) (ret syscall.Errno) = ntdll.RtlNtStatusToDosErrorNoTeb | ||||
| //sys	rtlGetVersion(info *OsVersionInfoEx) (ntstatus error) = ntdll.RtlGetVersion | ||||
| //sys	rtlGetNtVersionNumbers(majorVersion *uint32, minorVersion *uint32, buildNumber *uint32) = ntdll.RtlGetNtVersionNumbers | ||||
| //sys	RtlGetCurrentPeb() (peb *PEB) = ntdll.RtlGetCurrentPeb | ||||
| //sys	RtlInitUnicodeString(destinationString *NTUnicodeString, sourceString *uint16) = ntdll.RtlInitUnicodeString | ||||
| //sys	RtlInitString(destinationString *NTString, sourceString *byte) = ntdll.RtlInitString | ||||
| //sys	NtCreateFile(handle *Handle, access uint32, oa *OBJECT_ATTRIBUTES, iosb *IO_STATUS_BLOCK, allocationSize *int64, attributes uint32, share uint32, disposition uint32, options uint32, eabuffer uintptr, ealength uint32) (ntstatus error) = ntdll.NtCreateFile | ||||
| //sys	NtCreateNamedPipeFile(pipe *Handle, access uint32, oa *OBJECT_ATTRIBUTES, iosb *IO_STATUS_BLOCK, share uint32, disposition uint32, options uint32, typ uint32, readMode uint32, completionMode uint32, maxInstances uint32, inboundQuota uint32, outputQuota uint32, timeout *int64) (ntstatus error) = ntdll.NtCreateNamedPipeFile | ||||
| //sys	NtSetInformationFile(handle Handle, iosb *IO_STATUS_BLOCK, inBuffer *byte, inBufferLen uint32, class uint32) (ntstatus error) = ntdll.NtSetInformationFile | ||||
| //sys	RtlDosPathNameToNtPathName(dosName *uint16, ntName *NTUnicodeString, ntFileNamePart *uint16, relativeName *RTL_RELATIVE_NAME) (ntstatus error) = ntdll.RtlDosPathNameToNtPathName_U_WithStatus | ||||
| //sys	RtlDosPathNameToRelativeNtPathName(dosName *uint16, ntName *NTUnicodeString, ntFileNamePart *uint16, relativeName *RTL_RELATIVE_NAME) (ntstatus error) = ntdll.RtlDosPathNameToRelativeNtPathName_U_WithStatus | ||||
| //sys	RtlDefaultNpAcl(acl **ACL) (ntstatus error) = ntdll.RtlDefaultNpAcl | ||||
| //sys	NtQueryInformationProcess(proc Handle, procInfoClass int32, procInfo unsafe.Pointer, procInfoLen uint32, retLen *uint32) (ntstatus error) = ntdll.NtQueryInformationProcess | ||||
| //sys	NtSetInformationProcess(proc Handle, procInfoClass int32, procInfo unsafe.Pointer, procInfoLen uint32) (ntstatus error) = ntdll.NtSetInformationProcess | ||||
| //sys	NtQuerySystemInformation(sysInfoClass int32, sysInfo unsafe.Pointer, sysInfoLen uint32, retLen *uint32) (ntstatus error) = ntdll.NtQuerySystemInformation | ||||
| //sys	NtSetSystemInformation(sysInfoClass int32, sysInfo unsafe.Pointer, sysInfoLen uint32) (ntstatus error) = ntdll.NtSetSystemInformation | ||||
| //sys	RtlAddFunctionTable(functionTable *RUNTIME_FUNCTION, entryCount uint32, baseAddress uintptr) (ret bool) = ntdll.RtlAddFunctionTable | ||||
| //sys	RtlDeleteFunctionTable(functionTable *RUNTIME_FUNCTION) (ret bool) = ntdll.RtlDeleteFunctionTable | ||||
| 
 | ||||
| // Desktop Window Manager API (Dwmapi) | ||||
| //sys	DwmGetWindowAttribute(hwnd HWND, attribute uint32, value unsafe.Pointer, size uint32) (ret error) = dwmapi.DwmGetWindowAttribute | ||||
| //sys	DwmSetWindowAttribute(hwnd HWND, attribute uint32, value unsafe.Pointer, size uint32) (ret error) = dwmapi.DwmSetWindowAttribute | ||||
| 
 | ||||
| // 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) { | ||||
| 	r0, _, e1 := syscall.Syscall(procGetProcAddress.Addr(), 2, uintptr(module), ordinal, 0) | ||||
| 	proc = uintptr(r0) | ||||
| 	if proc == 0 { | ||||
| 		if e1 != 0 { | ||||
| 			err = errnoErr(e1) | ||||
| 		} else { | ||||
| 			err = syscall.EINVAL | ||||
| 		} | ||||
| 		err = errnoErr(e1) | ||||
| 	} | ||||
| 	return | ||||
| } | ||||
| @ -365,7 +538,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 | ||||
| } | ||||
| 
 | ||||
| @ -379,12 +556,6 @@ func Read(fd Handle, p []byte) (n int, err error) { | ||||
| 		} | ||||
| 		return 0, e | ||||
| 	} | ||||
| 	if raceenabled { | ||||
| 		if done > 0 { | ||||
| 			raceWriteRange(unsafe.Pointer(&p[0]), int(done)) | ||||
| 		} | ||||
| 		raceAcquire(unsafe.Pointer(&ioSync)) | ||||
| 	} | ||||
| 	return int(done), nil | ||||
| } | ||||
| 
 | ||||
| @ -397,12 +568,31 @@ func Write(fd Handle, p []byte) (n int, err error) { | ||||
| 	if e != nil { | ||||
| 		return 0, e | ||||
| 	} | ||||
| 	if raceenabled && done > 0 { | ||||
| 		raceReadRange(unsafe.Pointer(&p[0]), int(done)) | ||||
| 	} | ||||
| 	return int(done), nil | ||||
| } | ||||
| 
 | ||||
| func ReadFile(fd Handle, p []byte, done *uint32, overlapped *Overlapped) error { | ||||
| 	err := readFile(fd, p, done, overlapped) | ||||
| 	if raceenabled { | ||||
| 		if *done > 0 { | ||||
| 			raceWriteRange(unsafe.Pointer(&p[0]), int(*done)) | ||||
| 		} | ||||
| 		raceAcquire(unsafe.Pointer(&ioSync)) | ||||
| 	} | ||||
| 	return err | ||||
| } | ||||
| 
 | ||||
| func WriteFile(fd Handle, p []byte, done *uint32, overlapped *Overlapped) error { | ||||
| 	if raceenabled { | ||||
| 		raceReleaseMerge(unsafe.Pointer(&ioSync)) | ||||
| 	} | ||||
| 	err := writeFile(fd, p, done, overlapped) | ||||
| 	if raceenabled && *done > 0 { | ||||
| 		raceReadRange(unsafe.Pointer(&p[0]), int(*done)) | ||||
| 	} | ||||
| 	return err | ||||
| } | ||||
| 
 | ||||
| var ioSync int64 | ||||
| 
 | ||||
| func Seek(fd Handle, offset int64, whence int) (newoffset int64, err error) { | ||||
| @ -441,7 +631,6 @@ var ( | ||||
| 
 | ||||
| func getStdHandle(stdhandle uint32) (fd Handle) { | ||||
| 	r, _ := GetStdHandle(stdhandle) | ||||
| 	CloseOnExec(r) | ||||
| 	return r | ||||
| } | ||||
| 
 | ||||
| @ -566,7 +755,7 @@ func Utimes(path string, tv []Timeval) (err error) { | ||||
| 	if e != nil { | ||||
| 		return e | ||||
| 	} | ||||
| 	defer Close(h) | ||||
| 	defer CloseHandle(h) | ||||
| 	a := NsecToFiletime(tv[0].Nanoseconds()) | ||||
| 	w := NsecToFiletime(tv[1].Nanoseconds()) | ||||
| 	return SetFileTime(h, nil, &a, &w) | ||||
| @ -586,7 +775,7 @@ func UtimesNano(path string, ts []Timespec) (err error) { | ||||
| 	if e != nil { | ||||
| 		return e | ||||
| 	} | ||||
| 	defer Close(h) | ||||
| 	defer CloseHandle(h) | ||||
| 	a := NsecToFiletime(TimespecToNsec(ts[0])) | ||||
| 	w := NsecToFiletime(TimespecToNsec(ts[1])) | ||||
| 	return SetFileTime(h, nil, &a, &w) | ||||
| @ -645,6 +834,8 @@ const socket_error = uintptr(^uint32(0)) | ||||
| //sys	WSACleanup() (err error) [failretval==socket_error] = ws2_32.WSACleanup | ||||
| //sys	WSAIoctl(s Handle, iocc uint32, inbuf *byte, cbif uint32, outbuf *byte, cbob uint32, cbbr *uint32, overlapped *Overlapped, completionRoutine uintptr) (err error) [failretval==socket_error] = ws2_32.WSAIoctl | ||||
| //sys	socket(af int32, typ int32, protocol int32) (handle Handle, err error) [failretval==InvalidHandle] = ws2_32.socket | ||||
| //sys	sendto(s Handle, buf []byte, flags int32, to unsafe.Pointer, tolen int32) (err error) [failretval==socket_error] = ws2_32.sendto | ||||
| //sys	recvfrom(s Handle, buf []byte, flags int32, from *RawSockaddrAny, fromlen *int32) (n int32, err error) [failretval==-1] = ws2_32.recvfrom | ||||
| //sys	Setsockopt(s Handle, level int32, optname int32, optval *byte, optlen int32) (err error) [failretval==socket_error] = ws2_32.setsockopt | ||||
| //sys	Getsockopt(s Handle, level int32, optname int32, optval *byte, optlen *int32) (err error) [failretval==socket_error] = ws2_32.getsockopt | ||||
| //sys	bind(s Handle, name unsafe.Pointer, namelen int32) (err error) [failretval==socket_error] = ws2_32.bind | ||||
| @ -660,6 +851,7 @@ const socket_error = uintptr(^uint32(0)) | ||||
| //sys	WSASend(s Handle, bufs *WSABuf, bufcnt uint32, sent *uint32, flags uint32, overlapped *Overlapped, croutine *byte) (err error) [failretval==socket_error] = ws2_32.WSASend | ||||
| //sys	WSARecvFrom(s Handle, bufs *WSABuf, bufcnt uint32, recvd *uint32, flags *uint32,  from *RawSockaddrAny, fromlen *int32, overlapped *Overlapped, croutine *byte) (err error) [failretval==socket_error] = ws2_32.WSARecvFrom | ||||
| //sys	WSASendTo(s Handle, bufs *WSABuf, bufcnt uint32, sent *uint32, flags uint32, to *RawSockaddrAny, tolen int32,  overlapped *Overlapped, croutine *byte) (err error) [failretval==socket_error] = ws2_32.WSASendTo | ||||
| //sys	WSASocket(af int32, typ int32, protocol int32, protoInfo *WSAProtocolInfo, group uint32, flags uint32) (handle Handle, err error) [failretval==InvalidHandle] = ws2_32.WSASocketW | ||||
| //sys	GetHostByName(name string) (h *Hostent, err error) [failretval==nil] = ws2_32.gethostbyname | ||||
| //sys	GetServByName(name string, proto string) (s *Servent, err error) [failretval==nil] = ws2_32.getservbyname | ||||
| //sys	Ntohs(netshort uint16) (u uint16) = ws2_32.ntohs | ||||
| @ -673,9 +865,11 @@ const socket_error = uintptr(^uint32(0)) | ||||
| //sys	GetAdaptersInfo(ai *IpAdapterInfo, ol *uint32) (errcode error) = iphlpapi.GetAdaptersInfo | ||||
| //sys	SetFileCompletionNotificationModes(handle Handle, flags uint8) (err error) = kernel32.SetFileCompletionNotificationModes | ||||
| //sys	WSAEnumProtocols(protocols *int32, protocolBuffer *WSAProtocolInfo, bufferLength *uint32) (n int32, err error) [failretval==-1] = ws2_32.WSAEnumProtocolsW | ||||
| //sys	WSAGetOverlappedResult(h Handle, o *Overlapped, bytes *uint32, wait bool, flags *uint32) (err error) = ws2_32.WSAGetOverlappedResult | ||||
| //sys	GetAdaptersAddresses(family uint32, flags uint32, reserved uintptr, adapterAddresses *IpAdapterAddresses, sizePointer *uint32) (errcode error) = iphlpapi.GetAdaptersAddresses | ||||
| //sys	GetACP() (acp uint32) = kernel32.GetACP | ||||
| //sys	MultiByteToWideChar(codePage uint32, dwFlags uint32, str *byte, nstr int32, wchar *uint16, nwchar int32) (nwrite int32, err error) = kernel32.MultiByteToWideChar | ||||
| //sys	getBestInterfaceEx(sockaddr unsafe.Pointer, pdwBestIfIndex *uint32) (errcode error) = iphlpapi.GetBestInterfaceEx | ||||
| 
 | ||||
| // For testing: clients can set this flag to force | ||||
| // creation of IPv6 sockets to return EAFNOSUPPORT. | ||||
| @ -724,9 +918,7 @@ func (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, int32, error) { | ||||
| 	p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port)) | ||||
| 	p[0] = byte(sa.Port >> 8) | ||||
| 	p[1] = byte(sa.Port) | ||||
| 	for i := 0; i < len(sa.Addr); i++ { | ||||
| 		sa.raw.Addr[i] = sa.Addr[i] | ||||
| 	} | ||||
| 	sa.raw.Addr = sa.Addr | ||||
| 	return unsafe.Pointer(&sa.raw), int32(unsafe.Sizeof(sa.raw)), nil | ||||
| } | ||||
| 
 | ||||
| @ -746,9 +938,7 @@ func (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, int32, error) { | ||||
| 	p[0] = byte(sa.Port >> 8) | ||||
| 	p[1] = byte(sa.Port) | ||||
| 	sa.raw.Scope_id = sa.ZoneId | ||||
| 	for i := 0; i < len(sa.Addr); i++ { | ||||
| 		sa.raw.Addr[i] = sa.Addr[i] | ||||
| 	} | ||||
| 	sa.raw.Addr = sa.Addr | ||||
| 	return unsafe.Pointer(&sa.raw), int32(unsafe.Sizeof(sa.raw)), nil | ||||
| } | ||||
| 
 | ||||
| @ -789,6 +979,32 @@ func (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, int32, error) { | ||||
| 	return unsafe.Pointer(&sa.raw), sl, nil | ||||
| } | ||||
| 
 | ||||
| type RawSockaddrBth struct { | ||||
| 	AddressFamily  [2]byte | ||||
| 	BtAddr         [8]byte | ||||
| 	ServiceClassId [16]byte | ||||
| 	Port           [4]byte | ||||
| } | ||||
| 
 | ||||
| type SockaddrBth struct { | ||||
| 	BtAddr         uint64 | ||||
| 	ServiceClassId GUID | ||||
| 	Port           uint32 | ||||
| 
 | ||||
| 	raw RawSockaddrBth | ||||
| } | ||||
| 
 | ||||
| func (sa *SockaddrBth) sockaddr() (unsafe.Pointer, int32, error) { | ||||
| 	family := AF_BTH | ||||
| 	sa.raw = RawSockaddrBth{ | ||||
| 		AddressFamily:  *(*[2]byte)(unsafe.Pointer(&family)), | ||||
| 		BtAddr:         *(*[8]byte)(unsafe.Pointer(&sa.BtAddr)), | ||||
| 		Port:           *(*[4]byte)(unsafe.Pointer(&sa.Port)), | ||||
| 		ServiceClassId: *(*[16]byte)(unsafe.Pointer(&sa.ServiceClassId)), | ||||
| 	} | ||||
| 	return unsafe.Pointer(&sa.raw), int32(unsafe.Sizeof(sa.raw)), nil | ||||
| } | ||||
| 
 | ||||
| func (rsa *RawSockaddrAny) Sockaddr() (Sockaddr, error) { | ||||
| 	switch rsa.Addr.Family { | ||||
| 	case AF_UNIX: | ||||
| @ -812,7 +1028,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 | ||||
| 
 | ||||
| @ -821,9 +1037,7 @@ func (rsa *RawSockaddrAny) Sockaddr() (Sockaddr, error) { | ||||
| 		sa := new(SockaddrInet4) | ||||
| 		p := (*[2]byte)(unsafe.Pointer(&pp.Port)) | ||||
| 		sa.Port = int(p[0])<<8 + int(p[1]) | ||||
| 		for i := 0; i < len(sa.Addr); i++ { | ||||
| 			sa.Addr[i] = pp.Addr[i] | ||||
| 		} | ||||
| 		sa.Addr = pp.Addr | ||||
| 		return sa, nil | ||||
| 
 | ||||
| 	case AF_INET6: | ||||
| @ -832,9 +1046,7 @@ func (rsa *RawSockaddrAny) Sockaddr() (Sockaddr, error) { | ||||
| 		p := (*[2]byte)(unsafe.Pointer(&pp.Port)) | ||||
| 		sa.Port = int(p[0])<<8 + int(p[1]) | ||||
| 		sa.ZoneId = pp.Scope_id | ||||
| 		for i := 0; i < len(sa.Addr); i++ { | ||||
| 			sa.Addr[i] = pp.Addr[i] | ||||
| 		} | ||||
| 		sa.Addr = pp.Addr | ||||
| 		return sa, nil | ||||
| 	} | ||||
| 	return nil, syscall.EAFNOSUPPORT | ||||
| @ -868,6 +1080,14 @@ func Connect(fd Handle, sa Sockaddr) (err error) { | ||||
| 	return connect(fd, ptr, n) | ||||
| } | ||||
| 
 | ||||
| func GetBestInterfaceEx(sa Sockaddr, pdwBestIfIndex *uint32) (err error) { | ||||
| 	ptr, _, err := sa.sockaddr() | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	return getBestInterfaceEx(ptr, pdwBestIfIndex) | ||||
| } | ||||
| 
 | ||||
| func Getsockname(fd Handle) (sa Sockaddr, err error) { | ||||
| 	var rsa RawSockaddrAny | ||||
| 	l := int32(unsafe.Sizeof(rsa)) | ||||
| @ -895,9 +1115,13 @@ func Shutdown(fd Handle, how int) (err error) { | ||||
| } | ||||
| 
 | ||||
| func WSASendto(s Handle, bufs *WSABuf, bufcnt uint32, sent *uint32, flags uint32, to Sockaddr, overlapped *Overlapped, croutine *byte) (err error) { | ||||
| 	rsa, l, err := to.sockaddr() | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	var rsa unsafe.Pointer | ||||
| 	var l int32 | ||||
| 	if to != nil { | ||||
| 		rsa, l, err = to.sockaddr() | ||||
| 		if err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 	} | ||||
| 	return WSASendTo(s, bufs, bufcnt, sent, flags, (*RawSockaddrAny)(unsafe.Pointer(rsa)), l, overlapped, croutine) | ||||
| } | ||||
| @ -1000,11 +1224,7 @@ func WSASendMsg(fd Handle, msg *WSAMsg, flags uint32, bytesSent *uint32, overlap | ||||
| 	} | ||||
| 	r1, _, e1 := syscall.Syscall6(sendRecvMsgFunc.sendAddr, 6, uintptr(fd), uintptr(unsafe.Pointer(msg)), uintptr(flags), uintptr(unsafe.Pointer(bytesSent)), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(croutine))) | ||||
| 	if r1 == socket_error { | ||||
| 		if e1 != 0 { | ||||
| 			err = errnoErr(e1) | ||||
| 		} else { | ||||
| 			err = syscall.EINVAL | ||||
| 		} | ||||
| 		err = errnoErr(e1) | ||||
| 	} | ||||
| 	return err | ||||
| } | ||||
| @ -1016,11 +1236,7 @@ func WSARecvMsg(fd Handle, msg *WSAMsg, bytesReceived *uint32, overlapped *Overl | ||||
| 	} | ||||
| 	r1, _, e1 := syscall.Syscall6(sendRecvMsgFunc.recvAddr, 5, uintptr(fd), uintptr(unsafe.Pointer(msg)), uintptr(unsafe.Pointer(bytesReceived)), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(croutine)), 0) | ||||
| 	if r1 == socket_error { | ||||
| 		if e1 != 0 { | ||||
| 			err = errnoErr(e1) | ||||
| 		} else { | ||||
| 			err = syscall.EINVAL | ||||
| 		} | ||||
| 		err = errnoErr(e1) | ||||
| 	} | ||||
| 	return err | ||||
| } | ||||
| @ -1073,10 +1289,27 @@ func NsecToTimespec(nsec int64) (ts Timespec) { | ||||
| // TODO(brainman): fix all needed for net | ||||
| 
 | ||||
| func Accept(fd Handle) (nfd Handle, sa Sockaddr, err error) { return 0, nil, syscall.EWINDOWS } | ||||
| 
 | ||||
| func Recvfrom(fd Handle, p []byte, flags int) (n int, from Sockaddr, err error) { | ||||
| 	return 0, nil, syscall.EWINDOWS | ||||
| 	var rsa RawSockaddrAny | ||||
| 	l := int32(unsafe.Sizeof(rsa)) | ||||
| 	n32, err := recvfrom(fd, p, int32(flags), &rsa, &l) | ||||
| 	n = int(n32) | ||||
| 	if err != nil { | ||||
| 		return | ||||
| 	} | ||||
| 	from, err = rsa.Sockaddr() | ||||
| 	return | ||||
| } | ||||
| func Sendto(fd Handle, p []byte, flags int, to Sockaddr) (err error)       { return syscall.EWINDOWS } | ||||
| 
 | ||||
| func Sendto(fd Handle, p []byte, flags int, to Sockaddr) (err error) { | ||||
| 	ptr, l, err := to.sockaddr() | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	return sendto(fd, p, int32(flags), ptr, l) | ||||
| } | ||||
| 
 | ||||
| func SetsockoptTimeval(fd Handle, level, opt int, tv *Timeval) (err error) { return syscall.EWINDOWS } | ||||
| 
 | ||||
| // The Linger struct is wrong but we only noticed after Go 1. | ||||
| @ -1106,7 +1339,12 @@ type IPv6Mreq struct { | ||||
| 	Interface uint32 | ||||
| } | ||||
| 
 | ||||
| func GetsockoptInt(fd Handle, level, opt int) (int, error) { return -1, syscall.EWINDOWS } | ||||
| func GetsockoptInt(fd Handle, level, opt int) (int, error) { | ||||
| 	v := int32(0) | ||||
| 	l := int32(unsafe.Sizeof(v)) | ||||
| 	err := Getsockopt(fd, int32(level), int32(opt), (*byte)(unsafe.Pointer(&v)), &l) | ||||
| 	return int(v), err | ||||
| } | ||||
| 
 | ||||
| func SetsockoptLinger(fd Handle, level, opt int, l *Linger) (err error) { | ||||
| 	sys := sysLinger{Onoff: uint16(l.Onoff), Linger: uint16(l.Linger)} | ||||
| @ -1303,11 +1541,11 @@ func (t Token) KnownFolderPath(folderID *KNOWNFOLDERID, flags uint32) (string, e | ||||
| 		return "", err | ||||
| 	} | ||||
| 	defer CoTaskMemFree(unsafe.Pointer(p)) | ||||
| 	return UTF16ToString((*[(1 << 30) - 1]uint16)(unsafe.Pointer(p))[:]), nil | ||||
| 	return UTF16PtrToString(p), nil | ||||
| } | ||||
| 
 | ||||
| // RtlGetVersion returns the true version of the underlying operating system, ignoring | ||||
| // any manifesting or compatibility layers on top of the win32 layer. | ||||
| // 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)) | ||||
| @ -1318,3 +1556,260 @@ func RtlGetVersion() *OsVersionInfoEx { | ||||
| 	_ = 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 | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func SetConsoleCursorPosition(console Handle, position Coord) error { | ||||
| 	return setConsoleCursorPosition(console, *((*uint32)(unsafe.Pointer(&position)))) | ||||
| } | ||||
| 
 | ||||
| func (s NTStatus) Errno() syscall.Errno { | ||||
| 	return rtlNtStatusToDosErrorNoTeb(s) | ||||
| } | ||||
| 
 | ||||
| func langID(pri, sub uint16) uint32 { return uint32(sub)<<10 | uint32(pri) } | ||||
| 
 | ||||
| func (s NTStatus) Error() string { | ||||
| 	b := make([]uint16, 300) | ||||
| 	n, err := FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_FROM_HMODULE|FORMAT_MESSAGE_ARGUMENT_ARRAY, modntdll.Handle(), uint32(s), langID(LANG_ENGLISH, SUBLANG_ENGLISH_US), b, nil) | ||||
| 	if err != nil { | ||||
| 		return fmt.Sprintf("NTSTATUS 0x%08x", uint32(s)) | ||||
| 	} | ||||
| 	// trim terminating \r and \n | ||||
| 	for ; n > 0 && (b[n-1] == '\n' || b[n-1] == '\r'); n-- { | ||||
| 	} | ||||
| 	return string(utf16.Decode(b[:n])) | ||||
| } | ||||
| 
 | ||||
| // NewNTUnicodeString returns a new NTUnicodeString structure for use with native | ||||
| // NT APIs that work over the NTUnicodeString type. Note that most Windows APIs | ||||
| // do not use NTUnicodeString, and instead UTF16PtrFromString should be used for | ||||
| // the more common *uint16 string type. | ||||
| func NewNTUnicodeString(s string) (*NTUnicodeString, error) { | ||||
| 	var u NTUnicodeString | ||||
| 	s16, err := UTF16PtrFromString(s) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	RtlInitUnicodeString(&u, s16) | ||||
| 	return &u, nil | ||||
| } | ||||
| 
 | ||||
| // Slice returns a uint16 slice that aliases the data in the NTUnicodeString. | ||||
| func (s *NTUnicodeString) Slice() []uint16 { | ||||
| 	var slice []uint16 | ||||
| 	hdr := (*unsafeheader.Slice)(unsafe.Pointer(&slice)) | ||||
| 	hdr.Data = unsafe.Pointer(s.Buffer) | ||||
| 	hdr.Len = int(s.Length) | ||||
| 	hdr.Cap = int(s.MaximumLength) | ||||
| 	return slice | ||||
| } | ||||
| 
 | ||||
| func (s *NTUnicodeString) String() string { | ||||
| 	return UTF16ToString(s.Slice()) | ||||
| } | ||||
| 
 | ||||
| // NewNTString returns a new NTString structure for use with native | ||||
| // NT APIs that work over the NTString type. Note that most Windows APIs | ||||
| // do not use NTString, and instead UTF16PtrFromString should be used for | ||||
| // the more common *uint16 string type. | ||||
| func NewNTString(s string) (*NTString, error) { | ||||
| 	var nts NTString | ||||
| 	s8, err := BytePtrFromString(s) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	RtlInitString(&nts, s8) | ||||
| 	return &nts, nil | ||||
| } | ||||
| 
 | ||||
| // Slice returns a byte slice that aliases the data in the NTString. | ||||
| func (s *NTString) Slice() []byte { | ||||
| 	var slice []byte | ||||
| 	hdr := (*unsafeheader.Slice)(unsafe.Pointer(&slice)) | ||||
| 	hdr.Data = unsafe.Pointer(s.Buffer) | ||||
| 	hdr.Len = int(s.Length) | ||||
| 	hdr.Cap = int(s.MaximumLength) | ||||
| 	return slice | ||||
| } | ||||
| 
 | ||||
| func (s *NTString) String() string { | ||||
| 	return ByteSliceToString(s.Slice()) | ||||
| } | ||||
| 
 | ||||
| // FindResource resolves a resource of the given name and resource type. | ||||
| func FindResource(module Handle, name, resType ResourceIDOrString) (Handle, error) { | ||||
| 	var namePtr, resTypePtr uintptr | ||||
| 	var name16, resType16 *uint16 | ||||
| 	var err error | ||||
| 	resolvePtr := func(i interface{}, keep **uint16) (uintptr, error) { | ||||
| 		switch v := i.(type) { | ||||
| 		case string: | ||||
| 			*keep, err = UTF16PtrFromString(v) | ||||
| 			if err != nil { | ||||
| 				return 0, err | ||||
| 			} | ||||
| 			return uintptr(unsafe.Pointer(*keep)), nil | ||||
| 		case ResourceID: | ||||
| 			return uintptr(v), nil | ||||
| 		} | ||||
| 		return 0, errorspkg.New("parameter must be a ResourceID or a string") | ||||
| 	} | ||||
| 	namePtr, err = resolvePtr(name, &name16) | ||||
| 	if err != nil { | ||||
| 		return 0, err | ||||
| 	} | ||||
| 	resTypePtr, err = resolvePtr(resType, &resType16) | ||||
| 	if err != nil { | ||||
| 		return 0, err | ||||
| 	} | ||||
| 	resInfo, err := findResource(module, namePtr, resTypePtr) | ||||
| 	runtime.KeepAlive(name16) | ||||
| 	runtime.KeepAlive(resType16) | ||||
| 	return resInfo, err | ||||
| } | ||||
| 
 | ||||
| func LoadResourceData(module, resInfo Handle) (data []byte, err error) { | ||||
| 	size, err := SizeofResource(module, resInfo) | ||||
| 	if err != nil { | ||||
| 		return | ||||
| 	} | ||||
| 	resData, err := LoadResource(module, resInfo) | ||||
| 	if err != nil { | ||||
| 		return | ||||
| 	} | ||||
| 	ptr, err := LockResource(resData) | ||||
| 	if err != nil { | ||||
| 		return | ||||
| 	} | ||||
| 	h := (*unsafeheader.Slice)(unsafe.Pointer(&data)) | ||||
| 	h.Data = unsafe.Pointer(ptr) | ||||
| 	h.Len = int(size) | ||||
| 	h.Cap = int(size) | ||||
| 	return | ||||
| } | ||||
| 
 | ||||
| // PSAPI_WORKING_SET_EX_BLOCK contains extended working set information for a page. | ||||
| type PSAPI_WORKING_SET_EX_BLOCK uint64 | ||||
| 
 | ||||
| // Valid returns the validity of this page. | ||||
| // If this bit is 1, the subsequent members are valid; otherwise they should be ignored. | ||||
| func (b PSAPI_WORKING_SET_EX_BLOCK) Valid() bool { | ||||
| 	return (b & 1) == 1 | ||||
| } | ||||
| 
 | ||||
| // ShareCount is the number of processes that share this page. The maximum value of this member is 7. | ||||
| func (b PSAPI_WORKING_SET_EX_BLOCK) ShareCount() uint64 { | ||||
| 	return b.intField(1, 3) | ||||
| } | ||||
| 
 | ||||
| // Win32Protection is the memory protection attributes of the page. For a list of values, see | ||||
| // https://docs.microsoft.com/en-us/windows/win32/memory/memory-protection-constants | ||||
| func (b PSAPI_WORKING_SET_EX_BLOCK) Win32Protection() uint64 { | ||||
| 	return b.intField(4, 11) | ||||
| } | ||||
| 
 | ||||
| // Shared returns the shared status of this page. | ||||
| // If this bit is 1, the page can be shared. | ||||
| func (b PSAPI_WORKING_SET_EX_BLOCK) Shared() bool { | ||||
| 	return (b & (1 << 15)) == 1 | ||||
| } | ||||
| 
 | ||||
| // Node is the NUMA node. The maximum value of this member is 63. | ||||
| func (b PSAPI_WORKING_SET_EX_BLOCK) Node() uint64 { | ||||
| 	return b.intField(16, 6) | ||||
| } | ||||
| 
 | ||||
| // Locked returns the locked status of this page. | ||||
| // If this bit is 1, the virtual page is locked in physical memory. | ||||
| func (b PSAPI_WORKING_SET_EX_BLOCK) Locked() bool { | ||||
| 	return (b & (1 << 22)) == 1 | ||||
| } | ||||
| 
 | ||||
| // LargePage returns the large page status of this page. | ||||
| // If this bit is 1, the page is a large page. | ||||
| func (b PSAPI_WORKING_SET_EX_BLOCK) LargePage() bool { | ||||
| 	return (b & (1 << 23)) == 1 | ||||
| } | ||||
| 
 | ||||
| // Bad returns the bad status of this page. | ||||
| // If this bit is 1, the page is has been reported as bad. | ||||
| func (b PSAPI_WORKING_SET_EX_BLOCK) Bad() bool { | ||||
| 	return (b & (1 << 31)) == 1 | ||||
| } | ||||
| 
 | ||||
| // intField extracts an integer field in the PSAPI_WORKING_SET_EX_BLOCK union. | ||||
| func (b PSAPI_WORKING_SET_EX_BLOCK) intField(start, length int) uint64 { | ||||
| 	var mask PSAPI_WORKING_SET_EX_BLOCK | ||||
| 	for pos := start; pos < start+length; pos++ { | ||||
| 		mask |= (1 << pos) | ||||
| 	} | ||||
| 
 | ||||
| 	masked := b & mask | ||||
| 	return uint64(masked >> start) | ||||
| } | ||||
| 
 | ||||
| // PSAPI_WORKING_SET_EX_INFORMATION contains extended working set information for a process. | ||||
| type PSAPI_WORKING_SET_EX_INFORMATION struct { | ||||
| 	// The virtual address. | ||||
| 	VirtualAddress Pointer | ||||
| 	// A PSAPI_WORKING_SET_EX_BLOCK union that indicates the attributes of the page at VirtualAddress. | ||||
| 	VirtualAttributes PSAPI_WORKING_SET_EX_BLOCK | ||||
| } | ||||
|  | ||||
							
								
								
									
										1757
									
								
								vendor/golang.org/x/sys/windows/types_windows.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1757
									
								
								vendor/golang.org/x/sys/windows/types_windows.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										13
									
								
								vendor/golang.org/x/sys/windows/types_windows_386.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										13
									
								
								vendor/golang.org/x/sys/windows/types_windows_386.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -20,3 +20,16 @@ type Servent struct { | ||||
| 	Port    uint16 | ||||
| 	Proto   *byte | ||||
| } | ||||
| 
 | ||||
| type JOBOBJECT_BASIC_LIMIT_INFORMATION struct { | ||||
| 	PerProcessUserTimeLimit int64 | ||||
| 	PerJobUserTimeLimit     int64 | ||||
| 	LimitFlags              uint32 | ||||
| 	MinimumWorkingSetSize   uintptr | ||||
| 	MaximumWorkingSetSize   uintptr | ||||
| 	ActiveProcessLimit      uint32 | ||||
| 	Affinity                uintptr | ||||
| 	PriorityClass           uint32 | ||||
| 	SchedulingClass         uint32 | ||||
| 	_                       uint32 // pad to 8 byte boundary | ||||
| } | ||||
|  | ||||
							
								
								
									
										12
									
								
								vendor/golang.org/x/sys/windows/types_windows_amd64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								vendor/golang.org/x/sys/windows/types_windows_amd64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -20,3 +20,15 @@ type Servent struct { | ||||
| 	Proto   *byte | ||||
| 	Port    uint16 | ||||
| } | ||||
| 
 | ||||
| type JOBOBJECT_BASIC_LIMIT_INFORMATION struct { | ||||
| 	PerProcessUserTimeLimit int64 | ||||
| 	PerJobUserTimeLimit     int64 | ||||
| 	LimitFlags              uint32 | ||||
| 	MinimumWorkingSetSize   uintptr | ||||
| 	MaximumWorkingSetSize   uintptr | ||||
| 	ActiveProcessLimit      uint32 | ||||
| 	Affinity                uintptr | ||||
| 	PriorityClass           uint32 | ||||
| 	SchedulingClass         uint32 | ||||
| } | ||||
|  | ||||
							
								
								
									
										13
									
								
								vendor/golang.org/x/sys/windows/types_windows_arm.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										13
									
								
								vendor/golang.org/x/sys/windows/types_windows_arm.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -20,3 +20,16 @@ type Servent struct { | ||||
| 	Port    uint16 | ||||
| 	Proto   *byte | ||||
| } | ||||
| 
 | ||||
| type JOBOBJECT_BASIC_LIMIT_INFORMATION struct { | ||||
| 	PerProcessUserTimeLimit int64 | ||||
| 	PerJobUserTimeLimit     int64 | ||||
| 	LimitFlags              uint32 | ||||
| 	MinimumWorkingSetSize   uintptr | ||||
| 	MaximumWorkingSetSize   uintptr | ||||
| 	ActiveProcessLimit      uint32 | ||||
| 	Affinity                uintptr | ||||
| 	PriorityClass           uint32 | ||||
| 	SchedulingClass         uint32 | ||||
| 	_                       uint32 // pad to 8 byte boundary | ||||
| } | ||||
|  | ||||
							
								
								
									
										34
									
								
								vendor/golang.org/x/sys/windows/types_windows_arm64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								vendor/golang.org/x/sys/windows/types_windows_arm64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,34 @@ | ||||
| // Copyright 2011 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. | ||||
| 
 | ||||
| package windows | ||||
| 
 | ||||
| type WSAData struct { | ||||
| 	Version      uint16 | ||||
| 	HighVersion  uint16 | ||||
| 	MaxSockets   uint16 | ||||
| 	MaxUdpDg     uint16 | ||||
| 	VendorInfo   *byte | ||||
| 	Description  [WSADESCRIPTION_LEN + 1]byte | ||||
| 	SystemStatus [WSASYS_STATUS_LEN + 1]byte | ||||
| } | ||||
| 
 | ||||
| type Servent struct { | ||||
| 	Name    *byte | ||||
| 	Aliases **byte | ||||
| 	Proto   *byte | ||||
| 	Port    uint16 | ||||
| } | ||||
| 
 | ||||
| type JOBOBJECT_BASIC_LIMIT_INFORMATION struct { | ||||
| 	PerProcessUserTimeLimit int64 | ||||
| 	PerJobUserTimeLimit     int64 | ||||
| 	LimitFlags              uint32 | ||||
| 	MinimumWorkingSetSize   uintptr | ||||
| 	MaximumWorkingSetSize   uintptr | ||||
| 	ActiveProcessLimit      uint32 | ||||
| 	Affinity                uintptr | ||||
| 	PriorityClass           uint32 | ||||
| 	SchedulingClass         uint32 | ||||
| } | ||||
							
								
								
									
										2619
									
								
								vendor/golang.org/x/sys/windows/zerrors_windows.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2619
									
								
								vendor/golang.org/x/sys/windows/zerrors_windows.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										6811
									
								
								vendor/golang.org/x/sys/windows/zsyscall_windows.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										6811
									
								
								vendor/golang.org/x/sys/windows/zsyscall_windows.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										5
									
								
								vendor/modules.txt
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								vendor/modules.txt
									
									
									
									
										vendored
									
									
								
							| @ -1,6 +1,7 @@ | ||||
| # git.rootprojects.org/root/go-gitver v1.1.3 | ||||
| git.rootprojects.org/root/go-gitver | ||||
| git.rootprojects.org/root/go-gitver/gitver | ||||
| # golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7 | ||||
| golang.org/x/sys/windows/registry | ||||
| # golang.org/x/sys v0.1.0 | ||||
| golang.org/x/sys/internal/unsafeheader | ||||
| golang.org/x/sys/windows | ||||
| golang.org/x/sys/windows/registry | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user