Reverted latest changes.
[reactos.git] / reactos / lib / advapi32 / sec / ac.c
1 /* $Id: ac.c,v 1.4 2002/09/08 10:22:37 chorns Exp $
2 *
3 * COPYRIGHT: See COPYING in the top level directory
4 * PROJECT: ReactOS system libraries
5 * FILE: lib/advapi32/sec/ac.c
6 * PURPOSE: ACL/ACE functions
7 */
8
9 #include <ddk/ntddk.h>
10 #include <ntdll/rtl.h>
11 #include <windows.h>
12
13
14 /* --- ACL --- */
15
16 WINBOOL
17 STDCALL
18 GetAclInformation (
19 PACL pAcl,
20 LPVOID pAclInformation,
21 DWORD nAclInformationLength,
22 ACL_INFORMATION_CLASS dwAclInformationClass
23 )
24 {
25 NTSTATUS Status;
26
27 Status = RtlQueryInformationAcl (pAcl,
28 pAclInformation,
29 nAclInformationLength,
30 dwAclInformationClass);
31 if (!NT_SUCCESS(Status))
32 {
33 SetLastError (RtlNtStatusToDosError (Status));
34 return FALSE;
35 }
36
37 return TRUE;
38 }
39
40
41 #if 0
42 DWORD
43 WINAPI
44 GetAuditedPermissionsFromAclA (
45 IN PACL pacl,
46 IN PTRUSTEE_A pTrustee,
47 OUT PACCESS_MASK pSuccessfulAuditedRights,
48 OUT PACCESS_MASK pFailedAuditRights
49 )
50 {
51 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
52 return 0;
53 }
54
55
56 DWORD
57 WINAPI
58 GetAuditedPermissionsFromAclW (
59 IN PACL pacl,
60 IN PTRUSTEE_W pTrustee,
61 OUT PACCESS_MASK pSuccessfulAuditedRights,
62 OUT PACCESS_MASK pFailedAuditRights
63 )
64 {
65 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
66 return 0;
67 }
68
69
70 DWORD
71 WINAPI
72 GetEffectiveRightsFromAclA (
73 IN PACL pacl,
74 IN PTRUSTEE_A pTrustee,
75 OUT PACCESS_MASK pAccessRights
76 )
77 {
78 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
79 return 0;
80 }
81
82
83 DWORD
84 WINAPI
85 GetEffectiveRightsFromAclW (
86 IN PACL pacl,
87 IN PTRUSTEE_W pTrustee,
88 OUT PACCESS_MASK pAccessRights
89 )
90 {
91 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
92 return 0;
93 }
94
95
96 DWORD
97 WINAPI
98 GetExplicitEntriesFromAclA (
99 IN PACL pacl,
100 OUT PULONG pcCountOfExplicitEntries,
101 OUT PEXPLICIT_ACCESS_A * pListOfExplicitEntries
102 )
103 {
104 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
105 return 0;
106 }
107
108
109 DWORD
110 WINAPI
111 GetExplicitEntriesFromAclW (
112 IN PACL pacl,
113 OUT PULONG pcCountOfExplicitEntries,
114 OUT PEXPLICIT_ACCESS_W * pListOfExplicitEntries
115 )
116 {
117 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
118 return 0;
119 }
120 #endif
121
122
123 WINBOOL
124 STDCALL
125 InitializeAcl (
126 PACL pAcl,
127 DWORD nAclLength,
128 DWORD dwAclRevision
129 )
130 {
131 NTSTATUS Status;
132
133 Status = RtlCreateAcl (pAcl,
134 nAclLength,
135 dwAclRevision);
136 if (!NT_SUCCESS(Status))
137 {
138 SetLastError (RtlNtStatusToDosError (Status));
139 return FALSE;
140 }
141
142 return TRUE;
143 }
144
145
146 WINBOOL
147 STDCALL
148 IsValidAcl (
149 PACL pAcl
150 )
151 {
152 return RtlValidAcl (pAcl);
153 }
154
155
156 WINBOOL
157 STDCALL
158 SetAclInformation (
159 PACL pAcl,
160 LPVOID pAclInformation,
161 DWORD nAclInformationLength,
162 ACL_INFORMATION_CLASS dwAclInformationClass
163 )
164 {
165 NTSTATUS Status;
166
167 Status = RtlSetInformationAcl (pAcl,
168 pAclInformation,
169 nAclInformationLength,
170 dwAclInformationClass);
171 if (!NT_SUCCESS(Status))
172 {
173 SetLastError (RtlNtStatusToDosError (Status));
174 return FALSE;
175 }
176
177 return TRUE;
178 }
179
180
181 #if 0
182 DWORD
183 WINAPI
184 SetEntriesInAclA (
185 IN ULONG cCountOfExplicitEntries,
186 IN PEXPLICIT_ACCESS_A pListOfExplicitEntries,
187 IN PACL OldAcl,
188 OUT PACL * NewAcl
189 )
190 {
191 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
192 return 0;
193 }
194
195
196 DWORD
197 WINAPI
198 SetEntriesInAclW (
199 IN ULONG cCountOfExplicitEntries,
200 IN PEXPLICIT_ACCESS_W pListOfExplicitEntries,
201 IN PACL OldAcl,
202 OUT PACL * NewAcl
203 )
204 {
205 SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
206 return 0;
207 }
208 #endif
209
210
211
212 /* --- ACE --- */
213
214 WINBOOL
215 STDCALL
216 AddAccessAllowedAce (
217 PACL pAcl,
218 DWORD dwAceRevision,
219 DWORD AccessMask,
220 PSID pSid
221 )
222 {
223 NTSTATUS Status;
224
225 Status = RtlAddAccessAllowedAce (pAcl,
226 dwAceRevision,
227 AccessMask,
228 pSid);
229 if (!NT_SUCCESS(Status))
230 {
231 SetLastError (RtlNtStatusToDosError (Status));
232 return FALSE;
233 }
234
235 return TRUE;
236 }
237
238
239 WINBOOL
240 STDCALL
241 AddAccessDeniedAce (
242 PACL pAcl,
243 DWORD dwAceRevision,
244 DWORD AccessMask,
245 PSID pSid
246 )
247 {
248 NTSTATUS Status;
249
250 Status = RtlAddAccessDeniedAce (pAcl,
251 dwAceRevision,
252 AccessMask,
253 pSid);
254 if (!NT_SUCCESS(Status))
255 {
256 SetLastError (RtlNtStatusToDosError (Status));
257 return FALSE;
258 }
259
260 return TRUE;
261 }
262
263
264 WINBOOL
265 STDCALL
266 AddAce (
267 PACL pAcl,
268 DWORD dwAceRevision,
269 DWORD dwStartingAceIndex,
270 LPVOID pAceList,
271 DWORD nAceListLength
272 )
273 {
274 NTSTATUS Status;
275
276 Status = RtlAddAce (pAcl,
277 dwAceRevision,
278 dwStartingAceIndex,
279 pAceList,
280 nAceListLength);
281 if (!NT_SUCCESS(Status))
282 {
283 SetLastError (RtlNtStatusToDosError (Status));
284 return FALSE;
285 }
286
287 return TRUE;
288 }
289
290
291 WINBOOL
292 STDCALL
293 AddAuditAccessAce (
294 PACL pAcl,
295 DWORD dwAceRevision,
296 DWORD dwAccessMask,
297 PSID pSid,
298 WINBOOL bAuditSuccess,
299 WINBOOL bAuditFailure
300 )
301 {
302 NTSTATUS Status;
303
304 Status = RtlAddAuditAccessAce (pAcl,
305 dwAceRevision,
306 dwAccessMask,
307 pSid,
308 bAuditSuccess,
309 bAuditFailure);
310 if (!NT_SUCCESS(Status))
311 {
312 SetLastError (RtlNtStatusToDosError (Status));
313 return FALSE;
314 }
315
316 return TRUE;
317 }
318
319
320 WINBOOL
321 STDCALL
322 DeleteAce (
323 PACL pAcl,
324 DWORD dwAceIndex
325 )
326 {
327 NTSTATUS Status;
328
329 Status = RtlDeleteAce (pAcl,
330 dwAceIndex);
331 if (!NT_SUCCESS(Status))
332 {
333 SetLastError (RtlNtStatusToDosError (Status));
334 return FALSE;
335 }
336
337 return TRUE;
338 }
339
340
341 WINBOOL
342 STDCALL
343 FindFirstFreeAce (
344 PACL pAcl,
345 LPVOID * pAce
346 )
347 {
348 return RtlFirstFreeAce (pAcl,
349 (PACE*)pAce);
350 }
351
352
353 WINBOOL
354 STDCALL
355 GetAce (
356 PACL pAcl,
357 DWORD dwAceIndex,
358 LPVOID * pAce
359 )
360 {
361 NTSTATUS Status;
362
363 Status = RtlGetAce (pAcl,
364 dwAceIndex,
365 (PACE*)pAce);
366 if (!NT_SUCCESS(Status))
367 {
368 SetLastError (RtlNtStatusToDosError (Status));
369 return FALSE;
370 }
371
372 return TRUE;
373 }
374
375 /* EOF */