:pserver:cvsanon@mok.lvcm.com:/CVS/ReactOS reactos
[reactos.git] / lib / advapi32 / sec / ac.c
1 /* $Id$
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 */