-/* $Id: ac.c,v 1.1 1999/11/07 08:04:55 ea Exp $
+/* $Id: ac.c,v 1.11 2004/09/13 12:14:11 ekohl Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS system libraries
* FILE: lib/advapi32/sec/ac.c
* PURPOSE: ACL/ACE functions
*/
-#include <windows.h>
+
+#include "advapi32.h"
/* --- ACL --- */
-WINBOOL
+/*
+ * @implemented
+ */
+BOOL
STDCALL
GetAclInformation (
PACL pAcl,
ACL_INFORMATION_CLASS dwAclInformationClass
)
{
- SetLastError (ERROR_CALL_NOT_IMPLEMENTED);
- return FALSE;
-}
-
-
-#if 0
-DWORD
-WINAPI
-GetAuditedPermissionsFromAclA (
- IN PACL pacl,
- IN PTRUSTEE_A pTrustee,
- OUT PACCESS_MASK pSuccessfulAuditedRights,
- OUT PACCESS_MASK pFailedAuditRights
- )
-{
- SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
- return 0;
+ NTSTATUS Status;
+
+ Status = RtlQueryInformationAcl (pAcl,
+ pAclInformation,
+ nAclInformationLength,
+ dwAclInformationClass);
+ if (!NT_SUCCESS(Status))
+ {
+ SetLastError (RtlNtStatusToDosError (Status));
+ return FALSE;
+ }
+
+ return TRUE;
}
-DWORD
-WINAPI
-GetAuditedPermissionsFromAclW (
- IN PACL pacl,
- IN PTRUSTEE_W pTrustee,
- OUT PACCESS_MASK pSuccessfulAuditedRights,
- OUT PACCESS_MASK pFailedAuditRights
- )
-{
- SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
- return 0;
-}
-
-
-DWORD
-WINAPI
-GetEffectiveRightsFromAclA (
- IN PACL pacl,
- IN PTRUSTEE_A pTrustee,
- OUT PACCESS_MASK pAccessRights
- )
-{
- SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
- return 0;
-}
-
-
-DWORD
-WINAPI
-GetEffectiveRightsFromAclW (
- IN PACL pacl,
- IN PTRUSTEE_W pTrustee,
- OUT PACCESS_MASK pAccessRights
- )
-{
- SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
- return 0;
-}
-
-
-DWORD
-WINAPI
-GetExplicitEntriesFromAclA (
- IN PACL pacl,
- OUT PULONG pcCountOfExplicitEntries,
- OUT PEXPLICIT_ACCESS_A * pListOfExplicitEntries
- )
-{
- SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
- return 0;
-}
-
-
-DWORD
-WINAPI
-GetExplicitEntriesFromAclW (
- IN PACL pacl,
- OUT PULONG pcCountOfExplicitEntries,
- OUT PEXPLICIT_ACCESS_W * pListOfExplicitEntries
- )
-{
- SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
- return 0;
-}
-#endif
-
-
-WINBOOL
+/*
+ * @implemented
+ */
+BOOL
STDCALL
InitializeAcl (
PACL pAcl,
DWORD dwAclRevision
)
{
- SetLastError (ERROR_CALL_NOT_IMPLEMENTED);
- return FALSE;
+ NTSTATUS Status;
+
+ Status = RtlCreateAcl (pAcl,
+ nAclLength,
+ dwAclRevision);
+ if (!NT_SUCCESS(Status))
+ {
+ SetLastError (RtlNtStatusToDosError (Status));
+ return FALSE;
+ }
+
+ return TRUE;
}
-WINBOOL
+/*
+ * @implemented
+ */
+BOOL
STDCALL
IsValidAcl (
PACL pAcl
)
{
- SetLastError (ERROR_CALL_NOT_IMPLEMENTED);
- return FALSE;
+ return RtlValidAcl (pAcl);
}
-WINBOOL
+/*
+ * @implemented
+ */
+BOOL
STDCALL
SetAclInformation (
PACL pAcl,
ACL_INFORMATION_CLASS dwAclInformationClass
)
{
- SetLastError (ERROR_CALL_NOT_IMPLEMENTED);
- return FALSE;
+ NTSTATUS Status;
+
+ Status = RtlSetInformationAcl (pAcl,
+ pAclInformation,
+ nAclInformationLength,
+ dwAclInformationClass);
+ if (!NT_SUCCESS(Status))
+ {
+ SetLastError (RtlNtStatusToDosError (Status));
+ return FALSE;
+ }
+
+ return TRUE;
}
-#if 0
-DWORD
-WINAPI
-SetEntriesInAclA (
- IN ULONG cCountOfExplicitEntries,
- IN PEXPLICIT_ACCESS_A pListOfExplicitEntries,
- IN PACL OldAcl,
- OUT PACL * NewAcl
- )
-{
- SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
- return 0;
-}
-
-
-DWORD
-WINAPI
-SetEntriesInAclW (
- IN ULONG cCountOfExplicitEntries,
- IN PEXPLICIT_ACCESS_W pListOfExplicitEntries,
- IN PACL OldAcl,
- OUT PACL * NewAcl
- )
-{
- SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
- return 0;
-}
-#endif
-
-
-
/* --- ACE --- */
-
-
-WINBOOL
+/*
+ * @implemented
+ */
+BOOL
STDCALL
AddAccessAllowedAce (
PACL pAcl,
PSID pSid
)
{
- SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
- return FALSE;
+ NTSTATUS Status;
+
+ Status = RtlAddAccessAllowedAce (pAcl,
+ dwAceRevision,
+ AccessMask,
+ pSid);
+ if (!NT_SUCCESS(Status))
+ {
+ SetLastError (RtlNtStatusToDosError (Status));
+ return FALSE;
+ }
+
+ return TRUE;
}
+/*
+ * @implemented
+ */
+BOOL STDCALL
+AddAccessAllowedAceEx(PACL pAcl,
+ DWORD dwAceRevision,
+ DWORD AceFlags,
+ DWORD AccessMask,
+ PSID pSid)
+{
+ NTSTATUS Status;
+
+ Status = RtlAddAccessAllowedAceEx(pAcl,
+ dwAceRevision,
+ AceFlags,
+ AccessMask,
+ pSid);
+ if (!NT_SUCCESS(Status))
+ {
+ SetLastError(RtlNtStatusToDosError(Status));
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
-WINBOOL
+/*
+ * @implemented
+ */
+BOOL
STDCALL
AddAccessDeniedAce (
PACL pAcl,
PSID pSid
)
{
- SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
- return FALSE;
+ NTSTATUS Status;
+
+ Status = RtlAddAccessDeniedAce (pAcl,
+ dwAceRevision,
+ AccessMask,
+ pSid);
+ if (!NT_SUCCESS(Status))
+ {
+ SetLastError (RtlNtStatusToDosError (Status));
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+
+/*
+ * @implemented
+ */
+BOOL STDCALL
+AddAccessDeniedAceEx(PACL pAcl,
+ DWORD dwAceRevision,
+ DWORD AceFlags,
+ DWORD AccessMask,
+ PSID pSid)
+{
+ NTSTATUS Status;
+
+ Status = RtlAddAccessDeniedAceEx(pAcl,
+ dwAceRevision,
+ AceFlags,
+ AccessMask,
+ pSid);
+ if (!NT_SUCCESS(Status))
+ {
+ SetLastError(RtlNtStatusToDosError(Status));
+ return FALSE;
+ }
+
+ return TRUE;
}
-WINBOOL
+/*
+ * @implemented
+ */
+BOOL
STDCALL
AddAce (
PACL pAcl,
DWORD nAceListLength
)
{
- SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
- return FALSE;
+ NTSTATUS Status;
+
+ Status = RtlAddAce (pAcl,
+ dwAceRevision,
+ dwStartingAceIndex,
+ pAceList,
+ nAceListLength);
+ if (!NT_SUCCESS(Status))
+ {
+ SetLastError (RtlNtStatusToDosError (Status));
+ return FALSE;
+ }
+
+ return TRUE;
}
-
-WINBOOL
+/*
+ * @implemented
+ */
+BOOL
STDCALL
AddAuditAccessAce (
PACL pAcl,
DWORD dwAceRevision,
DWORD dwAccessMask,
PSID pSid,
- WINBOOL bAuditSuccess,
- WINBOOL bAuditFailure
+ BOOL bAuditSuccess,
+ BOOL bAuditFailure
)
{
- SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
- return FALSE;
+ NTSTATUS Status;
+
+ Status = RtlAddAuditAccessAce (pAcl,
+ dwAceRevision,
+ dwAccessMask,
+ pSid,
+ bAuditSuccess,
+ bAuditFailure);
+ if (!NT_SUCCESS(Status))
+ {
+ SetLastError (RtlNtStatusToDosError (Status));
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+
+/*
+ * @implemented
+ */
+BOOL STDCALL
+AddAuditAccessAceEx(PACL pAcl,
+ DWORD dwAceRevision,
+ DWORD AceFlags,
+ DWORD dwAccessMask,
+ PSID pSid,
+ BOOL bAuditSuccess,
+ BOOL bAuditFailure)
+{
+ NTSTATUS Status;
+
+ Status = RtlAddAuditAccessAceEx(pAcl,
+ dwAceRevision,
+ AceFlags,
+ dwAccessMask,
+ pSid,
+ bAuditSuccess,
+ bAuditFailure);
+ if (!NT_SUCCESS(Status))
+ {
+ SetLastError(RtlNtStatusToDosError(Status));
+ return FALSE;
+ }
+
+ return TRUE;
}
-WINBOOL
+/*
+ * @implemented
+ */
+BOOL
STDCALL
DeleteAce (
PACL pAcl,
DWORD dwAceIndex
)
{
- SetLastError (ERROR_CALL_NOT_IMPLEMENTED);
- return FALSE;
+ NTSTATUS Status;
+
+ Status = RtlDeleteAce (pAcl,
+ dwAceIndex);
+ if (!NT_SUCCESS(Status))
+ {
+ SetLastError (RtlNtStatusToDosError (Status));
+ return FALSE;
+ }
+
+ return TRUE;
}
-WINBOOL
+/*
+ * @implemented
+ */
+BOOL
STDCALL
FindFirstFreeAce (
PACL pAcl,
LPVOID * pAce
)
{
- SetLastError (ERROR_CALL_NOT_IMPLEMENTED);
- return FALSE;
+ return RtlFirstFreeAce (pAcl,
+ (PACE*)pAce);
}
-WINBOOL
+/*
+ * @implemented
+ */
+BOOL
STDCALL
GetAce (
PACL pAcl,
LPVOID * pAce
)
{
- SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
- return FALSE;
+ NTSTATUS Status;
+
+ Status = RtlGetAce (pAcl,
+ dwAceIndex,
+ (PACE*)pAce);
+ if (!NT_SUCCESS(Status))
+ {
+ SetLastError (RtlNtStatusToDosError (Status));
+ return FALSE;
+ }
+
+ return TRUE;
}
-
/* EOF */