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.
|
|
#ifndef _COMPONENT_H_
#define _COMPONENT_H_
#include <iostream.h>
#include <windows.h>
#include <setupapi.h>
#include <stdio.h>
#include <tchar.h>
#include "logutils.h"
#include "hcttools.h"
const INT MaxStringSize = 256; const INT MaxBufferSize = 255;
// Global variables
static BOOL g_bUseLog; static BOOL g_bUseMsgBox; static BOOL g_bUseConsole; static BOOL g_bMasterInf;
// Global function definitions
VOID LogError(IN TCHAR *tszMsg, IN DWORD dwErrorLevel, IN TCHAR *tszFunctionName);
// Some structures to hold temporary data
typedef struct _DescAndTip{ TCHAR tszDesc[MaxStringSize]; TCHAR tszTip[MaxStringSize]; }DescAndTip; class ComponentList; class RelationList;
class Component{
private: // ComponentId is the real ID
TCHAR tszComponentId[MaxStringSize]; // ParentId is the ID of the its parent
// It is the same as its own ID if it is a
// top level component
TCHAR tszParentId[MaxStringSize];
RelationList *prlNeedList; RelationList *prlExcludeList; RelationList *prlChildrenList;
Component *Next;
public:
// Constructors and destructors
Component(); ~Component(); Component(TCHAR *tszId); // Copy constructor
Component(const Component& source);
// Assignment operator
const Component& operator=(const Component& source);
// Get this component's ID
TCHAR *GetComponentId(){ return tszComponentId; }
// Get this component's parent's ID
TCHAR *GetParentId(){ return tszParentId; }
// Get a pointer to the parent component of this component
// It returns NULL if this is a top-level component
Component *GetParent(ComponentList *pclHead); RelationList *GetNeedList(){ return prlNeedList; }
RelationList *GetExcludeList(){ return prlExcludeList; }
RelationList *GetChildrenList(){ return prlChildrenList; }
// TRUE if this component is the parent of the parameter
BOOL IsParent(Component *pcChild);
// TRUE if this component is the child of the parameter
BOOL IsChild(Component *pcParent);
// TRUE if this component is needed by the parameter
BOOL IsNeededBy(Component *pcComponent);
// TRUE if this component is excluded by the parameter
BOOL IsExcludeBy(Component *pcComponent); // The following function is to be called when only
// the component ID is known
BOOL BuildChildrenList(ComponentList *pclList);
BOOL GetParentIdFromINF(HINF hinfHandle);
BOOL IsTopLevelComponent();
BOOL IsBottomComponent();
BOOL IsNeededByOthers(ComponentList *pclList);
BOOL IsExcludedByOthers(ComponentList *pclList);
BOOL IsParentOfOthers();
BOOL NeedAndExcludeAtSameTime(ComponentList *pclList);
BOOL NeedOthers(); BOOL ExcludeOthers();
BOOL IsThereSameId(ComponentList *pclList);
UINT GetDiskSpaceRequirement(HINF hinfHandle);
// Doesn't matter if this is a public member
// It will only be used once
DescAndTip *pDescAndTip;
BOOL IsThereSameDesc(ComponentList *pclList);
BOOL HasSameParentWith(Component *pcComponent);
friend class ComponentList; };
class ComponentList{
private:
Component *pcHead;
Component *pcCurrent;
public:
// Constructor and destructor
ComponentList(); ~ComponentList();
void ResetList();
Component *GetNext();
BOOL Done();
Component* AddComponent(TCHAR *tszId);
BOOL RemoveComponent(TCHAR *tszId);
Component *LookupComponent(TCHAR *tszId);
friend class Component;
};
class Relation{
TCHAR tszComponentId[MaxStringSize]; Relation *Next;
public:
TCHAR *GetComponentId(){ return tszComponentId; } friend class Component; friend class ComponentList; friend class RelationList; };
class RelationList{
Relation *prHead; Relation *prCurrent;
public:
RelationList(); ~RelationList();
void ResetList(); BOOL Done(); Relation *GetNext();
Relation* AddRelation(TCHAR *tszId); BOOL RemoveRelation(TCHAR *tszId);
friend class Component; friend class ComponentList;
};
#endif
|