perfapps/memspyui/ui/avkon/src/MemSpyViewKernelObjects.cpp
author hgs
Mon, 04 Oct 2010 10:09:02 +0300
changeset 53 819e59dfc032
parent 51 b048e15729d6
permissions -rw-r--r--
201039
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
51
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
#include "MemSpyViewKernelObjects.h"
hgs
parents:
diff changeset
    19
hgs
parents:
diff changeset
    20
// System includes
hgs
parents:
diff changeset
    21
#include <eikspane.h>
hgs
parents:
diff changeset
    22
#include <aknnavide.h> 
hgs
parents:
diff changeset
    23
#include <akntabgrp.h>
hgs
parents:
diff changeset
    24
#include <eikclbd.h>
hgs
parents:
diff changeset
    25
#include <AknQueryDialog.h>
hgs
parents:
diff changeset
    26
#include <aknnotewrappers.h>
hgs
parents:
diff changeset
    27
#include <apgwgnam.h>
hgs
parents:
diff changeset
    28
#include <aknmessagequerydialog.h>
53
hgs
parents: 51
diff changeset
    29
#include <aknwaitdialog.h>
51
hgs
parents:
diff changeset
    30
hgs
parents:
diff changeset
    31
// Engine includes
hgs
parents:
diff changeset
    32
#include <memspy/engine/memspyengine.h>
hgs
parents:
diff changeset
    33
#include <memspy/engine/memspyengineobjectprocess.h>
hgs
parents:
diff changeset
    34
#include <memspy/engine/memspyengineobjectthread.h>
hgs
parents:
diff changeset
    35
#include <memspy/engine/memspyengineobjectcontainer.h>
hgs
parents:
diff changeset
    36
#include <memspy/engine/memspyengineobjectthreadinfoobjects.h>
hgs
parents:
diff changeset
    37
#include <memspy/engine/memspyengineobjectthreadinfocontainer.h>
hgs
parents:
diff changeset
    38
#include <memspy/engine/memspyenginehelperkernelcontainers.h>
hgs
parents:
diff changeset
    39
#include <memspy/engine/memspyenginehelperserver.h>
hgs
parents:
diff changeset
    40
#include <memspy/engine/memspyenginehelpercondvar.h>
hgs
parents:
diff changeset
    41
hgs
parents:
diff changeset
    42
#include <memspysession.h>
hgs
parents:
diff changeset
    43
hgs
parents:
diff changeset
    44
// User includes
hgs
parents:
diff changeset
    45
#include "MemSpyUiUtils.h"
hgs
parents:
diff changeset
    46
#include "MemSpyViewKernel.h"
hgs
parents:
diff changeset
    47
#include "MemSpyContainerObserver.h"
hgs
parents:
diff changeset
    48
#include "MemSpyViewKernelContainers.h"
hgs
parents:
diff changeset
    49
hgs
parents:
diff changeset
    50
const TInt KMaxInfoLength = 128;
hgs
parents:
diff changeset
    51
hgs
parents:
diff changeset
    52
/*
hgs
parents:
diff changeset
    53
CMemSpyViewKernelObjects::CMemSpyViewKernelObjects( CMemSpyEngine& aEngine, MMemSpyViewObserver& aObserver, TMemSpyDriverContainerType aObjectType )
hgs
parents:
diff changeset
    54
:   CMemSpyViewBase( aEngine, aObserver ),
hgs
parents:
diff changeset
    55
    iObjectType( aObjectType ),
hgs
parents:
diff changeset
    56
    iCurrItemIndex( KErrNotFound )
hgs
parents:
diff changeset
    57
    {
hgs
parents:
diff changeset
    58
    }
hgs
parents:
diff changeset
    59
*/
hgs
parents:
diff changeset
    60
CMemSpyViewKernelObjects::CMemSpyViewKernelObjects( RMemSpySession& aSession, MMemSpyViewObserver& aObserver, TMemSpyDriverContainerType aObjectType )
hgs
parents:
diff changeset
    61
:   CMemSpyViewBase( aSession, aObserver ),
hgs
parents:
diff changeset
    62
    iObjectType( aObjectType ),
hgs
parents:
diff changeset
    63
    iCurrItemIndex( KErrNotFound )
hgs
parents:
diff changeset
    64
    {
hgs
parents:
diff changeset
    65
    }
hgs
parents:
diff changeset
    66
hgs
parents:
diff changeset
    67
hgs
parents:
diff changeset
    68
CMemSpyViewKernelObjects::~CMemSpyViewKernelObjects()
hgs
parents:
diff changeset
    69
    {
hgs
parents:
diff changeset
    70
    if ( iNavContainer && iNavDecorator )
hgs
parents:
diff changeset
    71
        {
hgs
parents:
diff changeset
    72
        iNavContainer->Pop( iNavDecorator );
hgs
parents:
diff changeset
    73
        delete iNavDecorator;
hgs
parents:
diff changeset
    74
        }
hgs
parents:
diff changeset
    75
    delete iItems;
hgs
parents:
diff changeset
    76
    delete iObjectList;
53
hgs
parents: 51
diff changeset
    77
    
hgs
parents: 51
diff changeset
    78
    if( iWaitDialog )
hgs
parents: 51
diff changeset
    79
    	delete iWaitDialog;
hgs
parents: 51
diff changeset
    80
    
hgs
parents: 51
diff changeset
    81
    for (TInt i=0; i<iKernelObjectItems.Count(); i++)
hgs
parents: 51
diff changeset
    82
        {
hgs
parents: 51
diff changeset
    83
        delete iKernelObjectItems[i];
hgs
parents: 51
diff changeset
    84
    }
hgs
parents: 51
diff changeset
    85
hgs
parents: 51
diff changeset
    86
    iKernelObjectItems.Close();
51
hgs
parents:
diff changeset
    87
    }
hgs
parents:
diff changeset
    88
hgs
parents:
diff changeset
    89
hgs
parents:
diff changeset
    90
void CMemSpyViewKernelObjects::ConstructL( const TRect& aRect, CCoeControl& aContainer, TAny* aSelectionRune )
hgs
parents:
diff changeset
    91
    {
53
hgs
parents: 51
diff changeset
    92
	iWaitDialog = new (ELeave) CAknWaitDialog((REINTERPRET_CAST(CEikDialog**, &iWaitDialog)), ETrue);
hgs
parents: 51
diff changeset
    93
	iWaitDialog->PrepareLC( R_MEMSPY_WAIT_NOTE );	
hgs
parents: 51
diff changeset
    94
	iWaitDialog->RunLD();
hgs
parents: 51
diff changeset
    95
	
51
hgs
parents:
diff changeset
    96
    _LIT( KTitle, "Kernel Objects" );
hgs
parents:
diff changeset
    97
    SetTitleL( KTitle );
hgs
parents:
diff changeset
    98
    iItems = new(ELeave) CDesCArrayFlat(5);
hgs
parents:
diff changeset
    99
    //
hgs
parents:
diff changeset
   100
    CMemSpyViewBase::ConstructL( aRect, aContainer, aSelectionRune );
hgs
parents:
diff changeset
   101
    CreateTabsL();
53
hgs
parents: 51
diff changeset
   102
    
hgs
parents: 51
diff changeset
   103
    iWaitDialog->ProcessFinishedL(); 
51
hgs
parents:
diff changeset
   104
    }
hgs
parents:
diff changeset
   105
hgs
parents:
diff changeset
   106
hgs
parents:
diff changeset
   107
CEikListBox* CMemSpyViewKernelObjects::ConstructListBoxL()
hgs
parents:
diff changeset
   108
    {
hgs
parents:
diff changeset
   109
    delete iListBox;
hgs
parents:
diff changeset
   110
    iListBox = NULL;
hgs
parents:
diff changeset
   111
    CAknSingleStyleListBox* listbox = new (ELeave) CAknSingleStyleListBox();
hgs
parents:
diff changeset
   112
    iListBox = listbox;
hgs
parents:
diff changeset
   113
    listbox->ConstructL( this, EAknListBoxSelectionList | EAknListBoxLoopScrolling );
hgs
parents:
diff changeset
   114
    listbox->SetContainerWindowL( *this );
hgs
parents:
diff changeset
   115
    listbox->CreateScrollBarFrameL( ETrue );
hgs
parents:
diff changeset
   116
    SetListBoxModelL();
hgs
parents:
diff changeset
   117
    listbox->ScrollBarFrame()->SetScrollBarVisibilityL( CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto );
hgs
parents:
diff changeset
   118
    listbox->SetListBoxObserver( this );
hgs
parents:
diff changeset
   119
    listbox->ItemDrawer()->ColumnData()->EnableMarqueeL(ETrue);
hgs
parents:
diff changeset
   120
    listbox->SetObserver( this );
hgs
parents:
diff changeset
   121
    return listbox;
hgs
parents:
diff changeset
   122
    }
hgs
parents:
diff changeset
   123
hgs
parents:
diff changeset
   124
hgs
parents:
diff changeset
   125
void CMemSpyViewKernelObjects::RefreshL()
53
hgs
parents: 51
diff changeset
   126
    {	
51
hgs
parents:
diff changeset
   127
    SetListBoxModelL();
53
hgs
parents: 51
diff changeset
   128
    CMemSpyViewBase::RefreshL();               
51
hgs
parents:
diff changeset
   129
    }
hgs
parents:
diff changeset
   130
hgs
parents:
diff changeset
   131
hgs
parents:
diff changeset
   132
TMemSpyViewType CMemSpyViewKernelObjects::ViewType() const
hgs
parents:
diff changeset
   133
    {
hgs
parents:
diff changeset
   134
    return EMemSpyViewTypeKernelObjects;
hgs
parents:
diff changeset
   135
    }
