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