perfsrv/memspy/Driver/Kernel/Include/MemSpyDriverPAndS.h
author hgs
Mon, 06 Sep 2010 15:00:47 +0300
changeset 51 98307c651589
permissions -rw-r--r--
201035

/*
* 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 MEMSPYDRIVERPANDS_H
#define MEMSPYDRIVERPANDS_H

// System includes
#include <e32property.h>
#include <kernel.h>
#include <kern_priv.h>
#include <sproperty.h>

// User includes
#include "MemSpyDriverLog.h"
#include <memspy/driver/memspydriverpanics.h>


/** 
 * Spoof TProperty, the kernel-side object that encapsulates all P&S keys
 */
class TMemSpyProperty 
	{
public:
	// The property attributes.
	// Meaningful for defined properties only (ie. iType != RProperty::ETypeLimit)
	// Constant while the property is defined
	inline TUint32 Owner() { return iOwner; }

public:
	const TUint		iCategory;
	const TUint		iKey;

public:
	// iType == RProperty::ETypeLimit means not defined
	TUint8	iType;	// updates require the system lock AND the feature lock 
					// reads require only one of them
	// The property attributes.
	// Meaningful for defined properties only (ie. iType != RProperty::ETypeLimit)
	// Constant while the property is defined
	TUint8	iAttr;
	TCompiledSecurityPolicy iReadPolicy;
	TCompiledSecurityPolicy iWritePolicy;
	TUint32	iOwner;

	TUint		iRefCount;	// protected by the feature lock
	TProperty*	iNext;		// hash table collision list link -
							//		protected by the feature lock

	class TBuf
		{ // Viraiable-size buffer for  byte array property values
	public:
		static TBuf* New(TInt aSize);

		TUint16	iBufSize;		// buffer size - constant
		TUint16	iSize;			// actual property size - protected by the system lock
		TUint8	iBytes[1];		// byte array - protected by the system lock
		};

	// The property value
	// Meaningful for defined properties only (ie. iType != RProperty::ETypeLimit)
	union	// the value (ie. iValue or iBuf->iBytes) is protected by the system lock
		{ 
		TBuf*	iBuf;   // pointer updates of a defined property (eg. buffer 
						//   reallocation) require the system AND the feature locks;
						// pointer reads (eg to get/set byte values) require any of them
		TInt	iValue;
		};

	// Called with system or feature locked
	TInt Size()
		{
		return iBuf ? iBuf->iSize : 0;
		}

	// Called with system or feature locked
	TUint8* Buf()
		{
		return iBuf ? iBuf->iBytes : NULL;
		}

	SDblQue	iPendingQue;	// pending subscriptions - protected by the system lock
	};



/**
 * Spoof of DPropertyRef - the kernel-side object that represents user-side P&S property keys
 */
class DMemSpyPropertyRef : public DObject
	{
public:
	TMemSpyProperty*		iProp;
	TRequestStatus*			iStatus;
	DThread*				iClient;
	TPropertySubsRequest	iSubs;
	};


#endif