hgs
parents:
diff changeset
   136
hgs
parents:
diff changeset
   137
hgs
parents:
diff changeset
   138
CMemSpyViewBase* CMemSpyViewKernelObjects::PrepareParentViewL()
hgs
parents:
diff changeset
   139
    {	
hgs
parents:
diff changeset
   140
	if ( iNaviPane && iNavDecorator )
hgs
parents:
diff changeset
   141
	   {
hgs
parents:
diff changeset
   142
		iNaviPane->Pop( iNavDecorator );
hgs
parents:
diff changeset
   143
		delete iNavDecorator;
hgs
parents:
diff changeset
   144
		iNavDecorator = NULL;
hgs
parents:
diff changeset
   145
	   }	
hgs
parents:
diff changeset
   146
    //CMemSpyViewBase* parent = new(ELeave) CMemSpyViewKernelContainers( iEngine, iObserver );
hgs
parents:
diff changeset
   147
    CMemSpyViewBase* parent = new(ELeave) CMemSpyViewKernelContainers( iMemSpySession, iObserver );
hgs
parents:
diff changeset
   148
    CleanupStack::PushL( parent );
hgs
parents:
diff changeset
   149
    parent->ConstructL( Rect(), *Parent(), (TAny*) ViewType() );
hgs
parents:
diff changeset
   150
    CleanupStack::Pop( parent );
hgs
parents:
diff changeset
   151
    return parent;
hgs
parents:
diff changeset
   152
    }
hgs
parents:
diff changeset
   153
hgs
parents:
diff changeset
   154
hgs
parents:
diff changeset
   155
CMemSpyViewBase* CMemSpyViewKernelObjects::PrepareChildViewL()
hgs
parents:
diff changeset
   156
    {
hgs
parents:
diff changeset
   157
    CMemSpyViewBase* child = NULL;
hgs
parents:
diff changeset
   158
    if ( iListBox && 
hgs
parents:
diff changeset
   159
         iListBox->Model()->NumberOfItems() && 
hgs
parents:
diff changeset
   160
         iListBox->CurrentItemIndex() > KErrNotFound )
hgs
parents:
diff changeset
   161
        {
hgs
parents:
diff changeset
   162
        DetailsL();
hgs
parents:
diff changeset
   163
        }
hgs
parents:
diff changeset
   164
    return child;
hgs
parents:
diff changeset
   165
    }
hgs
parents:
diff changeset
   166
hgs
parents:
diff changeset
   167
hgs
parents:
diff changeset
   168
void CMemSpyViewKernelObjects::DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane )
hgs
parents:
diff changeset
   169
    {
hgs
parents:
diff changeset
   170
    if  ( aResourceId == R_MEMSPY_MENUPANE )
hgs
parents:
diff changeset
   171
       {
hgs
parents:
diff changeset
   172
       if ( iObjectType > EMemSpyDriverContainerTypeProcess )
hgs
parents:
diff changeset
   173
           {
hgs
parents:
diff changeset
   174
           // Display Terminate, Switch to, End and Panic
hgs
parents:
diff changeset
   175
           // commands only for Threads and processes
hgs
parents:
diff changeset
   176
           aMenuPane->SetItemDimmed( EMemSpyCmdKernelObjects, ETrue );
hgs
parents:
diff changeset
   177
           }
hgs
parents:
diff changeset
   178
        }
hgs
parents:
diff changeset
   179
    }
hgs
parents:
diff changeset
   180
hgs
parents:
diff changeset
   181
hgs
parents:
diff changeset
   182
void CMemSpyViewKernelObjects::SetListBoxModelL()
hgs
parents:
diff changeset
   183
    {
hgs
parents:
diff changeset
   184
    //_LIT( KLineFormatSpec, "\t%S" );
hgs
parents:
diff changeset
   185
    _LIT( KTab, "\t" );
hgs
parents:
diff changeset
   186
       
53
hgs
parents: 51
diff changeset
   187
    for (TInt i=0; i<iKernelObjectItems.Count(); i++)
hgs
parents: 51
diff changeset
   188
        {
hgs
parents: 51
diff changeset
   189
        delete iKernelObjectItems[i];
hgs
parents: 51
diff changeset
   190
        }
51
hgs
parents:
diff changeset
   191
    iMemSpySession.GetKernelObjectItems( iKernelObjectItems, iObjectType );    
hgs
parents:
diff changeset
   192
    
53
hgs
parents: 51
diff changeset
   193
    CDesC16ArrayFlat* model = new (ELeave) CDesC16ArrayFlat( iKernelObjectItems.Count() + 1 ); //array for formated items, +1 added there for 0 case - creating 0-sized array panics
hgs
parents: 51
diff changeset
   194
    CleanupStack::PushL( model );
51
hgs
parents:
diff changeset
   195
        
hgs
parents:
diff changeset
   196
    for ( TInt i = 0; i < iKernelObjectItems.Count(); i++ )
hgs
parents:
diff changeset
   197
        {
hgs
parents:
diff changeset
   198
        HBufC* tempName = HBufC::NewL( iKernelObjectItems[i]->Name().Length() + 16 );
hgs
parents:
diff changeset
   199
        CleanupStack::PushL( tempName );
hgs
parents:
diff changeset
   200
        TPtr tempNamePtr( tempName->Des() );
hgs
parents:
diff changeset
   201
        tempNamePtr.Copy( KTab );
hgs
parents:
diff changeset
   202
    	
hgs
parents:
diff changeset
   203
        TBuf<KMaxName> temp;
hgs
parents:
diff changeset
   204
        temp.Copy(iKernelObjectItems[i]->Name());    	
hgs
parents:
diff changeset
   205
        tempNamePtr.Append( temp	 );
53
hgs
parents: 51
diff changeset
   206
        model->AppendL( tempNamePtr );
51
hgs
parents:
diff changeset
   207
            
hgs
parents:
diff changeset
   208
        CleanupStack::PopAndDestroy( tempName ); 
hgs
parents:
diff changeset
   209
        }
hgs
parents:
diff changeset
   210
    
hgs
parents:
diff changeset
   211
    CAknSettingStyleListBox* listbox = static_cast< CAknSettingStyleListBox* >( iListBox );
53
hgs
parents: 51
diff changeset
   212
    listbox->Model()->SetItemTextArray( model );
hgs
parents: 51
diff changeset
   213
    listbox->Model()->SetOwnershipType( ELbmOwnsItemArray );
hgs
parents: 51
diff changeset
   214
    
hgs
parents: 51
diff changeset
   215
    CleanupStack::Pop( model );
51
hgs
parents:
diff changeset
   216
    }
hgs
parents:
diff changeset
   217
hgs
parents:
diff changeset
   218
hgs
parents:
diff changeset
   219
TBool CMemSpyViewKernelObjects::HandleCommandL( TInt aCommand )
hgs
parents:
diff changeset
   220
    {
hgs
parents:
diff changeset
   221
    TBool handled = ETrue;
hgs
parents:
diff changeset
   222
    //
hgs
parents:
diff changeset
   223
    switch ( aCommand )
hgs
parents:
diff changeset
   224
        {
hgs
parents:
diff changeset
   225
        case EMemSpyCmdKernelObjectTerminate:
hgs
parents:
diff changeset
   226
            {
hgs
parents:
diff changeset
   227
            TRAPD( err, OnCmdTerminateL() );
hgs
parents:
diff changeset
   228
            if ( err )
hgs
parents:
diff changeset
   229
                {
hgs
parents:
diff changeset
   230
                CAknConfirmationNote* note = new(ELeave) CAknConfirmationNote( ETrue );
hgs
parents:
diff changeset
   231
                note->ExecuteLD( _L("Cannot terminate task") );
hgs
parents:
diff changeset
   232
                }
hgs
parents:
diff changeset
   233
            break;
hgs
parents:
diff changeset
   234
            }
hgs
parents:
diff changeset
   235
        case EMemSpyCmdKernelObjectSwitchTo:
hgs
parents:
diff changeset
   236
            {
hgs
parents:
diff changeset
   237
            TRAPD( err, OnCmdSwitchToL() );
hgs
parents:
diff changeset
   238
            if ( err )
hgs
parents:
diff changeset
   239
                {
hgs
parents:
diff changeset
   240
                CAknConfirmationNote* note = new(ELeave) CAknConfirmationNote( ETrue );
hgs
parents:
diff changeset
   241
                note->ExecuteLD( _L("Cannot bring to foreground") );
hgs
parents:
diff changeset
   242
                }
hgs
parents:
diff changeset
   243
            break;
hgs
parents:
diff changeset
   244
            }
hgs
parents:
diff changeset
   245
        case EMemSpyCmdKernelObjectEnd:
hgs
parents:
diff changeset
   246
            {
hgs
parents:
diff changeset
   247
            TRAPD( err, OnCmdEndL() );
hgs
parents:
diff changeset
   248
            if ( err )
hgs
parents:
diff changeset
   249
                {
hgs
parents:
diff changeset
   250
                CAknConfirmationNote* note = new(ELeave) CAknConfirmationNote( ETrue );
hgs
parents:
diff changeset
   251
                note->ExecuteLD( _L("Cannot end task") );
hgs
parents:
diff changeset
   252
                }
hgs
parents:
diff changeset
   253
            break;
hgs
parents:
diff changeset
   254
            }
hgs
parents:
diff changeset
   255
        case EMemSpyCmdKernelObjectPanic:
hgs
parents:
diff changeset
   256
            {
hgs
parents:
diff changeset
   257
            TRAPD( err, OnCmdPanicL() );
hgs
parents:
diff changeset
   258
            if ( err )
hgs
parents:
diff changeset
   259
                {
hgs
parents:
diff changeset
   260
                CAknConfirmationNote* note = new(ELeave) CAknConfirmationNote( ETrue );
hgs
parents:
diff changeset
   261
                note->ExecuteLD( _L("Cannot panic task") );
hgs
parents:
diff changeset
   262
                }
hgs
parents:
diff changeset
   263
            break;
hgs
parents:
diff changeset
   264
            }
hgs
parents:
diff changeset
   265
        default:
hgs
parents:
diff changeset
   266
            {
hgs
parents:
diff changeset
   267
            handled = CMemSpyViewBase::HandleCommandL( aCommand );
hgs
parents:
diff changeset
   268
            break;        
hgs
parents:
diff changeset
   269
            }
hgs
parents:
diff changeset
   270
        }
hgs
parents:
diff changeset
   271
    //
hgs
parents:
diff changeset
   272
    return handled;
hgs
parents:
diff changeset
   273
    }
