crashanalysercmd/Libraries/Engine/CrashDebuggerLib/Structures/KernelObjects/DObject.cs
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/crashanalysercmd/Libraries/Engine/CrashDebuggerLib/Structures/KernelObjects/DObject.cs Thu Feb 11 15:50:58 2010 +0200
@@ -0,0 +1,287 @@
+/*
+* Copyright (c) 2004-2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace CrashDebuggerLib.Structures.KernelObjects
+{
+ public class DObject : DBase
+ {
+ #region Enumerations
+ public enum TObjectType
+ {
+ EThread=0,
+ EProcess,
+ EChunk,
+ ELibrary,
+ ESemaphore,
+ EMutex,
+ ETimer,
+ EServer,
+ ESession,
+ ELogicalDevice,
+ EPhysicalDevice,
+ ELogicalChannel,
+ EChangeNotifier,
+ EUndertaker,
+ EMsgQueue,
+ EPropertyRef,
+ ECondVar,
+ ENumObjectTypes, // number of DObject-derived types
+ EObjectTypeAny=-1
+ }
+ #endregion
+
+ #region Constructors
+ public DObject( CrashDebuggerInfo aCrashDebugger, TObjectType aType )
+ : base( aCrashDebugger )
+ {
+ iType = aType;
+ }
+ #endregion
+
+ #region API
+ public static string AsClassName( TObjectType aType )
+ {
+ string ret = "Unknown";
+ //
+ switch ( aType )
+ {
+ case DObject.TObjectType.EThread:
+ ret = "DThread";
+ break;
+ case DObject.TObjectType.EProcess:
+ ret = "DProcess";
+ break;
+ case DObject.TObjectType.EChunk:
+ ret = "DChunk";
+ break;
+ case DObject.TObjectType.ELibrary:
+ ret = "DLibrary";
+ break;
+ case DObject.TObjectType.ESemaphore:
+ ret = "DSemaphore";
+ break;
+ case DObject.TObjectType.EMutex:
+ ret = "DMutex";
+ break;
+ case DObject.TObjectType.ETimer:
+ ret = "DTimer";
+ break;
+ case DObject.TObjectType.EServer:
+ ret = "DServer";
+ break;
+ case DObject.TObjectType.ESession:
+ ret = "DSession";
+ break;
+ case DObject.TObjectType.ELogicalDevice:
+ ret = "DLogicalDevice";
+ break;
+ case DObject.TObjectType.EPhysicalDevice:
+ ret = "DPhysicalDevice";
+ break;
+ case DObject.TObjectType.ELogicalChannel:
+ ret = "DLogicalChannel";
+ break;
+ case DObject.TObjectType.EChangeNotifier:
+ ret = "DChangeNotifier";
+ break;
+ case DObject.TObjectType.EUndertaker:
+ ret = "DUndertaker";
+ break;
+ case DObject.TObjectType.EMsgQueue:
+ ret = "DMsgQueue";
+ break;
+ case DObject.TObjectType.EPropertyRef:
+ ret = "DPropertyRef";
+ break;
+ case DObject.TObjectType.ECondVar:
+ ret = "DCondVar";
+ break;
+ default:
+ break;
+ }
+
+ return ret;
+ }
+
+ public static string AsTypeDescription( TObjectType aType )
+ {
+ string ret = "Unknown";
+ //
+ switch ( aType )
+ {
+ case DObject.TObjectType.EThread:
+ ret = "Thread";
+ break;
+ case DObject.TObjectType.EProcess:
+ ret = "Process";
+ break;
+ case DObject.TObjectType.EChunk:
+ ret = "Chunk";
+ break;
+ case DObject.TObjectType.ELibrary:
+ ret = "Library";
+ break;
+ case DObject.TObjectType.ESemaphore:
+ ret = "Semaphore";
+ break;
+ case DObject.TObjectType.EMutex:
+ ret = "Mutex";
+ break;
+ case DObject.TObjectType.ETimer:
+ ret = "Timer";
+ break;
+ case DObject.TObjectType.EServer:
+ ret = "Server";
+ break;
+ case DObject.TObjectType.ESession:
+ ret = "Session";
+ break;
+ case DObject.TObjectType.ELogicalDevice:
+ ret = "Logical Device";
+ break;
+ case DObject.TObjectType.EPhysicalDevice:
+ ret = "Physical Device";
+ break;
+ case DObject.TObjectType.ELogicalChannel:
+ ret = "Logical Channel";
+ break;
+ case DObject.TObjectType.EChangeNotifier:
+ ret = "Change Notifier";
+ break;
+ case DObject.TObjectType.EUndertaker:
+ ret = "Undertaker";
+ break;
+ case DObject.TObjectType.EMsgQueue:
+ ret = "Message Queue";
+ break;
+ case DObject.TObjectType.EPropertyRef:
+ ret = "Property Ref";
+ break;
+ case DObject.TObjectType.ECondVar:
+ ret = "Condition Variable";
+ break;
+ default:
+ break;
+ }
+
+ return ret;
+ }
+ #endregion
+
+ #region Properties
+ public TObjectType Type
+ {
+ get { return iType; }
+ }
+
+ public uint VTable
+ {
+ get { return iVTable; }
+ set { iVTable = value; }
+ }
+
+ public int AccessCount
+ {
+ get { return iAccessCount; }
+ set { iAccessCount = value; }
+ }
+
+ public uint OwnerAddress
+ {
+ get { return iOwnerAddress; }
+ set { iOwnerAddress = value; }
+ }
+
+ public DObject Owner
+ {
+ get
+ {
+ DObject ret = CrashDebugger.ObjectByAddress( OwnerAddress );
+ return ret;
+ }
+ }
+
+ public string Name
+ {
+ get { return iName; }
+ set { iName = value; }
+ }
+
+ public string ClassName
+ {
+ get
+ {
+ string ret = AsClassName( iType );
+ return ret;
+ }
+ }
+
+ public string TypeDescription
+ {
+ get
+ {
+ string ret = AsTypeDescription( iType );
+ return ret;
+ }
+ }
+
+ public bool Tagged
+ {
+ get { return iTagged; }
+ set { iTagged = value; }
+ }
+ #endregion
+
+ #region Internal methods
+ #endregion
+
+ #region Internal constants
+ #endregion
+
+ #region From DBase
+ public override string ToClipboard()
+ {
+ StringBuilder ret = new StringBuilder();
+ //
+ ret.Append( TypeDescription.ToUpper() + " [" + Name + "] " + base.ToClipboard() );
+ ret.AppendFormat( " VTable: 0x{0:x8} Owner: 0x{1:x8}, AccessCount: {2}", VTable, OwnerAddress, AccessCount );
+ //
+ return ret.ToString();
+ }
+ #endregion
+
+ #region From System.Object
+ public override string ToString()
+ {
+ return Name;
+ }
+ #endregion
+
+ #region Data members
+ private readonly TObjectType iType;
+ private uint iVTable = 0;
+ private int iAccessCount = 0;
+ private uint iOwnerAddress = 0;
+ private string iName = string.Empty;
+ private bool iTagged = true;
+ #endregion
+ }
+}