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