void CSuspendTest::CreateL() { // // Create the eraser thread // iEraser = new(ELeave) CEraser; iEraser->CreateL(); // // Load the device drivers // TInt r; #ifndef SKIP_PDD_LOAD test.Printf( _L("Loading %S\n"), &KLfsDriverName ); r = User::LoadPhysicalDevice( KLfsDriverName ); test( KErrNone == r || KErrAlreadyExists == r ); #endif #ifdef UNMOUNT_DRIVE RFs fs; test( KErrNone == fs.Connect() ); test( KErrNone == fs.SetSessionPath( _L("Z:\\") ) ); TFullName name; fs.FileSystemName( name, KLffsLogicalDriveNumber ); if( name.Length() > 0 ) { test.Printf( _L("Unmounting drive") ); test( KErrNone == fs.DismountFileSystem( _L("Lffs"), KLffsLogicalDriveNumber) ); User::After( 2000000 ); test.Printf( _L("Drive unmounted") ); } fs.Close(); #endif // // Open a TBusLogicalDevice to it // test.Printf( _L("Opening media channel\n") ); TBool changedFlag = EFalse; r = iDrive.Connect( KDriveNumber, changedFlag ); User::LeaveIfError( r ); iDriveOpened = ETrue; // // Get size of Flash drive, block size, block count // TLocalDriveCapsV2Buf info; iDrive.Caps(info); iFlashSize = I64LOW(info().iSize); iBlockSize = info().iEraseBlockSize; iBlockCount = iFlashSize / iBlockSize; test.Printf( _L("Flash size is 0x%x bytes\n"), iFlashSize ); test.Printf( _L("Block size is 0x%x bytes\n"), iBlockSize ); test.Printf( _L("Block count is %d\n"), iBlockCount ); test.Printf( _L("CreateL complete\n") ); }
TInt MountNTFS() { TBuf<256> cmd; User::CommandLine(cmd); TLex cmdlex(cmd); cmdlex.SkipSpace(); TUint c = (TUint)cmdlex.Get(); if (c>='a' && c<='z') c-=0x20; if (c<'A' || c>'Z') return KErrArgument; TBuf<4> driveLetter; driveLetter.SetLength(1); driveLetter[0] = (TText)c; RDebug::Print(_L("Drive %S"), &driveLetter); TInt driveNumber = TInt(c-'A') + TInt(EDriveA); TInt r; driveLetter.Append(_L(":\\")); RDebug::Print(_L("Add file system: %S"), &KFileSystemDllName); r=TheFs.AddFileSystem(KFileSystemDllName); if (r!=KErrNone && r!=KErrAlreadyExists) { RDebug::Print(_L("Failed: %d"), r); return r; } TFullName name; r = TheFs.FileSystemName(name, driveNumber); if (name.Length() != 0) { RDebug::Print(_L("Dismounting %S on drive %S\r\n"), &name, &driveLetter); r=TheFs.DismountFileSystem(name, driveNumber); RDebug::Print(_L("Dismount ret=%d"), r); } RDebug::Print(_L("Mount NTFS on drive %S\r\n"), &driveLetter); r = TheFs.MountFileSystem(KFileSystemName, driveNumber); RDebug::Print(_L("Mount r=%d"),r); return KErrNone; }
/** Dismount MsFS and mount the original FS */ static TInt RestoreMount(TInt driveNumber) { TInt err = KErrNone; TInt x = console->WhereX(); TInt y = console->WhereY(); //-- 1. try dismounting the "MSFS" if (msfsMountedList[driveNumber]) { err = fs.DismountFileSystem(KMsFs, driveNumber); console->SetPos(0, 11); LogPrint(_L("MSFS Dismount:%S (%d)"), (err?&KError:&KOk), err); console->ClearToEndOfLine(); if (err) return err; msfsMountedList[driveNumber] = EFalse; } //-- 2. try to mount the original FS back CFileSystemDescriptor* fsDesc = unmountedFsList[driveNumber]; if(fsDesc) { err = DoRestoreFS(fs, driveNumber, fsDesc); TPtrC ptrN(fsDesc->FsName()); console->SetPos(0, 10); LogPrint(_L("%S Mount: %S (%d)"), &ptrN, (err?&KError:&KOk), err); console->ClearToEndOfLine(); delete fsDesc; unmountedFsList[driveNumber] = NULL; } // restore console position console->SetPos(x,y); return err; }