windows-nt/Source/XPSP1/NT/admin/snapin/wsecmgr/servperm.h
2020-09-26 16:20:57 +08:00

230 lines
7.9 KiB
C++

//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation 1996-2001.
//
// File: ServPerm.h
//
// Contents: definition of CSecurityInfo
//
//----------------------------------------------------------------------------
#ifndef __SERVPERM_H_INCLUDED__
#define __SERVPERM_H_INCLUDED__
// #include "cookie.h"
#define CONFIG_SECURITY_PAGE_READ_ONLY 1
#define CONFIG_SECURITY_PAGE_NO_PROTECT 2
#define CONFIG_SECURITY_PAGE 3
#define CONFIG_SECURITY_PAGE_RO_NP 4
#define ANALYSIS_SECURITY_PAGE_READ_ONLY 5
#define ANALYSIS_SECURITY_PAGE_NO_PROTECT 6
#define ANALYSIS_SECURITY_PAGE 7
#define ANALYSIS_SECURITY_PAGE_RO_NP 8
#define SECURITY_PAGE 9
#define SECURITY_PAGE_NO_PROTECT 10
#define SECURITY_PAGE_READ_ONLY 11
#define SECURITY_PAGE_RO_NP 12
//Bug 424909, Yanggao, 6/29/2001
struct __declspec(uuid("965FC360-16FF-11d0-91CB-00AA00BBB723")) ISecurityInformation;
#ifdef _ATL_DEBUG
#define END_SEC_COM_MAP() {NULL, 0, 0}}; return &_entries[1];}
#else
#define END_SEC_COM_MAP() {NULL, 0, 0}}; return _entries;}
#endif // _ATL_DEBUG
class CSecurityInfo : public ISecurityInformation, public CComObjectRoot
{
DECLARE_NOT_AGGREGATABLE(CSecurityInfo)
BEGIN_COM_MAP(CSecurityInfo)
COM_INTERFACE_ENTRY(ISecurityInformation)
END_COM_MAP()
// *** 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 );
private:
CString m_strMachineName;
CString m_strObjectName;
SE_OBJECT_TYPE m_SeType;
HINSTANCE m_hInstance;
protected:
// CResult * m_pData;
BOOL m_bIsContainer;
int m_flag;
PSECURITY_DESCRIPTOR *m_ppSD;
SECURITY_INFORMATION *m_pSeInfo;
HRESULT NewDefaultDescriptor(
PSECURITY_DESCRIPTOR* ppsd,
SECURITY_INFORMATION RequestedInformation);
// this will throw a memory exception where appropriate
// HRESULT MakeSelfRelativeCopy(
// PSECURITY_DESCRIPTOR psdOriginal,
// PSECURITY_DESCRIPTOR* ppsdNew );
public:
// void Initialize(CResult *pData, int flag);
// void Initialize(CResult *pData, PSECURITY_DESCRIPTOR *ppSeDescriptor=NULL, SECURITY_INFORMATION *pSeInfo=NULL, int flag=0);
void Initialize(BOOL bIsContainer, PSECURITY_DESCRIPTOR *ppSeDescriptor=NULL, SECURITY_INFORMATION *pSeInfo=NULL, int flag=0);
void SetMachineName( LPCTSTR pszMachineName );
void SetObjectName( LPCTSTR pszObjectName ) { m_strObjectName = pszObjectName; }
void SetTypeInstance(SE_OBJECT_TYPE SeType, HINSTANCE hInstance)
{ m_SeType = SeType; m_hInstance = hInstance; }
LPTSTR QueryMachineName()
{
return (m_strMachineName.IsEmpty())
? NULL
: const_cast<LPTSTR>((LPCTSTR)m_strMachineName);
}
LPTSTR QueryObjectName()
{
return const_cast<LPTSTR>((LPCTSTR)m_strObjectName);
}
};
class CDsSecInfo : public ISecurityInformation, public CComObjectRoot
{
DECLARE_NOT_AGGREGATABLE(CDsSecInfo)
BEGIN_COM_MAP(CDsSecInfo)
COM_INTERFACE_ENTRY(ISecurityInformation)
END_SEC_COM_MAP()
public:
CDsSecInfo()
{
m_dwRefCount = 0;
m_pISecInfo = NULL;
}
virtual ~CDsSecInfo()
{
ASSERT(m_dwRefCount == 0);
if (m_pISecInfo != NULL)
m_pISecInfo->Release();
}
public:
// *** IUnknown methods ***
STDMETHOD(QueryInterface) (REFIID riid, LPVOID * ppvObj)
{
return m_pISecInfo->QueryInterface(riid, ppvObj);
}
STDMETHOD_(ULONG,AddRef) ()
{
m_dwRefCount++;
return m_pISecInfo->AddRef();
}
STDMETHOD_(ULONG,Release) ()
{
m_dwRefCount--;
// this might be the last release on the page holder
// which would cause the holder to delete itself and
// "this" in the process (i.e. "this" no more valid when
// returning from the m_pPageHolder->Release() call
ISecurityInformation* pISecInfo = m_pISecInfo;
return pISecInfo->Release();
}
// *** ISecurityInformation methods ***
STDMETHOD(GetObjectInformation) (PSI_OBJECT_INFO pObjectInfo )
{
return m_pISecInfo->GetObjectInformation(pObjectInfo);
}
STDMETHOD(GetAccessRights) (const GUID* pguidObjectType,
DWORD dwFlags, // SI_EDIT_AUDITS, SI_EDIT_PROPERTIES
PSI_ACCESS *ppAccess,
ULONG *pcAccesses,
ULONG *piDefaultAccess )
{
return m_pISecInfo->GetAccessRights(pguidObjectType,
dwFlags,
ppAccess,
pcAccesses,
piDefaultAccess);
}
STDMETHOD(MapGeneric) (const GUID *pguidObjectType,
UCHAR *pAceFlags,
ACCESS_MASK *pMask)
{
return m_pISecInfo->MapGeneric(pguidObjectType,
pAceFlags,
pMask);
}
STDMETHOD(GetInheritTypes) (PSI_INHERIT_TYPE *ppInheritTypes,
ULONG *pcInheritTypes )
{
return m_pISecInfo->GetInheritTypes(ppInheritTypes,
pcInheritTypes);
}
STDMETHOD(PropertySheetPageCallback)(HWND hwnd, UINT uMsg, SI_PAGE_TYPE uPage )
{
return m_pISecInfo->PropertySheetPageCallback(hwnd, uMsg, uPage);
}
// *** ISecurityInformation methods ***
STDMETHOD(GetSecurity) (SECURITY_INFORMATION RequestedInformation,
PSECURITY_DESCRIPTOR *ppSecurityDescriptor,
BOOL fDefault );
STDMETHOD(SetSecurity) (SECURITY_INFORMATION SecurityInformation,
PSECURITY_DESCRIPTOR pSecurityDescriptor );
private:
DWORD m_dwRefCount;
ISecurityInformation* m_pISecInfo; // interface pointer to the wrapped interface
protected:
int m_flag;
PSECURITY_DESCRIPTOR *m_ppSD;
SECURITY_INFORMATION *m_pSeInfo;
public:
// void Initialize(CResult *pData, int flag);
HRESULT Initialize(LPTSTR LdapName, PFNDSCREATEISECINFO pfnCreateDsPage,
PSECURITY_DESCRIPTOR *ppSeDescriptor=NULL, SECURITY_INFORMATION *pSeInfo=NULL, int flag=0);
};
typedef CDsSecInfo *LPDSSECINFO;
INT_PTR MyCreateSecurityPage2(
BOOL bIsContainer, //CResult *pData,
PSECURITY_DESCRIPTOR *ppSeDescriptor,
SECURITY_INFORMATION *pSeInfo,
LPCTSTR ObjectName,
SE_OBJECT_TYPE SeType,
int flag,
HWND hwndParent,
BOOL bModeless);
INT_PTR MyCreateDsSecurityPage(
LPDSSECINFO *ppSI,
PFNDSCREATEISECINFO pfnCreateDsPage,
PSECURITY_DESCRIPTOR *ppSeDescriptor,
SECURITY_INFORMATION *pSeInfo,
LPCTSTR ObjectName,
int flag,
HWND hwndParent);
#endif // ~__PERMPAGE_H_INCLUDED__