hgs
parents:
diff changeset
   274
hgs
parents:
diff changeset
   275
hgs
parents:
diff changeset
   276
TKeyResponse CMemSpyViewKernelObjects::OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType )
hgs
parents:
diff changeset
   277
    {	
hgs
parents:
diff changeset
   278
    TKeyResponse resp = EKeyWasNotConsumed;
hgs
parents:
diff changeset
   279
    resp = CMemSpyViewBase::OfferKeyEventL( aKeyEvent, aType );    
hgs
parents:
diff changeset
   280
    //}
hgs
parents:
diff changeset
   281
    return resp;
hgs
parents:
diff changeset
   282
    }
hgs
parents:
diff changeset
   283
hgs
parents:
diff changeset
   284
void CMemSpyViewKernelObjects::TabChangedL( TInt /*aIndex*/ )
hgs
parents:
diff changeset
   285
    {
hgs
parents:
diff changeset
   286
    }
hgs
parents:
diff changeset
   287
hgs
parents:
diff changeset
   288
hgs
parents:
diff changeset
   289
void CMemSpyViewKernelObjects::OnCmdTerminateL()
hgs
parents:
diff changeset
   290
    {
hgs
parents:
diff changeset
   291
    switch ( iObjectType )
hgs
parents:
diff changeset
   292
        {
hgs
parents:
diff changeset
   293
        case EMemSpyDriverContainerTypeThread:
hgs
parents:
diff changeset
   294
            {
hgs
parents:
diff changeset
   295
            TBool err = EFalse;
hgs
parents:
diff changeset
   296
            TBool doTerminate = ETrue;
hgs
parents:
diff changeset
   297
            
hgs
parents:
diff changeset
   298
            TThreadId id( iKernelObjectItems[ iListBox->CurrentItemIndex() ]->Id() ); //get id of the current thread
hgs
parents:
diff changeset
   299
                        
hgs
parents:
diff changeset
   300
            iMemSpySession.ThreadSystemPermanentOrCritical( id, err );
hgs
parents:
diff changeset
   301
            
hgs
parents:
diff changeset
   302
            if( err )
hgs
parents:
diff changeset
   303
            	{
hgs
parents:
diff changeset
   304
				CAknQueryDialog* importDialog = CAknQueryDialog::NewL();
hgs
parents:
diff changeset
   305
				doTerminate = ( importDialog->ExecuteLD( R_MEMSPY_PANIC_SYSTEM_CRITICAL_THREAD_OR_PROCESS ) );
hgs
parents:
diff changeset
   306
				
hgs
parents:
diff changeset
   307
				if ( doTerminate )
hgs
parents:
diff changeset
   308
					{
hgs
parents:
diff changeset
   309
					iMemSpySession.EndThreadL( id, ETerminate );
hgs
parents:
diff changeset
   310
					RefreshL();
hgs
parents:
diff changeset
   311
					}
hgs
parents:
diff changeset
   312
            	}                                  
hgs
parents:
diff changeset
   313
            break;
hgs
parents:
diff changeset
   314
            }        
hgs
parents:
diff changeset
   315
        case EMemSpyDriverContainerTypeProcess:
hgs
parents:
diff changeset
   316
            {
hgs
parents:
diff changeset
   317
            TBool err = EFalse;
hgs
parents:
diff changeset
   318
            TBool doTerminate = ETrue;
hgs
parents:
diff changeset
   319
            TProcessId id( iKernelObjectItems[ iListBox->CurrentItemIndex() ]->Id() );
hgs
parents:
diff changeset
   320
            iMemSpySession.ProcessSystemPermanentOrCritical( id, err );
hgs
parents:
diff changeset
   321
            
hgs
parents:
diff changeset
   322
            if( err )
hgs
parents:
diff changeset
   323
            	{
hgs
parents:
diff changeset
   324
				CAknQueryDialog* importDialog = CAknQueryDialog::NewL();	
hgs
parents:
diff changeset
   325
                doTerminate = ( importDialog->ExecuteLD( R_MEMSPY_PANIC_SYSTEM_CRITICAL_THREAD_OR_PROCESS ) );
hgs
parents:
diff changeset
   326
                
hgs
parents:
diff changeset
   327
                if( doTerminate )
hgs
parents:
diff changeset
   328
                	{
hgs
parents:
diff changeset
   329
                    iMemSpySession.EndProcessL( id, ETerminate );     
hgs
parents:
diff changeset
   330
                    RefreshL();
hgs
parents:
diff changeset
   331
                    }
hgs
parents:
diff changeset
   332
            	}                     
hgs
parents:
diff changeset
   333
            break;
hgs
parents:
diff changeset
   334
            }
hgs
parents:
diff changeset
   335
        default:
hgs
parents:
diff changeset
   336
            {
hgs
parents:
diff changeset
   337
            // Programming error
hgs
parents:
diff changeset
   338
            __ASSERT_ALWAYS( EFalse, User::Panic( _L("MemSpy-View"), 0 ) );
hgs
parents:
diff changeset
   339
            }
hgs
parents:
diff changeset
   340
        }
hgs
parents:
diff changeset
   341
    }
hgs
parents:
diff changeset
   342
hgs
parents:
diff changeset
   343
hgs
parents:
diff changeset
   344
