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.
 
 
 
 
 
 

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