--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/memspy/Driver/Kernel/Source/SubChannels/MemSpyDriverLogChanProcessInspection.cpp Tue Feb 02 01:57:15 2010 +0200
@@ -0,0 +1,256 @@
+/*
+* Copyright (c) 2009 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:
+*
+*/
+
+#include "MemSpyDriverLogChanProcessInspection.h"
+
+// System includes
+#include <u32hal.h>
+#include <e32rom.h>
+#include <memspy/driver/memspydriverobjectsshared.h>
+
+// Shared includes
+#include "MemSpyDriverOpCodes.h"
+#include "MemSpyDriverObjectsInternal.h"
+
+// User includes
+#include "MemSpyDriverUtils.h"
+#include "MemSpyDriverDevice.h"
+#include "MemSpyDriverInspectedProcess.h"
+#include "MemSpyDriverInspectedProcessManager.h"
+
+
+DMemSpyDriverLogChanProcessInspection::DMemSpyDriverLogChanProcessInspection( DMemSpyDriverDevice& aDevice, DThread& aThread )
+: DMemSpyDriverLogChanBase( aDevice, aThread )
+ {
+ TRACE( Kern::Printf("DMemSpyDriverLogChanProcessInspection::DMemSpyDriverLogChanProcessInspection() - this: 0x%08x", this ));
+ }
+
+
+DMemSpyDriverLogChanProcessInspection::~DMemSpyDriverLogChanProcessInspection()
+ {
+ TRACE( Kern::Printf("DMemSpyDriverLogChanProcessInspection::~DMemSpyDriverLogChanProcessInspection() - START - this: 0x%08x", this ));
+
+ TRACE( Kern::Printf("DMemSpyDriverLogChanProcessInspection::~DMemSpyDriverLogChanProcessInspection() - END - this: 0x%08x", this ));
+ }
+
+
+
+
+
+
+TInt DMemSpyDriverLogChanProcessInspection::Request( TInt aFunction, TAny* a1, TAny* a2 )
+ {
+ TInt r = DMemSpyDriverLogChanBase::Request( aFunction, a1, a2 );
+ if ( r == KErrNone )
+ {
+ switch( aFunction )
+ {
+ case EMemSpyDriverOpCodeProcessInspectOpen:
+ r = ProcessInspectionOpen( (TUint) a1 );
+ break;
+ case EMemSpyDriverOpCodeProcessInspectClose:
+ r = ProcessInspectionClose( (TUint) a1 );
+ break;
+ case EMemSpyDriverOpCodeProcessInspectRequestChanges:
+ r = ProcessInspectionRequestChanges( (TRequestStatus*) a1, (TMemSpyDriverProcessInspectionInfo*) a2 );
+ break;
+ case EMemSpyDriverOpCodeProcessInspectRequestChangesCancel:
+ r = ProcessInspectionRequestChangesCancel( (TUint) a1 );
+ break;
+ case EMemSpyDriverOpCodeProcessInspectAutoStartListReset:
+ r = ProcessInspectionAutoStartItemsClear();
+ break;
+ case EMemSpyDriverOpCodeProcessInspectAutoStartListAdd:
+ r = ProcessInspectionAutoStartItemsAdd( (TUint) a1 );
+ break;
+
+ default:
+ r = KErrNotSupported;
+ break;
+ }
+ }
+ //
+ return r;
+ }
+
+
+TBool DMemSpyDriverLogChanProcessInspection::IsHandler( TInt aFunction ) const
+ {
+ return ( aFunction > EMemSpyDriverOpCodeProcessInspectBase && aFunction < EMemSpyDriverOpCodeProcessInspectEnd );
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+TInt DMemSpyDriverLogChanProcessInspection::ProcessInspectionOpen( TUint aPid )
+ {
+ TRACE( Kern::Printf("DMemSpyDriverLogChanProcessInspection::ProcessInspectionOpen() - START"));
+ NKern::ThreadEnterCS();
+
+ TInt error = OpenTempObject( aPid, EProcess );
+ if ( error == KErrNone )
+ {
+ DMemSpyInspectedProcessManager& pidManager = MemSpyDevice().ProcessInspectionManager();
+ error = pidManager.ProcessOpen( (DProcess*) TempObject() );
+ CloseTempObject();
+ }
+ //
+ NKern::ThreadLeaveCS();
+ TRACE( Kern::Printf("DMemSpyDriverLogChanProcessInspection::ProcessInspectionOpen() - END - error: %d", error ));
+ return error;
+ }
+
+
+TInt DMemSpyDriverLogChanProcessInspection::ProcessInspectionClose( TUint aPid )
+ {
+ TRACE( Kern::Printf("DMemSpyDriverLogChanProcessInspection::ProcessInspectionClose() - START"));
+ NKern::ThreadEnterCS();
+
+ TInt error = OpenTempObject( aPid, EProcess );
+ if ( error == KErrNone )
+ {
+ DMemSpyInspectedProcessManager& pidManager = MemSpyDevice().ProcessInspectionManager();
+ error = pidManager.ProcessClose( (DProcess*) TempObject() );
+ CloseTempObject();
+ }
+
+ NKern::ThreadLeaveCS();
+
+ TRACE( Kern::Printf("DMemSpyDriverLogChanProcessInspection::ProcessInspectionClose() - END - error: %d", error ));
+ return error;
+ }
+
+
+TInt DMemSpyDriverLogChanProcessInspection::ProcessInspectionRequestChanges( TRequestStatus* aStatus, TMemSpyDriverProcessInspectionInfo* aInfo )
+ {
+ TRACE( Kern::Printf("DMemSpyDriverLogChanProcessInspection::ProcessInspectionRequestChanges() - START"));
+ NKern::ThreadEnterCS();
+
+ // Read client info
+ TMemSpyDriverProcessInspectionInfo info;
+ TInt error = Kern::ThreadRawRead( &ClientThread(), aInfo, &info, sizeof(TMemSpyDriverProcessInspectionInfo) );
+ //
+ if ( error == KErrNone )
+ {
+ DMemSpyInspectedProcessManager& pidManager = MemSpyDevice().ProcessInspectionManager();
+ DMemSpyInspectedProcess* pid = pidManager.InspectedProcessByProcessId( info.iProcessId );
+ //
+ if ( pid != NULL )
+ {
+ error = pid->NotifyOnChange( &ClientThread(), aStatus, aInfo );
+ }
+ else
+ {
+ error = KErrNotFound;
+ }
+ }
+
+ // NB: Let client take care of completing request in error situations
+ NKern::ThreadLeaveCS();
+ TRACE( Kern::Printf("DMemSpyDriverLogChanProcessInspection::ProcessInspectionRequestChanges() - END - error: %d", error ));
+ return error;
+ }
+
+
+TInt DMemSpyDriverLogChanProcessInspection::ProcessInspectionRequestChangesCancel( TUint aPid )
+ {
+ TRACE( Kern::Printf("DMemSpyDriverLogChanProcessInspection::ProcessInspectionRequestChangesCancel() - START"));
+ NKern::ThreadEnterCS();
+
+ TInt error = KErrNotFound;
+
+ DMemSpyInspectedProcessManager& pidManager = MemSpyDevice().ProcessInspectionManager();
+ DMemSpyInspectedProcess* pid = pidManager.InspectedProcessByProcessId( aPid );
+ //
+ if ( pid != NULL )
+ {
+ error = pid->NotifyOnChangeCancel();
+ }
+
+ NKern::ThreadLeaveCS();
+
+ TRACE( Kern::Printf("DMemSpyDriverLogChanProcessInspection::ProcessInspectionRequestChangesCancel() - END - error: %d", error ));
+ return error;
+ }
+
+
+TInt DMemSpyDriverLogChanProcessInspection::ProcessInspectionAutoStartItemsClear()
+ {
+ TRACE( Kern::Printf("DMemSpyDriverLogChanProcessInspection::ProcessInspectionAutoStartItemsClear() - START"));
+
+ NKern::ThreadEnterCS();
+
+ DMemSpyInspectedProcessManager& pidManager = MemSpyDevice().ProcessInspectionManager();
+ pidManager.AutoStartListReset();
+
+ NKern::ThreadLeaveCS();
+
+ TRACE( Kern::Printf("DMemSpyDriverLogChanProcessInspection::ProcessInspectionAutoStartItemsClear() - END" ));
+ return KErrNone;
+ }
+
+
+TInt DMemSpyDriverLogChanProcessInspection::ProcessInspectionAutoStartItemsAdd( TUint aSID )
+ {
+ TRACE( Kern::Printf("DMemSpyDriverLogChanProcessInspection::ProcessInspectionAutoStartItemsAdd() - START - aSID: 0x%08x", aSID ));
+
+ NKern::ThreadEnterCS();
+ DMemSpyInspectedProcessManager& pidManager = MemSpyDevice().ProcessInspectionManager();
+ const TInt error = pidManager.AutoStartListAdd( aSID );
+ NKern::ThreadLeaveCS();
+
+ TRACE( Kern::Printf("DMemSpyDriverLogChanProcessInspection::ProcessInspectionAutoStartItemsAdd() - END - error: %d", error ));
+ return error;
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+