You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
95 lines
2.0 KiB
95 lines
2.0 KiB
#ifndef _SECDESC_H
|
|
#define _SECDESC_H
|
|
|
|
#include "openfilesdef.h"
|
|
#include "account.h"
|
|
|
|
|
|
|
|
|
|
//+-------------------------------------------------------------------------
|
|
//
|
|
// Class: FastAllocator
|
|
//
|
|
// Synopsis: takes in a buffer, buffer size, and needed size, and either
|
|
// uses the buffer, or allocates a new one for the size
|
|
// and of course destroys it in the dtor
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
class FastAllocator
|
|
{
|
|
public:
|
|
|
|
inline FastAllocator(VOID *buf, LONG bufsize);
|
|
inline ~FastAllocator();
|
|
|
|
inline VOID *GetBuf(LONG neededsize);
|
|
|
|
private:
|
|
|
|
VOID *_statbuf;
|
|
VOID *_allocatedbuf;
|
|
LONG _statbufsize;
|
|
BOOL _allocated;
|
|
};
|
|
|
|
FastAllocator::FastAllocator(VOID *buf, LONG bufsize)
|
|
:_statbuf(buf),
|
|
_statbufsize(bufsize),
|
|
_allocated(FALSE)
|
|
{
|
|
}
|
|
|
|
FastAllocator::~FastAllocator()
|
|
{
|
|
if (_allocated)
|
|
delete _allocatedbuf;
|
|
}
|
|
|
|
VOID *FastAllocator::GetBuf(LONG neededsize)
|
|
{
|
|
if (neededsize > _statbufsize)
|
|
{
|
|
_allocatedbuf = (VOID *)new BYTE[neededsize];
|
|
if (_allocatedbuf)
|
|
_allocated = TRUE;
|
|
} else
|
|
{
|
|
_allocatedbuf = _statbuf;
|
|
}
|
|
return(_allocatedbuf);
|
|
}
|
|
|
|
|
|
|
|
|
|
typedef struct _USER_ACESSINFO
|
|
{
|
|
CAccount *pAcc;
|
|
BYTE byAceType;
|
|
DWORD dwAccessMask;
|
|
} USER_ACESSINFO;
|
|
|
|
class CSecDesc
|
|
{
|
|
public:
|
|
CSecDesc(BYTE *psd);
|
|
HRESULT Init();
|
|
HRESULT AddUserAccess(LPWSTR szUser, LPWSTR szDomain, BYTE byAceType, DWORD dwAccessMask);
|
|
HRESULT GetSecDescAndSize(BYTE **ppsd);
|
|
|
|
private:
|
|
BYTE *m_psd;
|
|
ULONG m_ulNumAces;
|
|
USER_ACESSINFO m_UserAcessInfo[MAX_ACES];
|
|
|
|
HRESULT NewDefaultDescriptor( OUT PSECURITY_DESCRIPTOR *ppsd );
|
|
ULONG GetAclSize(ULONG *caclsize);
|
|
ULONG BuildAcl(ACL **pnewdacl);
|
|
ULONG AllocateNewAcl(ACL **ppnewdacl, ULONG caclsize);
|
|
ULONG SetAllowedAce(ACL *dacl, ACCESS_MASK mask, SID *psid);
|
|
ULONG SetDeniedAce(ACL *dacl, ACCESS_MASK mask, SID *psid);
|
|
ULONG FillNewAcl(ACL *pnewdacl);
|
|
};
|
|
|
|
#endif
|