winapi_ui_automation/um/
aclapi.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::{BOOL, DWORD, PULONG, ULONG, USHORT};
8use um::accctrl::{
9    ACCESS_MODE, MULTIPLE_TRUSTEE_OPERATION, PEXPLICIT_ACCESS_A, PEXPLICIT_ACCESS_W,
10    PFN_OBJECT_MGR_FUNCTS, PINHERITED_FROMA, PINHERITED_FROMW, POBJECTS_AND_NAME_A,
11    POBJECTS_AND_NAME_W, POBJECTS_AND_SID, PPROG_INVOKE_SETTING, PROG_INVOKE_SETTING, PTRUSTEE_A,
12    PTRUSTEE_W, SE_OBJECT_TYPE, TRUSTEE_FORM, TRUSTEE_TYPE
13};
14use um::winnt::{
15    HANDLE, LPCSTR, LPCWSTR, LPSTR, LPWSTR, PACCESS_MASK, PACL, PGENERIC_MAPPING,
16    PSECURITY_DESCRIPTOR, PSID, PVOID, SECURITY_INFORMATION
17};
18FN!{cdecl FN_PROGRESS(
19    pObjectName: LPWSTR,
20    Status: DWORD,
21    pInvokeSetting: PPROG_INVOKE_SETTING,
22    Args: PVOID,
23    SecuritySet: BOOL,
24) -> ()}
25extern "system" {
26    pub fn SetEntriesInAclA(
27        cCountOfExplicitEntries: ULONG,
28        pListOfExplicitEntries: PEXPLICIT_ACCESS_A,
29        OldAcl: PACL,
30        NewAcl: *mut PACL,
31    ) -> DWORD;
32    pub fn SetEntriesInAclW(
33        cCountOfExplicitEntries: ULONG,
34        pListOfExplicitEntries: PEXPLICIT_ACCESS_W,
35        OldAcl: PACL,
36        NewAcl: *mut PACL,
37    ) -> DWORD;
38    pub fn GetExplicitEntriesFromAclA(
39        pacl: PACL,
40        pcCountOfExplicitEntries: PULONG,
41        pListOfExplicitEntries: *mut PEXPLICIT_ACCESS_A,
42    ) -> DWORD;
43    pub fn GetExplicitEntriesFromAclW(
44        pacl: PACL,
45        pcCountOfExplicitEntries: PULONG,
46        pListOfExplicitEntries: *mut PEXPLICIT_ACCESS_W,
47    ) -> DWORD;
48    pub fn GetEffectiveRightsFromAclA(
49        pacl: PACL,
50        pTrustee: PTRUSTEE_A,
51        pAccessRight: PACCESS_MASK,
52    ) -> DWORD;
53    pub fn GetEffectiveRightsFromAclW(
54        pacl: PACL,
55        pTrustee: PTRUSTEE_W,
56        pAccessRight: PACCESS_MASK,
57    ) -> DWORD;
58    pub fn GetAuditedPermissionsFromAclA(
59        pAcl: PACL,
60        pTrustee: PTRUSTEE_A,
61        pSuccessfulAuditedRights: PACCESS_MASK,
62        pFailedAuditRights: PACCESS_MASK,
63    ) -> DWORD;
64    pub fn GetAuditedPermissionsFromAclW(
65        pAcl: PACL,
66        pTrustee: PTRUSTEE_W,
67        pSuccessfulAuditedRights: PACCESS_MASK,
68        pFailedAuditRights: PACCESS_MASK,
69    ) -> DWORD;
70    pub fn GetNamedSecurityInfoA(
71        pObjectName: LPCSTR,
72        ObjectType: SE_OBJECT_TYPE,
73        SecurityInfo: SECURITY_INFORMATION,
74        ppsidOwner: *mut PSID,
75        ppsidGroup: *mut PSID,
76        ppDacl: *mut PACL,
77        ppSacl: *mut PACL,
78        ppSecurityDescriptor: *mut PSECURITY_DESCRIPTOR,
79    ) -> DWORD;
80    pub fn GetNamedSecurityInfoW(
81        pObjectName: LPCWSTR,
82        ObjectType: SE_OBJECT_TYPE,
83        SecurityInfo: SECURITY_INFORMATION,
84        ppsidOwner: *mut PSID,
85        ppsidGroup: *mut PSID,
86        ppDacl: *mut PACL,
87        ppSacl: *mut PACL,
88        ppSecurityDescriptor: *mut PSECURITY_DESCRIPTOR,
89    ) -> DWORD;
90    pub fn GetSecurityInfo(
91        handle: HANDLE,
92        ObjectType: SE_OBJECT_TYPE,
93        SecurityInfo: SECURITY_INFORMATION,
94        ppsidOwner: *mut PSID,
95        ppsidGroup: *mut PSID,
96        ppDacl: *mut PACL,
97        ppSacl: *mut PACL,
98        ppSecurityDescriptor: *mut PSECURITY_DESCRIPTOR,
99    ) -> DWORD;
100    pub fn SetNamedSecurityInfoA(
101        pObjectame: LPSTR,
102        ObjectType: SE_OBJECT_TYPE,
103        SecurityInfo: SECURITY_INFORMATION,
104        psidOwner: PSID,
105        psidGroup: PSID,
106        pDacl: PACL,
107        pSacl: PACL,
108    ) -> DWORD;
109    pub fn SetNamedSecurityInfoW(
110        pObjectame: LPWSTR,
111        ObjectType: SE_OBJECT_TYPE,
112        SecurityInfo: SECURITY_INFORMATION,
113        psidOwner: PSID,
114        psidGroup: PSID,
115        pDacl: PACL,
116        pSacl: PACL,
117    ) -> DWORD;
118    pub fn SetSecurityInfo(
119        handle: HANDLE,
120        ObjectType: SE_OBJECT_TYPE,
121        SecurityInfo: SECURITY_INFORMATION,
122        psidOwner: PSID,
123        psidGroup: PSID,
124        pDacl: PACL,
125        pSacl: PACL,
126    ) -> DWORD;
127    pub fn GetInheritanceSourceA(
128        pObjectName: LPSTR,
129        ObjectType: SE_OBJECT_TYPE,
130        SecurityInfo: SECURITY_INFORMATION,
131        Container: BOOL,
132        pObjectClassGuids: *mut *mut GUID,
133        GuidCount: DWORD,
134        pAcl: PACL,
135        pfnArray: PFN_OBJECT_MGR_FUNCTS,
136        pGenericMapping: PGENERIC_MAPPING,
137        pInheritArray: PINHERITED_FROMA,
138    ) -> DWORD;
139    pub fn GetInheritanceSourceW(
140        pObjectName: LPWSTR,
141        ObjectType: SE_OBJECT_TYPE,
142        SecurityInfo: SECURITY_INFORMATION,
143        Container: BOOL,
144        pObjectClassGuids: *mut *mut GUID,
145        GuidCount: DWORD,
146        pAcl: PACL,
147        pfnArray: PFN_OBJECT_MGR_FUNCTS,
148        pGenericMapping: PGENERIC_MAPPING,
149        pInheritArray: PINHERITED_FROMW,
150    ) -> DWORD;
151    pub fn FreeInheritedFromArray(
152        pInheritArray: PINHERITED_FROMW,
153        AceCnt: USHORT,
154        pfnArray: PFN_OBJECT_MGR_FUNCTS,
155    ) -> DWORD;
156    pub fn TreeResetNamedSecurityInfoA(
157        pObjectName: LPSTR,
158        ObjectType: SE_OBJECT_TYPE,
159        SecurityInfo: SECURITY_INFORMATION,
160        pOwner: PSID,
161        pGroup: PSID,
162        pDacl: PACL,
163        pSacl: PACL,
164        KeepExplicit: BOOL,
165        fnProgress: FN_PROGRESS,
166        ProgressInvokeSetting: PROG_INVOKE_SETTING,
167        Args: PVOID,
168    ) -> DWORD;
169    pub fn TreeResetNamedSecurityInfoW(
170        pObjectName: LPWSTR,
171        ObjectType: SE_OBJECT_TYPE,
172        SecurityInfo: SECURITY_INFORMATION,
173        pOwner: PSID,
174        pGroup: PSID,
175        pDacl: PACL,
176        pSacl: PACL,
177        KeepExplicit: BOOL,
178        fnProgress: FN_PROGRESS,
179        ProgressInvokeSetting: PROG_INVOKE_SETTING,
180        Args: PVOID,
181    ) -> DWORD;
182    pub fn TreeSetNamedSecurityInfoA(
183        pObjectName: LPSTR,
184        ObjectType: SE_OBJECT_TYPE,
185        SecurityInfo: SECURITY_INFORMATION,
186        pOwner: PSID,
187        pGroup: PSID,
188        pDacl: PACL,
189        pSacl: PACL,
190        dwAction: DWORD,
191        fnProgress: FN_PROGRESS,
192        ProgressInvokeSetting: PROG_INVOKE_SETTING,
193        Args: PVOID,
194    ) -> DWORD;
195    pub fn TreeSetNamedSecurityInfoW(
196        pObjectName: LPWSTR,
197        ObjectType: SE_OBJECT_TYPE,
198        SecurityInfo: SECURITY_INFORMATION,
199        pOwner: PSID,
200        pGroup: PSID,
201        pDacl: PACL,
202        pSacl: PACL,
203        dwAction: DWORD,
204        fnProgress: FN_PROGRESS,
205        ProgressInvokeSetting: PROG_INVOKE_SETTING,
206        Args: PVOID,
207    ) -> DWORD;
208    pub fn BuildSecurityDescriptorA(
209        pOwner: PTRUSTEE_A,
210        pGroup: PTRUSTEE_A,
211        cCountOfAccessEntries: ULONG,
212        pListOfAccessEntries: PEXPLICIT_ACCESS_A,
213        cCountOfAuditEntries: ULONG,
214        pListOfAuditEntries: PEXPLICIT_ACCESS_A,
215        pOldSD: PSECURITY_DESCRIPTOR,
216        pSizeNewSD: PULONG,
217        pNewSD: *mut PSECURITY_DESCRIPTOR,
218    ) -> DWORD;
219    pub fn BuildSecurityDescriptorW(
220        pOwner: PTRUSTEE_W,
221        pGroup: PTRUSTEE_W,
222        cCountOfAccessEntries: ULONG,
223        pListOfAccessEntries: PEXPLICIT_ACCESS_W,
224        cCountOfAuditEntries: ULONG,
225        pListOfAuditEntries: PEXPLICIT_ACCESS_W,
226        pOldSD: PSECURITY_DESCRIPTOR,
227        pSizeNewSD: PULONG,
228        pNewSD: *mut PSECURITY_DESCRIPTOR,
229    ) -> DWORD;
230    pub fn LookupSecurityDescriptorPartsA(
231        ppOwner: *mut PTRUSTEE_A,
232        ppGroup: *mut PTRUSTEE_A,
233        pcCountOfAccessEntries: PULONG,
234        ppListOfAccessEntries: *mut PEXPLICIT_ACCESS_A,
235        pcCountOfAuditEntries: PULONG,
236        ppListOfAuditEntries: *mut PEXPLICIT_ACCESS_A,
237        pSD: PSECURITY_DESCRIPTOR,
238    ) -> DWORD;
239    pub fn LookupSecurityDescriptorPartsW(
240        ppOwner: *mut PTRUSTEE_W,
241        ppGroup: *mut PTRUSTEE_W,
242        pcCountOfAccessEntries: PULONG,
243        ppListOfAccessEntries: *mut PEXPLICIT_ACCESS_W,
244        pcCountOfAuditEntries: PULONG,
245        ppListOfAuditEntries: *mut PEXPLICIT_ACCESS_W,
246        pSD: PSECURITY_DESCRIPTOR,
247    ) -> DWORD;
248    pub fn BuildExplicitAccessWithNameA(
249        pExplicitAccess: PEXPLICIT_ACCESS_A,
250        pTrusteeName: LPSTR,
251        AccessPermissions: DWORD,
252        AccessMode: ACCESS_MODE,
253        Inheritance: DWORD,
254    );
255    pub fn BuildExplicitAccessWithNameW(
256        pExplicitAccess: PEXPLICIT_ACCESS_W,
257        pTrusteeName: LPWSTR,
258        AccessPermissions: DWORD,
259        AccessMode: ACCESS_MODE,
260        Inheritance: DWORD,
261    );
262    pub fn BuildImpersonateExplicitAccessWithNameA(
263        pExplicitAccess: PEXPLICIT_ACCESS_A,
264        pTrusteeName: LPSTR,
265        pTrustee: PTRUSTEE_A,
266        AccessPermissions: DWORD,
267        AccessMode: ACCESS_MODE,
268        Inheritance: DWORD,
269    );
270    pub fn BuildImpersonateExplicitAccessWithNameW(
271        pExplicitAccess: PEXPLICIT_ACCESS_W,
272        pTrusteeName: LPWSTR,
273        pTrustee: PTRUSTEE_W,
274        AccessPermissions: DWORD,
275        AccessMode: ACCESS_MODE,
276        Inheritance: DWORD,
277    );
278    pub fn BuildTrusteeWithNameA(
279        pTrustee: PTRUSTEE_A,
280        pName: LPSTR,
281    );
282    pub fn BuildTrusteeWithNameW(
283        pTrustee: PTRUSTEE_W,
284        pName: LPWSTR,
285    );
286    pub fn BuildImpersonateTrusteeA(
287        pTrustee: PTRUSTEE_A,
288        pImpersonateTrustee: PTRUSTEE_A,
289    );
290    pub fn BuildImpersonateTrusteeW(
291        pTrustee: PTRUSTEE_W,
292        pImpersonateTrustee: PTRUSTEE_W,
293    );
294    pub fn BuildTrusteeWithSidA(
295        pTrustee: PTRUSTEE_A,
296        pSid: PSID,
297    );
298    pub fn BuildTrusteeWithSidW(
299        pTrustee: PTRUSTEE_W,
300        pSid: PSID,
301    );
302    pub fn BuildTrusteeWithObjectsAndSidA(
303        pTrustee: PTRUSTEE_A,
304        pObjSid: POBJECTS_AND_SID,
305        pObjectGuid: *mut GUID,
306        pInheritedObjectGuid: *mut GUID,
307        pSid: PSID,
308    );
309    pub fn BuildTrusteeWithObjectsAndSidW(
310        pTrustee: PTRUSTEE_W,
311        pObjSid: POBJECTS_AND_SID,
312        pObjectGuid: *mut GUID,
313        pInheritedObjectGuid: *mut GUID,
314        pSid: PSID,
315    );
316    pub fn BuildTrusteeWithObjectsAndNameA(
317        pTrustee: PTRUSTEE_A,
318        pObjName: POBJECTS_AND_NAME_A,
319        ObjectType: SE_OBJECT_TYPE,
320        ObjectTypeName: LPSTR,
321        InheritedObjectTypeName: LPSTR,
322        Name: LPSTR,
323    );
324    pub fn BuildTrusteeWithObjectsAndNameW(
325        pTrustee: PTRUSTEE_W,
326        pObjName: POBJECTS_AND_NAME_W,
327        ObjectType: SE_OBJECT_TYPE,
328        ObjectTypeName: LPWSTR,
329        InheritedObjectTypeName: LPWSTR,
330        Name: LPWSTR,
331    );
332    pub fn GetTrusteeNameA(
333        pTrustee: PTRUSTEE_A,
334    ) -> LPSTR;
335    pub fn GetTrusteeNameW(
336        pTrustee: PTRUSTEE_W,
337    ) -> LPWSTR;
338    pub fn GetTrusteeTypeA(
339        pTrustee: PTRUSTEE_A,
340    ) -> TRUSTEE_TYPE;
341    pub fn GetTrusteeTypeW(
342        pTrustee: PTRUSTEE_W,
343    ) -> TRUSTEE_TYPE;
344    pub fn GetTrusteeFormA(
345        pTrustee: PTRUSTEE_A,
346    ) -> TRUSTEE_FORM;
347    pub fn GetTrusteeFormW(
348        pTrustee: PTRUSTEE_W,
349    ) -> TRUSTEE_FORM;
350    pub fn GetMultipleTrusteeOperationA(
351        pTrustee: PTRUSTEE_A,
352    ) -> MULTIPLE_TRUSTEE_OPERATION;
353    pub fn GetMultipleTrusteeOperationW(
354        pTrustee: PTRUSTEE_W,
355    ) -> MULTIPLE_TRUSTEE_OPERATION;
356    pub fn GetMultipleTrusteeA(
357        pTrustee: PTRUSTEE_A,
358    ) -> PTRUSTEE_A;
359    pub fn GetMultipleTrusteeW(
360        pTrustee: PTRUSTEE_W,
361    ) -> PTRUSTEE_W;
362}