void CMemSpyViewKernelObjects::OnCmdSwitchToL()
hgs
parents:
diff changeset
   345
    {	
hgs
parents:
diff changeset
   346
	TBool brought = EFalse;
hgs
parents:
diff changeset
   347
	/*
hgs
parents:
diff changeset
   348
    TInt wgCount;
hgs
parents:
diff changeset
   349
    RWsSession wsSession;
hgs
parents:
diff changeset
   350
    User::LeaveIfError( wsSession.Connect() );
hgs
parents:
diff changeset
   351
    CleanupClosePushL( wsSession );
hgs
parents:
diff changeset
   352
    User::LeaveIfError( wgCount = wsSession.NumWindowGroups() );
hgs
parents:
diff changeset
   353
    RArray<RWsSession::TWindowGroupChainInfo> wgArray;
hgs
parents:
diff changeset
   354
    CleanupClosePushL( wgArray );
hgs
parents:
diff changeset
   355
    User::LeaveIfError( wsSession.WindowGroupList( &wgArray ) );
hgs
parents:
diff changeset
   356
    TApaTask task( wsSession );
hgs
parents:
diff changeset
   357
    TBool brought( EFalse );
hgs
parents:
diff changeset
   358
    TInt wgId( KErrNotFound );
hgs
parents:
diff changeset
   359
    TThreadId threadId;
hgs
parents:
diff changeset
   360
    */
hgs
parents:
diff changeset
   361
    switch ( iObjectType )
hgs
parents:
diff changeset
   362
        {    	    	    	
hgs
parents:
diff changeset
   363
        case EMemSpyDriverContainerTypeThread:
hgs
parents:
diff changeset
   364
            {
hgs
parents:
diff changeset
   365
            TThreadId currentThreadId( iKernelObjectItems[ iListBox->CurrentItemIndex() ]->Id() );
hgs
parents:
diff changeset
   366
            TInt error = iMemSpySession.SwitchToThread( currentThreadId, brought );
hgs
parents:
diff changeset
   367
            /*
hgs
parents:
diff changeset
   368
            TThreadId currentThreadId( iObjectList->At( iListBox->CurrentItemIndex() ).iId );            
hgs
parents:
diff changeset
   369
            
hgs
parents:
diff changeset
   370
            // loop trough all window groups and see if a thread id matches
hgs
parents:
diff changeset
   371
            while( !brought && wgCount-- )
hgs
parents:
diff changeset
   372
                {
hgs
parents:
diff changeset
   373
                wgId = wgArray[wgCount].iId;
hgs
parents:
diff changeset
   374
                User::LeaveIfError( wsSession.GetWindowGroupClientThreadId( wgId, threadId ) );
hgs
parents:
diff changeset
   375
                if ( threadId == currentThreadId )
hgs
parents:
diff changeset
   376
                    {
hgs
parents:
diff changeset
   377
                    CApaWindowGroupName* wgName = CApaWindowGroupName::NewLC( wsSession, wgId );
hgs
parents:
diff changeset
   378
                    task.SetWgId( wgId );
hgs
parents:
diff changeset
   379
                    if ( !wgName->Hidden() && task.Exists() )
hgs
parents:
diff changeset
   380
                        {
hgs
parents:
diff changeset
   381
                        task.BringToForeground();
hgs
parents:
diff changeset
   382
                        brought = ETrue;                        
hgs
parents:
diff changeset
   383
                        }
hgs
parents:
diff changeset
   384
                    CleanupStack::PopAndDestroy( wgName );
hgs
parents:
diff changeset
   385
                    }
hgs
parents:
diff changeset
   386
                }
hgs
parents:
diff changeset
   387
                */                
hgs
parents:
diff changeset
   388
            break;
hgs
parents:
diff changeset
   389
            }
hgs
parents:
diff changeset
   390
        case EMemSpyDriverContainerTypeProcess:
hgs
parents:
diff changeset
   391
            {                        
hgs
parents:
diff changeset
   392
            TProcessId id( iKernelObjectItems[ iListBox->CurrentItemIndex() ]->Id() );
hgs
parents:
diff changeset
   393
            TInt error = iMemSpySession.SwitchToProcess( id, brought  );
hgs
parents:
diff changeset
   394
            /*
hgs
parents:
diff changeset
   395
            //CMemSpyEngineObjectContainer& container = iEngine.Container();
hgs
parents:
diff changeset
   396
            //TProcessId id( iObjectList->At( iListBox->CurrentItemIndex() ).iId );
hgs
parents:
diff changeset
   397
            //CMemSpyProcess& process = container.ProcessByIdL( id );
hgs
parents:
diff changeset
   398
            
hgs
parents:
diff changeset
   399
            TProcessId id( iKernelObjectItems[iListBox->CurrentItemIndex()]->Id() );
hgs
parents:
diff changeset
   400
            
hgs
parents:
diff changeset
   401
            
hgs
parents:
diff changeset
   402
            // loop trough threads in a process
hgs
parents:
diff changeset
   403
            for ( TInt i = 0; i < process.MdcaCount(); i++ )
hgs
parents:
diff changeset
   404
                {
hgs
parents:
diff changeset
   405
                TInt wgCountLocal = wgCount;
hgs
parents:
diff changeset
   406
                
hgs
parents:
diff changeset
   407
                // loop trough all window groups and see if a thread id matches
hgs
parents:
diff changeset
   408
                while( !brought && wgCountLocal-- )
hgs
parents:
diff changeset
   409
                    {
hgs
parents:
diff changeset
   410
                    wgId = wgArray[wgCountLocal].iId;
hgs
parents:
diff changeset
   411
                    User::LeaveIfError( wsSession.GetWindowGroupClientThreadId( wgId, threadId ) );
hgs
parents:
diff changeset
   412
                    if ( threadId == process.At( i ).Id() )
hgs
parents:
diff changeset
   413
                        {
hgs
parents:
diff changeset
   414
                        CApaWindowGroupName* wgName = CApaWindowGroupName::NewLC( wsSession, wgId );
hgs
parents:
diff changeset
   415
                        task.SetWgId( wgId );
hgs
parents:
diff changeset
   416
                        if ( !wgName->Hidden() && task.Exists() )
hgs
parents:
diff changeset
   417
                            {
hgs
parents:
diff changeset
   418
                            task.BringToForeground();
hgs
parents:
diff changeset
   419
                            brought = ETrue;                        
hgs
parents:
diff changeset
   420
                            }
hgs
parents:
diff changeset
   421
                        CleanupStack::PopAndDestroy( wgName );
hgs
parents:
diff changeset
   422
                        }
hgs
parents:
diff changeset
   423
                    }
hgs
parents:
diff changeset
   424
                }
hgs
parents:
diff changeset
   425
			*/
hgs
parents:
diff changeset
   426
            break;
hgs
parents:
diff changeset
   427
            }
hgs
parents:
diff changeset
   428
        default:
hgs
parents:
diff changeset
   429
            {
hgs
parents:
diff changeset
   430
            // Programming error
hgs
parents:
diff changeset
   431
            __ASSERT_ALWAYS( EFalse, User::Panic( _L("MemSpy-View"), 0 ) );
hgs
parents:
diff changeset
   432
            }
hgs
parents:
diff changeset
   433
        }
hgs
parents:
diff changeset
   434
    if ( !brought )
hgs
parents:
diff changeset
   435
        {
hgs
parents:
diff changeset
   436
        // Error handling in HandleCommandL
hgs
parents:
diff changeset
   437
        User::Leave( KErrGeneral );
hgs
parents:
diff changeset
   438
        }
hgs
parents:
diff changeset
   439
    CleanupStack::PopAndDestroy( 2 ); //wgArray,wsSession    
hgs
parents:
diff changeset
   440
    }
hgs
parents:
diff changeset
   441
hgs
parents:
diff changeset
   442
hgs
parents:
diff changeset
   443
void CMemSpyViewKernelObjects::OnCmdEndL()
hgs
parents:
diff changeset
   444
    {
hgs
parents:
diff changeset
   445
    switch ( iObjectType )
hgs
parents:
diff changeset
   446
        {
hgs
parents:
diff changeset
   447
        case EMemSpyDriverContainerTypeThread:
hgs
parents:
diff changeset
   448
            {
hgs
parents:
diff changeset
   449
            TBool err = EFalse;
hgs
parents:
diff changeset
   450
            TBool doTerminate = ETrue;
hgs
parents:
diff changeset
   451
            
hgs
parents:
diff changeset
   452
            TThreadId id( iKernelObjectItems[ iListBox->CurrentItemIndex() ]->Id() ); //get id of the current thread                                   
hgs
parents:
diff changeset
   453
            iMemSpySession.ThreadSystemPermanentOrCritical( id, err );
hgs
parents:
diff changeset
   454
            
hgs
parents:
diff changeset
   455
            if( err )
hgs
parents:
diff changeset
   456
            	{
hgs
parents:
diff changeset
   457
				CAknQueryDialog* importDialog = CAknQueryDialog::NewL();
hgs
parents:
diff changeset
   458
				doTerminate = ( importDialog->ExecuteLD( R_MEMSPY_PANIC_SYSTEM_CRITICAL_THREAD_OR_PROCESS ) );
hgs
parents:
diff changeset
   459
                        				
hgs
parents:
diff changeset
   460
				if ( doTerminate )
hgs
parents:
diff changeset
   461
					{
hgs
parents:
diff changeset
   462
					iMemSpySession.EndThreadL( id, EKill );
hgs
parents:
diff changeset
   463
					RefreshL();
hgs
parents:
diff changeset
   464
					}
hgs
parents:
diff changeset
   465
            	}            
hgs
parents:
diff changeset
   466
hgs
parents:
diff changeset
   467
            
hgs
parents:
diff changeset
   468
            /*
hgs
parents:
diff changeset
   469
            CMemSpyEngineObjectContainer& container = iEngine.Container();
hgs
parents:
diff changeset
   470
            TThreadId id( iObjectList->At( iListBox->CurrentItemIndex() ).iId );
hgs
parents:
diff changeset
   471
            
hgs
parents:
diff changeset
   472
            // Try to find the thread in question...
hgs
parents:
diff changeset
   473
            CMemSpyProcess* process = NULL;
hgs
parents:
diff changeset
   474
            CMemSpyThread* thread = NULL; 
hgs
parents:
diff changeset
   475
            User::LeaveIfError( container.ProcessAndThreadByThreadId( id, process, thread ) );
hgs
parents:
diff changeset
   476
hgs
parents:
diff changeset
   477
            if ( thread )
hgs
parents:
diff changeset
   478
                {                
hgs
parents:
diff changeset
   479
                //
hgs
parents:
diff changeset
   480
                if  ( thread->IsSystemPermanent() || thread->IsSystemCritical() )
hgs
parents:
diff changeset
   481
                    {
hgs
parents:
diff changeset
   482
                    CAknQueryDialog* importDialog = CAknQueryDialog::NewL();
hgs
parents:
diff changeset
   483
                    doTerminate = ( importDialog->ExecuteLD( R_MEMSPY_PANIC_SYSTEM_CRITICAL_THREAD_OR_PROCESS ) );
hgs
parents:
diff changeset
   484
                    }
hgs
parents:
diff changeset
   485
                //
hgs
parents:
diff changeset
   486
                if  ( doTerminate )
hgs
parents:
diff changeset
   487
                    {
hgs
parents:
diff changeset
   488
                    thread->KillL();
hgs
parents:
diff changeset
   489
                    }                
hgs
parents:
diff changeset
   490
                }
hgs
parents:
diff changeset
   491
            
hgs
parents:
diff changeset
   492
            RefreshL();
hgs
parents:
diff changeset
   493
            */
hgs
parents:
diff changeset
   494
            break;
hgs
parents:
diff changeset
   495
            }
hgs
parents:
diff changeset
   496
        case EMemSpyDriverContainerTypeProcess:
hgs
parents:
diff changeset
   497
            {
hgs
parents:
diff changeset
   498
            TBool err = EFalse;
hgs
parents:
diff changeset
   499
            TBool doTerminate = ETrue;
hgs
parents:
diff changeset
   500
            TProcessId id( iKernelObjectItems[ iListBox->CurrentItemIndex() ]->Id() );
hgs
parents:
diff changeset
   501
            iMemSpySession.ProcessSystemPermanentOrCritical( id, err );
hgs
parents:
diff changeset
   502
            
hgs
parents:
diff changeset
   503
            if( err )
hgs
parents:
diff changeset
   504
            	{
hgs
parents:
diff changeset
   505
				CAknQueryDialog* importDialog = CAknQueryDialog::NewL();	
hgs
parents:
diff changeset
   506
				doTerminate = ( importDialog->ExecuteLD( R_MEMSPY_PANIC_SYSTEM_CRITICAL_THREAD_OR_PROCESS ) );
hgs
parents:
diff changeset
   507
				
hgs
parents:
diff changeset
   508
				if( doTerminate )
hgs
parents:
diff changeset
   509
					{
hgs
parents:
diff changeset
   510
					iMemSpySession.EndProcessL( id, EKill);     
hgs
parents:
diff changeset
   511
					RefreshL();
hgs
parents:
diff changeset
   512
					}
hgs
parents:
diff changeset
   513
            	}
hgs
parents:
diff changeset
   514
            
hgs
parents:
diff changeset
   515
            /*
hgs
parents:
diff changeset
   516
            TBool doTerminate = ETrue;
hgs
parents:
diff changeset
   517
            // Obtain the process that corresponds to the selected item
hgs
parents:
diff changeset
   518
            CMemSpyEngineObjectContainer& container = iEngine.Container();
hgs
parents:
diff changeset
   519
            TProcessId id( iObjectList->At( iListBox->CurrentItemIndex() ).iId );
hgs
parents:
diff changeset
   520
            CMemSpyProcess& process = container.ProcessByIdL( id );            
hgs
parents:
diff changeset
   521
hgs
parents:
diff changeset
   522
            if  ( process.IsSystemPermanent() || process.IsSystemCritical() )
hgs
parents:
diff changeset
   523
                {
hgs
parents:
diff changeset
   524
                CAknQueryDialog* importDialog = CAknQueryDialog::NewL();
hgs
parents:
diff changeset
   525
                doTerminate = ( importDialog->ExecuteLD( R_MEMSPY_PANIC_SYSTEM_CRITICAL_THREAD_OR_PROCESS ) );
hgs
parents:
diff changeset
   526
                }
hgs
parents:
diff changeset
   527
            if  ( doTerminate )
hgs
parents:
diff changeset
   528
                {
hgs
parents:
diff changeset
   529
                process.KillL();
hgs
parents:
diff changeset
   530
                RefreshL();
hgs
parents:
diff changeset
   531
                }
hgs
parents:
diff changeset
   532
			*/
hgs
parents:
diff changeset
   533
            break;
hgs
parents:
diff changeset
   534
            }
hgs
parents:
diff changeset
   535
        default:
hgs
parents:
diff changeset
   536
            {
hgs
parents:
diff changeset
   537
            // Programming error
hgs
parents:
diff changeset
   538
            __ASSERT_ALWAYS( EFalse, User::Panic( _L("MemSpy-View"), 0 ) );
hgs
parents:
diff changeset
   539
            }
hgs
parents:
diff changeset
   540
        }    
hgs
parents:
diff changeset
   541
    }
