// // De-Registers a script/executable. Runtimes should pass the previously registered // script identifier corresponding to the script to be de-registered. // // Operation Code : EUnRegisterScript // IPC Argument[0] : Script Identifier // IPC Argument[1] : Policy Identifier // IPC Argument[2] : Success code (as inOut parameter) // IPC Argument[3] : none // TInt RSecMgrSession::UnRegisterScript(TExecutableID aExeID, TPolicyID aPolicyID) { if (aExeID<=KErrNone) return ErrInvalidScriptID; if (aPolicyID<=KErrNone) return ErrInvalidPolicyID; TPckgBuf<TInt> errCode(KErrNone); TIpcArgs args(aExeID, aPolicyID, &errCode); TInt result = SendReceive (EUnRegisterScript, args); if ( KErrNone==result) return errCode (); return result; }
// --------------------------------------------------------------------------- // RContentManager::Connect // Starts and creates a session of Content Manager // --------------------------------------------------------------------------- // EXPORT_C TInt RContentManager::Connect() { LOG(_L("[Cm Server]\t RContentManager::Connect")); iCanceled = EFalse; TInt tryLoop( 0 ); TInt errCode( KErrNone ); for ( tryLoop = 0; tryLoop < KServerRetries; tryLoop++ ) { errCode = CreateSession(KCmServerName, TVersion( KCmServerMajor, KCmServerMinor, KCmServerBuild ) ); //gives MessageSlots of -1 //this uses global pool rather than local pool TRACE(Print(_L("[Cm Server]\t RContentManager::Connect New Session \ created with status %d\n"), errCode)); if( errCode == KErrNotSupported ) { TRACE(Print(_L("[Cm Server]\t Version not supported!\n"))); return errCode; } if ( errCode != KErrNotFound && errCode != KErrServerTerminated) { return errCode; } errCode = StartServer(); TRACE(Print(_L("[Cm Server]\t RContentManager::Connect Start server \ errCode %d\n"), errCode)); if ( errCode != KErrNone && errCode != KErrAlreadyExists ) { return errCode; } } return errCode; }
/** *程序异常处理 */ LONG ApplicationCrashHandler(EXCEPTION_POINTERS *pException){//程式异常捕获 /* ***保存数据代码*** */ //创建 Dump 文件 HANDLE hDumpFile = CreateFile(QTime::currentTime().toString("HH时mm分ss秒zzz.dmp").utf16(), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if( hDumpFile != INVALID_HANDLE_VALUE){ //Dump信息 MINIDUMP_EXCEPTION_INFORMATION dumpInfo; dumpInfo.ExceptionPointers = pException; dumpInfo.ThreadId = GetCurrentThreadId(); dumpInfo.ClientPointers = TRUE; //写入Dump文件内容 MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hDumpFile, MiniDumpNormal, &dumpInfo, NULL, NULL); } //这里弹出一个错误对话框并退出程序 EXCEPTION_RECORD* record = pException->ExceptionRecord; QString errCode(QString::number(record->ExceptionCode,16)),errAdr(QString::number((uint)record->ExceptionAddress,16)),errMod; qDebug()<<"错误代码:" + errCode<<"错误地址:" + errAdr; return EXCEPTION_EXECUTE_HANDLER; }
// ---------------------------------------------------------------------------------- // CASYStubCmdHandlerBase::ProcessCommandL() // ---------------------------------------------------------------------------------- void CASYStubCmdHandlerBase::ProcessCommandL( const TProcessCmdId aCommand, const TASYCmdParams& aCmdParams ) { COMPONENT_TRACE( ( _L( "ASYStub - CASYStubCmdHandlerBase::ProcessCommandL() - Enter" ) ) ); CASYMainServiceBase* mainServiceBase = ASYMainServiceBase(); COMPONENT_TRACE( ( _L( "AsyStub - CASYStubCmdHandlerBase::ProcessCommandL - mainServiceBase (0x%x)" ), &mainServiceBase ) ); CASYStubMainServiceBase* AsyStub = reinterpret_cast<CASYStubMainServiceBase*>( mainServiceBase ); COMPONENT_TRACE( ( _L( "AsyStub - CASYStubCmdHandlerBase::ProcessCommandL - AsyStub (0x%x)" ), &AsyStub ) ); TTFCapability aCapabilityS = AsyStub->GetAndRemoveCapability(); TASYCommandParamRecord cmdParams( aCmdParams() );//For debugging COMPONENT_TRACE( ( _L( "AsyStub - CASYStubCmdHandlerBase::ProcessCommandL - command: (0x%x)" ), aCommand ) ); switch ( aCommand ) { case ECmdGetValueBool: { COMPONENT_TRACE( ( _L( "ASYStub - CASYStubCmdHandlerBase::ProcessCommandL() - Get value Bool" ) ) ); TUint32 name; aCmdParams().iNameRecord.GetName( name ); TAccValueTypeTBool aCmdResponse = { EFalse }; if( name == aCapabilityS.iCapability ) { if( 0 != aCapabilityS.iTimeMs ) { //Serve asynchronously Start( aCapabilityS.iTimeMs, aCapabilityS.iValue, EAPVBool ); } else { aCmdResponse.iValue = aCapabilityS.iValue; ProcessResponseL( aCmdResponse ); } } else { TRACE_ASSERT_ALWAYS; ProcessResponseL( aCmdResponse, KErrArgument ); } } break; case ECmdSetValueBool: { COMPONENT_TRACE( ( _L( "ASYStub - CASYStubCmdHandlerBase::ProcessCommandL() - Set value Bool" ) ) ); TUint32 name; aCmdParams().iNameRecord.GetName( name ); TAccValueTypeTBool aCmdResponse = { EFalse }; if( name == aCapabilityS.iCapability && aCmdParams().iCmdValue == aCapabilityS.iValue ) { if( aCapabilityS.iTimeMs ) { //Serve asynchronously Start( aCapabilityS.iTimeMs, aCapabilityS.iValue, EAPVBool ); } else { aCmdResponse.iValue = aCmdParams().iCmdValue; ProcessResponseL( aCmdResponse ); } } else { TRACE_ASSERT_ALWAYS; ProcessResponseL( aCmdResponse, KErrArgument ); } } break; case ECmdProcessCommandInit: { COMPONENT_TRACE( ( _L( "ASYStub - CASYStubCmdHandlerBase::ProcessCommandL() - Process command init" ) ) ); TAccValueTypeTBool boolInitResponse; TBool everyThing( ETrue ); // If everything is ok if ( everyThing ) { COMPONENT_TRACE( ( _L( "ASYStub - CASYStubCmdHandlerBase::ProcessCommandL() - everything is ok" ) ) ); boolInitResponse.iValue = ETrue; ProcessResponseL( boolInitResponse ); } // If everything is not ok else { COMPONENT_TRACE( ( _L( "ASYStub - CASYStubCmdHandlerBase::ProcessCommandL() - everything is not ok" ) ) ); boolInitResponse.iValue = EFalse; TInt errCode( KErrGeneral ); ProcessResponseL( boolInitResponse, errCode ); } } break; // For user selection... case ECmdAccessoryUpdated: { COMPONENT_TRACE( ( _L( "ASYStub - CASYStubCmdHandlerBase::ProcessCommandL() - Accessory updated" ) ) ); TAccValueTypeTBool boolInitResponse; TBool everyThing( ETrue ); //get capabilities CAccPolSubblockNameArray* nameArray = CAccPolSubblockNameArray::NewL(); CleanupStack::PushL( nameArray ); RAccessoryServer server; server.Connect(); RAccessorySingleConnection connectionBase; connectionBase.CreateSubSession( server); connectionBase.GetSubblockNameArrayL( cmdParams.iGenericID, *nameArray ); RArray<TUint32>& array = *TAccPolSubblockNameArrayAccessor::Array( nameArray ); for ( TInt i( 0 ); i < array.Count(); i++ ) { TUint32 name = array[ i ]; TAccPolNameRecord nameRecord; nameRecord.SetNameL( name ); TAccValueTypeTInt value; TRAPD( err, connectionBase.GetValueL( cmdParams.iGenericID, nameRecord, value ) ); if ( err != KErrNone ) { COMPONENT_TRACE( ( _L( "ASYStub - CASYStubCmdHandlerBase::ProcessCommandL() - Capability 0x%x has no value!" ), name ) ); } name = 0; } connectionBase.CloseSubSession(); server.Close(); CleanupStack::PopAndDestroy( nameArray ); // If everything is ok if ( everyThing ) { COMPONENT_TRACE( ( _L( "ASYStub - CASYStubCmdHandlerBase::ProcessCommandL() - everything is ok" ) ) ); boolInitResponse.iValue = ETrue; ProcessResponseL( boolInitResponse ); } // If everything is not ok else { COMPONENT_TRACE( ( _L( "ASYStub - CASYStubCmdHandlerBase::ProcessCommandL() - everything is not ok" ) ) ); boolInitResponse.iValue = EFalse; TInt errCode( KErrGeneral ); ProcessResponseL( boolInitResponse, errCode ); } } break; case ECmdGetSupportedBTProfiles: { COMPONENT_TRACE( ( _L( "ASYStub - CASYStubCmdHandlerBase::ProcessCommandL() - Get BT profiles - Here is something wrong" ) ) ); TASYBTAccInfo btInfo; btInfo.iReserved = 0; TBTDevAddr btAddr( aCmdParams().iCmdValue ); switch( aCmdParams().iCmdValue ) { case KBTAddrCarkit: { btInfo.iDeviceInfo = 0x191; btInfo.iDeviceType = KDTCarKit; btInfo.iProfiles = KAccInfoHFP; btInfo.iSupportedFeatures.At(0) = 1; TASYBTAccInfoPckgC btInfoPckgC( btInfo ); ProcessResponseL( btInfoPckgC, KErrNone ); } break; case KBTAddrHeadsetHSPAndHFP: { btInfo.iDeviceInfo = 0x192; btInfo.iDeviceType = KDTHeadset; btInfo.iProfiles = KAccInfoHSP | KAccInfoHFP; btInfo.iSupportedFeatures.At( 0 ) = 1; btInfo.iSupportedFeatures.At( 1 ) = 2; TASYBTAccInfoPckgC btInfoPckgC( btInfo ); ProcessResponseL( btInfoPckgC, KErrNone ); } break; case KBTAddrHeadsetHSP: { btInfo.iDeviceInfo = 0x193; btInfo.iDeviceType = KDTHeadset; btInfo.iProfiles = KAccInfoHSP; btInfo.iSupportedFeatures.At(0) = 1; TASYBTAccInfoPckgC btInfoPckgC( btInfo ); ProcessResponseL( btInfoPckgC, KErrNone ); } break; case KBTAddrHeadsetHFP: { btInfo.iDeviceInfo = 0x194; btInfo.iDeviceType = KDTHeadset; btInfo.iProfiles = KAccInfoHFP; btInfo.iSupportedFeatures.At(1) = 1; TASYBTAccInfoPckgC btInfoPckgC( btInfo ); ProcessResponseL( btInfoPckgC, KErrNone ); } break; case KBTAddrHeadsetAVRCP: { btInfo.iDeviceInfo = 0x195; btInfo.iDeviceType = KDTHeadset; btInfo.iProfiles = KAccInfoHFP; btInfo.iSupportedFeatures.At(1) = 1; TASYBTAccInfoPckgC btInfoPckgC( btInfo ); ProcessResponseL( btInfoPckgC, KErrNone ); } break; case KBTAddrHeadseA2DP: { btInfo.iDeviceInfo = 0x196; btInfo.iDeviceType = KDTHeadset; btInfo.iProfiles = KAccInfoHFP; btInfo.iSupportedFeatures.At(1) = 1; btInfo.iReserved |= KAccInfoDRM; TASYBTAccInfoPckgC btInfoPckgC( btInfo ); ProcessResponseL( btInfoPckgC, KErrNone ); } break; case KBTAddrHeadsetEmptyPR: { btInfo.iDeviceInfo = 0x197; btInfo.iDeviceType = KDTHeadset; btInfo.iProfiles = 0; TASYBTAccInfoPckgC btInfoPckgC( btInfo ); ProcessResponseL( btInfoPckgC, KErrNone ); } break; case KBTAddrHeadsetNokiaSPId: { btInfo.iDeviceInfo = 0x181; btInfo.iDeviceType = KDTHeadset; btInfo.iProfiles = KAccInfoHSP; btInfo.iSupportedFeatures.At(0) = 1; TASYBTAccInfoPckgC btInfoPckgC( btInfo ); ProcessResponseL( btInfoPckgC, KErrNone ); } break; case KBTAddrNoResponse: { // No response } break; case KBTAddrErrCode: { btInfo.iDeviceInfo = 0x198; btInfo.iDeviceType = KDTHeadset; btInfo.iProfiles = KAccInfoHSP; btInfo.iSupportedFeatures.At( 0 ) = 1; TASYBTAccInfoPckgC btInfoPckgC( btInfo ); ProcessResponseL( btInfoPckgC, KErrGeneral ); } break; case KBTAllBitsOn: // All supported bits on { btInfo.iDeviceInfo = 0x198; btInfo.iDeviceType = KDTHeadset; btInfo.iProfiles = KAccInfoHSP | KAccInfoHFP | KAccInfoAVRCP | KAccInfoA2DP; btInfo.iSupportedFeatures.At( 0 ) = 0xFFFF; btInfo.iSupportedFeatures.At( 1 ) = 0xFFFF; btInfo.iSupportedFeatures.At( 2 ) = 0xFFFF; btInfo.iSupportedFeatures.At( 3 ) = 0xFFFF; TASYBTAccInfoPckgC btInfoPckgC( btInfo ); ProcessResponseL( btInfoPckgC, KErrNone ); } break; default: { btInfo.iDeviceInfo = 0x181; btInfo.iDeviceType = KDTHeadset; btInfo.iProfiles = KAccInfoHSP | KAccInfoHFP; btInfo.iSupportedFeatures.At( 0 ) = 1; btInfo.iSupportedFeatures.At( 1 ) = 2; TASYBTAccInfoPckgC btInfoPckgC( btInfo ); ProcessResponseL( btInfoPckgC, KErrNone ); } break; } break; } default: { COMPONENT_TRACE( ( _L( "BTASYStub - CBTBTASYStubCmdHandlerBase::ProcessCommandL() - ERROR: unhandled command" ) ) ); TRACE_ASSERT_ALWAYS; User::Panic(_L("ASY Stub"), KErrGeneral ); } break; } COMPONENT_TRACE( ( _L( "ASYStub - CASYStubCmdHandlerBase::ProcessCommandL() - Return" ) ) ); }
// // ---------------------------------------------------------------------------------- // CASYStubCmdHandlerBase::ProcessCommandL() // ---------------------------------------------------------------------------------- // void CASYStubCmdHandlerBase::ProcessCommandL( const TProcessCmdId aCommand, const TASYCmdParams& aCmdParams ) { COMPONENT_TRACE( ( _L( "ASYStub - CASYStubCmdHandlerBase::ProcessCommandL() - Enter" ) ) ); CASYMainServiceBase* mainServiceBase = ASYMainServiceBase(); COMPONENT_TRACE( ( _L( "AsyStub - CASYStubCmdHandlerBase::ProcessCommandL - mainServiceBase (0x%x)" ), &mainServiceBase ) ); TASYCommandParamRecord cmdParams( aCmdParams() );//For debugging if( aCommand == ECmdGetObjectValue || aCommand == ECmdSetObjectValue ) { ProcessObjectL( aCommand, aCmdParams ); } else { CASYStubMainServiceBase* AsyStub = reinterpret_cast<CASYStubMainServiceBase*> ( mainServiceBase ); COMPONENT_TRACE( ( _L( "AsyStub - CASYStubCmdHandlerBase::ProcessCommandL - AsyStub (0x%x)" ), &AsyStub ) ); AsyStub->AsyStubMainServicePointerReceivedL(); COMPONENT_TRACE( ( _L( "ASYStub - CASYStubCmdHandlerBase::ProcessCommandL() - Return" ) ) ); TInt aTestCaseID = AsyStub->GetTestCaseID(); // Do something with this TTFCapability aCapabilityS = AsyStub->GetAndRemoveCapability(); switch( aCommand ) { case ECmdGetValueBool: { TUint32 name; aCmdParams().iNameRecord.GetName( name ); TAccValueTypeTBool aCmdResponse; aCmdResponse.iValue = EFalse; if( name == aCapabilityS.iCapability ) { if( 0 != aCapabilityS.iTimeMs ) { //Serve asynchronously Start( aCapabilityS.iTimeMs, aCapabilityS.iValue, EAPVBool ); } else { aCmdResponse.iValue = aCapabilityS.iValue; ProcessResponseL( aCmdResponse ); } } else { TRACE_ASSERT_ALWAYS; ProcessResponseL( aCmdResponse, KErrArgument ); } } break; case ECmdGetValueTDes8: { // Worm is fired through the Accessory Server. TBuf8<80> worm( _L8("Malicious Worm Attach with extra long data with extra long content" ) ); ProcessResponseL( worm, KErrNone ); } break; case ECmdSetValueBool: { TUint32 name; aCmdParams().iNameRecord.GetName( name ); TAccValueTypeTBool aCmdResponse; aCmdResponse.iValue = EFalse; if( name == aCapabilityS.iCapability && aCmdParams().iCmdValue == aCapabilityS.iValue ) { if( aCapabilityS.iTimeMs ) { //Serve asynchronously Start( aCapabilityS.iTimeMs, aCapabilityS.iValue, EAPVBool ); } else { aCmdResponse.iValue = aCmdParams().iCmdValue; ProcessResponseL( aCmdResponse ); } } else { TRACE_ASSERT_ALWAYS; ProcessResponseL( aCmdResponse, KErrArgument ); } } break; case ECmdProcessCommandInit: { TAccValueTypeTBool boolInitResponse; TBool everyThing( ETrue ); // If everything is ok if( everyThing ) { COMPONENT_TRACE( ( _L( "ASYStub - CASYStubCmdHandlerBase::ProcessCommandL() - everything is ok" ) ) ); boolInitResponse.iValue = ETrue; ProcessResponseL( boolInitResponse ); } // If everything is not ok else { COMPONENT_TRACE( ( _L( "ASYStub - CASYStubCmdHandlerBase::ProcessCommandL() - everything is not ok" ) ) ); boolInitResponse.iValue = EFalse; TInt errCode( KErrGeneral ); ProcessResponseL( boolInitResponse, errCode ); } } break; //for user selection.... case ECmdAccessoryUpdated: { TAccValueTypeTBool boolInitResponse; TBool everyThing( ETrue ); //get capabilities CAccPolSubblockNameArray* iNameArray = CAccPolSubblockNameArray::NewL(); RAccessoryServer server; server.Connect(); RAccessorySingleConnection connectionBase; connectionBase.CreateSubSession( server ); connectionBase.GetSubblockNameArrayL( cmdParams.iGenericID, *iNameArray ); RArray<TUint32>& array = *TAccPolSubblockNameArrayAccessor::Array( iNameArray ); for( TInt i( 0 ); i < array.Count(); i++ ) { TUint32 name = array[i]; TAccPolNameRecord nameRecord; nameRecord.SetNameL( name ); TAccValueTypeTInt value; TRAPD( err, connectionBase.GetValueL( cmdParams.iGenericID, nameRecord, value)); if( err != KErrNone ) { COMPONENT_TRACE( ( _L( "ASYStub - CASYStubCmdHandlerBase::ProcessCommandL() - Capability 0x%x has no value!"), name ) ); } name = 0; } connectionBase.CloseSubSession(); server.Close(); delete iNameArray; // If everything is ok if( everyThing ) { COMPONENT_TRACE( ( _L( "ASYStub - CASYStubCmdHandlerBase::ProcessCommandL() - everything is ok" ) ) ); boolInitResponse.iValue = ETrue; ProcessResponseL( boolInitResponse ); } // If everything is not ok else { COMPONENT_TRACE( ( _L( "ASYStub - CASYStubCmdHandlerBase::ProcessCommandL() - everything is not ok" ) ) ); boolInitResponse.iValue = EFalse; TInt errCode( KErrGeneral ); ProcessResponseL( boolInitResponse, errCode ); } } break; default: { COMPONENT_TRACE( ( _L( "BTASYStub - CBTBTASYStubCmdHandlerBase::ProcessCommandL() - ERROR: unhandled command" ) ) ); TRACE_ASSERT_ALWAYS; User::Panic( _L("ASY Stub"), KErrGeneral ); } break; } } }
// // ---------------------------------------------------------------------------------- // CASYStubCmdHandlerBase::ProcessCommandL() // ---------------------------------------------------------------------------------- // void CASYStubCmdHandlerBase::ProcessCommandL( const TProcessCmdId aCommand, const TASYCmdParams& aCmdParams ) { CASYMainServiceBase* mainServiceBase = ASYMainServiceBase(); CASYStubMainServiceBase* AsyStub = reinterpret_cast<CASYStubMainServiceBase*>( mainServiceBase ); AsyStub->AsyStubMainServicePointerReceivedL(); TTFCapability aCapabilityS = AsyStub->GetAndRemoveCapability(); TASYCommandParamRecord cmdParams ( aCmdParams() );//For debugging switch ( aCommand ) { case ECmdGetValueBool: { TUint32 name; aCmdParams().iNameRecord.GetName( name ); TAccValueTypeTBool aCmdResponse = {EFalse}; if( name == aCapabilityS.iCapability ) { if( 0 != aCapabilityS.iTimeMs ) { //Serve asynchronously Start(aCapabilityS.iTimeMs, aCapabilityS.iValue, EAPVBool ); } else { aCmdResponse.iValue = aCapabilityS.iValue; ProcessResponseL(aCmdResponse); } } else { ProcessResponseL(aCmdResponse, KErrArgument); } } break; case ECmdGetValueTDes8: { // Worm is fired through the Accessory Server. TBuf8<22> worm(_L8("Malicious Worm Attach" )); ProcessResponseL( worm, KErrNone ); } break; case ECmdSetValueBool: { TUint32 name; aCmdParams().iNameRecord.GetName( name ); TAccValueTypeTBool aCmdResponse = { EFalse }; if( name == aCapabilityS.iCapability && aCmdParams().iCmdValue == aCapabilityS.iValue ) { if( aCapabilityS.iTimeMs ) { //Serve asynchronously Start(aCapabilityS.iTimeMs, aCapabilityS.iValue, EAPVBool ); } else { aCmdResponse.iValue = aCmdParams().iCmdValue; ProcessResponseL(aCmdResponse); } } else { ProcessResponseL(aCmdResponse, KErrArgument); } } break; case ECmdProcessCommandInit: { TAccValueTypeTBool boolInitResponse; TBool everyThing( ETrue ); // If everything is ok if ( everyThing ) { boolInitResponse.iValue = ETrue; ProcessResponseL( boolInitResponse ); } // If everything is not ok else { boolInitResponse.iValue = EFalse; TInt errCode( KErrGeneral ); ProcessResponseL( boolInitResponse, errCode ); } } break; //for user selection.... case ECmdAccessoryUpdated: { /* TAccValueTypeTBool boolInitResponse; TBool everyThing( ETrue ); //get capabilities CAccPolSubblockNameArray* iNameArray = CAccPolSubblockNameArray::NewL(); RAccessoryServer server; server.Connect(); RAccessorySingleConnection connectionBase; connectionBase.CreateSubSession( server); connectionBase.GetSubblockNameArrayL( cmdParams.iGenericID, *iNameArray); RArray<TUint32>& array = *TAccPolSubblockNameArrayAccessor::Array( iNameArray); for ( TInt i(0); i < array.Count(); i++) { TUint32 name = array[ i]; TAccPolNameRecord nameRecord; nameRecord.SetNameL( name); TAccValueTypeTInt value; TRAPD( err, connectionBase.GetValueL( cmdParams.iGenericID, nameRecord, value)); if ( err != KErrNone) { } name = 0; } connectionBase.CloseSubSession(); server.Close(); delete iNameArray; // If everything is ok if ( everyThing ) { boolInitResponse.iValue = ETrue; ProcessResponseL( boolInitResponse ); } // If everything is not ok else { boolInitResponse.iValue = EFalse; TInt errCode( KErrGeneral ); ProcessResponseL( boolInitResponse, errCode ); }*/ } break; default: { User::Panic(_L("ASY Stub"), KErrGeneral ); } break; } }
// // Opens client-side sub-session for a registered script. The script session is modelled as a // client side sub-session with a peer server side sub-session. // TInt RSecMgrSubSession::Open(const RSessionBase& aSession, CScript& aScriptInfo, TPolicyID aPolicyID, const TDesC& aHashValue) { TIpcArgs args(aScriptInfo.ScriptID (), aPolicyID); TInt errCode(KErrNone); errCode = iFs.Connect(); if(errCode == KErrNone) { if ( KAnonymousScript==aScriptInfo.ScriptID ()) errCode = CreateSubSession (aSession, EGetTrustedUnRegScriptSession, args); else errCode = CreateSubSession (aSession, EGetScriptSession, args); if ( errCode==KErrNone) { // Retrieve the RFs and RFile handles from the server TPckgBuf<TInt> fh; // sub-session (RFile) handle TIpcArgs args(&fh); RFile file; CleanupClosePushL(file); if ( KErrNone==errCode) { iFs.ShareProtected (); TFileName tempDirPath; TFileName tempPath; iFs.PrivatePath (tempDirPath); BaflUtils::EnsurePathExistsL (iFs, tempDirPath); errCode = file.Temp (iFs, tempDirPath, tempPath, EFileWrite); if ( KErrNone==errCode) { file.TransferToServer (args, EMsgArgOne, EMsgArgTwo); errCode = SendReceive (EGetScriptFile, args); if ( KErrNone==errCode) { RFileReadStream rfs(file); CleanupClosePushL(rfs); aScriptInfo.InternalizeL (rfs); TBufC<KMaxPath> hashValue(aScriptInfo.Hash()); if(0 != hashValue.Compare(KNullDesC)) { if(!aScriptInfo.HashMatch(aHashValue)) { //hash check failed errCode = KErrNotFound; } } CleanupStack::PopAndDestroy(&rfs); } } iFs.Delete (tempPath); } CleanupStack::PopAndDestroy(&file); } } return errCode; }