xpmgr/BuildTools/Include/AclAPI.h

703 lines
19 KiB
C

/*++ BUILD Version: 0001 // Increment this if a change has global effects
Copyright (c) 1993-1999, Microsoft Corporation
Module Name:
aclapi.h
Abstract:
Public
Structure/constant definitions and typedefines for the Win32 Access
Control APIs
--*/
#ifndef __ACCESS_CONTROL_API__
#define __ACCESS_CONTROL_API__
#include <windows.h>
#include <accctrl.h>
#ifdef __cplusplus
extern "C" {
#endif
//
// Progress Function:
// Caller of tree operation implements this Progress function, then
// passes its function pointer to tree operation.
// Tree operation invokes Progress function to provide progress and error
// information to the caller during the potentially long execution
// of the tree operation. Tree operation provides the name of the object
// last processed and the error status of the operation on that object.
// Tree operation also passes the current InvokeSetting value.
// Caller may change the InvokeSetting value, for example, from "Always"
// to "Only On Error."
//
typedef VOID (*FN_PROGRESS) (
__in LPWSTR pObjectName, // name of object just processed
__in DWORD Status, // status of operation on object
__inout PPROG_INVOKE_SETTING pInvokeSetting, // Never, always,
__in PVOID Args, // Caller specific data
__in BOOL SecuritySet // Whether security was set
);
WINADVAPI
DWORD
WINAPI
SetEntriesInAclA(
__in ULONG cCountOfExplicitEntries,
__in_ecount_opt(cCountOfExplicitEntries) PEXPLICIT_ACCESS_A pListOfExplicitEntries,
__in_opt PACL OldAcl,
__out PACL * NewAcl
);
WINADVAPI
DWORD
WINAPI
SetEntriesInAclW(
__in ULONG cCountOfExplicitEntries,
__in_ecount_opt(cCountOfExplicitEntries) PEXPLICIT_ACCESS_W pListOfExplicitEntries,
__in_opt PACL OldAcl,
__out PACL * NewAcl
);
#ifdef UNICODE
#define SetEntriesInAcl SetEntriesInAclW
#else
#define SetEntriesInAcl SetEntriesInAclA
#endif // !UNICODE
WINADVAPI
DWORD
WINAPI
GetExplicitEntriesFromAclA(
__in PACL pacl,
__out PULONG pcCountOfExplicitEntries,
__deref_out_ecount(*pcCountOfExplicitEntries) PEXPLICIT_ACCESS_A * pListOfExplicitEntries
);
WINADVAPI
DWORD
WINAPI
GetExplicitEntriesFromAclW(
__in PACL pacl,
__out PULONG pcCountOfExplicitEntries,
__deref_out_ecount(*pcCountOfExplicitEntries) PEXPLICIT_ACCESS_W * pListOfExplicitEntries
);
#ifdef UNICODE
#define GetExplicitEntriesFromAcl GetExplicitEntriesFromAclW
#else
#define GetExplicitEntriesFromAcl GetExplicitEntriesFromAclA
#endif // !UNICODE
WINADVAPI
DWORD
WINAPI
GetEffectiveRightsFromAclA(
__in PACL pacl,
__in PTRUSTEE_A pTrustee,
__out PACCESS_MASK pAccessRights
);
WINADVAPI
DWORD
WINAPI
GetEffectiveRightsFromAclW(
__in PACL pacl,
__in PTRUSTEE_W pTrustee,
__out PACCESS_MASK pAccessRights
);
#ifdef UNICODE
#define GetEffectiveRightsFromAcl GetEffectiveRightsFromAclW
#else
#define GetEffectiveRightsFromAcl GetEffectiveRightsFromAclA
#endif // !UNICODE
WINADVAPI
DWORD
WINAPI
GetAuditedPermissionsFromAclA(
__in PACL pacl,
__in PTRUSTEE_A pTrustee,
__out PACCESS_MASK pSuccessfulAuditedRights,
__out PACCESS_MASK pFailedAuditRights
);
WINADVAPI
DWORD
WINAPI
GetAuditedPermissionsFromAclW(
__in PACL pacl,
__in PTRUSTEE_W pTrustee,
__out PACCESS_MASK pSuccessfulAuditedRights,
__out PACCESS_MASK pFailedAuditRights
);
#ifdef UNICODE
#define GetAuditedPermissionsFromAcl GetAuditedPermissionsFromAclW
#else
#define GetAuditedPermissionsFromAcl GetAuditedPermissionsFromAclA
#endif // !UNICODE
WINADVAPI
DWORD
WINAPI
GetNamedSecurityInfoA(
__in LPCSTR pObjectName,
__in SE_OBJECT_TYPE ObjectType,
__in SECURITY_INFORMATION SecurityInfo,
__out_opt const PSID * ppsidOwner,
__out_opt const PSID * ppsidGroup,
__out_opt const PACL * ppDacl,
__out_opt const PACL * ppSacl,
__out PSECURITY_DESCRIPTOR * ppSecurityDescriptor
);
WINADVAPI
DWORD
WINAPI
GetNamedSecurityInfoW(
__in LPCWSTR pObjectName,
__in SE_OBJECT_TYPE ObjectType,
__in SECURITY_INFORMATION SecurityInfo,
__out_opt const PSID * ppsidOwner,
__out_opt const PSID * ppsidGroup,
__out_opt const PACL * ppDacl,
__out_opt const PACL * ppSacl,
__out PSECURITY_DESCRIPTOR * ppSecurityDescriptor
);
#ifdef UNICODE
#define GetNamedSecurityInfo GetNamedSecurityInfoW
#else
#define GetNamedSecurityInfo GetNamedSecurityInfoA
#endif // !UNICODE
WINADVAPI
DWORD
WINAPI
GetSecurityInfo(
__in HANDLE handle,
__in SE_OBJECT_TYPE ObjectType,
__in SECURITY_INFORMATION SecurityInfo,
__out_opt PSID * ppsidOwner,
__out_opt PSID * ppsidGroup,
__out_opt PACL * ppDacl,
__out_opt PACL * ppSacl,
__out_opt PSECURITY_DESCRIPTOR * ppSecurityDescriptor
);
WINADVAPI
DWORD
WINAPI
SetNamedSecurityInfoA(
__in LPSTR pObjectName,
__in SE_OBJECT_TYPE ObjectType,
__in SECURITY_INFORMATION SecurityInfo,
__in_opt PSID psidOwner,
__in_opt PSID psidGroup,
__in_opt PACL pDacl,
__in_opt PACL pSacl
);
WINADVAPI
DWORD
WINAPI
SetNamedSecurityInfoW(
__in LPWSTR pObjectName,
__in SE_OBJECT_TYPE ObjectType,
__in SECURITY_INFORMATION SecurityInfo,
__in_opt PSID psidOwner,
__in_opt PSID psidGroup,
__in_opt PACL pDacl,
__in_opt PACL pSacl
);
#ifdef UNICODE
#define SetNamedSecurityInfo SetNamedSecurityInfoW
#else
#define SetNamedSecurityInfo SetNamedSecurityInfoA
#endif // !UNICODE
WINADVAPI
DWORD
WINAPI
SetSecurityInfo(
__in HANDLE handle,
__in SE_OBJECT_TYPE ObjectType,
__in SECURITY_INFORMATION SecurityInfo,
__in_opt PSID psidOwner,
__in_opt PSID psidGroup,
__in_opt PACL pDacl,
__in_opt PACL pSacl
);
WINADVAPI
DWORD
WINAPI
GetInheritanceSourceA(
__in LPSTR pObjectName,
__in SE_OBJECT_TYPE ObjectType,
__in SECURITY_INFORMATION SecurityInfo,
__in BOOL Container,
__in_ecount_opt(GuidCount) GUID ** pObjectClassGuids,
__in DWORD GuidCount,
__in PACL pAcl,
__in_opt PFN_OBJECT_MGR_FUNCTS pfnArray,
__in PGENERIC_MAPPING pGenericMapping,
__out PINHERITED_FROMA pInheritArray
);
WINADVAPI
DWORD
WINAPI
GetInheritanceSourceW(
__in LPWSTR pObjectName,
__in SE_OBJECT_TYPE ObjectType,
__in SECURITY_INFORMATION SecurityInfo,
__in BOOL Container,
__in_ecount_opt(GuidCount) GUID ** pObjectClassGuids,
__in DWORD GuidCount,
__in PACL pAcl,
__in_opt PFN_OBJECT_MGR_FUNCTS pfnArray,
__in PGENERIC_MAPPING pGenericMapping,
__out PINHERITED_FROMW pInheritArray
);
#ifdef UNICODE
#define GetInheritanceSource GetInheritanceSourceW
#else
#define GetInheritanceSource GetInheritanceSourceA
#endif // !UNICODE
WINADVAPI
DWORD
WINAPI
FreeInheritedFromArray(
__in_ecount(AceCnt) PINHERITED_FROMW pInheritArray,
__in USHORT AceCnt,
__in_opt PFN_OBJECT_MGR_FUNCTS pfnArray OPTIONAL
);
WINADVAPI
DWORD
WINAPI
TreeResetNamedSecurityInfoA(
__in LPSTR pObjectName,
__in SE_OBJECT_TYPE ObjectType,
__in SECURITY_INFORMATION SecurityInfo,
__in_opt PSID pOwner,
__in_opt PSID pGroup,
__in_opt PACL pDacl,
__in_opt PACL pSacl,
__in BOOL KeepExplicit,
__in_opt FN_PROGRESS fnProgress,
__in PROG_INVOKE_SETTING ProgressInvokeSetting,
__in_opt PVOID Args
);
WINADVAPI
DWORD
WINAPI
TreeResetNamedSecurityInfoW(
__in LPWSTR pObjectName,
__in SE_OBJECT_TYPE ObjectType,
__in SECURITY_INFORMATION SecurityInfo,
__in_opt PSID pOwner,
__in_opt PSID pGroup,
__in_opt PACL pDacl,
__in_opt PACL pSacl,
__in BOOL KeepExplicit,
__in_opt FN_PROGRESS fnProgress,
__in PROG_INVOKE_SETTING ProgressInvokeSetting,
__in_opt PVOID Args
);
#ifdef UNICODE
#define TreeResetNamedSecurityInfo TreeResetNamedSecurityInfoW
#else
#define TreeResetNamedSecurityInfo TreeResetNamedSecurityInfoA
#endif // !UNICODE
#if (NTDDI_VERSION >= NTDDI_VISTA)
WINADVAPI
DWORD
WINAPI
TreeSetNamedSecurityInfoA(
__in LPSTR pObjectName,
__in SE_OBJECT_TYPE ObjectType,
__in SECURITY_INFORMATION SecurityInfo,
__in_opt PSID pOwner,
__in_opt PSID pGroup,
__in_opt PACL pDacl,
__in_opt PACL pSacl,
__in DWORD dwAction,
__in_opt FN_PROGRESS fnProgress,
__in PROG_INVOKE_SETTING ProgressInvokeSetting,
__in_opt PVOID Args
);
WINADVAPI
DWORD
WINAPI
TreeSetNamedSecurityInfoW(
__in LPWSTR pObjectName,
__in SE_OBJECT_TYPE ObjectType,
__in SECURITY_INFORMATION SecurityInfo,
__in_opt PSID pOwner,
__in_opt PSID pGroup,
__in_opt PACL pDacl,
__in_opt PACL pSacl,
__in DWORD dwAction,
__in_opt FN_PROGRESS fnProgress,
__in PROG_INVOKE_SETTING ProgressInvokeSetting,
__in_opt PVOID Args
);
#ifdef UNICODE
#define TreeSetNamedSecurityInfo TreeSetNamedSecurityInfoW
#else
#define TreeSetNamedSecurityInfo TreeSetNamedSecurityInfoA
#endif // !UNICODE
#endif // (NTDDI_VERSION >= NTDDI_VISTA)
//----------------------------------------------------------------------------
// The following API are provided for trusted servers to use to
// implement access control on their own objects.
//----------------------------------------------------------------------------
WINADVAPI
DWORD
WINAPI
BuildSecurityDescriptorA(
__in_opt PTRUSTEE_A pOwner,
__in_opt PTRUSTEE_A pGroup,
__in ULONG cCountOfAccessEntries,
__in_ecount_opt(cCountOfAccessEntries) PEXPLICIT_ACCESS_A pListOfAccessEntries,
__in ULONG cCountOfAuditEntries,
__in_ecount_opt(cCountOfAuditEntries) PEXPLICIT_ACCESS_A pListOfAuditEntries,
__in_opt PSECURITY_DESCRIPTOR pOldSD,
__out PULONG pSizeNewSD,
__deref_out_bcount(*pSizeNewSD) PSECURITY_DESCRIPTOR * pNewSD
);
WINADVAPI
DWORD
WINAPI
BuildSecurityDescriptorW(
__in_opt PTRUSTEE_W pOwner,
__in_opt PTRUSTEE_W pGroup,
__in ULONG cCountOfAccessEntries,
__in_ecount_opt(cCountOfAccessEntries) PEXPLICIT_ACCESS_W pListOfAccessEntries,
__in ULONG cCountOfAuditEntries,
__in_ecount_opt(cCountOfAuditEntries) PEXPLICIT_ACCESS_W pListOfAuditEntries,
__in_opt PSECURITY_DESCRIPTOR pOldSD,
__out PULONG pSizeNewSD,
__deref_out_bcount(*pSizeNewSD) PSECURITY_DESCRIPTOR * pNewSD
);
#ifdef UNICODE
#define BuildSecurityDescriptor BuildSecurityDescriptorW
#else
#define BuildSecurityDescriptor BuildSecurityDescriptorA
#endif // !UNICODE
WINADVAPI
DWORD
WINAPI
LookupSecurityDescriptorPartsA(
__out_opt PTRUSTEE_A * ppOwner,
__out_opt PTRUSTEE_A * ppGroup,
__out_opt PULONG pcCountOfAccessEntries,
__deref_out_ecount_opt(*pcCountOfAccessEntries) PEXPLICIT_ACCESS_A * ppListOfAccessEntries,
__out_opt PULONG pcCountOfAuditEntries,
__deref_out_ecount_opt(*pcCountOfAuditEntries) PEXPLICIT_ACCESS_A * ppListOfAuditEntries,
__in PSECURITY_DESCRIPTOR pSD
);
WINADVAPI
DWORD
WINAPI
LookupSecurityDescriptorPartsW(
__out_opt PTRUSTEE_W * ppOwner,
__out_opt PTRUSTEE_W * ppGroup,
__out_opt PULONG pcCountOfAccessEntries,
__deref_out_ecount_opt(*pcCountOfAccessEntries) PEXPLICIT_ACCESS_W * ppListOfAccessEntries,
__out_opt PULONG pcCountOfAuditEntries,
__deref_out_ecount_opt(*pcCountOfAuditEntries) PEXPLICIT_ACCESS_W * ppListOfAuditEntries,
__in PSECURITY_DESCRIPTOR pSD
);
#ifdef UNICODE
#define LookupSecurityDescriptorParts LookupSecurityDescriptorPartsW
#else
#define LookupSecurityDescriptorParts LookupSecurityDescriptorPartsA
#endif // !UNICODE
//----------------------------------------------------------------------------
// The following helper API are provided for building
// access control structures.
//----------------------------------------------------------------------------
WINADVAPI
VOID
WINAPI
BuildExplicitAccessWithNameA(
__inout PEXPLICIT_ACCESS_A pExplicitAccess,
__in_opt LPSTR pTrusteeName,
__in DWORD AccessPermissions,
__in ACCESS_MODE AccessMode,
__in DWORD Inheritance
);
WINADVAPI
VOID
WINAPI
BuildExplicitAccessWithNameW(
__inout PEXPLICIT_ACCESS_W pExplicitAccess,
__in_opt LPWSTR pTrusteeName,
__in DWORD AccessPermissions,
__in ACCESS_MODE AccessMode,
__in DWORD Inheritance
);
#ifdef UNICODE
#define BuildExplicitAccessWithName BuildExplicitAccessWithNameW
#else
#define BuildExplicitAccessWithName BuildExplicitAccessWithNameA
#endif // !UNICODE
WINADVAPI
VOID
WINAPI
BuildImpersonateExplicitAccessWithNameA(
__inout PEXPLICIT_ACCESS_A pExplicitAccess,
__in_opt LPSTR pTrusteeName,
__in_opt PTRUSTEE_A pTrustee,
__in DWORD AccessPermissions,
__in ACCESS_MODE AccessMode,
__in DWORD Inheritance
);
WINADVAPI
VOID
WINAPI
BuildImpersonateExplicitAccessWithNameW(
__inout PEXPLICIT_ACCESS_W pExplicitAccess,
__in_opt LPWSTR pTrusteeName,
__in_opt PTRUSTEE_W pTrustee,
__in DWORD AccessPermissions,
__in ACCESS_MODE AccessMode,
__in DWORD Inheritance
);
#ifdef UNICODE
#define BuildImpersonateExplicitAccessWithName BuildImpersonateExplicitAccessWithNameW
#else
#define BuildImpersonateExplicitAccessWithName BuildImpersonateExplicitAccessWithNameA
#endif // !UNICODE
WINADVAPI
VOID
WINAPI
BuildTrusteeWithNameA(
__inout PTRUSTEE_A pTrustee,
__in_opt LPSTR pName
);
WINADVAPI
VOID
WINAPI
BuildTrusteeWithNameW(
__inout PTRUSTEE_W pTrustee,
__in_opt LPWSTR pName
);
#ifdef UNICODE
#define BuildTrusteeWithName BuildTrusteeWithNameW
#else
#define BuildTrusteeWithName BuildTrusteeWithNameA
#endif // !UNICODE
WINADVAPI
VOID
WINAPI
BuildImpersonateTrusteeA(
__inout PTRUSTEE_A pTrustee,
__in_opt PTRUSTEE_A pImpersonateTrustee
);
WINADVAPI
VOID
WINAPI
BuildImpersonateTrusteeW(
__inout PTRUSTEE_W pTrustee,
__in_opt PTRUSTEE_W pImpersonateTrustee
);
#ifdef UNICODE
#define BuildImpersonateTrustee BuildImpersonateTrusteeW
#else
#define BuildImpersonateTrustee BuildImpersonateTrusteeA
#endif // !UNICODE
WINADVAPI
VOID
WINAPI
BuildTrusteeWithSidA(
__inout PTRUSTEE_A pTrustee,
__in_opt PSID pSid
);
WINADVAPI
VOID
WINAPI
BuildTrusteeWithSidW(
__inout PTRUSTEE_W pTrustee,
__in_opt PSID pSid
);
#ifdef UNICODE
#define BuildTrusteeWithSid BuildTrusteeWithSidW
#else
#define BuildTrusteeWithSid BuildTrusteeWithSidA
#endif // !UNICODE
WINADVAPI
VOID
WINAPI
BuildTrusteeWithObjectsAndSidA(
__inout PTRUSTEE_A pTrustee,
__in_opt POBJECTS_AND_SID pObjSid,
__in_opt GUID * pObjectGuid,
__in_opt GUID * pInheritedObjectGuid,
__in_opt PSID pSid
);
WINADVAPI
VOID
WINAPI
BuildTrusteeWithObjectsAndSidW(
__inout PTRUSTEE_W pTrustee,
__in_opt POBJECTS_AND_SID pObjSid,
__in_opt GUID * pObjectGuid,
__in_opt GUID * pInheritedObjectGuid,
__in_opt PSID pSid
);
#ifdef UNICODE
#define BuildTrusteeWithObjectsAndSid BuildTrusteeWithObjectsAndSidW
#else
#define BuildTrusteeWithObjectsAndSid BuildTrusteeWithObjectsAndSidA
#endif // !UNICODE
WINADVAPI
VOID
WINAPI
BuildTrusteeWithObjectsAndNameA(
__inout PTRUSTEE_A pTrustee,
__in_opt POBJECTS_AND_NAME_A pObjName,
__in_opt SE_OBJECT_TYPE ObjectType,
__in_opt LPSTR ObjectTypeName,
__in_opt LPSTR InheritedObjectTypeName,
__in_opt LPSTR Name
);
WINADVAPI
VOID
WINAPI
BuildTrusteeWithObjectsAndNameW(
__inout PTRUSTEE_W pTrustee,
__in_opt POBJECTS_AND_NAME_W pObjName,
__in_opt SE_OBJECT_TYPE ObjectType,
__in_opt LPWSTR ObjectTypeName,
__in_opt LPWSTR InheritedObjectTypeName,
__in_opt LPWSTR Name
);
#ifdef UNICODE
#define BuildTrusteeWithObjectsAndName BuildTrusteeWithObjectsAndNameW
#else
#define BuildTrusteeWithObjectsAndName BuildTrusteeWithObjectsAndNameA
#endif // !UNICODE
WINADVAPI
LPSTR
WINAPI
GetTrusteeNameA(
__in PTRUSTEE_A pTrustee
);
WINADVAPI
LPWSTR
WINAPI
GetTrusteeNameW(
__in PTRUSTEE_W pTrustee
);
#ifdef UNICODE
#define GetTrusteeName GetTrusteeNameW
#else
#define GetTrusteeName GetTrusteeNameA
#endif // !UNICODE
WINADVAPI
TRUSTEE_TYPE
WINAPI
GetTrusteeTypeA(
__in_opt PTRUSTEE_A pTrustee
);
WINADVAPI
TRUSTEE_TYPE
WINAPI
GetTrusteeTypeW(
__in_opt PTRUSTEE_W pTrustee
);
#ifdef UNICODE
#define GetTrusteeType GetTrusteeTypeW
#else
#define GetTrusteeType GetTrusteeTypeA
#endif // !UNICODE
WINADVAPI
TRUSTEE_FORM
WINAPI
GetTrusteeFormA(
__in PTRUSTEE_A pTrustee
);
WINADVAPI
TRUSTEE_FORM
WINAPI
GetTrusteeFormW(
__in PTRUSTEE_W pTrustee
);
#ifdef UNICODE
#define GetTrusteeForm GetTrusteeFormW
#else
#define GetTrusteeForm GetTrusteeFormA
#endif // !UNICODE
WINADVAPI
MULTIPLE_TRUSTEE_OPERATION
WINAPI
GetMultipleTrusteeOperationA(
__in_opt PTRUSTEE_A pTrustee
);
WINADVAPI
MULTIPLE_TRUSTEE_OPERATION
WINAPI
GetMultipleTrusteeOperationW(
__in_opt PTRUSTEE_W pTrustee
);
#ifdef UNICODE
#define GetMultipleTrusteeOperation GetMultipleTrusteeOperationW
#else
#define GetMultipleTrusteeOperation GetMultipleTrusteeOperationA
#endif // !UNICODE
WINADVAPI
PTRUSTEE_A
WINAPI
GetMultipleTrusteeA(
__in_opt PTRUSTEE_A pTrustee
);
WINADVAPI
PTRUSTEE_W
WINAPI
GetMultipleTrusteeW(
__in_opt PTRUSTEE_W pTrustee
);
#ifdef UNICODE
#define GetMultipleTrustee GetMultipleTrusteeW
#else
#define GetMultipleTrustee GetMultipleTrusteeA
#endif // !UNICODE
//
// Temporary requirement for the technology preview, no longer required
//
#define AccProvInit(err)
#ifdef __cplusplus
}
#endif
#endif // __ACCESS_CONTROL_API__