diff -r 000000000000 -r a41df078684a kerneltest/e32test/secure/testprocess.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kerneltest/e32test/secure/testprocess.h Mon Oct 19 15:55:17 2009 +0100 @@ -0,0 +1,115 @@ +// Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "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: +// e32test\system\testprocess.h +// +// + +#ifndef __TESTPROCESS_H__ +#define __TESTPROCESS_H__ + +class RTestProcess : public RProcess + { +public: + void Create(TUint32 aCapability,TTestProcessFunctions aFunction,TInt aArg1=-1,TInt aArg2=-1); + void Create(TTestProcessFunctions aFunction,TInt aArg1=-1,TInt aArg2=-1); + void Run(); + static TUint iInstanceCount; + }; + +TUint RTestProcess::iInstanceCount = 0; + +void RTestProcess::Create(TUint32 aCapability,TTestProcessFunctions aFunction,TInt aArg1,TInt aArg2) + { + TFileName source=RProcess().FileName(); + + TFileName destination; + _LIT(KTempPath,"c:\\system\\bin\\"); + _LIT(KTempPathSysBin,"c:\\sys\\bin\\"); + if(PlatSec::ConfigSetting(PlatSec::EPlatSecEnforceSysBin)) + destination = KTempPathSysBin; + else + destination = KTempPath; + destination.Append(source.Mid(source.LocateReverse('\\')+1)); + destination.SetLength(source.Locate('.')); + destination.Append((TText)'-'); + destination.AppendNum(++iInstanceCount,EHex); + _LIT(KDotExe,".exe"); + destination.Append(KDotExe); + + TInt r; + TBuf<128> b; + b.Zero(); +#ifdef __WINS__ + if(source[0]=='z' || source[0]=='Z') + { + b.Append(source.Mid(source.LocateReverse('\\')+1)); + } + else +#endif + b.Append(source); + b.Append(' '); + b.AppendNum((TUint)aCapability,EHex); + b.Append(' '); + b.Append(destination); + RProcess p; + _LIT(KSetcapExe,"setcap.exe"); + r = p.Create(KSetcapExe,b); + test(r==KErrNone); + TRequestStatus s; + p.Logon(s); + p.Resume(); + User::WaitForRequest(s); + test(s==KErrNone); + test(p.ExitType()==EExitKill); + + if(aArg1==-1) + aArg1 = RProcess().Id(); + TBuf<512> commandLine; + commandLine.AppendNum((TInt)aFunction); + commandLine.Append(_L(" ")); + commandLine.AppendNum(aArg1); + commandLine.Append(_L(" ")); + commandLine.AppendNum(aArg2); + r = RProcess::Create(destination,commandLine); + test(r==KErrNone); + SetJustInTime(EFalse); + } + +void RTestProcess::Create(TTestProcessFunctions aFunction,TInt aArg1,TInt aArg2) + { + if(aArg1==-1) + aArg1 = RProcess().Id(); + TBuf<512> commandLine; + commandLine.Num((TInt)aFunction); + commandLine.Append(_L(" ")); + commandLine.AppendNum(aArg1); + commandLine.Append(_L(" ")); + commandLine.AppendNum(aArg2); + TInt r = RProcess::Create(RProcess().FileName(),commandLine); + test(r==KErrNone); + SetJustInTime(EFalse); + } + +void RTestProcess::Run() + { + TRequestStatus s; + Logon(s); + Resume(); + User::WaitForRequest(s); + test(s==KErrNone); + test(ExitType()==EExitKill); + CLOSE_AND_WAIT(*this); + } + +#endif