windows-nt/Source/XPSP1/NT/sdktools/cacls/accacc.hxx
2020-09-26 16:20:57 +08:00

158 lines
4.3 KiB
C++

//+-------------------------------------------------------------------
//
// Copyright (C) 1995, Microsoft Corporation.
//
// File: ACCACC.hxx
//
// Contents: class encapsulating NT security user ACCACC.
//
// Classes: CACCACC
//
// Functions:
//
// History: Nov-93 Created DaveMont
//
//--------------------------------------------------------------------
#ifndef __ACCACC__
#define __ACCACC__
#include <t2.hxx>
#include <account.hxx>
//+-------------------------------------------------------------------
//
// Class: CAccountAccess
//
// Purpose: encapsulation of class Account and NT access masks. This
// class interfaces with the security system to get SIDs from
// usernames and vis-versa.
//
// this class has also been supplimented to contain information
// about ACEs with the same SID in the ACL if a (edit) merge
// operation is occuring
//
//--------------------------------------------------------------------
class CAccountAccess: private CAccount
{
public:
CAccountAccess(WCHAR *Name, WCHAR *System);
ULONG Init(ULONG access);
inline void ReInit();
inline ULONG Sid(SID **psid);
inline BYTE AceType();
inline ACCESS_MASK AccessMask();
inline void ClearAccessMask();
void AddInheritance(BYTE Flags);
inline ULONG TestInheritance();
private:
ACCESS_MASK _savemask; // saved requested mask (because _mask gets cleared if
// the ace is not used).
ACCESS_MASK _mask; // requested mask
BYTE _acetype;
ULONG _foundinheritance; // contains the OR of all the inheritances from the original ACL
};
// this is used in conjunction with ACE inherit flags to indicate that access
// rights in an ACE apply to the container as well
#define APPLIES_TO_CONTAINER 0x4
//+---------------------------------------------------------------------------
//
// Member: CAccountAccess::Init, public
//
// Synopsis: initializes access mask
//
// Arguments: IN [access] - access mask
//
//----------------------------------------------------------------------------
void CAccountAccess::ReInit()
{
_mask = _savemask;
}
//+---------------------------------------------------------------------------
//
// Member: CAccountAccess::Sid, public
//
// Synopsis: returns the principal for the class
//
// Arguments: OUT [psid] - address of the principal name
//
//----------------------------------------------------------------------------
ULONG CAccountAccess::Sid(SID **psid)
{
return(GetAccountSid(psid));
}
//+---------------------------------------------------------------------------
//
// Member: CAccountAccess::AceType, public
//
// Synopsis: returns the acetype (denied, allowed)
//
// Arguments: none
//
//----------------------------------------------------------------------------
BYTE CAccountAccess::AceType()
{
return(_acetype);
}
//+---------------------------------------------------------------------------
//
// Member: CAccountAccess::AccessMask, public
//
// Synopsis: returns the access mask
//
// Arguments: none
//
//----------------------------------------------------------------------------
ACCESS_MASK CAccountAccess::AccessMask()
{
return(_mask);
}
//+---------------------------------------------------------------------------
//
// Member: CAccountAccess::ClearAccessMask, public
//
// Synopsis: returns the access mask
//
// Arguments: none
//
//----------------------------------------------------------------------------
void CAccountAccess::ClearAccessMask()
{
_mask = 0;
}
//+---------------------------------------------------------------------------
//
// Member: CAccountAccess::TestInheritance, public
//
// Synopsis: checks that the inheritance is valid,
// that objects & containers inherit, and rights are applied to the object.
//
// Arguments: none
//
//--------------------------------------------------------------------
ULONG CAccountAccess::TestInheritance()
{
if (_foundinheritance == ( OBJECT_INHERIT_ACE | CONTAINER_INHERIT_ACE | APPLIES_TO_CONTAINER))
return(ERROR_SUCCESS);
else
return(ERROR_INVALID_DATA);
}
#endif // __ACCACC__