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.
208 lines
5.4 KiB
208 lines
5.4 KiB
/*++
|
|
|
|
Copyright (C) 1996-2000 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
DBREP.H
|
|
|
|
Abstract:
|
|
|
|
Object database class representations which are stored in the database.
|
|
|
|
History:
|
|
|
|
--*/
|
|
#ifndef _DBREP_H_
|
|
#define _DBREP_H_
|
|
|
|
#include <stdio.h>
|
|
#include <wbemcli.h>
|
|
#include <TIME.H>
|
|
#include "MMFArena2.h"
|
|
#include "dbavl.h"
|
|
#include "dbarry.h"
|
|
#include <wbemutil.h>
|
|
|
|
extern CMMFArena2* g_pDbArena;
|
|
|
|
struct NSREP;
|
|
struct CLASSDEF;
|
|
struct INSTDEF;
|
|
struct RepCollectionItem;
|
|
struct RepCollection;
|
|
struct PtrCollection;
|
|
struct SINDEXTABLE;
|
|
struct DANGREF;
|
|
struct DANGREFCLASS;
|
|
struct DANGREFKEY;
|
|
struct DANGLREFSCHEMA;
|
|
struct DANGREFSCHEMA;
|
|
struct DANGREFSCHEMACLASS;
|
|
struct DBROOT;
|
|
|
|
class DATABASE_CRITICAL_ERROR : public CX_Exception
|
|
{
|
|
};
|
|
|
|
//=============================================================================
|
|
//
|
|
// RepCollectionItem
|
|
//
|
|
// This structure is used to associate a key to the stored pointer when
|
|
// we have a single item or an array of items. The AvlTree has it's own
|
|
// object to do this task so we do not need it for that.
|
|
//=============================================================================
|
|
struct RepCollectionItem
|
|
{
|
|
public:
|
|
DWORD_PTR poKey; //Offset within MMF of key. We own this key value.
|
|
DWORD_PTR poItem; //Offset within MMF of item. We do not own the object this points to!
|
|
|
|
};
|
|
|
|
struct RepCollection
|
|
{
|
|
private:
|
|
enum { none, single_item, array, tree} m_repType;
|
|
enum { MAX_ARRAY_SIZE = 10 };
|
|
DWORD m_dwSize;
|
|
union
|
|
{
|
|
DWORD_PTR m_poSingleItem;
|
|
CDbArray *m_poDbArray;
|
|
CDbAvlTree *m_poDbAvlTree;
|
|
};
|
|
};
|
|
|
|
//Repository of pointers stored in reference tables.
|
|
//If the list is one item it is a direct pointer, if a small number of items
|
|
//(say 10) it is a CDbArray, otherwise we use a CDbAvlTree.
|
|
struct PtrCollection
|
|
{
|
|
enum { none, single_item, array, tree} m_repType;
|
|
enum { MAX_ARRAY_SIZE = 10 };
|
|
|
|
DWORD m_dwSize;
|
|
union
|
|
{
|
|
DWORD_PTR m_poPtr;
|
|
CDbArray *m_poDbArray;
|
|
CDbAvlTree *m_poDbAvlTree;
|
|
};
|
|
};
|
|
|
|
struct NSREP
|
|
{
|
|
enum { flag_normal = 0x1, flag_hidden = 0x2, flag_temp = 0x4,
|
|
flag_system = 0x8
|
|
};
|
|
|
|
// Data members.
|
|
// =============
|
|
RepCollection *m_poNamespaces; // Child namespaces, based ptr
|
|
LPWSTR m_poName; // Namespace name, based ptr
|
|
INSTDEF *m_poObjectDef; // 'Real' object definition, based ptr
|
|
DWORD m_dwFlags; // Hidden, normal, temp, system, etc.
|
|
CDbAvlTree *m_poClassTree; // Class tree by Name, CLASSDEF structs, based tr
|
|
NSREP *m_poParentNs; // Owning namespace, based ptr
|
|
DWORD_PTR m_poSecurity;
|
|
};
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
struct INSTDEF
|
|
{
|
|
enum
|
|
{
|
|
genus_class = WBEM_GENUS_CLASS, //defined in IDL, 1
|
|
genus_instance = WBEM_GENUS_INSTANCE, //defined in IDL, 2
|
|
compressed = 0x100
|
|
};
|
|
|
|
NSREP *m_poOwningNs; // back ptr for debugging, based ptr
|
|
CLASSDEF *m_poOwningClass; // back ptr for debugging, based ptr
|
|
DWORD m_dwFlags; // Genus, etc.
|
|
LPVOID m_poObjectStream; // Ptr to object stream, based ptr
|
|
PtrCollection *m_poRefTable; // List of references to this object
|
|
};
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
#define MAX_SECONDARY_INDICES 4
|
|
|
|
struct SINDEXTABLE
|
|
{
|
|
DWORD m_aPropTypes[MAX_SECONDARY_INDICES]; // VT_ type of the property.
|
|
LPWSTR m_aPropertyNames[MAX_SECONDARY_INDICES]; // NULL entries indicate nothing
|
|
CDbAvlTree *m_apoLookupTrees[MAX_SECONDARY_INDICES]; // Parallel to above names
|
|
};
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
struct CLASSDEF
|
|
{
|
|
enum { keyed = 0x1,
|
|
unkeyed = 0x2,
|
|
indexed = 0x4,
|
|
abstract = 0x08,
|
|
borrowed_index = 0x10,
|
|
dynamic = 0x20,
|
|
// has_refs = 0x40,
|
|
singleton = 0x80,
|
|
compressed = 0x100,
|
|
has_class_refs = 0x200
|
|
};
|
|
|
|
// Data members.
|
|
// =============
|
|
NSREP *m_poOwningNs; // Back reference to owning namespace, based ptr
|
|
INSTDEF *m_poClassDef; // Local definition mixed with instances, based ptr
|
|
CLASSDEF *m_poSuperclass; // Immediate parent class, based ptr
|
|
DWORD m_dwFlags; // Various combinations of the above enum flags
|
|
CDbAvlTree *m_poKeyTree; // Instances by key, based ptr
|
|
PtrCollection*m_poSubclasses; // Child classes, based ptr
|
|
SINDEXTABLE *m_poSecondaryIx; // Based ptr to secondary indices
|
|
PtrCollection*m_poInboundRefClasses; // Classes which may have dyn instances which reference
|
|
// objects of this class
|
|
};
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
struct DANGREF : public RepCollection
|
|
{
|
|
};
|
|
|
|
struct DANGREFCLASS : public RepCollection
|
|
{};
|
|
struct DANGREFKEY : public RepCollection
|
|
{};
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
struct DANGLREFSCHEMA : public RepCollection
|
|
{};
|
|
|
|
struct DANGREFSCHEMA : public RepCollection
|
|
{};
|
|
|
|
struct DANGREFSCHEMACLASS : public RepCollection
|
|
{
|
|
};
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
#define DB_ROOT_CLEAN 0x0
|
|
#define DB_ROOT_INUSE 0x1
|
|
|
|
struct DBROOT
|
|
{
|
|
public:
|
|
time_t m_tCreate;
|
|
time_t m_tUpdate;
|
|
DWORD m_dwFlags; // in-use, stable, etc.
|
|
NSREP *m_poRootNs; // ROOT namespace
|
|
DANGREF *m_poDanglingRefTbl; // Dangling reference table
|
|
DANGREFSCHEMA *m_poSchemaDanglingRefTbl;// Same as above but for schema-based fixups
|
|
};
|
|
|
|
#endif
|