...
Run Format

Source file src/syscall/ztypes_windows.go

  // 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 syscall
  
  const (
  	// Windows errors.
  	ERROR_FILE_NOT_FOUND      Errno = 2
  	ERROR_PATH_NOT_FOUND      Errno = 3
  	ERROR_ACCESS_DENIED       Errno = 5
  	ERROR_NO_MORE_FILES       Errno = 18
  	ERROR_HANDLE_EOF          Errno = 38
  	ERROR_NETNAME_DELETED     Errno = 64
  	ERROR_FILE_EXISTS         Errno = 80
  	ERROR_BROKEN_PIPE         Errno = 109
  	ERROR_BUFFER_OVERFLOW     Errno = 111
  	ERROR_INSUFFICIENT_BUFFER Errno = 122
  	ERROR_MOD_NOT_FOUND       Errno = 126
  	ERROR_PROC_NOT_FOUND      Errno = 127
  	ERROR_DIR_NOT_EMPTY       Errno = 145
  	ERROR_ALREADY_EXISTS      Errno = 183
  	ERROR_ENVVAR_NOT_FOUND    Errno = 203
  	ERROR_MORE_DATA           Errno = 234
  	ERROR_OPERATION_ABORTED   Errno = 995
  	ERROR_IO_PENDING          Errno = 997
  	ERROR_NOT_FOUND           Errno = 1168
  	ERROR_PRIVILEGE_NOT_HELD  Errno = 1314
  	WSAEACCES                 Errno = 10013
  	WSAECONNRESET             Errno = 10054
  )
  
  const (
  	// Invented values to support what package os expects.
  	O_RDONLY   = 0x00000
  	O_WRONLY   = 0x00001
  	O_RDWR     = 0x00002
  	O_CREAT    = 0x00040
  	O_EXCL     = 0x00080
  	O_NOCTTY   = 0x00100
  	O_TRUNC    = 0x00200
  	O_NONBLOCK = 0x00800
  	O_APPEND   = 0x00400
  	O_SYNC     = 0x01000
  	O_ASYNC    = 0x02000
  	O_CLOEXEC  = 0x80000
  )
  
  const (
  	// More invented values for signals
  	SIGHUP  = Signal(0x1)
  	SIGINT  = Signal(0x2)
  	SIGQUIT = Signal(0x3)
  	SIGILL  = Signal(0x4)
  	SIGTRAP = Signal(0x5)
  	SIGABRT = Signal(0x6)
  	SIGBUS  = Signal(0x7)
  	SIGFPE  = Signal(0x8)
  	SIGKILL = Signal(0x9)
  	SIGSEGV = Signal(0xb)
  	SIGPIPE = Signal(0xd)
  	SIGALRM = Signal(0xe)
  	SIGTERM = Signal(0xf)
  )
  
  var signals = [...]string{
  	1:  "hangup",
  	2:  "interrupt",
  	3:  "quit",
  	4:  "illegal instruction",
  	5:  "trace/breakpoint trap",
  	6:  "aborted",
  	7:  "bus error",
  	8:  "floating point exception",
  	9:  "killed",
  	10: "user defined signal 1",
  	11: "segmentation fault",
  	12: "user defined signal 2",
  	13: "broken pipe",
  	14: "alarm clock",
  	15: "terminated",
  }
  
  const (
  	GENERIC_READ    = 0x80000000
  	GENERIC_WRITE   = 0x40000000
  	GENERIC_EXECUTE = 0x20000000
  	GENERIC_ALL     = 0x10000000
  
  	FILE_LIST_DIRECTORY   = 0x00000001
  	FILE_APPEND_DATA      = 0x00000004
  	FILE_WRITE_ATTRIBUTES = 0x00000100
  
  	FILE_SHARE_READ              = 0x00000001
  	FILE_SHARE_WRITE             = 0x00000002
  	FILE_SHARE_DELETE            = 0x00000004
  	FILE_ATTRIBUTE_READONLY      = 0x00000001
  	FILE_ATTRIBUTE_HIDDEN        = 0x00000002
  	FILE_ATTRIBUTE_SYSTEM        = 0x00000004
  	FILE_ATTRIBUTE_DIRECTORY     = 0x00000010
  	FILE_ATTRIBUTE_ARCHIVE       = 0x00000020
  	FILE_ATTRIBUTE_NORMAL        = 0x00000080
  	FILE_ATTRIBUTE_REPARSE_POINT = 0x00000400
  
  	INVALID_FILE_ATTRIBUTES = 0xffffffff
  
  	CREATE_NEW        = 1
  	CREATE_ALWAYS     = 2
  	OPEN_EXISTING     = 3
  	OPEN_ALWAYS       = 4
  	TRUNCATE_EXISTING = 5
  
  	FILE_FLAG_OPEN_REPARSE_POINT = 0x00200000
  	FILE_FLAG_BACKUP_SEMANTICS   = 0x02000000
  	FILE_FLAG_OVERLAPPED         = 0x40000000
  
  	HANDLE_FLAG_INHERIT    = 0x00000001
  	STARTF_USESTDHANDLES   = 0x00000100
  	STARTF_USESHOWWINDOW   = 0x00000001
  	DUPLICATE_CLOSE_SOURCE = 0x00000001
  	DUPLICATE_SAME_ACCESS  = 0x00000002
  
  	STD_INPUT_HANDLE  = -10
  	STD_OUTPUT_HANDLE = -11
  	STD_ERROR_HANDLE  = -12
  
  	FILE_BEGIN   = 0
  	FILE_CURRENT = 1
  	FILE_END     = 2
  
  	LANG_ENGLISH       = 0x09
  	SUBLANG_ENGLISH_US = 0x01
  
  	FORMAT_MESSAGE_ALLOCATE_BUFFER = 256
  	FORMAT_MESSAGE_IGNORE_INSERTS  = 512
  	FORMAT_MESSAGE_FROM_STRING     = 1024
  	FORMAT_MESSAGE_FROM_HMODULE    = 2048
  	FORMAT_MESSAGE_FROM_SYSTEM     = 4096
  	FORMAT_MESSAGE_ARGUMENT_ARRAY  = 8192
  	FORMAT_MESSAGE_MAX_WIDTH_MASK  = 255
  
  	MAX_PATH      = 260
  	MAX_LONG_PATH = 32768
  
  	MAX_COMPUTERNAME_LENGTH = 15
  
  	TIME_ZONE_ID_UNKNOWN  = 0
  	TIME_ZONE_ID_STANDARD = 1
  
  	TIME_ZONE_ID_DAYLIGHT = 2
  	IGNORE                = 0
  	INFINITE              = 0xffffffff
  
  	WAIT_TIMEOUT   = 258
  	WAIT_ABANDONED = 0x00000080
  	WAIT_OBJECT_0  = 0x00000000
  	WAIT_FAILED    = 0xFFFFFFFF
  
  	CREATE_NEW_PROCESS_GROUP   = 0x00000200
  	CREATE_UNICODE_ENVIRONMENT = 0x00000400
  
  	PROCESS_TERMINATE         = 1
  	PROCESS_QUERY_INFORMATION = 0x00000400
  	SYNCHRONIZE               = 0x00100000
  
  	PAGE_READONLY          = 0x02
  	PAGE_READWRITE         = 0x04
  	PAGE_WRITECOPY         = 0x08
  	PAGE_EXECUTE_READ      = 0x20
  	PAGE_EXECUTE_READWRITE = 0x40
  	PAGE_EXECUTE_WRITECOPY = 0x80
  
  	FILE_MAP_COPY    = 0x01
  	FILE_MAP_WRITE   = 0x02
  	FILE_MAP_READ    = 0x04
  	FILE_MAP_EXECUTE = 0x20
  
  	CTRL_C_EVENT     = 0
  	CTRL_BREAK_EVENT = 1
  )
  
  const (
  	// flags for CreateToolhelp32Snapshot
  	TH32CS_SNAPHEAPLIST = 0x01
  	TH32CS_SNAPPROCESS  = 0x02
  	TH32CS_SNAPTHREAD   = 0x04
  	TH32CS_SNAPMODULE   = 0x08
  	TH32CS_SNAPMODULE32 = 0x10
  	TH32CS_SNAPALL      = TH32CS_SNAPHEAPLIST | TH32CS_SNAPMODULE | TH32CS_SNAPPROCESS | TH32CS_SNAPTHREAD
  	TH32CS_INHERIT      = 0x80000000
  )
  
  const (
  	// do not reorder
  	FILE_NOTIFY_CHANGE_FILE_NAME = 1 << iota
  	FILE_NOTIFY_CHANGE_DIR_NAME
  	FILE_NOTIFY_CHANGE_ATTRIBUTES
  	FILE_NOTIFY_CHANGE_SIZE
  	FILE_NOTIFY_CHANGE_LAST_WRITE
  	FILE_NOTIFY_CHANGE_LAST_ACCESS
  	FILE_NOTIFY_CHANGE_CREATION
  )
  
  const (
  	// do not reorder
  	FILE_ACTION_ADDED = iota + 1
  	FILE_ACTION_REMOVED
  	FILE_ACTION_MODIFIED
  	FILE_ACTION_RENAMED_OLD_NAME
  	FILE_ACTION_RENAMED_NEW_NAME
  )
  
  const (
  	// wincrypt.h
  	PROV_RSA_FULL                    = 1
  	PROV_RSA_SIG                     = 2
  	PROV_DSS                         = 3
  	PROV_FORTEZZA                    = 4
  	PROV_MS_EXCHANGE                 = 5
  	PROV_SSL                         = 6
  	PROV_RSA_SCHANNEL                = 12
  	PROV_DSS_DH                      = 13
  	PROV_EC_ECDSA_SIG                = 14
  	PROV_EC_ECNRA_SIG                = 15
  	PROV_EC_ECDSA_FULL               = 16
  	PROV_EC_ECNRA_FULL               = 17
  	PROV_DH_SCHANNEL                 = 18
  	PROV_SPYRUS_LYNKS                = 20
  	PROV_RNG                         = 21
  	PROV_INTEL_SEC                   = 22
  	PROV_REPLACE_OWF                 = 23
  	PROV_RSA_AES                     = 24
  	CRYPT_VERIFYCONTEXT              = 0xF0000000
  	CRYPT_NEWKEYSET                  = 0x00000008
  	CRYPT_DELETEKEYSET               = 0x00000010
  	CRYPT_MACHINE_KEYSET             = 0x00000020
  	CRYPT_SILENT                     = 0x00000040
  	CRYPT_DEFAULT_CONTAINER_OPTIONAL = 0x00000080
  
  	USAGE_MATCH_TYPE_AND = 0
  	USAGE_MATCH_TYPE_OR  = 1
  
  	X509_ASN_ENCODING   = 0x00000001
  	PKCS_7_ASN_ENCODING = 0x00010000
  
  	CERT_STORE_PROV_MEMORY = 2
  
  	CERT_STORE_ADD_ALWAYS = 4
  
  	CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG = 0x00000004
  
  	CERT_TRUST_NO_ERROR                          = 0x00000000
  	CERT_TRUST_IS_NOT_TIME_VALID                 = 0x00000001
  	CERT_TRUST_IS_REVOKED                        = 0x00000004
  	CERT_TRUST_IS_NOT_SIGNATURE_VALID            = 0x00000008
  	CERT_TRUST_IS_NOT_VALID_FOR_USAGE            = 0x00000010
  	CERT_TRUST_IS_UNTRUSTED_ROOT                 = 0x00000020
  	CERT_TRUST_REVOCATION_STATUS_UNKNOWN         = 0x00000040
  	CERT_TRUST_IS_CYCLIC                         = 0x00000080
  	CERT_TRUST_INVALID_EXTENSION                 = 0x00000100
  	CERT_TRUST_INVALID_POLICY_CONSTRAINTS        = 0x00000200
  	CERT_TRUST_INVALID_BASIC_CONSTRAINTS         = 0x00000400
  	CERT_TRUST_INVALID_NAME_CONSTRAINTS          = 0x00000800
  	CERT_TRUST_HAS_NOT_SUPPORTED_NAME_CONSTRAINT = 0x00001000
  	CERT_TRUST_HAS_NOT_DEFINED_NAME_CONSTRAINT   = 0x00002000
  	CERT_TRUST_HAS_NOT_PERMITTED_NAME_CONSTRAINT = 0x00004000
  	CERT_TRUST_HAS_EXCLUDED_NAME_CONSTRAINT      = 0x00008000
  	CERT_TRUST_IS_OFFLINE_REVOCATION             = 0x01000000
  	CERT_TRUST_NO_ISSUANCE_CHAIN_POLICY          = 0x02000000
  	CERT_TRUST_IS_EXPLICIT_DISTRUST              = 0x04000000
  	CERT_TRUST_HAS_NOT_SUPPORTED_CRITICAL_EXT    = 0x08000000
  
  	CERT_CHAIN_POLICY_BASE              = 1
  	CERT_CHAIN_POLICY_AUTHENTICODE      = 2
  	CERT_CHAIN_POLICY_AUTHENTICODE_TS   = 3
  	CERT_CHAIN_POLICY_SSL               = 4
  	CERT_CHAIN_POLICY_BASIC_CONSTRAINTS = 5
  	CERT_CHAIN_POLICY_NT_AUTH           = 6
  	CERT_CHAIN_POLICY_MICROSOFT_ROOT    = 7
  	CERT_CHAIN_POLICY_EV                = 8
  
  	CERT_E_EXPIRED       = 0x800B0101
  	CERT_E_ROLE          = 0x800B0103
  	CERT_E_PURPOSE       = 0x800B0106
  	CERT_E_UNTRUSTEDROOT = 0x800B0109
  	CERT_E_CN_NO_MATCH   = 0x800B010F
  
  	AUTHTYPE_CLIENT = 1
  	AUTHTYPE_SERVER = 2
  )
  
  var (
  	OID_PKIX_KP_SERVER_AUTH = []byte("1.3.6.1.5.5.7.3.1\x00")
  	OID_SERVER_GATED_CRYPTO = []byte("1.3.6.1.4.1.311.10.3.3\x00")
  	OID_SGC_NETSCAPE        = []byte("2.16.840.1.113730.4.1\x00")
  )
  
  // Invented values to support what package os expects.
  type Timeval struct {
  	Sec  int32
  	Usec int32
  }
  
  func (tv *Timeval) Nanoseconds() int64 {
  	return (int64(tv.Sec)*1e6 + int64(tv.Usec)) * 1e3
  }
  
  func NsecToTimeval(nsec int64) (tv Timeval) {
  	tv.Sec = int32(nsec / 1e9)
  	tv.Usec = int32(nsec % 1e9 / 1e3)
  	return
  }
  
  type SecurityAttributes struct {
  	Length             uint32
  	SecurityDescriptor uintptr
  	InheritHandle      uint32
  }
  
  type Overlapped struct {
  	Internal     uintptr
  	InternalHigh uintptr
  	Offset       uint32
  	OffsetHigh   uint32
  	HEvent       Handle
  }
  
  type FileNotifyInformation struct {
  	NextEntryOffset uint32
  	Action          uint32
  	FileNameLength  uint32
  	FileName        uint16
  }
  
  type Filetime struct {
  	LowDateTime  uint32
  	HighDateTime uint32
  }
  
  // Nanoseconds returns Filetime ft in nanoseconds
  // since Epoch (00:00:00 UTC, January 1, 1970).
  func (ft *Filetime) Nanoseconds() int64 {
  	// 100-nanosecond intervals since January 1, 1601
  	nsec := int64(ft.HighDateTime)<<32 + int64(ft.LowDateTime)
  	// change starting time to the Epoch (00:00:00 UTC, January 1, 1970)
  	nsec -= 116444736000000000
  	// convert into nanoseconds
  	nsec *= 100
  	return nsec
  }
  
  func NsecToFiletime(nsec int64) (ft Filetime) {
  	// convert into 100-nanosecond
  	nsec /= 100
  	// change starting time to January 1, 1601
  	nsec += 116444736000000000
  	// split into high / low
  	ft.LowDateTime = uint32(nsec & 0xffffffff)
  	ft.HighDateTime = uint32(nsec >> 32 & 0xffffffff)
  	return ft
  }
  
  type Win32finddata struct {
  	FileAttributes    uint32
  	CreationTime      Filetime
  	LastAccessTime    Filetime
  	LastWriteTime     Filetime
  	FileSizeHigh      uint32
  	FileSizeLow       uint32
  	Reserved0         uint32
  	Reserved1         uint32
  	FileName          [MAX_PATH - 1]uint16
  	AlternateFileName [13]uint16
  }
  
  // This is the actual system call structure.
  // Win32finddata is what we committed to in Go 1.
  type win32finddata1 struct {
  	FileAttributes    uint32
  	CreationTime      Filetime
  	LastAccessTime    Filetime
  	LastWriteTime     Filetime
  	FileSizeHigh      uint32
  	FileSizeLow       uint32
  	Reserved0         uint32
  	Reserved1         uint32
  	FileName          [MAX_PATH]uint16
  	AlternateFileName [14]uint16
  }
  
  func copyFindData(dst *Win32finddata, src *win32finddata1) {
  	dst.FileAttributes = src.FileAttributes
  	dst.CreationTime = src.CreationTime
  	dst.LastAccessTime = src.LastAccessTime
  	dst.LastWriteTime = src.LastWriteTime
  	dst.FileSizeHigh = src.FileSizeHigh
  	dst.FileSizeLow = src.FileSizeLow
  	dst.Reserved0 = src.Reserved0
  	dst.Reserved1 = src.Reserved1
  
  	// The src is 1 element bigger than dst, but it must be NUL.
  	copy(dst.FileName[:], src.FileName[:])
  	copy(dst.AlternateFileName[:], src.AlternateFileName[:])
  }
  
  type ByHandleFileInformation struct {
  	FileAttributes     uint32
  	CreationTime       Filetime
  	LastAccessTime     Filetime
  	LastWriteTime      Filetime
  	VolumeSerialNumber uint32
  	FileSizeHigh       uint32
  	FileSizeLow        uint32
  	NumberOfLinks      uint32
  	FileIndexHigh      uint32
  	FileIndexLow       uint32
  }
  
  const (
  	GetFileExInfoStandard = 0
  	GetFileExMaxInfoLevel = 1
  )
  
  type Win32FileAttributeData struct {
  	FileAttributes uint32
  	CreationTime   Filetime
  	LastAccessTime Filetime
  	LastWriteTime  Filetime
  	FileSizeHigh   uint32
  	FileSizeLow    uint32
  }
  
  // ShowWindow constants
  const (
  	// winuser.h
  	SW_HIDE            = 0
  	SW_NORMAL          = 1
  	SW_SHOWNORMAL      = 1
  	SW_SHOWMINIMIZED   = 2
  	SW_SHOWMAXIMIZED   = 3
  	SW_MAXIMIZE        = 3
  	SW_SHOWNOACTIVATE  = 4
  	SW_SHOW            = 5
  	SW_MINIMIZE        = 6
  	SW_SHOWMINNOACTIVE = 7
  	SW_SHOWNA          = 8
  	SW_RESTORE         = 9
  	SW_SHOWDEFAULT     = 10
  	SW_FORCEMINIMIZE   = 11
  )
  
  type StartupInfo struct {
  	Cb            uint32
  	_             *uint16
  	Desktop       *uint16
  	Title         *uint16
  	X             uint32
  	Y             uint32
  	XSize         uint32
  	YSize         uint32
  	XCountChars   uint32
  	YCountChars   uint32
  	FillAttribute uint32
  	Flags         uint32
  	ShowWindow    uint16
  	_             uint16
  	_             *byte
  	StdInput      Handle
  	StdOutput     Handle
  	StdErr        Handle
  }
  
  type ProcessInformation struct {
  	Process   Handle
  	Thread    Handle
  	ProcessId uint32
  	ThreadId  uint32
  }
  
  type ProcessEntry32 struct {
  	Size            uint32
  	Usage           uint32
  	ProcessID       uint32
  	DefaultHeapID   uintptr
  	ModuleID        uint32
  	Threads         uint32
  	ParentProcessID uint32
  	PriClassBase    int32
  	Flags           uint32
  	ExeFile         [MAX_PATH]uint16
  }
  
  type Systemtime struct {
  	Year         uint16
  	Month        uint16
  	DayOfWeek    uint16
  	Day          uint16
  	Hour         uint16
  	Minute       uint16
  	Second       uint16
  	Milliseconds uint16
  }
  
  type Timezoneinformation struct {
  	Bias         int32
  	StandardName [32]uint16
  	StandardDate Systemtime
  	StandardBias int32
  	DaylightName [32]uint16
  	DaylightDate Systemtime
  	DaylightBias int32
  }
  
  // Socket related.
  
  const (
  	AF_UNSPEC  = 0
  	AF_UNIX    = 1
  	AF_INET    = 2
  	AF_INET6   = 23
  	AF_NETBIOS = 17
  
  	SOCK_STREAM    = 1
  	SOCK_DGRAM     = 2
  	SOCK_RAW       = 3
  	SOCK_SEQPACKET = 5
  
  	IPPROTO_IP   = 0
  	IPPROTO_IPV6 = 0x29
  	IPPROTO_TCP  = 6
  	IPPROTO_UDP  = 17
  
  	SOL_SOCKET                = 0xffff
  	SO_REUSEADDR              = 4
  	SO_KEEPALIVE              = 8
  	SO_DONTROUTE              = 16
  	SO_BROADCAST              = 32
  	SO_LINGER                 = 128
  	SO_RCVBUF                 = 0x1002
  	SO_SNDBUF                 = 0x1001
  	SO_UPDATE_ACCEPT_CONTEXT  = 0x700b
  	SO_UPDATE_CONNECT_CONTEXT = 0x7010
  
  	IOC_OUT                            = 0x40000000
  	IOC_IN                             = 0x80000000
  	IOC_VENDOR                         = 0x18000000
  	IOC_INOUT                          = IOC_IN | IOC_OUT
  	IOC_WS2                            = 0x08000000
  	SIO_GET_EXTENSION_FUNCTION_POINTER = IOC_INOUT | IOC_WS2 | 6
  	SIO_KEEPALIVE_VALS                 = IOC_IN | IOC_VENDOR | 4
  	SIO_UDP_CONNRESET                  = IOC_IN | IOC_VENDOR | 12
  
  	// cf. http://support.microsoft.com/default.aspx?scid=kb;en-us;257460
  
  	IP_TOS             = 0x3
  	IP_TTL             = 0x4
  	IP_MULTICAST_IF    = 0x9
  	IP_MULTICAST_TTL   = 0xa
  	IP_MULTICAST_LOOP  = 0xb
  	IP_ADD_MEMBERSHIP  = 0xc
  	IP_DROP_MEMBERSHIP = 0xd
  
  	IPV6_V6ONLY         = 0x1b
  	IPV6_UNICAST_HOPS   = 0x4
  	IPV6_MULTICAST_IF   = 0x9
  	IPV6_MULTICAST_HOPS = 0xa
  	IPV6_MULTICAST_LOOP = 0xb
  	IPV6_JOIN_GROUP     = 0xc
  	IPV6_LEAVE_GROUP    = 0xd
  
  	SOMAXCONN = 0x7fffffff
  
  	TCP_NODELAY = 1
  
  	SHUT_RD   = 0
  	SHUT_WR   = 1
  	SHUT_RDWR = 2
  
  	WSADESCRIPTION_LEN = 256
  	WSASYS_STATUS_LEN  = 128
  )
  
  type WSABuf struct {
  	Len uint32
  	Buf *byte
  }
  
  // Invented values to support what package os expects.
  const (
  	S_IFMT   = 0x1f000
  	S_IFIFO  = 0x1000
  	S_IFCHR  = 0x2000
  	S_IFDIR  = 0x4000
  	S_IFBLK  = 0x6000
  	S_IFREG  = 0x8000
  	S_IFLNK  = 0xa000
  	S_IFSOCK = 0xc000
  	S_ISUID  = 0x800
  	S_ISGID  = 0x400
  	S_ISVTX  = 0x200
  	S_IRUSR  = 0x100
  	S_IWRITE = 0x80
  	S_IWUSR  = 0x80
  	S_IXUSR  = 0x40
  )
  
  const (
  	FILE_TYPE_CHAR    = 0x0002
  	FILE_TYPE_DISK    = 0x0001
  	FILE_TYPE_PIPE    = 0x0003
  	FILE_TYPE_REMOTE  = 0x8000
  	FILE_TYPE_UNKNOWN = 0x0000
  )
  
  type Hostent struct {
  	Name     *byte
  	Aliases  **byte
  	AddrType uint16
  	Length   uint16
  	AddrList **byte
  }
  
  type Protoent struct {
  	Name    *byte
  	Aliases **byte
  	Proto   uint16
  }
  
  const (
  	DNS_TYPE_A       = 0x0001
  	DNS_TYPE_NS      = 0x0002
  	DNS_TYPE_MD      = 0x0003
  	DNS_TYPE_MF      = 0x0004
  	DNS_TYPE_CNAME   = 0x0005
  	DNS_TYPE_SOA     = 0x0006
  	DNS_TYPE_MB      = 0x0007
  	DNS_TYPE_MG      = 0x0008
  	DNS_TYPE_MR      = 0x0009
  	DNS_TYPE_NULL    = 0x000a
  	DNS_TYPE_WKS     = 0x000b
  	DNS_TYPE_PTR     = 0x000c
  	DNS_TYPE_HINFO   = 0x000d
  	DNS_TYPE_MINFO   = 0x000e
  	DNS_TYPE_MX      = 0x000f
  	DNS_TYPE_TEXT    = 0x0010
  	DNS_TYPE_RP      = 0x0011
  	DNS_TYPE_AFSDB   = 0x0012
  	DNS_TYPE_X25     = 0x0013
  	DNS_TYPE_ISDN    = 0x0014
  	DNS_TYPE_RT      = 0x0015
  	DNS_TYPE_NSAP    = 0x0016
  	DNS_TYPE_NSAPPTR = 0x0017
  	DNS_TYPE_SIG     = 0x0018
  	DNS_TYPE_KEY     = 0x0019
  	DNS_TYPE_PX      = 0x001a
  	DNS_TYPE_GPOS    = 0x001b
  	DNS_TYPE_AAAA    = 0x001c
  	DNS_TYPE_LOC     = 0x001d
  	DNS_TYPE_NXT     = 0x001e
  	DNS_TYPE_EID     = 0x001f
  	DNS_TYPE_NIMLOC  = 0x0020
  	DNS_TYPE_SRV     = 0x0021
  	DNS_TYPE_ATMA    = 0x0022
  	DNS_TYPE_NAPTR   = 0x0023
  	DNS_TYPE_KX      = 0x0024
  	DNS_TYPE_CERT    = 0x0025
  	DNS_TYPE_A6      = 0x0026
  	DNS_TYPE_DNAME   = 0x0027
  	DNS_TYPE_SINK    = 0x0028
  	DNS_TYPE_OPT     = 0x0029
  	DNS_TYPE_DS      = 0x002B
  	DNS_TYPE_RRSIG   = 0x002E
  	DNS_TYPE_NSEC    = 0x002F
  	DNS_TYPE_DNSKEY  = 0x0030
  	DNS_TYPE_DHCID   = 0x0031
  	DNS_TYPE_UINFO   = 0x0064
  	DNS_TYPE_UID     = 0x0065
  	DNS_TYPE_GID     = 0x0066
  	DNS_TYPE_UNSPEC  = 0x0067
  	DNS_TYPE_ADDRS   = 0x00f8
  	DNS_TYPE_TKEY    = 0x00f9
  	DNS_TYPE_TSIG    = 0x00fa
  	DNS_TYPE_IXFR    = 0x00fb
  	DNS_TYPE_AXFR    = 0x00fc
  	DNS_TYPE_MAILB   = 0x00fd
  	DNS_TYPE_MAILA   = 0x00fe
  	DNS_TYPE_ALL     = 0x00ff
  	DNS_TYPE_ANY     = 0x00ff
  	DNS_TYPE_WINS    = 0xff01
  	DNS_TYPE_WINSR   = 0xff02
  	DNS_TYPE_NBSTAT  = 0xff01
  )
  
  const (
  	DNS_INFO_NO_RECORDS = 0x251D
  )
  
  const (
  	// flags inside DNSRecord.Dw
  	DnsSectionQuestion   = 0x0000
  	DnsSectionAnswer     = 0x0001
  	DnsSectionAuthority  = 0x0002
  	DnsSectionAdditional = 0x0003
  )
  
  type DNSSRVData struct {
  	Target   *uint16
  	Priority uint16
  	Weight   uint16
  	Port     uint16
  	Pad      uint16
  }
  
  type DNSPTRData struct {
  	Host *uint16
  }
  
  type DNSMXData struct {
  	NameExchange *uint16
  	Preference   uint16
  	Pad          uint16
  }
  
  type DNSTXTData struct {
  	StringCount uint16
  	StringArray [1]*uint16
  }
  
  type DNSRecord struct {
  	Next     *DNSRecord
  	Name     *uint16
  	Type     uint16
  	Length   uint16
  	Dw       uint32
  	Ttl      uint32
  	Reserved uint32
  	Data     [40]byte
  }
  
  const (
  	TF_DISCONNECT         = 1
  	TF_REUSE_SOCKET       = 2
  	TF_WRITE_BEHIND       = 4
  	TF_USE_DEFAULT_WORKER = 0
  	TF_USE_SYSTEM_THREAD  = 16
  	TF_USE_KERNEL_APC     = 32
  )
  
  type TransmitFileBuffers struct {
  	Head       uintptr
  	HeadLength uint32
  	Tail       uintptr
  	TailLength uint32
  }
  
  const (
  	IFF_UP           = 1
  	IFF_BROADCAST    = 2
  	IFF_LOOPBACK     = 4
  	IFF_POINTTOPOINT = 8
  	IFF_MULTICAST    = 16
  )
  
  const SIO_GET_INTERFACE_LIST = 0x4004747F
  
  // TODO(mattn): SockaddrGen is union of sockaddr/sockaddr_in/sockaddr_in6_old.
  // will be fixed to change variable type as suitable.
  
  type SockaddrGen [24]byte
  
  type InterfaceInfo struct {
  	Flags            uint32
  	Address          SockaddrGen
  	BroadcastAddress SockaddrGen
  	Netmask          SockaddrGen
  }
  
  type IpAddressString struct {
  	String [16]byte
  }
  
  type IpMaskString IpAddressString
  
  type IpAddrString struct {
  	Next      *IpAddrString
  	IpAddress IpAddressString
  	IpMask    IpMaskString
  	Context   uint32
  }
  
  const MAX_ADAPTER_NAME_LENGTH = 256
  const MAX_ADAPTER_DESCRIPTION_LENGTH = 128
  const MAX_ADAPTER_ADDRESS_LENGTH = 8
  
  type IpAdapterInfo struct {
  	Next                *IpAdapterInfo
  	ComboIndex          uint32
  	AdapterName         [MAX_ADAPTER_NAME_LENGTH + 4]byte
  	Description         [MAX_ADAPTER_DESCRIPTION_LENGTH + 4]byte
  	AddressLength       uint32
  	Address             [MAX_ADAPTER_ADDRESS_LENGTH]byte
  	Index               uint32
  	Type                uint32
  	DhcpEnabled         uint32
  	CurrentIpAddress    *IpAddrString
  	IpAddressList       IpAddrString
  	GatewayList         IpAddrString
  	DhcpServer          IpAddrString
  	HaveWins            bool
  	PrimaryWinsServer   IpAddrString
  	SecondaryWinsServer IpAddrString
  	LeaseObtained       int64
  	LeaseExpires        int64
  }
  
  const MAXLEN_PHYSADDR = 8
  const MAX_INTERFACE_NAME_LEN = 256
  const MAXLEN_IFDESCR = 256
  
  type MibIfRow struct {
  	Name            [MAX_INTERFACE_NAME_LEN]uint16
  	Index           uint32
  	Type            uint32
  	Mtu             uint32
  	Speed           uint32
  	PhysAddrLen     uint32
  	PhysAddr        [MAXLEN_PHYSADDR]byte
  	AdminStatus     uint32
  	OperStatus      uint32
  	LastChange      uint32
  	InOctets        uint32
  	InUcastPkts     uint32
  	InNUcastPkts    uint32
  	InDiscards      uint32
  	InErrors        uint32
  	InUnknownProtos uint32
  	OutOctets       uint32
  	OutUcastPkts    uint32
  	OutNUcastPkts   uint32
  	OutDiscards     uint32
  	OutErrors       uint32
  	OutQLen         uint32
  	DescrLen        uint32
  	Descr           [MAXLEN_IFDESCR]byte
  }
  
  type CertContext struct {
  	EncodingType uint32
  	EncodedCert  *byte
  	Length       uint32
  	CertInfo     uintptr
  	Store        Handle
  }
  
  type CertChainContext struct {
  	Size                       uint32
  	TrustStatus                CertTrustStatus
  	ChainCount                 uint32
  	Chains                     **CertSimpleChain
  	LowerQualityChainCount     uint32
  	LowerQualityChains         **CertChainContext
  	HasRevocationFreshnessTime uint32
  	RevocationFreshnessTime    uint32
  }
  
  type CertSimpleChain struct {
  	Size                       uint32
  	TrustStatus                CertTrustStatus
  	NumElements                uint32
  	Elements                   **CertChainElement
  	TrustListInfo              uintptr
  	HasRevocationFreshnessTime uint32
  	RevocationFreshnessTime    uint32
  }
  
  type CertChainElement struct {
  	Size              uint32
  	CertContext       *CertContext
  	TrustStatus       CertTrustStatus
  	RevocationInfo    *CertRevocationInfo
  	IssuanceUsage     *CertEnhKeyUsage
  	ApplicationUsage  *CertEnhKeyUsage
  	ExtendedErrorInfo *uint16
  }
  
  type CertRevocationInfo struct {
  	Size             uint32
  	RevocationResult uint32
  	RevocationOid    *byte
  	OidSpecificInfo  uintptr
  	HasFreshnessTime uint32
  	FreshnessTime    uint32
  	CrlInfo          uintptr // *CertRevocationCrlInfo
  }
  
  type CertTrustStatus struct {
  	ErrorStatus uint32
  	InfoStatus  uint32
  }
  
  type CertUsageMatch struct {
  	Type  uint32
  	Usage CertEnhKeyUsage
  }
  
  type CertEnhKeyUsage struct {
  	Length           uint32
  	UsageIdentifiers **byte
  }
  
  type CertChainPara struct {
  	Size                         uint32
  	RequestedUsage               CertUsageMatch
  	RequstedIssuancePolicy       CertUsageMatch
  	URLRetrievalTimeout          uint32
  	CheckRevocationFreshnessTime uint32
  	RevocationFreshnessTime      uint32
  	CacheResync                  *Filetime
  }
  
  type CertChainPolicyPara struct {
  	Size            uint32
  	Flags           uint32
  	ExtraPolicyPara uintptr
  }
  
  type SSLExtraCertChainPolicyPara struct {
  	Size       uint32
  	AuthType   uint32
  	Checks     uint32
  	ServerName *uint16
  }
  
  type CertChainPolicyStatus struct {
  	Size              uint32
  	Error             uint32
  	ChainIndex        uint32
  	ElementIndex      uint32
  	ExtraPolicyStatus uintptr
  }
  
  const (
  	// do not reorder
  	HKEY_CLASSES_ROOT = 0x80000000 + iota
  	HKEY_CURRENT_USER
  	HKEY_LOCAL_MACHINE
  	HKEY_USERS
  	HKEY_PERFORMANCE_DATA
  	HKEY_CURRENT_CONFIG
  	HKEY_DYN_DATA
  
  	KEY_QUERY_VALUE        = 1
  	KEY_SET_VALUE          = 2
  	KEY_CREATE_SUB_KEY     = 4
  	KEY_ENUMERATE_SUB_KEYS = 8
  	KEY_NOTIFY             = 16
  	KEY_CREATE_LINK        = 32
  	KEY_WRITE              = 0x20006
  	KEY_EXECUTE            = 0x20019
  	KEY_READ               = 0x20019
  	KEY_WOW64_64KEY        = 0x0100
  	KEY_WOW64_32KEY        = 0x0200
  	KEY_ALL_ACCESS         = 0xf003f
  )
  
  const (
  	// do not reorder
  	REG_NONE = iota
  	REG_SZ
  	REG_EXPAND_SZ
  	REG_BINARY
  	REG_DWORD_LITTLE_ENDIAN
  	REG_DWORD_BIG_ENDIAN
  	REG_LINK
  	REG_MULTI_SZ
  	REG_RESOURCE_LIST
  	REG_FULL_RESOURCE_DESCRIPTOR
  	REG_RESOURCE_REQUIREMENTS_LIST
  	REG_QWORD_LITTLE_ENDIAN
  	REG_DWORD = REG_DWORD_LITTLE_ENDIAN
  	REG_QWORD = REG_QWORD_LITTLE_ENDIAN
  )
  
  type AddrinfoW struct {
  	Flags     int32
  	Family    int32
  	Socktype  int32
  	Protocol  int32
  	Addrlen   uintptr
  	Canonname *uint16
  	Addr      uintptr
  	Next      *AddrinfoW
  }
  
  const (
  	AI_PASSIVE     = 1
  	AI_CANONNAME   = 2
  	AI_NUMERICHOST = 4
  )
  
  type GUID struct {
  	Data1 uint32
  	Data2 uint16
  	Data3 uint16
  	Data4 [8]byte
  }
  
  var WSAID_CONNECTEX = GUID{
  	0x25a207b9,
  	0xddf3,
  	0x4660,
  	[8]byte{0x8e, 0xe9, 0x76, 0xe5, 0x8c, 0x74, 0x06, 0x3e},
  }
  
  const (
  	FILE_SKIP_COMPLETION_PORT_ON_SUCCESS = 1
  	FILE_SKIP_SET_EVENT_ON_HANDLE        = 2
  )
  
  const (
  	WSAPROTOCOL_LEN    = 255
  	MAX_PROTOCOL_CHAIN = 7
  	BASE_PROTOCOL      = 1
  	LAYERED_PROTOCOL   = 0
  
  	XP1_CONNECTIONLESS           = 0x00000001
  	XP1_GUARANTEED_DELIVERY      = 0x00000002
  	XP1_GUARANTEED_ORDER         = 0x00000004
  	XP1_MESSAGE_ORIENTED         = 0x00000008
  	XP1_PSEUDO_STREAM            = 0x00000010
  	XP1_GRACEFUL_CLOSE           = 0x00000020
  	XP1_EXPEDITED_DATA           = 0x00000040
  	XP1_CONNECT_DATA             = 0x00000080
  	XP1_DISCONNECT_DATA          = 0x00000100
  	XP1_SUPPORT_BROADCAST        = 0x00000200
  	XP1_SUPPORT_MULTIPOINT       = 0x00000400
  	XP1_MULTIPOINT_CONTROL_PLANE = 0x00000800
  	XP1_MULTIPOINT_DATA_PLANE    = 0x00001000
  	XP1_QOS_SUPPORTED            = 0x00002000
  	XP1_UNI_SEND                 = 0x00008000
  	XP1_UNI_RECV                 = 0x00010000
  	XP1_IFS_HANDLES              = 0x00020000
  	XP1_PARTIAL_MESSAGE          = 0x00040000
  	XP1_SAN_SUPPORT_SDP          = 0x00080000
  
  	PFL_MULTIPLE_PROTO_ENTRIES  = 0x00000001
  	PFL_RECOMMENDED_PROTO_ENTRY = 0x00000002
  	PFL_HIDDEN                  = 0x00000004
  	PFL_MATCHES_PROTOCOL_ZERO   = 0x00000008
  	PFL_NETWORKDIRECT_PROVIDER  = 0x00000010
  )
  
  type WSAProtocolInfo struct {
  	ServiceFlags1     uint32
  	ServiceFlags2     uint32
  	ServiceFlags3     uint32
  	ServiceFlags4     uint32
  	ProviderFlags     uint32
  	ProviderId        GUID
  	CatalogEntryId    uint32
  	ProtocolChain     WSAProtocolChain
  	Version           int32
  	AddressFamily     int32
  	MaxSockAddr       int32
  	MinSockAddr       int32
  	SocketType        int32
  	Protocol          int32
  	ProtocolMaxOffset int32
  	NetworkByteOrder  int32
  	SecurityScheme    int32
  	MessageSize       uint32
  	ProviderReserved  uint32
  	ProtocolName      [WSAPROTOCOL_LEN + 1]uint16
  }
  
  type WSAProtocolChain struct {
  	ChainLen     int32
  	ChainEntries [MAX_PROTOCOL_CHAIN]uint32
  }
  
  type TCPKeepalive struct {
  	OnOff    uint32
  	Time     uint32
  	Interval uint32
  }
  
  type symbolicLinkReparseBuffer struct {
  	SubstituteNameOffset uint16
  	SubstituteNameLength uint16
  	PrintNameOffset      uint16
  	PrintNameLength      uint16
  	Flags                uint32
  	PathBuffer           [1]uint16
  }
  
  type mountPointReparseBuffer struct {
  	SubstituteNameOffset uint16
  	SubstituteNameLength uint16
  	PrintNameOffset      uint16
  	PrintNameLength      uint16
  	PathBuffer           [1]uint16
  }
  
  type reparseDataBuffer struct {
  	ReparseTag        uint32
  	ReparseDataLength uint16
  	Reserved          uint16
  
  	// GenericReparseBuffer
  	reparseBuffer byte
  }
  
  const (
  	FSCTL_GET_REPARSE_POINT          = 0x900A8
  	MAXIMUM_REPARSE_DATA_BUFFER_SIZE = 16 * 1024
  	_IO_REPARSE_TAG_MOUNT_POINT      = 0xA0000003
  	IO_REPARSE_TAG_SYMLINK           = 0xA000000C
  	SYMBOLIC_LINK_FLAG_DIRECTORY     = 0x1
  	_SYMLINK_FLAG_RELATIVE           = 1
  )
  

View as plain text