hgs
parents:
diff changeset
   542
hgs
parents:
diff changeset
   543
hgs
parents:
diff changeset
   544
void CMemSpyViewKernelObjects::OnCmdPanicL()
hgs
parents:
diff changeset
   545
    {
hgs
parents:
diff changeset
   546
    switch ( iObjectType )
hgs
parents:
diff changeset
   547
        {
hgs
parents:
diff changeset
   548
        case EMemSpyDriverContainerTypeThread:
hgs
parents:
diff changeset
   549
            {
hgs
parents:
diff changeset
   550
            TBool err = EFalse;
hgs
parents:
diff changeset
   551
            TBool doTerminate = ETrue;
hgs
parents:
diff changeset
   552
            
hgs
parents:
diff changeset
   553
            TThreadId id( iKernelObjectItems[ iListBox->CurrentItemIndex() ]->Id() ); //get id of the current thread                                   
hgs
parents:
diff changeset
   554
            iMemSpySession.ThreadSystemPermanentOrCritical( id, err );
hgs
parents:
diff changeset
   555
            
hgs
parents:
diff changeset
   556
            if( err )
hgs
parents:
diff changeset
   557
            	{
hgs
parents:
diff changeset
   558
				CAknQueryDialog* importDialog = CAknQueryDialog::NewL();
hgs
parents:
diff changeset
   559
				doTerminate = ( importDialog->ExecuteLD( R_MEMSPY_PANIC_SYSTEM_CRITICAL_THREAD_OR_PROCESS ) );
hgs
parents:
diff changeset
   560
                        				
hgs
parents:
diff changeset
   561
				if ( doTerminate )
hgs
parents:
diff changeset
   562
					{
hgs
parents:
diff changeset
   563
					iMemSpySession.EndThreadL( id, EPanic );
hgs
parents:
diff changeset
   564
					RefreshL();
hgs
parents:
diff changeset
   565
					}
hgs
parents:
diff changeset
   566
            	}
hgs
parents:
diff changeset
   567
            
hgs
parents:
diff changeset
   568
            break;
hgs
parents:
diff changeset
   569
            }
hgs
parents:
diff changeset
   570
        case EMemSpyDriverContainerTypeProcess:
hgs
parents:
diff changeset
   571
            {
hgs
parents:
diff changeset
   572
            TBool err = EFalse;
hgs
parents:
diff changeset
   573
            TBool doTerminate = ETrue;
hgs
parents:
diff changeset
   574
            TProcessId id( iKernelObjectItems[ iListBox->CurrentItemIndex() ]->Id() );
hgs
parents:
diff changeset
   575
            iMemSpySession.ProcessSystemPermanentOrCritical( id, err );
hgs
parents:
diff changeset
   576
            
hgs
parents:
diff changeset
   577
            if( err )
hgs
parents:
diff changeset
   578
            	{
hgs
parents:
diff changeset
   579
				CAknQueryDialog* importDialog = CAknQueryDialog::NewL();	
hgs
parents:
diff changeset
   580
				doTerminate = ( importDialog->ExecuteLD( R_MEMSPY_PANIC_SYSTEM_CRITICAL_THREAD_OR_PROCESS ) );
hgs
parents:
diff changeset
   581
                           
hgs
parents:
diff changeset
   582
				if( doTerminate )
hgs
parents:
diff changeset
   583
					{
hgs
parents:
diff changeset
   584
					iMemSpySession.EndProcessL( id, EPanic );     
hgs
parents:
diff changeset
   585
					RefreshL();
hgs
parents:
diff changeset
   586
					}
hgs
parents:
diff changeset
   587
            	}
hgs
parents:
diff changeset
   588
        
hgs
parents:
diff changeset
   589
            break;
hgs
parents:
diff changeset
   590
            }
hgs
parents:
diff changeset
   591
        default:
hgs
parents:
diff changeset
   592
            {
hgs
parents:
diff changeset
   593
            // Programming error
hgs
parents:
diff changeset
   594
            __ASSERT_ALWAYS( EFalse, User::Panic( _L("MemSpy-View"), 0 ) );
hgs
parents:
diff changeset
   595
            }
hgs
parents:
diff changeset
   596
        }
hgs
parents:
diff changeset
   597
    }
hgs
parents:
diff changeset
   598
hgs
parents:
diff changeset
   599
hgs
parents:
diff changeset
   600
void CMemSpyViewKernelObjects::CreateTabsL()
hgs
parents:
diff changeset
   601
    {
hgs
parents:
diff changeset
   602
	TMemSpyDriverContainerType type = iObjectType;
hgs
parents:
diff changeset
   603
	const TPtrC pType( MemSpyUiUtils::TypeAsString( type ) );
hgs
parents:
diff changeset
   604
	
hgs
parents:
diff changeset
   605
	CEikStatusPane* statusPane = static_cast<CAknAppUi*> ( iEikonEnv->EikAppUi() )->StatusPane();
hgs
parents:
diff changeset
   606
	TUid uid;
hgs
parents:
diff changeset
   607
	uid.iUid = EEikStatusPaneUidNavi;
hgs
parents:
diff changeset
   608
	iNaviPane = ( CAknNavigationControlContainer * ) statusPane->ControlL( TUid::Uid( EEikStatusPaneUidNavi ) );	
hgs
parents:
diff changeset
   609
	iNavDecorator=iNaviPane->CreateMessageLabelL( pType );
hgs
parents:
diff changeset
   610
	iNaviPane->PushL(*iNavDecorator); 		
hgs
parents:
diff changeset
   611
    }
hgs
parents:
diff changeset
   612
hgs
parents:
diff changeset
   613
hgs
parents:
diff changeset
   614
