Leaked source code of windows server 2003
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.
 
 
 
 
 
 

171 lines
5.3 KiB

#ifndef __ACLPAGE_H__
#define __ACLPAGE_H__
#include "aclui.h"
#define DONT_WANT_SHELLDEBUG
#include "shlobj.h" // LPITEMIDLIST
#include "shlobjp.h"
#define SHARE_PERM_FULL_CONTROL FILE_ALL_ACCESS
#define SHARE_PERM_READ_ONLY (FILE_GENERIC_READ | FILE_EXECUTE)
#define SHARE_PERM_READ_WRITE (FILE_GENERIC_READ | FILE_EXECUTE | FILE_GENERIC_WRITE | DELETE)
#define ACCOUNT_EVERYONE _T("everyone")
#define ACCOUNT_ADMINISTRATORS _T("administrators")
#define ACCOUNT_SBSFOLDEROPERATORS _T("SBS Folder Operators") // non-localizable according to SBS dev AaronN
#define ACCOUNT_SYSTEM _T("system")
#define ACCOUNT_INTERACTIVE _T("interactive")
/////////////////////////////////////////////////////////////////////////////
// CPermEntry
class CPermEntry
{
public:
CPermEntry();
~CPermEntry();
HRESULT Initialize(
IN LPCTSTR lpszSystem,
IN LPCTSTR lpszAccount,
IN DWORD dwAccessMask
);
UINT GetLengthSid();
HRESULT AddAccessAllowedAce(OUT PACL pACL);
protected:
CString m_cstrSystem;
CString m_cstrAccount;
DWORD m_dwAccessMask;
PSID m_pSid;
BOOL m_bWellKnownSid;
};
HRESULT
BuildSecurityDescriptor(
IN CPermEntry *pPermEntry, // an array of CPermEntry
IN UINT cEntries, // number of entries in the array
OUT PSECURITY_DESCRIPTOR *ppSelfRelativeSD // return a security descriptor in self-relative form
);
HRESULT
GetAccountSID(
IN LPCTSTR lpszSystem, // system where the account belongs to
IN LPCTSTR lpszAccount, // account
OUT PSID *ppSid, // return SID of the account
OUT BOOL *pbWellKnownSID // return a BOOL, caller needs to call FreeSid() on a well-known SID
);
/////////////////////////////////////////////////////////////////////////////
// CShareSecurityInformation
class CShareSecurityInformation : public ISecurityInformation
{
private:
ULONG m_cRef;
CString m_cstrComputerName;
CString m_cstrShareName;
CString m_cstrPageTitle;
PSECURITY_DESCRIPTOR m_pDefaultDescriptor;
BOOL m_bDefaultSD;
public:
CShareSecurityInformation(PSECURITY_DESCRIPTOR pSelfRelativeSD);
~CShareSecurityInformation();
void Initialize(
IN LPCTSTR lpszComputerName,
IN LPCTSTR lpszShareName,
IN LPCTSTR lpszPageTitle
);
// *** IUnknown methods ***
STDMETHOD(QueryInterface)(REFIID, LPVOID *);
STDMETHOD_(ULONG, AddRef)();
STDMETHOD_(ULONG, Release)();
// *** ISecurityInformation methods ***
STDMETHOD(GetObjectInformation) (PSI_OBJECT_INFO pObjectInfo );
STDMETHOD(GetSecurity) (SECURITY_INFORMATION RequestedInformation,
PSECURITY_DESCRIPTOR *ppSecurityDescriptor,
BOOL fDefault );
STDMETHOD(SetSecurity) (SECURITY_INFORMATION SecurityInformation,
PSECURITY_DESCRIPTOR pSecurityDescriptor );
STDMETHOD(GetAccessRights)(
const GUID *pguidObjectType,
DWORD dwFlags,
PSI_ACCESS *ppAccess,
ULONG *pcAccesses,
ULONG *piDefaultAccess
);
STDMETHOD(MapGeneric)(
const GUID *pguidObjectType,
UCHAR *pAceFlags,
ACCESS_MASK *pMask
);
STDMETHOD(GetInheritTypes)(
PSI_INHERIT_TYPE *ppInheritTypes,
ULONG *pcInheritTypes
);
STDMETHOD(PropertySheetPageCallback)(
HWND hwnd,
UINT uMsg,
SI_PAGE_TYPE uPage
);
protected:
HRESULT GetDefaultSD(
OUT PSECURITY_DESCRIPTOR *ppsd
);
HRESULT MakeSelfRelativeCopy(
IN PSECURITY_DESCRIPTOR psdOriginal,
OUT PSECURITY_DESCRIPTOR *ppsdNew
);
};
/////////////////////////////////////////////////////////////////////////////
// CFileSecurityDataObject
class CFileSecurityDataObject: public IDataObject
{
protected:
UINT m_cRef;
CString m_cstrComputerName;
CString m_cstrFolder;
CString m_cstrPath;
CLIPFORMAT m_cfIDList;
public:
CFileSecurityDataObject();
~CFileSecurityDataObject();
void Initialize(
IN LPCTSTR lpszComputerName,
IN LPCTSTR lpszFolder
);
// *** IUnknown methods ***
STDMETHOD(QueryInterface)(REFIID, LPVOID *);
STDMETHOD_(ULONG, AddRef)();
STDMETHOD_(ULONG, Release)();
// *** IDataObject methods ***
STDMETHOD(GetData)(LPFORMATETC pFEIn, LPSTGMEDIUM pSTM);
inline STDMETHOD(GetDataHere)(LPFORMATETC pFE, LPSTGMEDIUM pSTM) {return E_NOTIMPL;}
inline STDMETHOD(QueryGetData)(LPFORMATETC pFE) {return E_NOTIMPL;}
inline STDMETHOD(GetCanonicalFormatEtc)(LPFORMATETC pFEIn, LPFORMATETC pFEOut) {return E_NOTIMPL;}
inline STDMETHOD(SetData)(LPFORMATETC pFE, LPSTGMEDIUM pSTM, BOOL fRelease) {return E_NOTIMPL;}
inline STDMETHOD(EnumFormatEtc)(DWORD dwDirection, LPENUMFORMATETC *ppEnum) {return E_NOTIMPL;}
inline STDMETHOD(DAdvise)(LPFORMATETC pFE, DWORD grfAdv, LPADVISESINK pAdvSink, LPDWORD pdwConnection) {return E_NOTIMPL;}
inline STDMETHOD(DUnadvise)(DWORD dwConnection) {return E_NOTIMPL;}
inline STDMETHOD(EnumDAdvise)(LPENUMSTATDATA *ppEnum) {return E_NOTIMPL;}
HRESULT GetFolderPIDList(OUT LPITEMIDLIST *ppidl);
};
HRESULT
CreateFileSecurityPropPage(
HPROPSHEETPAGE *phOutPage,
LPDATAOBJECT pDataObject
);
#endif // __ACLPAGE_H__