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