//+--------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1993 - 1997. // // File: datapkt.h // // Contents: Defines the class CDataPacket to manages diverse data // packets needing to be written to various databases // // Classes: // // Methods: // // History: 23-Apr-96 BruceMa Created. // //---------------------------------------------------------------------- #ifndef _DATAPKT_H_ #define _DATAPKT_H_ typedef enum tagPACKETTYPE { Empty, NamedValueSz, NamedValueDword, SingleACL, RegKeyACL, Password, ServiceIdentity, NamedValueMultiSz, RegistryNode } PACKETTYPE; typedef struct { TCHAR *szValue; } SNamedValueSz, *PNamedValueSz; typedef struct { int Dummy; } SNamedValueMultiSz; typedef struct { DWORD dwValue; } SNamedValueDword, *PNamedValueDword; typedef struct { SECURITY_DESCRIPTOR *pSec; } SSingleACL, *PSingleACL; typedef struct { HKEY *phClsids; unsigned cClsids; TCHAR *szTitle; SECURITY_DESCRIPTOR *pSec; SECURITY_DESCRIPTOR *pSecOrig; } SRegKeyACL, *PRegKeyACL; typedef struct { TCHAR *szPassword; CLSID appid; } SPassword, *PPassword; typedef struct { TCHAR *szServiceName; TCHAR *szIdentity; } SServiceIdentity, *PServiceIdentity; class CDataPacket { public: CDataPacket(void); CDataPacket(HKEY hRoot, TCHAR *szKeyPath, TCHAR *szValueName, DWORD dwValue); CDataPacket(HKEY hRoot, TCHAR *szKeyPath, TCHAR *szValueName, SECURITY_DESCRIPTOR *pSec, BOOL fSelfRelative); CDataPacket(HKEY hKey, HKEY *phClsids, unsigned cClsids, TCHAR *szTitle, SECURITY_DESCRIPTOR *pSecOrig, SECURITY_DESCRIPTOR *pSec, BOOL fSelfRelative); CDataPacket(TCHAR *szPassword, CLSID apid); CDataPacket(TCHAR *szServiceName, TCHAR *szIdentity); CDataPacket(PACKETTYPE pktType, HKEY hRoot, TCHAR *szKeyPath, TCHAR *szValueName); CDataPacket(const CDataPacket& rDataPacket); virtual ~CDataPacket(); void ChgDwordValue(DWORD dwValue); void ChgACL(SECURITY_DESCRIPTOR *pSec, BOOL fSelfRelative); void ChgPassword(TCHAR *szPassword); void ChgSrvIdentity(TCHAR *szIdentity); void MarkForDeletion(BOOL); void MarkHiveForDeletion(BOOL bDelete); void SetModified(BOOL fDirty); BOOL IsDeleted(); BOOL IsModified(); virtual int Apply(); virtual long Read(HKEY hKey); virtual int Remove(); virtual int Update(); DWORD GetDwordValue(); virtual BOOL IsIdentifiedBy(HKEY hRoot,TCHAR *, TCHAR*); PACKETTYPE m_tagType; BOOL m_fModified; BOOL m_fDelete; BOOL m_fDeleteHive; HKEY m_hRoot; CString m_szKeyPath; CString m_szValueName; union { SNamedValueSz nvsz; SNamedValueDword nvdw; SSingleACL acl; SRegKeyACL racl; SPassword pw; SServiceIdentity si; SNamedValueMultiSz nvmsz; } pkt; private: void ReportOutOfMemAndTerminate(); }; inline void CDataPacket::SetModified(BOOL fDirty) { m_fModified = fDirty; } inline BOOL CDataPacket::IsModified() { return m_fModified; } inline BOOL CDataPacket::IsDeleted() { return m_fDelete; } inline DWORD CDataPacket::GetDwordValue() { return pkt.nvdw.dwValue; } class CRegSzNamedValueDp : public CDataPacket { public: CRegSzNamedValueDp(HKEY hRoot, TCHAR *szKeyPath, TCHAR *szValueName, TCHAR *szValue); CRegSzNamedValueDp(const CRegSzNamedValueDp&); virtual BOOL IsIdentifiedBy(HKEY hRoot, TCHAR *szKeyPath, TCHAR *szValueName); virtual int Update(); virtual long Read(HKEY hkey); CString Value(); void ChgSzValue(TCHAR *szValue); private: CString m_szValue; }; class CRegMultiSzNamedValueDp : public CDataPacket { public: CRegMultiSzNamedValueDp(HKEY hRoot, TCHAR *szKeyPath, TCHAR *szValueName); virtual ~CRegMultiSzNamedValueDp(); virtual long Read(HKEY hKey); virtual int Update(); virtual BOOL IsIdentifiedBy(HKEY hRoot, TCHAR *szKeyPath, TCHAR *szValueName); void Clear(); CStringArray& Values() { return m_strValues; } private: CStringArray m_strValues; }; #endif // _DATAPKT_H_