winapi_ui_automation/um/
accctrl.rs

1// Licensed under the Apache License, Version 2.0
2// <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
3// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
4// All files in the project carrying such notice may not be copied, modified, or distributed
5// except according to those terms.
6use shared::guiddef::GUID;
7use shared::minwindef::{DWORD, ULONG};
8use um::winbase::LocalFree;
9use um::winnt::{HANDLE, LONG, LPSTR, LPWSTR, PVOID, SID};
10#[inline]
11pub unsafe fn AccFree(p: PVOID) -> PVOID {
12    LocalFree(p)
13}
14ENUM!{enum SE_OBJECT_TYPE {
15    SE_UNKNOWN_OBJECT_TYPE = 0,
16    SE_FILE_OBJECT,
17    SE_SERVICE,
18    SE_PRINTER,
19    SE_REGISTRY_KEY,
20    SE_LMSHARE,
21    SE_KERNEL_OBJECT,
22    SE_WINDOW_OBJECT,
23    SE_DS_OBJECT,
24    SE_DS_OBJECT_ALL,
25    SE_PROVIDER_DEFINED_OBJECT,
26    SE_WMIGUID_OBJECT,
27    SE_REGISTRY_WOW64_32KEY,
28    SE_REGISTRY_WOW64_64KEY,
29}}
30ENUM!{enum TRUSTEE_TYPE {
31    TRUSTEE_IS_UNKNOWN,
32    TRUSTEE_IS_USER,
33    TRUSTEE_IS_GROUP,
34    TRUSTEE_IS_DOMAIN,
35    TRUSTEE_IS_ALIAS,
36    TRUSTEE_IS_WELL_KNOWN_GROUP,
37    TRUSTEE_IS_DELETED,
38    TRUSTEE_IS_INVALID,
39    TRUSTEE_IS_COMPUTER,
40}}
41ENUM!{enum TRUSTEE_FORM {
42    TRUSTEE_IS_SID,
43    TRUSTEE_IS_NAME,
44    TRUSTEE_BAD_FORM,
45    TRUSTEE_IS_OBJECTS_AND_SID,
46    TRUSTEE_IS_OBJECTS_AND_NAME,
47}}
48ENUM!{enum MULTIPLE_TRUSTEE_OPERATION {
49    NO_MULTIPLE_TRUSTEE,
50    TRUSTEE_IS_IMPERSONATE,
51}}
52STRUCT!{struct OBJECTS_AND_SID {
53    ObjectsPresent: DWORD,
54    ObjectTypeGuid: GUID,
55    InheritedObjectTypeGuid: GUID,
56    pSid: *mut SID,
57}}
58pub type POBJECTS_AND_SID = *mut OBJECTS_AND_SID;
59STRUCT!{struct OBJECTS_AND_NAME_A {
60    ObjectsPresent: DWORD,
61    ObjectType: SE_OBJECT_TYPE,
62    ObjectTypeName: LPSTR,
63    InheritedObjectTypeName: LPSTR,
64    ptstrName: LPSTR,
65}}
66pub type POBJECTS_AND_NAME_A = *mut OBJECTS_AND_NAME_A;
67STRUCT!{struct OBJECTS_AND_NAME_W {
68    ObjectsPresent: DWORD,
69    ObjectType: SE_OBJECT_TYPE,
70    ObjectTypeName: LPWSTR,
71    InheritedObjectTypeName: LPWSTR,
72    ptstrName: LPWSTR,
73}}
74pub type POBJECTS_AND_NAME_W = *mut OBJECTS_AND_NAME_W;
75STRUCT!{struct TRUSTEE_A {
76    pMultipleTrustee: *mut TRUSTEE_A,
77    MultipleTrusteeOperation: MULTIPLE_TRUSTEE_OPERATION,
78    TrusteeForm: TRUSTEE_FORM,
79    TrusteeType: TRUSTEE_TYPE,
80    ptstrName: LPSTR,
81}}
82pub type PTRUSTEE_A = *mut TRUSTEE_A;
83pub type TRUSTEEA = TRUSTEE_A;
84pub type PTRUSTEEA = PTRUSTEE_A;
85STRUCT!{struct TRUSTEE_W {
86    pMultipleTrustee: *mut TRUSTEE_W,
87    MultipleTrusteeOperation: MULTIPLE_TRUSTEE_OPERATION,
88    TrusteeForm: TRUSTEE_FORM,
89    TrusteeType: TRUSTEE_TYPE,
90    ptstrName: LPWSTR,
91}}
92pub type PTRUSTEE_W = *mut TRUSTEE_W;
93pub type TRUSTEEW = TRUSTEE_W;
94pub type PTRUSTEEW = PTRUSTEE_W;
95ENUM!{enum ACCESS_MODE {
96    NOT_USED_ACCESS = 0,
97    GRANT_ACCESS,
98    SET_ACCESS,
99    DENY_ACCESS,
100    REVOKE_ACCESS,
101    SET_AUDIT_SUCCESS,
102    SET_AUDIT_FAILURE,
103}}
104pub const NO_INHERITANCE: DWORD = 0x0;
105pub const SUB_OBJECTS_ONLY_INHERIT: DWORD = 0x1;
106pub const SUB_CONTAINERS_ONLY_INHERIT: DWORD = 0x2;
107pub const SUB_CONTAINERS_AND_OBJECTS_INHERIT: DWORD = 0x3;
108pub const INHERIT_NO_PROPAGATE: DWORD = 0x4;
109pub const INHERIT_ONLY: DWORD = 0x8;
110pub const INHERITED_ACCESS_ENTRY: DWORD = 0x10;
111pub const INHERITED_PARENT: DWORD = 0x10000000;
112pub const INHERITED_GRANDPARENT: DWORD = 0x20000000;
113STRUCT!{struct EXPLICIT_ACCESS_A {
114    grfAccessPermissions: DWORD,
115    grfAccessMode: ACCESS_MODE,
116    grfInheritance: DWORD,
117    Trustee: TRUSTEE_A,
118}}
119pub type PEXPLICIT_ACCESS_A = *mut EXPLICIT_ACCESS_A;
120pub type EXPLICIT_ACCESSA = EXPLICIT_ACCESS_A;
121pub type PEXPLICIT_ACCESSA = PEXPLICIT_ACCESS_A;
122STRUCT!{struct EXPLICIT_ACCESS_W {
123    grfAccessPermissions: DWORD,
124    grfAccessMode: ACCESS_MODE,
125    grfInheritance: DWORD,
126    Trustee: TRUSTEE_W,
127}}
128pub type PEXPLICIT_ACCESS_W = *mut EXPLICIT_ACCESS_W;
129pub type EXPLICIT_ACCESSW = EXPLICIT_ACCESS_W;
130pub type PEXPLICIT_ACCESSW = PEXPLICIT_ACCESS_W;
131pub const ACCCTRL_DEFAULT_PROVIDER: &'static str = "Windows NT Access Provider";
132pub type ACCESS_RIGHTS = ULONG;
133pub type PACCESS_RIGHTS = *mut ACCESS_RIGHTS;
134pub type INHERIT_FLAGS = ULONG;
135pub type PINHERIT_FLAGS = *mut INHERIT_FLAGS;
136STRUCT!{struct ACTRL_ACCESS_ENTRYA {
137    Trustee: TRUSTEE_A,
138    fAccessFlags: ULONG,
139    Access: ACCESS_RIGHTS,
140    ProvSpecificAccess: ACCESS_RIGHTS,
141    Inheritance: INHERIT_FLAGS,
142    lpInheritProperty: LPSTR,
143}}
144pub type PACTRL_ACCESS_ENTRYA = *mut ACTRL_ACCESS_ENTRYA;
145STRUCT!{struct ACTRL_ACCESS_ENTRYW {
146    Trustee: TRUSTEE_W,
147    fAccessFlags: ULONG,
148    Access: ACCESS_RIGHTS,
149    ProvSpecificAccess: ACCESS_RIGHTS,
150    Inheritance: INHERIT_FLAGS,
151    lpInheritProperty: LPWSTR,
152}}
153pub type PACTRL_ACCESS_ENTRYW = *mut ACTRL_ACCESS_ENTRYW;
154STRUCT!{struct ACTRL_ACCESS_ENTRY_LISTA {
155    cEntries: ULONG,
156    pAccessList: *mut ACTRL_ACCESS_ENTRYA,
157}}
158pub type PACTRL_ACCESS_ENTRY_LISTA = *mut ACTRL_ACCESS_ENTRY_LISTA;
159STRUCT!{struct ACTRL_ACCESS_ENTRY_LISTW {
160    cEntries: ULONG,
161    pAccessList: *mut ACTRL_ACCESS_ENTRYW,
162}}
163pub type PACTRL_ACCESS_ENTRY_LISTW = *mut ACTRL_ACCESS_ENTRY_LISTW;
164STRUCT!{struct ACTRL_PROPERTY_ENTRYA {
165    lpProperty: LPSTR,
166    pAccessEntryList: PACTRL_ACCESS_ENTRY_LISTA,
167    fListFlags: ULONG,
168}}
169pub type PACTRL_PROPERTY_ENTRYA = *mut ACTRL_PROPERTY_ENTRYA;
170STRUCT!{struct ACTRL_PROPERTY_ENTRYW {
171    lpProperty: LPWSTR,
172    pAccessEntryList: PACTRL_ACCESS_ENTRY_LISTW,
173    fListFlags: ULONG,
174}}
175pub type PACTRL_PROPERTY_ENTRYW = *mut ACTRL_PROPERTY_ENTRYW;
176STRUCT!{struct ACTRL_ACCESSA {
177    cEntries: ULONG,
178    pPropertyAccessList: PACTRL_PROPERTY_ENTRYA,
179}}
180pub type PACTRL_ACCESSA = *mut ACTRL_ACCESSA;
181pub type ACTRL_AUDITA = ACTRL_ACCESSA;
182pub type PACTRL_AUDITA = *mut ACTRL_AUDITA;
183STRUCT!{struct ACTRL_ACCESSW {
184    cEntries: ULONG,
185    pPropertyAccessList: PACTRL_PROPERTY_ENTRYW,
186}}
187pub type PACTRL_ACCESSW = *mut ACTRL_ACCESSW;
188pub type ACTRL_AUDITW = ACTRL_ACCESSW;
189pub type PACTRL_AUDITW = *mut ACTRL_AUDITW;
190pub const TRUSTEE_ACCESS_ALLOWED: ULONG = 0x00000001;
191pub const TRUSTEE_ACCESS_READ: ULONG = 0x00000002;
192pub const TRUSTEE_ACCESS_WRITE: ULONG = 0x00000004;
193pub const TRUSTEE_ACCESS_EXPLICIT: ULONG = 0x00000001;
194pub const TRUSTEE_ACCESS_READ_WRITE: ULONG = TRUSTEE_ACCESS_READ | TRUSTEE_ACCESS_WRITE;
195pub const TRUSTEE_ACCESS_ALL: ULONG = 0xFFFFFFFF;
196STRUCT!{struct TRUSTEE_ACCESSA {
197    lpProperty: LPSTR,
198    Access: ACCESS_RIGHTS,
199    fAccessFlags: ULONG,
200    fReturnedAccess: ULONG,
201}}
202pub type PTRUSTEE_ACCESSA = *mut TRUSTEE_ACCESSA;
203STRUCT!{struct TRUSTEE_ACCESSW {
204    lpProperty: LPWSTR,
205    Access: ACCESS_RIGHTS,
206    fAccessFlags: ULONG,
207    fReturnedAccess: ULONG,
208}}
209pub type PTRUSTEE_ACCESSW = *mut TRUSTEE_ACCESSW;
210pub const ACTRL_RESERVED: ULONG = 0x00000000;
211pub const ACTRL_PERM_1: ULONG = 0x00000001;
212pub const ACTRL_PERM_2: ULONG = 0x00000002;
213pub const ACTRL_PERM_3: ULONG = 0x00000004;
214pub const ACTRL_PERM_4: ULONG = 0x00000008;
215pub const ACTRL_PERM_5: ULONG = 0x00000010;
216pub const ACTRL_PERM_6: ULONG = 0x00000020;
217pub const ACTRL_PERM_7: ULONG = 0x00000040;
218pub const ACTRL_PERM_8: ULONG = 0x00000080;
219pub const ACTRL_PERM_9: ULONG = 0x00000100;
220pub const ACTRL_PERM_10: ULONG = 0x00000200;
221pub const ACTRL_PERM_11: ULONG = 0x00000400;
222pub const ACTRL_PERM_12: ULONG = 0x00000800;
223pub const ACTRL_PERM_13: ULONG = 0x00001000;
224pub const ACTRL_PERM_14: ULONG = 0x00002000;
225pub const ACTRL_PERM_15: ULONG = 0x00004000;
226pub const ACTRL_PERM_16: ULONG = 0x00008000;
227pub const ACTRL_PERM_17: ULONG = 0x00010000;
228pub const ACTRL_PERM_18: ULONG = 0x00020000;
229pub const ACTRL_PERM_19: ULONG = 0x00040000;
230pub const ACTRL_PERM_20: ULONG = 0x00080000;
231pub const ACTRL_ACCESS_ALLOWED: ULONG = 0x00000001;
232pub const ACTRL_ACCESS_DENIED: ULONG = 0x00000002;
233pub const ACTRL_AUDIT_SUCCESS: ULONG = 0x00000004;
234pub const ACTRL_AUDIT_FAILURE: ULONG = 0x00000008;
235pub const ACTRL_ACCESS_PROTECTED: ULONG = 0x00000001;
236pub const ACTRL_SYSTEM_ACCESS: ULONG = 0x04000000;
237pub const ACTRL_DELETE: ULONG = 0x08000000;
238pub const ACTRL_READ_CONTROL: ULONG = 0x10000000;
239pub const ACTRL_CHANGE_ACCESS: ULONG = 0x20000000;
240pub const ACTRL_CHANGE_OWNER: ULONG = 0x40000000;
241pub const ACTRL_SYNCHRONIZE: ULONG = 0x80000000;
242pub const ACTRL_STD_RIGHTS_ALL: ULONG = 0xf8000000;
243pub const ACTRL_STD_RIGHT_REQUIRED: ULONG = ACTRL_STD_RIGHTS_ALL & !ACTRL_SYNCHRONIZE;
244pub const ACTRL_DS_OPEN: ULONG = ACTRL_RESERVED;
245pub const ACTRL_DS_CREATE_CHILD: ULONG = ACTRL_PERM_1;
246pub const ACTRL_DS_DELETE_CHILD: ULONG = ACTRL_PERM_2;
247pub const ACTRL_DS_LIST: ULONG = ACTRL_PERM_3;
248pub const ACTRL_DS_SELF: ULONG = ACTRL_PERM_4;
249pub const ACTRL_DS_READ_PROP: ULONG = ACTRL_PERM_5;
250pub const ACTRL_DS_WRITE_PROP: ULONG = ACTRL_PERM_6;
251pub const ACTRL_DS_DELETE_TREE: ULONG = ACTRL_PERM_7;
252pub const ACTRL_DS_LIST_OBJECT: ULONG = ACTRL_PERM_8;
253pub const ACTRL_DS_CONTROL_ACCESS: ULONG = ACTRL_PERM_9;
254pub const ACTRL_FILE_READ: ULONG = ACTRL_PERM_1;
255pub const ACTRL_FILE_WRITE: ULONG = ACTRL_PERM_2;
256pub const ACTRL_FILE_APPEND: ULONG = ACTRL_PERM_3;
257pub const ACTRL_FILE_READ_PROP: ULONG = ACTRL_PERM_4;
258pub const ACTRL_FILE_WRITE_PROP: ULONG = ACTRL_PERM_5;
259pub const ACTRL_FILE_EXECUTE: ULONG = ACTRL_PERM_6;
260pub const ACTRL_FILE_READ_ATTRIB: ULONG = ACTRL_PERM_8;
261pub const ACTRL_FILE_WRITE_ATTRIB: ULONG = ACTRL_PERM_9;
262pub const ACTRL_FILE_CREATE_PIPE: ULONG = ACTRL_PERM_10;
263pub const ACTRL_DIR_LIST: ULONG = ACTRL_PERM_1;
264pub const ACTRL_DIR_CREATE_OBJECT: ULONG = ACTRL_PERM_2;
265pub const ACTRL_DIR_CREATE_CHILD: ULONG = ACTRL_PERM_3;
266pub const ACTRL_DIR_DELETE_CHILD: ULONG = ACTRL_PERM_7;
267pub const ACTRL_DIR_TRAVERSE: ULONG = ACTRL_PERM_6;
268pub const ACTRL_KERNEL_TERMINATE: ULONG = ACTRL_PERM_1;
269pub const ACTRL_KERNEL_THREAD: ULONG = ACTRL_PERM_2;
270pub const ACTRL_KERNEL_VM: ULONG = ACTRL_PERM_3;
271pub const ACTRL_KERNEL_VM_READ: ULONG = ACTRL_PERM_4;
272pub const ACTRL_KERNEL_VM_WRITE: ULONG = ACTRL_PERM_5;
273pub const ACTRL_KERNEL_DUP_HANDLE: ULONG = ACTRL_PERM_6;
274pub const ACTRL_KERNEL_PROCESS: ULONG = ACTRL_PERM_7;
275pub const ACTRL_KERNEL_SET_INFO: ULONG = ACTRL_PERM_8;
276pub const ACTRL_KERNEL_GET_INFO: ULONG = ACTRL_PERM_9;
277pub const ACTRL_KERNEL_CONTROL: ULONG = ACTRL_PERM_10;
278pub const ACTRL_KERNEL_ALERT: ULONG = ACTRL_PERM_11;
279pub const ACTRL_KERNEL_GET_CONTEXT: ULONG = ACTRL_PERM_12;
280pub const ACTRL_KERNEL_SET_CONTEXT: ULONG = ACTRL_PERM_13;
281pub const ACTRL_KERNEL_TOKEN: ULONG = ACTRL_PERM_14;
282pub const ACTRL_KERNEL_IMPERSONATE: ULONG = ACTRL_PERM_15;
283pub const ACTRL_KERNEL_DIMPERSONATE: ULONG = ACTRL_PERM_16;
284pub const ACTRL_PRINT_SADMIN: ULONG = ACTRL_PERM_1;
285pub const ACTRL_PRINT_SLIST: ULONG = ACTRL_PERM_2;
286pub const ACTRL_PRINT_PADMIN: ULONG = ACTRL_PERM_3;
287pub const ACTRL_PRINT_PUSE: ULONG = ACTRL_PERM_4;
288pub const ACTRL_PRINT_JADMIN: ULONG = ACTRL_PERM_5;
289pub const ACTRL_SVC_GET_INFO: ULONG = ACTRL_PERM_1;
290pub const ACTRL_SVC_SET_INFO: ULONG = ACTRL_PERM_2;
291pub const ACTRL_SVC_STATUS: ULONG = ACTRL_PERM_3;
292pub const ACTRL_SVC_LIST: ULONG = ACTRL_PERM_4;
293pub const ACTRL_SVC_START: ULONG = ACTRL_PERM_5;
294pub const ACTRL_SVC_STOP: ULONG = ACTRL_PERM_6;
295pub const ACTRL_SVC_PAUSE: ULONG = ACTRL_PERM_7;
296pub const ACTRL_SVC_INTERROGATE: ULONG = ACTRL_PERM_8;
297pub const ACTRL_SVC_UCONTROL: ULONG = ACTRL_PERM_9;
298pub const ACTRL_REG_QUERY: ULONG = ACTRL_PERM_1;
299pub const ACTRL_REG_SET: ULONG = ACTRL_PERM_2;
300pub const ACTRL_REG_CREATE_CHILD: ULONG = ACTRL_PERM_3;
301pub const ACTRL_REG_LIST: ULONG = ACTRL_PERM_4;
302pub const ACTRL_REG_NOTIFY: ULONG = ACTRL_PERM_5;
303pub const ACTRL_REG_LINK: ULONG = ACTRL_PERM_6;
304pub const ACTRL_WIN_CLIPBRD: ULONG = ACTRL_PERM_1;
305pub const ACTRL_WIN_GLOBAL_ATOMS: ULONG = ACTRL_PERM_2;
306pub const ACTRL_WIN_CREATE: ULONG = ACTRL_PERM_3;
307pub const ACTRL_WIN_LIST_DESK: ULONG = ACTRL_PERM_4;
308pub const ACTRL_WIN_LIST: ULONG = ACTRL_PERM_5;
309pub const ACTRL_WIN_READ_ATTRIBS: ULONG = ACTRL_PERM_6;
310pub const ACTRL_WIN_WRITE_ATTRIBS: ULONG = ACTRL_PERM_7;
311pub const ACTRL_WIN_SCREEN: ULONG = ACTRL_PERM_8;
312pub const ACTRL_WIN_EXIT: ULONG = ACTRL_PERM_9;
313UNION!{union ACTRL_OVERLAPPED_u {
314    [u32; 1] [u64; 1],
315    Provider Provider_mut: PVOID,
316    Reserved1 Reserved1_mut: ULONG,
317}}
318STRUCT!{struct ACTRL_OVERLAPPED {
319    u: ACTRL_OVERLAPPED_u,
320    Reserved2: ULONG,
321    hEvent: HANDLE,
322}}
323pub type PACTRL_OVERLAPPED = *mut ACTRL_OVERLAPPED;
324STRUCT!{struct ACTRL_ACCESS_INFOA {
325    fAccessPermission: ULONG,
326    lpAccessPermissionName: LPSTR,
327}}
328pub type PACTRL_ACCESS_INFOA = *mut ACTRL_ACCESS_INFOA;
329STRUCT!{struct ACTRL_ACCESS_INFOW {
330    fAccessPermission: ULONG,
331    lpAccessPermissionName: LPWSTR,
332}}
333pub type PACTRL_ACCESS_INFOW = *mut ACTRL_ACCESS_INFOW;
334STRUCT!{struct ACTRL_CONTROL_INFOA {
335    lpControlId: LPSTR,
336    lpControlName: LPSTR,
337}}
338pub type PACTRL_CONTROL_INFOA = *mut ACTRL_CONTROL_INFOA;
339STRUCT!{struct ACTRL_CONTROL_INFOW {
340    lpControlId: LPWSTR,
341    lpControlName: LPWSTR,
342}}
343pub type PACTRL_CONTROL_INFOW = *mut ACTRL_CONTROL_INFOW;
344pub const ACTRL_ACCESS_NO_OPTIONS: DWORD = 0x00000000;
345pub const ACTRL_ACCESS_SUPPORTS_OBJECT_ENTRIES: DWORD = 0x00000001;
346pub const TREE_SEC_INFO_SET: DWORD = 0x00000001;
347pub const TREE_SEC_INFO_RESET: DWORD = 0x00000002;
348pub const TREE_SEC_INFO_RESET_KEEP_EXPLICIT: DWORD = 0x00000003;
349ENUM!{enum PROG_INVOKE_SETTING {
350    ProgressInvokeNever = 1,
351    ProgressInvokeEveryObject,
352    ProgressInvokeOnError,
353    ProgressCancelOperation,
354    ProgressRetryOperation,
355    ProgressInvokePrePostError,
356}}
357pub type PPROG_INVOKE_SETTING = *mut PROG_INVOKE_SETTING;
358STRUCT!{struct FN_OBJECT_MGR_FUNCTS {
359    Placeholder: ULONG,
360}}
361pub type PFN_OBJECT_MGR_FUNCTS = *mut FN_OBJECT_MGR_FUNCTS;
362STRUCT!{struct INHERITED_FROMA {
363    GenerationGap: LONG,
364    AncestorName: LPSTR,
365}}
366pub type PINHERITED_FROMA = *mut INHERITED_FROMA;
367STRUCT!{struct INHERITED_FROMW {
368    GenerationGap: LONG,
369    AncestorName: LPWSTR,
370}}
371pub type PINHERITED_FROMW = *mut INHERITED_FROMW;