github.com/flyinox/gosm@v0.0.0-20171117061539-16768cb62077/src/internal/syscall/windows/syscall_windows.go (about)

     1  // Copyright 2014 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package windows
     6  
     7  import "syscall"
     8  
     9  const (
    10  	ERROR_SHARING_VIOLATION      syscall.Errno = 32
    11  	ERROR_NO_UNICODE_TRANSLATION syscall.Errno = 1113
    12  )
    13  
    14  const GAA_FLAG_INCLUDE_PREFIX = 0x00000010
    15  
    16  const (
    17  	IF_TYPE_OTHER              = 1
    18  	IF_TYPE_ETHERNET_CSMACD    = 6
    19  	IF_TYPE_ISO88025_TOKENRING = 9
    20  	IF_TYPE_PPP                = 23
    21  	IF_TYPE_SOFTWARE_LOOPBACK  = 24
    22  	IF_TYPE_ATM                = 37
    23  	IF_TYPE_IEEE80211          = 71
    24  	IF_TYPE_TUNNEL             = 131
    25  	IF_TYPE_IEEE1394           = 144
    26  )
    27  
    28  type SocketAddress struct {
    29  	Sockaddr       *syscall.RawSockaddrAny
    30  	SockaddrLength int32
    31  }
    32  
    33  type IpAdapterUnicastAddress struct {
    34  	Length             uint32
    35  	Flags              uint32
    36  	Next               *IpAdapterUnicastAddress
    37  	Address            SocketAddress
    38  	PrefixOrigin       int32
    39  	SuffixOrigin       int32
    40  	DadState           int32
    41  	ValidLifetime      uint32
    42  	PreferredLifetime  uint32
    43  	LeaseLifetime      uint32
    44  	OnLinkPrefixLength uint8
    45  }
    46  
    47  type IpAdapterAnycastAddress struct {
    48  	Length  uint32
    49  	Flags   uint32
    50  	Next    *IpAdapterAnycastAddress
    51  	Address SocketAddress
    52  }
    53  
    54  type IpAdapterMulticastAddress struct {
    55  	Length  uint32
    56  	Flags   uint32
    57  	Next    *IpAdapterMulticastAddress
    58  	Address SocketAddress
    59  }
    60  
    61  type IpAdapterDnsServerAdapter struct {
    62  	Length   uint32
    63  	Reserved uint32
    64  	Next     *IpAdapterDnsServerAdapter
    65  	Address  SocketAddress
    66  }
    67  
    68  type IpAdapterPrefix struct {
    69  	Length       uint32
    70  	Flags        uint32
    71  	Next         *IpAdapterPrefix
    72  	Address      SocketAddress
    73  	PrefixLength uint32
    74  }
    75  
    76  type IpAdapterAddresses struct {
    77  	Length                uint32
    78  	IfIndex               uint32
    79  	Next                  *IpAdapterAddresses
    80  	AdapterName           *byte
    81  	FirstUnicastAddress   *IpAdapterUnicastAddress
    82  	FirstAnycastAddress   *IpAdapterAnycastAddress
    83  	FirstMulticastAddress *IpAdapterMulticastAddress
    84  	FirstDnsServerAddress *IpAdapterDnsServerAdapter
    85  	DnsSuffix             *uint16
    86  	Description           *uint16
    87  	FriendlyName          *uint16
    88  	PhysicalAddress       [syscall.MAX_ADAPTER_ADDRESS_LENGTH]byte
    89  	PhysicalAddressLength uint32
    90  	Flags                 uint32
    91  	Mtu                   uint32
    92  	IfType                uint32
    93  	OperStatus            uint32
    94  	Ipv6IfIndex           uint32
    95  	ZoneIndices           [16]uint32
    96  	FirstPrefix           *IpAdapterPrefix
    97  	/* more fields might be present here. */
    98  }
    99  
   100  const (
   101  	IfOperStatusUp             = 1
   102  	IfOperStatusDown           = 2
   103  	IfOperStatusTesting        = 3
   104  	IfOperStatusUnknown        = 4
   105  	IfOperStatusDormant        = 5
   106  	IfOperStatusNotPresent     = 6
   107  	IfOperStatusLowerLayerDown = 7
   108  )
   109  
   110  //sys	GetAdaptersAddresses(family uint32, flags uint32, reserved uintptr, adapterAddresses *IpAdapterAddresses, sizePointer *uint32) (errcode error) = iphlpapi.GetAdaptersAddresses
   111  //sys	GetComputerNameEx(nameformat uint32, buf *uint16, n *uint32) (err error) = GetComputerNameExW
   112  //sys	MoveFileEx(from *uint16, to *uint16, flags uint32) (err error) = MoveFileExW
   113  //sys	GetModuleFileName(module syscall.Handle, fn *uint16, len uint32) (n uint32, err error) = kernel32.GetModuleFileNameW
   114  
   115  const (
   116  	ComputerNameNetBIOS                   = 0
   117  	ComputerNameDnsHostname               = 1
   118  	ComputerNameDnsDomain                 = 2
   119  	ComputerNameDnsFullyQualified         = 3
   120  	ComputerNamePhysicalNetBIOS           = 4
   121  	ComputerNamePhysicalDnsHostname       = 5
   122  	ComputerNamePhysicalDnsDomain         = 6
   123  	ComputerNamePhysicalDnsFullyQualified = 7
   124  	ComputerNameMax                       = 8
   125  
   126  	MOVEFILE_REPLACE_EXISTING      = 0x1
   127  	MOVEFILE_COPY_ALLOWED          = 0x2
   128  	MOVEFILE_DELAY_UNTIL_REBOOT    = 0x4
   129  	MOVEFILE_WRITE_THROUGH         = 0x8
   130  	MOVEFILE_CREATE_HARDLINK       = 0x10
   131  	MOVEFILE_FAIL_IF_NOT_TRACKABLE = 0x20
   132  )
   133  
   134  func Rename(oldpath, newpath string) error {
   135  	from, err := syscall.UTF16PtrFromString(oldpath)
   136  	if err != nil {
   137  		return err
   138  	}
   139  	to, err := syscall.UTF16PtrFromString(newpath)
   140  	if err != nil {
   141  		return err
   142  	}
   143  	return MoveFileEx(from, to, MOVEFILE_REPLACE_EXISTING)
   144  }
   145  
   146  const MB_ERR_INVALID_CHARS = 8
   147  
   148  //sys	GetACP() (acp uint32) = kernel32.GetACP
   149  //sys	GetConsoleCP() (ccp uint32) = kernel32.GetConsoleCP
   150  //sys	MultiByteToWideChar(codePage uint32, dwFlags uint32, str *byte, nstr int32, wchar *uint16, nwchar int32) (nwrite int32, err error) = kernel32.MultiByteToWideChar
   151  //sys	GetCurrentThread() (pseudoHandle syscall.Handle, err error) = kernel32.GetCurrentThread
   152  
   153  const STYPE_DISKTREE = 0x00
   154  
   155  type SHARE_INFO_2 struct {
   156  	Netname     *uint16
   157  	Type        uint32
   158  	Remark      *uint16
   159  	Permissions uint32
   160  	MaxUses     uint32
   161  	CurrentUses uint32
   162  	Path        *uint16
   163  	Passwd      *uint16
   164  }
   165  
   166  //sys  NetShareAdd(serverName *uint16, level uint32, buf *byte, parmErr *uint16) (neterr error) = netapi32.NetShareAdd
   167  //sys  NetShareDel(serverName *uint16, netName *uint16, reserved uint32) (neterr error) = netapi32.NetShareDel