sl@0: // Copyright (c) 1998-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: // All rights reserved. sl@0: // This component and the accompanying materials are made available sl@0: // under the terms of the License "Eclipse Public License v1.0" sl@0: // which accompanies this distribution, and is available sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: // sl@0: // Initial Contributors: sl@0: // Nokia Corporation - initial contribution. sl@0: // sl@0: // Contributors: sl@0: // sl@0: // Description: sl@0: // e32test\secure\d_ldd.cpp sl@0: // LDD for testing kernel platsec APIs sl@0: // sl@0: // sl@0: sl@0: /* Hack to make sure we get the true value of iKernelConfigFlags */ sl@0: #include "u32std.h" sl@0: #undef __PLATSEC_FORCED_FLAGS__ sl@0: #define __PLATSEC_FORCED_FLAGS__ 0 sl@0: /* End hack */ sl@0: sl@0: #include sl@0: sl@0: #include "d_sldd.h" sl@0: sl@0: _LIT(KLddName,"D_SLDD"); sl@0: sl@0: const TInt KMajorVersionNumber=0; sl@0: const TInt KMinorVersionNumber=1; sl@0: const TInt KBuildVersionNumber=1; sl@0: sl@0: TInt AFunction() sl@0: { sl@0: return KErrNone; sl@0: } sl@0: sl@0: TInt data=0x100; sl@0: TAny* dataptr=(TAny*)&AFunction; sl@0: TInt TheBss; sl@0: sl@0: sl@0: TUint32 KernelTestData[16] = { 0x32345678, 0x12345678 }; sl@0: sl@0: class DTest; sl@0: sl@0: class DTestFactory : public DLogicalDevice sl@0: // sl@0: // Test LDD factory sl@0: // sl@0: { sl@0: public: sl@0: DTestFactory(); sl@0: virtual TInt Install(); //overriding pure virtual sl@0: virtual void GetCaps(TDes8& aDes) const; //overriding pure virtual sl@0: virtual TInt Create(DLogicalChannelBase*& aChannel); //overriding pure virtual sl@0: }; sl@0: sl@0: class DTest : public DLogicalChannelBase sl@0: // sl@0: // Test logical channel sl@0: // sl@0: { sl@0: public: sl@0: virtual ~DTest(); sl@0: protected: sl@0: virtual TInt DoCreate(TInt aUnit, const TDesC8* anInfo, const TVersion& aVer); sl@0: virtual TInt Request(TInt aFunction, TAny* a1, TAny* a2); sl@0: }; sl@0: sl@0: DECLARE_STANDARD_LDD() sl@0: { sl@0: return new DTestFactory; sl@0: } sl@0: sl@0: DTestFactory::DTestFactory() sl@0: // sl@0: // Constructor sl@0: // sl@0: { sl@0: iVersion=TVersion(KMajorVersionNumber,KMinorVersionNumber,KBuildVersionNumber); sl@0: //iParseMask=0;//No units, no info, no PDD sl@0: //iUnitsMask=0;//Only one thing sl@0: } sl@0: sl@0: TInt DTestFactory::Create(DLogicalChannelBase*& aChannel) sl@0: // sl@0: // Create a new DTest on this logical device sl@0: // sl@0: { sl@0: aChannel=new DTest; sl@0: return aChannel?KErrNone:KErrNoMemory; sl@0: } sl@0: sl@0: TInt DTestFactory::Install() sl@0: // sl@0: // Install the LDD - overriding pure virtual sl@0: // sl@0: { sl@0: return SetName(&KLddName); sl@0: } sl@0: sl@0: void DTestFactory::GetCaps(TDes8& /*aDes*/) const sl@0: // sl@0: // Get capabilities - overriding pure virtual sl@0: // sl@0: { sl@0: // deliberately do nothing here for testing purpose sl@0: } sl@0: sl@0: TInt DTest::DoCreate(TInt /*aUnit*/, const TDesC8* /*aInfo*/, const TVersion& aVer) sl@0: // sl@0: // Create channel sl@0: // sl@0: { sl@0: sl@0: if (!Kern::QueryVersionSupported(TVersion(KMajorVersionNumber,KMinorVersionNumber,KBuildVersionNumber),aVer)) sl@0: return KErrNotSupported; sl@0: return KErrNone; sl@0: } sl@0: sl@0: DTest::~DTest() sl@0: // sl@0: // Destructor sl@0: // sl@0: { sl@0: } sl@0: sl@0: TInt DTest::Request(TInt aFunction, TAny* a1, TAny* a2) sl@0: { sl@0: TInt r = KErrNone; sl@0: switch (aFunction) sl@0: { sl@0: case RLddTest::EControlTest1: sl@0: r = RLddTest::ETest1Value; sl@0: break; sl@0: sl@0: case RLddTest::EGetIds: sl@0: { sl@0: RLddTest::TIds ids; sl@0: memclr(&ids, sizeof(ids)); sl@0: DThread* thread = &Kern::CurrentThread(); sl@0: ids.iThreadVID = Kern::ThreadVendorId(thread); sl@0: ids.iThreadSID = Kern::ThreadSecureId(thread); sl@0: DProcess* process = &Kern::CurrentProcess(); sl@0: ids.iProcessVID = Kern::ProcessVendorId(process); sl@0: ids.iProcessSID = Kern::ProcessSecureId(process); sl@0: kumemput(a1, &ids, sizeof(ids)); sl@0: break; sl@0: } sl@0: sl@0: case RLddTest::EGetKernelConfigFlags: sl@0: { sl@0: TSuperPage& superPage = Kern::SuperPage(); sl@0: r = superPage.KernelConfigFlags(); sl@0: break; sl@0: } sl@0: sl@0: case RLddTest::ESetKernelConfigFlags: sl@0: { sl@0: TSuperPage& superPage = Kern::SuperPage(); sl@0: superPage.SetKernelConfigFlags((TUint32)a1); sl@0: break; sl@0: } sl@0: sl@0: case RLddTest::ESetDisabledCapabilities0: sl@0: { sl@0: TSuperPage& superPage = Kern::SuperPage(); sl@0: memcpy(superPage.iDisabledCapabilities, &a1, sizeof(TUint32)); sl@0: break; sl@0: } sl@0: sl@0: case RLddTest::EKernelTestData: sl@0: { sl@0: TUint32* ptr = KernelTestData; sl@0: TUint32 data = *ptr; sl@0: kumemput32(a1,&ptr,sizeof(ptr)); sl@0: kumemput32(a2,&data,sizeof(data)); sl@0: } sl@0: break; sl@0: sl@0: case RLddTest::EGetSecureInfos: sl@0: { sl@0: TSecurityInfo infoThread(&Kern::CurrentThread()); sl@0: TSecurityInfo infoProcess(&Kern::CurrentProcess()); sl@0: kumemput32(a1,&infoThread,sizeof(infoThread)); sl@0: kumemput32(a2,&infoProcess,sizeof(infoProcess)); sl@0: } sl@0: break; sl@0: sl@0: default: sl@0: r = KErrNotSupported; sl@0: break; sl@0: } sl@0: return r; sl@0: }