/** @internalComponent */ TInt CTestHexHook::DoRequestL(TFsPluginRequest& aRequest) { TInt err = KErrNotSupported; TInt function = aRequest.Function(); iDrvNumber = aRequest.DriveNumber(); switch(function) { case EFsFileOpen: err = HexFileOpen(aRequest); break; case EFsFileRead: // Post intercept does nothing except prove that it is possible and that no deadlock occurs. // plugin always calls FileRead() when receiving a EFsFileRead, and so the mesage gets completed // by the plugin and has to be post intercepted by the plugin (if registered to post-intercept the request) // and any plugins above it. if (!(aRequest.IsPostOperation())) err = HexFileRead(aRequest); break; default: break; } return err; }
void CPreModifierPlugin::FsReadFileSectionL(TFsPluginRequest& aRequest) { TInt err = KErrNone; TInt length = 0; TInt64 pos = 0; TFileName filename; TParse parse; TBuf<256> testfilename1; //setting up test files testfilename1.Append(iDriveToTest); testfilename1.Append(_L(":\\Data\\test.txt")); filename = aRequest.Src().FullName(); err = aRequest.Read(TFsPluginRequest::ELength, length); iLastError = err; iLineNumber = __LINE__; if(err!=KErrNone) User::Leave(err); //trapped in DoRequestL err = aRequest.Read(TFsPluginRequest::EPosition, pos); iLastError = err; iLineNumber = __LINE__; if(err!=KErrNone) User::Leave(err); //trapped in DoRequestL parse.Set(filename, NULL, NULL); _LOG2(_L("CPreModifierPlugin::FsReadFileSectionL, file: %S"), &filename); if (aRequest.IsPostOperation()) { _LOG(_L("CPreModifierPlugin::FsReadFileSectionL, post intercept - enter")); RFilePlugin fileplugin2(aRequest,ETrue); //open a second file err = fileplugin2.Open(testfilename1, EFileWrite); _LOG3(_L("CPreModifierPlugin::FsReadFileSectionL - RFilePlugin::Open for %S returned %d"), &testfilename1, err); iLastError = err; iLineNumber = __LINE__; if(err!=KErrNone) User::Leave(err); //trapped in DoRequestL TInt64 size=0; err = fileplugin2.Size(size); _LOG3(_L("CPreModifierPlugin::FsReadFileSectionL - RFilePlugin::Size for %S returned %d"), &testfilename1, err); iLastError = err; iLineNumber = __LINE__; if(err!=KErrNone) User::Leave(err); //trapped in DoRequestL //close the second file fileplugin2.Close(); _LOG(_L("CPreModifierPlugin::FsReadFileSectionL - post intercept - exit")); } else { User::Invariant(); } }
/** Handle requests to Dismount the plugin only. This plugin is designed such that its removal is not allowed. @internalComponent */ TInt CUnremovablePlugin::DoRequestL(TFsPluginRequest& aRequest) { TInt err = KErrNone; TInt function = aRequest.Function(); if (aRequest.IsPostOperation()) { _LOG2(_L("CUnremovablePlugin post intercept for function %d"), function); //We should never get here //Is it even correct to post-intercept a EFsDismountPlugin ?? User::Invariant(); } else { _LOG2(_L("CUnremovablePlugin pre intercept for function %d"), function); //If a user is trying to dismount this plugin and this plugin doesn't want //to be dismounted then we should eb able to intecept this and return KErrAccessDenied or some //appropriate error code. if(iRemovable) { return KErrNone; } else { return KErrPermissionDenied; } } return err; }
void CPreModifierPlugin::FsFileTempL(TFsPluginRequest& aRequest) { TBuf<256> testfilename1; //setting up test files testfilename1.Append(iDriveToTest); testfilename1.Append(_L(":\\Data\\")); if (aRequest.IsPostOperation()) { _LOG(_L("CPreModifierPlugin::FsFileTempL, post intercept")); RFilePlugin fileplugin(aRequest); TInt err = fileplugin.AdoptFromClient(); iLastError = err; iLineNumber = __LINE__; if(err!=KErrNone) User::Leave(err); //trapped in DoRequestL //write to the newly created temp file TBuf8<64> wbuffer; wbuffer.Copy(_L8("TestTestTest")); err = fileplugin.Write(0, wbuffer); _LOG2(_L("CPreModifierPlugin::FsFileTempL, RFilePlugin::Write to the newly created temp file returned %d"), err); iLastError = err; iLineNumber = __LINE__; if(err!=KErrNone) User::Leave(err); //trapped in DoRequestL TInt length = wbuffer.Length(); HBufC8* tempBuf = HBufC8::NewMaxLC(length); TPtr8 tempBufPtr((TUint8 *)tempBuf->Des().Ptr(), length, length); err = fileplugin.Read(0, tempBufPtr); _LOG2(_L("CPreModifierPlugin::FsFileTempL, RFilePlugin::Read returned %d"), err); iLastError = err; iLineNumber = __LINE__; if(err!=KErrNone) User::Leave(err); //trapped in DoRequestL fileplugin.Close(); //testing the correct thing has been written to the drive err = wbuffer.Compare(tempBufPtr); iLastError = err; iLineNumber = __LINE__; if(err!=KErrNone) User::Leave(err); //trapped in DoRequestL CleanupStack::PopAndDestroy(); } else { User::Invariant(); } }
/** @internalComponent */ void CPreModifierPlugin::FsDirReadPackedL(TFsPluginRequest& aRequest) { if (aRequest.IsPostOperation()) { _LOG(_L("CPreModifierPlugin::FsDirReadPackedL, post intercept")); } else { User::Invariant(); } }
/** @internalComponent */ void CPreModifierPlugin::FsFileSubCloseL(TFsPluginRequest& aRequest) { if (aRequest.IsPostOperation()) { _LOG(_L("CPreModifierPlugin::FsFileSubCloseL, post intercept")); } else { User::Invariant(); } }
/** @internalComponent */ void CPreModifierPlugin::FsFileWriteL(TFsPluginRequest& aRequest) { TInt err = KErrNone; TInt length = 0; TInt64 pos = 0; TFileName filename; TParse parse; TBuf<256> testfilename1; TBuf<256> testfilename2; //setting up test files testfilename1.Append(iDriveToTest); testfilename1.Append(_L(":\\Data\\test.txt")); testfilename2.Append(iDriveToTest); testfilename2.Append(_L(":\\Data\\createcreate3.txt")); err = aRequest.FileName(filename); iLastError = err; iLineNumber = __LINE__; if(err!=KErrNone) User::Leave(err); //trapped in DoRequestL err = aRequest.Read(TFsPluginRequest::ELength, length); iLastError = err; iLineNumber = __LINE__; if(err!=KErrNone) User::Leave(err); //trapped in DoRequestL err = aRequest.Read(TFsPluginRequest::EPosition, pos); iLastError = err; iLineNumber = __LINE__; if(err!=KErrNone) User::Leave(err); //trapped in DoRequestL parse.Set(filename, NULL, NULL); _LOG4(_L("CPreModifierPlugin::FsFileWriteL, file: %S, pos: %d, length: %d"), &filename, pos, length); if (aRequest.IsPostOperation()) { _LOG(_L("CPreModifierPlugin::FsFileWriteL, post intercept")); } else { User::Invariant(); } }
/** Handle requests @internalComponent */ TInt CTemplatePlugin::DoRequestL(TFsPluginRequest& aRequest) { TInt err = KErrNone; TInt function = aRequest.Function(); if (aRequest.IsPostOperation()) { _LOG2(_L("CTemplatePlugin post intercept for function %d"), function); } else { _LOG2(_L("CTemplatePlugin pre intercept for function %d"), function); } return err; }
void CPreModifierPlugin::FsDirReadOneL(TFsPluginRequest& aRequest) { TFileName name; TInt err = aRequest.FileName(name); iLastError = err; iLineNumber = __LINE__; if(err!=KErrNone) User::Leave(err); //trapped in DoRequestL if (aRequest.IsPostOperation()) { _LOG(_L("CPreModifierPlugin::FsDirReadOneL, post intercept")); } else { User::Invariant(); } }
void CPreModifierPlugin::FsRenameL(TFsPluginRequest& aRequest) { TInt err = KErrNone; TFileName oldfilename; TFileName newfilename; oldfilename = aRequest.Src().FullName(); newfilename = aRequest.Dest().FullName(); TBuf<256> testfilename1; //setting up test files testfilename1.Append(iDriveToTest); testfilename1.Append(_L(":\\Data\\test.txt")); if (aRequest.IsPostOperation()) { _LOG(_L("CPreModifierPlugin::FsRenameL, post intercept")); RFilePlugin fileplugin2(aRequest); //open a second file err = fileplugin2.Open(testfilename1, EFileWrite); _LOG3(_L("CPreModifierPlugin::FsRenameL, RFilePlugin::Open for %S returned %d"), &testfilename1, err); iLastError = err; iLineNumber = __LINE__; if(err!=KErrNone) User::Leave(err); //trapped in DoRequestL TInt64 size=0; err = fileplugin2.Size(size); iLastError = err; iLineNumber = __LINE__; if(err!=KErrNone) User::Leave(err); //trapped in DoRequestL //close the second file fileplugin2.Close(); _LOG2(_L("CPreModifierPlugin::FsRenameL, RFilePlugin::Close to the second file returned %d"), err); } else { User::Invariant(); } }
/** @internalComponent */ void CPreModifierPlugin::FsFileRenameL(TFsPluginRequest& aRequest) { TFileName oldfilename, newfilename; TParse parse; oldfilename = aRequest.Src().FullName(); newfilename = aRequest.Dest().FullName(); parse.Set(oldfilename, NULL, NULL); TPtrC extension(parse.Ext()); _LOG3(_L("CPreModifierPlugin::FsFileRenameL, old name: %S, new name: %S"), &oldfilename, &newfilename); if (aRequest.IsPostOperation()) { _LOG(_L("CPreModifierPlugin::FsFileRenameL, post intercept")); if (extension.CompareF(_L(".tst")) == 0) { TBuf8<32> tempBuf = (_L8("Rename Post Intercept")); RFilePlugin fileplugin(aRequest); TInt err = fileplugin.AdoptFromClient(); iLastError = err; iLineNumber = __LINE__; if(err!=KErrNone) User::Leave(err); //trapped in DoRequestL err = fileplugin.Write(20, tempBuf); _LOG2(_L("CPreModifierPlugin::FsFileRenameL, FileWrite returned %d"), err); iLastError = err; iLineNumber = __LINE__; if(err!=KErrNone) User::Leave(err); //trapped in DoRequestL fileplugin.Close(); } } else { User::Invariant(); } }
/** @internalComponent */ void CPreModifierPlugin::FsFileUnLockL(TFsPluginRequest& aRequest) { TInt length = 0; TInt64 pos = 0; TFileName filename; TParse parse; TInt err = aRequest.FileName(filename); iLastError = err; iLineNumber = __LINE__; if(err!=KErrNone) User::Leave(err); //trapped in DoRequestL err = aRequest.Read(TFsPluginRequest::ELength, length); iLastError = err; iLineNumber = __LINE__; if(err!=KErrNone) User::Leave(err); //trapped in DoRequestL err = aRequest.Read(TFsPluginRequest::EPosition, pos); iLastError = err; iLineNumber = __LINE__; if(err!=KErrNone) User::Leave(err); //trapped in DoRequestL parse.Set(filename, NULL, NULL); //TPtrC extension(parse.Ext()); _LOG4(_L("CPreModifierPlugin::FsFileUnLockL, file: %S, pos: %d, length: %d"), &filename, pos, length); if (aRequest.IsPostOperation()) { _LOG(_L("CPreModifierPlugin::FsFileUnLockL, post intercept")); } else { User::Invariant(); } }
/** @internalComponent */ void CPreModifierPlugin::FsFileSetSizeL(TFsPluginRequest& aRequest) { TFileName filename; TParse parse; TInt err = aRequest.FileName(filename); iLastError = err; iLineNumber = __LINE__; if(err!=KErrNone) User::Leave(err); //trapped in DoRequestL parse.Set(filename, NULL, NULL); _LOG2(_L("CPreModifierPlugin::FsFileSetSizeL, file: %S"), &filename); if (aRequest.IsPostOperation()) { _LOG(_L("CPreModifierPlugin::FsFileSetSizeL, post intercept")); } else { User::Invariant(); } }
/** @internalComponent */ void CPreModifierPlugin::FsFileLockL(TFsPluginRequest& aRequest) { TInt length = 0; TInt64 pos = 0; TFileName filename; TParse parse; TInt err = aRequest.FileName(filename); iLastError = err; iLineNumber = __LINE__; if(err!=KErrNone) User::Leave(err); //trapped in DoRequestL err = aRequest.Read(TFsPluginRequest::ELength, length); iLastError = err; iLineNumber = __LINE__; if(err!=KErrNone) User::Leave(err); //trapped in DoRequestL err = aRequest.Read(TFsPluginRequest::EPosition, pos); iLastError = err; iLineNumber = __LINE__; if(err!=KErrNone) User::Leave(err); //trapped in DoRequestL parse.Set(filename, NULL, NULL); TPtrC extension(parse.Ext()); _LOG4(_L("CPreModifierPlugin::FsFileLockL, file: %S, pos: %d, length: %d"), &filename, pos, length); if (aRequest.IsPostOperation()) { _LOG(_L("CPreModifierPlugin::FsFileLockL, post intercept")); // Request read from post interception if (extension.CompareF(_L(".lockread")) == 0) { length = 10; HBufC8* tempBuf = HBufC8::NewMaxLC(length); TPtr8 tempBufPtr((TUint8 *)tempBuf->Des().Ptr(), length, length); _LOG(_L("CPreModifierPlugin::FsFileLockL , calling AdoptFromClient in post intercept")); RFilePlugin fileplugin(aRequest); TInt err = fileplugin.AdoptFromClient(); iLastError = err; iLineNumber = __LINE__; if(err!=KErrNone) User::Leave(err); //trapped in DoRequestL _LOG2(_L("CPreModifierPlugin::FsFileLockL, Adopt returned %d"), err); err = fileplugin.Read(pos, tempBufPtr, length); _LOG2(_L("CPreModifierPlugin::FsFileLockL, FileRead returned %d"), err); iLastError = err; iLineNumber = __LINE__; if(err!=KErrNone) User::Leave(err); //trapped in DoRequestL fileplugin.Close(); CleanupStack::PopAndDestroy(); } // Request close from post interception if(extension.CompareF(_L(".lockclose")) == 0) { _LOG(_L("CPreModifierPlugin::FsFileLockL, file = *.lockclose post intercept ")); RFilePlugin fileplugin(aRequest); TInt err = fileplugin.AdoptFromClient(); _LOG2(_L("CPreModifierPlugin::FsFileLockL ,Open %d"), err); iLastError = err; iLineNumber = __LINE__; if(err!=KErrNone) User::Leave(err); //trapped in DoRequestL fileplugin.Close(); _LOG(_L("CPreModifierPlugin::FsFileLockL, Close")); } } else { User::Invariant(); } }
/*Test to ensure that when a file has been opened for exclusive access, * i.e. readonly, that froma plugin we can still read from it */ TInt CExclusiveAccessPlugin::FsFileReadL(TFsPluginRequest& aRequest) { if(!aRequest.IsPostOperation()) // pre-operation { RFilePlugin file(aRequest); TInt err = file.AdoptFromClient(); iLastError = err; iLineNumber = __LINE__; if(err!=KErrNone) return err; TInt64 pos; err = aRequest.Read(TFsPluginRequest::EPosition, pos); // get pos iLastError = err; iLineNumber = __LINE__; if(err!=KErrNone) return err; TInt length; err = aRequest.Read(TFsPluginRequest::ELength, length); //get length iLastError = err; iLineNumber = __LINE__; if(err!=KErrNone) return err; if(length>265) length=256; //we should check that this file is in fact registered as read only? //if not.. User::Invariant()? TEntry entry; RFsPlugin rfsplugin(aRequest); err = rfsplugin.Connect(); iLastError = err; iLineNumber = __LINE__; if(err!=KErrNone) return err; TFileName fileName; err = aRequest.FileName(fileName); iLastError = err; iLineNumber = __LINE__; if(err!=KErrNone) return err; err = rfsplugin.Entry(fileName, entry); iLastError = err; iLineNumber = __LINE__; if(err!=KErrNone) return err; //can we read a readonly file? - should be fine. TBuf8<256> data; err = file.Read(pos,data,length); iLastError = err; iLineNumber = __LINE__; if(err!=KErrNone) return err; file.Close(); rfsplugin.Close(); } return KErrNone; }
void CPreModifierPlugin::FsReplaceL(TFsPluginRequest& aRequest) { TFileName oldfilename; TFileName newfilename; oldfilename = aRequest.Src().FullName(); newfilename = aRequest.Dest().FullName(); TBuf<256> testfilename1; //setting up test files testfilename1.Append(iDriveToTest); testfilename1.Append(_L(":\\Data\\test.txt")); if (aRequest.IsPostOperation()) { //STF: Is this code going to get called - the pre-operation completes early? _LOG(_L("CPreModifierPlugin::FsReplaceL, post intercept")); //We should check that the name has changed here. RFilePlugin file(aRequest); TInt err = file.AdoptFromClient(); iLastError = err; iLineNumber = __LINE__; if(err!=KErrNone) User::Leave(err); //trapped in DoRequestL TInt compare = oldfilename.Compare(newfilename); if(compare != 0) //is equal { //User::Leave(compare); //It wont be equal as the name is coming from the request aint it. //Pointless comparison then eh? } file.Close(); RFilePlugin fileplugin2(aRequest); //open a second file err = fileplugin2.Open(testfilename1, EFileWrite); _LOG3(_L("CPreModifierPlugin::FsReplaceL, RFilePlugin::Open for %S returned %d"), &testfilename1, err); iLastError = err; iLineNumber = __LINE__; if(err!=KErrNone) User::Leave(err); //trapped in DoRequestL TInt64 size=0; err =fileplugin2.Size(size); iLastError = err; iLineNumber = __LINE__; if(err!=KErrNone) User::Leave(err); //trapped in DoRequestL //close the second file fileplugin2.Close(); _LOG2(_L("CPreModifierPlugin::FsReplaceL, RFilePlugin::Close to the second file returned %d"), err); } else { User::Invariant(); } }
void CPreModifierPlugin::FsFileReplaceL(TFsPluginRequest& aRequest) { TFileName filename; TParse parse; filename = aRequest.Src().FullName(); TUint mode; TInt err = aRequest.Read(TFsPluginRequest::EMode, mode); iLastError = err; iLineNumber = __LINE__; if(err!=KErrNone) User::Leave(err); //trapped in DoRequestL parse.Set(filename, NULL, NULL); TPtrC extension(parse.Ext()); _LOG2(_L("CPreModifierPlugin::FsFileReplaceL, file: %S"), &filename); if (aRequest.IsPostOperation()) { _LOG(_L("CPreModifierPlugin::FsFileReplaceL, post intercept")); if ((extension.CompareF(_L(".tst")) == 0) && (aRequest.Message().Int1() != 0)) { //write to the newly replaced file TBuf8<64> wbuffer; wbuffer.Copy(_L8("TestTestTest")); RFilePlugin fileplugin(aRequest); TInt err = fileplugin.AdoptFromClient(); iLastError = err; iLineNumber = __LINE__; if(err!=KErrNone) User::Leave(err); //trapped in DoRequestL err = fileplugin.Write(0, wbuffer); _LOG2(_L("CPreModifierPlugin::FsFileReplaceL, RFilePlugin::Write to the newly created file returned %d"), err); iLastError = err; iLineNumber = __LINE__; if(err!=KErrNone) User::Leave(err); //trapped in DoRequestL TInt length = wbuffer.Length(); HBufC8* tempBuf = HBufC8::NewMaxLC(length); TPtr8 tempBufPtr((TUint8 *)tempBuf->Des().Ptr(), length, length); err = fileplugin.Read(0, tempBufPtr); _LOG2(_L("CPreModifierPlugin::FsFileReplaceL, RFilePlugin::Read returned %d"), err); iLastError = err; iLineNumber = __LINE__; if(err!=KErrNone) User::Leave(err); //trapped in DoRe //testing the correct thing has been written to the drive err = wbuffer.Compare(tempBufPtr); iLastError = err; iLineNumber = __LINE__; if(err!=KErrNone) User::Leave(err); //trapped in DoRequestL fileplugin.Close(); CleanupStack::PopAndDestroy(); } } else { User::Invariant(); } }
/*Test to ensure that when a file has been opened for exclusive access, * i.e. readonly, that from a plugin we can still write to it regardless */ TInt CExclusiveAccessPlugin::FsFileWriteL(TFsPluginRequest& aRequest) { if(!aRequest.IsPostOperation()) // pre-operation { //Make sure that the file is read only. RFilePlugin file(aRequest); TInt err = file.AdoptFromClient(); iLastError = err; iLineNumber = __LINE__; if(err!=KErrNone) return err; RFsPlugin rfsplugin(aRequest); err = rfsplugin.Connect(); iLastError = err; iLineNumber = __LINE__; if(err!=KErrNone) return err; TEntry entry; err = rfsplugin.Entry(aRequest.Src().FullName(), entry); iLastError = err; iLineNumber = __LINE__; if(err!=KErrNone) return err; // if(!entry.IsReadOnly()) // { // //this test should only being being used for read only files. // User::Invariant(); // } TInt64 pos; err = aRequest.Read(TFsPluginRequest::EPosition, pos); //get pos iLastError = err; iLineNumber = __LINE__; if(err!=KErrNone) return err; TInt length; err = aRequest.Read(TFsPluginRequest::ELength, length); //get length iLastError = err; iLineNumber = __LINE__; if(err!=KErrNone) return err; TBuf8<1024> data; err = aRequest.Read(TFsPluginRequest::EData, data); //get data to write iLastError = err; iLineNumber = __LINE__; if(err!=KErrNone) return err; //Now test that we can actually write to this read-only file //Should pass, kerrnone. err = file.Write(pos,data,length); iLastError = err; iLineNumber = __LINE__; if(err!=KErrNone) return err; file.Close(); //We've performed the efsfilewrite, so return kerrcompletion. return KErrCompletion; } return KErrNone; }
/** @internalComponent */ void CStacked3Plugin::FsFileWriteL(TFsPluginRequest& aRequest) { TInt length = 0; TInt64 pos = 0; TFileName filename; TParse parse; TInt err = aRequest.FileName(filename); iLastError = err; iLineNumber = __LINE__; if(err!=KErrNone) User::Leave(err); //trapped in DoRequestL err = aRequest.Read(TFsPluginRequest::ELength, length); iLastError = err; iLineNumber = __LINE__; if(err!=KErrNone) User::Leave(err); //trapped in DoRequestL err = aRequest.Read(TFsPluginRequest::EPosition, pos); iLastError = err; iLineNumber = __LINE__; if(err!=KErrNone) User::Leave(err); //trapped in DoRequestL parse.Set(filename, NULL, NULL); _LOG4(_L("CStacked3Plugin::FsFileWriteL, file: %S, pos: %d, length: %d"), &filename, pos, length); if (aRequest.IsPostOperation()) { _LOG(_L("CStacked3Plugin::FsFileWriteL, post intercept")); } else { _LOG(_L("CStacked3Plugin::FsFileWriteL, pre intercept")); //set up test data for plugin TBuf8<20> wbuffer; wbuffer.Copy(_L8("HELLO WORLD SYMBIAN")); TInt length = wbuffer.Length(); HBufC8* tempBuf = HBufC8::NewMaxLC(length); TPtr8 tempBufPtr((TUint8 *)tempBuf->Des().Ptr(), length, length); RFilePlugin fileplugin(aRequest); err = fileplugin.AdoptFromClient(); iLastError = err; iLineNumber = __LINE__; if(err!=KErrNone) User::Leave(err); //trapped in DoRequestL //write to file err = fileplugin.Write(pos, wbuffer); _LOG2(_L("CStacked3Plugin::FsFileWriteL, RFilePlugin::Write returned %d"), err); iLastError = err; iLineNumber = __LINE__; if(err!=KErrNone) User::Leave(err); //trapped in DoRequestL //read from file err = fileplugin.Read(pos, tempBufPtr); _LOG2(_L("CStackedPlugin::FsFileWriteL, RFilePlugin::Read returned %d"), err); iLastError = err; iLineNumber = __LINE__; if(err!=KErrNone) User::Leave(err); //trapped in DoRequestL //testing the correct thing has been written to the drive err = wbuffer.Compare(tempBufPtr); iLastError = err; iLineNumber = __LINE__; if(err!=KErrNone) User::Leave(err); //trapped in DoRequestL fileplugin.Close(); CleanupStack::PopAndDestroy(); // send request down the stack User::Leave(KErrCompletion); } }