You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
136 lines
3.9 KiB
136 lines
3.9 KiB
|
|
//
|
|
// Structures
|
|
//
|
|
|
|
typedef struct _GPOITEM
|
|
{
|
|
DWORD dwOptions;
|
|
LPTSTR lpDisplayName;
|
|
LPTSTR lpGPOName;
|
|
LPTSTR lpDSPath;
|
|
DWORD dwDisabled; // see GPO_OPTION_DISABLE_* flags in gpedit.h
|
|
BOOL bReadOnly;
|
|
BOOL bLocked;
|
|
} GPOITEM, *LPGPOITEM;
|
|
|
|
typedef struct _ADDGPOITEM
|
|
{
|
|
LPTSTR lpDSName;
|
|
BOOL bSpawn;
|
|
LPTSTR lpName;
|
|
LPTSTR lpPath;
|
|
LPTSTR lpImport;
|
|
} ADDGPOITEM, *LPADDGPOITEM;
|
|
|
|
|
|
//
|
|
// CGroupPolicyMgr class
|
|
//
|
|
|
|
class CGroupPolicyMgr:
|
|
public IExtendPropertySheet,
|
|
public ISnapinHelp
|
|
{
|
|
|
|
protected:
|
|
UINT m_cRef;
|
|
LPTSTR m_lpDSObject;
|
|
LPTSTR m_lpGPODCName;
|
|
LPTSTR m_lpDSADCName;
|
|
LPTSTR m_lpDomainName;
|
|
HFONT m_hDefaultFont;
|
|
HFONT m_hMarlettFont;
|
|
BOOL m_bReadOnly;
|
|
BOOL m_bDirty;
|
|
GROUP_POLICY_HINT_TYPE m_gpHint;
|
|
|
|
static unsigned int m_cfDSObjectName;
|
|
static unsigned int m_cfNodeTypeString;
|
|
|
|
public:
|
|
CGroupPolicyMgr();
|
|
~CGroupPolicyMgr();
|
|
|
|
|
|
// IUnknown methods
|
|
STDMETHODIMP QueryInterface(REFIID, LPVOID FAR *);
|
|
STDMETHODIMP_(ULONG) AddRef();
|
|
STDMETHODIMP_(ULONG) Release();
|
|
|
|
|
|
//
|
|
// Implemented IExtendPropertySheet methods
|
|
//
|
|
|
|
STDMETHODIMP CreatePropertyPages(LPPROPERTYSHEETCALLBACK lpProvider,
|
|
LONG_PTR handle, LPDATAOBJECT lpDataObject);
|
|
STDMETHODIMP QueryPagesFor(LPDATAOBJECT lpDataObject);
|
|
|
|
|
|
//
|
|
// Implemented ISnapinHelp interface members
|
|
//
|
|
|
|
STDMETHODIMP GetHelpTopic(LPOLESTR *lpCompiledHelpFile);
|
|
|
|
private:
|
|
|
|
static UINT CALLBACK PropSheetPageCallback(HWND hwnd, UINT uMsg, LPPROPSHEETPAGE ppsp);
|
|
static INT_PTR CALLBACK GPMDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
|
|
void OnContextMenu(HWND hDlg, LPARAM lParam);
|
|
void OnProperties(HWND hDlg);
|
|
void OnNew(HWND hDlg);
|
|
BOOL RefreshGPM (HWND hDlg, BOOL bInitial);
|
|
BOOL OnInitDialog (HWND hDlg);
|
|
BOOL Save (HWND hDlg);
|
|
BOOL AddGPOs (HWND hDlg, LPTSTR lpGPOList);
|
|
LPGPOITEM CreateEntry (LPTSTR szName, LPTSTR szGPO, DWORD dwOptions,
|
|
DWORD dwDisabled, BOOL bReadOnly);
|
|
BOOL AddGPOToList (HWND hLV, LPTSTR szName, LPTSTR szGPO, DWORD dwOptions, BOOL bHighest, DWORD dwDisabled, BOOL bReadOnly);
|
|
static BOOL CALLBACK AddGPODlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
|
|
static INT_PTR CALLBACK RemoveGPODlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
|
|
static INT_PTR CALLBACK DeleteGPODlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
|
|
static INT_PTR CALLBACK LinkOptionsDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
|
|
static INT_PTR CALLBACK NoDSObjectDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
|
|
DWORD IsGPODisabled(LPTSTR lpGPO);
|
|
void CheckIconStatus (HWND hLV, LPGPOITEM lpGPO);
|
|
LPTSTR GetFullGPOPath (LPTSTR lpGPO, HWND hParent);
|
|
BOOL StartGPE (LPTSTR lpGPO, HWND hParent);
|
|
};
|
|
|
|
|
|
|
|
//
|
|
// ComponentData class factory
|
|
//
|
|
|
|
|
|
class CGroupPolicyMgrCF : public IClassFactory
|
|
{
|
|
protected:
|
|
ULONG m_cRef;
|
|
|
|
public:
|
|
CGroupPolicyMgrCF();
|
|
~CGroupPolicyMgrCF();
|
|
|
|
|
|
// IUnknown methods
|
|
STDMETHODIMP QueryInterface(REFIID, LPVOID FAR *);
|
|
STDMETHODIMP_(ULONG) AddRef();
|
|
STDMETHODIMP_(ULONG) Release();
|
|
|
|
// IClassFactory methods
|
|
STDMETHODIMP CreateInstance(LPUNKNOWN, REFIID, LPVOID FAR *);
|
|
STDMETHODIMP LockServer(BOOL);
|
|
};
|
|
|
|
|
|
//
|
|
// Strings
|
|
//
|
|
|
|
#define GPM_NAME_PROPERTY L"name"
|
|
#define GPM_OPTIONS_PROPERTY L"gPOptions"
|
|
#define GPM_LINK_PROPERTY L"gPLink"
|