//+------------------------------------------------------------------------- // // Microsoft Windows // // Copyright (C) Microsoft Corporation, 1997 - 1999 // // File: ace.h // // This file contains definitions and prototypes for the ACE abstraction // class (CAce) // //-------------------------------------------------------------------------- #ifndef _ACE_H_ #define _ACE_H_ class CAce : public ACE_HEADER { public: //UCHAR AceType; // Inherited from ACE_HEADER //UCHAR AceFlags; //USHORT AceSize; ACCESS_MASK Mask; ULONG Flags; // ACE_OBJECT_TYPE_PRESENT, etc. GUID ObjectType; GUID InheritedObjectType; PSID psid; SID_NAME_USE sidType; private: LPTSTR pszName; LPTSTR pszType; LPTSTR pszAccessType; LPTSTR pszInheritType; BOOL bPropertyAce; LPTSTR pszInheritSourceName; INT iInheritSourceLevel; public: CAce(PACE_HEADER pAceHeader = NULL); ~CAce(); LPTSTR GetName() const { return pszName; } LPTSTR GetType() const { return pszType; } LPTSTR GetAccessType() const { return pszAccessType; } LPTSTR GetInheritType() const { return pszInheritType; } LPTSTR GetInheritSourceName() const { return pszInheritSourceName; } INT GetInheritSourceLevel() const { return iInheritSourceLevel; } BOOL IsPropertyAce() const { return bPropertyAce; } BOOL IsInheritedAce() const { return AceFlags & INHERITED_ACE; } LPTSTR LookupName(LPCTSTR pszServer = NULL, LPSECURITYINFO2 psi2 = NULL); void SetInheritSourceInfo(LPCTSTR psz, INT level); void SetName(LPCTSTR pszN, LPCTSTR pszL = NULL); void SetType(LPCTSTR psz) { SetString(&pszType, psz); } void SetAccessType(LPCTSTR psz) { SetString(&pszAccessType, psz); } void SetInheritType(LPCTSTR psz) { SetString(&pszInheritType, psz); } void SetPropertyAce(BOOL b) { bPropertyAce = b; } void SetSid(PSID p, LPCTSTR pszName, LPCTSTR pszLogonName, SID_NAME_USE type); PACE_HEADER Copy() const; void CopyTo(PACE_HEADER pAceDest) const; int CompareType(const CAce *pAceCompare) const; DWORD Merge(const CAce *pAce2); private: void SetString(LPTSTR *ppszDest, LPCTSTR pszSrc); }; typedef CAce *PACE; #define AllFlagsOn(dw1, dw2) (((dw1) & (dw2)) == (dw2)) // equivalent to ((dw1 | dw2) == dw1) #define IsAuditAlarmACE(type) ( ((type) == SYSTEM_AUDIT_ACE_TYPE) || \ ((type) == SYSTEM_AUDIT_OBJECT_ACE_TYPE) || \ ((type) == SYSTEM_ALARM_ACE_TYPE) || \ ((type) == SYSTEM_ALARM_OBJECT_ACE_TYPE) ) BOOL IsEqualACEType(DWORD dwType1, DWORD dwType2); DWORD MergeAceHelper(DWORD dwAceFlags1, DWORD dwMask1, DWORD dwAceFlags2, DWORD dwMask2, DWORD dwMergeFlags, LPDWORD pdwResult); // CAce::Merge and MergeAceHelper return values #define MERGE_FAIL 0 // Unable to merge ACEs #define MERGE_OK_1 1 // ACE 1 (this) implies ACE 2 #define MERGE_OK_2 2 // ACE 2 implies ACE 1 (this) #define MERGE_MODIFIED_FLAGS 3 // ACEs can be merged by modifying flags (new flags in *pdwResult) #define MERGE_MODIFIED_MASK 4 // ACEs can be merged by modifying mask (new mask in *pdwResult) // Values for MergeAceHelper dwMergeFlags parameter #define MF_OBJECT_TYPE_1_PRESENT 1 #define MF_OBJECT_TYPE_2_PRESENT 2 #define MF_OBJECT_TYPE_EQUAL 4 #define MF_AUDIT_ACE_TYPE 8 #endif // _ACE_H_