?? commobj.h
字號:
//***********************************************************************/
// Author : Garry
// Original Date : Sep,03 2004
// Module Name : commobj.cpp
// Module Function :
// This module countains common object definition
// and macros.
// Last modified Author :
// Last modified Date :
// Last modified Content :
// 1.
// 2.
// Lines number :
//***********************************************************************/
#ifndef __COMMOBJ_H__
#define __COMMOBJ_H__
struct __COMMON_OBJECT{
DWORD dwObjectType; //Object type.
DWORD dwObjectID; //Object ID.
DWORD dwObjectSize; //This object's size.
__COMMON_OBJECT* lpPrevObject; //Point to previous object.
__COMMON_OBJECT* lpNextObject; //Point to next object.
__COMMON_OBJECT* lpObjectOwner; //This object's owner.
//__COMMON_OBJECT* lpLeft; //Used in the future,AVL tree's left branch.
//__COMMON_OBJECT* lpRight; //Used in the ruture,AVL tree's right branch.
BOOL (*Initialize)(__COMMON_OBJECT*); //Object's initialize routine.
VOID (*Uninitialize)(__COMMON_OBJECT*);
};
//
//The following macro is used to implementation inherit.
//
#define INHERIT_FROM_COMMON_OBJECT \
DWORD dwObjectType; \
DWORD dwObjectID; \
DWORD dwObjectSize; \
__COMMON_OBJECT* lpPrevObject; \
__COMMON_OBJECT* lpNextObject; \
__COMMON_OBJECT* lpObjectOwner; \
BOOL (*Initialize)(__COMMON_OBJECT*); \
VOID (*Uninitialize)(__COMMON_OBJECT*);
//
//Begin to define a object type,i.e,a class.
//
#define BEGIN_DEFINE_OBJECT(objectname) \
struct objectname{
//
//End of the definition of object.
//
#define END_DEFINE_OBJECT() \
};
//
//Translate the source type to destination type.
//
#define OBJECT_TYPE_TRANSLATE(src_type,des_type) \
(des_type)(src_type)
#define DECLARE_PREDEFINED_OBJECT(objname) \
struct objname;
//
//The following object is used to create object by object manager.
//
BEGIN_DEFINE_OBJECT(__OBJECT_INIT_DATA)
DWORD dwObjectType;
DWORD dwObjectSize;
BOOL (*Initialize)(__COMMON_OBJECT*);
VOID (*Uninitialize)(__COMMON_OBJECT*);
END_DEFINE_OBJECT()
//
//The following macros are used to form the initialization data used by object
//manager.
//When you define a new object type,please add one line in objmgr.cpp,using the
//macro OBJECT_INIT_DATA,the parameters are:
// objtype : Object type value.
// objsize : Object size.
// init : Initialization routine.
// uninit : Uninitialization routine.
//
#define BEGIN_DECLARE_INIT_DATA(name) \
static __OBJECT_INIT_DATA name[] = \
{
#define OBJECT_INIT_DATA(objtype,objsize,init,uninit) \
{objtype,objsize,init,uninit},
#define END_DECLARE_INIT_DATA() \
{0,0,0,0} \
};
//
//The following object is used by Object Manager to manage objects.
//
BEGIN_DEFINE_OBJECT(__OBJECT_LIST_HEADER)
DWORD dwObjectNum;
DWORD dwMaxObjectID;
__COMMON_OBJECT* lpFirstObject;
END_DEFINE_OBJECT()
//
//The following object are Object Manager.
//
#define MAX_OBJECT_TYPE 64 //The maximal types in this version.
BEGIN_DEFINE_OBJECT(__OBJECT_MANAGER)
DWORD dwCurrentObjectID;
__OBJECT_LIST_HEADER ObjectListHeader[MAX_OBJECT_TYPE];
__COMMON_OBJECT* (*CreateObject)(__OBJECT_MANAGER*,__COMMON_OBJECT*,DWORD);
__COMMON_OBJECT* (*GetObjectByID)(__OBJECT_MANAGER*,DWORD);
__COMMON_OBJECT* (*GetFirstObjectByType)(__OBJECT_MANAGER*,DWORD);
VOID (*DestroyObject)(__OBJECT_MANAGER*,__COMMON_OBJECT*);
END_DEFINE_OBJECT()
//
//************************************************************************
//************************************************************************
//************************************************************************
//The declare of ObjectManager,the first global object of Hello China!
//
extern __OBJECT_MANAGER ObjectManager;
//
//The following are object types's definition.
//For each object in this system,it must have a type value assocated with it.
//
#define OBJECT_TYPE_DRIVER 0x00000001
#define OBJECT_TYPE_FILE 0x00000002
#define OBJECT_TYPE_VOLUME 0x00000003
#define OBJECT_TYPE_FAT32 0x00000004
#define OBJECT_TYPE_NTFS 0x00000005
#define OBJECT_TYPE_KERNAL_THREAD 0x00000006
#define OBJECT_TYPE_PROCESS 0x00000007
#define OBJECT_TYPE_THREAD 0x00000008
#define OBJECT_TYPE_MUTEX 0x00000009
#define OBJECT_TYPE_EVENT 0x0000000A
#define OBJECT_TYPE_CRITICAL_SECTION 0x0000000B
#define OBJECT_TYPE_VMA 0x0000000C
#define OBJECT_TYPE_DLL 0x0000000D
#define OBJECT_TYPE_IMAGE 0x0000000E
#define OBJECT_TYPE_PRIORITY_QUEUE 0x0000000F
#define OBJECT_TYPE_FIFO_QUEUE 0x00000010
#define OBJECT_TYPE_KERNEL_THREAD 0x00000011
#define OBJECT_TYPE_TIMER 0x00000012
#define OBJECT_TYPE_INTERRUPT 0x00000013
#define OBJECT_TYPE_SEMAPHORE 0x00000014
#define OBJECT_TYPE_DEVICE 0x00000015
#define OBJECT_TYPE_DRCB 0x00000016
#define OBJECT_TYPE_MAILBOX 0x00000017
#define OBJECT_TYPE_PAGE_INDEX_MANAGER 0x00000018
#define OBJECT_TYPE_VIRTUAL_MEMORY_MANAGER 0x00000019
#define OBJECT_TYPE_COMMON_QUEUE 0x0000001A
// Please define your object type here,and increment the type value.
//The maximal object type value should not exceed 63.
#endif //End of commobj.h
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -