github.com/sbinet/go@v0.0.0-20160827155028-54d7de7dd62b/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 GAA_FLAG_INCLUDE_PREFIX = 0x00000010
    10  
    11  const (
    12  	IF_TYPE_OTHER              = 1
    13  	IF_TYPE_ETHERNET_CSMACD    = 6
    14  	IF_TYPE_ISO88025_TOKENRING = 9
    15  	IF_TYPE_PPP                = 23
    16  	IF_TYPE_SOFTWARE_LOOPBACK  = 24
    17  	IF_TYPE_ATM                = 37
    18  	IF_TYPE_IEEE80211          = 71
    19  	IF_TYPE_TUNNEL             = 131
    20  	IF_TYPE_IEEE1394           = 144
    21  )
    22  
    23  type SocketAddress struct {
    24  	Sockaddr       *syscall.RawSockaddrAny
    25  	SockaddrLength int32
    26  }
    27  
    28  type IpAdapterUnicastAddress struct {
    29  	Length             uint32
    30  	Flags              uint32
    31  	Next               *IpAdapterUnicastAddress
    32  	Address            SocketAddress
    33  	PrefixOrigin       int32
    34  	SuffixOrigin       int32
    35  	DadState           int32
    36  	ValidLifetime      uint32
    37  	PreferredLifetime  uint32
    38  	LeaseLifetime      uint32
    39  	OnLinkPrefixLength uint8
    40  }
    41  
    42  type IpAdapterAnycastAddress struct {
    43  	Length  uint32
    44  	Flags   uint32
    45  	Next    *IpAdapterAnycastAddress
    46  	Address SocketAddress
    47  }
    48  
    49  type IpAdapterMulticastAddress struct {
    50  	Length  uint32
    51  	Flags   uint32
    52  	Next    *IpAdapterMulticastAddress
    53  	Address SocketAddress
    54  }
    55  
    56  type IpAdapterDnsServerAdapter struct {
    57  	Length   uint32
    58  	Reserved uint32
    59  	Next     *IpAdapterDnsServerAdapter
    60  	Address  SocketAddress
    61  }
    62  
    63  type IpAdapterPrefix struct {
    64  	Length       uint32
    65  	Flags        uint32
    66  	Next         *IpAdapterPrefix
    67  	Address      SocketAddress
    68  	PrefixLength uint32
    69  }
    70  
    71  type IpAdapterAddresses struct {
    72  	Length                uint32
    73  	IfIndex               uint32
    74  	Next                  *IpAdapterAddresses
    75  	AdapterName           *byte
    76  	FirstUnicastAddress   *IpAdapterUnicastAddress
    77  	FirstAnycastAddress   *IpAdapterAnycastAddress
    78  	FirstMulticastAddress *IpAdapterMulticastAddress
    79  	FirstDnsServerAddress *IpAdapterDnsServerAdapter
    80  	DnsSuffix             *uint16
    81  	Description           *uint16
    82  	FriendlyName          *uint16
    83  	PhysicalAddress       [syscall.MAX_ADAPTER_ADDRESS_LENGTH]byte
    84  	PhysicalAddressLength uint32
    85  	Flags                 uint32
    86  	Mtu                   uint32
    87  	IfType                uint32
    88  	OperStatus            uint32
    89  	Ipv6IfIndex           uint32
    90  	ZoneIndices           [16]uint32
    91  	FirstPrefix           *IpAdapterPrefix
    92  	/* more fields might be present here. */
    93  }
    94  
    95  const (
    96  	IfOperStatusUp             = 1
    97  	IfOperStatusDown           = 2
    98  	IfOperStatusTesting        = 3
    99  	IfOperStatusUnknown        = 4
   100  	IfOperStatusDormant        = 5
   101  	IfOperStatusNotPresent     = 6
   102  	IfOperStatusLowerLayerDown = 7
   103  )
   104  
   105  //sys	GetAdaptersAddresses(family uint32, flags uint32, reserved uintptr, adapterAddresses *IpAdapterAddresses, sizePointer *uint32) (errcode error) = iphlpapi.GetAdaptersAddresses
   106  //sys	GetComputerNameEx(nameformat uint32, buf *uint16, n *uint32) (err error) = GetComputerNameExW
   107  //sys	MoveFileEx(from *uint16, to *uint16, flags uint32) (err error) = MoveFileExW
   108  
   109  const (
   110  	ComputerNameNetBIOS                   = 0
   111  	ComputerNameDnsHostname               = 1
   112  	ComputerNameDnsDomain                 = 2
   113  	ComputerNameDnsFullyQualified         = 3
   114  	ComputerNamePhysicalNetBIOS           = 4
   115  	ComputerNamePhysicalDnsHostname       = 5
   116  	ComputerNamePhysicalDnsDomain         = 6
   117  	ComputerNamePhysicalDnsFullyQualified = 7
   118  	ComputerNameMax                       = 8
   119  
   120  	MOVEFILE_REPLACE_EXISTING      = 0x1
   121  	MOVEFILE_COPY_ALLOWED          = 0x2
   122  	MOVEFILE_DELAY_UNTIL_REBOOT    = 0x4
   123  	MOVEFILE_WRITE_THROUGH         = 0x8
   124  	MOVEFILE_CREATE_HARDLINK       = 0x10
   125  	MOVEFILE_FAIL_IF_NOT_TRACKABLE = 0x20
   126  )
   127  
   128  func Rename(oldpath, newpath string) error {
   129  	from, err := syscall.UTF16PtrFromString(oldpath)
   130  	if err != nil {
   131  		return err
   132  	}
   133  	to, err := syscall.UTF16PtrFromString(newpath)
   134  	if err != nil {
   135  		return err
   136  	}
   137  	return MoveFileEx(from, to, MOVEFILE_REPLACE_EXISTING)
   138  }
   139  
   140  //sys	GetACP() (acp uint32) = kernel32.GetACP
   141  //sys	MultiByteToWideChar(codePage uint32, dwFlags uint32, str *byte, nstr int32, wchar *uint16, nwchar int32) (nwrite int32, err error) = kernel32.MultiByteToWideChar