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