--- /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