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
5package windows
6
7import (
8	"net"
9	"syscall"
10	"unsafe"
11)
12
13// NTStatus corresponds with NTSTATUS, error values returned by ntdll.dll and
14// other native functions.
15type NTStatus uint32
16
17const (
18	// Invented values to support what package os expects.
19	O_RDONLY   = 0x00000
20	O_WRONLY   = 0x00001
21	O_RDWR     = 0x00002
22	O_CREAT    = 0x00040
23	O_EXCL     = 0x00080
24	O_NOCTTY   = 0x00100
25	O_TRUNC    = 0x00200
26	O_NONBLOCK = 0x00800
27	O_APPEND   = 0x00400
28	O_SYNC     = 0x01000
29	O_ASYNC    = 0x02000
30	O_CLOEXEC  = 0x80000
31)
32
33const (
34	// More invented values for signals
35	SIGHUP  = Signal(0x1)
36	SIGINT  = Signal(0x2)
37	SIGQUIT = Signal(0x3)
38	SIGILL  = Signal(0x4)
39	SIGTRAP = Signal(0x5)
40	SIGABRT = Signal(0x6)
41	SIGBUS  = Signal(0x7)
42	SIGFPE  = Signal(0x8)
43	SIGKILL = Signal(0x9)
44	SIGSEGV = Signal(0xb)
45	SIGPIPE = Signal(0xd)
46	SIGALRM = Signal(0xe)
47	SIGTERM = Signal(0xf)
48)
49
50var signals = [...]string{
51	1:  "hangup",
52	2:  "interrupt",
53	3:  "quit",
54	4:  "illegal instruction",
55	5:  "trace/breakpoint trap",
56	6:  "aborted",
57	7:  "bus error",
58	8:  "floating point exception",
59	9:  "killed",
60	10: "user defined signal 1",
61	11: "segmentation fault",
62	12: "user defined signal 2",
63	13: "broken pipe",
64	14: "alarm clock",
65	15: "terminated",
66}
67
68const (
69	FILE_READ_DATA        = 0x00000001
70	FILE_READ_ATTRIBUTES  = 0x00000080
71	FILE_READ_EA          = 0x00000008
72	FILE_WRITE_DATA       = 0x00000002
73	FILE_WRITE_ATTRIBUTES = 0x00000100
74	FILE_WRITE_EA         = 0x00000010
75	FILE_APPEND_DATA      = 0x00000004
76	FILE_EXECUTE          = 0x00000020
77
78	FILE_GENERIC_READ    = STANDARD_RIGHTS_READ | FILE_READ_DATA | FILE_READ_ATTRIBUTES | FILE_READ_EA | SYNCHRONIZE
79	FILE_GENERIC_WRITE   = STANDARD_RIGHTS_WRITE | FILE_WRITE_DATA | FILE_WRITE_ATTRIBUTES | FILE_WRITE_EA | FILE_APPEND_DATA | SYNCHRONIZE
80	FILE_GENERIC_EXECUTE = STANDARD_RIGHTS_EXECUTE | FILE_READ_ATTRIBUTES | FILE_EXECUTE | SYNCHRONIZE
81
82	FILE_LIST_DIRECTORY = 0x00000001
83	FILE_TRAVERSE       = 0x00000020
84
85	FILE_SHARE_READ   = 0x00000001
86	FILE_SHARE_WRITE  = 0x00000002
87	FILE_SHARE_DELETE = 0x00000004
88
89	FILE_ATTRIBUTE_READONLY              = 0x00000001
90	FILE_ATTRIBUTE_HIDDEN                = 0x00000002
91	FILE_ATTRIBUTE_SYSTEM                = 0x00000004
92	FILE_ATTRIBUTE_DIRECTORY             = 0x00000010
93	FILE_ATTRIBUTE_ARCHIVE               = 0x00000020
94	FILE_ATTRIBUTE_DEVICE                = 0x00000040
95	FILE_ATTRIBUTE_NORMAL                = 0x00000080
96	FILE_ATTRIBUTE_TEMPORARY             = 0x00000100
97	FILE_ATTRIBUTE_SPARSE_FILE           = 0x00000200
98	FILE_ATTRIBUTE_REPARSE_POINT         = 0x00000400
99	FILE_ATTRIBUTE_COMPRESSED            = 0x00000800
100	FILE_ATTRIBUTE_OFFLINE               = 0x00001000
101	FILE_ATTRIBUTE_NOT_CONTENT_INDEXED   = 0x00002000
102	FILE_ATTRIBUTE_ENCRYPTED             = 0x00004000
103	FILE_ATTRIBUTE_INTEGRITY_STREAM      = 0x00008000
104	FILE_ATTRIBUTE_VIRTUAL               = 0x00010000
105	FILE_ATTRIBUTE_NO_SCRUB_DATA         = 0x00020000
106	FILE_ATTRIBUTE_RECALL_ON_OPEN        = 0x00040000
107	FILE_ATTRIBUTE_RECALL_ON_DATA_ACCESS = 0x00400000
108
109	INVALID_FILE_ATTRIBUTES = 0xffffffff
110
111	CREATE_NEW        = 1
112	CREATE_ALWAYS     = 2
113	OPEN_EXISTING     = 3
114	OPEN_ALWAYS       = 4
115	TRUNCATE_EXISTING = 5
116
117	FILE_FLAG_OPEN_REQUIRING_OPLOCK = 0x00040000
118	FILE_FLAG_FIRST_PIPE_INSTANCE   = 0x00080000
119	FILE_FLAG_OPEN_NO_RECALL        = 0x00100000
120	FILE_FLAG_OPEN_REPARSE_POINT    = 0x00200000
121	FILE_FLAG_SESSION_AWARE         = 0x00800000
122	FILE_FLAG_POSIX_SEMANTICS       = 0x01000000
123	FILE_FLAG_BACKUP_SEMANTICS      = 0x02000000
124	FILE_FLAG_DELETE_ON_CLOSE       = 0x04000000
125	FILE_FLAG_SEQUENTIAL_SCAN       = 0x08000000
126	FILE_FLAG_RANDOM_ACCESS         = 0x10000000
127	FILE_FLAG_NO_BUFFERING          = 0x20000000
128	FILE_FLAG_OVERLAPPED            = 0x40000000
129	FILE_FLAG_WRITE_THROUGH         = 0x80000000
130
131	HANDLE_FLAG_INHERIT    = 0x00000001
132	STARTF_USESTDHANDLES   = 0x00000100
133	STARTF_USESHOWWINDOW   = 0x00000001
134	DUPLICATE_CLOSE_SOURCE = 0x00000001
135	DUPLICATE_SAME_ACCESS  = 0x00000002
136
137	STD_INPUT_HANDLE  = -10 & (1<<32 - 1)
138	STD_OUTPUT_HANDLE = -11 & (1<<32 - 1)
139	STD_ERROR_HANDLE  = -12 & (1<<32 - 1)
140
141	FILE_BEGIN   = 0
142	FILE_CURRENT = 1
143	FILE_END     = 2
144
145	LANG_ENGLISH       = 0x09
146	SUBLANG_ENGLISH_US = 0x01
147
148	FORMAT_MESSAGE_ALLOCATE_BUFFER = 256
149	FORMAT_MESSAGE_IGNORE_INSERTS  = 512
150	FORMAT_MESSAGE_FROM_STRING     = 1024
151	FORMAT_MESSAGE_FROM_HMODULE    = 2048
152	FORMAT_MESSAGE_FROM_SYSTEM     = 4096
153	FORMAT_MESSAGE_ARGUMENT_ARRAY  = 8192
154	FORMAT_MESSAGE_MAX_WIDTH_MASK  = 255
155
156	MAX_PATH      = 260
157	MAX_LONG_PATH = 32768
158
159	MAX_MODULE_NAME32 = 255
160
161	MAX_COMPUTERNAME_LENGTH = 15
162
163	TIME_ZONE_ID_UNKNOWN  = 0
164	TIME_ZONE_ID_STANDARD = 1
165
166	TIME_ZONE_ID_DAYLIGHT = 2
167	IGNORE                = 0
168	INFINITE              = 0xffffffff
169
170	WAIT_ABANDONED = 0x00000080
171	WAIT_OBJECT_0  = 0x00000000
172	WAIT_FAILED    = 0xFFFFFFFF
173
174	// Access rights for process.
175	PROCESS_CREATE_PROCESS            = 0x0080
176	PROCESS_CREATE_THREAD             = 0x0002
177	PROCESS_DUP_HANDLE                = 0x0040
178	PROCESS_QUERY_INFORMATION         = 0x0400
179	PROCESS_QUERY_LIMITED_INFORMATION = 0x1000
180	PROCESS_SET_INFORMATION           = 0x0200
181	PROCESS_SET_QUOTA                 = 0x0100
182	PROCESS_SUSPEND_RESUME            = 0x0800
183	PROCESS_TERMINATE                 = 0x0001
184	PROCESS_VM_OPERATION              = 0x0008
185	PROCESS_VM_READ                   = 0x0010
186	PROCESS_VM_WRITE                  = 0x0020
187
188	// Access rights for thread.
189	THREAD_DIRECT_IMPERSONATION      = 0x0200
190	THREAD_GET_CONTEXT               = 0x0008
191	THREAD_IMPERSONATE               = 0x0100
192	THREAD_QUERY_INFORMATION         = 0x0040
193	THREAD_QUERY_LIMITED_INFORMATION = 0x0800
194	THREAD_SET_CONTEXT               = 0x0010
195	THREAD_SET_INFORMATION           = 0x0020
196	THREAD_SET_LIMITED_INFORMATION   = 0x0400
197	THREAD_SET_THREAD_TOKEN          = 0x0080
198	THREAD_SUSPEND_RESUME            = 0x0002
199	THREAD_TERMINATE                 = 0x0001
200
201	FILE_MAP_COPY    = 0x01
202	FILE_MAP_WRITE   = 0x02
203	FILE_MAP_READ    = 0x04
204	FILE_MAP_EXECUTE = 0x20
205
206	CTRL_C_EVENT        = 0
207	CTRL_BREAK_EVENT    = 1
208	CTRL_CLOSE_EVENT    = 2
209	CTRL_LOGOFF_EVENT   = 5
210	CTRL_SHUTDOWN_EVENT = 6
211
212	// Windows reserves errors >= 1<<29 for application use.
213	APPLICATION_ERROR = 1 << 29
214)
215
216const (
217	// Process creation flags.
218	CREATE_BREAKAWAY_FROM_JOB        = 0x01000000
219	CREATE_DEFAULT_ERROR_MODE        = 0x04000000
220	CREATE_NEW_CONSOLE               = 0x00000010
221	CREATE_NEW_PROCESS_GROUP         = 0x00000200
222	CREATE_NO_WINDOW                 = 0x08000000
223	CREATE_PROTECTED_PROCESS         = 0x00040000
224	CREATE_PRESERVE_CODE_AUTHZ_LEVEL = 0x02000000
225	CREATE_SEPARATE_WOW_VDM          = 0x00000800
226	CREATE_SHARED_WOW_VDM            = 0x00001000
227	CREATE_SUSPENDED                 = 0x00000004
228	CREATE_UNICODE_ENVIRONMENT       = 0x00000400
229	DEBUG_ONLY_THIS_PROCESS          = 0x00000002
230	DEBUG_PROCESS                    = 0x00000001
231	DETACHED_PROCESS                 = 0x00000008
232	EXTENDED_STARTUPINFO_PRESENT     = 0x00080000
233	INHERIT_PARENT_AFFINITY          = 0x00010000
234)
235
236const (
237	// attributes for ProcThreadAttributeList
238	PROC_THREAD_ATTRIBUTE_PARENT_PROCESS    = 0x00020000
239	PROC_THREAD_ATTRIBUTE_HANDLE_LIST       = 0x00020002
240	PROC_THREAD_ATTRIBUTE_GROUP_AFFINITY    = 0x00030003
241	PROC_THREAD_ATTRIBUTE_PREFERRED_NODE    = 0x00020004
242	PROC_THREAD_ATTRIBUTE_IDEAL_PROCESSOR   = 0x00030005
243	PROC_THREAD_ATTRIBUTE_MITIGATION_POLICY = 0x00020007
244	PROC_THREAD_ATTRIBUTE_UMS_THREAD        = 0x00030006
245	PROC_THREAD_ATTRIBUTE_PROTECTION_LEVEL  = 0x0002000b
246)
247
248const (
249	// flags for CreateToolhelp32Snapshot
250	TH32CS_SNAPHEAPLIST = 0x01
251	TH32CS_SNAPPROCESS  = 0x02
252	TH32CS_SNAPTHREAD   = 0x04
253	TH32CS_SNAPMODULE   = 0x08
254	TH32CS_SNAPMODULE32 = 0x10
255	TH32CS_SNAPALL      = TH32CS_SNAPHEAPLIST | TH32CS_SNAPMODULE | TH32CS_SNAPPROCESS | TH32CS_SNAPTHREAD
256	TH32CS_INHERIT      = 0x80000000
257)
258
259const (
260	// flags for EnumProcessModulesEx
261	LIST_MODULES_32BIT   = 0x01
262	LIST_MODULES_64BIT   = 0x02
263	LIST_MODULES_ALL     = 0x03
264	LIST_MODULES_DEFAULT = 0x00
265)
266
267const (
268	// filters for ReadDirectoryChangesW and FindFirstChangeNotificationW
269	FILE_NOTIFY_CHANGE_FILE_NAME   = 0x001
270	FILE_NOTIFY_CHANGE_DIR_NAME    = 0x002
271	FILE_NOTIFY_CHANGE_ATTRIBUTES  = 0x004
272	FILE_NOTIFY_CHANGE_SIZE        = 0x008
273	FILE_NOTIFY_CHANGE_LAST_WRITE  = 0x010
274	FILE_NOTIFY_CHANGE_LAST_ACCESS = 0x020
275	FILE_NOTIFY_CHANGE_CREATION    = 0x040
276	FILE_NOTIFY_CHANGE_SECURITY    = 0x100
277)
278
279const (
280	// do not reorder
281	FILE_ACTION_ADDED = iota + 1
282	FILE_ACTION_REMOVED
283	FILE_ACTION_MODIFIED
284	FILE_ACTION_RENAMED_OLD_NAME
285	FILE_ACTION_RENAMED_NEW_NAME
286)
287
288const (
289	// wincrypt.h
290	/* certenrolld_begin -- PROV_RSA_*/
291	PROV_RSA_FULL      = 1
292	PROV_RSA_SIG       = 2
293	PROV_DSS           = 3
294	PROV_FORTEZZA      = 4
295	PROV_MS_EXCHANGE   = 5
296	PROV_SSL           = 6
297	PROV_RSA_SCHANNEL  = 12
298	PROV_DSS_DH        = 13
299	PROV_EC_ECDSA_SIG  = 14
300	PROV_EC_ECNRA_SIG  = 15
301	PROV_EC_ECDSA_FULL = 16
302	PROV_EC_ECNRA_FULL = 17
303	PROV_DH_SCHANNEL   = 18
304	PROV_SPYRUS_LYNKS  = 20
305	PROV_RNG           = 21
306	PROV_INTEL_SEC     = 22
307	PROV_REPLACE_OWF   = 23
308	PROV_RSA_AES       = 24
309
310	/* dwFlags definitions for CryptAcquireContext */
311	CRYPT_VERIFYCONTEXT              = 0xF0000000
312	CRYPT_NEWKEYSET                  = 0x00000008
313	CRYPT_DELETEKEYSET               = 0x00000010
314	CRYPT_MACHINE_KEYSET             = 0x00000020
315	CRYPT_SILENT                     = 0x00000040
316	CRYPT_DEFAULT_CONTAINER_OPTIONAL = 0x00000080
317
318	/* Flags for PFXImportCertStore */
319	CRYPT_EXPORTABLE                   = 0x00000001
320	CRYPT_USER_PROTECTED               = 0x00000002
321	CRYPT_USER_KEYSET                  = 0x00001000
322	PKCS12_PREFER_CNG_KSP              = 0x00000100
323	PKCS12_ALWAYS_CNG_KSP              = 0x00000200
324	PKCS12_ALLOW_OVERWRITE_KEY         = 0x00004000
325	PKCS12_NO_PERSIST_KEY              = 0x00008000
326	PKCS12_INCLUDE_EXTENDED_PROPERTIES = 0x00000010
327
328	/* Flags for CryptAcquireCertificatePrivateKey */
329	CRYPT_ACQUIRE_CACHE_FLAG             = 0x00000001
330	CRYPT_ACQUIRE_USE_PROV_INFO_FLAG     = 0x00000002
331	CRYPT_ACQUIRE_COMPARE_KEY_FLAG       = 0x00000004
332	CRYPT_ACQUIRE_NO_HEALING             = 0x00000008
333	CRYPT_ACQUIRE_SILENT_FLAG            = 0x00000040
334	CRYPT_ACQUIRE_WINDOW_HANDLE_FLAG     = 0x00000080
335	CRYPT_ACQUIRE_NCRYPT_KEY_FLAGS_MASK  = 0x00070000
336	CRYPT_ACQUIRE_ALLOW_NCRYPT_KEY_FLAG  = 0x00010000
337	CRYPT_ACQUIRE_PREFER_NCRYPT_KEY_FLAG = 0x00020000
338	CRYPT_ACQUIRE_ONLY_NCRYPT_KEY_FLAG   = 0x00040000
339
340	/* pdwKeySpec for CryptAcquireCertificatePrivateKey */
341	AT_KEYEXCHANGE       = 1
342	AT_SIGNATURE         = 2
343	CERT_NCRYPT_KEY_SPEC = 0xFFFFFFFF
344
345	/* Default usage match type is AND with value zero */
346	USAGE_MATCH_TYPE_AND = 0
347	USAGE_MATCH_TYPE_OR  = 1
348
349	/* msgAndCertEncodingType values for CertOpenStore function */
350	X509_ASN_ENCODING   = 0x00000001
351	PKCS_7_ASN_ENCODING = 0x00010000
352
353	/* storeProvider values for CertOpenStore function */
354	CERT_STORE_PROV_MSG               = 1
355	CERT_STORE_PROV_MEMORY            = 2
356	CERT_STORE_PROV_FILE              = 3
357	CERT_STORE_PROV_REG               = 4
358	CERT_STORE_PROV_PKCS7             = 5
359	CERT_STORE_PROV_SERIALIZED        = 6
360	CERT_STORE_PROV_FILENAME_A        = 7
361	CERT_STORE_PROV_FILENAME_W        = 8
362	CERT_STORE_PROV_FILENAME          = CERT_STORE_PROV_FILENAME_W
363	CERT_STORE_PROV_SYSTEM_A          = 9
364	CERT_STORE_PROV_SYSTEM_W          = 10
365	CERT_STORE_PROV_SYSTEM            = CERT_STORE_PROV_SYSTEM_W
366	CERT_STORE_PROV_COLLECTION        = 11
367	CERT_STORE_PROV_SYSTEM_REGISTRY_A = 12
368	CERT_STORE_PROV_SYSTEM_REGISTRY_W = 13
369	CERT_STORE_PROV_SYSTEM_REGISTRY   = CERT_STORE_PROV_SYSTEM_REGISTRY_W
370	CERT_STORE_PROV_PHYSICAL_W        = 14
371	CERT_STORE_PROV_PHYSICAL          = CERT_STORE_PROV_PHYSICAL_W
372	CERT_STORE_PROV_SMART_CARD_W      = 15
373	CERT_STORE_PROV_SMART_CARD        = CERT_STORE_PROV_SMART_CARD_W
374	CERT_STORE_PROV_LDAP_W            = 16
375	CERT_STORE_PROV_LDAP              = CERT_STORE_PROV_LDAP_W
376	CERT_STORE_PROV_PKCS12            = 17
377
378	/* store characteristics (low WORD of flag) for CertOpenStore function */
379	CERT_STORE_NO_CRYPT_RELEASE_FLAG            = 0x00000001
380	CERT_STORE_SET_LOCALIZED_NAME_FLAG          = 0x00000002
381	CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG = 0x00000004
382	CERT_STORE_DELETE_FLAG                      = 0x00000010
383	CERT_STORE_UNSAFE_PHYSICAL_FLAG             = 0x00000020
384	CERT_STORE_SHARE_STORE_FLAG                 = 0x00000040
385	CERT_STORE_SHARE_CONTEXT_FLAG               = 0x00000080
386	CERT_STORE_MANIFOLD_FLAG                    = 0x00000100
387	CERT_STORE_ENUM_ARCHIVED_FLAG               = 0x00000200
388	CERT_STORE_UPDATE_KEYID_FLAG                = 0x00000400
389	CERT_STORE_BACKUP_RESTORE_FLAG              = 0x00000800
390	CERT_STORE_MAXIMUM_ALLOWED_FLAG             = 0x00001000
391	CERT_STORE_CREATE_NEW_FLAG                  = 0x00002000
392	CERT_STORE_OPEN_EXISTING_FLAG               = 0x00004000
393	CERT_STORE_READONLY_FLAG                    = 0x00008000
394
395	/* store locations (high WORD of flag) for CertOpenStore function */
396	CERT_SYSTEM_STORE_CURRENT_USER               = 0x00010000
397	CERT_SYSTEM_STORE_LOCAL_MACHINE              = 0x00020000
398	CERT_SYSTEM_STORE_CURRENT_SERVICE            = 0x00040000
399	CERT_SYSTEM_STORE_SERVICES                   = 0x00050000
400	CERT_SYSTEM_STORE_USERS                      = 0x00060000
401	CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY  = 0x00070000
402	CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY = 0x00080000
403	CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE   = 0x00090000
404	CERT_SYSTEM_STORE_UNPROTECTED_FLAG           = 0x40000000
405	CERT_SYSTEM_STORE_RELOCATE_FLAG              = 0x80000000
406
407	/* Miscellaneous high-WORD flags for CertOpenStore function */
408	CERT_REGISTRY_STORE_REMOTE_FLAG      = 0x00010000
409	CERT_REGISTRY_STORE_SERIALIZED_FLAG  = 0x00020000
410	CERT_REGISTRY_STORE_ROAMING_FLAG     = 0x00040000
411	CERT_REGISTRY_STORE_MY_IE_DIRTY_FLAG = 0x00080000
412	CERT_REGISTRY_STORE_LM_GPT_FLAG      = 0x01000000
413	CERT_REGISTRY_STORE_CLIENT_GPT_FLAG  = 0x80000000
414	CERT_FILE_STORE_COMMIT_ENABLE_FLAG   = 0x00010000
415	CERT_LDAP_STORE_SIGN_FLAG            = 0x00010000
416	CERT_LDAP_STORE_AREC_EXCLUSIVE_FLAG  = 0x00020000
417	CERT_LDAP_STORE_OPENED_FLAG          = 0x00040000
418	CERT_LDAP_STORE_UNBIND_FLAG          = 0x00080000
419
420	/* addDisposition values for CertAddCertificateContextToStore function */
421	CERT_STORE_ADD_NEW                                 = 1
422	CERT_STORE_ADD_USE_EXISTING                        = 2
423	CERT_STORE_ADD_REPLACE_EXISTING                    = 3
424	CERT_STORE_ADD_ALWAYS                              = 4
425	CERT_STORE_ADD_REPLACE_EXISTING_INHERIT_PROPERTIES = 5
426	CERT_STORE_ADD_NEWER                               = 6
427	CERT_STORE_ADD_NEWER_INHERIT_PROPERTIES            = 7
428
429	/* ErrorStatus values for CertTrustStatus struct */
430	CERT_TRUST_NO_ERROR                          = 0x00000000
431	CERT_TRUST_IS_NOT_TIME_VALID                 = 0x00000001
432	CERT_TRUST_IS_REVOKED                        = 0x00000004
433	CERT_TRUST_IS_NOT_SIGNATURE_VALID            = 0x00000008
434	CERT_TRUST_IS_NOT_VALID_FOR_USAGE            = 0x00000010
435	CERT_TRUST_IS_UNTRUSTED_ROOT                 = 0x00000020
436	CERT_TRUST_REVOCATION_STATUS_UNKNOWN         = 0x00000040
437	CERT_TRUST_IS_CYCLIC                         = 0x00000080
438	CERT_TRUST_INVALID_EXTENSION                 = 0x00000100
439	CERT_TRUST_INVALID_POLICY_CONSTRAINTS        = 0x00000200
440	CERT_TRUST_INVALID_BASIC_CONSTRAINTS         = 0x00000400
441	CERT_TRUST_INVALID_NAME_CONSTRAINTS          = 0x00000800
442	CERT_TRUST_HAS_NOT_SUPPORTED_NAME_CONSTRAINT = 0x00001000
443	CERT_TRUST_HAS_NOT_DEFINED_NAME_CONSTRAINT   = 0x00002000
444	CERT_TRUST_HAS_NOT_PERMITTED_NAME_CONSTRAINT = 0x00004000
445	CERT_TRUST_HAS_EXCLUDED_NAME_CONSTRAINT      = 0x00008000
446	CERT_TRUST_IS_PARTIAL_CHAIN                  = 0x00010000
447	CERT_TRUST_CTL_IS_NOT_TIME_VALID             = 0x00020000
448	CERT_TRUST_CTL_IS_NOT_SIGNATURE_VALID        = 0x00040000
449	CERT_TRUST_CTL_IS_NOT_VALID_FOR_USAGE        = 0x00080000
450	CERT_TRUST_HAS_WEAK_SIGNATURE                = 0x00100000
451	CERT_TRUST_IS_OFFLINE_REVOCATION             = 0x01000000
452	CERT_TRUST_NO_ISSUANCE_CHAIN_POLICY          = 0x02000000
453	CERT_TRUST_IS_EXPLICIT_DISTRUST              = 0x04000000
454	CERT_TRUST_HAS_NOT_SUPPORTED_CRITICAL_EXT    = 0x08000000
455
456	/* InfoStatus values for CertTrustStatus struct */
457	CERT_TRUST_HAS_EXACT_MATCH_ISSUER        = 0x00000001
458	CERT_TRUST_HAS_KEY_MATCH_ISSUER          = 0x00000002
459	CERT_TRUST_HAS_NAME_MATCH_ISSUER         = 0x00000004
460	CERT_TRUST_IS_SELF_SIGNED                = 0x00000008
461	CERT_TRUST_HAS_PREFERRED_ISSUER          = 0x00000100
462	CERT_TRUST_HAS_ISSUANCE_CHAIN_POLICY     = 0x00000400
463	CERT_TRUST_HAS_VALID_NAME_CONSTRAINTS    = 0x00000400
464	CERT_TRUST_IS_PEER_TRUSTED               = 0x00000800
465	CERT_TRUST_HAS_CRL_VALIDITY_EXTENDED     = 0x00001000
466	CERT_TRUST_IS_FROM_EXCLUSIVE_TRUST_STORE = 0x00002000
467	CERT_TRUST_IS_CA_TRUSTED                 = 0x00004000
468	CERT_TRUST_IS_COMPLEX_CHAIN              = 0x00010000
469
470	/* Certificate Information Flags */
471	CERT_INFO_VERSION_FLAG                 = 1
472	CERT_INFO_SERIAL_NUMBER_FLAG           = 2
473	CERT_INFO_SIGNATURE_ALGORITHM_FLAG     = 3
474	CERT_INFO_ISSUER_FLAG                  = 4
475	CERT_INFO_NOT_BEFORE_FLAG              = 5
476	CERT_INFO_NOT_AFTER_FLAG               = 6
477	CERT_INFO_SUBJECT_FLAG                 = 7
478	CERT_INFO_SUBJECT_PUBLIC_KEY_INFO_FLAG = 8
479	CERT_INFO_ISSUER_UNIQUE_ID_FLAG        = 9
480	CERT_INFO_SUBJECT_UNIQUE_ID_FLAG       = 10
481	CERT_INFO_EXTENSION_FLAG               = 11
482
483	/* dwFindType for CertFindCertificateInStore  */
484	CERT_COMPARE_MASK                     = 0xFFFF
485	CERT_COMPARE_SHIFT                    = 16
486	CERT_COMPARE_ANY                      = 0
487	CERT_COMPARE_SHA1_HASH                = 1
488	CERT_COMPARE_NAME                     = 2
489	CERT_COMPARE_ATTR                     = 3
490	CERT_COMPARE_MD5_HASH                 = 4
491	CERT_COMPARE_PROPERTY                 = 5
492	CERT_COMPARE_PUBLIC_KEY               = 6
493	CERT_COMPARE_HASH                     = CERT_COMPARE_SHA1_HASH
494	CERT_COMPARE_NAME_STR_A               = 7
495	CERT_COMPARE_NAME_STR_W               = 8
496	CERT_COMPARE_KEY_SPEC                 = 9
497	CERT_COMPARE_ENHKEY_USAGE             = 10
498	CERT_COMPARE_CTL_USAGE                = CERT_COMPARE_ENHKEY_USAGE
499	CERT_COMPARE_SUBJECT_CERT             = 11
500	CERT_COMPARE_ISSUER_OF                = 12
501	CERT_COMPARE_EXISTING                 = 13
502	CERT_COMPARE_SIGNATURE_HASH           = 14
503	CERT_COMPARE_KEY_IDENTIFIER           = 15
504	CERT_COMPARE_CERT_ID                  = 16
505	CERT_COMPARE_CROSS_CERT_DIST_POINTS   = 17
506	CERT_COMPARE_PUBKEY_MD5_HASH          = 18
507	CERT_COMPARE_SUBJECT_INFO_ACCESS      = 19
508	CERT_COMPARE_HASH_STR                 = 20
509	CERT_COMPARE_HAS_PRIVATE_KEY          = 21
510	CERT_FIND_ANY                         = (CERT_COMPARE_ANY << CERT_COMPARE_SHIFT)
511	CERT_FIND_SHA1_HASH                   = (CERT_COMPARE_SHA1_HASH << CERT_COMPARE_SHIFT)
512	CERT_FIND_MD5_HASH                    = (CERT_COMPARE_MD5_HASH << CERT_COMPARE_SHIFT)
513	CERT_FIND_SIGNATURE_HASH              = (CERT_COMPARE_SIGNATURE_HASH << CERT_COMPARE_SHIFT)
514	CERT_FIND_KEY_IDENTIFIER              = (CERT_COMPARE_KEY_IDENTIFIER << CERT_COMPARE_SHIFT)
515	CERT_FIND_HASH                        = CERT_FIND_SHA1_HASH
516	CERT_FIND_PROPERTY                    = (CERT_COMPARE_PROPERTY << CERT_COMPARE_SHIFT)
517	CERT_FIND_PUBLIC_KEY                  = (CERT_COMPARE_PUBLIC_KEY << CERT_COMPARE_SHIFT)
518	CERT_FIND_SUBJECT_NAME                = (CERT_COMPARE_NAME<<CERT_COMPARE_SHIFT | CERT_INFO_SUBJECT_FLAG)
519	CERT_FIND_SUBJECT_ATTR                = (CERT_COMPARE_ATTR<<CERT_COMPARE_SHIFT | CERT_INFO_SUBJECT_FLAG)
520	CERT_FIND_ISSUER_NAME                 = (CERT_COMPARE_NAME<<CERT_COMPARE_SHIFT | CERT_INFO_ISSUER_FLAG)
521	CERT_FIND_ISSUER_ATTR                 = (CERT_COMPARE_ATTR<<CERT_COMPARE_SHIFT | CERT_INFO_ISSUER_FLAG)
522	CERT_FIND_SUBJECT_STR_A               = (CERT_COMPARE_NAME_STR_A<<CERT_COMPARE_SHIFT | CERT_INFO_SUBJECT_FLAG)
523	CERT_FIND_SUBJECT_STR_W               = (CERT_COMPARE_NAME_STR_W<<CERT_COMPARE_SHIFT | CERT_INFO_SUBJECT_FLAG)
524	CERT_FIND_SUBJECT_STR                 = CERT_FIND_SUBJECT_STR_W
525	CERT_FIND_ISSUER_STR_A                = (CERT_COMPARE_NAME_STR_A<<CERT_COMPARE_SHIFT | CERT_INFO_ISSUER_FLAG)
526	CERT_FIND_ISSUER_STR_W                = (CERT_COMPARE_NAME_STR_W<<CERT_COMPARE_SHIFT | CERT_INFO_ISSUER_FLAG)
527	CERT_FIND_ISSUER_STR                  = CERT_FIND_ISSUER_STR_W
528	CERT_FIND_KEY_SPEC                    = (CERT_COMPARE_KEY_SPEC << CERT_COMPARE_SHIFT)
529	CERT_FIND_ENHKEY_USAGE                = (CERT_COMPARE_ENHKEY_USAGE << CERT_COMPARE_SHIFT)
530	CERT_FIND_CTL_USAGE                   = CERT_FIND_ENHKEY_USAGE
531	CERT_FIND_SUBJECT_CERT                = (CERT_COMPARE_SUBJECT_CERT << CERT_COMPARE_SHIFT)
532	CERT_FIND_ISSUER_OF                   = (CERT_COMPARE_ISSUER_OF << CERT_COMPARE_SHIFT)
533	CERT_FIND_EXISTING                    = (CERT_COMPARE_EXISTING << CERT_COMPARE_SHIFT)
534	CERT_FIND_CERT_ID                     = (CERT_COMPARE_CERT_ID << CERT_COMPARE_SHIFT)
535	CERT_FIND_CROSS_CERT_DIST_POINTS      = (CERT_COMPARE_CROSS_CERT_DIST_POINTS << CERT_COMPARE_SHIFT)
536	CERT_FIND_PUBKEY_MD5_HASH             = (CERT_COMPARE_PUBKEY_MD5_HASH << CERT_COMPARE_SHIFT)
537	CERT_FIND_SUBJECT_INFO_ACCESS         = (CERT_COMPARE_SUBJECT_INFO_ACCESS << CERT_COMPARE_SHIFT)
538	CERT_FIND_HASH_STR                    = (CERT_COMPARE_HASH_STR << CERT_COMPARE_SHIFT)
539	CERT_FIND_HAS_PRIVATE_KEY             = (CERT_COMPARE_HAS_PRIVATE_KEY << CERT_COMPARE_SHIFT)
540	CERT_FIND_OPTIONAL_ENHKEY_USAGE_FLAG  = 0x1
541	CERT_FIND_EXT_ONLY_ENHKEY_USAGE_FLAG  = 0x2
542	CERT_FIND_PROP_ONLY_ENHKEY_USAGE_FLAG = 0x4
543	CERT_FIND_NO_ENHKEY_USAGE_FLAG        = 0x8
544	CERT_FIND_OR_ENHKEY_USAGE_FLAG        = 0x10
545	CERT_FIND_VALID_ENHKEY_USAGE_FLAG     = 0x20
546	CERT_FIND_OPTIONAL_CTL_USAGE_FLAG     = CERT_FIND_OPTIONAL_ENHKEY_USAGE_FLAG
547	CERT_FIND_EXT_ONLY_CTL_USAGE_FLAG     = CERT_FIND_EXT_ONLY_ENHKEY_USAGE_FLAG
548	CERT_FIND_PROP_ONLY_CTL_USAGE_FLAG    = CERT_FIND_PROP_ONLY_ENHKEY_USAGE_FLAG
549	CERT_FIND_NO_CTL_USAGE_FLAG           = CERT_FIND_NO_ENHKEY_USAGE_FLAG
550	CERT_FIND_OR_CTL_USAGE_FLAG           = CERT_FIND_OR_ENHKEY_USAGE_FLAG
551	CERT_FIND_VALID_CTL_USAGE_FLAG        = CERT_FIND_VALID_ENHKEY_USAGE_FLAG
552
553	/* policyOID values for CertVerifyCertificateChainPolicy function */
554	CERT_CHAIN_POLICY_BASE              = 1
555	CERT_CHAIN_POLICY_AUTHENTICODE      = 2
556	CERT_CHAIN_POLICY_AUTHENTICODE_TS   = 3
557	CERT_CHAIN_POLICY_SSL               = 4
558	CERT_CHAIN_POLICY_BASIC_CONSTRAINTS = 5
559	CERT_CHAIN_POLICY_NT_AUTH           = 6
560	CERT_CHAIN_POLICY_MICROSOFT_ROOT    = 7
561	CERT_CHAIN_POLICY_EV                = 8
562	CERT_CHAIN_POLICY_SSL_F12           = 9
563
564	/* flag for dwFindType CertFindChainInStore  */
565	CERT_CHAIN_FIND_BY_ISSUER = 1
566
567	/* dwFindFlags for CertFindChainInStore when dwFindType == CERT_CHAIN_FIND_BY_ISSUER */
568	CERT_CHAIN_FIND_BY_ISSUER_COMPARE_KEY_FLAG    = 0x0001
569	CERT_CHAIN_FIND_BY_ISSUER_COMPLEX_CHAIN_FLAG  = 0x0002
570	CERT_CHAIN_FIND_BY_ISSUER_CACHE_ONLY_URL_FLAG = 0x0004
571	CERT_CHAIN_FIND_BY_ISSUER_LOCAL_MACHINE_FLAG  = 0x0008
572	CERT_CHAIN_FIND_BY_ISSUER_NO_KEY_FLAG         = 0x4000
573	CERT_CHAIN_FIND_BY_ISSUER_CACHE_ONLY_FLAG     = 0x8000
574
575	/* Certificate Store close flags */
576	CERT_CLOSE_STORE_FORCE_FLAG = 0x00000001
577	CERT_CLOSE_STORE_CHECK_FLAG = 0x00000002
578
579	/* CryptQueryObject object type */
580	CERT_QUERY_OBJECT_FILE = 1
581	CERT_QUERY_OBJECT_BLOB = 2
582
583	/* CryptQueryObject content type flags */
584	CERT_QUERY_CONTENT_CERT                    = 1
585	CERT_QUERY_CONTENT_CTL                     = 2
586	CERT_QUERY_CONTENT_CRL                     = 3
587	CERT_QUERY_CONTENT_SERIALIZED_STORE        = 4
588	CERT_QUERY_CONTENT_SERIALIZED_CERT         = 5
589	CERT_QUERY_CONTENT_SERIALIZED_CTL          = 6
590	CERT_QUERY_CONTENT_SERIALIZED_CRL          = 7
591	CERT_QUERY_CONTENT_PKCS7_SIGNED            = 8
592	CERT_QUERY_CONTENT_PKCS7_UNSIGNED          = 9
593	CERT_QUERY_CONTENT_PKCS7_SIGNED_EMBED      = 10
594	CERT_QUERY_CONTENT_PKCS10                  = 11
595	CERT_QUERY_CONTENT_PFX                     = 12
596	CERT_QUERY_CONTENT_CERT_PAIR               = 13
597	CERT_QUERY_CONTENT_PFX_AND_LOAD            = 14
598	CERT_QUERY_CONTENT_FLAG_CERT               = (1 << CERT_QUERY_CONTENT_CERT)
599	CERT_QUERY_CONTENT_FLAG_CTL                = (1 << CERT_QUERY_CONTENT_CTL)
600	CERT_QUERY_CONTENT_FLAG_CRL                = (1 << CERT_QUERY_CONTENT_CRL)
601	CERT_QUERY_CONTENT_FLAG_SERIALIZED_STORE   = (1 << CERT_QUERY_CONTENT_SERIALIZED_STORE)
602	CERT_QUERY_CONTENT_FLAG_SERIALIZED_CERT    = (1 << CERT_QUERY_CONTENT_SERIALIZED_CERT)
603	CERT_QUERY_CONTENT_FLAG_SERIALIZED_CTL     = (1 << CERT_QUERY_CONTENT_SERIALIZED_CTL)
604	CERT_QUERY_CONTENT_FLAG_SERIALIZED_CRL     = (1 << CERT_QUERY_CONTENT_SERIALIZED_CRL)
605	CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED       = (1 << CERT_QUERY_CONTENT_PKCS7_SIGNED)
606	CERT_QUERY_CONTENT_FLAG_PKCS7_UNSIGNED     = (1 << CERT_QUERY_CONTENT_PKCS7_UNSIGNED)
607	CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED = (1 << CERT_QUERY_CONTENT_PKCS7_SIGNED_EMBED)
608	CERT_QUERY_CONTENT_FLAG_PKCS10             = (1 << CERT_QUERY_CONTENT_PKCS10)
609	CERT_QUERY_CONTENT_FLAG_PFX                = (1 << CERT_QUERY_CONTENT_PFX)
610	CERT_QUERY_CONTENT_FLAG_CERT_PAIR          = (1 << CERT_QUERY_CONTENT_CERT_PAIR)
611	CERT_QUERY_CONTENT_FLAG_PFX_AND_LOAD       = (1 << CERT_QUERY_CONTENT_PFX_AND_LOAD)
612	CERT_QUERY_CONTENT_FLAG_ALL                = (CERT_QUERY_CONTENT_FLAG_CERT | CERT_QUERY_CONTENT_FLAG_CTL | CERT_QUERY_CONTENT_FLAG_CRL | CERT_QUERY_CONTENT_FLAG_SERIALIZED_STORE | CERT_QUERY_CONTENT_FLAG_SERIALIZED_CERT | CERT_QUERY_CONTENT_FLAG_SERIALIZED_CTL | CERT_QUERY_CONTENT_FLAG_SERIALIZED_CRL | CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED | CERT_QUERY_CONTENT_FLAG_PKCS7_UNSIGNED | CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED | CERT_QUERY_CONTENT_FLAG_PKCS10 | CERT_QUERY_CONTENT_FLAG_PFX | CERT_QUERY_CONTENT_FLAG_CERT_PAIR)
613	CERT_QUERY_CONTENT_FLAG_ALL_ISSUER_CERT    = (CERT_QUERY_CONTENT_FLAG_CERT | CERT_QUERY_CONTENT_FLAG_SERIALIZED_STORE | CERT_QUERY_CONTENT_FLAG_SERIALIZED_CERT | CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED | CERT_QUERY_CONTENT_FLAG_PKCS7_UNSIGNED)
614
615	/* CryptQueryObject format type flags */
616	CERT_QUERY_FORMAT_BINARY                     = 1
617	CERT_QUERY_FORMAT_BASE64_ENCODED             = 2
618	CERT_QUERY_FORMAT_ASN_ASCII_HEX_ENCODED      = 3
619	CERT_QUERY_FORMAT_FLAG_BINARY                = (1 << CERT_QUERY_FORMAT_BINARY)
620	CERT_QUERY_FORMAT_FLAG_BASE64_ENCODED        = (1 << CERT_QUERY_FORMAT_BASE64_ENCODED)
621	CERT_QUERY_FORMAT_FLAG_ASN_ASCII_HEX_ENCODED = (1 << CERT_QUERY_FORMAT_ASN_ASCII_HEX_ENCODED)
622	CERT_QUERY_FORMAT_FLAG_ALL                   = (CERT_QUERY_FORMAT_FLAG_BINARY | CERT_QUERY_FORMAT_FLAG_BASE64_ENCODED | CERT_QUERY_FORMAT_FLAG_ASN_ASCII_HEX_ENCODED)
623
624	/* CertGetNameString name types */
625	CERT_NAME_EMAIL_TYPE            = 1
626	CERT_NAME_RDN_TYPE              = 2
627	CERT_NAME_ATTR_TYPE             = 3
628	CERT_NAME_SIMPLE_DISPLAY_TYPE   = 4
629	CERT_NAME_FRIENDLY_DISPLAY_TYPE = 5
630	CERT_NAME_DNS_TYPE              = 6
631	CERT_NAME_URL_TYPE              = 7
632	CERT_NAME_UPN_TYPE              = 8
633
634	/* CertGetNameString flags */
635	CERT_NAME_ISSUER_FLAG              = 0x1
636	CERT_NAME_DISABLE_IE4_UTF8_FLAG    = 0x10000
637	CERT_NAME_SEARCH_ALL_NAMES_FLAG    = 0x2
638	CERT_NAME_STR_ENABLE_PUNYCODE_FLAG = 0x00200000
639
640	/* AuthType values for SSLExtraCertChainPolicyPara struct */
641	AUTHTYPE_CLIENT = 1
642	AUTHTYPE_SERVER = 2
643
644	/* Checks values for SSLExtraCertChainPolicyPara struct */
645	SECURITY_FLAG_IGNORE_REVOCATION        = 0x00000080
646	SECURITY_FLAG_IGNORE_UNKNOWN_CA        = 0x00000100
647	SECURITY_FLAG_IGNORE_WRONG_USAGE       = 0x00000200
648	SECURITY_FLAG_IGNORE_CERT_CN_INVALID   = 0x00001000
649	SECURITY_FLAG_IGNORE_CERT_DATE_INVALID = 0x00002000
650
651	/* Flags for Crypt[Un]ProtectData */
652	CRYPTPROTECT_UI_FORBIDDEN      = 0x1
653	CRYPTPROTECT_LOCAL_MACHINE     = 0x4
654	CRYPTPROTECT_CRED_SYNC         = 0x8
655	CRYPTPROTECT_AUDIT             = 0x10
656	CRYPTPROTECT_NO_RECOVERY       = 0x20
657	CRYPTPROTECT_VERIFY_PROTECTION = 0x40
658	CRYPTPROTECT_CRED_REGENERATE   = 0x80
659
660	/* Flags for CryptProtectPromptStruct */
661	CRYPTPROTECT_PROMPT_ON_UNPROTECT   = 1
662	CRYPTPROTECT_PROMPT_ON_PROTECT     = 2
663	CRYPTPROTECT_PROMPT_RESERVED       = 4
664	CRYPTPROTECT_PROMPT_STRONG         = 8
665	CRYPTPROTECT_PROMPT_REQUIRE_STRONG = 16
666)
667
668const (
669	// flags for SetErrorMode
670	SEM_FAILCRITICALERRORS     = 0x0001
671	SEM_NOALIGNMENTFAULTEXCEPT = 0x0004
672	SEM_NOGPFAULTERRORBOX      = 0x0002
673	SEM_NOOPENFILEERRORBOX     = 0x8000
674)
675
676const (
677	// Priority class.
678	ABOVE_NORMAL_PRIORITY_CLASS   = 0x00008000
679	BELOW_NORMAL_PRIORITY_CLASS   = 0x00004000
680	HIGH_PRIORITY_CLASS           = 0x00000080
681	IDLE_PRIORITY_CLASS           = 0x00000040
682	NORMAL_PRIORITY_CLASS         = 0x00000020
683	PROCESS_MODE_BACKGROUND_BEGIN = 0x00100000
684	PROCESS_MODE_BACKGROUND_END   = 0x00200000
685	REALTIME_PRIORITY_CLASS       = 0x00000100
686)
687
688/* wintrust.h constants for WinVerifyTrustEx */
689const (
690	WTD_UI_ALL    = 1
691	WTD_UI_NONE   = 2
692	WTD_UI_NOBAD  = 3
693	WTD_UI_NOGOOD = 4
694
695	WTD_REVOKE_NONE       = 0
696	WTD_REVOKE_WHOLECHAIN = 1
697
698	WTD_CHOICE_FILE    = 1
699	WTD_CHOICE_CATALOG = 2
700	WTD_CHOICE_BLOB    = 3
701	WTD_CHOICE_SIGNER  = 4
702	WTD_CHOICE_CERT    = 5
703
704	WTD_STATEACTION_IGNORE           = 0x00000000
705	WTD_STATEACTION_VERIFY           = 0x00000001
706	WTD_STATEACTION_CLOSE            = 0x00000002
707	WTD_STATEACTION_AUTO_CACHE       = 0x00000003
708	WTD_STATEACTION_AUTO_CACHE_FLUSH = 0x00000004
709
710	WTD_USE_IE4_TRUST_FLAG                  = 0x1
711	WTD_NO_IE4_CHAIN_FLAG                   = 0x2
712	WTD_NO_POLICY_USAGE_FLAG                = 0x4
713	WTD_REVOCATION_CHECK_NONE               = 0x10
714	WTD_REVOCATION_CHECK_END_CERT           = 0x20
715	WTD_REVOCATION_CHECK_CHAIN              = 0x40
716	WTD_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT = 0x80
717	WTD_SAFER_FLAG                          = 0x100
718	WTD_HASH_ONLY_FLAG                      = 0x200
719	WTD_USE_DEFAULT_OSVER_CHECK             = 0x400
720	WTD_LIFETIME_SIGNING_FLAG               = 0x800
721	WTD_CACHE_ONLY_URL_RETRIEVAL            = 0x1000
722	WTD_DISABLE_MD2_MD4                     = 0x2000
723	WTD_MOTW                                = 0x4000
724
725	WTD_UICONTEXT_EXECUTE = 0
726	WTD_UICONTEXT_INSTALL = 1
727)
728
729var (
730	OID_PKIX_KP_SERVER_AUTH = []byte("1.3.6.1.5.5.7.3.1\x00")
731	OID_SERVER_GATED_CRYPTO = []byte("1.3.6.1.4.1.311.10.3.3\x00")
732	OID_SGC_NETSCAPE        = []byte("2.16.840.1.113730.4.1\x00")
733
734	WINTRUST_ACTION_GENERIC_VERIFY_V2 = GUID{
735		Data1: 0xaac56b,
736		Data2: 0xcd44,
737		Data3: 0x11d0,
738		Data4: [8]byte{0x8c, 0xc2, 0x0, 0xc0, 0x4f, 0xc2, 0x95, 0xee},
739	}
740)
741
742// Pointer represents a pointer to an arbitrary Windows type.
743//
744// Pointer-typed fields may point to one of many different types. It's
745// up to the caller to provide a pointer to the appropriate type, cast
746// to Pointer. The caller must obey the unsafe.Pointer rules while
747// doing so.
748type Pointer *struct{}
749
750// Invented values to support what package os expects.
751type Timeval struct {
752	Sec  int32
753	Usec int32
754}
755
756func (tv *Timeval) Nanoseconds() int64 {
757	return (int64(tv.Sec)*1e6 + int64(tv.Usec)) * 1e3
758}
759
760func NsecToTimeval(nsec int64) (tv Timeval) {
761	tv.Sec = int32(nsec / 1e9)
762	tv.Usec = int32(nsec % 1e9 / 1e3)
763	return
764}
765
766type Overlapped struct {
767	Internal     uintptr
768	InternalHigh uintptr
769	Offset       uint32
770	OffsetHigh   uint32
771	HEvent       Handle
772}
773
774type FileNotifyInformation struct {
775	NextEntryOffset uint32
776	Action          uint32
777	FileNameLength  uint32
778	FileName        uint16
779}
780
781type Filetime struct {
782	LowDateTime  uint32
783	HighDateTime uint32
784}
785
786// Nanoseconds returns Filetime ft in nanoseconds
787// since Epoch (00:00:00 UTC, January 1, 1970).
788func (ft *Filetime) Nanoseconds() int64 {
789	// 100-nanosecond intervals since January 1, 1601
790	nsec := int64(ft.HighDateTime)<<32 + int64(ft.LowDateTime)
791	// change starting time to the Epoch (00:00:00 UTC, January 1, 1970)
792	nsec -= 116444736000000000
793	// convert into nanoseconds
794	nsec *= 100
795	return nsec
796}
797
798func NsecToFiletime(nsec int64) (ft Filetime) {
799	// convert into 100-nanosecond
800	nsec /= 100
801	// change starting time to January 1, 1601
802	nsec += 116444736000000000
803	// split into high / low
804	ft.LowDateTime = uint32(nsec & 0xffffffff)
805	ft.HighDateTime = uint32(nsec >> 32 & 0xffffffff)
806	return ft
807}
808
809type Win32finddata struct {
810	FileAttributes    uint32
811	CreationTime      Filetime
812	LastAccessTime    Filetime
813	LastWriteTime     Filetime
814	FileSizeHigh      uint32
815	FileSizeLow       uint32
816	Reserved0         uint32
817	Reserved1         uint32
818	FileName          [MAX_PATH - 1]uint16
819	AlternateFileName [13]uint16
820}
821
822// This is the actual system call structure.
823// Win32finddata is what we committed to in Go 1.
824type win32finddata1 struct {
825	FileAttributes    uint32
826	CreationTime      Filetime
827	LastAccessTime    Filetime
828	LastWriteTime     Filetime
829	FileSizeHigh      uint32
830	FileSizeLow       uint32
831	Reserved0         uint32
832	Reserved1         uint32
833	FileName          [MAX_PATH]uint16
834	AlternateFileName [14]uint16
835
836	// The Microsoft documentation for this struct¹ describes three additional
837	// fields: dwFileType, dwCreatorType, and wFinderFlags. However, those fields
838	// are empirically only present in the macOS port of the Win32 API,² and thus
839	// not needed for binaries built for Windows.
840	//
841	// ¹ https://docs.microsoft.com/en-us/windows/win32/api/minwinbase/ns-minwinbase-win32_find_dataw describe
842	// ² https://golang.org/issue/42637#issuecomment-760715755.
843}
844
845func copyFindData(dst *Win32finddata, src *win32finddata1) {
846	dst.FileAttributes = src.FileAttributes
847	dst.CreationTime = src.CreationTime
848	dst.LastAccessTime = src.LastAccessTime
849	dst.LastWriteTime = src.LastWriteTime
850	dst.FileSizeHigh = src.FileSizeHigh
851	dst.FileSizeLow = src.FileSizeLow
852	dst.Reserved0 = src.Reserved0
853	dst.Reserved1 = src.Reserved1
854
855	// The src is 1 element bigger than dst, but it must be NUL.
856	copy(dst.FileName[:], src.FileName[:])
857	copy(dst.AlternateFileName[:], src.AlternateFileName[:])
858}
859
860type ByHandleFileInformation struct {
861	FileAttributes     uint32
862	CreationTime       Filetime
863	LastAccessTime     Filetime
864	LastWriteTime      Filetime
865	VolumeSerialNumber uint32
866	FileSizeHigh       uint32
867	FileSizeLow        uint32
868	NumberOfLinks      uint32
869	FileIndexHigh      uint32
870	FileIndexLow       uint32
871}
872
873const (
874	GetFileExInfoStandard = 0
875	GetFileExMaxInfoLevel = 1
876)
877
878type Win32FileAttributeData struct {
879	FileAttributes uint32
880	CreationTime   Filetime
881	LastAccessTime Filetime
882	LastWriteTime  Filetime
883	FileSizeHigh   uint32
884	FileSizeLow    uint32
885}
886
887// ShowWindow constants
888const (
889	// winuser.h
890	SW_HIDE            = 0
891	SW_NORMAL          = 1
892	SW_SHOWNORMAL      = 1
893	SW_SHOWMINIMIZED   = 2
894	SW_SHOWMAXIMIZED   = 3
895	SW_MAXIMIZE        = 3
896	SW_SHOWNOACTIVATE  = 4
897	SW_SHOW            = 5
898	SW_MINIMIZE        = 6
899	SW_SHOWMINNOACTIVE = 7
900	SW_SHOWNA          = 8
901	SW_RESTORE         = 9
902	SW_SHOWDEFAULT     = 10
903	SW_FORCEMINIMIZE   = 11
904)
905
906type StartupInfo struct {
907	Cb            uint32
908	_             *uint16
909	Desktop       *uint16
910	Title         *uint16
911	X             uint32
912	Y             uint32
913	XSize         uint32
914	YSize         uint32
915	XCountChars   uint32
916	YCountChars   uint32
917	FillAttribute uint32
918	Flags         uint32
919	ShowWindow    uint16
920	_             uint16
921	_             *byte
922	StdInput      Handle
923	StdOutput     Handle
924	StdErr        Handle
925}
926
927type StartupInfoEx struct {
928	StartupInfo
929	ProcThreadAttributeList *ProcThreadAttributeList
930}
931
932// ProcThreadAttributeList is a placeholder type to represent a PROC_THREAD_ATTRIBUTE_LIST.
933//
934// To create a *ProcThreadAttributeList, use NewProcThreadAttributeList, update
935// it with ProcThreadAttributeListContainer.Update, free its memory using
936// ProcThreadAttributeListContainer.Delete, and access the list itself using
937// ProcThreadAttributeListContainer.List.
938type ProcThreadAttributeList struct{}
939
940type ProcThreadAttributeListContainer struct {
941	data            *ProcThreadAttributeList
942	heapAllocations []uintptr
943}
944
945type ProcessInformation struct {
946	Process   Handle
947	Thread    Handle
948	ProcessId uint32
949	ThreadId  uint32
950}
951
952type ProcessEntry32 struct {
953	Size            uint32
954	Usage           uint32
955	ProcessID       uint32
956	DefaultHeapID   uintptr
957	ModuleID        uint32
958	Threads         uint32
959	ParentProcessID uint32
960	PriClassBase    int32
961	Flags           uint32
962	ExeFile         [MAX_PATH]uint16
963}
964
965type ThreadEntry32 struct {
966	Size           uint32
967	Usage          uint32
968	ThreadID       uint32
969	OwnerProcessID uint32
970	BasePri        int32
971	DeltaPri       int32
972	Flags          uint32
973}
974
975type ModuleEntry32 struct {
976	Size         uint32
977	ModuleID     uint32
978	ProcessID    uint32
979	GlblcntUsage uint32
980	ProccntUsage uint32
981	ModBaseAddr  uintptr
982	ModBaseSize  uint32
983	ModuleHandle Handle
984	Module       [MAX_MODULE_NAME32 + 1]uint16
985	ExePath      [MAX_PATH]uint16
986}
987
988const SizeofModuleEntry32 = unsafe.Sizeof(ModuleEntry32{})
989
990type Systemtime struct {
991	Year         uint16
992	Month        uint16
993	DayOfWeek    uint16
994	Day          uint16
995	Hour         uint16
996	Minute       uint16
997	Second       uint16
998	Milliseconds uint16
999}
1000
1001type Timezoneinformation struct {
1002	Bias         int32
1003	StandardName [32]uint16
1004	StandardDate Systemtime
1005	StandardBias int32
1006	DaylightName [32]uint16
1007	DaylightDate Systemtime
1008	DaylightBias int32
1009}
1010
1011// Socket related.
1012
1013const (
1014	AF_UNSPEC  = 0
1015	AF_UNIX    = 1
1016	AF_INET    = 2
1017	AF_NETBIOS = 17
1018	AF_INET6   = 23
1019	AF_IRDA    = 26
1020	AF_BTH     = 32
1021
1022	SOCK_STREAM    = 1
1023	SOCK_DGRAM     = 2
1024	SOCK_RAW       = 3
1025	SOCK_RDM       = 4
1026	SOCK_SEQPACKET = 5
1027
1028	IPPROTO_IP      = 0
1029	IPPROTO_ICMP    = 1
1030	IPPROTO_IGMP    = 2
1031	BTHPROTO_RFCOMM = 3
1032	IPPROTO_TCP     = 6
1033	IPPROTO_UDP     = 17
1034	IPPROTO_IPV6    = 41
1035	IPPROTO_ICMPV6  = 58
1036	IPPROTO_RM      = 113
1037
1038	SOL_SOCKET                = 0xffff
1039	SO_REUSEADDR              = 4
1040	SO_KEEPALIVE              = 8
1041	SO_DONTROUTE              = 16
1042	SO_BROADCAST              = 32
1043	SO_LINGER                 = 128
1044	SO_RCVBUF                 = 0x1002
1045	SO_RCVTIMEO               = 0x1006
1046	SO_SNDBUF                 = 0x1001
1047	SO_UPDATE_ACCEPT_CONTEXT  = 0x700b
1048	SO_UPDATE_CONNECT_CONTEXT = 0x7010
1049
1050	IOC_OUT                            = 0x40000000
1051	IOC_IN                             = 0x80000000
1052	IOC_VENDOR                         = 0x18000000
1053	IOC_INOUT                          = IOC_IN | IOC_OUT
1054	IOC_WS2                            = 0x08000000
1055	SIO_GET_EXTENSION_FUNCTION_POINTER = IOC_INOUT | IOC_WS2 | 6
1056	SIO_KEEPALIVE_VALS                 = IOC_IN | IOC_VENDOR | 4
1057	SIO_UDP_CONNRESET                  = IOC_IN | IOC_VENDOR | 12
1058
1059	// cf. http://support.microsoft.com/default.aspx?scid=kb;en-us;257460
1060
1061	IP_HDRINCL         = 0x2
1062	IP_TOS             = 0x3
1063	IP_TTL             = 0x4
1064	IP_MULTICAST_IF    = 0x9
1065	IP_MULTICAST_TTL   = 0xa
1066	IP_MULTICAST_LOOP  = 0xb
1067	IP_ADD_MEMBERSHIP  = 0xc
1068	IP_DROP_MEMBERSHIP = 0xd
1069	IP_PKTINFO         = 0x13
1070
1071	IPV6_V6ONLY         = 0x1b
1072	IPV6_UNICAST_HOPS   = 0x4
1073	IPV6_MULTICAST_IF   = 0x9
1074	IPV6_MULTICAST_HOPS = 0xa
1075	IPV6_MULTICAST_LOOP = 0xb
1076	IPV6_JOIN_GROUP     = 0xc
1077	IPV6_LEAVE_GROUP    = 0xd
1078	IPV6_PKTINFO        = 0x13
1079
1080	MSG_OOB       = 0x1
1081	MSG_PEEK      = 0x2
1082	MSG_DONTROUTE = 0x4
1083	MSG_WAITALL   = 0x8
1084
1085	MSG_TRUNC  = 0x0100
1086	MSG_CTRUNC = 0x0200
1087	MSG_BCAST  = 0x0400
1088	MSG_MCAST  = 0x0800
1089
1090	SOMAXCONN = 0x7fffffff
1091
1092	TCP_NODELAY = 1
1093
1094	SHUT_RD   = 0
1095	SHUT_WR   = 1
1096	SHUT_RDWR = 2
1097
1098	WSADESCRIPTION_LEN = 256
1099	WSASYS_STATUS_LEN  = 128
1100)
1101
1102type WSABuf struct {
1103	Len uint32
1104	Buf *byte
1105}
1106
1107type WSAMsg struct {
1108	Name        *syscall.RawSockaddrAny
1109	Namelen     int32
1110	Buffers     *WSABuf
1111	BufferCount uint32
1112	Control     WSABuf
1113	Flags       uint32
1114}
1115
1116// Flags for WSASocket
1117const (
1118	WSA_FLAG_OVERLAPPED             = 0x01
1119	WSA_FLAG_MULTIPOINT_C_ROOT      = 0x02
1120	WSA_FLAG_MULTIPOINT_C_LEAF      = 0x04
1121	WSA_FLAG_MULTIPOINT_D_ROOT      = 0x08
1122	WSA_FLAG_MULTIPOINT_D_LEAF      = 0x10
1123	WSA_FLAG_ACCESS_SYSTEM_SECURITY = 0x40
1124	WSA_FLAG_NO_HANDLE_INHERIT      = 0x80
1125	WSA_FLAG_REGISTERED_IO          = 0x100
1126)
1127
1128// Invented values to support what package os expects.
1129const (
1130	S_IFMT   = 0x1f000
1131	S_IFIFO  = 0x1000
1132	S_IFCHR  = 0x2000
1133	S_IFDIR  = 0x4000
1134	S_IFBLK  = 0x6000
1135	S_IFREG  = 0x8000
1136	S_IFLNK  = 0xa000
1137	S_IFSOCK = 0xc000
1138	S_ISUID  = 0x800
1139	S_ISGID  = 0x400
1140	S_ISVTX  = 0x200
1141	S_IRUSR  = 0x100
1142	S_IWRITE = 0x80
1143	S_IWUSR  = 0x80
1144	S_IXUSR  = 0x40
1145)
1146
1147const (
1148	FILE_TYPE_CHAR    = 0x0002
1149	FILE_TYPE_DISK    = 0x0001
1150	FILE_TYPE_PIPE    = 0x0003
1151	FILE_TYPE_REMOTE  = 0x8000
1152	FILE_TYPE_UNKNOWN = 0x0000
1153)
1154
1155type Hostent struct {
1156	Name     *byte
1157	Aliases  **byte
1158	AddrType uint16
1159	Length   uint16
1160	AddrList **byte
1161}
1162
1163type Protoent struct {
1164	Name    *byte
1165	Aliases **byte
1166	Proto   uint16
1167}
1168
1169const (
1170	DNS_TYPE_A       = 0x0001
1171	DNS_TYPE_NS      = 0x0002
1172	DNS_TYPE_MD      = 0x0003
1173	DNS_TYPE_MF      = 0x0004
1174	DNS_TYPE_CNAME   = 0x0005
1175	DNS_TYPE_SOA     = 0x0006
1176	DNS_TYPE_MB      = 0x0007
1177	DNS_TYPE_MG      = 0x0008
1178	DNS_TYPE_MR      = 0x0009
1179	DNS_TYPE_NULL    = 0x000a
1180	DNS_TYPE_WKS     = 0x000b
1181	DNS_TYPE_PTR     = 0x000c
1182	DNS_TYPE_HINFO   = 0x000d
1183	DNS_TYPE_MINFO   = 0x000e
1184	DNS_TYPE_MX      = 0x000f
1185	DNS_TYPE_TEXT    = 0x0010
1186	DNS_TYPE_RP      = 0x0011
1187	DNS_TYPE_AFSDB   = 0x0012
1188	DNS_TYPE_X25     = 0x0013
1189	DNS_TYPE_ISDN    = 0x0014
1190	DNS_TYPE_RT      = 0x0015
1191	DNS_TYPE_NSAP    = 0x0016
1192	DNS_TYPE_NSAPPTR = 0x0017
1193	DNS_TYPE_SIG     = 0x0018
1194	DNS_TYPE_KEY     = 0x0019
1195	DNS_TYPE_PX      = 0x001a
1196	DNS_TYPE_GPOS    = 0x001b
1197	DNS_TYPE_AAAA    = 0x001c
1198	DNS_TYPE_LOC     = 0x001d
1199	DNS_TYPE_NXT     = 0x001e
1200	DNS_TYPE_EID     = 0x001f
1201	DNS_TYPE_NIMLOC  = 0x0020
1202	DNS_TYPE_SRV     = 0x0021
1203	DNS_TYPE_ATMA    = 0x0022
1204	DNS_TYPE_NAPTR   = 0x0023
1205	DNS_TYPE_KX      = 0x0024
1206	DNS_TYPE_CERT    = 0x0025
1207	DNS_TYPE_A6      = 0x0026
1208	DNS_TYPE_DNAME   = 0x0027
1209	DNS_TYPE_SINK    = 0x0028
1210	DNS_TYPE_OPT     = 0x0029
1211	DNS_TYPE_DS      = 0x002B
1212	DNS_TYPE_RRSIG   = 0x002E
1213	DNS_TYPE_NSEC    = 0x002F
1214	DNS_TYPE_DNSKEY  = 0x0030
1215	DNS_TYPE_DHCID   = 0x0031
1216	DNS_TYPE_UINFO   = 0x0064
1217	DNS_TYPE_UID     = 0x0065
1218	DNS_TYPE_GID     = 0x0066
1219	DNS_TYPE_UNSPEC  = 0x0067
1220	DNS_TYPE_ADDRS   = 0x00f8
1221	DNS_TYPE_TKEY    = 0x00f9
1222	DNS_TYPE_TSIG    = 0x00fa
1223	DNS_TYPE_IXFR    = 0x00fb
1224	DNS_TYPE_AXFR    = 0x00fc
1225	DNS_TYPE_MAILB   = 0x00fd
1226	DNS_TYPE_MAILA   = 0x00fe
1227	DNS_TYPE_ALL     = 0x00ff
1228	DNS_TYPE_ANY     = 0x00ff
1229	DNS_TYPE_WINS    = 0xff01
1230	DNS_TYPE_WINSR   = 0xff02
1231	DNS_TYPE_NBSTAT  = 0xff01
1232)
1233
1234const (
1235	// flags inside DNSRecord.Dw
1236	DnsSectionQuestion   = 0x0000
1237	DnsSectionAnswer     = 0x0001
1238	DnsSectionAuthority  = 0x0002
1239	DnsSectionAdditional = 0x0003
1240)
1241
1242type DNSSRVData struct {
1243	Target   *uint16
1244	Priority uint16
1245	Weight   uint16
1246	Port     uint16
1247	Pad      uint16
1248}
1249
1250type DNSPTRData struct {
1251	Host *uint16
1252}
1253
1254type DNSMXData struct {
1255	NameExchange *uint16
1256	Preference   uint16
1257	Pad          uint16
1258}
1259
1260type DNSTXTData struct {
1261	StringCount uint16
1262	StringArray [1]*uint16
1263}
1264
1265type DNSRecord struct {
1266	Next     *DNSRecord
1267	Name     *uint16
1268	Type     uint16
1269	Length   uint16
1270	Dw       uint32
1271	Ttl      uint32
1272	Reserved uint32
1273	Data     [40]byte
1274}
1275
1276const (
1277	TF_DISCONNECT         = 1
1278	TF_REUSE_SOCKET       = 2
1279	TF_WRITE_BEHIND       = 4
1280	TF_USE_DEFAULT_WORKER = 0
1281	TF_USE_SYSTEM_THREAD  = 16
1282	TF_USE_KERNEL_APC     = 32
1283)
1284
1285type TransmitFileBuffers struct {
1286	Head       uintptr
1287	HeadLength uint32
1288	Tail       uintptr
1289	TailLength uint32
1290}
1291
1292const (
1293	IFF_UP           = 1
1294	IFF_BROADCAST    = 2
1295	IFF_LOOPBACK     = 4
1296	IFF_POINTTOPOINT = 8
1297	IFF_MULTICAST    = 16
1298)
1299
1300const SIO_GET_INTERFACE_LIST = 0x4004747F
1301
1302// TODO(mattn): SockaddrGen is union of sockaddr/sockaddr_in/sockaddr_in6_old.
1303// will be fixed to change variable type as suitable.
1304
1305type SockaddrGen [24]byte
1306
1307type InterfaceInfo struct {
1308	Flags            uint32
1309	Address          SockaddrGen
1310	BroadcastAddress SockaddrGen
1311	Netmask          SockaddrGen
1312}
1313
1314type IpAddressString struct {
1315	String [16]byte
1316}
1317
1318type IpMaskString IpAddressString
1319
1320type IpAddrString struct {
1321	Next      *IpAddrString
1322	IpAddress IpAddressString
1323	IpMask    IpMaskString
1324	Context   uint32
1325}
1326
1327const MAX_ADAPTER_NAME_LENGTH = 256
1328const MAX_ADAPTER_DESCRIPTION_LENGTH = 128
1329const MAX_ADAPTER_ADDRESS_LENGTH = 8
1330
1331type IpAdapterInfo struct {
1332	Next                *IpAdapterInfo
1333	ComboIndex          uint32
1334	AdapterName         [MAX_ADAPTER_NAME_LENGTH + 4]byte
1335	Description         [MAX_ADAPTER_DESCRIPTION_LENGTH + 4]byte
1336	AddressLength       uint32
1337	Address             [MAX_ADAPTER_ADDRESS_LENGTH]byte
1338	Index               uint32
1339	Type                uint32
1340	DhcpEnabled         uint32
1341	CurrentIpAddress    *IpAddrString
1342	IpAddressList       IpAddrString
1343	GatewayList         IpAddrString
1344	DhcpServer          IpAddrString
1345	HaveWins            bool
1346	PrimaryWinsServer   IpAddrString
1347	SecondaryWinsServer IpAddrString
1348	LeaseObtained       int64
1349	LeaseExpires        int64
1350}
1351
1352const MAXLEN_PHYSADDR = 8
1353const MAX_INTERFACE_NAME_LEN = 256
1354const MAXLEN_IFDESCR = 256
1355
1356type MibIfRow struct {
1357	Name            [MAX_INTERFACE_NAME_LEN]uint16
1358	Index           uint32
1359	Type            uint32
1360	Mtu             uint32
1361	Speed           uint32
1362	PhysAddrLen     uint32
1363	PhysAddr        [MAXLEN_PHYSADDR]byte
1364	AdminStatus     uint32
1365	OperStatus      uint32
1366	LastChange      uint32
1367	InOctets        uint32
1368	InUcastPkts     uint32
1369	InNUcastPkts    uint32
1370	InDiscards      uint32
1371	InErrors        uint32
1372	InUnknownProtos uint32
1373	OutOctets       uint32
1374	OutUcastPkts    uint32
1375	OutNUcastPkts   uint32
1376	OutDiscards     uint32
1377	OutErrors       uint32
1378	OutQLen         uint32
1379	DescrLen        uint32
1380	Descr           [MAXLEN_IFDESCR]byte
1381}
1382
1383type CertInfo struct {
1384	Version              uint32
1385	SerialNumber         CryptIntegerBlob
1386	SignatureAlgorithm   CryptAlgorithmIdentifier
1387	Issuer               CertNameBlob
1388	NotBefore            Filetime
1389	NotAfter             Filetime
1390	Subject              CertNameBlob
1391	SubjectPublicKeyInfo CertPublicKeyInfo
1392	IssuerUniqueId       CryptBitBlob
1393	SubjectUniqueId      CryptBitBlob
1394	CountExtensions      uint32
1395	Extensions           *CertExtension
1396}
1397
1398type CertExtension struct {
1399	ObjId    *byte
1400	Critical int32
1401	Value    CryptObjidBlob
1402}
1403
1404type CryptAlgorithmIdentifier struct {
1405	ObjId      *byte
1406	Parameters CryptObjidBlob
1407}
1408
1409type CertPublicKeyInfo struct {
1410	Algorithm CryptAlgorithmIdentifier
1411	PublicKey CryptBitBlob
1412}
1413
1414type DataBlob struct {
1415	Size uint32
1416	Data *byte
1417}
1418type CryptIntegerBlob DataBlob
1419type CryptUintBlob DataBlob
1420type CryptObjidBlob DataBlob
1421type CertNameBlob DataBlob
1422type CertRdnValueBlob DataBlob
1423type CertBlob DataBlob
1424type CrlBlob DataBlob
1425type CryptDataBlob DataBlob
1426type CryptHashBlob DataBlob
1427type CryptDigestBlob DataBlob
1428type CryptDerBlob DataBlob
1429type CryptAttrBlob DataBlob
1430
1431type CryptBitBlob struct {
1432	Size       uint32
1433	Data       *byte
1434	UnusedBits uint32
1435}
1436
1437type CertContext struct {
1438	EncodingType uint32
1439	EncodedCert  *byte
1440	Length       uint32
1441	CertInfo     *CertInfo
1442	Store        Handle
1443}
1444
1445type CertChainContext struct {
1446	Size                       uint32
1447	TrustStatus                CertTrustStatus
1448	ChainCount                 uint32
1449	Chains                     **CertSimpleChain
1450	LowerQualityChainCount     uint32
1451	LowerQualityChains         **CertChainContext
1452	HasRevocationFreshnessTime uint32
1453	RevocationFreshnessTime    uint32
1454}
1455
1456type CertTrustListInfo struct {
1457	// Not implemented
1458}
1459
1460type CertSimpleChain struct {
1461	Size                       uint32
1462	TrustStatus                CertTrustStatus
1463	NumElements                uint32
1464	Elements                   **CertChainElement
1465	TrustListInfo              *CertTrustListInfo
1466	HasRevocationFreshnessTime uint32
1467	RevocationFreshnessTime    uint32
1468}
1469
1470type CertChainElement struct {
1471	Size              uint32
1472	CertContext       *CertContext
1473	TrustStatus       CertTrustStatus
1474	RevocationInfo    *CertRevocationInfo
1475	IssuanceUsage     *CertEnhKeyUsage
1476	ApplicationUsage  *CertEnhKeyUsage
1477	ExtendedErrorInfo *uint16
1478}
1479
1480type CertRevocationCrlInfo struct {
1481	// Not implemented
1482}
1483
1484type CertRevocationInfo struct {
1485	Size             uint32
1486	RevocationResult uint32
1487	RevocationOid    *byte
1488	OidSpecificInfo  Pointer
1489	HasFreshnessTime uint32
1490	FreshnessTime    uint32
1491	CrlInfo          *CertRevocationCrlInfo
1492}
1493
1494type CertTrustStatus struct {
1495	ErrorStatus uint32
1496	InfoStatus  uint32
1497}
1498
1499type CertUsageMatch struct {
1500	Type  uint32
1501	Usage CertEnhKeyUsage
1502}
1503
1504type CertEnhKeyUsage struct {
1505	Length           uint32
1506	UsageIdentifiers **byte
1507}
1508
1509type CertChainPara struct {
1510	Size                         uint32
1511	RequestedUsage               CertUsageMatch
1512	RequstedIssuancePolicy       CertUsageMatch
1513	URLRetrievalTimeout          uint32
1514	CheckRevocationFreshnessTime uint32
1515	RevocationFreshnessTime      uint32
1516	CacheResync                  *Filetime
1517}
1518
1519type CertChainPolicyPara struct {
1520	Size            uint32
1521	Flags           uint32
1522	ExtraPolicyPara Pointer
1523}
1524
1525type SSLExtraCertChainPolicyPara struct {
1526	Size       uint32
1527	AuthType   uint32
1528	Checks     uint32
1529	ServerName *uint16
1530}
1531
1532type CertChainPolicyStatus struct {
1533	Size              uint32
1534	Error             uint32
1535	ChainIndex        uint32
1536	ElementIndex      uint32
1537	ExtraPolicyStatus Pointer
1538}
1539
1540type CertPolicyInfo struct {
1541	Identifier      *byte
1542	CountQualifiers uint32
1543	Qualifiers      *CertPolicyQualifierInfo
1544}
1545
1546type CertPoliciesInfo struct {
1547	Count       uint32
1548	PolicyInfos *CertPolicyInfo
1549}
1550
1551type CertPolicyQualifierInfo struct {
1552	// Not implemented
1553}
1554
1555type CertStrongSignPara struct {
1556	Size                      uint32
1557	InfoChoice                uint32
1558	InfoOrSerializedInfoOrOID unsafe.Pointer
1559}
1560
1561type CryptProtectPromptStruct struct {
1562	Size        uint32
1563	PromptFlags uint32
1564	App         HWND
1565	Prompt      *uint16
1566}
1567
1568type CertChainFindByIssuerPara struct {
1569	Size                   uint32
1570	UsageIdentifier        *byte
1571	KeySpec                uint32
1572	AcquirePrivateKeyFlags uint32
1573	IssuerCount            uint32
1574	Issuer                 Pointer
1575	FindCallback           Pointer
1576	FindArg                Pointer
1577	IssuerChainIndex       *uint32
1578	IssuerElementIndex     *uint32
1579}
1580
1581type WinTrustData struct {
1582	Size                            uint32
1583	PolicyCallbackData              uintptr
1584	SIPClientData                   uintptr
1585	UIChoice                        uint32
1586	RevocationChecks                uint32
1587	UnionChoice                     uint32
1588	FileOrCatalogOrBlobOrSgnrOrCert unsafe.Pointer
1589	StateAction                     uint32
1590	StateData                       Handle
1591	URLReference                    *uint16
1592	ProvFlags                       uint32
1593	UIContext                       uint32
1594	SignatureSettings               *WinTrustSignatureSettings
1595}
1596
1597type WinTrustFileInfo struct {
1598	Size         uint32
1599	FilePath     *uint16
1600	File         Handle
1601	KnownSubject *GUID
1602}
1603
1604type WinTrustSignatureSettings struct {
1605	Size             uint32
1606	Index            uint32
1607	Flags            uint32
1608	SecondarySigs    uint32
1609	VerifiedSigIndex uint32
1610	CryptoPolicy     *CertStrongSignPara
1611}
1612
1613const (
1614	// do not reorder
1615	HKEY_CLASSES_ROOT = 0x80000000 + iota
1616	HKEY_CURRENT_USER
1617	HKEY_LOCAL_MACHINE
1618	HKEY_USERS
1619	HKEY_PERFORMANCE_DATA
1620	HKEY_CURRENT_CONFIG
1621	HKEY_DYN_DATA
1622
1623	KEY_QUERY_VALUE        = 1
1624	KEY_SET_VALUE          = 2
1625	KEY_CREATE_SUB_KEY     = 4
1626	KEY_ENUMERATE_SUB_KEYS = 8
1627	KEY_NOTIFY             = 16
1628	KEY_CREATE_LINK        = 32
1629	KEY_WRITE              = 0x20006
1630	KEY_EXECUTE            = 0x20019
1631	KEY_READ               = 0x20019
1632	KEY_WOW64_64KEY        = 0x0100
1633	KEY_WOW64_32KEY        = 0x0200
1634	KEY_ALL_ACCESS         = 0xf003f
1635)
1636
1637const (
1638	// do not reorder
1639	REG_NONE = iota
1640	REG_SZ
1641	REG_EXPAND_SZ
1642	REG_BINARY
1643	REG_DWORD_LITTLE_ENDIAN
1644	REG_DWORD_BIG_ENDIAN
1645	REG_LINK
1646	REG_MULTI_SZ
1647	REG_RESOURCE_LIST
1648	REG_FULL_RESOURCE_DESCRIPTOR
1649	REG_RESOURCE_REQUIREMENTS_LIST
1650	REG_QWORD_LITTLE_ENDIAN
1651	REG_DWORD = REG_DWORD_LITTLE_ENDIAN
1652	REG_QWORD = REG_QWORD_LITTLE_ENDIAN
1653)
1654
1655const (
1656	EVENT_MODIFY_STATE = 0x0002
1657	EVENT_ALL_ACCESS   = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3
1658
1659	MUTANT_QUERY_STATE = 0x0001
1660	MUTANT_ALL_ACCESS  = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | MUTANT_QUERY_STATE
1661
1662	SEMAPHORE_MODIFY_STATE = 0x0002
1663	SEMAPHORE_ALL_ACCESS   = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3
1664
1665	TIMER_QUERY_STATE  = 0x0001
1666	TIMER_MODIFY_STATE = 0x0002
1667	TIMER_ALL_ACCESS   = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | TIMER_QUERY_STATE | TIMER_MODIFY_STATE
1668
1669	MUTEX_MODIFY_STATE = MUTANT_QUERY_STATE
1670	MUTEX_ALL_ACCESS   = MUTANT_ALL_ACCESS
1671
1672	CREATE_EVENT_MANUAL_RESET  = 0x1
1673	CREATE_EVENT_INITIAL_SET   = 0x2
1674	CREATE_MUTEX_INITIAL_OWNER = 0x1
1675)
1676
1677type AddrinfoW struct {
1678	Flags     int32
1679	Family    int32
1680	Socktype  int32
1681	Protocol  int32
1682	Addrlen   uintptr
1683	Canonname *uint16
1684	Addr      uintptr
1685	Next      *AddrinfoW
1686}
1687
1688const (
1689	AI_PASSIVE     = 1
1690	AI_CANONNAME   = 2
1691	AI_NUMERICHOST = 4
1692)
1693
1694type GUID struct {
1695	Data1 uint32
1696	Data2 uint16
1697	Data3 uint16
1698	Data4 [8]byte
1699}
1700
1701var WSAID_CONNECTEX = GUID{
1702	0x25a207b9,
1703	0xddf3,
1704	0x4660,
1705	[8]byte{0x8e, 0xe9, 0x76, 0xe5, 0x8c, 0x74, 0x06, 0x3e},
1706}
1707
1708var WSAID_WSASENDMSG = GUID{
1709	0xa441e712,
1710	0x754f,
1711	0x43ca,
1712	[8]byte{0x84, 0xa7, 0x0d, 0xee, 0x44, 0xcf, 0x60, 0x6d},
1713}
1714
1715var WSAID_WSARECVMSG = GUID{
1716	0xf689d7c8,
1717	0x6f1f,
1718	0x436b,
1719	[8]byte{0x8a, 0x53, 0xe5, 0x4f, 0xe3, 0x51, 0xc3, 0x22},
1720}
1721
1722const (
1723	FILE_SKIP_COMPLETION_PORT_ON_SUCCESS = 1
1724	FILE_SKIP_SET_EVENT_ON_HANDLE        = 2
1725)
1726
1727const (
1728	WSAPROTOCOL_LEN    = 255
1729	MAX_PROTOCOL_CHAIN = 7
1730	BASE_PROTOCOL      = 1
1731	LAYERED_PROTOCOL   = 0
1732
1733	XP1_CONNECTIONLESS           = 0x00000001
1734	XP1_GUARANTEED_DELIVERY      = 0x00000002
1735	XP1_GUARANTEED_ORDER         = 0x00000004
1736	XP1_MESSAGE_ORIENTED         = 0x00000008
1737	XP1_PSEUDO_STREAM            = 0x00000010
1738	XP1_GRACEFUL_CLOSE           = 0x00000020
1739	XP1_EXPEDITED_DATA           = 0x00000040
1740	XP1_CONNECT_DATA             = 0x00000080
1741	XP1_DISCONNECT_DATA          = 0x00000100
1742	XP1_SUPPORT_BROADCAST        = 0x00000200
1743	XP1_SUPPORT_MULTIPOINT       = 0x00000400
1744	XP1_MULTIPOINT_CONTROL_PLANE = 0x00000800
1745	XP1_MULTIPOINT_DATA_PLANE    = 0x00001000
1746	XP1_QOS_SUPPORTED            = 0x00002000
1747	XP1_UNI_SEND                 = 0x00008000
1748	XP1_UNI_RECV                 = 0x00010000
1749	XP1_IFS_HANDLES              = 0x00020000
1750	XP1_PARTIAL_MESSAGE          = 0x00040000
1751	XP1_SAN_SUPPORT_SDP          = 0x00080000
1752
1753	PFL_MULTIPLE_PROTO_ENTRIES  = 0x00000001
1754	PFL_RECOMMENDED_PROTO_ENTRY = 0x00000002
1755	PFL_HIDDEN                  = 0x00000004
1756	PFL_MATCHES_PROTOCOL_ZERO   = 0x00000008
1757	PFL_NETWORKDIRECT_PROVIDER  = 0x00000010
1758)
1759
1760type WSAProtocolInfo struct {
1761	ServiceFlags1     uint32
1762	ServiceFlags2     uint32
1763	ServiceFlags3     uint32
1764	ServiceFlags4     uint32
1765	ProviderFlags     uint32
1766	ProviderId        GUID
1767	CatalogEntryId    uint32
1768	ProtocolChain     WSAProtocolChain
1769	Version           int32
1770	AddressFamily     int32
1771	MaxSockAddr       int32
1772	MinSockAddr       int32
1773	SocketType        int32
1774	Protocol          int32
1775	ProtocolMaxOffset int32
1776	NetworkByteOrder  int32
1777	SecurityScheme    int32
1778	MessageSize       uint32
1779	ProviderReserved  uint32
1780	ProtocolName      [WSAPROTOCOL_LEN + 1]uint16
1781}
1782
1783type WSAProtocolChain struct {
1784	ChainLen     int32
1785	ChainEntries [MAX_PROTOCOL_CHAIN]uint32
1786}
1787
1788type TCPKeepalive struct {
1789	OnOff    uint32
1790	Time     uint32
1791	Interval uint32
1792}
1793
1794type symbolicLinkReparseBuffer struct {
1795	SubstituteNameOffset uint16
1796	SubstituteNameLength uint16
1797	PrintNameOffset      uint16
1798	PrintNameLength      uint16
1799	Flags                uint32
1800	PathBuffer           [1]uint16
1801}
1802
1803type mountPointReparseBuffer struct {
1804	SubstituteNameOffset uint16
1805	SubstituteNameLength uint16
1806	PrintNameOffset      uint16
1807	PrintNameLength      uint16
1808	PathBuffer           [1]uint16
1809}
1810
1811type reparseDataBuffer struct {
1812	ReparseTag        uint32
1813	ReparseDataLength uint16
1814	Reserved          uint16
1815
1816	// GenericReparseBuffer
1817	reparseBuffer byte
1818}
1819
1820const (
1821	FSCTL_CREATE_OR_GET_OBJECT_ID             = 0x0900C0
1822	FSCTL_DELETE_OBJECT_ID                    = 0x0900A0
1823	FSCTL_DELETE_REPARSE_POINT                = 0x0900AC
1824	FSCTL_DUPLICATE_EXTENTS_TO_FILE           = 0x098344
1825	FSCTL_DUPLICATE_EXTENTS_TO_FILE_EX        = 0x0983E8
1826	FSCTL_FILESYSTEM_GET_STATISTICS           = 0x090060
1827	FSCTL_FILE_LEVEL_TRIM                     = 0x098208
1828	FSCTL_FIND_FILES_BY_SID                   = 0x09008F
1829	FSCTL_GET_COMPRESSION                     = 0x09003C
1830	FSCTL_GET_INTEGRITY_INFORMATION           = 0x09027C
1831	FSCTL_GET_NTFS_VOLUME_DATA                = 0x090064
1832	FSCTL_GET_REFS_VOLUME_DATA                = 0x0902D8
1833	FSCTL_GET_OBJECT_ID                       = 0x09009C
1834	FSCTL_GET_REPARSE_POINT                   = 0x0900A8
1835	FSCTL_GET_RETRIEVAL_POINTER_COUNT         = 0x09042B
1836	FSCTL_GET_RETRIEVAL_POINTERS              = 0x090073
1837	FSCTL_GET_RETRIEVAL_POINTERS_AND_REFCOUNT = 0x0903D3
1838	FSCTL_IS_PATHNAME_VALID                   = 0x09002C
1839	FSCTL_LMR_SET_LINK_TRACKING_INFORMATION   = 0x1400EC
1840	FSCTL_MARK_HANDLE                         = 0x0900FC
1841	FSCTL_OFFLOAD_READ                        = 0x094264
1842	FSCTL_OFFLOAD_WRITE                       = 0x098268
1843	FSCTL_PIPE_PEEK                           = 0x11400C
1844	FSCTL_PIPE_TRANSCEIVE                     = 0x11C017
1845	FSCTL_PIPE_WAIT                           = 0x110018
1846	FSCTL_QUERY_ALLOCATED_RANGES              = 0x0940CF
1847	FSCTL_QUERY_FAT_BPB                       = 0x090058
1848	FSCTL_QUERY_FILE_REGIONS                  = 0x090284
1849	FSCTL_QUERY_ON_DISK_VOLUME_INFO           = 0x09013C
1850	FSCTL_QUERY_SPARING_INFO                  = 0x090138
1851	FSCTL_READ_FILE_USN_DATA                  = 0x0900EB
1852	FSCTL_RECALL_FILE                         = 0x090117
1853	FSCTL_REFS_STREAM_SNAPSHOT_MANAGEMENT     = 0x090440
1854	FSCTL_SET_COMPRESSION                     = 0x09C040
1855	FSCTL_SET_DEFECT_MANAGEMENT               = 0x098134
1856	FSCTL_SET_ENCRYPTION                      = 0x0900D7
1857	FSCTL_SET_INTEGRITY_INFORMATION           = 0x09C280
1858	FSCTL_SET_INTEGRITY_INFORMATION_EX        = 0x090380
1859	FSCTL_SET_OBJECT_ID                       = 0x090098
1860	FSCTL_SET_OBJECT_ID_EXTENDED              = 0x0900BC
1861	FSCTL_SET_REPARSE_POINT                   = 0x0900A4
1862	FSCTL_SET_SPARSE                          = 0x0900C4
1863	FSCTL_SET_ZERO_DATA                       = 0x0980C8
1864	FSCTL_SET_ZERO_ON_DEALLOCATION            = 0x090194
1865	FSCTL_SIS_COPYFILE                        = 0x090100
1866	FSCTL_WRITE_USN_CLOSE_RECORD              = 0x0900EF
1867
1868	MAXIMUM_REPARSE_DATA_BUFFER_SIZE = 16 * 1024
1869	IO_REPARSE_TAG_MOUNT_POINT       = 0xA0000003
1870	IO_REPARSE_TAG_SYMLINK           = 0xA000000C
1871	SYMBOLIC_LINK_FLAG_DIRECTORY     = 0x1
1872)
1873
1874const (
1875	ComputerNameNetBIOS                   = 0
1876	ComputerNameDnsHostname               = 1
1877	ComputerNameDnsDomain                 = 2
1878	ComputerNameDnsFullyQualified         = 3
1879	ComputerNamePhysicalNetBIOS           = 4
1880	ComputerNamePhysicalDnsHostname       = 5
1881	ComputerNamePhysicalDnsDomain         = 6
1882	ComputerNamePhysicalDnsFullyQualified = 7
1883	ComputerNameMax                       = 8
1884)
1885
1886// For MessageBox()
1887const (
1888	MB_OK                   = 0x00000000
1889	MB_OKCANCEL             = 0x00000001
1890	MB_ABORTRETRYIGNORE     = 0x00000002
1891	MB_YESNOCANCEL          = 0x00000003
1892	MB_YESNO                = 0x00000004
1893	MB_RETRYCANCEL          = 0x00000005
1894	MB_CANCELTRYCONTINUE    = 0x00000006
1895	MB_ICONHAND             = 0x00000010
1896	MB_ICONQUESTION         = 0x00000020
1897	MB_ICONEXCLAMATION      = 0x00000030
1898	MB_ICONASTERISK         = 0x00000040
1899	MB_USERICON             = 0x00000080
1900	MB_ICONWARNING          = MB_ICONEXCLAMATION
1901	MB_ICONERROR            = MB_ICONHAND
1902	MB_ICONINFORMATION      = MB_ICONASTERISK
1903	MB_ICONSTOP             = MB_ICONHAND
1904	MB_DEFBUTTON1           = 0x00000000
1905	MB_DEFBUTTON2           = 0x00000100
1906	MB_DEFBUTTON3           = 0x00000200
1907	MB_DEFBUTTON4           = 0x00000300
1908	MB_APPLMODAL            = 0x00000000
1909	MB_SYSTEMMODAL          = 0x00001000
1910	MB_TASKMODAL            = 0x00002000
1911	MB_HELP                 = 0x00004000
1912	MB_NOFOCUS              = 0x00008000
1913	MB_SETFOREGROUND        = 0x00010000
1914	MB_DEFAULT_DESKTOP_ONLY = 0x00020000
1915	MB_TOPMOST              = 0x00040000
1916	MB_RIGHT                = 0x00080000
1917	MB_RTLREADING           = 0x00100000
1918	MB_SERVICE_NOTIFICATION = 0x00200000
1919)
1920
1921const (
1922	MOVEFILE_REPLACE_EXISTING      = 0x1
1923	MOVEFILE_COPY_ALLOWED          = 0x2
1924	MOVEFILE_DELAY_UNTIL_REBOOT    = 0x4
1925	MOVEFILE_WRITE_THROUGH         = 0x8
1926	MOVEFILE_CREATE_HARDLINK       = 0x10
1927	MOVEFILE_FAIL_IF_NOT_TRACKABLE = 0x20
1928)
1929
1930const GAA_FLAG_INCLUDE_PREFIX = 0x00000010
1931
1932const (
1933	IF_TYPE_OTHER              = 1
1934	IF_TYPE_ETHERNET_CSMACD    = 6
1935	IF_TYPE_ISO88025_TOKENRING = 9
1936	IF_TYPE_PPP                = 23
1937	IF_TYPE_SOFTWARE_LOOPBACK  = 24
1938	IF_TYPE_ATM                = 37
1939	IF_TYPE_IEEE80211          = 71
1940	IF_TYPE_TUNNEL             = 131
1941	IF_TYPE_IEEE1394           = 144
1942)
1943
1944type SocketAddress struct {
1945	Sockaddr       *syscall.RawSockaddrAny
1946	SockaddrLength int32
1947}
1948
1949// IP returns an IPv4 or IPv6 address, or nil if the underlying SocketAddress is neither.
1950func (addr *SocketAddress) IP() net.IP {
1951	if uintptr(addr.SockaddrLength) >= unsafe.Sizeof(RawSockaddrInet4{}) && addr.Sockaddr.Addr.Family == AF_INET {
1952		return (*RawSockaddrInet4)(unsafe.Pointer(addr.Sockaddr)).Addr[:]
1953	} else if uintptr(addr.SockaddrLength) >= unsafe.Sizeof(RawSockaddrInet6{}) && addr.Sockaddr.Addr.Family == AF_INET6 {
1954		return (*RawSockaddrInet6)(unsafe.Pointer(addr.Sockaddr)).Addr[:]
1955	}
1956	return nil
1957}
1958
1959type IpAdapterUnicastAddress struct {
1960	Length             uint32
1961	Flags              uint32
1962	Next               *IpAdapterUnicastAddress
1963	Address            SocketAddress
1964	PrefixOrigin       int32
1965	SuffixOrigin       int32
1966	DadState           int32
1967	ValidLifetime      uint32
1968	PreferredLifetime  uint32
1969	LeaseLifetime      uint32
1970	OnLinkPrefixLength uint8
1971}
1972
1973type IpAdapterAnycastAddress struct {
1974	Length  uint32
1975	Flags   uint32
1976	Next    *IpAdapterAnycastAddress
1977	Address SocketAddress
1978}
1979
1980type IpAdapterMulticastAddress struct {
1981	Length  uint32
1982	Flags   uint32
1983	Next    *IpAdapterMulticastAddress
1984	Address SocketAddress
1985}
1986
1987type IpAdapterDnsServerAdapter struct {
1988	Length   uint32
1989	Reserved uint32
1990	Next     *IpAdapterDnsServerAdapter
1991	Address  SocketAddress
1992}
1993
1994type IpAdapterPrefix struct {
1995	Length       uint32
1996	Flags        uint32
1997	Next         *IpAdapterPrefix
1998	Address      SocketAddress
1999	PrefixLength uint32
2000}
2001
2002type IpAdapterAddresses struct {
2003	Length                uint32
2004	IfIndex               uint32
2005	Next                  *IpAdapterAddresses
2006	AdapterName           *byte
2007	FirstUnicastAddress   *IpAdapterUnicastAddress
2008	FirstAnycastAddress   *IpAdapterAnycastAddress
2009	FirstMulticastAddress *IpAdapterMulticastAddress
2010	FirstDnsServerAddress *IpAdapterDnsServerAdapter
2011	DnsSuffix             *uint16
2012	Description           *uint16
2013	FriendlyName          *uint16
2014	PhysicalAddress       [syscall.MAX_ADAPTER_ADDRESS_LENGTH]byte
2015	PhysicalAddressLength uint32
2016	Flags                 uint32
2017	Mtu                   uint32
2018	IfType                uint32
2019	OperStatus            uint32
2020	Ipv6IfIndex           uint32
2021	ZoneIndices           [16]uint32
2022	FirstPrefix           *IpAdapterPrefix
2023	/* more fields might be present here. */
2024}
2025
2026const (
2027	IfOperStatusUp             = 1
2028	IfOperStatusDown           = 2
2029	IfOperStatusTesting        = 3
2030	IfOperStatusUnknown        = 4
2031	IfOperStatusDormant        = 5
2032	IfOperStatusNotPresent     = 6
2033	IfOperStatusLowerLayerDown = 7
2034)
2035
2036// Console related constants used for the mode parameter to SetConsoleMode. See
2037// https://docs.microsoft.com/en-us/windows/console/setconsolemode for details.
2038
2039const (
2040	ENABLE_PROCESSED_INPUT        = 0x1
2041	ENABLE_LINE_INPUT             = 0x2
2042	ENABLE_ECHO_INPUT             = 0x4
2043	ENABLE_WINDOW_INPUT           = 0x8
2044	ENABLE_MOUSE_INPUT            = 0x10
2045	ENABLE_INSERT_MODE            = 0x20
2046	ENABLE_QUICK_EDIT_MODE        = 0x40
2047	ENABLE_EXTENDED_FLAGS         = 0x80
2048	ENABLE_AUTO_POSITION          = 0x100
2049	ENABLE_VIRTUAL_TERMINAL_INPUT = 0x200
2050
2051	ENABLE_PROCESSED_OUTPUT            = 0x1
2052	ENABLE_WRAP_AT_EOL_OUTPUT          = 0x2
2053	ENABLE_VIRTUAL_TERMINAL_PROCESSING = 0x4
2054	DISABLE_NEWLINE_AUTO_RETURN        = 0x8
2055	ENABLE_LVB_GRID_WORLDWIDE          = 0x10
2056)
2057
2058type Coord struct {
2059	X int16
2060	Y int16
2061}
2062
2063type SmallRect struct {
2064	Left   int16
2065	Top    int16
2066	Right  int16
2067	Bottom int16
2068}
2069
2070// Used with GetConsoleScreenBuffer to retrieve information about a console
2071// screen buffer. See
2072// https://docs.microsoft.com/en-us/windows/console/console-screen-buffer-info-str
2073// for details.
2074
2075type ConsoleScreenBufferInfo struct {
2076	Size              Coord
2077	CursorPosition    Coord
2078	Attributes        uint16
2079	Window            SmallRect
2080	MaximumWindowSize Coord
2081}
2082
2083const UNIX_PATH_MAX = 108 // defined in afunix.h
2084
2085const (
2086	// flags for JOBOBJECT_BASIC_LIMIT_INFORMATION.LimitFlags
2087	JOB_OBJECT_LIMIT_ACTIVE_PROCESS             = 0x00000008
2088	JOB_OBJECT_LIMIT_AFFINITY                   = 0x00000010
2089	JOB_OBJECT_LIMIT_BREAKAWAY_OK               = 0x00000800
2090	JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION = 0x00000400
2091	JOB_OBJECT_LIMIT_JOB_MEMORY                 = 0x00000200
2092	JOB_OBJECT_LIMIT_JOB_TIME                   = 0x00000004
2093	JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE          = 0x00002000
2094	JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME          = 0x00000040
2095	JOB_OBJECT_LIMIT_PRIORITY_CLASS             = 0x00000020
2096	JOB_OBJECT_LIMIT_PROCESS_MEMORY             = 0x00000100
2097	JOB_OBJECT_LIMIT_PROCESS_TIME               = 0x00000002
2098	JOB_OBJECT_LIMIT_SCHEDULING_CLASS           = 0x00000080
2099	JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK        = 0x00001000
2100	JOB_OBJECT_LIMIT_SUBSET_AFFINITY            = 0x00004000
2101	JOB_OBJECT_LIMIT_WORKINGSET                 = 0x00000001
2102)
2103
2104type IO_COUNTERS struct {
2105	ReadOperationCount  uint64
2106	WriteOperationCount uint64
2107	OtherOperationCount uint64
2108	ReadTransferCount   uint64
2109	WriteTransferCount  uint64
2110	OtherTransferCount  uint64
2111}
2112
2113type JOBOBJECT_EXTENDED_LIMIT_INFORMATION struct {
2114	BasicLimitInformation JOBOBJECT_BASIC_LIMIT_INFORMATION
2115	IoInfo                IO_COUNTERS
2116	ProcessMemoryLimit    uintptr
2117	JobMemoryLimit        uintptr
2118	PeakProcessMemoryUsed uintptr
2119	PeakJobMemoryUsed     uintptr
2120}
2121
2122const (
2123	// UIRestrictionsClass
2124	JOB_OBJECT_UILIMIT_DESKTOP          = 0x00000040
2125	JOB_OBJECT_UILIMIT_DISPLAYSETTINGS  = 0x00000010
2126	JOB_OBJECT_UILIMIT_EXITWINDOWS      = 0x00000080
2127	JOB_OBJECT_UILIMIT_GLOBALATOMS      = 0x00000020
2128	JOB_OBJECT_UILIMIT_HANDLES          = 0x00000001
2129	JOB_OBJECT_UILIMIT_READCLIPBOARD    = 0x00000002
2130	JOB_OBJECT_UILIMIT_SYSTEMPARAMETERS = 0x00000008
2131	JOB_OBJECT_UILIMIT_WRITECLIPBOARD   = 0x00000004
2132)
2133
2134type JOBOBJECT_BASIC_UI_RESTRICTIONS struct {
2135	UIRestrictionsClass uint32
2136}
2137
2138const (
2139	// JobObjectInformationClass
2140	JobObjectAssociateCompletionPortInformation = 7
2141	JobObjectBasicLimitInformation              = 2
2142	JobObjectBasicUIRestrictions                = 4
2143	JobObjectCpuRateControlInformation          = 15
2144	JobObjectEndOfJobTimeInformation            = 6
2145	JobObjectExtendedLimitInformation           = 9
2146	JobObjectGroupInformation                   = 11
2147	JobObjectGroupInformationEx                 = 14
2148	JobObjectLimitViolationInformation2         = 35
2149	JobObjectNetRateControlInformation          = 32
2150	JobObjectNotificationLimitInformation       = 12
2151	JobObjectNotificationLimitInformation2      = 34
2152	JobObjectSecurityLimitInformation           = 5
2153)
2154
2155const (
2156	KF_FLAG_DEFAULT                          = 0x00000000
2157	KF_FLAG_FORCE_APP_DATA_REDIRECTION       = 0x00080000
2158	KF_FLAG_RETURN_FILTER_REDIRECTION_TARGET = 0x00040000
2159	KF_FLAG_FORCE_PACKAGE_REDIRECTION        = 0x00020000
2160	KF_FLAG_NO_PACKAGE_REDIRECTION           = 0x00010000
2161	KF_FLAG_FORCE_APPCONTAINER_REDIRECTION   = 0x00020000
2162	KF_FLAG_NO_APPCONTAINER_REDIRECTION      = 0x00010000
2163	KF_FLAG_CREATE                           = 0x00008000
2164	KF_FLAG_DONT_VERIFY                      = 0x00004000
2165	KF_FLAG_DONT_UNEXPAND                    = 0x00002000
2166	KF_FLAG_NO_ALIAS                         = 0x00001000
2167	KF_FLAG_INIT                             = 0x00000800
2168	KF_FLAG_DEFAULT_PATH                     = 0x00000400
2169	KF_FLAG_NOT_PARENT_RELATIVE              = 0x00000200
2170	KF_FLAG_SIMPLE_IDLIST                    = 0x00000100
2171	KF_FLAG_ALIAS_ONLY                       = 0x80000000
2172)
2173
2174type OsVersionInfoEx struct {
2175	osVersionInfoSize uint32
2176	MajorVersion      uint32
2177	MinorVersion      uint32
2178	BuildNumber       uint32
2179	PlatformId        uint32
2180	CsdVersion        [128]uint16
2181	ServicePackMajor  uint16
2182	ServicePackMinor  uint16
2183	SuiteMask         uint16
2184	ProductType       byte
2185	_                 byte
2186}
2187
2188const (
2189	EWX_LOGOFF          = 0x00000000
2190	EWX_SHUTDOWN        = 0x00000001
2191	EWX_REBOOT          = 0x00000002
2192	EWX_FORCE           = 0x00000004
2193	EWX_POWEROFF        = 0x00000008
2194	EWX_FORCEIFHUNG     = 0x00000010
2195	EWX_QUICKRESOLVE    = 0x00000020
2196	EWX_RESTARTAPPS     = 0x00000040
2197	EWX_HYBRID_SHUTDOWN = 0x00400000
2198	EWX_BOOTOPTIONS     = 0x01000000
2199
2200	SHTDN_REASON_FLAG_COMMENT_REQUIRED          = 0x01000000
2201	SHTDN_REASON_FLAG_DIRTY_PROBLEM_ID_REQUIRED = 0x02000000
2202	SHTDN_REASON_FLAG_CLEAN_UI                  = 0x04000000
2203	SHTDN_REASON_FLAG_DIRTY_UI                  = 0x08000000
2204	SHTDN_REASON_FLAG_USER_DEFINED              = 0x40000000
2205	SHTDN_REASON_FLAG_PLANNED                   = 0x80000000
2206	SHTDN_REASON_MAJOR_OTHER                    = 0x00000000
2207	SHTDN_REASON_MAJOR_NONE                     = 0x00000000
2208	SHTDN_REASON_MAJOR_HARDWARE                 = 0x00010000
2209	SHTDN_REASON_MAJOR_OPERATINGSYSTEM          = 0x00020000
2210	SHTDN_REASON_MAJOR_SOFTWARE                 = 0x00030000
2211	SHTDN_REASON_MAJOR_APPLICATION              = 0x00040000
2212	SHTDN_REASON_MAJOR_SYSTEM                   = 0x00050000
2213	SHTDN_REASON_MAJOR_POWER                    = 0x00060000
2214	SHTDN_REASON_MAJOR_LEGACY_API               = 0x00070000
2215	SHTDN_REASON_MINOR_OTHER                    = 0x00000000
2216	SHTDN_REASON_MINOR_NONE                     = 0x000000ff
2217	SHTDN_REASON_MINOR_MAINTENANCE              = 0x00000001
2218	SHTDN_REASON_MINOR_INSTALLATION             = 0x00000002
2219	SHTDN_REASON_MINOR_UPGRADE                  = 0x00000003
2220	SHTDN_REASON_MINOR_RECONFIG                 = 0x00000004
2221	SHTDN_REASON_MINOR_HUNG                     = 0x00000005
2222	SHTDN_REASON_MINOR_UNSTABLE                 = 0x00000006
2223	SHTDN_REASON_MINOR_DISK                     = 0x00000007
2224	SHTDN_REASON_MINOR_PROCESSOR                = 0x00000008
2225	SHTDN_REASON_MINOR_NETWORKCARD              = 0x00000009
2226	SHTDN_REASON_MINOR_POWER_SUPPLY             = 0x0000000a
2227	SHTDN_REASON_MINOR_CORDUNPLUGGED            = 0x0000000b
2228	SHTDN_REASON_MINOR_ENVIRONMENT              = 0x0000000c
2229	SHTDN_REASON_MINOR_HARDWARE_DRIVER          = 0x0000000d
2230	SHTDN_REASON_MINOR_OTHERDRIVER              = 0x0000000e
2231	SHTDN_REASON_MINOR_BLUESCREEN               = 0x0000000F
2232	SHTDN_REASON_MINOR_SERVICEPACK              = 0x00000010
2233	SHTDN_REASON_MINOR_HOTFIX                   = 0x00000011
2234	SHTDN_REASON_MINOR_SECURITYFIX              = 0x00000012
2235	SHTDN_REASON_MINOR_SECURITY                 = 0x00000013
2236	SHTDN_REASON_MINOR_NETWORK_CONNECTIVITY     = 0x00000014
2237	SHTDN_REASON_MINOR_WMI                      = 0x00000015
2238	SHTDN_REASON_MINOR_SERVICEPACK_UNINSTALL    = 0x00000016
2239	SHTDN_REASON_MINOR_HOTFIX_UNINSTALL         = 0x00000017
2240	SHTDN_REASON_MINOR_SECURITYFIX_UNINSTALL    = 0x00000018
2241	SHTDN_REASON_MINOR_MMC                      = 0x00000019
2242	SHTDN_REASON_MINOR_SYSTEMRESTORE            = 0x0000001a
2243	SHTDN_REASON_MINOR_TERMSRV                  = 0x00000020
2244	SHTDN_REASON_MINOR_DC_PROMOTION             = 0x00000021
2245	SHTDN_REASON_MINOR_DC_DEMOTION              = 0x00000022
2246	SHTDN_REASON_UNKNOWN                        = SHTDN_REASON_MINOR_NONE
2247	SHTDN_REASON_LEGACY_API                     = SHTDN_REASON_MAJOR_LEGACY_API | SHTDN_REASON_FLAG_PLANNED
2248	SHTDN_REASON_VALID_BIT_MASK                 = 0xc0ffffff
2249
2250	SHUTDOWN_NORETRY = 0x1
2251)
2252
2253// Flags used for GetModuleHandleEx
2254const (
2255	GET_MODULE_HANDLE_EX_FLAG_PIN                = 1
2256	GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT = 2
2257	GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS       = 4
2258)
2259
2260// MUI function flag values
2261const (
2262	MUI_LANGUAGE_ID                    = 0x4
2263	MUI_LANGUAGE_NAME                  = 0x8
2264	MUI_MERGE_SYSTEM_FALLBACK          = 0x10
2265	MUI_MERGE_USER_FALLBACK            = 0x20
2266	MUI_UI_FALLBACK                    = MUI_MERGE_SYSTEM_FALLBACK | MUI_MERGE_USER_FALLBACK
2267	MUI_THREAD_LANGUAGES               = 0x40
2268	MUI_CONSOLE_FILTER                 = 0x100
2269	MUI_COMPLEX_SCRIPT_FILTER          = 0x200
2270	MUI_RESET_FILTERS                  = 0x001
2271	MUI_USER_PREFERRED_UI_LANGUAGES    = 0x10
2272	MUI_USE_INSTALLED_LANGUAGES        = 0x20
2273	MUI_USE_SEARCH_ALL_LANGUAGES       = 0x40
2274	MUI_LANG_NEUTRAL_PE_FILE           = 0x100
2275	MUI_NON_LANG_NEUTRAL_FILE          = 0x200
2276	MUI_MACHINE_LANGUAGE_SETTINGS      = 0x400
2277	MUI_FILETYPE_NOT_LANGUAGE_NEUTRAL  = 0x001
2278	MUI_FILETYPE_LANGUAGE_NEUTRAL_MAIN = 0x002
2279	MUI_FILETYPE_LANGUAGE_NEUTRAL_MUI  = 0x004
2280	MUI_QUERY_TYPE                     = 0x001
2281	MUI_QUERY_CHECKSUM                 = 0x002
2282	MUI_QUERY_LANGUAGE_NAME            = 0x004
2283	MUI_QUERY_RESOURCE_TYPES           = 0x008
2284	MUI_FILEINFO_VERSION               = 0x001
2285
2286	MUI_FULL_LANGUAGE      = 0x01
2287	MUI_PARTIAL_LANGUAGE   = 0x02
2288	MUI_LIP_LANGUAGE       = 0x04
2289	MUI_LANGUAGE_INSTALLED = 0x20
2290	MUI_LANGUAGE_LICENSED  = 0x40
2291)
2292
2293// FILE_INFO_BY_HANDLE_CLASS constants for SetFileInformationByHandle/GetFileInformationByHandleEx
2294const (
2295	FileBasicInfo                  = 0
2296	FileStandardInfo               = 1
2297	FileNameInfo                   = 2
2298	FileRenameInfo                 = 3
2299	FileDispositionInfo            = 4
2300	FileAllocationInfo             = 5
2301	FileEndOfFileInfo              = 6
2302	FileStreamInfo                 = 7
2303	FileCompressionInfo            = 8
2304	FileAttributeTagInfo           = 9
2305	FileIdBothDirectoryInfo        = 10
2306	FileIdBothDirectoryRestartInfo = 11
2307	FileIoPriorityHintInfo         = 12
2308	FileRemoteProtocolInfo         = 13
2309	FileFullDirectoryInfo          = 14
2310	FileFullDirectoryRestartInfo   = 15
2311	FileStorageInfo                = 16
2312	FileAlignmentInfo              = 17
2313	FileIdInfo                     = 18
2314	FileIdExtdDirectoryInfo        = 19
2315	FileIdExtdDirectoryRestartInfo = 20
2316	FileDispositionInfoEx          = 21
2317	FileRenameInfoEx               = 22
2318	FileCaseSensitiveInfo          = 23
2319	FileNormalizedNameInfo         = 24
2320)
2321
2322// LoadLibrary flags for determining from where to search for a DLL
2323const (
2324	DONT_RESOLVE_DLL_REFERENCES               = 0x1
2325	LOAD_LIBRARY_AS_DATAFILE                  = 0x2
2326	LOAD_WITH_ALTERED_SEARCH_PATH             = 0x8
2327	LOAD_IGNORE_CODE_AUTHZ_LEVEL              = 0x10
2328	LOAD_LIBRARY_AS_IMAGE_RESOURCE            = 0x20
2329	LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE        = 0x40
2330	LOAD_LIBRARY_REQUIRE_SIGNED_TARGET        = 0x80
2331	LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR          = 0x100
2332	LOAD_LIBRARY_SEARCH_APPLICATION_DIR       = 0x200
2333	LOAD_LIBRARY_SEARCH_USER_DIRS             = 0x400
2334	LOAD_LIBRARY_SEARCH_SYSTEM32              = 0x800
2335	LOAD_LIBRARY_SEARCH_DEFAULT_DIRS          = 0x1000
2336	LOAD_LIBRARY_SAFE_CURRENT_DIRS            = 0x00002000
2337	LOAD_LIBRARY_SEARCH_SYSTEM32_NO_FORWARDER = 0x00004000
2338	LOAD_LIBRARY_OS_INTEGRITY_CONTINUITY      = 0x00008000
2339)
2340
2341// RegNotifyChangeKeyValue notifyFilter flags.
2342const (
2343	// REG_NOTIFY_CHANGE_NAME notifies the caller if a subkey is added or deleted.
2344	REG_NOTIFY_CHANGE_NAME = 0x00000001
2345
2346	// REG_NOTIFY_CHANGE_ATTRIBUTES notifies the caller of changes to the attributes of the key, such as the security descriptor information.
2347	REG_NOTIFY_CHANGE_ATTRIBUTES = 0x00000002
2348
2349	// REG_NOTIFY_CHANGE_LAST_SET notifies the caller of changes to a value of the key. This can include adding or deleting a value, or changing an existing value.
2350	REG_NOTIFY_CHANGE_LAST_SET = 0x00000004
2351
2352	// REG_NOTIFY_CHANGE_SECURITY notifies the caller of changes to the security descriptor of the key.
2353	REG_NOTIFY_CHANGE_SECURITY = 0x00000008
2354
2355	// REG_NOTIFY_THREAD_AGNOSTIC indicates that the lifetime of the registration must not be tied to the lifetime of the thread issuing the RegNotifyChangeKeyValue call. Note: This flag value is only supported in Windows 8 and later.
2356	REG_NOTIFY_THREAD_AGNOSTIC = 0x10000000
2357)
2358
2359type CommTimeouts struct {
2360	ReadIntervalTimeout         uint32
2361	ReadTotalTimeoutMultiplier  uint32
2362	ReadTotalTimeoutConstant    uint32
2363	WriteTotalTimeoutMultiplier uint32
2364	WriteTotalTimeoutConstant   uint32
2365}
2366
2367// NTUnicodeString is a UTF-16 string for NT native APIs, corresponding to UNICODE_STRING.
2368type NTUnicodeString struct {
2369	Length        uint16
2370	MaximumLength uint16
2371	Buffer        *uint16
2372}
2373
2374// NTString is an ANSI string for NT native APIs, corresponding to STRING.
2375type NTString struct {
2376	Length        uint16
2377	MaximumLength uint16
2378	Buffer        *byte
2379}
2380
2381type LIST_ENTRY struct {
2382	Flink *LIST_ENTRY
2383	Blink *LIST_ENTRY
2384}
2385
2386type RUNTIME_FUNCTION struct {
2387	BeginAddress uint32
2388	EndAddress   uint32
2389	UnwindData   uint32
2390}
2391
2392type LDR_DATA_TABLE_ENTRY struct {
2393	reserved1          [2]uintptr
2394	InMemoryOrderLinks LIST_ENTRY
2395	reserved2          [2]uintptr
2396	DllBase            uintptr
2397	reserved3          [2]uintptr
2398	FullDllName        NTUnicodeString
2399	reserved4          [8]byte
2400	reserved5          [3]uintptr
2401	reserved6          uintptr
2402	TimeDateStamp      uint32
2403}
2404
2405type PEB_LDR_DATA struct {
2406	reserved1               [8]byte
2407	reserved2               [3]uintptr
2408	InMemoryOrderModuleList LIST_ENTRY
2409}
2410
2411type CURDIR struct {
2412	DosPath NTUnicodeString
2413	Handle  Handle
2414}
2415
2416type RTL_DRIVE_LETTER_CURDIR struct {
2417	Flags     uint16
2418	Length    uint16
2419	TimeStamp uint32
2420	DosPath   NTString
2421}
2422
2423type RTL_USER_PROCESS_PARAMETERS struct {
2424	MaximumLength, Length uint32
2425
2426	Flags, DebugFlags uint32
2427
2428	ConsoleHandle                                Handle
2429	ConsoleFlags                                 uint32
2430	StandardInput, StandardOutput, StandardError Handle
2431
2432	CurrentDirectory CURDIR
2433	DllPath          NTUnicodeString
2434	ImagePathName    NTUnicodeString
2435	CommandLine      NTUnicodeString
2436	Environment      unsafe.Pointer
2437
2438	StartingX, StartingY, CountX, CountY, CountCharsX, CountCharsY, FillAttribute uint32
2439
2440	WindowFlags, ShowWindowFlags                     uint32
2441	WindowTitle, DesktopInfo, ShellInfo, RuntimeData NTUnicodeString
2442	CurrentDirectories                               [32]RTL_DRIVE_LETTER_CURDIR
2443
2444	EnvironmentSize, EnvironmentVersion uintptr
2445
2446	PackageDependencyData unsafe.Pointer
2447	ProcessGroupId        uint32
2448	LoaderThreads         uint32
2449
2450	RedirectionDllName               NTUnicodeString
2451	HeapPartitionName                NTUnicodeString
2452	DefaultThreadpoolCpuSetMasks     uintptr
2453	DefaultThreadpoolCpuSetMaskCount uint32
2454}
2455
2456type PEB struct {
2457	reserved1              [2]byte
2458	BeingDebugged          byte
2459	BitField               byte
2460	reserved3              uintptr
2461	ImageBaseAddress       uintptr
2462	Ldr                    *PEB_LDR_DATA
2463	ProcessParameters      *RTL_USER_PROCESS_PARAMETERS
2464	reserved4              [3]uintptr
2465	AtlThunkSListPtr       uintptr
2466	reserved5              uintptr
2467	reserved6              uint32
2468	reserved7              uintptr
2469	reserved8              uint32
2470	AtlThunkSListPtr32     uint32
2471	reserved9              [45]uintptr
2472	reserved10             [96]byte
2473	PostProcessInitRoutine uintptr
2474	reserved11             [128]byte
2475	reserved12             [1]uintptr
2476	SessionId              uint32
2477}
2478
2479type OBJECT_ATTRIBUTES struct {
2480	Length             uint32
2481	RootDirectory      Handle
2482	ObjectName         *NTUnicodeString
2483	Attributes         uint32
2484	SecurityDescriptor *SECURITY_DESCRIPTOR
2485	SecurityQoS        *SECURITY_QUALITY_OF_SERVICE
2486}
2487
2488// Values for the Attributes member of OBJECT_ATTRIBUTES.
2489const (
2490	OBJ_INHERIT                       = 0x00000002
2491	OBJ_PERMANENT                     = 0x00000010
2492	OBJ_EXCLUSIVE                     = 0x00000020
2493	OBJ_CASE_INSENSITIVE              = 0x00000040
2494	OBJ_OPENIF                        = 0x00000080
2495	OBJ_OPENLINK                      = 0x00000100
2496	OBJ_KERNEL_HANDLE                 = 0x00000200
2497	OBJ_FORCE_ACCESS_CHECK            = 0x00000400
2498	OBJ_IGNORE_IMPERSONATED_DEVICEMAP = 0x00000800
2499	OBJ_DONT_REPARSE                  = 0x00001000
2500	OBJ_VALID_ATTRIBUTES              = 0x00001FF2
2501)
2502
2503type IO_STATUS_BLOCK struct {
2504	Status      NTStatus
2505	Information uintptr
2506}
2507
2508type RTLP_CURDIR_REF struct {
2509	RefCount int32
2510	Handle   Handle
2511}
2512
2513type RTL_RELATIVE_NAME struct {
2514	RelativeName        NTUnicodeString
2515	ContainingDirectory Handle
2516	CurDirRef           *RTLP_CURDIR_REF
2517}
2518
2519const (
2520	// CreateDisposition flags for NtCreateFile and NtCreateNamedPipeFile.
2521	FILE_SUPERSEDE           = 0x00000000
2522	FILE_OPEN                = 0x00000001
2523	FILE_CREATE              = 0x00000002
2524	FILE_OPEN_IF             = 0x00000003
2525	FILE_OVERWRITE           = 0x00000004
2526	FILE_OVERWRITE_IF        = 0x00000005
2527	FILE_MAXIMUM_DISPOSITION = 0x00000005
2528
2529	// CreateOptions flags for NtCreateFile and NtCreateNamedPipeFile.
2530	FILE_DIRECTORY_FILE            = 0x00000001
2531	FILE_WRITE_THROUGH             = 0x00000002
2532	FILE_SEQUENTIAL_ONLY           = 0x00000004
2533	FILE_NO_INTERMEDIATE_BUFFERING = 0x00000008
2534	FILE_SYNCHRONOUS_IO_ALERT      = 0x00000010
2535	FILE_SYNCHRONOUS_IO_NONALERT   = 0x00000020
2536	FILE_NON_DIRECTORY_FILE        = 0x00000040
2537	FILE_CREATE_TREE_CONNECTION    = 0x00000080
2538	FILE_COMPLETE_IF_OPLOCKED      = 0x00000100
2539	FILE_NO_EA_KNOWLEDGE           = 0x00000200
2540	FILE_OPEN_REMOTE_INSTANCE      = 0x00000400
2541	FILE_RANDOM_ACCESS             = 0x00000800
2542	FILE_DELETE_ON_CLOSE           = 0x00001000
2543	FILE_OPEN_BY_FILE_ID           = 0x00002000
2544	FILE_OPEN_FOR_BACKUP_INTENT    = 0x00004000
2545	FILE_NO_COMPRESSION            = 0x00008000
2546	FILE_OPEN_REQUIRING_OPLOCK     = 0x00010000
2547	FILE_DISALLOW_EXCLUSIVE        = 0x00020000
2548	FILE_RESERVE_OPFILTER          = 0x00100000
2549	FILE_OPEN_REPARSE_POINT        = 0x00200000
2550	FILE_OPEN_NO_RECALL            = 0x00400000
2551	FILE_OPEN_FOR_FREE_SPACE_QUERY = 0x00800000
2552
2553	// Parameter constants for NtCreateNamedPipeFile.
2554
2555	FILE_PIPE_BYTE_STREAM_TYPE = 0x00000000
2556	FILE_PIPE_MESSAGE_TYPE     = 0x00000001
2557
2558	FILE_PIPE_ACCEPT_REMOTE_CLIENTS = 0x00000000
2559	FILE_PIPE_REJECT_REMOTE_CLIENTS = 0x00000002
2560
2561	FILE_PIPE_TYPE_VALID_MASK = 0x00000003
2562
2563	FILE_PIPE_BYTE_STREAM_MODE = 0x00000000
2564	FILE_PIPE_MESSAGE_MODE     = 0x00000001
2565
2566	FILE_PIPE_QUEUE_OPERATION    = 0x00000000
2567	FILE_PIPE_COMPLETE_OPERATION = 0x00000001
2568
2569	FILE_PIPE_INBOUND     = 0x00000000
2570	FILE_PIPE_OUTBOUND    = 0x00000001
2571	FILE_PIPE_FULL_DUPLEX = 0x00000002
2572
2573	FILE_PIPE_DISCONNECTED_STATE = 0x00000001
2574	FILE_PIPE_LISTENING_STATE    = 0x00000002
2575	FILE_PIPE_CONNECTED_STATE    = 0x00000003
2576	FILE_PIPE_CLOSING_STATE      = 0x00000004
2577
2578	FILE_PIPE_CLIENT_END = 0x00000000
2579	FILE_PIPE_SERVER_END = 0x00000001
2580)
2581
2582const (
2583	// FileInformationClass for NtSetInformationFile
2584	FileBasicInformation                         = 4
2585	FileRenameInformation                        = 10
2586	FileDispositionInformation                   = 13
2587	FilePositionInformation                      = 14
2588	FileEndOfFileInformation                     = 20
2589	FileValidDataLengthInformation               = 39
2590	FileShortNameInformation                     = 40
2591	FileIoPriorityHintInformation                = 43
2592	FileReplaceCompletionInformation             = 61
2593	FileDispositionInformationEx                 = 64
2594	FileCaseSensitiveInformation                 = 71
2595	FileLinkInformation                          = 72
2596	FileCaseSensitiveInformationForceAccessCheck = 75
2597	FileKnownFolderInformation                   = 76
2598
2599	// Flags for FILE_RENAME_INFORMATION
2600	FILE_RENAME_REPLACE_IF_EXISTS                    = 0x00000001
2601	FILE_RENAME_POSIX_SEMANTICS                      = 0x00000002
2602	FILE_RENAME_SUPPRESS_PIN_STATE_INHERITANCE       = 0x00000004
2603	FILE_RENAME_SUPPRESS_STORAGE_RESERVE_INHERITANCE = 0x00000008
2604	FILE_RENAME_NO_INCREASE_AVAILABLE_SPACE          = 0x00000010
2605	FILE_RENAME_NO_DECREASE_AVAILABLE_SPACE          = 0x00000020
2606	FILE_RENAME_PRESERVE_AVAILABLE_SPACE             = 0x00000030
2607	FILE_RENAME_IGNORE_READONLY_ATTRIBUTE            = 0x00000040
2608	FILE_RENAME_FORCE_RESIZE_TARGET_SR               = 0x00000080
2609	FILE_RENAME_FORCE_RESIZE_SOURCE_SR               = 0x00000100
2610	FILE_RENAME_FORCE_RESIZE_SR                      = 0x00000180
2611
2612	// Flags for FILE_DISPOSITION_INFORMATION_EX
2613	FILE_DISPOSITION_DO_NOT_DELETE             = 0x00000000
2614	FILE_DISPOSITION_DELETE                    = 0x00000001
2615	FILE_DISPOSITION_POSIX_SEMANTICS           = 0x00000002
2616	FILE_DISPOSITION_FORCE_IMAGE_SECTION_CHECK = 0x00000004
2617	FILE_DISPOSITION_ON_CLOSE                  = 0x00000008
2618	FILE_DISPOSITION_IGNORE_READONLY_ATTRIBUTE = 0x00000010
2619
2620	// Flags for FILE_CASE_SENSITIVE_INFORMATION
2621	FILE_CS_FLAG_CASE_SENSITIVE_DIR = 0x00000001
2622
2623	// Flags for FILE_LINK_INFORMATION
2624	FILE_LINK_REPLACE_IF_EXISTS                    = 0x00000001
2625	FILE_LINK_POSIX_SEMANTICS                      = 0x00000002
2626	FILE_LINK_SUPPRESS_STORAGE_RESERVE_INHERITANCE = 0x00000008
2627	FILE_LINK_NO_INCREASE_AVAILABLE_SPACE          = 0x00000010
2628	FILE_LINK_NO_DECREASE_AVAILABLE_SPACE          = 0x00000020
2629	FILE_LINK_PRESERVE_AVAILABLE_SPACE             = 0x00000030
2630	FILE_LINK_IGNORE_READONLY_ATTRIBUTE            = 0x00000040
2631	FILE_LINK_FORCE_RESIZE_TARGET_SR               = 0x00000080
2632	FILE_LINK_FORCE_RESIZE_SOURCE_SR               = 0x00000100
2633	FILE_LINK_FORCE_RESIZE_SR                      = 0x00000180
2634)
2635
2636// ProcessInformationClasses for NtQueryInformationProcess and NtSetInformationProcess.
2637const (
2638	ProcessBasicInformation = iota
2639	ProcessQuotaLimits
2640	ProcessIoCounters
2641	ProcessVmCounters
2642	ProcessTimes
2643	ProcessBasePriority
2644	ProcessRaisePriority
2645	ProcessDebugPort
2646	ProcessExceptionPort
2647	ProcessAccessToken
2648	ProcessLdtInformation
2649	ProcessLdtSize
2650	ProcessDefaultHardErrorMode
2651	ProcessIoPortHandlers
2652	ProcessPooledUsageAndLimits
2653	ProcessWorkingSetWatch
2654	ProcessUserModeIOPL
2655	ProcessEnableAlignmentFaultFixup
2656	ProcessPriorityClass
2657	ProcessWx86Information
2658	ProcessHandleCount
2659	ProcessAffinityMask
2660	ProcessPriorityBoost
2661	ProcessDeviceMap
2662	ProcessSessionInformation
2663	ProcessForegroundInformation
2664	ProcessWow64Information
2665	ProcessImageFileName
2666	ProcessLUIDDeviceMapsEnabled
2667	ProcessBreakOnTermination
2668	ProcessDebugObjectHandle
2669	ProcessDebugFlags
2670	ProcessHandleTracing
2671	ProcessIoPriority
2672	ProcessExecuteFlags
2673	ProcessTlsInformation
2674	ProcessCookie
2675	ProcessImageInformation
2676	ProcessCycleTime
2677	ProcessPagePriority
2678	ProcessInstrumentationCallback
2679	ProcessThreadStackAllocation
2680	ProcessWorkingSetWatchEx
2681	ProcessImageFileNameWin32
2682	ProcessImageFileMapping
2683	ProcessAffinityUpdateMode
2684	ProcessMemoryAllocationMode
2685	ProcessGroupInformation
2686	ProcessTokenVirtualizationEnabled
2687	ProcessConsoleHostProcess
2688	ProcessWindowInformation
2689	ProcessHandleInformation
2690	ProcessMitigationPolicy
2691	ProcessDynamicFunctionTableInformation
2692	ProcessHandleCheckingMode
2693	ProcessKeepAliveCount
2694	ProcessRevokeFileHandles
2695	ProcessWorkingSetControl
2696	ProcessHandleTable
2697	ProcessCheckStackExtentsMode
2698	ProcessCommandLineInformation
2699	ProcessProtectionInformation
2700	ProcessMemoryExhaustion
2701	ProcessFaultInformation
2702	ProcessTelemetryIdInformation
2703	ProcessCommitReleaseInformation
2704	ProcessDefaultCpuSetsInformation
2705	ProcessAllowedCpuSetsInformation
2706	ProcessSubsystemProcess
2707	ProcessJobMemoryInformation
2708	ProcessInPrivate
2709	ProcessRaiseUMExceptionOnInvalidHandleClose
2710	ProcessIumChallengeResponse
2711	ProcessChildProcessInformation
2712	ProcessHighGraphicsPriorityInformation
2713	ProcessSubsystemInformation
2714	ProcessEnergyValues
2715	ProcessActivityThrottleState
2716	ProcessActivityThrottlePolicy
2717	ProcessWin32kSyscallFilterInformation
2718	ProcessDisableSystemAllowedCpuSets
2719	ProcessWakeInformation
2720	ProcessEnergyTrackingState
2721	ProcessManageWritesToExecutableMemory
2722	ProcessCaptureTrustletLiveDump
2723	ProcessTelemetryCoverage
2724	ProcessEnclaveInformation
2725	ProcessEnableReadWriteVmLogging
2726	ProcessUptimeInformation
2727	ProcessImageSection
2728	ProcessDebugAuthInformation
2729	ProcessSystemResourceManagement
2730	ProcessSequenceNumber
2731	ProcessLoaderDetour
2732	ProcessSecurityDomainInformation
2733	ProcessCombineSecurityDomainsInformation
2734	ProcessEnableLogging
2735	ProcessLeapSecondInformation
2736	ProcessFiberShadowStackAllocation
2737	ProcessFreeFiberShadowStackAllocation
2738	ProcessAltSystemCallInformation
2739	ProcessDynamicEHContinuationTargets
2740	ProcessDynamicEnforcedCetCompatibleRanges
2741)
2742
2743type PROCESS_BASIC_INFORMATION struct {
2744	ExitStatus                   NTStatus
2745	PebBaseAddress               *PEB
2746	AffinityMask                 uintptr
2747	BasePriority                 int32
2748	UniqueProcessId              uintptr
2749	InheritedFromUniqueProcessId uintptr
2750}
2751
2752// SystemInformationClasses for NtQuerySystemInformation and NtSetSystemInformation
2753const (
2754	SystemBasicInformation = iota
2755	SystemProcessorInformation
2756	SystemPerformanceInformation
2757	SystemTimeOfDayInformation
2758	SystemPathInformation
2759	SystemProcessInformation
2760	SystemCallCountInformation
2761	SystemDeviceInformation
2762	SystemProcessorPerformanceInformation
2763	SystemFlagsInformation
2764	SystemCallTimeInformation
2765	SystemModuleInformation
2766	SystemLocksInformation
2767	SystemStackTraceInformation
2768	SystemPagedPoolInformation
2769	SystemNonPagedPoolInformation
2770	SystemHandleInformation
2771	SystemObjectInformation
2772	SystemPageFileInformation
2773	SystemVdmInstemulInformation
2774	SystemVdmBopInformation
2775	SystemFileCacheInformation
2776	SystemPoolTagInformation
2777	SystemInterruptInformation
2778	SystemDpcBehaviorInformation
2779	SystemFullMemoryInformation
2780	SystemLoadGdiDriverInformation
2781	SystemUnloadGdiDriverInformation
2782	SystemTimeAdjustmentInformation
2783	SystemSummaryMemoryInformation
2784	SystemMirrorMemoryInformation
2785	SystemPerformanceTraceInformation
2786	systemObsolete0
2787	SystemExceptionInformation
2788	SystemCrashDumpStateInformation
2789	SystemKernelDebuggerInformation
2790	SystemContextSwitchInformation
2791	SystemRegistryQuotaInformation
2792	SystemExtendServiceTableInformation
2793	SystemPrioritySeperation
2794	SystemVerifierAddDriverInformation
2795	SystemVerifierRemoveDriverInformation
2796	SystemProcessorIdleInformation
2797	SystemLegacyDriverInformation
2798	SystemCurrentTimeZoneInformation
2799	SystemLookasideInformation
2800	SystemTimeSlipNotification
2801	SystemSessionCreate
2802	SystemSessionDetach
2803	SystemSessionInformation
2804	SystemRangeStartInformation
2805	SystemVerifierInformation
2806	SystemVerifierThunkExtend
2807	SystemSessionProcessInformation
2808	SystemLoadGdiDriverInSystemSpace
2809	SystemNumaProcessorMap
2810	SystemPrefetcherInformation
2811	SystemExtendedProcessInformation
2812	SystemRecommendedSharedDataAlignment
2813	SystemComPlusPackage
2814	SystemNumaAvailableMemory
2815	SystemProcessorPowerInformation
2816	SystemEmulationBasicInformation
2817	SystemEmulationProcessorInformation
2818	SystemExtendedHandleInformation
2819	SystemLostDelayedWriteInformation
2820	SystemBigPoolInformation
2821	SystemSessionPoolTagInformation
2822	SystemSessionMappedViewInformation
2823	SystemHotpatchInformation
2824	SystemObjectSecurityMode
2825	SystemWatchdogTimerHandler
2826	SystemWatchdogTimerInformation
2827	SystemLogicalProcessorInformation
2828	SystemWow64SharedInformationObsolete
2829	SystemRegisterFirmwareTableInformationHandler
2830	SystemFirmwareTableInformation
2831	SystemModuleInformationEx
2832	SystemVerifierTriageInformation
2833	SystemSuperfetchInformation
2834	SystemMemoryListInformation
2835	SystemFileCacheInformationEx
2836	SystemThreadPriorityClientIdInformation
2837	SystemProcessorIdleCycleTimeInformation
2838	SystemVerifierCancellationInformation
2839	SystemProcessorPowerInformationEx
2840	SystemRefTraceInformation
2841	SystemSpecialPoolInformation
2842	SystemProcessIdInformation
2843	SystemErrorPortInformation
2844	SystemBootEnvironmentInformation
2845	SystemHypervisorInformation
2846	SystemVerifierInformationEx
2847	SystemTimeZoneInformation
2848	SystemImageFileExecutionOptionsInformation
2849	SystemCoverageInformation
2850	SystemPrefetchPatchInformation
2851	SystemVerifierFaultsInformation
2852	SystemSystemPartitionInformation
2853	SystemSystemDiskInformation
2854	SystemProcessorPerformanceDistribution
2855	SystemNumaProximityNodeInformation
2856	SystemDynamicTimeZoneInformation
2857	SystemCodeIntegrityInformation
2858	SystemProcessorMicrocodeUpdateInformation
2859	SystemProcessorBrandString
2860	SystemVirtualAddressInformation
2861	SystemLogicalProcessorAndGroupInformation
2862	SystemProcessorCycleTimeInformation
2863	SystemStoreInformation
2864	SystemRegistryAppendString
2865	SystemAitSamplingValue
2866	SystemVhdBootInformation
2867	SystemCpuQuotaInformation
2868	SystemNativeBasicInformation
2869	systemSpare1
2870	SystemLowPriorityIoInformation
2871	SystemTpmBootEntropyInformation
2872	SystemVerifierCountersInformation
2873	SystemPagedPoolInformationEx
2874	SystemSystemPtesInformationEx
2875	SystemNodeDistanceInformation
2876	SystemAcpiAuditInformation
2877	SystemBasicPerformanceInformation
2878	SystemQueryPerformanceCounterInformation
2879	SystemSessionBigPoolInformation
2880	SystemBootGraphicsInformation
2881	SystemScrubPhysicalMemoryInformation
2882	SystemBadPageInformation
2883	SystemProcessorProfileControlArea
2884	SystemCombinePhysicalMemoryInformation
2885	SystemEntropyInterruptTimingCallback
2886	SystemConsoleInformation
2887	SystemPlatformBinaryInformation
2888	SystemThrottleNotificationInformation
2889	SystemHypervisorProcessorCountInformation
2890	SystemDeviceDataInformation
2891	SystemDeviceDataEnumerationInformation
2892	SystemMemoryTopologyInformation
2893	SystemMemoryChannelInformation
2894	SystemBootLogoInformation
2895	SystemProcessorPerformanceInformationEx
2896	systemSpare0
2897	SystemSecureBootPolicyInformation
2898	SystemPageFileInformationEx
2899	SystemSecureBootInformation
2900	SystemEntropyInterruptTimingRawInformation
2901	SystemPortableWorkspaceEfiLauncherInformation
2902	SystemFullProcessInformation
2903	SystemKernelDebuggerInformationEx
2904	SystemBootMetadataInformation
2905	SystemSoftRebootInformation
2906	SystemElamCertificateInformation
2907	SystemOfflineDumpConfigInformation
2908	SystemProcessorFeaturesInformation
2909	SystemRegistryReconciliationInformation
2910	SystemEdidInformation
2911	SystemManufacturingInformation
2912	SystemEnergyEstimationConfigInformation
2913	SystemHypervisorDetailInformation
2914	SystemProcessorCycleStatsInformation
2915	SystemVmGenerationCountInformation
2916	SystemTrustedPlatformModuleInformation
2917	SystemKernelDebuggerFlags
2918	SystemCodeIntegrityPolicyInformation
2919	SystemIsolatedUserModeInformation
2920	SystemHardwareSecurityTestInterfaceResultsInformation
2921	SystemSingleModuleInformation
2922	SystemAllowedCpuSetsInformation
2923	SystemDmaProtectionInformation
2924	SystemInterruptCpuSetsInformation
2925	SystemSecureBootPolicyFullInformation
2926	SystemCodeIntegrityPolicyFullInformation
2927	SystemAffinitizedInterruptProcessorInformation
2928	SystemRootSiloInformation
2929)
2930
2931type RTL_PROCESS_MODULE_INFORMATION struct {
2932	Section          Handle
2933	MappedBase       uintptr
2934	ImageBase        uintptr
2935	ImageSize        uint32
2936	Flags            uint32
2937	LoadOrderIndex   uint16
2938	InitOrderIndex   uint16
2939	LoadCount        uint16
2940	OffsetToFileName uint16
2941	FullPathName     [256]byte
2942}
2943
2944type RTL_PROCESS_MODULES struct {
2945	NumberOfModules uint32
2946	Modules         [1]RTL_PROCESS_MODULE_INFORMATION
2947}
2948
2949// Constants for LocalAlloc flags.
2950const (
2951	LMEM_FIXED          = 0x0
2952	LMEM_MOVEABLE       = 0x2
2953	LMEM_NOCOMPACT      = 0x10
2954	LMEM_NODISCARD      = 0x20
2955	LMEM_ZEROINIT       = 0x40
2956	LMEM_MODIFY         = 0x80
2957	LMEM_DISCARDABLE    = 0xf00
2958	LMEM_VALID_FLAGS    = 0xf72
2959	LMEM_INVALID_HANDLE = 0x8000
2960	LHND                = LMEM_MOVEABLE | LMEM_ZEROINIT
2961	LPTR                = LMEM_FIXED | LMEM_ZEROINIT
2962	NONZEROLHND         = LMEM_MOVEABLE
2963	NONZEROLPTR         = LMEM_FIXED
2964)
2965
2966// Constants for the CreateNamedPipe-family of functions.
2967const (
2968	PIPE_ACCESS_INBOUND  = 0x1
2969	PIPE_ACCESS_OUTBOUND = 0x2
2970	PIPE_ACCESS_DUPLEX   = 0x3
2971
2972	PIPE_CLIENT_END = 0x0
2973	PIPE_SERVER_END = 0x1
2974
2975	PIPE_WAIT                  = 0x0
2976	PIPE_NOWAIT                = 0x1
2977	PIPE_READMODE_BYTE         = 0x0
2978	PIPE_READMODE_MESSAGE      = 0x2
2979	PIPE_TYPE_BYTE             = 0x0
2980	PIPE_TYPE_MESSAGE          = 0x4
2981	PIPE_ACCEPT_REMOTE_CLIENTS = 0x0
2982	PIPE_REJECT_REMOTE_CLIENTS = 0x8
2983
2984	PIPE_UNLIMITED_INSTANCES = 255
2985)
2986
2987// Constants for security attributes when opening named pipes.
2988const (
2989	SECURITY_ANONYMOUS      = SecurityAnonymous << 16
2990	SECURITY_IDENTIFICATION = SecurityIdentification << 16
2991	SECURITY_IMPERSONATION  = SecurityImpersonation << 16
2992	SECURITY_DELEGATION     = SecurityDelegation << 16
2993
2994	SECURITY_CONTEXT_TRACKING = 0x40000
2995	SECURITY_EFFECTIVE_ONLY   = 0x80000
2996
2997	SECURITY_SQOS_PRESENT     = 0x100000
2998	SECURITY_VALID_SQOS_FLAGS = 0x1f0000
2999)
3000
3001// ResourceID represents a 16-bit resource identifier, traditionally created with the MAKEINTRESOURCE macro.
3002type ResourceID uint16
3003
3004// ResourceIDOrString must be either a ResourceID, to specify a resource or resource type by ID,
3005// or a string, to specify a resource or resource type by name.
3006type ResourceIDOrString interface{}
3007
3008// Predefined resource names and types.
3009var (
3010	// Predefined names.
3011	CREATEPROCESS_MANIFEST_RESOURCE_ID                 ResourceID = 1
3012	ISOLATIONAWARE_MANIFEST_RESOURCE_ID                ResourceID = 2
3013	ISOLATIONAWARE_NOSTATICIMPORT_MANIFEST_RESOURCE_ID ResourceID = 3
3014	ISOLATIONPOLICY_MANIFEST_RESOURCE_ID               ResourceID = 4
3015	ISOLATIONPOLICY_BROWSER_MANIFEST_RESOURCE_ID       ResourceID = 5
3016	MINIMUM_RESERVED_MANIFEST_RESOURCE_ID              ResourceID = 1  // inclusive
3017	MAXIMUM_RESERVED_MANIFEST_RESOURCE_ID              ResourceID = 16 // inclusive
3018
3019	// Predefined types.
3020	RT_CURSOR       ResourceID = 1
3021	RT_BITMAP       ResourceID = 2
3022	RT_ICON         ResourceID = 3
3023	RT_MENU         ResourceID = 4
3024	RT_DIALOG       ResourceID = 5
3025	RT_STRING       ResourceID = 6
3026	RT_FONTDIR      ResourceID = 7
3027	RT_FONT         ResourceID = 8
3028	RT_ACCELERATOR  ResourceID = 9
3029	RT_RCDATA       ResourceID = 10
3030	RT_MESSAGETABLE ResourceID = 11
3031	RT_GROUP_CURSOR ResourceID = 12
3032	RT_GROUP_ICON   ResourceID = 14
3033	RT_VERSION      ResourceID = 16
3034	RT_DLGINCLUDE   ResourceID = 17
3035	RT_PLUGPLAY     ResourceID = 19
3036	RT_VXD          ResourceID = 20
3037	RT_ANICURSOR    ResourceID = 21
3038	RT_ANIICON      ResourceID = 22
3039	RT_HTML         ResourceID = 23
3040	RT_MANIFEST     ResourceID = 24
3041)
3042
3043type VS_FIXEDFILEINFO struct {
3044	Signature        uint32
3045	StrucVersion     uint32
3046	FileVersionMS    uint32
3047	FileVersionLS    uint32
3048	ProductVersionMS uint32
3049	ProductVersionLS uint32
3050	FileFlagsMask    uint32
3051	FileFlags        uint32
3052	FileOS           uint32
3053	FileType         uint32
3054	FileSubtype      uint32
3055	FileDateMS       uint32
3056	FileDateLS       uint32
3057}
3058
3059type COAUTHIDENTITY struct {
3060	User           *uint16
3061	UserLength     uint32
3062	Domain         *uint16
3063	DomainLength   uint32
3064	Password       *uint16
3065	PasswordLength uint32
3066	Flags          uint32
3067}
3068
3069type COAUTHINFO struct {
3070	AuthnSvc           uint32
3071	AuthzSvc           uint32
3072	ServerPrincName    *uint16
3073	AuthnLevel         uint32
3074	ImpersonationLevel uint32
3075	AuthIdentityData   *COAUTHIDENTITY
3076	Capabilities       uint32
3077}
3078
3079type COSERVERINFO struct {
3080	Reserved1 uint32
3081	Aame      *uint16
3082	AuthInfo  *COAUTHINFO
3083	Reserved2 uint32
3084}
3085
3086type BIND_OPTS3 struct {
3087	CbStruct          uint32
3088	Flags             uint32
3089	Mode              uint32
3090	TickCountDeadline uint32
3091	TrackFlags        uint32
3092	ClassContext      uint32
3093	Locale            uint32
3094	ServerInfo        *COSERVERINFO
3095	Hwnd              HWND
3096}
3097
3098const (
3099	CLSCTX_INPROC_SERVER          = 0x1
3100	CLSCTX_INPROC_HANDLER         = 0x2
3101	CLSCTX_LOCAL_SERVER           = 0x4
3102	CLSCTX_INPROC_SERVER16        = 0x8
3103	CLSCTX_REMOTE_SERVER          = 0x10
3104	CLSCTX_INPROC_HANDLER16       = 0x20
3105	CLSCTX_RESERVED1              = 0x40
3106	CLSCTX_RESERVED2              = 0x80
3107	CLSCTX_RESERVED3              = 0x100
3108	CLSCTX_RESERVED4              = 0x200
3109	CLSCTX_NO_CODE_DOWNLOAD       = 0x400
3110	CLSCTX_RESERVED5              = 0x800
3111	CLSCTX_NO_CUSTOM_MARSHAL      = 0x1000
3112	CLSCTX_ENABLE_CODE_DOWNLOAD   = 0x2000
3113	CLSCTX_NO_FAILURE_LOG         = 0x4000
3114	CLSCTX_DISABLE_AAA            = 0x8000
3115	CLSCTX_ENABLE_AAA             = 0x10000
3116	CLSCTX_FROM_DEFAULT_CONTEXT   = 0x20000
3117	CLSCTX_ACTIVATE_32_BIT_SERVER = 0x40000
3118	CLSCTX_ACTIVATE_64_BIT_SERVER = 0x80000
3119	CLSCTX_ENABLE_CLOAKING        = 0x100000
3120	CLSCTX_APPCONTAINER           = 0x400000
3121	CLSCTX_ACTIVATE_AAA_AS_IU     = 0x800000
3122	CLSCTX_PS_DLL                 = 0x80000000
3123
3124	COINIT_MULTITHREADED     = 0x0
3125	COINIT_APARTMENTTHREADED = 0x2
3126	COINIT_DISABLE_OLE1DDE   = 0x4
3127	COINIT_SPEED_OVER_MEMORY = 0x8
3128)
3129
3130// Flag for QueryFullProcessImageName.
3131const PROCESS_NAME_NATIVE = 1
3132
3133type ModuleInfo struct {
3134	BaseOfDll   uintptr
3135	SizeOfImage uint32
3136	EntryPoint  uintptr
3137}
3138