...

Source file src/pkg/syscall/types_windows.go

     1	// Copyright 2011 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 syscall
     6	
     7	const (
     8		// Windows errors.
     9		ERROR_FILE_NOT_FOUND      Errno = 2
    10		ERROR_PATH_NOT_FOUND      Errno = 3
    11		ERROR_ACCESS_DENIED       Errno = 5
    12		ERROR_NO_MORE_FILES       Errno = 18
    13		ERROR_HANDLE_EOF          Errno = 38
    14		ERROR_NETNAME_DELETED     Errno = 64
    15		ERROR_FILE_EXISTS         Errno = 80
    16		ERROR_BROKEN_PIPE         Errno = 109
    17		ERROR_BUFFER_OVERFLOW     Errno = 111
    18		ERROR_INSUFFICIENT_BUFFER Errno = 122
    19		ERROR_MOD_NOT_FOUND       Errno = 126
    20		ERROR_PROC_NOT_FOUND      Errno = 127
    21		ERROR_DIR_NOT_EMPTY       Errno = 145
    22		ERROR_ALREADY_EXISTS      Errno = 183
    23		ERROR_ENVVAR_NOT_FOUND    Errno = 203
    24		ERROR_MORE_DATA           Errno = 234
    25		ERROR_OPERATION_ABORTED   Errno = 995
    26		ERROR_IO_PENDING          Errno = 997
    27		ERROR_NOT_FOUND           Errno = 1168
    28		ERROR_PRIVILEGE_NOT_HELD  Errno = 1314
    29		WSAEACCES                 Errno = 10013
    30		WSAECONNABORTED           Errno = 10053
    31		WSAECONNRESET             Errno = 10054
    32	)
    33	
    34	const (
    35		// Invented values to support what package os expects.
    36		O_RDONLY   = 0x00000
    37		O_WRONLY   = 0x00001
    38		O_RDWR     = 0x00002
    39		O_CREAT    = 0x00040
    40		O_EXCL     = 0x00080
    41		O_NOCTTY   = 0x00100
    42		O_TRUNC    = 0x00200
    43		O_NONBLOCK = 0x00800
    44		O_APPEND   = 0x00400
    45		O_SYNC     = 0x01000
    46		O_ASYNC    = 0x02000
    47		O_CLOEXEC  = 0x80000
    48	)
    49	
    50	const (
    51		// More invented values for signals
    52		SIGHUP  = Signal(0x1)
    53		SIGINT  = Signal(0x2)
    54		SIGQUIT = Signal(0x3)
    55		SIGILL  = Signal(0x4)
    56		SIGTRAP = Signal(0x5)
    57		SIGABRT = Signal(0x6)
    58		SIGBUS  = Signal(0x7)
    59		SIGFPE  = Signal(0x8)
    60		SIGKILL = Signal(0x9)
    61		SIGSEGV = Signal(0xb)
    62		SIGPIPE = Signal(0xd)
    63		SIGALRM = Signal(0xe)
    64		SIGTERM = Signal(0xf)
    65	)
    66	
    67	var signals = [...]string{
    68		1:  "hangup",
    69		2:  "interrupt",
    70		3:  "quit",
    71		4:  "illegal instruction",
    72		5:  "trace/breakpoint trap",
    73		6:  "aborted",
    74		7:  "bus error",
    75		8:  "floating point exception",
    76		9:  "killed",
    77		10: "user defined signal 1",
    78		11: "segmentation fault",
    79		12: "user defined signal 2",
    80		13: "broken pipe",
    81		14: "alarm clock",
    82		15: "terminated",
    83	}
    84	
    85	const (
    86		GENERIC_READ    = 0x80000000
    87		GENERIC_WRITE   = 0x40000000
    88		GENERIC_EXECUTE = 0x20000000
    89		GENERIC_ALL     = 0x10000000
    90	
    91		FILE_LIST_DIRECTORY   = 0x00000001
    92		FILE_APPEND_DATA      = 0x00000004
    93		FILE_WRITE_ATTRIBUTES = 0x00000100
    94	
    95		FILE_SHARE_READ              = 0x00000001
    96		FILE_SHARE_WRITE             = 0x00000002
    97		FILE_SHARE_DELETE            = 0x00000004
    98		FILE_ATTRIBUTE_READONLY      = 0x00000001
    99		FILE_ATTRIBUTE_HIDDEN        = 0x00000002
   100		FILE_ATTRIBUTE_SYSTEM        = 0x00000004
   101		FILE_ATTRIBUTE_DIRECTORY     = 0x00000010
   102		FILE_ATTRIBUTE_ARCHIVE       = 0x00000020
   103		FILE_ATTRIBUTE_NORMAL        = 0x00000080
   104		FILE_ATTRIBUTE_REPARSE_POINT = 0x00000400
   105	
   106		INVALID_FILE_ATTRIBUTES = 0xffffffff
   107	
   108		CREATE_NEW        = 1
   109		CREATE_ALWAYS     = 2
   110		OPEN_EXISTING     = 3
   111		OPEN_ALWAYS       = 4
   112		TRUNCATE_EXISTING = 5
   113	
   114		FILE_FLAG_OPEN_REPARSE_POINT = 0x00200000
   115		FILE_FLAG_BACKUP_SEMANTICS   = 0x02000000
   116		FILE_FLAG_OVERLAPPED         = 0x40000000
   117	
   118		HANDLE_FLAG_INHERIT    = 0x00000001
   119		STARTF_USESTDHANDLES   = 0x00000100
   120		STARTF_USESHOWWINDOW   = 0x00000001
   121		DUPLICATE_CLOSE_SOURCE = 0x00000001
   122		DUPLICATE_SAME_ACCESS  = 0x00000002
   123	
   124		STD_INPUT_HANDLE  = -10
   125		STD_OUTPUT_HANDLE = -11
   126		STD_ERROR_HANDLE  = -12
   127	
   128		FILE_BEGIN   = 0
   129		FILE_CURRENT = 1
   130		FILE_END     = 2
   131	
   132		LANG_ENGLISH       = 0x09
   133		SUBLANG_ENGLISH_US = 0x01
   134	
   135		FORMAT_MESSAGE_ALLOCATE_BUFFER = 256
   136		FORMAT_MESSAGE_IGNORE_INSERTS  = 512
   137		FORMAT_MESSAGE_FROM_STRING     = 1024
   138		FORMAT_MESSAGE_FROM_HMODULE    = 2048
   139		FORMAT_MESSAGE_FROM_SYSTEM     = 4096
   140		FORMAT_MESSAGE_ARGUMENT_ARRAY  = 8192
   141		FORMAT_MESSAGE_MAX_WIDTH_MASK  = 255
   142	
   143		MAX_PATH      = 260
   144		MAX_LONG_PATH = 32768
   145	
   146		MAX_COMPUTERNAME_LENGTH = 15
   147	
   148		TIME_ZONE_ID_UNKNOWN  = 0
   149		TIME_ZONE_ID_STANDARD = 1
   150	
   151		TIME_ZONE_ID_DAYLIGHT = 2
   152		IGNORE                = 0
   153		INFINITE              = 0xffffffff
   154	
   155		WAIT_TIMEOUT   = 258
   156		WAIT_ABANDONED = 0x00000080
   157		WAIT_OBJECT_0  = 0x00000000
   158		WAIT_FAILED    = 0xFFFFFFFF
   159	
   160		CREATE_NEW_PROCESS_GROUP   = 0x00000200
   161		CREATE_UNICODE_ENVIRONMENT = 0x00000400
   162	
   163		PROCESS_TERMINATE         = 1
   164		PROCESS_QUERY_INFORMATION = 0x00000400
   165		SYNCHRONIZE               = 0x00100000
   166	
   167		PAGE_READONLY          = 0x02
   168		PAGE_READWRITE         = 0x04
   169		PAGE_WRITECOPY         = 0x08
   170		PAGE_EXECUTE_READ      = 0x20
   171		PAGE_EXECUTE_READWRITE = 0x40
   172		PAGE_EXECUTE_WRITECOPY = 0x80
   173	
   174		FILE_MAP_COPY    = 0x01
   175		FILE_MAP_WRITE   = 0x02
   176		FILE_MAP_READ    = 0x04
   177		FILE_MAP_EXECUTE = 0x20
   178	
   179		CTRL_C_EVENT     = 0
   180		CTRL_BREAK_EVENT = 1
   181	)
   182	
   183	const (
   184		// flags for CreateToolhelp32Snapshot
   185		TH32CS_SNAPHEAPLIST = 0x01
   186		TH32CS_SNAPPROCESS  = 0x02
   187		TH32CS_SNAPTHREAD   = 0x04
   188		TH32CS_SNAPMODULE   = 0x08
   189		TH32CS_SNAPMODULE32 = 0x10
   190		TH32CS_SNAPALL      = TH32CS_SNAPHEAPLIST | TH32CS_SNAPMODULE | TH32CS_SNAPPROCESS | TH32CS_SNAPTHREAD
   191		TH32CS_INHERIT      = 0x80000000
   192	)
   193	
   194	const (
   195		// do not reorder
   196		FILE_NOTIFY_CHANGE_FILE_NAME = 1 << iota
   197		FILE_NOTIFY_CHANGE_DIR_NAME
   198		FILE_NOTIFY_CHANGE_ATTRIBUTES
   199		FILE_NOTIFY_CHANGE_SIZE
   200		FILE_NOTIFY_CHANGE_LAST_WRITE
   201		FILE_NOTIFY_CHANGE_LAST_ACCESS
   202		FILE_NOTIFY_CHANGE_CREATION
   203	)
   204	
   205	const (
   206		// do not reorder
   207		FILE_ACTION_ADDED = iota + 1
   208		FILE_ACTION_REMOVED
   209		FILE_ACTION_MODIFIED
   210		FILE_ACTION_RENAMED_OLD_NAME
   211		FILE_ACTION_RENAMED_NEW_NAME
   212	)
   213	
   214	const (
   215		// wincrypt.h
   216		PROV_RSA_FULL                    = 1
   217		PROV_RSA_SIG                     = 2
   218		PROV_DSS                         = 3
   219		PROV_FORTEZZA                    = 4
   220		PROV_MS_EXCHANGE                 = 5
   221		PROV_SSL                         = 6
   222		PROV_RSA_SCHANNEL                = 12
   223		PROV_DSS_DH                      = 13
   224		PROV_EC_ECDSA_SIG                = 14
   225		PROV_EC_ECNRA_SIG                = 15
   226		PROV_EC_ECDSA_FULL               = 16
   227		PROV_EC_ECNRA_FULL               = 17
   228		PROV_DH_SCHANNEL                 = 18
   229		PROV_SPYRUS_LYNKS                = 20
   230		PROV_RNG                         = 21
   231		PROV_INTEL_SEC                   = 22
   232		PROV_REPLACE_OWF                 = 23
   233		PROV_RSA_AES                     = 24
   234		CRYPT_VERIFYCONTEXT              = 0xF0000000
   235		CRYPT_NEWKEYSET                  = 0x00000008
   236		CRYPT_DELETEKEYSET               = 0x00000010
   237		CRYPT_MACHINE_KEYSET             = 0x00000020
   238		CRYPT_SILENT                     = 0x00000040
   239		CRYPT_DEFAULT_CONTAINER_OPTIONAL = 0x00000080
   240	
   241		USAGE_MATCH_TYPE_AND = 0
   242		USAGE_MATCH_TYPE_OR  = 1
   243	
   244		X509_ASN_ENCODING   = 0x00000001
   245		PKCS_7_ASN_ENCODING = 0x00010000
   246	
   247		CERT_STORE_PROV_MEMORY = 2
   248	
   249		CERT_STORE_ADD_ALWAYS = 4
   250	
   251		CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG = 0x00000004
   252	
   253		CERT_TRUST_NO_ERROR                          = 0x00000000
   254		CERT_TRUST_IS_NOT_TIME_VALID                 = 0x00000001
   255		CERT_TRUST_IS_REVOKED                        = 0x00000004
   256		CERT_TRUST_IS_NOT_SIGNATURE_VALID            = 0x00000008
   257		CERT_TRUST_IS_NOT_VALID_FOR_USAGE            = 0x00000010
   258		CERT_TRUST_IS_UNTRUSTED_ROOT                 = 0x00000020
   259		CERT_TRUST_REVOCATION_STATUS_UNKNOWN         = 0x00000040
   260		CERT_TRUST_IS_CYCLIC                         = 0x00000080
   261		CERT_TRUST_INVALID_EXTENSION                 = 0x00000100
   262		CERT_TRUST_INVALID_POLICY_CONSTRAINTS        = 0x00000200
   263		CERT_TRUST_INVALID_BASIC_CONSTRAINTS         = 0x00000400
   264		CERT_TRUST_INVALID_NAME_CONSTRAINTS          = 0x00000800
   265		CERT_TRUST_HAS_NOT_SUPPORTED_NAME_CONSTRAINT = 0x00001000
   266		CERT_TRUST_HAS_NOT_DEFINED_NAME_CONSTRAINT   = 0x00002000
   267		CERT_TRUST_HAS_NOT_PERMITTED_NAME_CONSTRAINT = 0x00004000
   268		CERT_TRUST_HAS_EXCLUDED_NAME_CONSTRAINT      = 0x00008000
   269		CERT_TRUST_IS_OFFLINE_REVOCATION             = 0x01000000
   270		CERT_TRUST_NO_ISSUANCE_CHAIN_POLICY          = 0x02000000
   271		CERT_TRUST_IS_EXPLICIT_DISTRUST              = 0x04000000
   272		CERT_TRUST_HAS_NOT_SUPPORTED_CRITICAL_EXT    = 0x08000000
   273	
   274		CERT_CHAIN_POLICY_BASE              = 1
   275		CERT_CHAIN_POLICY_AUTHENTICODE      = 2
   276		CERT_CHAIN_POLICY_AUTHENTICODE_TS   = 3
   277		CERT_CHAIN_POLICY_SSL               = 4
   278		CERT_CHAIN_POLICY_BASIC_CONSTRAINTS = 5
   279		CERT_CHAIN_POLICY_NT_AUTH           = 6
   280		CERT_CHAIN_POLICY_MICROSOFT_ROOT    = 7
   281		CERT_CHAIN_POLICY_EV                = 8
   282	
   283		CERT_E_EXPIRED       = 0x800B0101
   284		CERT_E_ROLE          = 0x800B0103
   285		CERT_E_PURPOSE       = 0x800B0106
   286		CERT_E_UNTRUSTEDROOT = 0x800B0109
   287		CERT_E_CN_NO_MATCH   = 0x800B010F
   288	
   289		AUTHTYPE_CLIENT = 1
   290		AUTHTYPE_SERVER = 2
   291	)
   292	
   293	var (
   294		OID_PKIX_KP_SERVER_AUTH = []byte("1.3.6.1.5.5.7.3.1\x00")
   295		OID_SERVER_GATED_CRYPTO = []byte("1.3.6.1.4.1.311.10.3.3\x00")
   296		OID_SGC_NETSCAPE        = []byte("2.16.840.1.113730.4.1\x00")
   297	)
   298	
   299	// Pointer represents a pointer to an arbitrary Windows type.
   300	//
   301	// Pointer-typed fields may point to one of many different types. It's
   302	// up to the caller to provide a pointer to the appropriate type, cast
   303	// to Pointer. The caller must obey the unsafe.Pointer rules while
   304	// doing so.
   305	type Pointer *struct{}
   306	
   307	// Invented values to support what package os expects.
   308	type Timeval struct {
   309		Sec  int32
   310		Usec int32
   311	}
   312	
   313	func (tv *Timeval) Nanoseconds() int64 {
   314		return (int64(tv.Sec)*1e6 + int64(tv.Usec)) * 1e3
   315	}
   316	
   317	func NsecToTimeval(nsec int64) (tv Timeval) {
   318		tv.Sec = int32(nsec / 1e9)
   319		tv.Usec = int32(nsec % 1e9 / 1e3)
   320		return
   321	}
   322	
   323	type SecurityAttributes struct {
   324		Length             uint32
   325		SecurityDescriptor uintptr
   326		InheritHandle      uint32
   327	}
   328	
   329	type Overlapped struct {
   330		Internal     uintptr
   331		InternalHigh uintptr
   332		Offset       uint32
   333		OffsetHigh   uint32
   334		HEvent       Handle
   335	}
   336	
   337	type FileNotifyInformation struct {
   338		NextEntryOffset uint32
   339		Action          uint32
   340		FileNameLength  uint32
   341		FileName        uint16
   342	}
   343	
   344	type Filetime struct {
   345		LowDateTime  uint32
   346		HighDateTime uint32
   347	}
   348	
   349	// Nanoseconds returns Filetime ft in nanoseconds
   350	// since Epoch (00:00:00 UTC, January 1, 1970).
   351	func (ft *Filetime) Nanoseconds() int64 {
   352		// 100-nanosecond intervals since January 1, 1601
   353		nsec := int64(ft.HighDateTime)<<32 + int64(ft.LowDateTime)
   354		// change starting time to the Epoch (00:00:00 UTC, January 1, 1970)
   355		nsec -= 116444736000000000
   356		// convert into nanoseconds
   357		nsec *= 100
   358		return nsec
   359	}
   360	
   361	func NsecToFiletime(nsec int64) (ft Filetime) {
   362		// convert into 100-nanosecond
   363		nsec /= 100
   364		// change starting time to January 1, 1601
   365		nsec += 116444736000000000
   366		// split into high / low
   367		ft.LowDateTime = uint32(nsec & 0xffffffff)
   368		ft.HighDateTime = uint32(nsec >> 32 & 0xffffffff)
   369		return ft
   370	}
   371	
   372	type Win32finddata struct {
   373		FileAttributes    uint32
   374		CreationTime      Filetime
   375		LastAccessTime    Filetime
   376		LastWriteTime     Filetime
   377		FileSizeHigh      uint32
   378		FileSizeLow       uint32
   379		Reserved0         uint32
   380		Reserved1         uint32
   381		FileName          [MAX_PATH - 1]uint16
   382		AlternateFileName [13]uint16
   383	}
   384	
   385	// This is the actual system call structure.
   386	// Win32finddata is what we committed to in Go 1.
   387	type win32finddata1 struct {
   388		FileAttributes    uint32
   389		CreationTime      Filetime
   390		LastAccessTime    Filetime
   391		LastWriteTime     Filetime
   392		FileSizeHigh      uint32
   393		FileSizeLow       uint32
   394		Reserved0         uint32
   395		Reserved1         uint32
   396		FileName          [MAX_PATH]uint16
   397		AlternateFileName [14]uint16
   398	}
   399	
   400	func copyFindData(dst *Win32finddata, src *win32finddata1) {
   401		dst.FileAttributes = src.FileAttributes
   402		dst.CreationTime = src.CreationTime
   403		dst.LastAccessTime = src.LastAccessTime
   404		dst.LastWriteTime = src.LastWriteTime
   405		dst.FileSizeHigh = src.FileSizeHigh
   406		dst.FileSizeLow = src.FileSizeLow
   407		dst.Reserved0 = src.Reserved0
   408		dst.Reserved1 = src.Reserved1
   409	
   410		// The src is 1 element bigger than dst, but it must be NUL.
   411		copy(dst.FileName[:], src.FileName[:])
   412		copy(dst.AlternateFileName[:], src.AlternateFileName[:])
   413	}
   414	
   415	type ByHandleFileInformation struct {
   416		FileAttributes     uint32
   417		CreationTime       Filetime
   418		LastAccessTime     Filetime
   419		LastWriteTime      Filetime
   420		VolumeSerialNumber uint32
   421		FileSizeHigh       uint32
   422		FileSizeLow        uint32
   423		NumberOfLinks      uint32
   424		FileIndexHigh      uint32
   425		FileIndexLow       uint32
   426	}
   427	
   428	const (
   429		GetFileExInfoStandard = 0
   430		GetFileExMaxInfoLevel = 1
   431	)
   432	
   433	type Win32FileAttributeData struct {
   434		FileAttributes uint32
   435		CreationTime   Filetime
   436		LastAccessTime Filetime
   437		LastWriteTime  Filetime
   438		FileSizeHigh   uint32
   439		FileSizeLow    uint32
   440	}
   441	
   442	// ShowWindow constants
   443	const (
   444		// winuser.h
   445		SW_HIDE            = 0
   446		SW_NORMAL          = 1
   447		SW_SHOWNORMAL      = 1
   448		SW_SHOWMINIMIZED   = 2
   449		SW_SHOWMAXIMIZED   = 3
   450		SW_MAXIMIZE        = 3
   451		SW_SHOWNOACTIVATE  = 4
   452		SW_SHOW            = 5
   453		SW_MINIMIZE        = 6
   454		SW_SHOWMINNOACTIVE = 7
   455		SW_SHOWNA          = 8
   456		SW_RESTORE         = 9
   457		SW_SHOWDEFAULT     = 10
   458		SW_FORCEMINIMIZE   = 11
   459	)
   460	
   461	type StartupInfo struct {
   462		Cb            uint32
   463		_             *uint16
   464		Desktop       *uint16
   465		Title         *uint16
   466		X             uint32
   467		Y             uint32
   468		XSize         uint32
   469		YSize         uint32
   470		XCountChars   uint32
   471		YCountChars   uint32
   472		FillAttribute uint32
   473		Flags         uint32
   474		ShowWindow    uint16
   475		_             uint16
   476		_             *byte
   477		StdInput      Handle
   478		StdOutput     Handle
   479		StdErr        Handle
   480	}
   481	
   482	type ProcessInformation struct {
   483		Process   Handle
   484		Thread    Handle
   485		ProcessId uint32
   486		ThreadId  uint32
   487	}
   488	
   489	type ProcessEntry32 struct {
   490		Size            uint32
   491		Usage           uint32
   492		ProcessID       uint32
   493		DefaultHeapID   uintptr
   494		ModuleID        uint32
   495		Threads         uint32
   496		ParentProcessID uint32
   497		PriClassBase    int32
   498		Flags           uint32
   499		ExeFile         [MAX_PATH]uint16
   500	}
   501	
   502	type Systemtime struct {
   503		Year         uint16
   504		Month        uint16
   505		DayOfWeek    uint16
   506		Day          uint16
   507		Hour         uint16
   508		Minute       uint16
   509		Second       uint16
   510		Milliseconds uint16
   511	}
   512	
   513	type Timezoneinformation struct {
   514		Bias         int32
   515		StandardName [32]uint16
   516		StandardDate Systemtime
   517		StandardBias int32
   518		DaylightName [32]uint16
   519		DaylightDate Systemtime
   520		DaylightBias int32
   521	}
   522	
   523	// Socket related.
   524	
   525	const (
   526		AF_UNSPEC  = 0
   527		AF_UNIX    = 1
   528		AF_INET    = 2
   529		AF_INET6   = 23
   530		AF_NETBIOS = 17
   531	
   532		SOCK_STREAM    = 1
   533		SOCK_DGRAM     = 2
   534		SOCK_RAW       = 3
   535		SOCK_SEQPACKET = 5
   536	
   537		IPPROTO_IP   = 0
   538		IPPROTO_IPV6 = 0x29
   539		IPPROTO_TCP  = 6
   540		IPPROTO_UDP  = 17
   541	
   542		SOL_SOCKET                = 0xffff
   543		SO_REUSEADDR              = 4
   544		SO_KEEPALIVE              = 8
   545		SO_DONTROUTE              = 16
   546		SO_BROADCAST              = 32
   547		SO_LINGER                 = 128
   548		SO_RCVBUF                 = 0x1002
   549		SO_SNDBUF                 = 0x1001
   550		SO_UPDATE_ACCEPT_CONTEXT  = 0x700b
   551		SO_UPDATE_CONNECT_CONTEXT = 0x7010
   552	
   553		IOC_OUT                            = 0x40000000
   554		IOC_IN                             = 0x80000000
   555		IOC_VENDOR                         = 0x18000000
   556		IOC_INOUT                          = IOC_IN | IOC_OUT
   557		IOC_WS2                            = 0x08000000
   558		SIO_GET_EXTENSION_FUNCTION_POINTER = IOC_INOUT | IOC_WS2 | 6
   559		SIO_KEEPALIVE_VALS                 = IOC_IN | IOC_VENDOR | 4
   560		SIO_UDP_CONNRESET                  = IOC_IN | IOC_VENDOR | 12
   561	
   562		// cf. https://support.microsoft.com/default.aspx?scid=kb;en-us;257460
   563	
   564		IP_TOS             = 0x3
   565		IP_TTL             = 0x4
   566		IP_MULTICAST_IF    = 0x9
   567		IP_MULTICAST_TTL   = 0xa
   568		IP_MULTICAST_LOOP  = 0xb
   569		IP_ADD_MEMBERSHIP  = 0xc
   570		IP_DROP_MEMBERSHIP = 0xd
   571	
   572		IPV6_V6ONLY         = 0x1b
   573		IPV6_UNICAST_HOPS   = 0x4
   574		IPV6_MULTICAST_IF   = 0x9
   575		IPV6_MULTICAST_HOPS = 0xa
   576		IPV6_MULTICAST_LOOP = 0xb
   577		IPV6_JOIN_GROUP     = 0xc
   578		IPV6_LEAVE_GROUP    = 0xd
   579	
   580		SOMAXCONN = 0x7fffffff
   581	
   582		TCP_NODELAY = 1
   583	
   584		SHUT_RD   = 0
   585		SHUT_WR   = 1
   586		SHUT_RDWR = 2
   587	
   588		WSADESCRIPTION_LEN = 256
   589		WSASYS_STATUS_LEN  = 128
   590	)
   591	
   592	type WSABuf struct {
   593		Len uint32
   594		Buf *byte
   595	}
   596	
   597	// Invented values to support what package os expects.
   598	const (
   599		S_IFMT   = 0x1f000
   600		S_IFIFO  = 0x1000
   601		S_IFCHR  = 0x2000
   602		S_IFDIR  = 0x4000
   603		S_IFBLK  = 0x6000
   604		S_IFREG  = 0x8000
   605		S_IFLNK  = 0xa000
   606		S_IFSOCK = 0xc000
   607		S_ISUID  = 0x800
   608		S_ISGID  = 0x400
   609		S_ISVTX  = 0x200
   610		S_IRUSR  = 0x100
   611		S_IWRITE = 0x80
   612		S_IWUSR  = 0x80
   613		S_IXUSR  = 0x40
   614	)
   615	
   616	const (
   617		FILE_TYPE_CHAR    = 0x0002
   618		FILE_TYPE_DISK    = 0x0001
   619		FILE_TYPE_PIPE    = 0x0003
   620		FILE_TYPE_REMOTE  = 0x8000
   621		FILE_TYPE_UNKNOWN = 0x0000
   622	)
   623	
   624	type Hostent struct {
   625		Name     *byte
   626		Aliases  **byte
   627		AddrType uint16
   628		Length   uint16
   629		AddrList **byte
   630	}
   631	
   632	type Protoent struct {
   633		Name    *byte
   634		Aliases **byte
   635		Proto   uint16
   636	}
   637	
   638	const (
   639		DNS_TYPE_A       = 0x0001
   640		DNS_TYPE_NS      = 0x0002
   641		DNS_TYPE_MD      = 0x0003
   642		DNS_TYPE_MF      = 0x0004
   643		DNS_TYPE_CNAME   = 0x0005
   644		DNS_TYPE_SOA     = 0x0006
   645		DNS_TYPE_MB      = 0x0007
   646		DNS_TYPE_MG      = 0x0008
   647		DNS_TYPE_MR      = 0x0009
   648		DNS_TYPE_NULL    = 0x000a
   649		DNS_TYPE_WKS     = 0x000b
   650		DNS_TYPE_PTR     = 0x000c
   651		DNS_TYPE_HINFO   = 0x000d
   652		DNS_TYPE_MINFO   = 0x000e
   653		DNS_TYPE_MX      = 0x000f
   654		DNS_TYPE_TEXT    = 0x0010
   655		DNS_TYPE_RP      = 0x0011
   656		DNS_TYPE_AFSDB   = 0x0012
   657		DNS_TYPE_X25     = 0x0013
   658		DNS_TYPE_ISDN    = 0x0014
   659		DNS_TYPE_RT      = 0x0015
   660		DNS_TYPE_NSAP    = 0x0016
   661		DNS_TYPE_NSAPPTR = 0x0017
   662		DNS_TYPE_SIG     = 0x0018
   663		DNS_TYPE_KEY     = 0x0019
   664		DNS_TYPE_PX      = 0x001a
   665		DNS_TYPE_GPOS    = 0x001b
   666		DNS_TYPE_AAAA    = 0x001c
   667		DNS_TYPE_LOC     = 0x001d
   668		DNS_TYPE_NXT     = 0x001e
   669		DNS_TYPE_EID     = 0x001f
   670		DNS_TYPE_NIMLOC  = 0x0020
   671		DNS_TYPE_SRV     = 0x0021
   672		DNS_TYPE_ATMA    = 0x0022
   673		DNS_TYPE_NAPTR   = 0x0023
   674		DNS_TYPE_KX      = 0x0024
   675		DNS_TYPE_CERT    = 0x0025
   676		DNS_TYPE_A6      = 0x0026
   677		DNS_TYPE_DNAME   = 0x0027
   678		DNS_TYPE_SINK    = 0x0028
   679		DNS_TYPE_OPT     = 0x0029
   680		DNS_TYPE_DS      = 0x002B
   681		DNS_TYPE_RRSIG   = 0x002E
   682		DNS_TYPE_NSEC    = 0x002F
   683		DNS_TYPE_DNSKEY  = 0x0030
   684		DNS_TYPE_DHCID   = 0x0031
   685		DNS_TYPE_UINFO   = 0x0064
   686		DNS_TYPE_UID     = 0x0065
   687		DNS_TYPE_GID     = 0x0066
   688		DNS_TYPE_UNSPEC  = 0x0067
   689		DNS_TYPE_ADDRS   = 0x00f8
   690		DNS_TYPE_TKEY    = 0x00f9
   691		DNS_TYPE_TSIG    = 0x00fa
   692		DNS_TYPE_IXFR    = 0x00fb
   693		DNS_TYPE_AXFR    = 0x00fc
   694		DNS_TYPE_MAILB   = 0x00fd
   695		DNS_TYPE_MAILA   = 0x00fe
   696		DNS_TYPE_ALL     = 0x00ff
   697		DNS_TYPE_ANY     = 0x00ff
   698		DNS_TYPE_WINS    = 0xff01
   699		DNS_TYPE_WINSR   = 0xff02
   700		DNS_TYPE_NBSTAT  = 0xff01
   701	)
   702	
   703	const (
   704		DNS_INFO_NO_RECORDS = 0x251D
   705	)
   706	
   707	const (
   708		// flags inside DNSRecord.Dw
   709		DnsSectionQuestion   = 0x0000
   710		DnsSectionAnswer     = 0x0001
   711		DnsSectionAuthority  = 0x0002
   712		DnsSectionAdditional = 0x0003
   713	)
   714	
   715	type DNSSRVData struct {
   716		Target   *uint16
   717		Priority uint16
   718		Weight   uint16
   719		Port     uint16
   720		Pad      uint16
   721	}
   722	
   723	type DNSPTRData struct {
   724		Host *uint16
   725	}
   726	
   727	type DNSMXData struct {
   728		NameExchange *uint16
   729		Preference   uint16
   730		Pad          uint16
   731	}
   732	
   733	type DNSTXTData struct {
   734		StringCount uint16
   735		StringArray [1]*uint16
   736	}
   737	
   738	type DNSRecord struct {
   739		Next     *DNSRecord
   740		Name     *uint16
   741		Type     uint16
   742		Length   uint16
   743		Dw       uint32
   744		Ttl      uint32
   745		Reserved uint32
   746		Data     [40]byte
   747	}
   748	
   749	const (
   750		TF_DISCONNECT         = 1
   751		TF_REUSE_SOCKET       = 2
   752		TF_WRITE_BEHIND       = 4
   753		TF_USE_DEFAULT_WORKER = 0
   754		TF_USE_SYSTEM_THREAD  = 16
   755		TF_USE_KERNEL_APC     = 32
   756	)
   757	
   758	type TransmitFileBuffers struct {
   759		Head       uintptr
   760		HeadLength uint32
   761		Tail       uintptr
   762		TailLength uint32
   763	}
   764	
   765	const (
   766		IFF_UP           = 1
   767		IFF_BROADCAST    = 2
   768		IFF_LOOPBACK     = 4
   769		IFF_POINTTOPOINT = 8
   770		IFF_MULTICAST    = 16
   771	)
   772	
   773	const SIO_GET_INTERFACE_LIST = 0x4004747F
   774	
   775	// TODO(mattn): SockaddrGen is union of sockaddr/sockaddr_in/sockaddr_in6_old.
   776	// will be fixed to change variable type as suitable.
   777	
   778	type SockaddrGen [24]byte
   779	
   780	type InterfaceInfo struct {
   781		Flags            uint32
   782		Address          SockaddrGen
   783		BroadcastAddress SockaddrGen
   784		Netmask          SockaddrGen
   785	}
   786	
   787	type IpAddressString struct {
   788		String [16]byte
   789	}
   790	
   791	type IpMaskString IpAddressString
   792	
   793	type IpAddrString struct {
   794		Next      *IpAddrString
   795		IpAddress IpAddressString
   796		IpMask    IpMaskString
   797		Context   uint32
   798	}
   799	
   800	const MAX_ADAPTER_NAME_LENGTH = 256
   801	const MAX_ADAPTER_DESCRIPTION_LENGTH = 128
   802	const MAX_ADAPTER_ADDRESS_LENGTH = 8
   803	
   804	type IpAdapterInfo struct {
   805		Next                *IpAdapterInfo
   806		ComboIndex          uint32
   807		AdapterName         [MAX_ADAPTER_NAME_LENGTH + 4]byte
   808		Description         [MAX_ADAPTER_DESCRIPTION_LENGTH + 4]byte
   809		AddressLength       uint32
   810		Address             [MAX_ADAPTER_ADDRESS_LENGTH]byte
   811		Index               uint32
   812		Type                uint32
   813		DhcpEnabled         uint32
   814		CurrentIpAddress    *IpAddrString
   815		IpAddressList       IpAddrString
   816		GatewayList         IpAddrString
   817		DhcpServer          IpAddrString
   818		HaveWins            bool
   819		PrimaryWinsServer   IpAddrString
   820		SecondaryWinsServer IpAddrString
   821		LeaseObtained       int64
   822		LeaseExpires        int64
   823	}
   824	
   825	const MAXLEN_PHYSADDR = 8
   826	const MAX_INTERFACE_NAME_LEN = 256
   827	const MAXLEN_IFDESCR = 256
   828	
   829	type MibIfRow struct {
   830		Name            [MAX_INTERFACE_NAME_LEN]uint16
   831		Index           uint32
   832		Type            uint32
   833		Mtu             uint32
   834		Speed           uint32
   835		PhysAddrLen     uint32
   836		PhysAddr        [MAXLEN_PHYSADDR]byte
   837		AdminStatus     uint32
   838		OperStatus      uint32
   839		LastChange      uint32
   840		InOctets        uint32
   841		InUcastPkts     uint32
   842		InNUcastPkts    uint32
   843		InDiscards      uint32
   844		InErrors        uint32
   845		InUnknownProtos uint32
   846		OutOctets       uint32
   847		OutUcastPkts    uint32
   848		OutNUcastPkts   uint32
   849		OutDiscards     uint32
   850		OutErrors       uint32
   851		OutQLen         uint32
   852		DescrLen        uint32
   853		Descr           [MAXLEN_IFDESCR]byte
   854	}
   855	
   856	type CertInfo struct {
   857		// Not implemented
   858	}
   859	
   860	type CertContext struct {
   861		EncodingType uint32
   862		EncodedCert  *byte
   863		Length       uint32
   864		CertInfo     *CertInfo
   865		Store        Handle
   866	}
   867	
   868	type CertChainContext struct {
   869		Size                       uint32
   870		TrustStatus                CertTrustStatus
   871		ChainCount                 uint32
   872		Chains                     **CertSimpleChain
   873		LowerQualityChainCount     uint32
   874		LowerQualityChains         **CertChainContext
   875		HasRevocationFreshnessTime uint32
   876		RevocationFreshnessTime    uint32
   877	}
   878	
   879	type CertTrustListInfo struct {
   880		// Not implemented
   881	}
   882	
   883	type CertSimpleChain struct {
   884		Size                       uint32
   885		TrustStatus                CertTrustStatus
   886		NumElements                uint32
   887		Elements                   **CertChainElement
   888		TrustListInfo              *CertTrustListInfo
   889		HasRevocationFreshnessTime uint32
   890		RevocationFreshnessTime    uint32
   891	}
   892	
   893	type CertChainElement struct {
   894		Size              uint32
   895		CertContext       *CertContext
   896		TrustStatus       CertTrustStatus
   897		RevocationInfo    *CertRevocationInfo
   898		IssuanceUsage     *CertEnhKeyUsage
   899		ApplicationUsage  *CertEnhKeyUsage
   900		ExtendedErrorInfo *uint16
   901	}
   902	
   903	type CertRevocationCrlInfo struct {
   904		// Not implemented
   905	}
   906	
   907	type CertRevocationInfo struct {
   908		Size             uint32
   909		RevocationResult uint32
   910		RevocationOid    *byte
   911		OidSpecificInfo  Pointer
   912		HasFreshnessTime uint32
   913		FreshnessTime    uint32
   914		CrlInfo          *CertRevocationCrlInfo
   915	}
   916	
   917	type CertTrustStatus struct {
   918		ErrorStatus uint32
   919		InfoStatus  uint32
   920	}
   921	
   922	type CertUsageMatch struct {
   923		Type  uint32
   924		Usage CertEnhKeyUsage
   925	}
   926	
   927	type CertEnhKeyUsage struct {
   928		Length           uint32
   929		UsageIdentifiers **byte
   930	}
   931	
   932	type CertChainPara struct {
   933		Size                         uint32
   934		RequestedUsage               CertUsageMatch
   935		RequstedIssuancePolicy       CertUsageMatch
   936		URLRetrievalTimeout          uint32
   937		CheckRevocationFreshnessTime uint32
   938		RevocationFreshnessTime      uint32
   939		CacheResync                  *Filetime
   940	}
   941	
   942	type CertChainPolicyPara struct {
   943		Size            uint32
   944		Flags           uint32
   945		ExtraPolicyPara Pointer
   946	}
   947	
   948	type SSLExtraCertChainPolicyPara struct {
   949		Size       uint32
   950		AuthType   uint32
   951		Checks     uint32
   952		ServerName *uint16
   953	}
   954	
   955	type CertChainPolicyStatus struct {
   956		Size              uint32
   957		Error             uint32
   958		ChainIndex        uint32
   959		ElementIndex      uint32
   960		ExtraPolicyStatus Pointer
   961	}
   962	
   963	const (
   964		// do not reorder
   965		HKEY_CLASSES_ROOT = 0x80000000 + iota
   966		HKEY_CURRENT_USER
   967		HKEY_LOCAL_MACHINE
   968		HKEY_USERS
   969		HKEY_PERFORMANCE_DATA
   970		HKEY_CURRENT_CONFIG
   971		HKEY_DYN_DATA
   972	
   973		KEY_QUERY_VALUE        = 1
   974		KEY_SET_VALUE          = 2
   975		KEY_CREATE_SUB_KEY     = 4
   976		KEY_ENUMERATE_SUB_KEYS = 8
   977		KEY_NOTIFY             = 16
   978		KEY_CREATE_LINK        = 32
   979		KEY_WRITE              = 0x20006
   980		KEY_EXECUTE            = 0x20019
   981		KEY_READ               = 0x20019
   982		KEY_WOW64_64KEY        = 0x0100
   983		KEY_WOW64_32KEY        = 0x0200
   984		KEY_ALL_ACCESS         = 0xf003f
   985	)
   986	
   987	const (
   988		// do not reorder
   989		REG_NONE = iota
   990		REG_SZ
   991		REG_EXPAND_SZ
   992		REG_BINARY
   993		REG_DWORD_LITTLE_ENDIAN
   994		REG_DWORD_BIG_ENDIAN
   995		REG_LINK
   996		REG_MULTI_SZ
   997		REG_RESOURCE_LIST
   998		REG_FULL_RESOURCE_DESCRIPTOR
   999		REG_RESOURCE_REQUIREMENTS_LIST
  1000		REG_QWORD_LITTLE_ENDIAN
  1001		REG_DWORD = REG_DWORD_LITTLE_ENDIAN
  1002		REG_QWORD = REG_QWORD_LITTLE_ENDIAN
  1003	)
  1004	
  1005	type AddrinfoW struct {
  1006		Flags     int32
  1007		Family    int32
  1008		Socktype  int32
  1009		Protocol  int32
  1010		Addrlen   uintptr
  1011		Canonname *uint16
  1012		Addr      Pointer
  1013		Next      *AddrinfoW
  1014	}
  1015	
  1016	const (
  1017		AI_PASSIVE     = 1
  1018		AI_CANONNAME   = 2
  1019		AI_NUMERICHOST = 4
  1020	)
  1021	
  1022	type GUID struct {
  1023		Data1 uint32
  1024		Data2 uint16
  1025		Data3 uint16
  1026		Data4 [8]byte
  1027	}
  1028	
  1029	var WSAID_CONNECTEX = GUID{
  1030		0x25a207b9,
  1031		0xddf3,
  1032		0x4660,
  1033		[8]byte{0x8e, 0xe9, 0x76, 0xe5, 0x8c, 0x74, 0x06, 0x3e},
  1034	}
  1035	
  1036	const (
  1037		FILE_SKIP_COMPLETION_PORT_ON_SUCCESS = 1
  1038		FILE_SKIP_SET_EVENT_ON_HANDLE        = 2
  1039	)
  1040	
  1041	const (
  1042		WSAPROTOCOL_LEN    = 255
  1043		MAX_PROTOCOL_CHAIN = 7
  1044		BASE_PROTOCOL      = 1
  1045		LAYERED_PROTOCOL   = 0
  1046	
  1047		XP1_CONNECTIONLESS           = 0x00000001
  1048		XP1_GUARANTEED_DELIVERY      = 0x00000002
  1049		XP1_GUARANTEED_ORDER         = 0x00000004
  1050		XP1_MESSAGE_ORIENTED         = 0x00000008
  1051		XP1_PSEUDO_STREAM            = 0x00000010
  1052		XP1_GRACEFUL_CLOSE           = 0x00000020
  1053		XP1_EXPEDITED_DATA           = 0x00000040
  1054		XP1_CONNECT_DATA             = 0x00000080
  1055		XP1_DISCONNECT_DATA          = 0x00000100
  1056		XP1_SUPPORT_BROADCAST        = 0x00000200
  1057		XP1_SUPPORT_MULTIPOINT       = 0x00000400
  1058		XP1_MULTIPOINT_CONTROL_PLANE = 0x00000800
  1059		XP1_MULTIPOINT_DATA_PLANE    = 0x00001000
  1060		XP1_QOS_SUPPORTED            = 0x00002000
  1061		XP1_UNI_SEND                 = 0x00008000
  1062		XP1_UNI_RECV                 = 0x00010000
  1063		XP1_IFS_HANDLES              = 0x00020000
  1064		XP1_PARTIAL_MESSAGE          = 0x00040000
  1065		XP1_SAN_SUPPORT_SDP          = 0x00080000
  1066	
  1067		PFL_MULTIPLE_PROTO_ENTRIES  = 0x00000001
  1068		PFL_RECOMMENDED_PROTO_ENTRY = 0x00000002
  1069		PFL_HIDDEN                  = 0x00000004
  1070		PFL_MATCHES_PROTOCOL_ZERO   = 0x00000008
  1071		PFL_NETWORKDIRECT_PROVIDER  = 0x00000010
  1072	)
  1073	
  1074	type WSAProtocolInfo struct {
  1075		ServiceFlags1     uint32
  1076		ServiceFlags2     uint32
  1077		ServiceFlags3     uint32
  1078		ServiceFlags4     uint32
  1079		ProviderFlags     uint32
  1080		ProviderId        GUID
  1081		CatalogEntryId    uint32
  1082		ProtocolChain     WSAProtocolChain
  1083		Version           int32
  1084		AddressFamily     int32
  1085		MaxSockAddr       int32
  1086		MinSockAddr       int32
  1087		SocketType        int32
  1088		Protocol          int32
  1089		ProtocolMaxOffset int32
  1090		NetworkByteOrder  int32
  1091		SecurityScheme    int32
  1092		MessageSize       uint32
  1093		ProviderReserved  uint32
  1094		ProtocolName      [WSAPROTOCOL_LEN + 1]uint16
  1095	}
  1096	
  1097	type WSAProtocolChain struct {
  1098		ChainLen     int32
  1099		ChainEntries [MAX_PROTOCOL_CHAIN]uint32
  1100	}
  1101	
  1102	type TCPKeepalive struct {
  1103		OnOff    uint32
  1104		Time     uint32
  1105		Interval uint32
  1106	}
  1107	
  1108	type symbolicLinkReparseBuffer struct {
  1109		SubstituteNameOffset uint16
  1110		SubstituteNameLength uint16
  1111		PrintNameOffset      uint16
  1112		PrintNameLength      uint16
  1113		Flags                uint32
  1114		PathBuffer           [1]uint16
  1115	}
  1116	
  1117	type mountPointReparseBuffer struct {
  1118		SubstituteNameOffset uint16
  1119		SubstituteNameLength uint16
  1120		PrintNameOffset      uint16
  1121		PrintNameLength      uint16
  1122		PathBuffer           [1]uint16
  1123	}
  1124	
  1125	type reparseDataBuffer struct {
  1126		ReparseTag        uint32
  1127		ReparseDataLength uint16
  1128		Reserved          uint16
  1129	
  1130		// GenericReparseBuffer
  1131		reparseBuffer byte
  1132	}
  1133	
  1134	const (
  1135		FSCTL_GET_REPARSE_POINT          = 0x900A8
  1136		MAXIMUM_REPARSE_DATA_BUFFER_SIZE = 16 * 1024
  1137		_IO_REPARSE_TAG_MOUNT_POINT      = 0xA0000003
  1138		IO_REPARSE_TAG_SYMLINK           = 0xA000000C
  1139		SYMBOLIC_LINK_FLAG_DIRECTORY     = 0x1
  1140		_SYMLINK_FLAG_RELATIVE           = 1
  1141	)
  1142	
  1143	const UNIX_PATH_MAX = 108 // defined in afunix.h
  1144	

View as plain text