mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			129 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			129 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Go
		
	
	
	
| // Copyright 2016 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
 | |
| 
 | |
| import (
 | |
| 	"syscall"
 | |
| 	"unsafe"
 | |
| )
 | |
| 
 | |
| const (
 | |
| 	SecurityAnonymous      = 0
 | |
| 	SecurityIdentification = 1
 | |
| 	SecurityImpersonation  = 2
 | |
| 	SecurityDelegation     = 3
 | |
| )
 | |
| 
 | |
| //sys	ImpersonateSelf(impersonationlevel uint32) (err error) = advapi32.ImpersonateSelf
 | |
| //sys	RevertToSelf() (err error) = advapi32.RevertToSelf
 | |
| 
 | |
| const (
 | |
| 	TOKEN_ADJUST_PRIVILEGES = 0x0020
 | |
| 	SE_PRIVILEGE_ENABLED    = 0x00000002
 | |
| )
 | |
| 
 | |
| type LUID struct {
 | |
| 	LowPart  uint32
 | |
| 	HighPart int32
 | |
| }
 | |
| 
 | |
| type LUID_AND_ATTRIBUTES struct {
 | |
| 	Luid       LUID
 | |
| 	Attributes uint32
 | |
| }
 | |
| 
 | |
| type TOKEN_PRIVILEGES struct {
 | |
| 	PrivilegeCount uint32
 | |
| 	Privileges     [1]LUID_AND_ATTRIBUTES
 | |
| }
 | |
| 
 | |
| //sys	OpenThreadToken(h syscall.Handle, access uint32, openasself bool, token *syscall.Token) (err error) = advapi32.OpenThreadToken
 | |
| //sys	LookupPrivilegeValue(systemname *uint16, name *uint16, luid *LUID) (err error) = advapi32.LookupPrivilegeValueW
 | |
| //sys	adjustTokenPrivileges(token syscall.Token, disableAllPrivileges bool, newstate *TOKEN_PRIVILEGES, buflen uint32, prevstate *TOKEN_PRIVILEGES, returnlen *uint32) (ret uint32, err error) [true] = advapi32.AdjustTokenPrivileges
 | |
| 
 | |
| func AdjustTokenPrivileges(token syscall.Token, disableAllPrivileges bool, newstate *TOKEN_PRIVILEGES, buflen uint32, prevstate *TOKEN_PRIVILEGES, returnlen *uint32) error {
 | |
| 	ret, err := adjustTokenPrivileges(token, disableAllPrivileges, newstate, buflen, prevstate, returnlen)
 | |
| 	if ret == 0 {
 | |
| 		// AdjustTokenPrivileges call failed
 | |
| 		return err
 | |
| 	}
 | |
| 	// AdjustTokenPrivileges call succeeded
 | |
| 	if err == syscall.EINVAL {
 | |
| 		// GetLastError returned ERROR_SUCCESS
 | |
| 		return nil
 | |
| 	}
 | |
| 	return err
 | |
| }
 | |
| 
 | |
| //sys DuplicateTokenEx(hExistingToken syscall.Token, dwDesiredAccess uint32, lpTokenAttributes *syscall.SecurityAttributes, impersonationLevel uint32, tokenType TokenType, phNewToken *syscall.Token) (err error) = advapi32.DuplicateTokenEx
 | |
| //sys SetTokenInformation(tokenHandle syscall.Token, tokenInformationClass uint32, tokenInformation uintptr, tokenInformationLength uint32) (err error) = advapi32.SetTokenInformation
 | |
| 
 | |
| type SID_AND_ATTRIBUTES struct {
 | |
| 	Sid        *syscall.SID
 | |
| 	Attributes uint32
 | |
| }
 | |
| 
 | |
| type TOKEN_MANDATORY_LABEL struct {
 | |
| 	Label SID_AND_ATTRIBUTES
 | |
| }
 | |
| 
 | |
| func (tml *TOKEN_MANDATORY_LABEL) Size() uint32 {
 | |
| 	return uint32(unsafe.Sizeof(TOKEN_MANDATORY_LABEL{})) + syscall.GetLengthSid(tml.Label.Sid)
 | |
| }
 | |
| 
 | |
| const SE_GROUP_INTEGRITY = 0x00000020
 | |
| 
 | |
| type TokenType uint32
 | |
| 
 | |
| const (
 | |
| 	TokenPrimary       TokenType = 1
 | |
| 	TokenImpersonation TokenType = 2
 | |
| )
 | |
| 
 | |
| //sys	GetProfilesDirectory(dir *uint16, dirLen *uint32) (err error) = userenv.GetProfilesDirectoryW
 | |
| 
 | |
| const (
 | |
| 	LG_INCLUDE_INDIRECT  = 0x1
 | |
| 	MAX_PREFERRED_LENGTH = 0xFFFFFFFF
 | |
| )
 | |
| 
 | |
| type LocalGroupUserInfo0 struct {
 | |
| 	Name *uint16
 | |
| }
 | |
| 
 | |
| type UserInfo4 struct {
 | |
| 	Name            *uint16
 | |
| 	Password        *uint16
 | |
| 	PasswordAge     uint32
 | |
| 	Priv            uint32
 | |
| 	HomeDir         *uint16
 | |
| 	Comment         *uint16
 | |
| 	Flags           uint32
 | |
| 	ScriptPath      *uint16
 | |
| 	AuthFlags       uint32
 | |
| 	FullName        *uint16
 | |
| 	UsrComment      *uint16
 | |
| 	Parms           *uint16
 | |
| 	Workstations    *uint16
 | |
| 	LastLogon       uint32
 | |
| 	LastLogoff      uint32
 | |
| 	AcctExpires     uint32
 | |
| 	MaxStorage      uint32
 | |
| 	UnitsPerWeek    uint32
 | |
| 	LogonHours      *byte
 | |
| 	BadPwCount      uint32
 | |
| 	NumLogons       uint32
 | |
| 	LogonServer     *uint16
 | |
| 	CountryCode     uint32
 | |
| 	CodePage        uint32
 | |
| 	UserSid         *syscall.SID
 | |
| 	PrimaryGroupID  uint32
 | |
| 	Profile         *uint16
 | |
| 	HomeDirDrive    *uint16
 | |
| 	PasswordExpired uint32
 | |
| }
 | |
| 
 | |
| //sys	NetUserGetLocalGroups(serverName *uint16, userName *uint16, level uint32, flags uint32, buf **byte, prefMaxLen uint32, entriesRead *uint32, totalEntries *uint32) (neterr error) = netapi32.NetUserGetLocalGroups
 |