windows-nt/Source/XPSP1/NT/base/cluster/admin/cluadmex/aclbase.h
2020-09-26 16:20:57 +08:00

248 lines
6.6 KiB
C++

/////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 1998-2001 Microsoft Corporation
//
// Module Name:
// AclBase.h
//
// Description:
// Implementation of the ISecurityInformation interface. This interface
// is the new common security UI in NT 5.0.
//
// Implementation File:
// AclBase.cpp
//
// Author:
// Galen Barbee (galenb) February 6, 1998
// From \nt\private\admin\snapin\filemgmt\permpage.h
// by JonN
//
// Revision History:
//
// Notes:
//
/////////////////////////////////////////////////////////////////////////////
#ifndef _ACLBASE_H
#define _ACLBASE_H
/////////////////////////////////////////////////////////////////////////////
// Include Files
/////////////////////////////////////////////////////////////////////////////
#ifndef _ACLUI_H_
#include <aclui.h> // for ISecurityInformation
#endif // _ACLUI_H_
#include "CluAdmEx.h"
#include <ObjSel.h>
/*
#define NT5_UGOP_FLAGS ( UGOP_USERS \
| UGOP_ACCOUNT_GROUPS_SE \
| UGOP_UNIVERSAL_GROUPS_SE \
| UGOP_COMPUTERS \
| UGOP_WELL_KNOWN_PRINCIPALS_USERS \
)
#define NT4_UGOP_FLAGS ( UGOP_USERS \
| UGOP_GLOBAL_GROUPS \
| UGOP_ALL_NT4_WELLKNOWN_SIDS \
)
*/
/* These are here to help document what the macro does...
typedef struct _DSOP_UPLEVEL_FILTER_FLAGS
{
ULONG flBothModes; //b
ULONG flMixedModeOnly; //m
ULONG flNativeModeOnly; //n
} DSOP_UPLEVEL_FILTER_FLAGS;
typedef struct _DSOP_FILTER_FLAGS
{
DSOP_UPLEVEL_FILTER_FLAGS Uplevel;
ULONG flDownlevel; //d
} DSOP_FILTER_FLAGS;
typedef struct _DSOP_SCOPE_INIT_INFO
{
ULONG cbSize;
ULONG flType; //t
ULONG flScope; //f
DSOP_FILTER_FLAGS FilterFlags;
PCWSTR pwzDcName;
PCWSTR pwzADsPath;
HRESULT hr;
} DSOP_SCOPE_INIT_INFO, *PDSOP_SCOPE_INIT_INFO;
*/
#define DECLARE_SCOPE(t,f,b,m,n,d) \
{ sizeof(DSOP_SCOPE_INIT_INFO), (t), (f), { { (b), (m), (n) }, (d) }, NULL, NULL, S_OK }
static const DSOP_SCOPE_INIT_INFO g_aDSOPScopes[] =
{
// The domain to which the target computer is joined.
DECLARE_SCOPE(DSOP_SCOPE_TYPE_UPLEVEL_JOINED_DOMAIN,
0,
DSOP_FILTER_USERS
| DSOP_FILTER_UNIVERSAL_GROUPS_SE
| DSOP_FILTER_DOMAIN_LOCAL_GROUPS_SE
| DSOP_FILTER_WELL_KNOWN_PRINCIPALS
| DSOP_FILTER_INCLUDE_ADVANCED_VIEW,
0,
0,
0 ),
// The external domain to which the target computer is joined.
DECLARE_SCOPE(DSOP_SCOPE_TYPE_ENTERPRISE_DOMAIN,
0,
DSOP_FILTER_USERS
| DSOP_FILTER_UNIVERSAL_GROUPS_SE
| DSOP_FILTER_DOMAIN_LOCAL_GROUPS_SE
| DSOP_FILTER_WELL_KNOWN_PRINCIPALS
| DSOP_FILTER_INCLUDE_ADVANCED_VIEW,
0,
0,
0 ),
// The external domain to which the target computer is joined.
DECLARE_SCOPE(DSOP_SCOPE_TYPE_EXTERNAL_UPLEVEL_DOMAIN,
0,
DSOP_FILTER_USERS
| DSOP_FILTER_UNIVERSAL_GROUPS_SE
| DSOP_FILTER_DOMAIN_LOCAL_GROUPS_SE
| DSOP_FILTER_WELL_KNOWN_PRINCIPALS
| DSOP_FILTER_INCLUDE_ADVANCED_VIEW,
0,
0,
0 ),
// The downlevel domain to which the target computer is joined.
DECLARE_SCOPE(DSOP_SCOPE_TYPE_DOWNLEVEL_JOINED_DOMAIN,
0,
0,
0,
0,
DSOP_DOWNLEVEL_FILTER_ALL_WELLKNOWN_SIDS
| DSOP_DOWNLEVEL_FILTER_GLOBAL_GROUPS
| DSOP_DOWNLEVEL_FILTER_USERS,
),
// The downlevel domain to which the target computer is joined.
DECLARE_SCOPE(DSOP_SCOPE_TYPE_EXTERNAL_DOWNLEVEL_DOMAIN,
0,
0,
0,
0,
DSOP_DOWNLEVEL_FILTER_ALL_WELLKNOWN_SIDS
| DSOP_DOWNLEVEL_FILTER_GLOBAL_GROUPS
| DSOP_DOWNLEVEL_FILTER_USERS,
),
// The target computer
DECLARE_SCOPE(DSOP_SCOPE_TYPE_TARGET_COMPUTER,
DSOP_SCOPE_FLAG_STARTING_SCOPE,
0,
0,
0,
DSOP_DOWNLEVEL_FILTER_SYSTEM
| DSOP_DOWNLEVEL_FILTER_GLOBAL_GROUPS
| DSOP_DOWNLEVEL_FILTER_LOCAL_GROUPS
)
}; // struct DSOP_SCOPE_INIT_INFO g_aDSOPScopes
/////////////////////////////////////////////////////////////////////////////
// Forward Class Declarations
/////////////////////////////////////////////////////////////////////////////
class CSecurityInformation;
/////////////////////////////////////////////////////////////////////////////
// External Class Declarations
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// CSecurityInformation security wrapper
/////////////////////////////////////////////////////////////////////////////
class CSecurityInformation : public ISecurityInformation, public CComObjectRoot, public IDsObjectPicker
{
DECLARE_NOT_AGGREGATABLE(CSecurityInformation)
BEGIN_COM_MAP(CSecurityInformation)
COM_INTERFACE_ENTRY(ISecurityInformation)
COM_INTERFACE_ENTRY(IDsObjectPicker)
END_COM_MAP()
// *** IUnknown methods ***
STDMETHOD_(ULONG, AddRef)( void )
{
return InternalAddRef();
}
STDMETHOD_(ULONG, Release)( void )
{
ULONG l = InternalRelease();
if (l == 0)
{
delete this;
}
return l;
}
// *** ISecurityInformation methods ***
STDMETHOD(GetObjectInformation)( PSI_OBJECT_INFO pObjectInfo );
STDMETHOD(GetSecurity)( SECURITY_INFORMATION RequestedInformation,
PSECURITY_DESCRIPTOR * ppSecurityDescriptor,
BOOL fDefault ) = 0;
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 );
// IDsObjectPicker
STDMETHODIMP Initialize( PDSOP_INIT_INFO pInitInfo );
STDMETHODIMP InvokeDialog( HWND hwndParent, IDataObject ** ppdoSelection );
protected:
CSecurityInformation( void );
~CSecurityInformation( void );
HRESULT HrLocalAccountsInSD( IN PSECURITY_DESCRIPTOR pSD, OUT PBOOL pFound );
PGENERIC_MAPPING m_pShareMap;
PSI_ACCESS m_psiAccess;
int m_nDefAccess;
int m_nAccessElems;
DWORD m_dwFlags;
CString m_strServer;
CString m_strNode;
int m_nLocalSIDErrorMessageID;
IDsObjectPicker * m_pObjectPicker;
LONG m_cRef;
};
#endif //_ACLBASE_H