523 lines
20 KiB
C++
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
|