sl@0: // Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: // All rights reserved. sl@0: // This component and the accompanying materials are made available sl@0: // under the terms of the License "Eclipse Public License v1.0" sl@0: // which accompanies this distribution, and is available sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: // sl@0: // Initial Contributors: sl@0: // Nokia Corporation - initial contribution. sl@0: // sl@0: // Contributors: sl@0: // sl@0: // Description: sl@0: // f32test\plugins\trace\t_tracehook.cpp sl@0: // sl@0: // sl@0: sl@0: #include "t_tracehook.h" sl@0: #include sl@0: sl@0: _LIT(KTracePluginName, "A test plugin which logs all file server messages"); sl@0: sl@0: sl@0: TPtrC GetFunctionName(TInt aFunction) sl@0: // sl@0: // Print number of alloc fails to complete a given function sl@0: // sl@0: { sl@0: switch (aFunction) sl@0: { sl@0: case EFsAddFileSystem: return _L("EFsAddFileSystem"); sl@0: case EFsRemoveFileSystem: return _L("EFsRemoveFileSystem"); sl@0: case EFsMountFileSystem: return _L("EFsMountFileSystem"); sl@0: case EFsNotifyChange: return _L("EFsNotifyChange"); sl@0: case EFsNotifyChangeCancel: return _L("EFsNotifyChangeCancel"); sl@0: case EFsDriveList: return _L("EFsDriveList"); sl@0: case EFsDrive: return _L("EFsDrive"); sl@0: case EFsVolume: return _L("EFsVolume"); sl@0: case EFsSetVolume: return _L("EFsSetVolume"); sl@0: case EFsSubst: return _L("EFsSubst"); sl@0: case EFsSetSubst: return _L("EFsSetSubst"); sl@0: case EFsRealName: return _L("EFsRealName"); sl@0: case EFsDefaultPath: return _L("EFsDefaultPath"); sl@0: case EFsSetDefaultPath: return _L("EFsSetDefaultPath"); sl@0: case EFsSessionPath: return _L("EFsSessionPath"); sl@0: case EFsSetSessionPath: return _L("EFsSetSessionPath"); sl@0: case EFsMkDir: return _L("EFsMkDir"); sl@0: case EFsRmDir: return _L("EFsRmDir"); sl@0: case EFsParse: return _L("EFsParse"); sl@0: case EFsDelete: return _L("EFsDelete"); sl@0: case EFsRename: return _L("EFsRename"); sl@0: case EFsReplace: return _L("EFsReplace"); sl@0: case EFsEntry: return _L("EFsEntry"); sl@0: case EFsSetEntry: return _L("EFsSetEntry"); sl@0: case EFsGetDriveName: return _L("EFsGetDriveName"); sl@0: case EFsSetDriveName: return _L("EFsSetDriveName"); sl@0: case EFsFormatSubClose: return _L("EFsFormatSubClose"); sl@0: case EFsDirSubClose: return _L("EFsDirSubClose"); sl@0: case EFsFileSubClose: return _L("EFsFileSubClose"); sl@0: case EFsRawSubClose: return _L("EFsRawSubClose"); sl@0: case EFsFileOpen: return _L("EFsFileOpen"); sl@0: case EFsFileCreate: return _L("EFsFileCreate"); sl@0: case EFsFileReplace: return _L("EFsFileReplace"); sl@0: case EFsFileTemp: return _L("EFsFileTemp"); sl@0: case EFsFileRead: return _L("EFsFileRead"); sl@0: case EFsFileWrite: return _L("EFsFileWrite"); sl@0: case EFsFileLock: return _L("EFsFileLock"); sl@0: case EFsFileUnLock: return _L("EFsFileUnLock"); sl@0: case EFsFileSeek: return _L("EFsFileSeek"); sl@0: case EFsFileFlush: return _L("EFsFileFlush"); sl@0: case EFsFileSize: return _L("EFsFileSize"); sl@0: case EFsFileSetSize: return _L("EFsFileSetSize"); sl@0: case EFsFileAtt: return _L("EFsFileAtt"); sl@0: case EFsFileSetAtt: return _L("EFsFileSetAtt"); sl@0: case EFsFileModified: return _L("EFsFileModified"); sl@0: case EFsFileSetModified: return _L("EFsFileSetModified"); sl@0: case EFsFileSet: return _L("EFsFileSet"); sl@0: case EFsFileChangeMode: return _L("EFsFileChangeMode"); sl@0: case EFsFileRename: return _L("EFsFileRename"); sl@0: case EFsDirOpen: return _L("EFsDirOpen"); sl@0: case EFsDirReadOne: return _L("EFsDirReadOne"); sl@0: case EFsDirReadPacked: return _L("EFsDirReadPacked"); sl@0: case EFsFormatOpen: return _L("EFsFormatOpen"); sl@0: case EFsFormatNext: return _L("EFsFormatNext"); sl@0: case EFsRawDiskOpen: return _L("EFsRawDiskOpen"); sl@0: case EFsRawDiskRead: return _L("EFsRawDiskRead"); sl@0: case EFsRawDiskWrite: return _L("EFsRawDiskWrite"); sl@0: case EFsResourceCountMarkStart: return _L("EFsResourceCountMarkStart"); sl@0: case EFsResourceCountMarkEnd: return _L("EFsResourceCountMarkEnd"); sl@0: case EFsResourceCount: return _L("EFsResourceCount"); sl@0: case EFsCheckDisk: return _L("EFsCheckDisk"); sl@0: case EFsGetShortName: return _L("EFsGetShortName"); sl@0: case EFsGetLongName: return _L("EFsGetLongName"); sl@0: case EFsIsFileOpen: return _L("EFsIsFileOpen"); sl@0: case EFsListOpenFiles: return _L("EFsListOpenFiles"); sl@0: case EFsGetNotifyUser: return _L("EFsGetNotifyUser"); sl@0: case EFsSetNotifyUser: return _L("EFsSetNotifyUser"); sl@0: case EFsIsFileInRom: return _L("EFsIsFileInRom"); sl@0: case EFsIsValidName: return _L("EFsIsValidName"); sl@0: case EFsDebugFunction: return _L("EFsDebugFunction"); sl@0: case EFsReadFileSection: return _L("EFsReadFileSection"); sl@0: case EFsNotifyChangeEx: return _L("EFsNotifyChangeEx"); sl@0: case EFsNotifyChangeCancelEx: return _L("EFsNotifyChangeCancelEx"); sl@0: case EFsDismountFileSystem: return _L("EFsDismountFileSystem"); sl@0: case EFsFileSystemName: return _L("EFsFileSystemName"); sl@0: case EFsScanDrive: return _L("EFsScanDrive"); sl@0: case EFsControlIo: return _L("EFsControlIo"); sl@0: case EFsLockDrive: return _L("EFsLockDrive"); sl@0: case EFsUnlockDrive: return _L("EFsUnlockDrive"); sl@0: case EFsClearPassword: return _L("EFsClearPassword"); sl@0: case EFsNotifyDiskSpace: return _L("EFsNotifyDiskSpace"); sl@0: case EFsNotifyDiskSpaceCancel: return _L("EFsNotifyDiskSpaceCancel"); sl@0: case EFsFileDrive: return _L("EFsFileDrive"); sl@0: case EFsRemountDrive: return _L("EFsRemountDrive"); sl@0: case EFsMountFileSystemScan: return _L("EFsMountFileSystemScan"); sl@0: case EFsSessionToPrivate: return _L("EFsSessionToPrivate"); sl@0: case EFsPrivatePath: return _L("EFsPrivatePath"); sl@0: case EFsCreatePrivatePath: return _L("EFsCreatePrivatePath"); sl@0: case EFsAddExtension: return _L("EFsAddExtension"); sl@0: case EFsMountExtension: return _L("EFsMountExtension"); sl@0: case EFsDismountExtension: return _L("EFsDismountExtension"); sl@0: case EFsRemoveExtension: return _L("EFsRemoveExtension"); sl@0: case EFsExtensionName: return _L("EFsExtensionName"); sl@0: case EFsStartupInitComplete: return _L("EFsStartupInitComplete"); sl@0: case EFsSetLocalDriveMapping: return _L("EFsSetLocalDriveMapping"); sl@0: case EFsFinaliseDrive: return _L("EFsFinaliseDrive"); sl@0: case EFsFileDuplicate: return _L("EFsFileDuplicate"); sl@0: case EFsFileAdopt: return _L("EFsFileAdopt"); sl@0: case EFsSwapFileSystem: return _L("EFsSwapFileSystem"); sl@0: case EFsErasePassword: return _L("EFsErasePassword"); sl@0: case EFsReserveDriveSpace: return _L("EFsReserveDriveSpace"); sl@0: case EFsGetReserveAccess: return _L("EFsGetReserveAccess"); sl@0: case EFsReleaseReserveAccess: return _L("EFsReleaseReserveAccess"); sl@0: case EFsFileName: return _L("EFsFileName"); sl@0: case EFsGetMediaSerialNumber: return _L("EFsGetMediaSerialNumber"); sl@0: case EFsFileFullName: return _L("EFsFileFullName"); sl@0: case EFsAddPlugin: return _L("EFsAddPlugin"); sl@0: case EFsRemovePlugin: return _L("EFsRemovePlugin"); sl@0: case EFsMountPlugin: return _L("EFsMountPlugin"); sl@0: case EFsDismountPlugin: return _L("EFsDismountPlugin"); sl@0: case EFsPluginName: return _L("EFsPluginName"); sl@0: case EFsPluginOpen: return _L("EFsPluginOpen"); sl@0: case EFsPluginSubClose: return _L("EFsPluginSubClose"); sl@0: case EFsPluginDoRequest: return _L("EFsPluginDoRequest"); sl@0: case EFsPluginDoControl: return _L("EFsPluginDoControl"); sl@0: case EFsPluginDoCancel: return _L("EFsPluginDoCancel"); sl@0: case EFsNotifyDismount: return _L("EFsNotifyDismount"); sl@0: case EFsNotifyDismountCancel: return _L("EFsNotifyDismountCancel"); sl@0: case EFsAllowDismount: return _L("EFsAllowDismount"); sl@0: case EFsSetStartupConfiguration: return _L("EFsSetStartupConfiguration"); sl@0: case EFsFileReadCancel: return _L("EFsFileReadCancel"); sl@0: case EFsAddCompositeMount: return _L("EFsAddCompositeMount"); sl@0: case EFsSetSessionFlags: return _L("EFsSetSessionFlags"); sl@0: case EFsSetSystemDrive: return _L("EFsSetSystemDrive"); sl@0: case EFsBlockMap: return _L("EFsBlockMap"); sl@0: case EFsUnclamp: return _L("EFsUnclamp"); sl@0: case EFsFileClamp: return _L("EFsFileClamp"); sl@0: case EFsQueryVolumeInfoExt: return _L("EFsQueryVolumeInfoExt"); sl@0: case EFsInitialisePropertiesFile: return _L("EFsInitialisePropertiesFile"); sl@0: case EFsFileWriteDirty: return _L("EFsFileWriteDirty"); sl@0: case EFsSynchroniseDriveThread: return _L("EFsSynchroniseDriveThread"); sl@0: default: sl@0: return _L("Error unknown function"); sl@0: } sl@0: } sl@0: /** sl@0: Leaving New function for the plugin sl@0: @internalComponent sl@0: */ sl@0: CTestTraceHook* CTestTraceHook::NewL() sl@0: { sl@0: return new(ELeave) CTestTraceHook; sl@0: } sl@0: sl@0: sl@0: /** sl@0: Constructor for the plugin sl@0: @internalComponent sl@0: */ sl@0: CTestTraceHook::CTestTraceHook() sl@0: { sl@0: } sl@0: sl@0: sl@0: /** sl@0: The destructor for the test trace plugin hook. sl@0: @internalComponent sl@0: */ sl@0: CTestTraceHook::~CTestTraceHook() sl@0: { sl@0: iFs.Close(); sl@0: } sl@0: sl@0: /** sl@0: Initialise the trace plugin. sl@0: @internalComponent sl@0: */ sl@0: void CTestTraceHook::InitialiseL() sl@0: { sl@0: User::LeaveIfError(RegisterIntercept(EFsAddFileSystem , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsRemoveFileSystem , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsMountFileSystem , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsNotifyChange , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsNotifyChangeCancel , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsDriveList , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsDrive , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsVolume , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsSetVolume , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsSubst , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsSetSubst , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsRealName , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsDefaultPath , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsSetDefaultPath , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsSessionPath , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsSetSessionPath , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsMkDir , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsRmDir , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsParse , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsDelete , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsRename , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsReplace , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsEntry , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsSetEntry , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsGetDriveName , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsSetDriveName , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsFormatSubClose , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsDirSubClose , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsFileSubClose , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsRawSubClose , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsFileOpen , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsFileCreate , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsFileReplace , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsFileTemp , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsFileRead , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsFileWrite , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsFileLock , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsFileUnLock , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsFileSeek , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsFileFlush , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsFileSize , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsFileSetSize , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsFileAtt , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsFileSetAtt , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsFileModified , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsFileSetModified , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsFileSet , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsFileChangeMode , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsFileRename , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsDirOpen , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsDirReadOne , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsDirReadPacked , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsFormatOpen , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsFormatNext , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsRawDiskOpen , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsRawDiskRead , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsRawDiskWrite , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsResourceCountMarkStart , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsResourceCountMarkEnd , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsResourceCount , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsCheckDisk , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsGetShortName , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsGetLongName , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsIsFileOpen , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsListOpenFiles , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsGetNotifyUser , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsSetNotifyUser , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsIsFileInRom , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsIsValidName , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsDebugFunction , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsReadFileSection , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsNotifyChangeEx , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsNotifyChangeCancelEx , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsDismountFileSystem , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsFileSystemName , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsScanDrive , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsControlIo , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsLockDrive , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsUnlockDrive , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsClearPassword , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsNotifyDiskSpace , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsNotifyDiskSpaceCancel , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsFileDrive , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsRemountDrive , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsMountFileSystemScan , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsSessionToPrivate , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsPrivatePath , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsCreatePrivatePath , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsAddExtension , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsMountExtension , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsDismountExtension , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsRemoveExtension , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsExtensionName , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsStartupInitComplete , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsSetLocalDriveMapping , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsFinaliseDrive , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsFileDuplicate , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsFileAdopt , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsSwapFileSystem , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsErasePassword , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsReserveDriveSpace , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsGetReserveAccess , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsReleaseReserveAccess , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsFileName , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsGetMediaSerialNumber , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsFileFullName , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsAddPlugin , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsRemovePlugin , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsMountPlugin , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsPluginName , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsPluginOpen , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsPluginSubClose , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsPluginDoRequest , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsPluginDoControl , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsPluginDoCancel , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsNotifyDismount , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsNotifyDismountCancel , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsAllowDismount , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsSetStartupConfiguration , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsFileReadCancel , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsAddCompositeMount , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsSetSessionFlags , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsSetSystemDrive , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsBlockMap , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsUnclamp , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsFileClamp , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsQueryVolumeInfoExt , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsInitialisePropertiesFile , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsFileWriteDirty , EPrePostIntercept)); sl@0: User::LeaveIfError(RegisterIntercept(EFsSynchroniseDriveThread , EPrePostIntercept)); sl@0: sl@0: sl@0: sl@0: User::LeaveIfError(iFs.Connect()); sl@0: } sl@0: sl@0: /** sl@0: @internalComponent sl@0: */ sl@0: TInt CTestTraceHook::DoRequestL(TFsPluginRequest& aRequest) sl@0: { sl@0: TInt err = KErrNone; sl@0: sl@0: TInt function = aRequest.Function(); sl@0: sl@0: iDrvNumber = aRequest.DriveNumber(); sl@0: sl@0: TPtrC functionName = GetFunctionName(function); sl@0: sl@0: sl@0: if (!aRequest.IsPostOperation()) sl@0: { sl@0: iPreIntercepts++; sl@0: TFileName name; sl@0: sl@0: TInt nameRet = GetName(&aRequest, name); sl@0: if (nameRet == KErrNotSupported) sl@0: nameRet = GetPath(&aRequest, name); sl@0: sl@0: TFileName newName; sl@0: TInt newNameRet = GetNewName(&aRequest, newName); sl@0: sl@0: TInt len; sl@0: TInt pos; sl@0: TInt fileAccessRet = GetFileAccessInfo(&aRequest, len, pos); sl@0: sl@0: if (newNameRet == KErrNone) sl@0: RDebug::Print(_L(">%S\t(%S,%S)"), &functionName, &name, &newName); sl@0: else if (fileAccessRet == KErrNone) sl@0: RDebug::Print(_L(">%S\t%08X@%08X\t(%S)"), &functionName, len, pos, &name); sl@0: else if (nameRet == KErrNone) sl@0: RDebug::Print(_L(">%S\t(%S)"), &functionName, &name); sl@0: else sl@0: RDebug::Print(_L(">%S"), &functionName); sl@0: } sl@0: else sl@0: { sl@0: iPostIntercepts++; sl@0: sl@0: // we should never see any internal file caching requests sl@0: ASSERT(function != EFsFileWriteDirty); sl@0: sl@0: // for EFsFileSubClose, check we can read the file name & use the request's message handle sl@0: if (function == EFsFileSubClose) sl@0: { sl@0: TFileName fileName; sl@0: #ifdef _DEBUG sl@0: TInt r = sl@0: #endif sl@0: GetName( &aRequest, fileName); sl@0: ASSERT(r == KErrNone); sl@0: // get process id (uses message handle) sl@0: TUid processId = aRequest.Message().Identity(); sl@0: RDebug::Print(_L("<%S\t(%S), PID %X"),&functionName, &fileName, processId.iUid); sl@0: } sl@0: else sl@0: { sl@0: RDebug::Print(_L("<%S"), &functionName); sl@0: } sl@0: } sl@0: sl@0: return err; sl@0: } sl@0: sl@0: sl@0: sl@0: sl@0: /** sl@0: @internalComponent sl@0: */ sl@0: TInt CTestTraceHook::TracePluginName(TDes& aName) sl@0: { sl@0: aName = KTracePluginName; sl@0: return KErrNone; sl@0: } sl@0: sl@0: sl@0: sl@0: sl@0: //factory functions sl@0: sl@0: class CTraceHookFactory : public CFsPluginFactory sl@0: { sl@0: public: sl@0: CTraceHookFactory(); sl@0: virtual TInt Install(); sl@0: virtual CFsPlugin* NewPluginL(); sl@0: virtual CFsPlugin* NewPluginConnL(); sl@0: virtual TInt UniquePosition(); sl@0: }; sl@0: sl@0: /** sl@0: Constructor for the plugin factory sl@0: @internalComponent sl@0: */ sl@0: CTraceHookFactory::CTraceHookFactory() sl@0: { sl@0: } sl@0: sl@0: /** sl@0: Install function for the plugin factory sl@0: @internalComponent sl@0: */ sl@0: TInt CTraceHookFactory::Install() sl@0: { sl@0: iSupportedDrives = KPluginAutoAttach; sl@0: sl@0: _LIT(KTraceHookName,"TraceHook"); sl@0: return(SetName(&KTraceHookName)); sl@0: } sl@0: sl@0: /** sl@0: @internalComponent sl@0: */ sl@0: TInt CTraceHookFactory::UniquePosition() sl@0: { sl@0: return(0x1EC); sl@0: } sl@0: sl@0: /** sl@0: Plugin factory function sl@0: @internalComponent sl@0: */ sl@0: CFsPlugin* CTraceHookFactory::NewPluginL() sl@0: sl@0: { sl@0: return CTestTraceHook::NewL(); sl@0: } sl@0: sl@0: /** sl@0: Plugin factory function sl@0: @internalComponent sl@0: */ sl@0: CFsPlugin* CTraceHookFactory::NewPluginConnL() sl@0: sl@0: { sl@0: return CTestTraceHook::NewL(); sl@0: } sl@0: sl@0: /** sl@0: Create a new Plugin sl@0: @internalComponent sl@0: */ sl@0: extern "C" { sl@0: sl@0: EXPORT_C CFsPluginFactory* CreateFileSystem() sl@0: { sl@0: return(new CTraceHookFactory()); sl@0: } sl@0: } sl@0: