1
2
3
4
5 package windows
6
7 import (
8 "internal/runtime/syscall/windows"
9 "syscall"
10 "unsafe"
11 )
12
13
14 const (
15 TCP_KEEPIDLE = 0x03
16 TCP_KEEPCNT = 0x10
17 TCP_KEEPINTVL = 0x11
18
19 SIO_UDP_NETRESET = syscall.IOC_IN | syscall.IOC_VENDOR | 15
20 )
21
22 const (
23 FILE_READ_DATA = 0x00000001
24 FILE_READ_ATTRIBUTES = 0x00000080
25 FILE_READ_EA = 0x00000008
26 FILE_WRITE_DATA = 0x00000002
27 FILE_WRITE_ATTRIBUTES = 0x00000100
28 FILE_WRITE_EA = 0x00000010
29 FILE_APPEND_DATA = 0x00000004
30 FILE_EXECUTE = 0x00000020
31
32 FILE_GENERIC_READ = STANDARD_RIGHTS_READ | FILE_READ_DATA | FILE_READ_ATTRIBUTES | FILE_READ_EA | SYNCHRONIZE
33 FILE_GENERIC_WRITE = STANDARD_RIGHTS_WRITE | FILE_WRITE_DATA | FILE_WRITE_ATTRIBUTES | FILE_WRITE_EA | FILE_APPEND_DATA | SYNCHRONIZE
34 FILE_GENERIC_EXECUTE = STANDARD_RIGHTS_EXECUTE | FILE_READ_ATTRIBUTES | FILE_EXECUTE | SYNCHRONIZE
35
36 FILE_LIST_DIRECTORY = 0x00000001
37 FILE_TRAVERSE = 0x00000020
38
39 FILE_SHARE_READ = 0x00000001
40 FILE_SHARE_WRITE = 0x00000002
41 FILE_SHARE_DELETE = 0x00000004
42 FILE_ATTRIBUTE_READONLY = 0x00000001
43 FILE_ATTRIBUTE_HIDDEN = 0x00000002
44 FILE_ATTRIBUTE_SYSTEM = 0x00000004
45 FILE_ATTRIBUTE_DIRECTORY = 0x00000010
46 FILE_ATTRIBUTE_ARCHIVE = 0x00000020
47 FILE_ATTRIBUTE_DEVICE = 0x00000040
48 FILE_ATTRIBUTE_NORMAL = 0x00000080
49 FILE_ATTRIBUTE_TEMPORARY = 0x00000100
50 FILE_ATTRIBUTE_SPARSE_FILE = 0x00000200
51 FILE_ATTRIBUTE_REPARSE_POINT = 0x00000400
52 FILE_ATTRIBUTE_COMPRESSED = 0x00000800
53 FILE_ATTRIBUTE_OFFLINE = 0x00001000
54 FILE_ATTRIBUTE_NOT_CONTENT_INDEXED = 0x00002000
55 FILE_ATTRIBUTE_ENCRYPTED = 0x00004000
56 FILE_ATTRIBUTE_INTEGRITY_STREAM = 0x00008000
57 FILE_ATTRIBUTE_VIRTUAL = 0x00010000
58 FILE_ATTRIBUTE_NO_SCRUB_DATA = 0x00020000
59 FILE_ATTRIBUTE_RECALL_ON_OPEN = 0x00040000
60 FILE_ATTRIBUTE_RECALL_ON_DATA_ACCESS = 0x00400000
61
62 INVALID_FILE_ATTRIBUTES = 0xffffffff
63 )
64
65
66 type ACCESS_MASK uint32
67
68
69 const (
70 DELETE = 0x00010000
71 READ_CONTROL = 0x00020000
72 WRITE_DAC = 0x00040000
73 WRITE_OWNER = 0x00080000
74 SYNCHRONIZE = 0x00100000
75 STANDARD_RIGHTS_REQUIRED = 0x000F0000
76 STANDARD_RIGHTS_READ = READ_CONTROL
77 STANDARD_RIGHTS_WRITE = READ_CONTROL
78 STANDARD_RIGHTS_EXECUTE = READ_CONTROL
79 STANDARD_RIGHTS_ALL = 0x001F0000
80 SPECIFIC_RIGHTS_ALL = 0x0000FFFF
81 ACCESS_SYSTEM_SECURITY = 0x01000000
82 MAXIMUM_ALLOWED = 0x02000000
83 GENERIC_READ = 0x80000000
84 GENERIC_WRITE = 0x40000000
85 GENERIC_EXECUTE = 0x20000000
86 GENERIC_ALL = 0x10000000
87 )
88
89
90 type ACL struct {
91 AclRevision byte
92 Sbz1 byte
93 AclSize uint16
94 AceCount uint16
95 Sbz2 uint16
96 }
97
98
99 type IO_STATUS_BLOCK struct {
100 Status NTStatus
101 Information uintptr
102 }
103
104
105 type OBJECT_ATTRIBUTES struct {
106 Length uint32
107 RootDirectory syscall.Handle
108 ObjectName *NTUnicodeString
109 Attributes uint32
110 SecurityDescriptor *SECURITY_DESCRIPTOR
111 SecurityQoS *SECURITY_QUALITY_OF_SERVICE
112 }
113
114
115 func (o *OBJECT_ATTRIBUTES) init(root syscall.Handle, name string) error {
116 if name == "." {
117 name = ""
118 }
119 objectName, err := NewNTUnicodeString(name)
120 if err != nil {
121 return err
122 }
123 o.ObjectName = objectName
124 if root != syscall.InvalidHandle {
125 o.RootDirectory = root
126 }
127 o.Length = uint32(unsafe.Sizeof(*o))
128 return nil
129 }
130
131
132 const (
133 OBJ_INHERIT = 0x00000002
134 OBJ_PERMANENT = 0x00000010
135 OBJ_EXCLUSIVE = 0x00000020
136 OBJ_CASE_INSENSITIVE = 0x00000040
137 OBJ_OPENIF = 0x00000080
138 OBJ_OPENLINK = 0x00000100
139 OBJ_KERNEL_HANDLE = 0x00000200
140 OBJ_FORCE_ACCESS_CHECK = 0x00000400
141 OBJ_IGNORE_IMPERSONATED_DEVICEMAP = 0x00000800
142 OBJ_DONT_REPARSE = 0x00001000
143 OBJ_VALID_ATTRIBUTES = 0x00001FF2
144 )
145
146
147 type SECURITY_DESCRIPTOR struct {
148 revision byte
149 sbz1 byte
150 control SECURITY_DESCRIPTOR_CONTROL
151 owner *syscall.SID
152 group *syscall.SID
153 sacl *ACL
154 dacl *ACL
155 }
156
157
158 type SECURITY_DESCRIPTOR_CONTROL uint16
159
160
161 type SECURITY_QUALITY_OF_SERVICE struct {
162 Length uint32
163 ImpersonationLevel uint32
164 ContextTrackingMode byte
165 EffectiveOnly byte
166 }
167
168
169
170 const (
171 O_FILE_FLAG_OPEN_NO_RECALL = 0x00100000
172 O_FILE_FLAG_OPEN_REPARSE_POINT = 0x00200000
173 O_FILE_FLAG_SESSION_AWARE = 0x00800000
174 O_FILE_FLAG_POSIX_SEMANTICS = 0x01000000
175 O_FILE_FLAG_BACKUP_SEMANTICS = 0x02000000
176 O_FILE_FLAG_DELETE_ON_CLOSE = 0x04000000
177 O_FILE_FLAG_SEQUENTIAL_SCAN = 0x08000000
178 O_FILE_FLAG_RANDOM_ACCESS = 0x10000000
179 O_FILE_FLAG_NO_BUFFERING = 0x20000000
180 O_FILE_FLAG_OVERLAPPED = 0x40000000
181 O_FILE_FLAG_WRITE_THROUGH = 0x80000000
182 )
183
184 const (
185
186 FILE_SUPERSEDE = 0x00000000
187 FILE_OPEN = 0x00000001
188 FILE_CREATE = 0x00000002
189 FILE_OPEN_IF = 0x00000003
190 FILE_OVERWRITE = 0x00000004
191 FILE_OVERWRITE_IF = 0x00000005
192 FILE_MAXIMUM_DISPOSITION = 0x00000005
193
194
195 FILE_DIRECTORY_FILE = 0x00000001
196 FILE_WRITE_THROUGH = 0x00000002
197 FILE_SEQUENTIAL_ONLY = 0x00000004
198 FILE_NO_INTERMEDIATE_BUFFERING = 0x00000008
199 FILE_SYNCHRONOUS_IO_ALERT = 0x00000010
200 FILE_SYNCHRONOUS_IO_NONALERT = 0x00000020
201 FILE_NON_DIRECTORY_FILE = 0x00000040
202 FILE_CREATE_TREE_CONNECTION = 0x00000080
203 FILE_COMPLETE_IF_OPLOCKED = 0x00000100
204 FILE_NO_EA_KNOWLEDGE = 0x00000200
205 FILE_OPEN_REMOTE_INSTANCE = 0x00000400
206 FILE_RANDOM_ACCESS = 0x00000800
207 FILE_DELETE_ON_CLOSE = 0x00001000
208 FILE_OPEN_BY_FILE_ID = 0x00002000
209 FILE_OPEN_FOR_BACKUP_INTENT = 0x00004000
210 FILE_NO_COMPRESSION = 0x00008000
211 FILE_OPEN_REQUIRING_OPLOCK = 0x00010000
212 FILE_DISALLOW_EXCLUSIVE = 0x00020000
213 FILE_SESSION_AWARE = 0x00040000
214 FILE_RESERVE_OPFILTER = 0x00100000
215 FILE_OPEN_REPARSE_POINT = 0x00200000
216 FILE_OPEN_NO_RECALL = 0x00400000
217 FILE_OPEN_FOR_FREE_SPACE_QUERY = 0x00800000
218 )
219
220
221 type FILE_DISPOSITION_INFO struct {
222 DeleteFile byte
223 }
224
225
226 type FILE_DISPOSITION_INFORMATION struct {
227 DeleteFile byte
228 }
229
230
231 type FILE_DISPOSITION_INFORMATION_EX struct {
232 Flags uint32
233 }
234
235
236 const (
237 FILE_DISPOSITION_DO_NOT_DELETE = 0x00000000
238 FILE_DISPOSITION_DELETE = 0x00000001
239 FILE_DISPOSITION_POSIX_SEMANTICS = 0x00000002
240 FILE_DISPOSITION_FORCE_IMAGE_SECTION_CHECK = 0x00000004
241 FILE_DISPOSITION_ON_CLOSE = 0x00000008
242 FILE_DISPOSITION_IGNORE_READONLY_ATTRIBUTE = 0x00000010
243 )
244
245
246 const (
247 FILE_RENAME_REPLACE_IF_EXISTS = 0x00000001
248 FILE_RENAME_POSIX_SEMANTICS = 0x00000002
249 )
250
251
252 type FILE_RENAME_INFORMATION struct {
253 ReplaceIfExists byte
254 RootDirectory syscall.Handle
255 FileNameLength uint32
256 FileName [syscall.MAX_PATH]uint16
257 }
258
259
260 type FILE_RENAME_INFORMATION_EX struct {
261 Flags uint32
262 RootDirectory syscall.Handle
263 FileNameLength uint32
264 FileName [syscall.MAX_PATH]uint16
265 }
266
267
268 type FILE_LINK_INFORMATION struct {
269 ReplaceIfExists byte
270 RootDirectory syscall.Handle
271 FileNameLength uint32
272 FileName [syscall.MAX_PATH]uint16
273 }
274
275 const (
276 FileIoCompletionNotificationInformation = 41
277 FileReplaceCompletionInformation = 61
278 )
279
280 type FILE_IO_COMPLETION_NOTIFICATION_INFORMATION struct {
281 Flags uint32
282 }
283
284
285 type FILE_COMPLETION_INFORMATION struct {
286 Port syscall.Handle
287 Key uintptr
288 }
289
290
291
292 const VER_NT_WORKSTATION = 0x0000001
293
294 type MemoryBasicInformation = windows.MemoryBasicInformation
295
296 type Context = windows.Context
297
298 const FileFlagsMask = 0xFFF00000
299
300 const ValidFileFlagsMask = O_FILE_FLAG_OPEN_REPARSE_POINT |
301 O_FILE_FLAG_BACKUP_SEMANTICS |
302 O_FILE_FLAG_OVERLAPPED |
303 O_FILE_FLAG_OPEN_NO_RECALL |
304 O_FILE_FLAG_SESSION_AWARE |
305 O_FILE_FLAG_POSIX_SEMANTICS |
306 O_FILE_FLAG_DELETE_ON_CLOSE |
307 O_FILE_FLAG_SEQUENTIAL_SCAN |
308 O_FILE_FLAG_NO_BUFFERING |
309 O_FILE_FLAG_RANDOM_ACCESS |
310 O_FILE_FLAG_WRITE_THROUGH
311
312
313 type TRUSTEE struct {
314 MultipleTrustee *TRUSTEE
315 MultipleTrusteeOperation uint32
316 TrusteeForm uint32
317 TrusteeType uint32
318 Name uintptr
319 }
320
321
322 const (
323 TRUSTEE_IS_SID = 0x0
324 TRUSTEE_IS_NAME = 0x1
325 TRUSTEE_BAD_FORM = 0x2
326 TRUSTEE_IS_OBJECTS_AND_SID = 0x3
327 TRUSTEE_IS_OBJECTS_AND_NAME = 0x4
328 )
329
330
331 type EXPLICIT_ACCESS struct {
332 AccessPermissions uint32
333 AccessMode uint32
334 Inheritance uint32
335 Trustee TRUSTEE
336 }
337
338
339 const (
340 NOT_USED_ACCESS = 0x0
341 GRANT_ACCESS = 0x1
342 SET_ACCESS = 0x2
343 DENY_ACCESS = 0x3
344 REVOKE_ACCESS = 0x4
345 SET_AUDIT_SUCCESS = 0x5
346 SET_AUDIT_FAILURE = 0x6
347 )
348
349
350 const (
351 NO_INHERITANCE = 0x0
352 SUB_OBJECTS_ONLY_INHERIT = 0x1
353 SUB_CONTAINERS_ONLY_INHERIT = 0x2
354 SUB_CONTAINERS_AND_OBJECTS_INHERIT = 0x3
355 INHERIT_NO_PROPAGATE = 0x4
356 INHERIT_ONLY = 0x8
357 )
358
359
360 const (
361 SE_UNKNOWN_OBJECT_TYPE = 0x0
362 SE_FILE_OBJECT = 0x1
363 SE_SERVICE = 0x2
364 SE_PRINTER = 0x3
365 SE_REGISTRY_KEY = 0x4
366 SE_LMSHARE = 0x5
367 SE_KERNEL_OBJECT = 0x6
368 SE_WINDOW_OBJECT = 0x7
369 SE_DS_OBJECT = 0x8
370 SE_DS_OBJECT_ALL = 0x9
371 SE_PROVIDER_DEFINED_OBJECT = 0xa
372 SE_WMIGUID_OBJECT = 0xb
373 SE_REGISTRY_WOW64_32KEY = 0xc
374 SE_REGISTRY_WOW64_64KEY = 0xd
375 )
376
377
378 const (
379 OWNER_SECURITY_INFORMATION = 0x00000001
380 GROUP_SECURITY_INFORMATION = 0x00000002
381 DACL_SECURITY_INFORMATION = 0x00000004
382 SACL_SECURITY_INFORMATION = 0x00000008
383 LABEL_SECURITY_INFORMATION = 0x00000010
384 UNPROTECTED_SACL_SECURITY_INFORMATION = 0x10000000
385 UNPROTECTED_DACL_SECURITY_INFORMATION = 0x20000000
386 PROTECTED_SACL_SECURITY_INFORMATION = 0x40000000
387 PROTECTED_DACL_SECURITY_INFORMATION = 0x80000000
388 ATTRIBUTE_SECURITY_INFORMATION = 0x00000020
389 SCOPE_SECURITY_INFORMATION = 0x00000040
390 PROCESS_TRUST_LABEL_SECURITY_INFORMATION = 0x00000080
391 BACKUP_SECURITY_INFORMATION = 0x00010000
392 )
393
394
395
396 const (
397 PF_ARM_64BIT_LOADSTORE_ATOMIC = 25
398 PF_ARM_DIVIDE_INSTRUCTION_AVAILABLE = 24
399 PF_ARM_EXTERNAL_CACHE_AVAILABLE = 26
400 PF_ARM_FMAC_INSTRUCTIONS_AVAILABLE = 27
401 PF_ARM_VFP_32_REGISTERS_AVAILABLE = 18
402 PF_3DNOW_INSTRUCTIONS_AVAILABLE = 7
403 PF_CHANNELS_ENABLED = 16
404 PF_COMPARE_EXCHANGE_DOUBLE = 2
405 PF_COMPARE_EXCHANGE128 = 14
406 PF_COMPARE64_EXCHANGE128 = 15
407 PF_FASTFAIL_AVAILABLE = 23
408 PF_FLOATING_POINT_EMULATED = 1
409 PF_FLOATING_POINT_PRECISION_ERRATA = 0
410 PF_MMX_INSTRUCTIONS_AVAILABLE = 3
411 PF_NX_ENABLED = 12
412 PF_PAE_ENABLED = 9
413 PF_RDTSC_INSTRUCTION_AVAILABLE = 8
414 PF_RDWRFSGSBASE_AVAILABLE = 22
415 PF_SECOND_LEVEL_ADDRESS_TRANSLATION = 20
416 PF_SSE3_INSTRUCTIONS_AVAILABLE = 13
417 PF_SSSE3_INSTRUCTIONS_AVAILABLE = 36
418 PF_SSE4_1_INSTRUCTIONS_AVAILABLE = 37
419 PF_SSE4_2_INSTRUCTIONS_AVAILABLE = 38
420 PF_AVX_INSTRUCTIONS_AVAILABLE = 39
421 PF_AVX2_INSTRUCTIONS_AVAILABLE = 40
422 PF_AVX512F_INSTRUCTIONS_AVAILABLE = 41
423 PF_VIRT_FIRMWARE_ENABLED = 21
424 PF_XMMI_INSTRUCTIONS_AVAILABLE = 6
425 PF_XMMI64_INSTRUCTIONS_AVAILABLE = 10
426 PF_XSAVE_ENABLED = 17
427 PF_ARM_V8_INSTRUCTIONS_AVAILABLE = 29
428 PF_ARM_V8_CRYPTO_INSTRUCTIONS_AVAILABLE = 30
429 PF_ARM_V8_CRC32_INSTRUCTIONS_AVAILABLE = 31
430 PF_ARM_V81_ATOMIC_INSTRUCTIONS_AVAILABLE = 34
431 PF_ARM_V82_DP_INSTRUCTIONS_AVAILABLE = 43
432 PF_ARM_V83_JSCVT_INSTRUCTIONS_AVAILABLE = 44
433 PF_ARM_V83_LRCPC_INSTRUCTIONS_AVAILABLE = 45
434 PF_ARM_SVE_INSTRUCTIONS_AVAILABLE = 46
435 PF_ARM_SVE2_INSTRUCTIONS_AVAILABLE = 47
436 PF_ARM_SVE2_1_INSTRUCTIONS_AVAILABLE = 48
437 PF_ARM_SVE_AES_INSTRUCTIONS_AVAILABLE = 49
438 PF_ARM_SVE_PMULL128_INSTRUCTIONS_AVAILABLE = 50
439 PF_ARM_SVE_BITPERM_INSTRUCTIONS_AVAILABLE = 51
440 PF_ARM_SVE_BF16_INSTRUCTIONS_AVAILABLE = 52
441 PF_ARM_SVE_EBF16_INSTRUCTIONS_AVAILABLE = 53
442 PF_ARM_SVE_B16B16_INSTRUCTIONS_AVAILABLE = 54
443 PF_ARM_SVE_SHA3_INSTRUCTIONS_AVAILABLE = 55
444 PF_ARM_SVE_SM4_INSTRUCTIONS_AVAILABLE = 56
445 PF_ARM_SVE_I8MM_INSTRUCTIONS_AVAILABLE = 57
446 PF_ARM_SVE_F32MM_INSTRUCTIONS_AVAILABLE = 58
447 PF_ARM_SVE_F64MM_INSTRUCTIONS_AVAILABLE = 59
448 PF_BMI2_INSTRUCTIONS_AVAILABLE = 60
449 PF_MOVDIR64B_INSTRUCTION_AVAILABLE = 61
450 PF_ARM_LSE2_AVAILABLE = 62
451 PF_ARM_SHA3_INSTRUCTIONS_AVAILABLE = 64
452 PF_ARM_SHA512_INSTRUCTIONS_AVAILABLE = 65
453 PF_ARM_V82_I8MM_INSTRUCTIONS_AVAILABLE = 66
454 PF_ARM_V82_FP16_INSTRUCTIONS_AVAILABLE = 67
455 PF_ARM_V86_BF16_INSTRUCTIONS_AVAILABLE = 68
456 PF_ARM_V86_EBF16_INSTRUCTIONS_AVAILABLE = 69
457 PF_ARM_SME_INSTRUCTIONS_AVAILABLE = 70
458 PF_ARM_SME2_INSTRUCTIONS_AVAILABLE = 71
459 PF_ARM_SME2_1_INSTRUCTIONS_AVAILABLE = 72
460 PF_ARM_SME2_2_INSTRUCTIONS_AVAILABLE = 73
461 PF_ARM_SME_AES_INSTRUCTIONS_AVAILABLE = 74
462 PF_ARM_SME_SBITPERM_INSTRUCTIONS_AVAILABLE = 75
463 PF_ARM_SME_SF8MM4_INSTRUCTIONS_AVAILABLE = 76
464 PF_ARM_SME_SF8MM8_INSTRUCTIONS_AVAILABLE = 77
465 PF_ARM_SME_SF8DP2_INSTRUCTIONS_AVAILABLE = 78
466 PF_ARM_SME_SF8DP4_INSTRUCTIONS_AVAILABLE = 79
467 PF_ARM_SME_SF8FMA_INSTRUCTIONS_AVAILABLE = 80
468 PF_ARM_SME_F8F32_INSTRUCTIONS_AVAILABLE = 81
469 PF_ARM_SME_F8F16_INSTRUCTIONS_AVAILABLE = 82
470 PF_ARM_SME_F16F16_INSTRUCTIONS_AVAILABLE = 83
471 PF_ARM_SME_B16B16_INSTRUCTIONS_AVAILABLE = 84
472 PF_ARM_SME_F64F64_INSTRUCTIONS_AVAILABLE = 85
473 PF_ARM_SME_I16I64_INSTRUCTIONS_AVAILABLE = 86
474 PF_ARM_SME_LUTv2_INSTRUCTIONS_AVAILABLE = 87
475 PF_ARM_SME_FA64_INSTRUCTIONS_AVAILABLE = 88
476 PF_UMONITOR_INSTRUCTION_AVAILABLE = 89
477 )
478
View as plain text