You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
214 lines
5.8 KiB
214 lines
5.8 KiB
#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_
|
|
|
|
|