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