1
2
3
4
5 package windows
6
7 import (
8 "syscall"
9 "unsafe"
10 )
11
12
13 const (
14 TCP_KEEPIDLE = 0x03
15 TCP_KEEPCNT = 0x10
16 TCP_KEEPINTVL = 0x11
17
18 SIO_UDP_NETRESET = syscall.IOC_IN | syscall.IOC_VENDOR | 15
19 )
20
21 const (
22 FILE_READ_DATA = 0x00000001
23 FILE_READ_ATTRIBUTES = 0x00000080
24 FILE_READ_EA = 0x00000008
25 FILE_WRITE_DATA = 0x00000002
26 FILE_WRITE_ATTRIBUTES = 0x00000100
27 FILE_WRITE_EA = 0x00000010
28 FILE_APPEND_DATA = 0x00000004
29 FILE_EXECUTE = 0x00000020
30
31 FILE_GENERIC_READ = STANDARD_RIGHTS_READ | FILE_READ_DATA | FILE_READ_ATTRIBUTES | FILE_READ_EA | SYNCHRONIZE
32 FILE_GENERIC_WRITE = STANDARD_RIGHTS_WRITE | FILE_WRITE_DATA | FILE_WRITE_ATTRIBUTES | FILE_WRITE_EA | FILE_APPEND_DATA | SYNCHRONIZE
33 FILE_GENERIC_EXECUTE = STANDARD_RIGHTS_EXECUTE | FILE_READ_ATTRIBUTES | FILE_EXECUTE | SYNCHRONIZE
34
35 FILE_LIST_DIRECTORY = 0x00000001
36 FILE_TRAVERSE = 0x00000020
37
38 FILE_SHARE_READ = 0x00000001
39 FILE_SHARE_WRITE = 0x00000002
40 FILE_SHARE_DELETE = 0x00000004
41 FILE_ATTRIBUTE_READONLY = 0x00000001
42 FILE_ATTRIBUTE_HIDDEN = 0x00000002
43 FILE_ATTRIBUTE_SYSTEM = 0x00000004
44 FILE_ATTRIBUTE_DIRECTORY = 0x00000010
45 FILE_ATTRIBUTE_ARCHIVE = 0x00000020
46 FILE_ATTRIBUTE_DEVICE = 0x00000040
47 FILE_ATTRIBUTE_NORMAL = 0x00000080
48 FILE_ATTRIBUTE_TEMPORARY = 0x00000100
49 FILE_ATTRIBUTE_SPARSE_FILE = 0x00000200
50 FILE_ATTRIBUTE_REPARSE_POINT = 0x00000400
51 FILE_ATTRIBUTE_COMPRESSED = 0x00000800
52 FILE_ATTRIBUTE_OFFLINE = 0x00001000
53 FILE_ATTRIBUTE_NOT_CONTENT_INDEXED = 0x00002000
54 FILE_ATTRIBUTE_ENCRYPTED = 0x00004000
55 FILE_ATTRIBUTE_INTEGRITY_STREAM = 0x00008000
56 FILE_ATTRIBUTE_VIRTUAL = 0x00010000
57 FILE_ATTRIBUTE_NO_SCRUB_DATA = 0x00020000
58 FILE_ATTRIBUTE_RECALL_ON_OPEN = 0x00040000
59 FILE_ATTRIBUTE_RECALL_ON_DATA_ACCESS = 0x00400000
60
61 INVALID_FILE_ATTRIBUTES = 0xffffffff
62 )
63
64
65 type ACCESS_MASK uint32
66
67
68 const (
69 DELETE = 0x00010000
70 READ_CONTROL = 0x00020000
71 WRITE_DAC = 0x00040000
72 WRITE_OWNER = 0x00080000
73 SYNCHRONIZE = 0x00100000
74 STANDARD_RIGHTS_REQUIRED = 0x000F0000
75 STANDARD_RIGHTS_READ = READ_CONTROL
76 STANDARD_RIGHTS_WRITE = READ_CONTROL
77 STANDARD_RIGHTS_EXECUTE = READ_CONTROL
78 STANDARD_RIGHTS_ALL = 0x001F0000
79 SPECIFIC_RIGHTS_ALL = 0x0000FFFF
80 ACCESS_SYSTEM_SECURITY = 0x01000000
81 MAXIMUM_ALLOWED = 0x02000000
82 GENERIC_READ = 0x80000000
83 GENERIC_WRITE = 0x40000000
84 GENERIC_EXECUTE = 0x20000000
85 GENERIC_ALL = 0x10000000
86 )
87
88
89 type ACL struct {
90 AclRevision byte
91 Sbz1 byte
92 AclSize uint16
93 AceCount uint16
94 Sbz2 uint16
95 }
96
97
98 type IO_STATUS_BLOCK struct {
99 Status NTStatus
100 Information uintptr
101 }
102
103
104 type OBJECT_ATTRIBUTES struct {
105 Length uint32
106 RootDirectory syscall.Handle
107 ObjectName *NTUnicodeString
108 Attributes uint32
109 SecurityDescriptor *SECURITY_DESCRIPTOR
110 SecurityQoS *SECURITY_QUALITY_OF_SERVICE
111 }
112
113
114 func (o *OBJECT_ATTRIBUTES) init(root syscall.Handle, name string) error {
115 if name == "." {
116 name = ""
117 }
118 objectName, err := NewNTUnicodeString(name)
119 if err != nil {
120 return err
121 }
122 o.ObjectName = objectName
123 if root != syscall.InvalidHandle {
124 o.RootDirectory = root
125 }
126 o.Length = uint32(unsafe.Sizeof(*o))
127 return nil
128 }
129
130
131 const (
132 OBJ_INHERIT = 0x00000002
133 OBJ_PERMANENT = 0x00000010
134 OBJ_EXCLUSIVE = 0x00000020
135 OBJ_CASE_INSENSITIVE = 0x00000040
136 OBJ_OPENIF = 0x00000080
137 OBJ_OPENLINK = 0x00000100
138 OBJ_KERNEL_HANDLE = 0x00000200
139 OBJ_FORCE_ACCESS_CHECK = 0x00000400
140 OBJ_IGNORE_IMPERSONATED_DEVICEMAP = 0x00000800
141 OBJ_DONT_REPARSE = 0x00001000
142 OBJ_VALID_ATTRIBUTES = 0x00001FF2
143 )
144
145
146 type SECURITY_DESCRIPTOR struct {
147 revision byte
148 sbz1 byte
149 control SECURITY_DESCRIPTOR_CONTROL
150 owner *syscall.SID
151 group *syscall.SID
152 sacl *ACL
153 dacl *ACL
154 }
155
156
157 type SECURITY_DESCRIPTOR_CONTROL uint16
158
159
160 type SECURITY_QUALITY_OF_SERVICE struct {
161 Length uint32
162 ImpersonationLevel uint32
163 ContextTrackingMode byte
164 EffectiveOnly byte
165 }
166
167 const (
168
169 FILE_SUPERSEDE = 0x00000000
170 FILE_OPEN = 0x00000001
171 FILE_CREATE = 0x00000002
172 FILE_OPEN_IF = 0x00000003
173 FILE_OVERWRITE = 0x00000004
174 FILE_OVERWRITE_IF = 0x00000005
175 FILE_MAXIMUM_DISPOSITION = 0x00000005
176
177
178 FILE_DIRECTORY_FILE = 0x00000001
179 FILE_WRITE_THROUGH = 0x00000002
180 FILE_SEQUENTIAL_ONLY = 0x00000004
181 FILE_NO_INTERMEDIATE_BUFFERING = 0x00000008
182 FILE_SYNCHRONOUS_IO_ALERT = 0x00000010
183 FILE_SYNCHRONOUS_IO_NONALERT = 0x00000020
184 FILE_NON_DIRECTORY_FILE = 0x00000040
185 FILE_CREATE_TREE_CONNECTION = 0x00000080
186 FILE_COMPLETE_IF_OPLOCKED = 0x00000100
187 FILE_NO_EA_KNOWLEDGE = 0x00000200
188 FILE_OPEN_REMOTE_INSTANCE = 0x00000400
189 FILE_RANDOM_ACCESS = 0x00000800
190 FILE_DELETE_ON_CLOSE = 0x00001000
191 FILE_OPEN_BY_FILE_ID = 0x00002000
192 FILE_OPEN_FOR_BACKUP_INTENT = 0x00004000
193 FILE_NO_COMPRESSION = 0x00008000
194 FILE_OPEN_REQUIRING_OPLOCK = 0x00010000
195 FILE_DISALLOW_EXCLUSIVE = 0x00020000
196 FILE_RESERVE_OPFILTER = 0x00100000
197 FILE_OPEN_REPARSE_POINT = 0x00200000
198 FILE_OPEN_NO_RECALL = 0x00400000
199 FILE_OPEN_FOR_FREE_SPACE_QUERY = 0x00800000
200 )
201
202
203 type FILE_DISPOSITION_INFORMATION struct {
204 DeleteFile bool
205 }
206
207
208 type FILE_DISPOSITION_INFORMATION_EX struct {
209 Flags uint32
210 }
211
212
213 const (
214 FILE_DISPOSITION_DO_NOT_DELETE = 0x00000000
215 FILE_DISPOSITION_DELETE = 0x00000001
216 FILE_DISPOSITION_POSIX_SEMANTICS = 0x00000002
217 FILE_DISPOSITION_FORCE_IMAGE_SECTION_CHECK = 0x00000004
218 FILE_DISPOSITION_ON_CLOSE = 0x00000008
219 FILE_DISPOSITION_IGNORE_READONLY_ATTRIBUTE = 0x00000010
220 )
221
222
223 const (
224 FILE_RENAME_REPLACE_IF_EXISTS = 0x00000001
225 FILE_RENAME_POSIX_SEMANTICS = 0x00000002
226 )
227
228
229 type FILE_RENAME_INFORMATION struct {
230 ReplaceIfExists bool
231 RootDirectory syscall.Handle
232 FileNameLength uint32
233 FileName [syscall.MAX_PATH]uint16
234 }
235
236
237 type FILE_RENAME_INFORMATION_EX struct {
238 Flags uint32
239 RootDirectory syscall.Handle
240 FileNameLength uint32
241 FileName [syscall.MAX_PATH]uint16
242 }
243
244
245 type FILE_LINK_INFORMATION struct {
246 ReplaceIfExists bool
247 RootDirectory syscall.Handle
248 FileNameLength uint32
249 FileName [syscall.MAX_PATH]uint16
250 }
251
252 const FileReplaceCompletionInformation = 61
253
254
255 type FILE_COMPLETION_INFORMATION struct {
256 Port syscall.Handle
257 Key uintptr
258 }
259
View as plain text