Leaked source code of windows server 2003
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.
 
 
 
 
 
 

84 lines
1.9 KiB

#ifndef _PROFILE_SCHEMA_H
#define _PROFILE_SCHEMA_H
#include "BstrHash.h"
#ifndef __no_msxml_dll_import__
#import <msxml.tlb> rename_namespace("MSXML")
#endif
typedef CRawCIBstrHash<int> RAWBSTR2INT;
#define INVALID_POS (UINT)(-1)
#define FULL_SCHEMA (DWORD)(-1)
class CProfileSchema
{
public:
// Read the raw blob according to the schema, and output the positions of
// each element. Output array size MUST be >= Count()
HRESULT parseProfile(LPSTR raw, UINT size, UINT* positions, UINT* bitFlagPositions, DWORD* pdwAttrs);
enum AttrType {
tText=0,
tChar,
tByte,
tWord,
tLong,
tDate,
tInvalid
};
CProfileSchema();
~CProfileSchema();
BOOL isOk() const { return m_isOk; }
_bstr_t getErrorInfo() const { return m_szReason; }
long GetAgeSeconds() const;
#ifndef __no_msxml_dll_import__
BOOL Read(MSXML::IXMLElementPtr &root);
#endif
BOOL ReadFromArray(UINT numAttributes, LPTSTR names[], AttrType types[], short sizes[], BYTE readOnly[] = NULL);
int m_maskPos;
// Number of attributes
int Count() const { return m_numAtts; }
// Find the index by name
int GetIndexByName(BSTR name) const;
BSTR GetNameByIndex(int index) const;
// Get the type of an attribute
AttrType GetType(UINT index) const;
// Can I write to this attribute?
BOOL IsReadOnly(UINT index) const;
// Get the inherent size of an attribute
// Returns -1 if the type is length prefixed
int GetBitSize(UINT index) const;
int GetByteSize(UINT index) const;
CProfileSchema* AddRef();
void Release();
protected:
long m_refs;
BOOL m_isOk;
_bstr_t m_szReason;
// Valid until this time
SYSTEMTIME m_validUntil;
// Array of attribute types
UINT m_numAtts;
AttrType *m_atts;
short *m_sizes;
BYTE *m_readOnly;
RAWBSTR2INT m_indexes;
};
#endif