void CMemSpyViewKernelObjects::DetailsL()
hgs
parents:
diff changeset
   615
    {
hgs
parents:
diff changeset
   616
    HBufC* messageBuf = HBufC::NewLC( 40960 );    
hgs
parents:
diff changeset
   617
    TPtr messagePtr = messageBuf->Des();
hgs
parents:
diff changeset
   618
hgs
parents:
diff changeset
   619
    //const TMemSpyDriverHandleInfoGeneric& selectedObject = iObjectList->At( iListBox->CurrentItemIndex() );
hgs
parents:
diff changeset
   620
    //iKernelObjectItems[iListBox->CurrentItemIndex];
hgs
parents:
diff changeset
   621
hgs
parents:
diff changeset
   622
    // General attributes:
hgs
parents:
diff changeset
   623
    TFullName name;
hgs
parents:
diff changeset
   624
    name.Copy( iKernelObjectItems[iListBox->CurrentItemIndex()]->NameDetail() );
hgs
parents:
diff changeset
   625
    AppendFormatString( messagePtr, _L("Name: %S\n"), &name );
hgs
parents:
diff changeset
   626
    name.Zero();
hgs
parents:
diff changeset
   627
    name.Copy( iKernelObjectItems[iListBox->CurrentItemIndex()]->Name() );
hgs
parents:
diff changeset
   628
    AppendFormatString( messagePtr, _L("FullName: %S\n"), &name );
hgs
parents:
diff changeset
   629
    name.Zero();
hgs
parents:
diff changeset
   630
    AppendFormatString( messagePtr, _L("AccessCount: %d\n"), iKernelObjectItems[iListBox->CurrentItemIndex()]->AccessCount() );
hgs
parents:
diff changeset
   631
    AppendFormatString( messagePtr, _L("UniqueID: %d\n"), iKernelObjectItems[iListBox->CurrentItemIndex()]->UniqueID() );
hgs
parents:
diff changeset
   632
    AppendFormatString( messagePtr, _L("Protection: %u\n"), iKernelObjectItems[iListBox->CurrentItemIndex()]->Protection() );
hgs
parents:
diff changeset
   633
    AppendFormatString( messagePtr, _L("OwnrAddr: 0x%08X\n"), iKernelObjectItems[iListBox->CurrentItemIndex()]->AddressOfKernelOwner() );
hgs
parents:
diff changeset
   634
    AppendFormatString( messagePtr, _L("KernelAddr: 0x%08X"), iKernelObjectItems[iListBox->CurrentItemIndex()]->Handle() );
hgs
parents:
diff changeset
   635
    
hgs
parents:
diff changeset
   636
    // Object type specific attributes:
hgs
parents:
diff changeset
   637
    switch ( iKernelObjectItems[iListBox->CurrentItemIndex()]->Type() )
hgs
parents:
diff changeset
   638
        {
hgs
parents:
diff changeset
   639
        case EMemSpyDriverContainerTypeUnknown:
hgs
parents:
diff changeset
   640
            {
hgs
parents:
diff changeset
   641
            break;
hgs
parents:
diff changeset
   642
            }
hgs
parents:
diff changeset
   643
        case EMemSpyDriverContainerTypeThread:
hgs
parents:
diff changeset
   644
            {
hgs
parents:
diff changeset
   645
            AppendFormatString( messagePtr, _L("\nOwnrPrAddr: 0x%08X\n"), iKernelObjectItems[iListBox->CurrentItemIndex()]->AddressOfOwningProcess() );
hgs
parents:
diff changeset
   646
            AppendFormatString( messagePtr, _L("ThreadID: %d\n"), iKernelObjectItems[iListBox->CurrentItemIndex()]->Id() );
hgs
parents:
diff changeset
   647
            AppendFormatString( messagePtr, _L("Priority: %d\n"), iKernelObjectItems[iListBox->CurrentItemIndex()]->Priority() );
hgs
parents:
diff changeset
   648
            TFullName procName;
hgs
parents:
diff changeset
   649
            procName.Copy( iKernelObjectItems[iListBox->CurrentItemIndex()]->NameOfOwner() );
hgs
parents:
diff changeset
   650
            AppendFormatString( messagePtr, _L("Proc: %S"), &procName );
hgs
parents:
diff changeset
   651
            procName.Zero();
hgs
parents:
diff changeset
   652
            break;
hgs
parents:
diff changeset
   653
            }
hgs
parents:
diff changeset
   654
        case EMemSpyDriverContainerTypeProcess:
hgs
parents:
diff changeset
   655
            {
hgs
parents:
diff changeset
   656
            AppendFormatString( messagePtr, _L("\nOwnrPrAddr: 0x%08X\n"), iKernelObjectItems[iListBox->CurrentItemIndex()]->AddressOfOwningProcess() );
hgs
parents:
diff changeset
   657
            AppendFormatString( messagePtr, _L("CreatorId: %u\n"), iKernelObjectItems[iListBox->CurrentItemIndex()]->CreatorId() );
hgs
parents:
diff changeset
   658
            AppendFormatString( messagePtr, _L("Attributes: 0x%08X\n"), iKernelObjectItems[iListBox->CurrentItemIndex()]->Attributes() );
hgs
parents:
diff changeset
   659
            AppendFormatString( messagePtr, _L("StckChnk: 0x%08X\n"), iKernelObjectItems[iListBox->CurrentItemIndex()]->AddressOfDataBssStackChunk() );
hgs
parents:
diff changeset
   660
            AppendFormatString( messagePtr, _L("ProcessID: %d\n"), iKernelObjectItems[iListBox->CurrentItemIndex()]->Id() );
hgs
parents:
diff changeset
   661
            AppendFormatString( messagePtr, _L("Priority: %d\n"), iKernelObjectItems[iListBox->CurrentItemIndex()]->Priority() );
hgs
parents:
diff changeset
   662
            AppendFormatString( messagePtr, _L("SecurityZone: %d"), iKernelObjectItems[iListBox->CurrentItemIndex()]->SecurityZone() );
hgs
parents:
diff changeset
   663
            /* TODO: to solve process details
hgs
parents:
diff changeset
   664
            CMemSpyEngineObjectContainer& container = iEngine.Container();
hgs
parents:
diff changeset
   665
            TProcessId id( iKernelObjectItems[iListBox->CurrentItemIndex().iId );
hgs
parents:
diff changeset
   666
            TRAP_IGNORE(
hgs
parents:
diff changeset
   667
                CMemSpyProcess& process = container.ProcessByIdL( id );
hgs
parents:
diff changeset
   668
                AppendFormatString( messagePtr, _L("\nSID: 0x%08X\n"), process.SID() );
hgs
parents:
diff changeset
   669
                AppendFormatString( messagePtr, _L("VID: 0x%08X\n"), process.VID() );
hgs
parents:
diff changeset
   670
                AppendFormatString( messagePtr, _L("UID1: 0x%08X\n"), process.UIDs()[0].iUid  );
hgs
parents:
diff changeset
   671
                AppendFormatString( messagePtr, _L("UID2: 0x%08X\n"), process.UIDs()[1].iUid  );
hgs
parents:
diff changeset
   672
                AppendFormatString( messagePtr, _L("UID3: 0x%08X\n"), process.UIDs()[2].iUid );
hgs
parents:
diff changeset
   673
                AppendFormatString( messagePtr, _L("Caps: 0x%08X%08X"), process.Capabilities().iCaps[0], process.Capabilities().iCaps[1]);
hgs
parents:
diff changeset
   674
                );
hgs
parents:
diff changeset
   675
            */
hgs
parents:
diff changeset
   676
            break;
hgs
parents:
diff changeset
   677
            }
hgs
parents:
diff changeset
   678
        case EMemSpyDriverContainerTypeChunk:
hgs
parents:
diff changeset
   679
            {
hgs
parents:
diff changeset
   680
            AppendFormatString( messagePtr, _L("\nOwnrPrAddr: 0x%08X\n"), iKernelObjectItems[iListBox->CurrentItemIndex()]->AddressOfOwningProcess() );
hgs
parents:
diff changeset
   681
            AppendFormatString( messagePtr, _L("Size: %d\n"), iKernelObjectItems[iListBox->CurrentItemIndex()]->Size() );
hgs
parents:
diff changeset
   682
            AppendFormatString( messagePtr, _L("MaxSize: %d\n"), iKernelObjectItems[iListBox->CurrentItemIndex()]->MaxSize() );
hgs
parents:
diff changeset
   683
            AppendFormatString( messagePtr, _L("Bottom: %d\n"), iKernelObjectItems[iListBox->CurrentItemIndex()]->Bottom() );
hgs
parents:
diff changeset
   684
            AppendFormatString( messagePtr, _L("Top: %d\n"), iKernelObjectItems[iListBox->CurrentItemIndex()]->Top() );
hgs
parents:
diff changeset
   685
            AppendFormatString( messagePtr, _L("Attr: 0x%08X\n"), iKernelObjectItems[iListBox->CurrentItemIndex()]->Attributes() );
hgs
parents:
diff changeset
   686
            AppendFormatString( messagePtr, _L("Start: %d\n"), iKernelObjectItems[iListBox->CurrentItemIndex()]->StartPos() );
hgs
parents:
diff changeset
   687
            AppendFormatString( messagePtr, _L("CntrlID: %u\n"), iKernelObjectItems[iListBox->CurrentItemIndex()]->ControllingOwner() );
hgs
parents:
diff changeset
   688
            AppendFormatString( messagePtr, _L("Restrictions: %u\n"), iKernelObjectItems[iListBox->CurrentItemIndex()]->Restrictions() );
hgs
parents:
diff changeset
   689
            AppendFormatString( messagePtr, _L("MapAttr: %u\n"), iKernelObjectItems[iListBox->CurrentItemIndex()]->MapAttr() );
hgs
parents:
diff changeset
   690
            AppendFormatString( messagePtr, _L("Type: %u\n"), iKernelObjectItems[iListBox->CurrentItemIndex()]->ChunkType() );
hgs
parents:
diff changeset
   691
            TFullName procName;
hgs
parents:
diff changeset
   692
            procName.Copy( iKernelObjectItems[iListBox->CurrentItemIndex()]->NameOfOwner() );
hgs
parents:
diff changeset
   693
            AppendFormatString( messagePtr, _L("Proc: %S"), &procName );
hgs
parents:
diff changeset
   694
            procName.Zero();
hgs
parents:
diff changeset
   695
            // OwnerAddr iAddressOfKernelOwner already listed
hgs
parents:
diff changeset
   696
            // ProcAddr iAddressOfOwningProcess already listed
hgs
parents:
diff changeset
   697
            break;
hgs
parents:
diff changeset
   698
            }
hgs
parents:
diff changeset
   699
        case EMemSpyDriverContainerTypeLibrary:
hgs
parents:
diff changeset
   700
            {
hgs
parents:
diff changeset
   701
            AppendFormatString( messagePtr, _L("\nMapCount: %d\n"), iKernelObjectItems[iListBox->CurrentItemIndex()]->MapCount() );
hgs
parents:
diff changeset
   702
            AppendFormatString( messagePtr, _L("State: %u\n"), iKernelObjectItems[iListBox->CurrentItemIndex()]->State() );
hgs
parents:
diff changeset
   703
            AppendFormatString( messagePtr, _L("CodeSeg: 0x%08X"), iKernelObjectItems[iListBox->CurrentItemIndex()]->AddressOfCodeSeg() );
hgs
parents:
diff changeset
   704
            break;
hgs
parents:
diff changeset
   705
            }
hgs
parents:
diff changeset
   706
        case EMemSpyDriverContainerTypeSemaphore:
hgs
parents:
diff changeset
   707
            {
hgs
parents:
diff changeset
   708
            AppendFormatString( messagePtr, _L("\nCount: %d\n"), iKernelObjectItems[iListBox->CurrentItemIndex()]->Count() );
hgs
parents:
diff changeset
   709
            AppendFormatString( messagePtr, _L("Resetting: %u"), iKernelObjectItems[iListBox->CurrentItemIndex()]->Resetting() );
hgs
parents:
diff changeset
   710
            break;
hgs
parents:
diff changeset
   711
            }
hgs
parents:
diff changeset
   712
        case EMemSpyDriverContainerTypeMutex:
hgs
parents:
diff changeset
   713
            {
hgs
parents:
diff changeset
   714
            AppendFormatString( messagePtr, _L("\nHoldCount: %d\n"), iKernelObjectItems[iListBox->CurrentItemIndex()]->Count() );
hgs
parents:
diff changeset
   715
            AppendFormatString( messagePtr, _L("WaitCount: %d\n"), iKernelObjectItems[iListBox->CurrentItemIndex()]->WaitCount() );
hgs
parents:
diff changeset
   716
            AppendFormatString( messagePtr, _L("Resetting: %u\n"), iKernelObjectItems[iListBox->CurrentItemIndex()]->Resetting() );
hgs
parents:
diff changeset
   717
            AppendFormatString( messagePtr, _L("Order: %u"), iKernelObjectItems[iListBox->CurrentItemIndex()]->Order() );
hgs
parents:
diff changeset
   718
            break;
hgs
parents:
diff changeset
   719
            }
hgs
parents:
diff changeset
   720
        case EMemSpyDriverContainerTypeTimer:
hgs
parents:
diff changeset
   721
            {
hgs
parents:
diff changeset
   722
            AppendFormatString( messagePtr, _L("\nState: %d\n"), iKernelObjectItems[iListBox->CurrentItemIndex()]->TimerState() );
hgs
parents:
diff changeset
   723
            AppendFormatString( messagePtr, _L("Type: %d"), iKernelObjectItems[iListBox->CurrentItemIndex()]->TimerType() );
hgs
parents:
diff changeset
   724
            break;
hgs
parents:
diff changeset
   725
            }
hgs
parents:
diff changeset
   726
        case EMemSpyDriverContainerTypeServer:
hgs
parents:
diff changeset
   727
            {
hgs
parents:
diff changeset
   728
            // Owner == ThrdAddr
hgs
parents:
diff changeset
   729
            AppendFormatString( messagePtr, _L("\nThrdAddr: 0x%08X\n"), iKernelObjectItems[iListBox->CurrentItemIndex()]->AddressOfOwningThread() );
hgs
parents:
diff changeset
   730
            TFullName thrName;
hgs
parents:
diff changeset
   731
            thrName.Copy( iKernelObjectItems[iListBox->CurrentItemIndex()]->NameOfOwner() );
hgs
parents:
diff changeset
   732
            AppendFormatString( messagePtr, _L("Thr: %S\n"), &thrName );
hgs
parents:
diff changeset
   733
            thrName.Zero();
hgs
parents:
diff changeset
   734
            AppendFormatString( messagePtr, _L("Type: %d\n"), iKernelObjectItems[iListBox->CurrentItemIndex()]->SessionType() );
hgs
parents:
diff changeset
   735
            TBuf8<55>buf;
hgs
parents:
diff changeset
   736
            /*
hgs
parents:
diff changeset
   737
            RArray<TMemSpyDriverServerSessionInfo> sessions;
hgs
parents:
diff changeset
   738
            CleanupClosePushL( sessions );            
hgs
parents:
diff changeset
   739
            iEngine.HelperServer().GetServerSessionsL( iKernelObjectItems[iListBox->CurrentItemIndex(), sessions );
hgs
parents:
diff changeset
   740
            const TInt count = sessions.Count();
hgs
parents:
diff changeset
   741
            for ( TInt i = 0; i < count; i++ )
hgs
parents:
diff changeset
   742
                {
hgs
parents:
diff changeset
   743
                const TMemSpyDriverServerSessionInfo& session = sessions[ i ];
hgs
parents:
diff changeset
   744
                AppendFormatString( messagePtr, _L("SessAddr: 0x%08X\n"), session.iAddress );
hgs
parents:
diff changeset
   745
                TFullName sessName;
hgs
parents:
diff changeset
   746
                sessName.Copy( session.iName );
hgs
parents:
diff changeset
   747
                AppendFormatString( messagePtr, _L("Sess: %S\n"), &sessName );
hgs
parents:
diff changeset
   748
                }
hgs
parents:
diff changeset
   749
            CleanupStack::PopAndDestroy( &sessions );
hgs
parents:
diff changeset
   750
            */
hgs
parents:
diff changeset
   751
            break;
hgs
parents:
diff changeset
   752
            }
hgs
parents:
diff changeset
   753
        case EMemSpyDriverContainerTypeSession:
hgs
parents:
diff changeset
   754
            {
hgs
parents:
diff changeset
   755
            // Server == SvrAddr
hgs
parents:
diff changeset
   756
            AppendFormatString( messagePtr, _L("\nServer: 0x%08X\n"), iKernelObjectItems[iListBox->CurrentItemIndex()]->AddressOfServer() );
hgs
parents:
diff changeset
   757
            TFullName srvName;
hgs
parents:
diff changeset
   758
            srvName.Copy( iKernelObjectItems[iListBox->CurrentItemIndex()]->Name() );
hgs
parents:
diff changeset
   759
            AppendFormatString( messagePtr, _L("Srv: %S\n"), &srvName );
hgs
parents:
diff changeset
   760
            srvName.Zero();
hgs
parents:
diff changeset
   761
            // Session: not supported
hgs
parents:
diff changeset
   762
            AppendFormatString( messagePtr, _L("AccCount: %u\n"), iKernelObjectItems[iListBox->CurrentItemIndex()]->TotalAccessCount() );
hgs
parents:
diff changeset
   763
            AppendFormatString( messagePtr, _L("SesType: %u\n"), iKernelObjectItems[iListBox->CurrentItemIndex()]->SessionType() );
hgs
parents:
diff changeset
   764
            AppendFormatString( messagePtr, _L("SvrType: %u\n"), iKernelObjectItems[iListBox->CurrentItemIndex()]->SvrSessionType() );
hgs
parents:
diff changeset
   765
            AppendFormatString( messagePtr, _L("MsgCount: %d\n"),  iKernelObjectItems[iListBox->CurrentItemIndex()]->MsgCount() );
hgs
parents:
diff changeset
   766
            AppendFormatString( messagePtr, _L("MsgLimit: %d"), iKernelObjectItems[iListBox->CurrentItemIndex()]->MsgLimit() );
hgs
parents:
diff changeset
   767
            break;
hgs
parents:
diff changeset
   768
            }
hgs
parents:
diff changeset
   769
        case EMemSpyDriverContainerTypeLogicalDevice:
hgs
parents:
diff changeset
   770
            {
hgs
parents:
diff changeset
   771
            AppendFormatString( messagePtr, 
hgs
parents:
diff changeset
   772
                                _L("\nVersion: %d.%d.%d\n"), 
hgs
parents:
diff changeset
   773
                                /*
hgs
parents:
diff changeset
   774
                                iKernelObjectItems[iListBox->CurrentItemIndex()]->Version.iMajor, TODO: To solve this
hgs
parents:
diff changeset
   775
                                iKernelObjectItems[iListBox->CurrentItemIndex()]->Version.iMinor,
hgs
parents:
diff changeset
   776
                                iKernelObjectItems[iListBox->CurrentItemIndex()]->Version.iBuild );
hgs
parents:
diff changeset
   777
                                */
hgs
parents:
diff changeset
   778
                                iKernelObjectItems[iListBox->CurrentItemIndex()]->Version(),
hgs
parents:
diff changeset
   779
                                iKernelObjectItems[iListBox->CurrentItemIndex()]->Version(),
hgs
parents:
diff changeset
   780
                                iKernelObjectItems[iListBox->CurrentItemIndex()]->Version() );
hgs
parents:
diff changeset
   781
            AppendFormatString( messagePtr, _L("ParseMask: 0x%08X\n"), iKernelObjectItems[iListBox->CurrentItemIndex()]->ParseMask() );
hgs
parents:
diff changeset
   782
            AppendFormatString( messagePtr, _L("UnitsMask: 0x%08X\n"), iKernelObjectItems[iListBox->CurrentItemIndex()]->UnitsMask() );
hgs
parents:
diff changeset
   783
            AppendFormatString( messagePtr, _L("Open channels: %d"), iKernelObjectItems[iListBox->CurrentItemIndex()]->OpenChannels() );
hgs
parents:
diff changeset
   784
            break;
hgs
parents:
diff changeset
   785
            }
hgs
parents:
diff changeset
   786
        case EMemSpyDriverContainerTypePhysicalDevice:
hgs
parents:
diff changeset
   787
            {
hgs
parents:
diff changeset
   788
            AppendFormatString( messagePtr, 
hgs
parents:
diff changeset
   789
                                _L("\nVersion: %d.%d.%d\n"), 
hgs
parents:
diff changeset
   790
                                iKernelObjectItems[iListBox->CurrentItemIndex()]->Version(),
hgs
parents:
diff changeset
   791
                                iKernelObjectItems[iListBox->CurrentItemIndex()]->Version(),
hgs
parents:
diff changeset
   792
                                iKernelObjectItems[iListBox->CurrentItemIndex()]->Version() );
hgs
parents:
diff changeset
   793
            AppendFormatString( messagePtr, _L("UnitsMask: 0x%08X\n"), iKernelObjectItems[iListBox->CurrentItemIndex()]->UnitsMask() );
hgs
parents:
diff changeset
   794
            AppendFormatString( messagePtr, _L("CodeSeg: 0x%08X"), iKernelObjectItems[iListBox->CurrentItemIndex()]->AddressOfCodeSeg() );
hgs
parents:
diff changeset
   795
            break;
hgs
parents:
diff changeset
   796
            }
hgs
parents:
diff changeset
   797
        case EMemSpyDriverContainerTypeLogicalChannel:
hgs
parents:
diff changeset
   798
            {
hgs
parents:
diff changeset
   799
            // No other details
hgs
parents:
diff changeset
   800
            break;
hgs
parents:
diff changeset
   801
            }
hgs
parents:
diff changeset
   802
        case EMemSpyDriverContainerTypeChangeNotifier:
hgs
parents:
diff changeset
   803
            {
hgs
parents:
diff changeset
   804
            AppendFormatString( messagePtr, _L("\nChanges: %u\n"), iKernelObjectItems[iListBox->CurrentItemIndex()]->Changes() );
hgs
parents:
diff changeset
   805
            // Thread == ThrdAddr
hgs
parents:
diff changeset
   806
            AppendFormatString( messagePtr, _L("ThrdAddr: 0x%08X\n"), iKernelObjectItems[iListBox->CurrentItemIndex()]->AddressOfOwningThread() );
hgs
parents:
diff changeset
   807
            TFullName thrName;
hgs
parents:
diff changeset
   808
            thrName.Copy( iKernelObjectItems[iListBox->CurrentItemIndex()]->NameOfOwner() );
hgs
parents:
diff changeset
   809
            AppendFormatString( messagePtr, _L("Thr: %S"), &thrName );
hgs
parents:
diff changeset
   810
            thrName.Zero();
hgs
parents:
diff changeset
   811
            break;
hgs
parents:
diff changeset
   812
            }
hgs
parents:
diff changeset
   813
        case EMemSpyDriverContainerTypeUndertaker:
hgs
parents:
diff changeset
   814
            {
hgs
parents:
diff changeset
   815
            // Thread == ThrdAddr
hgs
parents:
diff changeset
   816
            AppendFormatString( messagePtr, _L("\nThrdAddr: 0x%08X\n"), iKernelObjectItems[iListBox->CurrentItemIndex()]->AddressOfOwningThread() );
hgs
parents:
diff changeset
   817
            TFullName thrName;
hgs
parents:
diff changeset
   818
            thrName.Copy( iKernelObjectItems[iListBox->CurrentItemIndex()]->NameOfOwner() );
hgs
parents:
diff changeset
   819
            AppendFormatString( messagePtr, _L("Thr: %S"), &thrName );
hgs
parents:
diff changeset
   820
            thrName.Zero();
hgs
parents:
diff changeset
   821
            break;
hgs
parents:
diff changeset
   822
            }
hgs
parents:
diff changeset
   823
        case EMemSpyDriverContainerTypeMsgQueue:
hgs
parents:
diff changeset
   824
            {
hgs
parents:
diff changeset
   825
            // No other details
hgs
parents:
diff changeset
   826
            break;
hgs
parents:
diff changeset
   827
            }
hgs
parents:
diff changeset
   828
        case EMemSpyDriverContainerTypePropertyRef:
hgs
parents:
diff changeset
   829
            {
hgs
parents:
diff changeset
   830
            /*
hgs
parents:
diff changeset
   831
            Not listing details here, as propertyRef is not listed in TaskMgr.
hgs
parents:
diff changeset
   832
            Following propertyRef attributes are available at engine side. 
hgs
parents:
diff changeset
   833
            
hgs
parents:
diff changeset
   834
            IsReady
hgs
parents:
diff changeset
   835
            Type
hgs
parents:
diff changeset
   836
            Category
hgs
parents:
diff changeset
   837
            Key
hgs
parents:
diff changeset
   838
            RefCount
hgs
parents:
diff changeset
   839
            ThreadId
hgs
parents:
diff changeset
   840
            CreatorSID
hgs
parents:
diff changeset
   841
            */
hgs
parents:
diff changeset
   842
            break;
hgs
parents:
diff changeset
   843
            }
hgs
parents:
diff changeset
   844
        case EMemSpyDriverContainerTypeCondVar:
hgs
parents:
diff changeset
   845
            {
hgs
parents:
diff changeset
   846
            AppendFormatString( messagePtr, _L("\nResetting: %u\n"), iKernelObjectItems[iListBox->CurrentItemIndex()]->Resetting() );
hgs
parents:
diff changeset
   847
            // Using iAddressOfOwningThread for mutex
hgs
parents:
diff changeset
   848
            AppendFormatString( messagePtr, _L("Mutex: 0x%08X\n"), iKernelObjectItems[iListBox->CurrentItemIndex()]->AddressOfOwningThread() );
hgs
parents:
diff changeset
   849
            // Using iNameOfOwner for mutex
hgs
parents:
diff changeset
   850
            TFullName mtxName;
hgs
parents:
diff changeset
   851
            mtxName.Copy( iKernelObjectItems[iListBox->CurrentItemIndex()]->NameOfOwner() );
hgs
parents:
diff changeset
   852
            AppendFormatString( messagePtr, _L("Mtx: %S\n"), &mtxName );
hgs
parents:
diff changeset
   853
            mtxName.Zero();
hgs
parents:
diff changeset
   854
            AppendFormatString( messagePtr, _L("WaitCount: %d\n"), iKernelObjectItems[iListBox->CurrentItemIndex()]->WaitCount() );
hgs
parents:
diff changeset
   855
            /*
hgs
parents:
diff changeset
   856
            RArray<TMemSpyDriverCondVarSuspendedThreadInfo> threads;
hgs
parents:
diff changeset
   857
            CleanupClosePushL( threads );            
hgs
parents:
diff changeset
   858
            iEngine.HelperCondVar().GetCondVarSuspendedThreadsL( iKernelObjectItems[iListBox->CurrentItemIndex(), threads );
hgs
parents:
diff changeset
   859
            const TInt count = threads.Count();
hgs
parents:
diff changeset
   860
            for ( TInt i = 0; i < count; i++ )
hgs
parents:
diff changeset
   861
                {
hgs
parents:
diff changeset
   862
                const TMemSpyDriverCondVarSuspendedThreadInfo& thr = threads[ i ];
hgs
parents:
diff changeset
   863
                AppendFormatString( messagePtr, _L("SuspThrdAddr: 0x%08X\n"), thr.iAddress );
hgs
parents:
diff changeset
   864
                TFullName thrName;
hgs
parents:
diff changeset
   865
                thrName.Copy( thr.iName );
hgs
parents:
diff changeset
   866
                AppendFormatString( messagePtr, _L("Thr: %S\n"), &thrName );
hgs
parents:
diff changeset
   867
                }
hgs
parents:
diff changeset
   868
            CleanupStack::PopAndDestroy( &threads );
hgs
parents:
diff changeset
   869
            */
hgs
parents:
diff changeset
   870
            break;
hgs
parents:
diff changeset
   871
            }
hgs
parents:
diff changeset
   872
        default:
hgs
parents:
diff changeset
   873
            {
hgs
parents:
diff changeset
   874
            // Programming error
hgs
parents:
diff changeset
   875
            __ASSERT_ALWAYS( EFalse, User::Panic( _L("MemSpy-View"), 0 ) );
hgs
parents:
diff changeset
   876
            }
hgs
parents:
diff changeset
   877
        }
hgs
parents:
diff changeset
   878
    
hgs
parents:
diff changeset
   879
    CAknMessageQueryDialog* dialog = new(ELeave) CAknMessageQueryDialog( CAknQueryDialog::ENoTone );
hgs
parents:
diff changeset
   880
    dialog->PrepareLC( R_MEMSPY_KERNEL_OBJECT_DETAILS_DIALOG );
hgs
parents:
diff changeset
   881
    TFileName headerText;
hgs
parents:
diff changeset
   882
    headerText.Copy( iKernelObjectItems[iListBox->CurrentItemIndex()]->Name() );
hgs
parents:
diff changeset
   883
    dialog->SetHeaderTextL( headerText );
hgs
parents:
diff changeset
   884
    dialog->SetMessageTextL(messagePtr);
hgs
parents:
diff changeset
   885
    dialog->RunLD();
hgs
parents:
diff changeset
   886
    CleanupStack::PopAndDestroy( messageBuf );
hgs
parents:
diff changeset
   887
    }
hgs
parents:
diff changeset
   888
hgs
parents:
diff changeset
   889
hgs
parents:
diff changeset
   890
void CMemSpyViewKernelObjects::AppendFormatString( TPtr& aPtr, TRefByValue<const TDesC> aFmt, ... )
hgs
parents:
diff changeset
   891
    {
hgs
parents:
diff changeset
   892
    TBuf<KMaxInfoLength> infoString;
hgs
parents:
diff changeset
   893
    VA_LIST list;
hgs
parents:
diff changeset
   894
    VA_START ( list, aFmt );
hgs
parents:
diff changeset
   895
    infoString.FormatList( aFmt, list );
hgs
parents:
diff changeset
   896
    aPtr.Append( infoString );
hgs
parents:
diff changeset
   897
    }
hgs
parents:
diff changeset
   898