|
|
#ifndef _MDKEY_H_
#define _MDKEY_H_
class CMDValue { protected: DWORD m_dwId; DWORD m_dwAttributes; DWORD m_dwUserType; DWORD m_dwDataType; DWORD m_cbDataLen; BUFFER m_bufData;
public: CMDValue(); ~CMDValue(); DWORD SetValue(DWORD dwId, DWORD dwAttributes, DWORD dwUserType, DWORD dwDataType, DWORD dwDataLen, LPVOID pbData); DWORD SetValue(DWORD dwId, DWORD dwAttributes, DWORD dwUserType, DWORD dwDataType, DWORD dwDataLen, LPTSTR szDataString); DWORD SetValue(DWORD dwId, DWORD dwAttributes, DWORD dwUserType, DWORD dwValue);
DWORD GetId() { return m_dwId; } DWORD GetAttributes() { return m_dwAttributes; } DWORD GetUserType() { return m_dwUserType; } DWORD GetDataType() { return m_dwDataType; } DWORD GetDataLen() { return m_cbDataLen; } PVOID GetData() { return m_bufData.QueryPtr(); } void SetAttributes(DWORD dwAttrib) { m_dwAttributes = dwAttrib; } BOOL IsEqual(DWORD dwDataType, DWORD cbDataLen, LPVOID pbData); BOOL IsEqual(DWORD dwDataType, DWORD cbDataLen, DWORD dwData); };
class CMDKey : public CObject { protected: IMSAdminBase * m_pcCom; METADATA_HANDLE m_hKey; LPTSTR pszFailedAPI;
public: CMDKey(); ~CMDKey();
TCHAR m_szCurrentNodeName[_MAX_PATH];
// allow CMDKey to be used where type METADATA_HANDLE is required
operator METADATA_HANDLE () {return m_hKey;} METADATA_HANDLE GetMDKeyHandle() {return m_hKey;} IMSAdminBase *GetMDKeyICOM() {return m_pcCom;}
// open an existing MD key
HRESULT OpenNode(LPCTSTR pchSubKeyPath, BOOL bSupressErrorMessage = FALSE); // to open an existing MD key, or create one if doesn't exist
HRESULT CreateNode(METADATA_HANDLE hKeyBase, LPCTSTR pchSubKeyPath); // close node opened/created by OpenNode() or CreateNode()
HRESULT Close();
// Add a node
HRESULT AddNode( LPWSTR szNodeName );
HRESULT ForceWriteMetabaseToDisk(); HRESULT DeleteNode(LPCTSTR pchSubKeyPath);
BOOL IsEmpty( PWCHAR pszSubString = L"" ); int GetNumberOfSubKeys( PWCHAR pszSubString = L"" );
// get all the sub keys that have a certain property on them and return the
// sub-paths in a cstring list object. The cstring list should be instantiated
// by the caller and deleted by the same.
HRESULT GetDataPaths( DWORD dwMDIdentifier, DWORD dwMDDataType, CStringList& szPathList, PWCHAR pszSubString = L"" );
HRESULT GetMultiSzAsStringList ( DWORD dwMDIdentifier, DWORD *uType, DWORD *attributes, CStringList& szStrList, LPCWSTR pszSubString = L"" );
HRESULT SetMultiSzAsStringList ( DWORD dwMDIdentifier, DWORD uType, DWORD attributes, CStringList& szStrList, PWCHAR pszSubString = L"" );
HRESULT GetStringAsCString ( DWORD dwMDIdentifier, DWORD uType, DWORD attributes, CString& szStrList, PWCHAR pszSubString = L"", int iStringType = 0);
HRESULT SetCStringAsString ( DWORD dwMDIdentifier, DWORD uType, DWORD attributes, CString& szStrList, PWCHAR pszSubString = L"", int iStringType = 0);
HRESULT GetDword( DWORD dwMDIdentifier, DWORD uType, DWORD attributes, DWORD& MyDword, PWCHAR pszSubString = L"");
HRESULT SetData( DWORD id, DWORD attr, DWORD uType, DWORD dType, DWORD cbLen, LPBYTE pbData, PWCHAR pszSubString = L"" );
BOOL GetData(DWORD id, DWORD *pdwAttr, DWORD *pdwUType, DWORD *pdwDType, DWORD *pcbLen, LPBYTE pbData, DWORD BufSize, LPCWSTR pszSubString = L"" );
BOOL GetData(DWORD id, DWORD *pdwAttr, DWORD *pdwUType, DWORD *pdwDType, DWORD *pcbLen, LPBYTE pbData, DWORD BufSize, DWORD dwAttributes, DWORD dwUType, DWORD dwDType, LPCWSTR pszSubString = L"" );
BOOL EnumKeys( LPWSTR pchMDName, DWORD dwIndex, LPTSTR pszSubKeyPath = _T("") );
HRESULT DeleteData(DWORD id, DWORD dType, PWCHAR pszSubString = L"" );
HRESULT RenameNode(LPCTSTR pszMDPath,LPCTSTR pszMDNewName);
BOOL GetData(CMDValue &Value, DWORD id, LPCWSTR pszSubString = L"" );
BOOL SetData(CMDValue &Value, DWORD id, PWCHAR pszSubString = L"" );
static BOOL Backup( LPWSTR szBackupName, DWORD dwVersion, DWORD dwFlags );
static BOOL DeleteBackup( LPWSTR szBackupName, DWORD dwVersion = MD_BACKUP_HIGHEST_VERSION ); private:
HRESULT DoCoInitEx(); void DoCoUnInit(); static HRESULT CreateABO( IMSAdminBase **ppcABO ); static void CloseABO( IMSAdminBase *pcABO );
// a count of the calls to coinit
INT m_cCoInits; };
class CMDKeyIter : public CObject { protected: IMSAdminBase * m_pcCom; METADATA_HANDLE m_hKey; LPWSTR m_pBuffer; DWORD m_dwBuffer;
public: CMDKeyIter(CMDKey &cmdKey); ~CMDKeyIter();
LONG Next(CString *pcsName, PWCHAR pwcsSubString = L"");
void Reset() {m_index = 0;}
DWORD m_index; };
#endif // _MDKEY_H_
|