1use 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}