|
|
/*++
Copyright (c) 1996 Microsoft Corporation
Module Name:
map.hxx
Abstract:
Name Space Extension Provider ( NSEP ) for mapping
Author:
Philippe Choquier (phillich) 25-Nov-1996
--*/
#if !defined(_MAP_NSEP_INCLUDE )
#define _MAP_NSEP_INCLUDE
class CNseInstance;
#define NSEPM_ACCESS_ACCOUNT 0
#define NSEPM_ACCESS_CERT 1
#define NSEPM_ACCESS_NAME 2
class CNseObj { public: CNseObj( LPSTR pName, DWORD dwId, BOOL fIter, CNseObj** pC, UINT cC, DWORD dwP = 0, DWORD dwP2 = 0) { m_pszName = pName; m_dwId = dwId; m_fIterated = fIter; m_pnoChildren = pC; m_cnoChildren = cC; m_dwParam = dwP; m_dwParam2 = dwP2; } virtual BOOL Add( CNseInstance*, DWORD dwIndex ) { return TRUE; } virtual BOOL Delete( LPSTR, CNseInstance* pI, DWORD dwIndex ) { return Release( pI, dwIndex ); } virtual BOOL Load( CNseInstance*, LPSTR pszPath ) { return FALSE; } virtual BOOL Save( CNseInstance* ) { return FALSE; } // called with index in object array
virtual BOOL Set( CNseInstance*, DWORD dwIndex, PMETADATA_RECORD ); virtual BOOL Get( CNseInstance*, DWORD dwIndex, PMETADATA_RECORD, LPDWORD pdwRequiredLen ); virtual BOOL GetByIndex( CNseInstance*, DWORD dwIndex, PMETADATA_RECORD, DWORD dwI, LPDWORD pdwRequiredLen ) { return FALSE; } virtual BOOL GetAll( CNseInstance* pWalk, DWORD dwIndex, LPDWORD pdwMDNumDataEntries, DWORD dwMDBufferSize, LPBYTE pbBuffer, LPDWORD pdwMDRequiredBufferSize) { return FALSE; } virtual BOOL BeginTransac( CNseInstance* ) { return TRUE; } virtual BOOL EndTransac( LPSTR pszPath, CNseInstance*, BOOL ) { return TRUE; } virtual BOOL Save( LPSTR pszPath, CNseInstance*, LPBOOL ) { return TRUE; } virtual DWORD GetCount( CNseInstance*, DWORD ) { return 0; } virtual BOOL Release( CNseInstance*, DWORD );
public: DWORD GetId() { return m_dwId; } DWORD GetDwParam() { return m_dwParam; } DWORD GetDwParam2() { return m_dwParam2; } BOOL GetIterated() { return m_fIterated; } CNseInstance* Locate( CNseInstance* pI, PMETADATA_RECORD pMD ); BOOL RemoveFromChildren( CNseInstance* pI, CNseInstance* pChild );
public: CNseObj** m_pnoChildren; UINT m_cnoChildren; LPSTR m_pszName; // either Name or Id defined
protected: DWORD m_dwId; BOOL m_fIterated; DWORD m_dwParam; DWORD m_dwParam2; } ;
class CNseFieldMapperId : public CNseObj { public: CNseFieldMapperId( LPSTR pName, DWORD dwId, BOOL fIter, CNseObj** pC, UINT cC, DWORD dwP = 0, DWORD dwP2 = 0) : CNseObj( pName, dwId, fIter, pC, cC, dwP, dwP2 ) {} } ;
class CNseFldMap : public CNseObj { public: CNseFldMap( LPSTR pName, DWORD dwId, BOOL fIter, CNseObj** pC, UINT cC, DWORD dwP = 0) : CNseObj( pName, dwId, fIter, pC, cC, dwP ) {} BOOL Release( CNseInstance* pI, DWORD dwIndex ); BOOL Delete( LPSTR, CNseInstance* pI, DWORD dwIndex ); DWORD GetCount( CNseInstance* pI, DWORD dwIndex ); BOOL AddMapper( CNseInstance* pFather, CIisAcctMapper* pM ); BOOL Save( LPSTR pszPath, CNseInstance* pI, LPBOOL ); BOOL SaveMapper( LPSTR pszPath, CNseInstance* pI, DWORD dwId, LPBOOL ); BOOL LoadAndUnserialize( CNseInstance* pI, CIisAcctMapper* pM, LPSTR pszPath, DWORD dwId ); BOOL EndTransac( LPSTR pszPath, CNseInstance*, BOOL ); } ;
class CNseCert11Mapper : public CNseFldMap { public: CNseCert11Mapper( LPSTR pName, DWORD dwId, BOOL fIter, CNseObj** pC, UINT cC, DWORD dwP = 0) : CNseFldMap( pName, dwId, fIter, pC, cC, dwP ) {} BOOL Add( CNseInstance* pFather, DWORD ); BOOL Load( CNseInstance* pI, LPSTR pszPath ); } ;
class CNseDigestMapper : public CNseFldMap { public: CNseDigestMapper( LPSTR pName, DWORD dwId, BOOL fIter, CNseObj** pC, UINT cC, DWORD dwP = 0) : CNseFldMap( pName, dwId, fIter, pC, cC, dwP ) {} BOOL Add( CNseInstance* pFather, DWORD ); BOOL Load( CNseInstance* pI, LPSTR pszPath ); } ;
class CNseItaMapper : public CNseFldMap { public: CNseItaMapper( LPSTR pName, DWORD dwId, BOOL fIter, CNseObj** pC, UINT cC, DWORD dwP = 0) : CNseFldMap( pName, dwId, fIter, pC, cC, dwP ) {} BOOL Add( CNseInstance* pFather, DWORD ); BOOL Load( CNseInstance* pI, LPSTR pszPath ); } ;
class CNseIssuers : public CNseObj { public: CNseIssuers( LPSTR pName, DWORD dwId, BOOL fIter, CNseObj** pC, UINT cC, DWORD dwP = 0) : CNseObj( pName, dwId, fIter, pC, cC, dwP ) {} BOOL Add( CNseInstance*, DWORD dwIndex ) { return FALSE; } BOOL Delete( LPSTR, CNseInstance* pI, DWORD dwIndex ) { return FALSE; } BOOL Load( CNseInstance* pI, LPSTR pszPath ); BOOL Save( LPSTR pszPath, CNseInstance* pI, LPBOOL ) { return TRUE; } BOOL Release( CNseInstance* pI, DWORD dwIndex ) { return CNseObj::Release( pI, dwIndex ); } } ;
class CNseCwMapper : public CNseObj { public: CNseCwMapper( LPSTR pName, DWORD dwId, BOOL fIter, CNseObj** pC, UINT cC, DWORD dwP = 0) : CNseObj( pName, dwId, fIter, pC, cC, dwP ) {} BOOL Add( CNseInstance*, DWORD dwIndex ); BOOL Delete( LPSTR, CNseInstance* pI, DWORD dwIndex ); BOOL Load( CNseInstance*, LPSTR pszPath ); BOOL Save( LPSTR pszPath, CNseInstance* pI, LPBOOL ); BOOL Release( CNseInstance* pI, DWORD dwIndex ); } ;
class CNseAllMappings : public CNseObj { public: CNseAllMappings( LPSTR pName, DWORD dwId, BOOL fIter, CNseObj** pC, UINT cC, DWORD dwP = 0) : CNseObj( pName, dwId, fIter, pC, cC, dwP ) {} BOOL Set( CNseInstance* pI, DWORD dwIndex, PMETADATA_RECORD pMD ); BOOL Get( CNseInstance*, DWORD dwIndex, PMETADATA_RECORD pMD, LPDWORD pdwReq ); BOOL GetByIndex( CNseInstance*, DWORD dwIndex, PMETADATA_RECORD pMD, DWORD dwI, LPDWORD pdwReq ); DWORD GetCount( CNseInstance* pI, DWORD dwIndex ); // Get property of iterated entry
BOOL Get( CNseInstance*, DWORD dwIndex, PMETADATA_RECORD pMD, CNseInstance* pL, LPDWORD pdwReq ); BOOL Add( CNseInstance* pI, DWORD dwIndex ); BOOL Delete( LPSTR, CNseInstance* pI, DWORD dwIndex ); BOOL GetAll( CNseInstance* pWalk, DWORD dwIndex, LPDWORD pdwMDNumDataEntries, DWORD dwMDBufferSize, LPBYTE pbBuffer, LPDWORD pdwMDRequiredBufferSize); } ;
class CNseCert11Mapping : public CNseAllMappings { public: CNseCert11Mapping( LPSTR pName, DWORD dwId, BOOL fIter, CNseObj** pC, UINT cC, DWORD dwP = 0) : CNseAllMappings( pName, dwId, fIter, pC, cC, dwP ) {} } ;
class CNseDigestMapping : public CNseAllMappings { public: CNseDigestMapping( LPSTR pName, DWORD dwId, BOOL fIter, CNseObj** pC, UINT cC, DWORD dwP = 0) : CNseAllMappings( pName, dwId, fIter, pC, cC, dwP ) {} } ;
class CNseItaMapping : public CNseAllMappings { public: CNseItaMapping( LPSTR pName, DWORD dwId, BOOL fIter, CNseObj** pC, UINT cC, DWORD dwP = 0) : CNseAllMappings( pName, dwId, fIter, pC, cC, dwP ) {} } ;
class CNoCppObj : public CNseObj { public: CNoCppObj( LPSTR pName, DWORD dwId, BOOL fIter, CNseObj** pC, UINT cC, DWORD dwP = NULL ) : CNseObj( pName, dwId, fIter, pC, cC, dwP ) {} BOOL Get( CNseInstance*pI, DWORD, PMETADATA_RECORD pM, LPDWORD pdwRequiredLen ); BOOL Set( CNseInstance*, DWORD dwIndex, PMETADATA_RECORD ) { return FALSE; } BOOL Add( CNseInstance*, DWORD ) { return FALSE; } BOOL Delete( LPSTR, CNseInstance*, DWORD ) { return FALSE; } } ;
class CKeyedAccess : public CNseObj { public: CKeyedAccess( LPSTR pName, DWORD dwId, BOOL fIter, CNseObj** pC, UINT cC, DWORD dwP = NULL ) : CNseObj( pName, dwId, fIter, pC, cC, dwP ) {} BOOL Get( CNseInstance*pI, DWORD, PMETADATA_RECORD pM, LPDWORD pdwRequiredLen ); BOOL Set( CNseInstance*, DWORD dwIndex, PMETADATA_RECORD, DWORD dwType ); BOOL Add( CNseInstance*, DWORD ) { return FALSE; } BOOL Delete( LPSTR, CNseInstance*, DWORD ) { return FALSE; } } ;
class CAccessByAccount : public CKeyedAccess { public: CAccessByAccount( LPSTR pName, DWORD dwId, BOOL fIter, CNseObj** pC, UINT cC, DWORD dwP = NULL ) : CKeyedAccess( pName, dwId, fIter, pC, cC, dwP ) {} BOOL Set( CNseInstance* pI, DWORD dwIndex, PMETADATA_RECORD pMD ) { return CKeyedAccess::Set( pI, dwIndex, pMD, NSEPM_ACCESS_ACCOUNT ); } BOOL Add( CNseInstance*, DWORD ) { return FALSE; } BOOL Delete( LPSTR, CNseInstance*, DWORD ) { return FALSE; } } ;
class CAccessByCert : public CKeyedAccess { public: CAccessByCert( LPSTR pName, DWORD dwId, BOOL fIter, CNseObj** pC, UINT cC, DWORD dwP = NULL ) : CKeyedAccess( pName, dwId, fIter, pC, cC, dwP ) {} BOOL Set( CNseInstance* pI, DWORD dwIndex, PMETADATA_RECORD pMD ) { return CKeyedAccess::Set( pI, dwIndex, pMD, NSEPM_ACCESS_CERT ); } BOOL Add( CNseInstance*, DWORD ) { return FALSE; } BOOL Delete( LPSTR, CNseInstance*, DWORD ) { return FALSE; } } ;
class CAccessByName : public CKeyedAccess { public: CAccessByName( LPSTR pName, DWORD dwId, BOOL fIter, CNseObj** pC, UINT cC, DWORD dwP = NULL ) : CKeyedAccess( pName, dwId, fIter, pC, cC, dwP ) {} BOOL Set( CNseInstance* pI, DWORD dwIndex, PMETADATA_RECORD pMD ) { return CKeyedAccess::Set( pI, dwIndex, pMD, NSEPM_ACCESS_NAME ); } BOOL Add( CNseInstance*, DWORD ) { return FALSE; } BOOL Delete( LPSTR, CNseInstance*, DWORD ) { return FALSE; } } ;
class CSerialAllObj : public CNseObj { public: CSerialAllObj( LPSTR pName, DWORD dwId, BOOL fIter, CNseObj** pC, UINT cC, DWORD dwP = NULL ) : CNseObj( pName, dwId, fIter, pC, cC, dwP ) {} BOOL Get( CNseInstance*pI, DWORD, PMETADATA_RECORD pM, LPDWORD pdwRequiredLen ); BOOL Set( CNseInstance*, DWORD dwIndex, PMETADATA_RECORD ); BOOL Add( CNseInstance*, DWORD ) { return FALSE; } BOOL Delete( LPSTR, CNseInstance*, DWORD ) { return FALSE; } } ;
class CNoCwSerObj : public CNseObj { public: CNoCwSerObj( LPSTR pName, DWORD dwId, BOOL fIter, CNseObj** pC, UINT cC, DWORD dwP = NULL ) : CNseObj( pName, dwId, fIter, pC, cC, dwP ) {} BOOL Get( CNseInstance*pI, DWORD, PMETADATA_RECORD pM, LPDWORD pdwRequiredLen ); BOOL Set( CNseInstance*, DWORD dwIndex, PMETADATA_RECORD ); BOOL Add( CNseInstance*, DWORD ) { return FALSE; } BOOL Delete( LPSTR, CNseInstance*, DWORD ) { return FALSE; } } ;
class CNoIsSerObj : public CNseObj { public: CNoIsSerObj( LPSTR pName, DWORD dwId, BOOL fIter, CNseObj** pC, UINT cC, DWORD dwP = NULL ) : CNseObj( pName, dwId, fIter, pC, cC, dwP ) {} BOOL Get( CNseInstance*pI, DWORD, PMETADATA_RECORD pM, LPDWORD pdwRequiredLen ); BOOL Set( CNseInstance*, DWORD dwIndex, PMETADATA_RECORD ) { return FALSE; } BOOL Add( CNseInstance*, DWORD ) { return FALSE; } BOOL Delete( LPSTR, CNseInstance*, DWORD ) { return FALSE; } } ;
class CNoList : public CNseObj { public: CNoList( LPSTR pName, DWORD dwId, BOOL fIter, CNseObj** pC, UINT cC, DWORD dwP = NULL) : CNseObj( pName, dwId, fIter, pC, cC, dwP ) {} // load children of template in instance
BOOL Load( CNseInstance* pI, LPSTR pszPath ); } ;
class CNseInstance { public: CNseInstance( CNseObj* pTemp = NULL, CNseInstance* pFather = NULL ); DWORD GetNbChildren() { return m_pniChildren.GetNbPtr(); } CNseInstance* GetChild( DWORD i) { return (CNseInstance*)m_pniChildren.GetPtr( i); } BOOL AddChild( CNseInstance* pI ) { return m_pniChildren.AddPtr( (LPVOID)pI ) != 0xffffffff; } BOOL DeleteChild( DWORD i ) { return m_pniChildren.DeletePtr( i ); } BOOL CreateChildrenInstances( BOOL fRecursive );
public: CNseObj* m_pTemplateObject; CNseInstance* m_pniParent; CPtrXBF m_pniChildren; //array of CNseInstance*, decode w/ their template
LPVOID m_pvParam; DWORD m_dwParam; BOOL m_fModified; } ;
class CNseMountPoint { public: CNseMountPoint(); BOOL Release(); BOOL Save( LPBOOL ); BOOL EndTransac( BOOL ); BOOL Init( LPSTR pszPath ) { return m_pszPath.Set( pszPath ); } LPSTR GetPath() { return m_pszPath.Get(); }
public: LIST_ENTRY m_ListEntry; static LIST_ENTRY m_ListHead; static CRITICAL_SECTION m_csList;
public: CNseInstance m_pTopInst; // only there to hold array of children
CNseObj* m_pTopTemp; // only there to hold array of children
CAllocString m_pszPath; // path to NSEP mounting point in metabase tree
} ;
extern IMDCOM* g_pMdIf;
#define IMDCOM_PTR g_pMdIf
#endif
|