diff -r 000000000000 -r a03f92240627 memspy/Driver/Kernel/Include/MemSpyDriverUserEventMonitor.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/memspy/Driver/Kernel/Include/MemSpyDriverUserEventMonitor.h Tue Feb 02 01:57:15 2010 +0200 @@ -0,0 +1,119 @@ +/* +* 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: +* +*/ + +#ifndef MEMSPYDRIVERUSEREVENTMONITOR_H +#define MEMSPYDRIVERUSEREVENTMONITOR_H + +// System includes +#include +#include +#ifdef __MARM__ +#include +#endif + +// User includes +#include "MemSpyDriverEventMonitor.h" + +// Classes referenced +class DMemSpyDriverDevice; +class DMemSpyDriverClientEM; + + +class DMemSpyDriverClientEMManager : public DBase + { +public: + DMemSpyDriverClientEMManager( DMemSpyDriverDevice& aDevice ); + ~DMemSpyDriverClientEMManager(); + TInt Create(); + +public: // API + DMemSpyDriverClientEM* EMOpen(); + TInt EMClose( TUint aHandle ); + DMemSpyDriverClientEM* EMInstance( TUint aHandle ); + +private: // Internal methods + void FreeAllInstances(); + +private: + DMemSpyDriverDevice& iDevice; + TUint iNextHandle; + SDblQue iEMInstances; + }; + + +/** + * This class represents a client-originated Event Monitor request + */ +class DMemSpyDriverClientEM : public DBase, public MMemSpyEventMonitorObserver + { +public: + DMemSpyDriverClientEM( DMemSpyDriverDevice& aDevice, TUint aHandle ); + ~DMemSpyDriverClientEM(); + TInt Create(); + +public: // API + inline TUint Handle() const { return iHandle; } + // + TInt NotifyChanges( DThread* aClientThread, TRequestStatus* aClientRS, TAny* aClientContext ); + TInt NotifyChangesCancel(); + +public: // From MMemSpyEventMonitorObserver + TUint EMTypeMask() const; + void EMHandleProcessAdd( DProcess& aProcess ); + void EMHandleProcessRemoved( DProcess& aProcess ); + void EMHandleThreadAdd( DThread& aThread ); + void EMHandleThreadKilled( DThread& aThread ); + void EMHandleChunkAdd( DChunk& aChunk ); + void EMHandleChunkDeleted( DChunk& aChunk ); + +private: // Internal methods + void ResetPendingChanges(); + void CompleteClientsRequest( TInt aCompletionCode, TUint aContext = 0 ); + +private: // Internal objects + + class TChange + { + public: + inline TChange( TInt aCompletionCode, TUint aContext ) + : iCompletionCode( aCompletionCode ), iContext( aContext ) + { + } + + public: // Data members + TInt iCompletionCode; + TUint iContext; + SDblQueLink iLink; + }; + +private: + DMemSpyDriverDevice& iDevice; + DMutex* iLock; + const TUint iHandle; + SDblQue iPendingChanges; + + // Transient: client-originated + DThread* iClientThread; + TRequestStatus* iClientRS; + TAny* iClientContext; + +public: + SDblQueLink iLink; + }; + + +#endif