WindowsXP-SP1/admin/display/proppage/admin/scopedelegation.h
2020-09-30 16:53:49 +02:00

385 lines
8.9 KiB
C++

//+----------------------------------------------------------------------------
//
// Windows NT Directory Service Property Pages
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 1999
//
// File: ScopeDelegation.h
//
// Contents: Delegation page declarations
//
// Classes:
//
// History: 06-April-2001 JeffJon created
//
//-----------------------------------------------------------------------------
#ifndef __SCOPEDELEGATION_H_
#define __SCOPEDELEGATION_H_
#include "pch.h"
#include "proppage.h"
#include <list>
#ifdef DSADMIN
//+----------------------------------------------------------------------------
//
// Class: CServiceAllowedToDelegate
//
// Purpose: Holds the data for each line in the Service to be delegate list
//
//-----------------------------------------------------------------------------
class CServiceAllowedToDelegate
{
public:
// Constructor
CServiceAllowedToDelegate() {}
// Destructor
~CServiceAllowedToDelegate() {}
// Copy and assignment will be allowed
CServiceAllowedToDelegate(const CServiceAllowedToDelegate& ref);
// operators
const CServiceAllowedToDelegate&
operator=(const CServiceAllowedToDelegate&);
void
Assign(const CServiceAllowedToDelegate& ref);
bool
operator==(const CServiceAllowedToDelegate& rhs) const;
// Initializer
HRESULT Initialize(PCWSTR pszADSIValue);
// Accessors
PCWSTR GetColumn(int column) const;
PCWSTR GetADSIValue() const { return m_strADSIValue; }
void SetServiceType(PCWSTR pszServiceType);
private:
CStr m_strADSIValue;
CStr m_strServiceType;
CStr m_strUserOrComputer;
CStr m_strPort;
CStr m_strServiceName;
CStr m_strRealm;
};
typedef std::list<CStr*> CStrList;
//+----------------------------------------------------------------------------
//
// Class: CFreebieService
//
// Purpose: Contains a mapping from aliased SPNs to the service name
// which they are aliasing
//
//-----------------------------------------------------------------------------
class CFreebieService
{
public:
// Constructor
CFreebieService(PCWSTR pszAlias) : m_strAlias(pszAlias) {}
// Desctructor
~CFreebieService()
{
for (CStrList::iterator itr = m_FreebiesList.begin();
itr != m_FreebiesList.end();
++itr)
{
delete *itr;
}
}
const CStrList&
GetFreebies() { return m_FreebiesList; }
void
AddFreebie(PCWSTR pszFreebie)
{
CStr* pcstrAlias = new CStr(pszFreebie);
if (pcstrAlias)
{
m_FreebiesList.push_back(pcstrAlias);
}
}
PCWSTR
GetAlias() { return m_strAlias; }
private:
CStr m_strAlias;
CStrList m_FreebiesList;
};
typedef std::list<CFreebieService*> FreebiesContainer;
typedef std::list<CServiceAllowedToDelegate*> AllowedServicesContainer;
class CSPNListView
{
public:
// Constructor
CSPNListView() : m_hWnd(0) {}
// Desctructor
~CSPNListView();
HRESULT
Initialize(HWND hwnd);
const AllowedServicesContainer&
GetSelectedServices() { return m_SelectedServices; }
const AllowedServicesContainer&
GetUnSelectedServices() { return m_UnSelectedServices; }
const AllowedServicesContainer&
GetAllServices() { return m_AllServices; }
HWND
GetHwnd() const { return m_hWnd; }
UINT
GetSelectedCount() const { return ListView_GetSelectedCount(m_hWnd); }
void
ClearSelectedServices();
void
ClearAll();
void
SelectAll();
CServiceAllowedToDelegate*
FindService(CServiceAllowedToDelegate* pService);
int
AddService(CServiceAllowedToDelegate* pService, bool selected = false);
void
AddServices(const AllowedServicesContainer& servicesToAdd, bool selected = false);
void
RemoveSelectedServices();
void
SetContainersFromSelection();
private:
void
ClearUnSelectedServices();
HWND m_hWnd;
// The dialog caller must clean up this container
// and anything it contains
AllowedServicesContainer m_SelectedServices;
// The contents of these containers will be maintained
// by this class
AllowedServicesContainer m_UnSelectedServices;
AllowedServicesContainer m_AllServices;
};
typedef enum
{
SCOPE_DELEGATION_COMPUTER,
SCOPE_DELEGATION_USER
} SCOPE_DELEGATION_TYPE;
HRESULT CreateUserDelegationPage(PDSPAGE, LPDATAOBJECT, PWSTR, PWSTR, HWND,
DWORD, CDSBasePathsInfo* pBasePathsInfo,
HPROPSHEETPAGE *);
HRESULT CreateComputerDelegationPage(PDSPAGE, LPDATAOBJECT, PWSTR, PWSTR, HWND,
DWORD, CDSBasePathsInfo* pBasePathsInfo,
HPROPSHEETPAGE *);
//+----------------------------------------------------------------------------
//
// Class: CDsScopeDelegationPage
//
// Purpose: property page object class for the computer and user delegaion page.
//
//-----------------------------------------------------------------------------
class CDsScopeDelegationPage : public CDsPropPageBase
{
public:
#ifdef _DEBUG
char szClass[32];
#endif
CDsScopeDelegationPage(PDSPAGE pDsPage, LPDATAOBJECT pDataObj, HWND hNotifyObj,
DWORD dwFlags, SCOPE_DELEGATION_TYPE scopeDelegationType);
~CDsScopeDelegationPage(void);
//
// Instance specific wind proc
//
virtual LRESULT DlgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
private:
HRESULT OnInitDialog(LPARAM lParam);
LRESULT OnApply(void);
LRESULT OnCommand(int id, HWND hwndCtl, UINT codeNotify);
LRESULT OnNotify(WPARAM wParam, LPARAM lParam);
LRESULT OnDestroy(void);
void OnUpdateRadioSelection();
void OnAddServices();
void OnRemoveServices();
void GetFreebiesList();
void InitializeListColumns();
void SetPageTextForType();
void LoadDataFromObject();
void SetUIFromData();
void ResetUIFromData();
void AddServicesToListViewFromData();
HWND m_hList;
SCOPE_DELEGATION_TYPE m_scopeDelegationType;
BOOL m_fUACWritable;
BOOL m_fA2D2Writable;
DWORD m_oldUserAccountControl;
DWORD m_newUserAccountControl;
bool m_bA2D2Dirty;
CSPNListView m_ServicesList;
FreebiesContainer m_FreebiesList;
};
//+----------------------------------------------------------------------------
//
// Class: CSelectServicesDialog
//
// Purpose: Dialog box that allows the admin to select services from
// users or computers
//
//-----------------------------------------------------------------------------
class CSelectServicesDialog : public ICustomizeDsBrowser
{
public:
CSelectServicesDialog(PCWSTR pszDC, HWND hParent, const FreebiesContainer& freebies);
~CSelectServicesDialog() {}
//
// IUknown methods
//
STDMETHOD(QueryInterface)(REFIID riid, void ** ppvObject);
STDMETHOD_(ULONG, AddRef)(void);
STDMETHOD_(ULONG, Release)(void);
//
// ICustomizeDsBrowser methods
//
STDMETHOD(Initialize)(THIS_
HWND hwnd,
PCDSOP_INIT_INFO pInitInfo,
IBindHelper *pBindHelper) { return S_OK; }
STDMETHOD(GetQueryInfoByScope)(THIS_
IDsObjectPickerScope *pDsScope,
PDSQUERYINFO *ppdsqi);
STDMETHOD(AddObjects)(THIS_
IDsObjectPickerScope *pDsScope,
IDataObject **ppdo) { return E_NOTIMPL; }
STDMETHOD(ApproveObjects)(THIS_
IDsObjectPickerScope*,
IDataObject*,
PBOOL);
STDMETHOD(PrefixSearch)(THIS_
IDsObjectPickerScope *pDsScope,
PCWSTR pwzSearchFor,
IDataObject **pdo) { return E_NOTIMPL; }
STDMETHOD_(PSID, LookupDownlevelName)(THIS_
PCWSTR) { return NULL; }
static LRESULT CALLBACK StaticDlgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
virtual int
DoModal();
virtual BOOL
OnInitDialog(HWND hDlg);
virtual void
OnClose(int result);
virtual void
OnOK();
virtual void
ListItemClick(LPNMHDR pnmh);
void
OnSelectAll();
void
OnGetNewProvider();
void
ProcessResults(IDataObject* pdoSelections);
const AllowedServicesContainer&
GetSelectedServices() { return m_ServicesList.GetSelectedServices(); }
void
ClearSelectedServices() { m_ServicesList.ClearSelectedServices(); }
HWND m_hWnd;
private:
HWND m_hParent;
CSPNListView m_ServicesList;
const FreebiesContainer& m_FreebiesList;
CStr m_strDC;
// Reference counting
ULONG m_uRefs;
};
#endif // DSADMIN
#endif // __SCOPEDELEGATION_H_