windows-nt/Source/XPSP1/NT/shell/osshell/security/aclui/ace.h
2020-09-26 16:20:57 +08:00

100 lines
3.7 KiB
C++

//+-------------------------------------------------------------------------
//
// 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_