windows-nt/Source/XPSP1/NT/admin/snapin/wsecmgr/cookie.h
2020-09-26 16:20:57 +08:00

422 lines
10 KiB
C++

// This is a part of the Microsoft Management Console.
// Copyright (C) 1995-2001 Microsoft Corporation
// All rights reserved.
//
// This source code is only intended as a supplement to the
// Microsoft Management Console and related
// electronic documentation provided with the interfaces.
#ifndef _SERVICE_H
#define _SERVICE_H
#include "hidwnd.h"
#include "precdisp.h"
// Forward declarations
class CSnapin;
class CResult;
#define RESULT_GROUP_INFO_BASE 1
#define RESULT_GROUP_INFO_SETTING 2
#define RESULT_GROUP_INFO_STATUS 4
// Internal structure used for cookies
struct FOLDER_DATA {
UINT ResID;
UINT DescID;
FOLDER_TYPES type;
};
typedef CList<CResult *, CResult *> CResultItemList;
class CFolder {
// friend class CSnapin;
// friend class CComponentDataImpl;
public:
// UNINITIALIZED is an invalid memory address and is a good cookie initializer
CFolder()
{
m_cookie = UNINITIALIZED;
m_enumed = FALSE;
m_pScopeItem = NULL;
m_type = NONE;
m_pszName = NULL;
m_pszDesc = NULL;
m_infName = NULL;
m_dwMode = 0;
m_ModeBits = 0;
m_pData = NULL;
m_iRefCount = 0;
m_dwState = state_Unknown;
m_ViewUpdate = FALSE;
SetState(state_Unknown, state_Unknown);
};
virtual ~CFolder();
// Interface
public:
BOOL IsEnumerated()
{
return m_enumed;
};
void Set(BOOL state)
{
m_enumed = state;
};
void SetCookie(MMC_COOKIE cookie)
{
m_cookie = cookie;
}
BOOL SetDesc(LPCTSTR szDesc);
FOLDER_TYPES GetType()
{
ASSERT(m_type != NONE);
return m_type;
};
LPOLESTR GetName()
{
return m_pszName;
};
LPOLESTR GetDesc()
{
return m_pszDesc;
};
LPOLESTR GetInfFile()
{
return m_infName;
}
DWORD GetDisplayName(CString &str, int iCol );
void SetInfFile(LPOLESTR sz)
{
if (!m_infName)
{
m_infName = sz;
}
}
BOOL operator == (const CFolder& rhs) const
{
return rhs.m_cookie == m_cookie;
};
BOOL operator == (long cookie) const
{
return cookie == m_cookie;
};
LPSCOPEDATAITEM GetScopeItem()
{
return m_pScopeItem;
}
BOOL SetMode(DWORD dwMode);
DWORD GetMode()
{
return m_dwMode;
}
DWORD GetModeBits()
{
return m_ModeBits;
}
DWORD AddModeBits(DWORD dwMB)
{
return m_ModeBits |= dwMB;
}
PVOID GetData()
{
return m_pData;
}
void SetData(PVOID pData)
{
m_pData = pData;
}
// Implementation
//private:
HRESULT Create(LPCTSTR szName, LPCTSTR szDesc, LPCTSTR infName, int nImage,
int nOpenImage, FOLDER_TYPES type, BOOL bHasChildren, DWORD dwMode,
PVOID pData);
DWORD GetState()
{
return m_dwState;
};
void SetState(
DWORD dwState,
DWORD dwMask = 0xFFFFFFFF)
{
m_dwState = (dwState | (m_dwState & dwMask));
};
public:
//
// Functions for objects.
//
BOOL SetDesc( DWORD dwStatus, DWORD dwNumChildren );
BOOL GetObjectInfo( DWORD *pdwStatus, DWORD *pdwNumChildren );
public:
//
// Result item member functions.
//
DWORD GetResultItemHandle( // Gets this folder result item handle
HANDLE *handle);
DWORD ReleaseResultItemHandle( // Releases memory associated with the handle.
HANDLE &handle);
DWORD GetResultItem( // Returns the result item with the given permission
HANDLE handle,
POSITION &pos,
CResult **pResult);
DWORD AddResultItem( // Adds a Result item to the list
HANDLE handle,
CResult *pItem);
DWORD RemoveResultItem( // Removes a Result item
HANDLE handle,
CResult *pItem);
int GetResultListCount() // Returns the number of result items in the list
{
return (int)m_resultItemList.GetCount();
};
POSITION GetResultItemPosition( // Returns the POSITION of the result item.
HANDLE handle,
CResult *pResult);
void RemoveAllResultItems();
public:
BOOL GetViewUpdate() const;
void SetViewUpdate(BOOL fUpdate);
//
// flags
enum CFolderEnums {
state_InvalidTemplate = 0x0001,
state_Unknown = 0x0002,
state_beingRemoved = 0x0004
};
// Attributes
protected:
int m_iRefCount;
CResultItemList m_resultItemList;
private:
LPSCOPEDATAITEM m_pScopeItem;
MMC_COOKIE m_cookie;
BOOL m_enumed;
FOLDER_TYPES m_type;
LPOLESTR m_pszName;
LPOLESTR m_pszDesc;
LPOLESTR m_infName;
DWORD m_dwMode;
DWORD m_ModeBits;
PVOID m_pData;
BOOL m_ViewUpdate;
DWORD m_dwState;
};
typedef struct _tag_SCECOLUMNINFO
{
LPCTSTR pszText;
BOOL bDelete;
}SCECOLUMNINFO, *PSCECOLUMNINFO;
#define RRFCREATE_COPY 1
#define RRFCREATE_DELETE 2
#define RRFCREATE_NORMAL 3
// Linked result items. Must be at least 4 for Analysis Groups at present
#define MAX_ITEM_ID_INDEX 4
#define NUM_GROUP_SIBLINGS 2
class CResult
{
// friend class CSnapin;
// friend class CComponentDataImpl;
public:
// UNINITIALIZED is an invalid memory address and is a good cookie initializer
CResult()
{
m_szAttr = NULL;
m_dwBase = 0;
m_dwSetting = 0;
m_type = ITEM_OTHER;
m_status = SCE_STATUS_NOT_CONFIGURED;
m_cookie = UNINITIALIZED;
m_szUnits = NULL;
m_nID = NULL;
m_profBase = NULL;
/*m_pDataObj = NULL;*/
m_pNotify = NULL;
m_pRegChoices = NULL;
m_pRegFlags = NULL;
m_pvecPrecedenceDisplays = NULL;
m_iRefCount = 1;
for (int i=0;i<NUM_GROUP_SIBLINGS;i++) {
m_siblingCookies[i] = 0;
}
};
void Empty()
{
PREGCHOICE p = NULL;
while(m_pRegChoices)
{
p = m_pRegChoices->pNext;
LocalFree(m_pRegChoices);
m_pRegChoices = p;
}
PREGFLAGS f = NULL;
while(m_pRegFlags)
{
f = m_pRegFlags->pNext;
LocalFree(m_pRegFlags);
m_pRegFlags = f;
}
if ( m_szAttr )
{
delete [] m_szAttr;
m_szAttr = NULL;
}
if (ITEM_GROUP != m_type)
{
if( m_szUnits )
{
LocalFree(m_szUnits);
m_szUnits = NULL;
}
}
if (m_pvecPrecedenceDisplays)
{
for(vector<PPRECEDENCEDISPLAY>::iterator i = m_pvecPrecedenceDisplays->begin();
i != m_pvecPrecedenceDisplays->end();
++i )
{
delete *i;
}
delete m_pvecPrecedenceDisplays;
m_pvecPrecedenceDisplays = NULL;
}
}
int AddRef()
{
return ++m_iRefCount;
}
int Release()
{
if (--m_iRefCount == 0)
{
delete this;
return 0;
}
return m_iRefCount;
};
virtual ~CResult()
{
Empty();
};
// Interface
public:
void GetBaseNoUnit(LPTSTR& sz) { TranslateSettingToString(m_dwBase, NULL, m_type,&sz);};
CSnapin* GetSnapin();
DWORD_PTR GetProfileDefault();
DWORD_PTR GetRegDefault();
LPCTSTR GetAttrPretty();
void Update(CSnapin *pSnapin, BOOL bEntirePane = FALSE);
void SetRelativeCookies(MMC_COOKIE cookie1, MMC_COOKIE cookie2) { m_siblingCookies[0] = cookie1; m_siblingCookies[1] = cookie2;};
MMC_COOKIE GetCookie() { return m_cookie;}
RESULT_TYPES GetType() { return m_type;};
LPTSTR GetAttr() { return m_szAttr;};
LONG_PTR GetBase() { return m_dwBase;}
LONG_PTR GetSetting() { return m_dwSetting;}
void GetSetting(LPTSTR& sz) { TranslateSettingToString(m_dwSetting, m_szUnits, m_type,&sz);}
void GetBase(LPTSTR& sz) { TranslateSettingToString(m_dwBase, m_szUnits, m_type,&sz);}
BOOL operator == (LPTSTR attr) const { return lstrcmp(m_szAttr, attr) == 0;};
void SetUnits(LPCTSTR sz);
LPTSTR GetUnits() { return m_szUnits;}
void SetBase(LONG_PTR base) { m_dwBase = base;}
void SetSetting(LONG_PTR base) { m_dwSetting = base;}
LONG_PTR GetID() { return m_nID;}
void SetID(LONG_PTR nID) { m_nID = nID;}
void SetStatus(int status) { m_status = status;}
int GetStatus() { return m_status;}
void SetRegChoices(PREGCHOICE RegChoices) { m_pRegChoices = RegChoices;}
PREGCHOICE GetRegChoices() { return m_pRegChoices;}
void SetRegFlags(PREGFLAGS RegFlags) { m_pRegFlags = RegFlags;}
PREGFLAGS GetRegFlags() { return m_pRegFlags;}
void SetBaseProfile(PEDITTEMPLATE prof) { m_profBase = prof;}
PEDITTEMPLATE GetBaseProfile() { return m_profBase;}
vector<PPRECEDENCEDISPLAY>* GetPrecedenceDisplays();
vector<PPRECEDENCEDISPLAY>* GetPolicyPrecedenceDisplays();
vector<PPRECEDENCEDISPLAY>* GetGroupPrecedenceDisplays();
vector<PPRECEDENCEDISPLAY>* GetPrivilegePrecedenceDisplays();
vector<PPRECEDENCEDISPLAY>* GetFilePrecedenceDisplays();
vector<PPRECEDENCEDISPLAY>* GetRegistryPrecedenceDisplays();
vector<PPRECEDENCEDISPLAY>* GetServicePrecedenceDisplays();
vector<PPRECEDENCEDISPLAY>* GetRegValuePrecedenceDisplays();
DWORD
GetDisplayName(
CFolder *pFolder,
CString &str,
int iCol
);
// Implementation
HRESULT Create(LPCTSTR szAttr, LONG_PTR lBase, LONG_PTR lSetting,
RESULT_TYPES type, int status, MMC_COOKIE cookie,
LPCTSTR szUnits, LONG_PTR nID,PEDITTEMPLATE pBase,
LPDATAOBJECT pDataObj,LPNOTIFY pNotify,CSnapin *pSnapin);
LPCTSTR GetSourceGPOString();
protected:
void
TranslateSettingToString( LONG_PTR setting, LPCTSTR unit, RESULT_TYPES type,
LPTSTR *pTmpstr
);
DWORD
GetStatusErrorString( CString *pStr );
// Attributes
private:
//LPRESULTDATA m_pResultPane;
DWORD m_dwArea;
LPTSTR m_szAttr;
LONG_PTR m_dwBase;
LONG_PTR m_dwSetting;
LPTSTR m_szUnits;
RESULT_TYPES m_type;
int m_status;
MMC_COOKIE m_cookie;
MMC_COOKIE m_siblingCookies[NUM_GROUP_SIBLINGS];
LONG_PTR m_nID;
PEDITTEMPLATE m_profBase;
LPNOTIFY m_pNotify;
PREGCHOICE m_pRegChoices;
PREGFLAGS m_pRegFlags;
CSnapin *m_pSnapin;
vector<PPRECEDENCEDISPLAY>* m_pvecPrecedenceDisplays;
int m_iRefCount;
};
#endif