memspy/Driver/Kernel/Include/MemSpyDriverPAndS.h
changeset 0 a03f92240627
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/memspy/Driver/Kernel/Include/MemSpyDriverPAndS.h	Tue Feb 02 01:57:15 2010 +0200
@@ -0,0 +1,113 @@
+/*
+* 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