windows-nt/Source/XPSP1/NT/ds/security/services/ca/certmmc/folders.h
2020-09-26 16:20:57 +08:00

250 lines
6.5 KiB
C++

// This is a part of the Microsoft Management Console.
// Copyright (C) Microsoft Corporation, 1995 - 1999
// 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 _FOLDERS_H
#define _FOLDERS_H
/////////////////////
// File Versions
// current version
// removal of m_RowEnum
#define VER_FOLDER_SAVE_STREAM_2 0x2
// B3 version
#define VER_FOLDER_SAVE_STREAM_1 0x1
/////////////////////
/////////////////////
// File Versions
// current version
// removal of column sizes, sort order info, view type
#define VER_CERTVIEWROWENUM_SAVE_STREAM_4 0x4
// this version (written prior through Win2000 B3) includes column sizes
#define VER_CERTVIEWROWENUM_SAVE_STREAM_3 0x3
/////////////////////
// Forward declarations
class CSnapin;
class CFolder;
class CertSvrCA;
class CertSvrMachine;
struct RESULT_DATA
{
SCOPE_TYPES itemType;
CFolder* pParentFolder;
DWORD cStringArray;
LPWSTR szStringArray[3]; // name, size, type
};
enum
{
RESULTDATA_ARRAYENTRY_NAME =0,
RESULTDATA_ARRAYENTRY_SIZE,
RESULTDATA_ARRAYENTRY_TYPE,
};
HRESULT IsColumnShown(MMC_COLUMN_SET_DATA* pCols, ULONG idxCol, BOOL* pfShown);
HRESULT CountShownColumns(MMC_COLUMN_SET_DATA* pCols, ULONG* plCols);
//////////////////////////////////////////////////////////////////////////
// COLUMN TYPE cache
//
// This cache holds data that populated while setting column headings.
// The data applies to the column view, not the database view.
// Caching here allows an easy type-check during a compare() call, etc.
typedef struct _COLUMN_TYPE_CACHE
{
// volatile members
int iViewCol;
} COLUMN_TYPE_CACHE;
class CertViewRowEnum
{
protected:
// View Interface
ICertView* m_pICertView;
BOOL m_fCertViewOpenAttempted;
// Row Enum
IEnumCERTVIEWROW* m_pRowEnum;
LONG m_idxRowEnum;
BOOL m_fRowEnumOpenAttempted;
// Query Restrictions
PQUERY_RESTRICTION m_pRestrictions;
BOOL m_fRestrictionsActive;
// Column property cache
COLUMN_TYPE_CACHE* m_prgColPropCache;
DWORD m_dwColumnCount;
DWORD m_dwErr;
public:
CertViewRowEnum();
virtual ~CertViewRowEnum();
public:
BOOL m_fKnowNumResultRows;
DWORD m_dwResultRows;
public:
HRESULT GetLastError() { return m_dwErr; }
// View Interface
HRESULT GetView(CertSvrCA* pCA, ICertView** ppView);
void ClearCachedCertView()
{ m_fCertViewOpenAttempted = FALSE; }
// Row Enum
HRESULT GetRowEnum(CertSvrCA* pCA, IEnumCERTVIEWROW** ppRowEnum);
HRESULT GetRowMaxIndex(CertSvrCA* pCA, LONG* pidxMax);
LONG GetRowEnumPos() { return m_idxRowEnum; }
HRESULT SetRowEnumPos(LONG idxRow);
HRESULT ResetCachedRowEnum(); // back to 0th row
void InvalidateCachedRowEnum(); // refresh
// Query Restrictions
void SetQueryRestrictions(PQUERY_RESTRICTION pQR)
{ if (m_pRestrictions)
FreeQueryRestrictionList(m_pRestrictions);
m_pRestrictions = pQR;
}
PQUERY_RESTRICTION GetQueryRestrictions()
{ return m_pRestrictions; }
BOOL FAreQueryRestrictionsActive()
{ return m_fRestrictionsActive; }
void SetQueryRestrictionsActive(BOOL fRestrict)
{ m_fRestrictionsActive = fRestrict; }
HRESULT ResetColumnCount(LONG lCols);
LONG GetColumnCount()
{ return m_dwColumnCount; }
// DB Column property cache
void FreeColumnCacheInfo();
HRESULT GetColumnCacheInfo(
IN int iIndex,
OUT OPTIONAL int* pidxViewCol);
// sets column width by heading
HRESULT SetColumnCacheInfo(
IN int iIndex,
IN int idxViewCol);
public:
// IPersistStream interface members
HRESULT Load(IStream *pStm);
HRESULT Save(IStream *pStm, BOOL fClearDirty);
HRESULT GetSizeMax(int *pcbSize);
};
class CFolder
{
SCOPE_TYPES m_itemType; // Used for debug purposes. This should be the first
// member. The class should not have any virtual fuctions.
friend class CSnapin;
friend class CComponentDataImpl;
public:
CFolder()
{
m_itemType = UNINITIALIZED_ITEM;
m_cookie = UNINITIALIZED; // invalid memory address -- good cookie initializer
m_enumed = FALSE;
m_type = NONE;
m_pszName = NULL;
m_pCertCA = NULL;
ZeroMemory(&m_ScopeItem, sizeof(SCOPEDATAITEM));
}
~CFolder()
{
if (m_pszName)
CoTaskMemFree(m_pszName);
}
// Interface
public:
BOOL IsEnumerated() { return m_enumed; }
void Set(BOOL state) { m_enumed = state; }
void SetCookie(MMC_COOKIE cookie) { m_cookie = cookie; }
void SetScopeItemInformation(int nImage, int nOpenImage);
FOLDER_TYPES GetType() { ASSERT(m_type != NONE); return m_type; }
CertSvrCA* GetCA() { ASSERT(m_pCertCA != NULL); return m_pCertCA; }
BOOL operator == (const CFolder& rhs) const { return rhs.m_cookie == m_cookie; }
BOOL operator == (MMC_COOKIE cookie) const { return cookie == m_cookie; }
LPCWSTR GetName() { return m_pszName; }
void SetName(LPWSTR pszIn)
{
UINT len = wcslen(pszIn) + 1;
LPWSTR psz = (LPWSTR)CoTaskMemAlloc(len * sizeof(WCHAR));
if (psz != NULL)
{
wcscpy(psz, pszIn);
CoTaskMemFree(m_pszName);
m_pszName = psz;
}
}
// IPersistStream interface members
HRESULT Load(IStream *pStm);
HRESULT Save(IStream *pStm, BOOL fClearDirty);
HRESULT GetSizeMax(int *pcbSize);
// Implementation
private:
void SetProperties(
LPCWSTR szName,
SCOPE_TYPES itemType,
FOLDER_TYPES type,
int iChildren = 0);
// Attributes
private:
SCOPEDATAITEM m_ScopeItem;
MMC_COOKIE m_cookie;
BOOL m_enumed;
FOLDER_TYPES m_type;
LPOLESTR m_pszName;
CertSvrCA* m_pCertCA;
};
BOOL IsAllowedStartStop(CFolder* pFolder, CertSvrMachine* pMachine);
HRESULT GetCurrentColumnSchema(
IN LPCWSTR szConfig,
OUT CString** pprgcstrColumns,
OUT OPTIONAL LONG** pprglTypes,
OUT OPTIONAL BOOL** pprgfIndexed,
OUT LONG* plEntries);
#endif // _FOLDERS_H_