OSDN Git Service

* NEWS: Add and adjust release notes for 4.0.
[mingw/mingw-org-wsl.git] / include / accctrl.h
1 /**
2  * @file accctrl.h
3  * Copyright 2012, 2013 MinGW.org project
4  *
5  * Permission is hereby granted, free of charge, to any person obtaining a
6  * copy of this software and associated documentation files (the "Software"),
7  * to deal in the Software without restriction, including without limitation
8  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9  * and/or sell copies of the Software, and to permit persons to whom the
10  * Software is furnished to do so, subject to the following conditions:
11  * 
12  * The above copyright notice and this permission notice (including the next
13  * paragraph) shall be included in all copies or substantial portions of the
14  * Software.
15  * 
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22  * DEALINGS IN THE SOFTWARE.
23  */
24 #ifndef _ACCCTRL_H
25 #define _ACCCTRL_H
26 #pragma GCC system_header
27 #include <_mingw.h>
28
29 #ifdef __cplusplus
30 extern "C" {
31 #endif
32
33 #define AccFree LocalFree
34 #define ACTRL_RESERVED            0x00000000
35 #define ACTRL_ACCESS_PROTECTED    0x00000001
36 #define ACTRL_ACCESS_ALLOWED      0x00000001
37 #define ACTRL_ACCESS_DENIED       0x00000002
38 #define ACTRL_AUDIT_SUCCESS       0x00000004
39 #define ACTRL_AUDIT_FAILURE       0x00000008
40 #define ACTRL_SYSTEM_ACCESS       0x04000000
41 #define ACTRL_DELETE              0x08000000
42 #define ACTRL_READ_CONTROL        0x10000000
43 #define ACTRL_CHANGE_ACCESS       0x20000000
44 #define ACTRL_CHANGE_OWNER        0x40000000
45 #define ACTRL_SYNCHRONIZE         0x80000000
46 #define ACTRL_STD_RIGHTS_ALL      0xf8000000
47
48 #define ACTRL_FILE_READ           0x00000001
49 #define ACTRL_FILE_WRITE          0x00000002
50 #define ACTRL_FILE_APPEND         0x00000004
51 #define ACTRL_FILE_READ_PROP      0x00000008
52 #define ACTRL_FILE_WRITE_PROP     0x00000010
53 #define ACTRL_FILE_EXECUTE        0x00000020
54 #define ACTRL_FILE_READ_ATTRIB    0x00000080
55 #define ACTRL_FILE_WRITE_ATTRIB   0x00000100
56 #define ACTRL_FILE_CREATE_PIPE    0x00000200
57 #define ACTRL_DIR_LIST            0x00000001
58 #define ACTRL_DIR_CREATE_OBJECT   0x00000002
59 #define ACTRL_DIR_CREATE_CHILD    0x00000004
60 #define ACTRL_DIR_DELETE_CHILD    0x00000040
61 #define ACTRL_DIR_TRAVERSE        0x00000020
62 #define ACTRL_KERNEL_TERMINATE    0x00000001
63 #define ACTRL_KERNEL_THREAD       0x00000002
64 #define ACTRL_KERNEL_VM           0x00000004
65 #define ACTRL_KERNEL_VM_READ      0x00000008
66 #define ACTRL_KERNEL_VM_WRITE     0x00000010
67 #define ACTRL_KERNEL_DUP_HANDLE   0x00000020
68 #define ACTRL_KERNEL_PROCESS      0x00000040
69 #define ACTRL_KERNEL_SET_INFO     0x00000080
70 #define ACTRL_KERNEL_GET_INFO     0x00000100
71 #define ACTRL_KERNEL_CONTROL      0x00000200
72 #define ACTRL_KERNEL_ALERT        0x00000400
73 #define ACTRL_KERNEL_GET_CONTEXT  0x00000800
74 #define ACTRL_KERNEL_SET_CONTEXT  0x00001000
75 #define ACTRL_KERNEL_TOKEN        0x00002000
76 #define ACTRL_KERNEL_IMPERSONATE  0x00004000
77 #define ACTRL_KERNEL_DIMPERSONATE 0x00008000
78 #define ACTRL_PRINT_SADMIN        0x00000001
79 #define ACTRL_PRINT_SLIST         0x00000002
80 #define ACTRL_PRINT_PADMIN        0x00000004
81 #define ACTRL_PRINT_PUSE          0x00000008
82 #define ACTRL_PRINT_JADMIN        0x00000010
83 #define ACTRL_SVC_GET_INFO        0x00000001
84 #define ACTRL_SVC_SET_INFO        0x00000002
85 #define ACTRL_SVC_STATUS          0x00000004
86 #define ACTRL_SVC_LIST            0x00000008
87 #define ACTRL_SVC_START           0x00000010
88 #define ACTRL_SVC_STOP            0x00000020
89 #define ACTRL_SVC_PAUSE           0x00000040
90 #define ACTRL_SVC_INTERROGATE     0x00000080
91 #define ACTRL_SVC_UCONTROL        0x00000100
92 #define ACTRL_REG_QUERY           0x00000001
93 #define ACTRL_REG_SET             0x00000002
94 #define ACTRL_REG_CREATE_CHILD    0x00000004
95 #define ACTRL_REG_LIST            0x00000008
96 #define ACTRL_REG_NOTIFY          0x00000010
97 #define ACTRL_REG_LINK            0x00000020
98 #define ACTRL_WIN_CLIPBRD         0x00000001
99 #define ACTRL_WIN_GLOBAL_ATOMS    0x00000002
100 #define ACTRL_WIN_CREATE          0x00000004
101 #define ACTRL_WIN_LIST_DESK       0x00000008
102 #define ACTRL_WIN_LIST            0x00000010
103 #define ACTRL_WIN_READ_ATTRIBS    0x00000020
104 #define ACTRL_WIN_WRITE_ATTRIBS   0x00000040
105 #define ACTRL_WIN_SCREEN          0x00000080
106 #define ACTRL_WIN_EXIT            0x00000100
107 #define ACTRL_ACCESS_NO_OPTIONS                 0x00000000
108 #define ACTRL_ACCESS_SUPPORTS_OBJECT_ENTRIES    0x00000001
109 #define ACCCTRL_DEFAULT_PROVIDERA   "Windows NT Access Provider"
110 #define ACCCTRL_DEFAULT_PROVIDERW  L"Windows NT Access Provider"
111 #define TRUSTEE_ACCESS_ALLOWED    0x00000001L
112 #define TRUSTEE_ACCESS_READ       0x00000002L
113 #define TRUSTEE_ACCESS_WRITE      0x00000004L
114 #define TRUSTEE_ACCESS_EXPLICIT   0x00000001L
115 #define TRUSTEE_ACCESS_READ_WRITE   (TRUSTEE_ACCESS_READ | TRUSTEE_ACCESS_WRITE)
116 #define TRUSTEE_ACCESS_ALL        0xFFFFFFFFL
117 #define NO_INHERITANCE            0x0
118 #define SUB_OBJECTS_ONLY_INHERIT  0x1
119 #define SUB_CONTAINERS_ONLY_INHERIT 0x2
120 #define SUB_CONTAINERS_AND_OBJECTS_INHERIT  0x3
121 #define INHERIT_NO_PROPAGATE      0x4
122 #define INHERIT_ONLY              0x8
123 #define INHERITED_ACCESS_ENTRY    0x10
124 #define INHERITED_PARENT          0x10000000
125 #define INHERITED_GRANDPARENT     0x20000000
126
127 typedef ULONG INHERIT_FLAGS, *PINHERIT_FLAGS;
128 typedef ULONG ACCESS_RIGHTS, *PACCESS_RIGHTS;
129
130 typedef enum _ACCESS_MODE {
131         NOT_USED_ACCESS = 0,
132         GRANT_ACCESS,
133         SET_ACCESS,
134         DENY_ACCESS,
135         REVOKE_ACCESS,
136         SET_AUDIT_SUCCESS,
137         SET_AUDIT_FAILURE
138 } ACCESS_MODE;
139 typedef enum _SE_OBJECT_TYPE {
140         SE_UNKNOWN_OBJECT_TYPE = 0,
141         SE_FILE_OBJECT,
142         SE_SERVICE,
143         SE_PRINTER,
144         SE_REGISTRY_KEY,
145         SE_LMSHARE,
146         SE_KERNEL_OBJECT,
147         SE_WINDOW_OBJECT,
148         SE_DS_OBJECT,
149         SE_DS_OBJECT_ALL,
150         SE_PROVIDER_DEFINED_OBJECT,
151         SE_WMIGUID_OBJECT,
152         SE_REGISTRY_WOW64_32KEY
153 } SE_OBJECT_TYPE;
154 typedef enum _TRUSTEE_TYPE {
155         TRUSTEE_IS_UNKNOWN,
156         TRUSTEE_IS_USER,
157         TRUSTEE_IS_GROUP,
158         TRUSTEE_IS_DOMAIN,
159         TRUSTEE_IS_ALIAS,
160         TRUSTEE_IS_WELL_KNOWN_GROUP,
161         TRUSTEE_IS_DELETED,
162         TRUSTEE_IS_INVALID,
163         TRUSTEE_IS_COMPUTER
164 } TRUSTEE_TYPE;
165 typedef enum _TRUSTEE_FORM {
166         TRUSTEE_IS_SID,
167         TRUSTEE_IS_NAME,
168         TRUSTEE_BAD_FORM,
169         TRUSTEE_IS_OBJECTS_AND_SID,
170         TRUSTEE_IS_OBJECTS_AND_NAME
171 } TRUSTEE_FORM;
172 typedef enum _MULTIPLE_TRUSTEE_OPERATION {
173         NO_MULTIPLE_TRUSTEE,
174         TRUSTEE_IS_IMPERSONATE
175 } MULTIPLE_TRUSTEE_OPERATION;
176 typedef struct _TRUSTEE_A {
177         struct _TRUSTEE_A          *pMultipleTrustee;
178         MULTIPLE_TRUSTEE_OPERATION  MultipleTrusteeOperation;
179         TRUSTEE_FORM                TrusteeForm;
180         TRUSTEE_TYPE                TrusteeType;
181         LPSTR                       ptstrName;
182 } TRUSTEE_A, *PTRUSTEE_A, TRUSTEEA, *PTRUSTEEA;
183 typedef struct _TRUSTEE_W {
184         struct _TRUSTEE_W          *pMultipleTrustee;
185         MULTIPLE_TRUSTEE_OPERATION  MultipleTrusteeOperation;
186         TRUSTEE_FORM                TrusteeForm;
187         TRUSTEE_TYPE                TrusteeType;
188         LPWSTR                      ptstrName;
189 } TRUSTEE_W, *PTRUSTEE_W, TRUSTEEW, *PTRUSTEEW;
190 typedef struct _ACTRL_ACCESS_ENTRYA {
191         TRUSTEE_A       Trustee;
192         ULONG           fAccessFlags;
193         ACCESS_RIGHTS   Access;
194         ACCESS_RIGHTS   ProvSpecificAccess;
195         INHERIT_FLAGS   Inheritance;
196         LPCSTR          lpInheritProperty;
197 } ACTRL_ACCESS_ENTRYA, *PACTRL_ACCESS_ENTRYA;
198 typedef struct _ACTRL_ACCESS_ENTRYW {
199         TRUSTEE_W       Trustee;
200         ULONG           fAccessFlags;
201         ACCESS_RIGHTS   Access;
202         ACCESS_RIGHTS   ProvSpecificAccess;
203         INHERIT_FLAGS   Inheritance;
204         LPCWSTR         lpInheritProperty;
205 } ACTRL_ACCESS_ENTRYW, *PACTRL_ACCESS_ENTRYW;
206 typedef struct _ACTRL_ACCESS_ENTRY_LISTA {
207         ULONG                  cEntries;
208         ACTRL_ACCESS_ENTRYA    *pAccessList;
209 } ACTRL_ACCESS_ENTRY_LISTA, *PACTRL_ACCESS_ENTRY_LISTA;
210 typedef struct _ACTRL_ACCESS_ENTRY_LISTW {
211         ULONG                  cEntries;
212         ACTRL_ACCESS_ENTRYW    *pAccessList;
213 } ACTRL_ACCESS_ENTRY_LISTW, *PACTRL_ACCESS_ENTRY_LISTW;
214 typedef struct _ACTRL_PROPERTY_ENTRYA {
215         LPCSTR                      lpProperty;
216         PACTRL_ACCESS_ENTRY_LISTA   pAccessEntryList;
217         ULONG                       fListFlags;
218 } ACTRL_PROPERTY_ENTRYA, *PACTRL_PROPERTY_ENTRYA;
219 typedef struct _ACTRL_PROPERTY_ENTRYW {
220         LPCWSTR                     lpProperty;
221         PACTRL_ACCESS_ENTRY_LISTW   pAccessEntryList;
222         ULONG                       fListFlags;
223 } ACTRL_PROPERTY_ENTRYW, *PACTRL_PROPERTY_ENTRYW;
224 typedef struct _ACTRL_ALISTA {
225         ULONG                       cEntries;
226         PACTRL_PROPERTY_ENTRYA      pPropertyAccessList;
227 } ACTRL_ACCESSA, *PACTRL_ACCESSA, ACTRL_AUDITA, *PACTRL_AUDITA;
228 typedef struct _ACTRL_ALISTW {
229         ULONG                       cEntries;
230         PACTRL_PROPERTY_ENTRYW      pPropertyAccessList;
231 } ACTRL_ACCESSW, *PACTRL_ACCESSW, ACTRL_AUDITW, *PACTRL_AUDITW;
232 typedef struct _TRUSTEE_ACCESSA { 
233         LPSTR           lpProperty;
234         ACCESS_RIGHTS   Access;
235         ULONG           fAccessFlags;
236         ULONG           fReturnedAccess;
237 } TRUSTEE_ACCESSA, *PTRUSTEE_ACCESSA;
238 typedef struct _TRUSTEE_ACCESSW {
239         LPWSTR          lpProperty;
240         ACCESS_RIGHTS   Access;
241         ULONG           fAccessFlags;
242         ULONG           fReturnedAccess;
243 } TRUSTEE_ACCESSW, *PTRUSTEE_ACCESSW;
244 typedef struct _ACTRL_OVERLAPPED {
245         _ANONYMOUS_UNION
246         union {
247             PVOID Provider;
248             ULONG Reserved1;
249         } DUMMYUNIONNAME;
250         ULONG       Reserved2;
251         HANDLE      hEvent;
252 } ACTRL_OVERLAPPED, *PACTRL_OVERLAPPED;
253 typedef struct _ACTRL_ACCESS_INFOA {
254         ULONG       fAccessPermission;
255         LPSTR       lpAccessPermissionName;
256 } ACTRL_ACCESS_INFOA, *PACTRL_ACCESS_INFOA;
257 typedef struct _ACTRL_ACCESS_INFOW {
258         ULONG       fAccessPermission;
259         LPWSTR      lpAccessPermissionName;
260 } ACTRL_ACCESS_INFOW, *PACTRL_ACCESS_INFOW;
261 typedef struct _ACTRL_CONTROL_INFOA {
262         LPSTR       lpControlId;
263         LPSTR       lpControlName;
264 } ACTRL_CONTROL_INFOA, *PACTRL_CONTROL_INFOA;
265 typedef struct _ACTRL_CONTROL_INFOW {
266         LPWSTR      lpControlId;
267         LPWSTR      lpControlName;
268 } ACTRL_CONTROL_INFOW, *PACTRL_CONTROL_INFOW;
269 typedef struct _EXPLICIT_ACCESS_A {
270         DWORD        grfAccessPermissions;
271         ACCESS_MODE  grfAccessMode;
272         DWORD        grfInheritance;
273         TRUSTEE_A    Trustee;
274 } EXPLICIT_ACCESS_A, *PEXPLICIT_ACCESS_A, EXPLICIT_ACCESSA, *PEXPLICIT_ACCESSA;
275 typedef struct _EXPLICIT_ACCESS_W {
276         DWORD        grfAccessPermissions;
277         ACCESS_MODE  grfAccessMode;
278         DWORD        grfInheritance;
279         TRUSTEE_W    Trustee;
280 } EXPLICIT_ACCESS_W, *PEXPLICIT_ACCESS_W, EXPLICIT_ACCESSW, *PEXPLICIT_ACCESSW;
281 typedef struct _OBJECTS_AND_SID {
282         DWORD   ObjectsPresent;
283         GUID    ObjectTypeGuid;
284         GUID    InheritedObjectTypeGuid;
285         SID     * pSid;
286 } OBJECTS_AND_SID, *POBJECTS_AND_SID;
287 typedef struct _OBJECTS_AND_NAME_A {
288         DWORD    ObjectsPresent;
289         SE_OBJECT_TYPE ObjectType;
290         LPSTR    ObjectTypeName;
291         LPSTR    InheritedObjectTypeName;
292         LPSTR    ptstrName;
293 } OBJECTS_AND_NAME_A, *POBJECTS_AND_NAME_A;
294 typedef struct _OBJECTS_AND_NAME_W {
295         DWORD          ObjectsPresent;
296         SE_OBJECT_TYPE ObjectType;
297         LPWSTR   ObjectTypeName;
298         LPWSTR   InheritedObjectTypeName;
299         LPWSTR   ptstrName;
300 } OBJECTS_AND_NAME_W, *POBJECTS_AND_NAME_W;
301
302 #define ACCCTRL_DEFAULT_PROVIDER __AW(ACCCTRL_DEFAULT_PROVIDER)
303 typedef __AW(TRUSTEE_) TRUSTEE_, *PTRUSTEE_;
304 typedef __AW(TRUSTEE) TRUSTEE, *PTRUSTEE;
305 typedef __AW(ACTRL_ACCESS) ACTRL_ACCESS, *PACTRL_ACCESS;
306 typedef __AW(ACTRL_ACCESS_ENTRY_LIST) ACTRL_ACCESS_ENTRY_LIST, *PACTRL_ACCESS_ENTRY_LIST;
307 typedef __AW(ACTRL_ACCESS_INFO) ACTRL_ACCESS_INFO, *PACTRL_ACCESS_INFO;
308 typedef __AW(ACTRL_ACCESS_ENTRY) ACTRL_ACCESS_ENTRY, *PACTRL_ACCESS_ENTRY;
309 typedef __AW(ACTRL_AUDIT) ACTRL_AUDIT, *PACTRL_AUDIT;
310 typedef __AW(ACTRL_CONTROL_INFO) ACTRL_CONTROL_INFO, *PACTRL_CONTROL_INFO;
311 typedef __AW(EXPLICIT_ACCESS_) EXPLICIT_ACCESS_, *PEXPLICIT_ACCESS_;
312 typedef __AW(EXPLICIT_ACCESS) EXPLICIT_ACCESS, *PEXPLICIT_ACCESS;
313 typedef __AW(TRUSTEE_ACCESS) TRUSTEE_ACCESS, *PTRUSTEE_ACCESS;
314 typedef __AW(OBJECTS_AND_NAME_) OBJECTS_AND_NAME_, *POBJECTS_AND_NAME_;
315
316 #if (_WIN32_WINNT >= _WIN32_WINNT_WINXP)
317 typedef struct {
318         LONG     GenerationGap;
319         LPSTR    AncestorName;
320 } INHERITED_FROMA, *PINHERITED_FROMA;
321 typedef struct {
322         LONG     GenerationGap;
323         LPWSTR   AncestorName;
324 } INHERITED_FROMW, *PINHERITED_FROMW;
325
326 typedef __AW(INHERITED_FROM) INHERITED_FROM, *PINHERITED_FROM;
327 #endif /* (_WIN32_WINNT >= _WIN32_WINNT_WINXP) */
328
329 #ifdef __cplusplus
330 }
331 #endif
332 #endif