Remove BPA from Makefile
[icn.git] / cmd / bpa-operator / vendor / golang.org / x / sys / windows / 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 windows
6
7 import "syscall"
8
9 const (
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
36 const (
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
52 const (
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
69 var 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
87 const (
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
129         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
142
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
201 const (
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
221 const (
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
232 const (
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
244 const (
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
253 const (
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
433 var (
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.
445 type Pointer *struct{}
446
447 // Invented values to support what package os expects.
448 type Timeval struct {
449         Sec  int32
450         Usec int32
451 }
452
453 func (tv *Timeval) Nanoseconds() int64 {
454         return (int64(tv.Sec)*1e6 + int64(tv.Usec)) * 1e3
455 }
456
457 func NsecToTimeval(nsec int64) (tv Timeval) {
458         tv.Sec = int32(nsec / 1e9)
459         tv.Usec = int32(nsec % 1e9 / 1e3)
460         return
461 }
462
463 type SecurityAttributes struct {
464         Length             uint32
465         SecurityDescriptor uintptr
466         InheritHandle      uint32
467 }
468
469 type Overlapped struct {
470         Internal     uintptr
471         InternalHigh uintptr
472         Offset       uint32
473         OffsetHigh   uint32
474         HEvent       Handle
475 }
476
477 type FileNotifyInformation struct {
478         NextEntryOffset uint32
479         Action          uint32
480         FileNameLength  uint32
481         FileName        uint16
482 }
483
484 type 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).
491 func (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
501 func 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
512 type 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.
527 type 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
540 func 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
555 type 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
568 const (
569         GetFileExInfoStandard = 0
570         GetFileExMaxInfoLevel = 1
571 )
572
573 type 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
583 const (
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
601 type 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
622 type ProcessInformation struct {
623         Process   Handle
624         Thread    Handle
625         ProcessId uint32
626         ThreadId  uint32
627 }
628
629 type 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
642 type 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
653 type 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
665 const (
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
742 type WSABuf struct {
743         Len uint32
744         Buf *byte
745 }
746
747 type 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.
757 const (
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
775 const (
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
783 type Hostent struct {
784         Name     *byte
785         Aliases  **byte
786         AddrType uint16
787         Length   uint16
788         AddrList **byte
789 }
790
791 type Protoent struct {
792         Name    *byte
793         Aliases **byte
794         Proto   uint16
795 }
796
797 const (
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
862 const (
863         DNS_INFO_NO_RECORDS = 0x251D
864 )
865
866 const (
867         // flags inside DNSRecord.Dw
868         DnsSectionQuestion   = 0x0000
869         DnsSectionAnswer     = 0x0001
870         DnsSectionAuthority  = 0x0002
871         DnsSectionAdditional = 0x0003
872 )
873
874 type DNSSRVData struct {
875         Target   *uint16
876         Priority uint16
877         Weight   uint16
878         Port     uint16
879         Pad      uint16
880 }
881
882 type DNSPTRData struct {
883         Host *uint16
884 }
885
886 type DNSMXData struct {
887         NameExchange *uint16
888         Preference   uint16
889         Pad          uint16
890 }
891
892 type DNSTXTData struct {
893         StringCount uint16
894         StringArray [1]*uint16
895 }
896
897 type 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
908 const (
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
917 type TransmitFileBuffers struct {
918         Head       uintptr
919         HeadLength uint32
920         Tail       uintptr
921         TailLength uint32
922 }
923
924 const (
925         IFF_UP           = 1
926         IFF_BROADCAST    = 2
927         IFF_LOOPBACK     = 4
928         IFF_POINTTOPOINT = 8
929         IFF_MULTICAST    = 16
930 )
931
932 const 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
937 type SockaddrGen [24]byte
938
939 type InterfaceInfo struct {
940         Flags            uint32
941         Address          SockaddrGen
942         BroadcastAddress SockaddrGen
943         Netmask          SockaddrGen
944 }
945
946 type IpAddressString struct {
947         String [16]byte
948 }
949
950 type IpMaskString IpAddressString
951
952 type IpAddrString struct {
953         Next      *IpAddrString
954         IpAddress IpAddressString
955         IpMask    IpMaskString
956         Context   uint32
957 }
958
959 const MAX_ADAPTER_NAME_LENGTH = 256
960 const MAX_ADAPTER_DESCRIPTION_LENGTH = 128
961 const MAX_ADAPTER_ADDRESS_LENGTH = 8
962
963 type 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
984 const MAXLEN_PHYSADDR = 8
985 const MAX_INTERFACE_NAME_LEN = 256
986 const MAXLEN_IFDESCR = 256
987
988 type 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
1015 type CertInfo struct {
1016         // Not implemented
1017 }
1018
1019 type CertContext struct {
1020         EncodingType uint32
1021         EncodedCert  *byte
1022         Length       uint32
1023         CertInfo     *CertInfo
1024         Store        Handle
1025 }
1026
1027 type 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
1038 type CertTrustListInfo struct {
1039         // Not implemented
1040 }
1041
1042 type 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
1052 type 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
1062 type CertRevocationCrlInfo struct {
1063         // Not implemented
1064 }
1065
1066 type 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
1076 type CertTrustStatus struct {
1077         ErrorStatus uint32
1078         InfoStatus  uint32
1079 }
1080
1081 type CertUsageMatch struct {
1082         Type  uint32
1083         Usage CertEnhKeyUsage
1084 }
1085
1086 type CertEnhKeyUsage struct {
1087         Length           uint32
1088         UsageIdentifiers **byte
1089 }
1090
1091 type 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
1101 type CertChainPolicyPara struct {
1102         Size            uint32
1103         Flags           uint32
1104         ExtraPolicyPara Pointer
1105 }
1106
1107 type SSLExtraCertChainPolicyPara struct {
1108         Size       uint32
1109         AuthType   uint32
1110         Checks     uint32
1111         ServerName *uint16
1112 }
1113
1114 type CertChainPolicyStatus struct {
1115         Size              uint32
1116         Error             uint32
1117         ChainIndex        uint32
1118         ElementIndex      uint32
1119         ExtraPolicyStatus Pointer
1120 }
1121
1122 const (
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
1146 const (
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
1164 type 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
1175 const (
1176         AI_PASSIVE     = 1
1177         AI_CANONNAME   = 2
1178         AI_NUMERICHOST = 4
1179 )
1180
1181 type GUID struct {
1182         Data1 uint32
1183         Data2 uint16
1184         Data3 uint16
1185         Data4 [8]byte
1186 }
1187
1188 var WSAID_CONNECTEX = GUID{
1189         0x25a207b9,
1190         0xddf3,
1191         0x4660,
1192         [8]byte{0x8e, 0xe9, 0x76, 0xe5, 0x8c, 0x74, 0x06, 0x3e},
1193 }
1194
1195 var WSAID_WSASENDMSG = GUID{
1196         0xa441e712,
1197         0x754f,
1198         0x43ca,
1199         [8]byte{0x84, 0xa7, 0x0d, 0xee, 0x44, 0xcf, 0x60, 0x6d},
1200 }
1201
1202 var WSAID_WSARECVMSG = GUID{
1203         0xf689d7c8,
1204         0x6f1f,
1205         0x436b,
1206         [8]byte{0x8a, 0x53, 0xe5, 0x4f, 0xe3, 0x51, 0xc3, 0x22},
1207 }
1208
1209 const (
1210         FILE_SKIP_COMPLETION_PORT_ON_SUCCESS = 1
1211         FILE_SKIP_SET_EVENT_ON_HANDLE        = 2
1212 )
1213
1214 const (
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
1247 type 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
1270 type WSAProtocolChain struct {
1271         ChainLen     int32
1272         ChainEntries [MAX_PROTOCOL_CHAIN]uint32
1273 }
1274
1275 type TCPKeepalive struct {
1276         OnOff    uint32
1277         Time     uint32
1278         Interval uint32
1279 }
1280
1281 type symbolicLinkReparseBuffer struct {
1282         SubstituteNameOffset uint16
1283         SubstituteNameLength uint16
1284         PrintNameOffset      uint16
1285         PrintNameLength      uint16
1286         Flags                uint32
1287         PathBuffer           [1]uint16
1288 }
1289
1290 type mountPointReparseBuffer struct {
1291         SubstituteNameOffset uint16
1292         SubstituteNameLength uint16
1293         PrintNameOffset      uint16
1294         PrintNameLength      uint16
1295         PathBuffer           [1]uint16
1296 }
1297
1298 type reparseDataBuffer struct {
1299         ReparseTag        uint32
1300         ReparseDataLength uint16
1301         Reserved          uint16
1302
1303         // GenericReparseBuffer
1304         reparseBuffer byte
1305 }
1306
1307 const (
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
1315 const (
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
1327 const (
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
1336 const GAA_FLAG_INCLUDE_PREFIX = 0x00000010
1337
1338 const (
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
1350 type SocketAddress struct {
1351         Sockaddr       *syscall.RawSockaddrAny
1352         SockaddrLength int32
1353 }
1354
1355 type 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
1369 type IpAdapterAnycastAddress struct {
1370         Length  uint32
1371         Flags   uint32
1372         Next    *IpAdapterAnycastAddress
1373         Address SocketAddress
1374 }
1375
1376 type IpAdapterMulticastAddress struct {
1377         Length  uint32
1378         Flags   uint32
1379         Next    *IpAdapterMulticastAddress
1380         Address SocketAddress
1381 }
1382
1383 type IpAdapterDnsServerAdapter struct {
1384         Length   uint32
1385         Reserved uint32
1386         Next     *IpAdapterDnsServerAdapter
1387         Address  SocketAddress
1388 }
1389
1390 type IpAdapterPrefix struct {
1391         Length       uint32
1392         Flags        uint32
1393         Next         *IpAdapterPrefix
1394         Address      SocketAddress
1395         PrefixLength uint32
1396 }
1397
1398 type 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
1422 const (
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
1435 const (
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
1454 type Coord struct {
1455         X int16
1456         Y int16
1457 }
1458
1459 type 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
1471 type ConsoleScreenBufferInfo struct {
1472         Size              Coord
1473         CursorPosition    Coord
1474         Attributes        uint16
1475         Window            SmallRect
1476         MaximumWindowSize Coord
1477 }
1478
1479 const UNIX_PATH_MAX = 108 // defined in afunix.h