windows-nt/Source/XPSP1/NT/ds/security/gina/snapins/gpedit/rsoproot.h
2020-09-26 16:20:57 +08:00

523 lines
20 KiB
C++

//+--------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1994 - 1997.
//
// File: rsoproot.h
//
// Contents: Definitions for the RSOP Snap-In classes
//
// Classes: CRSOPComponentData - Root RSOP snap-in node
// CRSOPComponentDataCF - class factory for RSOPComponentData
//
// Functions:
//
// History: 09-13-1999 stevebl Created
//
//---------------------------------------------------------------------------
//
// RSOP gpo list data structure
//
typedef struct tagGPOLISTITEM {
LPTSTR lpGPOName;
LPTSTR lpDSPath;
LPTSTR lpSOM;
LPTSTR lpUnescapedSOM;
LPTSTR lpFiltering;
LPBYTE pSD;
DWORD dwVersion;
BOOL bApplied;
struct tagGPOLISTITEM * pNext;
} GPOLISTITEM, *LPGPOLISTITEM;
//
// RSOP CSE data structure
//
typedef struct tagCSEITEM {
LPTSTR lpName;
LPTSTR lpGUID;
DWORD dwStatus;
ULONG ulLoggingStatus;
SYSTEMTIME BeginTime;
SYSTEMTIME EndTime;
LPSOURCEENTRY lpEventSources;
struct tagCSEITEM *pNext;
} CSEITEM, *LPCSEITEM;
//
// Enumerator for tracking loopback mode
//
typedef enum tagLoopbackMode
{
LoopbackNone,
LoopbackReplace,
LoopbackMerge
} LOOPBACKMODE;
//
// CRSOPComponentData class
//
class CRSOPComponentData:
public IComponentData,
public IExtendPropertySheet2,
public IExtendContextMenu,
public IPersistStreamInit,
public ISnapinHelp
{
friend class CRSOPDataObject;
friend class CRSOPSnapIn;
protected:
ULONG m_cRef;
HWND m_hwndFrame;
BOOL m_bOverride;
BOOL m_bDirty;
BOOL m_bRefocusInit;
BOOL m_bArchiveData;
BOOL m_bViewIsArchivedData;
TCHAR m_szArchivedDataGuid[50];
LPCONSOLENAMESPACE m_pScope;
LPCONSOLE m_pConsole;
HSCOPEITEM m_hRoot;
HSCOPEITEM m_hMachine;
HSCOPEITEM m_hUser;
// properties that identify the RSOP data namespace
LPTSTR m_pDisplayName;
BOOL m_bDiagnostic;
LPTSTR m_szNamespace;
BOOL m_bInitialized;
// properties used by the wizard to determine the RSOP data namespace
LPTSTR m_szComputerName;
LPTSTR m_szComputerDNName;
LPTSTR m_szComputerSOM;
LPTSTR m_szDefaultComputerSOM;
SAFEARRAY * m_saComputerSecurityGroups;
DWORD * m_saComputerSecurityGroupsAttr;
SAFEARRAY * m_saDefaultComputerSecurityGroups;
DWORD * m_saDefaultComputerSecurityGroupsAttr;
SAFEARRAY * m_saComputerWQLFilters;
SAFEARRAY * m_saComputerWQLFilterNames;
SAFEARRAY * m_saDefaultComputerWQLFilters;
SAFEARRAY * m_saDefaultComputerWQLFilterNames;
BOOL m_bSkipComputerWQLFilter;
BOOL m_bSkipUserWQLFilter;
IDirectoryObject * m_pComputerObject;
BOOL m_bNoComputerData; // only used in diagnostic mode
BOOL m_bComputerDeniedAccess;
LPTSTR m_szSite;
LPTSTR m_szDC;
BOOL m_bSlowLink;
LOOPBACKMODE m_loopbackMode;
LPTSTR m_szUserName;
LPTSTR m_szUserDNName;
LPTSTR m_szUserDisplayName; // only used in diagnostic mode
LPTSTR m_szUserSOM;
LPTSTR m_szDefaultUserSOM;
SAFEARRAY * m_saUserSecurityGroups;
DWORD * m_saUserSecurityGroupsAttr;
SAFEARRAY * m_saDefaultUserSecurityGroups;
DWORD * m_saDefaultUserSecurityGroupsAttr;
SAFEARRAY * m_saUserWQLFilters;
SAFEARRAY * m_saUserWQLFilterNames;
SAFEARRAY * m_saDefaultUserWQLFilters;
SAFEARRAY * m_saDefaultUserWQLFilterNames;
IDirectoryObject * m_pUserObject;
BOOL m_bNoUserData; // only used in diagnostic mode
BOOL m_bUserDeniedAccess;
DWORD m_dwSkippedFrom;
HBITMAP m_hChooseBitmap;
// GPO List data
LPGPOLISTITEM m_pUserGPOList;
LPGPOLISTITEM m_pComputerGPOList;
// CSE list data
LPCSEITEM m_pUserCSEList;
LPCSEITEM m_pComputerCSEList;
BOOL m_bUserCSEError;
BOOL m_bComputerCSEError;
BOOL m_bUserGPCoreError;
BOOL m_bComputerGPCoreError;
HMODULE m_hRichEdit;
// cmd line args to the msc file
LPTSTR m_szUserSOMPref;
LPTSTR m_szComputerSOMPref;
LPTSTR m_szUserNamePref;
LPTSTR m_szComputerNamePref;
LPTSTR m_szSitePref;
LPTSTR m_szDCPref;
DWORD m_dwLoadFlags;
// Event log data
CEvents * m_pEvents;
IStream * m_pStm;
public:
CRSOPComponentData();
~CRSOPComponentData();
VOID FreeUserData (VOID);
VOID FreeComputerData (VOID);
// IUnknown methods
STDMETHODIMP QueryInterface(REFIID, LPVOID FAR *);
STDMETHODIMP_(ULONG) AddRef();
STDMETHODIMP_(ULONG) Release();
//
// Implemented IComponentData methods
//
STDMETHODIMP Initialize(LPUNKNOWN pUnknown);
STDMETHODIMP CreateComponent(LPCOMPONENT* ppComponent);
STDMETHODIMP QueryDataObject(MMC_COOKIE cookie, DATA_OBJECT_TYPES type, LPDATAOBJECT* ppDataObject);
STDMETHODIMP Destroy(void);
STDMETHODIMP Notify(LPDATAOBJECT lpDataObject, MMC_NOTIFY_TYPE event, LPARAM arg, LPARAM param);
STDMETHODIMP GetDisplayInfo(LPSCOPEDATAITEM pItem);
STDMETHODIMP CompareObjects(LPDATAOBJECT lpDataObjectA, LPDATAOBJECT lpDataObjectB);
//
// Implemented IExtendPropertySheet2 methods
//
STDMETHODIMP CreatePropertyPages(LPPROPERTYSHEETCALLBACK lpProvider,
LONG_PTR handle, LPDATAOBJECT lpDataObject);
STDMETHODIMP QueryPagesFor(LPDATAOBJECT lpDataObject);
STDMETHODIMP GetWatermarks(LPDATAOBJECT lpIDataObject, HBITMAP* lphWatermark,
HBITMAP* lphHeader, HPALETTE* lphPalette, BOOL* pbStretch);
//
// Implemented IExtendContextMenu methods
//
STDMETHODIMP AddMenuItems(LPDATAOBJECT piDataObject, LPCONTEXTMENUCALLBACK pCallback,
LONG *pInsertionAllowed);
STDMETHODIMP Command(LONG lCommandID, LPDATAOBJECT piDataObject);
//
// Implemented IPersistStreamInit interface members
//
STDMETHODIMP GetClassID(CLSID *pClassID);
STDMETHODIMP IsDirty(VOID);
STDMETHODIMP Load(IStream *pStm);
STDMETHODIMP Save(IStream *pStm, BOOL fClearDirty);
STDMETHODIMP GetSizeMax(ULARGE_INTEGER *pcbSize);
STDMETHODIMP InitNew(VOID);
STDMETHODIMP CopyFileToMSC (LPTSTR lpFileName, IStream *pStm);
STDMETHODIMP InitializeRSOPFromArchivedData(IStream *pStm);
STDMETHODIMP CreateNameSpace (LPTSTR lpNameSpace, LPTSTR lpParentNameSpace);
STDMETHODIMP CopyMSCToFile (IStream *pStm, LPTSTR *lpMofFileName);
STDMETHODIMP BuildDisplayName (void);
//
// Helpers for IRSOPInformation
//
STDMETHODIMP GetNamespace(DWORD dwSection, LPOLESTR pszNamespace, INT ccMaxLength);
STDMETHODIMP GetFlags(DWORD * pdwFlags);
STDMETHODIMP GetEventLogEntryText(LPOLESTR pszEventSource, LPOLESTR pszEventLogName,
LPOLESTR pszEventTime, DWORD dwEventID, LPOLESTR *ppszText);
//
// Implemented ISnapinHelp interface members
//
STDMETHODIMP GetHelpTopic(LPOLESTR *lpCompiledHelpFile);
VOID AddSiteToDlg (HWND hDlg, LPWSTR szSitePath);
VOID InitializeSitesInfo (HWND hDlg);
BOOL IsComputerRSoPEnabled(LPTSTR lpDCName);
VOID InitializeDCInfo (HWND hDlg);
VOID AddDefaultGroups (HWND hLB);
VOID GetPrimaryGroup (HWND hLB, IDirectoryObject * pDSObj);
HRESULT BuildMembershipList (HWND hLB, IDirectoryObject * pDSObj, SAFEARRAY ** psaSecGrp, DWORD ** pdwSecGrpAttr);
HRESULT SaveSecurityGroups (HWND hLB, SAFEARRAY ** psaSecGrp, DWORD ** pdwSecGrpAttr);
VOID FillListFromSafeArraySecurityGroup (HWND hLB, SAFEARRAY * psa, DWORD *psaSecGrpAttr);
VOID FillListFromSafeArrays (HWND hLB, SAFEARRAY * psaNames, SAFEARRAY * psaData);
HRESULT ExtractWQLFilters (LPTSTR lpNameSpace, SAFEARRAY **psaNamesArg, SAFEARRAY **psaDataArg);
VOID BuildWQLFilterList (HWND hLB, BOOL bUser, SAFEARRAY **psaNames, SAFEARRAY **psaData);
VOID SaveWQLFilters (HWND hLB, SAFEARRAY **psaNamesArg, SAFEARRAY **psaDataArg);
BOOL CompareSafeArrays(SAFEARRAY *psa1, SAFEARRAY *psa2);
LPTSTR GetDefaultSOM (LPTSTR lpDNName);
LPTSTR GetDomainFromSOM (LPTSTR lpSOM);
HRESULT TestSOM (LPTSTR lpSOM, HWND hDlg);
HRESULT FillUserList (HWND hList, BOOL *bCurrentUserFound);
void FillResultsList (HWND hLV);
void InitializeResultsList (HWND hLV);
BOOL TestAndValidateComputer(HWND hDlg);
VOID EscapeString (LPTSTR *lpString);
static INT CALLBACK DsBrowseCallback (HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData);
void OnSecurity(HWND hDlg);
void OnEdit(HWND hDlg);
void OnContextMenu(HWND hDlg, LPARAM lParam);
void OnRefreshDisplay(HWND hDlg);
BOOL AddGPOListNode(LPTSTR lpGPOName, LPTSTR lpDSPath, LPTSTR lpSOM, LPTSTR lpFiltering,
DWORD dwVersion, BOOL bFiltering, LPBYTE pSD, DWORD dwSDSize,
LPGPOLISTITEM *lpList);
VOID FreeGPOListData(LPGPOLISTITEM lpList);
void BuildGPOList (LPGPOLISTITEM * lpList, LPTSTR lpNamespace);
void BuildGPOLists (void);
void PrepGPOList(HWND hList, BOOL bSOM, BOOL bFiltering,
BOOL bVersion, DWORD dwCount);
void FillGPOList(HWND hDlg, DWORD dwListID, LPGPOLISTITEM lpList,
BOOL bSOM, BOOL bFiltering, BOOL bVersion, BOOL bInitial);
void InitializeErrorsDialog(HWND hDlg, LPCSEITEM lpList);
void OnSaveAs (HWND hDlg);
void RefreshErrorInfo (HWND hDlg);
BOOL AddCSENode(LPTSTR lpName, LPTSTR lpGUID, DWORD dwStatus,
ULONG ulLoggingStatus, SYSTEMTIME *pBeginTime, SYSTEMTIME *pEndTime,
LPCSEITEM *lpList, BOOL *bCSEError, BOOL *bGPCoreError, LPSOURCEENTRY lpSources);
VOID FreeCSEData(LPCSEITEM lpList);
void QueryRSoPPolicySettingStatusInstances (LPTSTR lpNamespace);
void GetEventLogSources (IWbemServices * pNamespace,
LPTSTR lpCSEGUID, LPTSTR lpComputerName,
SYSTEMTIME *BeginTime, SYSTEMTIME *EndTime,
LPSOURCEENTRY *lpSources);
void BuildCSEList (LPCSEITEM * lpList, LPTSTR lpNamespace, BOOL *bCSEError, BOOL *bGPCoreError);
VOID BuildCSELists (void);
LPTSTR GetUserSOM() { return m_szUserSOM; };
LPTSTR GetComputerSOM() {return m_szComputerSOM; };
LPTSTR GetUserName() { return m_szUserName; };
LPTSTR GetComputerName() {return m_szComputerName; };
HRESULT SetupFonts();
HFONT m_BigBoldFont;
HFONT m_BoldFont;
private:
void SetDirty(VOID) { m_bDirty = TRUE; }
void ClearDirty(VOID) { m_bDirty = FALSE; }
BOOL ThisIsDirty(VOID) { return m_bDirty; }
HRESULT DeleteRSOPData(LPTSTR lpNameSpace);
HRESULT GenerateRSOPDataEx(HWND hDlg, LPTSTR *lpNameSpace);
HRESULT GenerateRSOPData(HWND hDlg, LPTSTR *lpNameSpace, BOOL bSkipCSEs, BOOL bLimitData, BOOL bUser, BOOL bForceCreate, ULONG *pulErrorInfo);
HRESULT InitializeRSOP(HWND hDlg);
HRESULT InitializeRSOPFromMSC(DWORD dwFlags);
HRESULT IsNode (LPDATAOBJECT lpDataObject, MMC_COOKIE cookie);
HRESULT IsSnapInManager (LPDATAOBJECT lpDataObject);
HRESULT EnumerateScopePane (LPDATAOBJECT lpDataObject, HSCOPEITEM hParent);
HRESULT SetupPropertyPages(DWORD dwFlags, LPPROPERTYSHEETCALLBACK lpProvider,
LONG_PTR handle, LPDATAOBJECT lpDataObject);
static INT_PTR CALLBACK RSOPWelcomeDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
static INT_PTR CALLBACK RSOPChooseModeDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
static INT_PTR CALLBACK RSOPGetCompDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
static INT_PTR CALLBACK RSOPGetUserDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
static INT_PTR CALLBACK RSOPGetTargetDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
static INT_PTR CALLBACK RSOPGetDCDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
static INT_PTR CALLBACK RSOPAltDirsDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
static INT_PTR CALLBACK RSOPAltUserSecDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
static INT_PTR CALLBACK RSOPAltCompSecDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
static INT_PTR CALLBACK RSOPWQLUserDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
static INT_PTR CALLBACK RSOPWQLCompDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
static INT_PTR CALLBACK RSOPFinishedDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
static INT_PTR CALLBACK RSOPFinished2DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
static INT_PTR CALLBACK RSOPChooseDCDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
static INT_PTR CALLBACK RSOPGPOListMachineProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
static INT_PTR CALLBACK RSOPGPOListUserProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
static INT_PTR CALLBACK RSOPErrorsMachineProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
static INT_PTR CALLBACK RSOPErrorsUserProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
static INT_PTR CALLBACK QueryDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
static INT_PTR CALLBACK BrowseDCDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
static INT_PTR CALLBACK InitRsopDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
static HRESULT WINAPI ReadSecurityDescriptor (LPCWSTR lpGPOPath, SECURITY_INFORMATION si, PSECURITY_DESCRIPTOR *pSD, LPARAM lpContext);
static HRESULT WINAPI WriteSecurityDescriptor (LPCWSTR lpGPOPath, SECURITY_INFORMATION si, PSECURITY_DESCRIPTOR pSD, LPARAM lpContext);
};
//
// class factory
//
class CRSOPComponentDataCF : public IClassFactory
{
protected:
ULONG m_cRef;
public:
CRSOPComponentDataCF();
~CRSOPComponentDataCF();
// IUnknown methods
STDMETHODIMP QueryInterface(REFIID, LPVOID FAR *);
STDMETHODIMP_(ULONG) AddRef();
STDMETHODIMP_(ULONG) Release();
// IClassFactory methods
STDMETHODIMP CreateInstance(LPUNKNOWN, REFIID, LPVOID FAR *);
STDMETHODIMP LockServer(BOOL);
};
//
// IWbemObjectSink implementation
//
class CCreateSessionSink : public IWbemObjectSink
{
protected:
ULONG m_cRef;
HWND m_hProgress;
DWORD m_dwThread;
HRESULT m_hrSuccess;
BSTR m_pNameSpace;
ULONG m_ulErrorInfo;
BOOL m_bSendQuitMessage;
public:
CCreateSessionSink(HWND hProgress, DWORD dwThread);
~CCreateSessionSink();
STDMETHODIMP SendQuitMessage (BOOL bSendQuitMessage);
STDMETHODIMP GetResult (HRESULT *hSuccess);
STDMETHODIMP GetNamespace (BSTR *pNamespace);
STDMETHODIMP GetErrorInfo (ULONG *pulErrorInfo);
// IUnknown methods
STDMETHODIMP QueryInterface(REFIID, LPVOID FAR *);
STDMETHODIMP_(ULONG) AddRef();
STDMETHODIMP_(ULONG) Release();
// IWbemObjectSink methods
STDMETHODIMP Indicate(LONG lObjectCount, IWbemClassObject **apObjArray);
STDMETHODIMP SetStatus(LONG lFlags, HRESULT hResult, BSTR strParam, IWbemClassObject *pObjParam);
};
//
// AboutGPE class factory
//
class CRSOPCMenuCF : public IClassFactory
{
protected:
LONG m_cRef;
public:
CRSOPCMenuCF();
~CRSOPCMenuCF();
// IUnknown methods
STDMETHODIMP QueryInterface(REFIID, LPVOID FAR *);
STDMETHODIMP_(ULONG) AddRef();
STDMETHODIMP_(ULONG) Release();
// IClassFactory methods
STDMETHODIMP CreateInstance(LPUNKNOWN, REFIID, LPVOID FAR *);
STDMETHODIMP LockServer(BOOL);
};
#define RSOP_LAUNCH_PLANNING 1
#define RSOP_LAUNCH_LOGGING 2
//
// Group Policy Hint types
//
typedef enum _RSOP_POLICY_HINT_TYPE {
RSOPHintUnknown = 0, // No link information available
RSOPHintMachine, // a machine
RSOPHintUser, // a user
RSOPHintSite, // a site
RSOPHintDomain, // a domain
RSOPHintOrganizationalUnit, // a organizational unit
} RSOP_POLICY_HINT_TYPE, *PRSOP_POLICY_HINT_TYPE;
class CRSOPCMenu : public IExtendContextMenu
{
protected:
LONG m_cRef;
LPWSTR m_lpDSObject;
LPWSTR m_szDomain;
LPWSTR m_szDN;
RSOP_POLICY_HINT_TYPE m_rsopHint;
static unsigned int m_cfDSObjectName;
public:
CRSOPCMenu();
~CRSOPCMenu();
// IUnknown methods
STDMETHODIMP QueryInterface(REFIID, LPVOID FAR *);
STDMETHODIMP_(ULONG) AddRef();
STDMETHODIMP_(ULONG) Release();
// IExtencContextMenu methods
STDMETHODIMP AddMenuItems(LPDATAOBJECT piDataObject,
LPCONTEXTMENUCALLBACK piCallback,
long * pInsertionAllowed);
STDMETHODIMP Command(long lCommandID, LPDATAOBJECT piDataObject);
};
//
// Save console defines
//
#define RSOP_PERSIST_DATA_VERSION 5 // version number in msc file
#define MSC_RSOP_FLAG_DIAGNOSTIC 0x00000001 // Diagnostic mode vs planning mode
#define MSC_RSOP_FLAG_ARCHIVEDATA 0x00000002 // RSoP data is archived also
#define MSC_RSOP_FLAG_SLOWLINK 0x00000004 // Slow link simulation in planning mode
#define MSC_RSOP_FLAG_NOUSER 0x00000008 // Do not display user data
#define MSC_RSOP_FLAG_NOCOMPUTER 0x00000010 // Do not display computer data
#define MSC_RSOP_FLAG_LOOPBACK_REPLACE 0x00000020 // Simulate loopback replace mode.
#define MSC_RSOP_FLAG_LOOPBACK_MERGE 0x00000040 // Simulate loopback merge mode.
#define MSC_RSOP_FLAG_USERDENIED 0x00000080 // User denied access
#define MSC_RSOP_FLAG_COMPUTERDENIED 0x00000100 // Computer denied access
//
// RSOP Command line switches
//
#define RSOP_CMD_LINE_START TEXT("/Rsop") // base to all group policy command line switches
#define RSOP_MODE TEXT("/RsopMode:") // Rsop Mode Planning/Logging 0 is logging, 1 is planning
#define RSOP_USER_OU_PREF TEXT("/RsopUserOu:") // Rsop User OU preference
#define RSOP_COMP_OU_PREF TEXT("/RsopCompOu:") // Rsop Comp OU Preference
#define RSOP_USER_NAME TEXT("/RsopUser:") // Rsop User Name
#define RSOP_COMP_NAME TEXT("/RsopComp:") // Rsop Comp Name
#define RSOP_SITENAME TEXT("/RsopSite:") // Rsop Site Name
#define RSOP_DCNAME_PREF TEXT("/RsopDc:") // DC Name that the tool should connect to
//
// Various flags to decide which prop sheets to show
//
#define RSOP_NOMSC 1
#define RSOPMSC_OVERRIDE 2
#define RSOPMSC_NOOVERRIDE 4