54 lines
1.8 KiB
C++
54 lines
1.8 KiB
C++
//+-------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
//
|
|
// Copyright (C) Microsoft Corporation, 1996 - 1999
|
|
//
|
|
// File: permset.h
|
|
//
|
|
// This file contains the definition of the CPermissionSet class
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
|
|
#ifndef _PERMSET_H_
|
|
#define _PERMSET_H_
|
|
|
|
typedef struct _PERMISSION
|
|
{
|
|
ACCESS_MASK mask; // permission bits
|
|
DWORD dwFlags; // AceFlags (e.g. inheritance bits)
|
|
GUID guid; // often GUID_NULL
|
|
} PERMISSION, *PPERMISSION;
|
|
|
|
class CPermissionSet
|
|
{
|
|
private:
|
|
HDSA m_hPermList; // Dynamic array of PERMISSION structures
|
|
HDPA m_hAdvPermList; // Dynamic array of ACE pointers
|
|
BOOL m_fObjectAcesPresent;
|
|
|
|
public:
|
|
CPermissionSet() : m_hPermList(NULL), m_hAdvPermList(NULL), m_fObjectAcesPresent(FALSE) {}
|
|
~CPermissionSet() { Reset(); }
|
|
|
|
void Reset();
|
|
void ResetAdvanced();
|
|
BOOL AddAce(const GUID *pguid, ACCESS_MASK mask, DWORD dwFlags);
|
|
BOOL AddPermission(PPERMISSION pPerm);
|
|
BOOL AddAdvancedAce(PACE_HEADER pAce);
|
|
UINT GetPermCount(BOOL fIncludeAdvAces = FALSE) const;
|
|
PPERMISSION GetPermission(UINT i) const { if (m_hPermList) return (PPERMISSION)DSA_GetItemPtr(m_hPermList, i); return NULL; }
|
|
PPERMISSION operator[](UINT i) const { return GetPermission(i); }
|
|
ULONG GetAclLength(ULONG cbSid) const;
|
|
BOOL AppendToAcl(PACL pAcl, PACE_HEADER *ppAcePos, PSID pSid, BOOL fAllowAce, DWORD dwFlags) const;
|
|
void ConvertInheritedAces(CPermissionSet &permInherited);
|
|
void RemovePermission(PPERMISSION pPerm, BOOL bInheritFlag = FALSE);
|
|
};
|
|
|
|
// Flags for AppendToAcl
|
|
#define PS_NONOBJECT 0x00000001L
|
|
#define PS_OBJECT 0x00000002L
|
|
|
|
|
|
#endif // _PERMSET_H_
|