os/kernelhwsrv/kerneltest/f32test/plugins/version_2beta/trace/t_tracehook.cpp
author sl@SLION-WIN7.fritz.box
Fri, 15 Jun 2012 03:10:57 +0200
changeset 0 bde4ae8d615e
permissions -rw-r--r--
First public contribution.
     1 // Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
     2 // All rights reserved.
     3 // This component and the accompanying materials are made available
     4 // under the terms of the License "Eclipse Public License v1.0"
     5 // which accompanies this distribution, and is available
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
     7 //
     8 // Initial Contributors:
     9 // Nokia Corporation - initial contribution.
    10 //
    11 // Contributors:
    12 //
    13 // Description:
    14 // f32test\plugins\trace\t_tracehook.cpp
    15 // 
    16 //
    17 
    18 #include "t_tracehook.h"
    19 #include <f32pluginutils.h>
    20 
    21 _LIT(KTracePluginName, "A test plugin which logs all file server messages");
    22 
    23 
    24 TPtrC GetFunctionName(TInt aFunction)
    25 //
    26 // Print number of alloc fails to complete a given function
    27 //
    28 	{
    29 	switch (aFunction)
    30 		{
    31 		case EFsAddFileSystem: return _L("EFsAddFileSystem");
    32 		case EFsRemoveFileSystem: return _L("EFsRemoveFileSystem");
    33 		case EFsMountFileSystem: return _L("EFsMountFileSystem");
    34 		case EFsNotifyChange: return _L("EFsNotifyChange");
    35 		case EFsNotifyChangeCancel: return _L("EFsNotifyChangeCancel");
    36 		case EFsDriveList: return _L("EFsDriveList");
    37 		case EFsDrive: return _L("EFsDrive");
    38 		case EFsVolume: return _L("EFsVolume");
    39 		case EFsSetVolume: return _L("EFsSetVolume");
    40 		case EFsSubst: return _L("EFsSubst");
    41 		case EFsSetSubst: return _L("EFsSetSubst");
    42 		case EFsRealName: return _L("EFsRealName");
    43 		case EFsDefaultPath: return _L("EFsDefaultPath");
    44 		case EFsSetDefaultPath: return _L("EFsSetDefaultPath");
    45 		case EFsSessionPath: return _L("EFsSessionPath");
    46 		case EFsSetSessionPath: return _L("EFsSetSessionPath");
    47 		case EFsMkDir: return _L("EFsMkDir");
    48 		case EFsRmDir: return _L("EFsRmDir");
    49 		case EFsParse: return _L("EFsParse");
    50 		case EFsDelete: return _L("EFsDelete");
    51 		case EFsRename: return _L("EFsRename");
    52 		case EFsReplace: return _L("EFsReplace");
    53 		case EFsEntry: return _L("EFsEntry");
    54 		case EFsSetEntry: return _L("EFsSetEntry");
    55 		case EFsGetDriveName: return _L("EFsGetDriveName");
    56 		case EFsSetDriveName: return _L("EFsSetDriveName");
    57 		case EFsFormatSubClose: return _L("EFsFormatSubClose");
    58 		case EFsDirSubClose: return _L("EFsDirSubClose");
    59 		case EFsFileSubClose: return _L("EFsFileSubClose");
    60 		case EFsRawSubClose: return _L("EFsRawSubClose");
    61 		case EFsFileOpen: return _L("EFsFileOpen");
    62 		case EFsFileCreate: return _L("EFsFileCreate");
    63 		case EFsFileReplace: return _L("EFsFileReplace");
    64 		case EFsFileTemp: return _L("EFsFileTemp");
    65 		case EFsFileRead: return _L("EFsFileRead");
    66 		case EFsFileWrite: return _L("EFsFileWrite");
    67 		case EFsFileLock: return _L("EFsFileLock");
    68 		case EFsFileUnLock: return _L("EFsFileUnLock");
    69 		case EFsFileSeek: return _L("EFsFileSeek");
    70 		case EFsFileFlush: return _L("EFsFileFlush");
    71 		case EFsFileSize: return _L("EFsFileSize");
    72 		case EFsFileSetSize: return _L("EFsFileSetSize");
    73 		case EFsFileAtt: return _L("EFsFileAtt");
    74 		case EFsFileSetAtt: return _L("EFsFileSetAtt");
    75 		case EFsFileModified: return _L("EFsFileModified");
    76 		case EFsFileSetModified: return _L("EFsFileSetModified");
    77 		case EFsFileSet: return _L("EFsFileSet");
    78 		case EFsFileChangeMode: return _L("EFsFileChangeMode");
    79 		case EFsFileRename: return _L("EFsFileRename");
    80 		case EFsDirOpen: return _L("EFsDirOpen");
    81 		case EFsDirReadOne: return _L("EFsDirReadOne");
    82 		case EFsDirReadPacked: return _L("EFsDirReadPacked");
    83 		case EFsFormatOpen: return _L("EFsFormatOpen");
    84 		case EFsFormatNext: return _L("EFsFormatNext");
    85 		case EFsRawDiskOpen: return _L("EFsRawDiskOpen");
    86 		case EFsRawDiskRead: return _L("EFsRawDiskRead");
    87 		case EFsRawDiskWrite: return _L("EFsRawDiskWrite");
    88 		case EFsResourceCountMarkStart: return _L("EFsResourceCountMarkStart");
    89 		case EFsResourceCountMarkEnd: return _L("EFsResourceCountMarkEnd");
    90 		case EFsResourceCount: return _L("EFsResourceCount");
    91 		case EFsCheckDisk: return _L("EFsCheckDisk");
    92 		case EFsGetShortName: return _L("EFsGetShortName");
    93 		case EFsGetLongName: return _L("EFsGetLongName");
    94 		case EFsIsFileOpen: return _L("EFsIsFileOpen");
    95 		case EFsListOpenFiles: return _L("EFsListOpenFiles");
    96 		case EFsGetNotifyUser: return _L("EFsGetNotifyUser");
    97 		case EFsSetNotifyUser: return _L("EFsSetNotifyUser");
    98 		case EFsIsFileInRom: return _L("EFsIsFileInRom");
    99 		case EFsIsValidName: return _L("EFsIsValidName");
   100 		case EFsDebugFunction: return _L("EFsDebugFunction");
   101 		case EFsReadFileSection: return _L("EFsReadFileSection");
   102 		case EFsNotifyChangeEx: return _L("EFsNotifyChangeEx");
   103 		case EFsNotifyChangeCancelEx: return _L("EFsNotifyChangeCancelEx");
   104 		case EFsDismountFileSystem: return _L("EFsDismountFileSystem");
   105 		case EFsFileSystemName: return _L("EFsFileSystemName");
   106 		case EFsScanDrive: return _L("EFsScanDrive");
   107 		case EFsControlIo: return _L("EFsControlIo");
   108 		case EFsLockDrive: return _L("EFsLockDrive");
   109 		case EFsUnlockDrive: return _L("EFsUnlockDrive");
   110 		case EFsClearPassword: return _L("EFsClearPassword");
   111 		case EFsNotifyDiskSpace: return _L("EFsNotifyDiskSpace");
   112 		case EFsNotifyDiskSpaceCancel: return _L("EFsNotifyDiskSpaceCancel");
   113 		case EFsFileDrive: return _L("EFsFileDrive");
   114 		case EFsRemountDrive: return _L("EFsRemountDrive");
   115 		case EFsMountFileSystemScan: return _L("EFsMountFileSystemScan");
   116 		case EFsSessionToPrivate: return _L("EFsSessionToPrivate");
   117 		case EFsPrivatePath: return _L("EFsPrivatePath");
   118 		case EFsCreatePrivatePath: return _L("EFsCreatePrivatePath");
   119 		case EFsAddExtension: return _L("EFsAddExtension");
   120 		case EFsMountExtension: return _L("EFsMountExtension");
   121 		case EFsDismountExtension: return _L("EFsDismountExtension");
   122 		case EFsRemoveExtension: return _L("EFsRemoveExtension");
   123 		case EFsExtensionName: return _L("EFsExtensionName");
   124 		case EFsStartupInitComplete: return _L("EFsStartupInitComplete");
   125 		case EFsSetLocalDriveMapping: return _L("EFsSetLocalDriveMapping");
   126 		case EFsFinaliseDrive: return _L("EFsFinaliseDrive");
   127 		case EFsFileDuplicate: return _L("EFsFileDuplicate");
   128 		case EFsFileAdopt: return _L("EFsFileAdopt");
   129 		case EFsSwapFileSystem: return _L("EFsSwapFileSystem");
   130 		case EFsErasePassword: return _L("EFsErasePassword");
   131 		case EFsReserveDriveSpace: return _L("EFsReserveDriveSpace");
   132 		case EFsGetReserveAccess: return _L("EFsGetReserveAccess");
   133 		case EFsReleaseReserveAccess: return _L("EFsReleaseReserveAccess");
   134 		case EFsFileName: return _L("EFsFileName");
   135 		case EFsGetMediaSerialNumber: return _L("EFsGetMediaSerialNumber");
   136 		case EFsFileFullName: return _L("EFsFileFullName");
   137 		case EFsAddPlugin: return _L("EFsAddPlugin");
   138 		case EFsRemovePlugin: return _L("EFsRemovePlugin");
   139 		case EFsMountPlugin: return _L("EFsMountPlugin");
   140 		case EFsDismountPlugin: return _L("EFsDismountPlugin");
   141 		case EFsPluginName: return _L("EFsPluginName");
   142 		case EFsPluginOpen: return _L("EFsPluginOpen");
   143 		case EFsPluginSubClose: return _L("EFsPluginSubClose");
   144 		case EFsPluginDoRequest: return _L("EFsPluginDoRequest");
   145 		case EFsPluginDoControl: return _L("EFsPluginDoControl");
   146 		case EFsPluginDoCancel: return _L("EFsPluginDoCancel");
   147 		case EFsNotifyDismount: return _L("EFsNotifyDismount");
   148 		case EFsNotifyDismountCancel: return _L("EFsNotifyDismountCancel");
   149 		case EFsAllowDismount: return _L("EFsAllowDismount");
   150 		case EFsSetStartupConfiguration: return _L("EFsSetStartupConfiguration");
   151 		case EFsFileReadCancel: return _L("EFsFileReadCancel");
   152 		case EFsAddCompositeMount: return _L("EFsAddCompositeMount");
   153 		case EFsSetSessionFlags: return _L("EFsSetSessionFlags");
   154 		case EFsSetSystemDrive: return _L("EFsSetSystemDrive");
   155 		case EFsBlockMap: return _L("EFsBlockMap");
   156 		case EFsUnclamp: return _L("EFsUnclamp");
   157 		case EFsFileClamp: return _L("EFsFileClamp");
   158 		case EFsQueryVolumeInfoExt: return _L("EFsQueryVolumeInfoExt");
   159 		case EFsInitialisePropertiesFile: return _L("EFsInitialisePropertiesFile");
   160 		case EFsFileWriteDirty: return _L("EFsFileWriteDirty");
   161 		case EFsSynchroniseDriveThread: return _L("EFsSynchroniseDriveThread");
   162 		default:
   163 			return _L("Error unknown function");
   164 		}
   165 	}
   166 /**
   167 Leaving New function for the plugin
   168 @internalComponent
   169 */
   170 CTestTraceHook* CTestTraceHook::NewL()
   171 	{
   172 	return new(ELeave) CTestTraceHook;
   173 	}
   174 
   175 
   176 /**
   177 Constructor for the plugin
   178 @internalComponent
   179 */
   180 CTestTraceHook::CTestTraceHook()
   181 	{
   182 	}
   183 
   184 
   185 /**
   186 The destructor for the test trace plugin hook. 
   187 @internalComponent
   188 */
   189 CTestTraceHook::~CTestTraceHook()
   190 	{
   191 	iFs.Close();
   192 	}
   193 
   194 /**
   195 Initialise the trace plugin.
   196 @internalComponent
   197 */
   198 void CTestTraceHook::InitialiseL()
   199 	{
   200 	User::LeaveIfError(RegisterIntercept(EFsAddFileSystem				,	EPrePostIntercept));
   201 	User::LeaveIfError(RegisterIntercept(EFsRemoveFileSystem			,	EPrePostIntercept));
   202 	User::LeaveIfError(RegisterIntercept(EFsMountFileSystem				,	EPrePostIntercept));
   203 	User::LeaveIfError(RegisterIntercept(EFsNotifyChange				,	EPrePostIntercept));
   204 	User::LeaveIfError(RegisterIntercept(EFsNotifyChangeCancel			,	EPrePostIntercept));
   205 	User::LeaveIfError(RegisterIntercept(EFsDriveList					,	EPrePostIntercept));
   206 	User::LeaveIfError(RegisterIntercept(EFsDrive						,	EPrePostIntercept));
   207 	User::LeaveIfError(RegisterIntercept(EFsVolume						,	EPrePostIntercept));
   208 	User::LeaveIfError(RegisterIntercept(EFsSetVolume					,	EPrePostIntercept));
   209 	User::LeaveIfError(RegisterIntercept(EFsSubst						,	EPrePostIntercept));
   210 	User::LeaveIfError(RegisterIntercept(EFsSetSubst					,	EPrePostIntercept));
   211 	User::LeaveIfError(RegisterIntercept(EFsRealName					,	EPrePostIntercept));
   212 	User::LeaveIfError(RegisterIntercept(EFsDefaultPath					,	EPrePostIntercept));
   213 	User::LeaveIfError(RegisterIntercept(EFsSetDefaultPath				,	EPrePostIntercept));
   214 	User::LeaveIfError(RegisterIntercept(EFsSessionPath					,	EPrePostIntercept));
   215 	User::LeaveIfError(RegisterIntercept(EFsSetSessionPath				,	EPrePostIntercept));
   216 	User::LeaveIfError(RegisterIntercept(EFsMkDir						,	EPrePostIntercept));
   217 	User::LeaveIfError(RegisterIntercept(EFsRmDir						,	EPrePostIntercept));
   218 	User::LeaveIfError(RegisterIntercept(EFsParse						,	EPrePostIntercept));
   219 	User::LeaveIfError(RegisterIntercept(EFsDelete						,	EPrePostIntercept));
   220 	User::LeaveIfError(RegisterIntercept(EFsRename						,	EPrePostIntercept));
   221 	User::LeaveIfError(RegisterIntercept(EFsReplace						,	EPrePostIntercept));
   222 	User::LeaveIfError(RegisterIntercept(EFsEntry						,	EPrePostIntercept));
   223 	User::LeaveIfError(RegisterIntercept(EFsSetEntry					,	EPrePostIntercept));
   224 	User::LeaveIfError(RegisterIntercept(EFsGetDriveName				,	EPrePostIntercept));
   225 	User::LeaveIfError(RegisterIntercept(EFsSetDriveName				,	EPrePostIntercept));
   226 	User::LeaveIfError(RegisterIntercept(EFsFormatSubClose				,	EPrePostIntercept));
   227 	User::LeaveIfError(RegisterIntercept(EFsDirSubClose					,	EPrePostIntercept));
   228 	User::LeaveIfError(RegisterIntercept(EFsFileSubClose				,	EPrePostIntercept));
   229 	User::LeaveIfError(RegisterIntercept(EFsRawSubClose					,	EPrePostIntercept));
   230 	User::LeaveIfError(RegisterIntercept(EFsFileOpen					,	EPrePostIntercept));
   231 	User::LeaveIfError(RegisterIntercept(EFsFileCreate					,	EPrePostIntercept));
   232 	User::LeaveIfError(RegisterIntercept(EFsFileReplace					,	EPrePostIntercept));
   233 	User::LeaveIfError(RegisterIntercept(EFsFileTemp					,	EPrePostIntercept));
   234 	User::LeaveIfError(RegisterIntercept(EFsFileRead					,	EPrePostIntercept));
   235 	User::LeaveIfError(RegisterIntercept(EFsFileWrite					,	EPrePostIntercept));
   236 	User::LeaveIfError(RegisterIntercept(EFsFileLock					,	EPrePostIntercept));
   237 	User::LeaveIfError(RegisterIntercept(EFsFileUnLock					,	EPrePostIntercept));
   238 	User::LeaveIfError(RegisterIntercept(EFsFileSeek					,	EPrePostIntercept));
   239 	User::LeaveIfError(RegisterIntercept(EFsFileFlush					,	EPrePostIntercept));
   240 	User::LeaveIfError(RegisterIntercept(EFsFileSize					,	EPrePostIntercept));
   241 	User::LeaveIfError(RegisterIntercept(EFsFileSetSize					,	EPrePostIntercept));
   242 	User::LeaveIfError(RegisterIntercept(EFsFileAtt						,	EPrePostIntercept));
   243 	User::LeaveIfError(RegisterIntercept(EFsFileSetAtt					,	EPrePostIntercept));
   244 	User::LeaveIfError(RegisterIntercept(EFsFileModified				,	EPrePostIntercept));
   245 	User::LeaveIfError(RegisterIntercept(EFsFileSetModified				,	EPrePostIntercept));
   246 	User::LeaveIfError(RegisterIntercept(EFsFileSet						,	EPrePostIntercept));
   247 	User::LeaveIfError(RegisterIntercept(EFsFileChangeMode				,	EPrePostIntercept));
   248 	User::LeaveIfError(RegisterIntercept(EFsFileRename					,	EPrePostIntercept));
   249 	User::LeaveIfError(RegisterIntercept(EFsDirOpen						,	EPrePostIntercept));
   250 	User::LeaveIfError(RegisterIntercept(EFsDirReadOne					,	EPrePostIntercept));
   251 	User::LeaveIfError(RegisterIntercept(EFsDirReadPacked				,	EPrePostIntercept));
   252 	User::LeaveIfError(RegisterIntercept(EFsFormatOpen					,	EPrePostIntercept));
   253 	User::LeaveIfError(RegisterIntercept(EFsFormatNext					,	EPrePostIntercept));
   254 	User::LeaveIfError(RegisterIntercept(EFsRawDiskOpen					,	EPrePostIntercept));
   255 	User::LeaveIfError(RegisterIntercept(EFsRawDiskRead					,	EPrePostIntercept));
   256 	User::LeaveIfError(RegisterIntercept(EFsRawDiskWrite				,	EPrePostIntercept));
   257 	User::LeaveIfError(RegisterIntercept(EFsResourceCountMarkStart		,	EPrePostIntercept));
   258 	User::LeaveIfError(RegisterIntercept(EFsResourceCountMarkEnd		,	EPrePostIntercept));
   259 	User::LeaveIfError(RegisterIntercept(EFsResourceCount				,	EPrePostIntercept));
   260 	User::LeaveIfError(RegisterIntercept(EFsCheckDisk					,	EPrePostIntercept));
   261 	User::LeaveIfError(RegisterIntercept(EFsGetShortName				,	EPrePostIntercept));
   262 	User::LeaveIfError(RegisterIntercept(EFsGetLongName					,	EPrePostIntercept));
   263 	User::LeaveIfError(RegisterIntercept(EFsIsFileOpen					,	EPrePostIntercept));
   264 	User::LeaveIfError(RegisterIntercept(EFsListOpenFiles				,	EPrePostIntercept));
   265 	User::LeaveIfError(RegisterIntercept(EFsGetNotifyUser				,	EPrePostIntercept));
   266 	User::LeaveIfError(RegisterIntercept(EFsSetNotifyUser				,	EPrePostIntercept));
   267 	User::LeaveIfError(RegisterIntercept(EFsIsFileInRom					,	EPrePostIntercept));
   268 	User::LeaveIfError(RegisterIntercept(EFsIsValidName					,	EPrePostIntercept));
   269 	User::LeaveIfError(RegisterIntercept(EFsDebugFunction				,	EPrePostIntercept));
   270 	User::LeaveIfError(RegisterIntercept(EFsReadFileSection				,	EPrePostIntercept));
   271 	User::LeaveIfError(RegisterIntercept(EFsNotifyChangeEx				,	EPrePostIntercept));
   272 	User::LeaveIfError(RegisterIntercept(EFsNotifyChangeCancelEx		,	EPrePostIntercept));
   273 	User::LeaveIfError(RegisterIntercept(EFsDismountFileSystem			,	EPrePostIntercept));
   274 	User::LeaveIfError(RegisterIntercept(EFsFileSystemName				,	EPrePostIntercept));
   275 	User::LeaveIfError(RegisterIntercept(EFsScanDrive					,	EPrePostIntercept));
   276 	User::LeaveIfError(RegisterIntercept(EFsControlIo					,	EPrePostIntercept));
   277 	User::LeaveIfError(RegisterIntercept(EFsLockDrive					,	EPrePostIntercept));
   278 	User::LeaveIfError(RegisterIntercept(EFsUnlockDrive					,	EPrePostIntercept));
   279 	User::LeaveIfError(RegisterIntercept(EFsClearPassword				,	EPrePostIntercept));
   280 	User::LeaveIfError(RegisterIntercept(EFsNotifyDiskSpace				,	EPrePostIntercept));
   281 	User::LeaveIfError(RegisterIntercept(EFsNotifyDiskSpaceCancel		,	EPrePostIntercept));
   282 	User::LeaveIfError(RegisterIntercept(EFsFileDrive					,	EPrePostIntercept));
   283 	User::LeaveIfError(RegisterIntercept(EFsRemountDrive				,	EPrePostIntercept));
   284 	User::LeaveIfError(RegisterIntercept(EFsMountFileSystemScan			,	EPrePostIntercept));
   285 	User::LeaveIfError(RegisterIntercept(EFsSessionToPrivate			,	EPrePostIntercept));
   286 	User::LeaveIfError(RegisterIntercept(EFsPrivatePath					,	EPrePostIntercept));
   287 	User::LeaveIfError(RegisterIntercept(EFsCreatePrivatePath			,	EPrePostIntercept));
   288 	User::LeaveIfError(RegisterIntercept(EFsAddExtension				,	EPrePostIntercept));
   289 	User::LeaveIfError(RegisterIntercept(EFsMountExtension				,	EPrePostIntercept));
   290 	User::LeaveIfError(RegisterIntercept(EFsDismountExtension			,	EPrePostIntercept));
   291 	User::LeaveIfError(RegisterIntercept(EFsRemoveExtension				,	EPrePostIntercept));
   292 	User::LeaveIfError(RegisterIntercept(EFsExtensionName				,	EPrePostIntercept));
   293 	User::LeaveIfError(RegisterIntercept(EFsStartupInitComplete			,	EPrePostIntercept));
   294 	User::LeaveIfError(RegisterIntercept(EFsSetLocalDriveMapping		,	EPrePostIntercept));
   295 	User::LeaveIfError(RegisterIntercept(EFsFinaliseDrive				,	EPrePostIntercept));
   296 	User::LeaveIfError(RegisterIntercept(EFsFileDuplicate				,	EPrePostIntercept));
   297 	User::LeaveIfError(RegisterIntercept(EFsFileAdopt					,	EPrePostIntercept));
   298 	User::LeaveIfError(RegisterIntercept(EFsSwapFileSystem				,	EPrePostIntercept));
   299 	User::LeaveIfError(RegisterIntercept(EFsErasePassword				,	EPrePostIntercept));
   300 	User::LeaveIfError(RegisterIntercept(EFsReserveDriveSpace			,	EPrePostIntercept));
   301 	User::LeaveIfError(RegisterIntercept(EFsGetReserveAccess			,	EPrePostIntercept));
   302 	User::LeaveIfError(RegisterIntercept(EFsReleaseReserveAccess		,	EPrePostIntercept));
   303 	User::LeaveIfError(RegisterIntercept(EFsFileName					,	EPrePostIntercept));
   304 	User::LeaveIfError(RegisterIntercept(EFsGetMediaSerialNumber		,	EPrePostIntercept));
   305 	User::LeaveIfError(RegisterIntercept(EFsFileFullName				,	EPrePostIntercept));
   306 	User::LeaveIfError(RegisterIntercept(EFsAddPlugin					,	EPrePostIntercept));
   307 	User::LeaveIfError(RegisterIntercept(EFsRemovePlugin				,	EPrePostIntercept));
   308 	User::LeaveIfError(RegisterIntercept(EFsMountPlugin					,	EPrePostIntercept));
   309 	User::LeaveIfError(RegisterIntercept(EFsPluginName					,	EPrePostIntercept));
   310 	User::LeaveIfError(RegisterIntercept(EFsPluginOpen					,	EPrePostIntercept));
   311 	User::LeaveIfError(RegisterIntercept(EFsPluginSubClose				,	EPrePostIntercept));
   312 	User::LeaveIfError(RegisterIntercept(EFsPluginDoRequest				,	EPrePostIntercept));
   313 	User::LeaveIfError(RegisterIntercept(EFsPluginDoControl				,	EPrePostIntercept));
   314 	User::LeaveIfError(RegisterIntercept(EFsPluginDoCancel				,	EPrePostIntercept));
   315 	User::LeaveIfError(RegisterIntercept(EFsNotifyDismount				,	EPrePostIntercept));
   316 	User::LeaveIfError(RegisterIntercept(EFsNotifyDismountCancel		,	EPrePostIntercept));
   317 	User::LeaveIfError(RegisterIntercept(EFsAllowDismount				,	EPrePostIntercept));
   318 	User::LeaveIfError(RegisterIntercept(EFsSetStartupConfiguration		,	EPrePostIntercept));
   319 	User::LeaveIfError(RegisterIntercept(EFsFileReadCancel				,	EPrePostIntercept));
   320 	User::LeaveIfError(RegisterIntercept(EFsAddCompositeMount			,	EPrePostIntercept));
   321 	User::LeaveIfError(RegisterIntercept(EFsSetSessionFlags				,	EPrePostIntercept));
   322 	User::LeaveIfError(RegisterIntercept(EFsSetSystemDrive				,	EPrePostIntercept));
   323 	User::LeaveIfError(RegisterIntercept(EFsBlockMap					,	EPrePostIntercept));
   324 	User::LeaveIfError(RegisterIntercept(EFsUnclamp						,	EPrePostIntercept));
   325 	User::LeaveIfError(RegisterIntercept(EFsFileClamp					,	EPrePostIntercept));
   326 	User::LeaveIfError(RegisterIntercept(EFsQueryVolumeInfoExt			,	EPrePostIntercept));
   327 	User::LeaveIfError(RegisterIntercept(EFsInitialisePropertiesFile	,	EPrePostIntercept));
   328 	User::LeaveIfError(RegisterIntercept(EFsFileWriteDirty				,	EPrePostIntercept));
   329 	User::LeaveIfError(RegisterIntercept(EFsSynchroniseDriveThread		,	EPrePostIntercept));
   330 
   331 
   332 
   333 	User::LeaveIfError(iFs.Connect());
   334 	}
   335 
   336 /**
   337 @internalComponent
   338 */
   339 TInt CTestTraceHook::DoRequestL(TFsPluginRequest& aRequest)
   340 	{
   341 	TInt err = KErrNone;
   342 
   343 	TInt function = aRequest.Function();
   344 	
   345 	iDrvNumber = aRequest.DriveNumber();
   346 
   347 	TPtrC functionName = GetFunctionName(function);
   348 	
   349 
   350 	if (!aRequest.IsPostOperation())
   351 		{
   352 		iPreIntercepts++;
   353 		TFileName name;
   354 
   355 		TInt nameRet = GetName(&aRequest, name);
   356 		if (nameRet == KErrNotSupported)
   357 			nameRet = GetPath(&aRequest, name);
   358 
   359 		TFileName newName;
   360 		TInt newNameRet = GetNewName(&aRequest, newName);
   361 
   362 		TInt len;
   363 		TInt pos;
   364 		TInt fileAccessRet = GetFileAccessInfo(&aRequest, len, pos);
   365 
   366 		if (newNameRet == KErrNone)
   367 			RDebug::Print(_L(">%S\t(%S,%S)"), &functionName, &name, &newName);
   368 		else if (fileAccessRet == KErrNone)
   369 			RDebug::Print(_L(">%S\t%08X@%08X\t(%S)"), &functionName, len, pos, &name);
   370 		else if (nameRet == KErrNone)
   371 			RDebug::Print(_L(">%S\t(%S)"), &functionName, &name);
   372 		else
   373 			RDebug::Print(_L(">%S"), &functionName);
   374 		}
   375 	else
   376 		{
   377 		iPostIntercepts++;
   378 		
   379 		// we should never see any internal file caching requests
   380 		ASSERT(function != EFsFileWriteDirty);
   381 
   382 		// for EFsFileSubClose, check we can read the file name & use the request's message handle
   383 		if (function == EFsFileSubClose)
   384 			{
   385 			TFileName fileName;
   386 #ifdef _DEBUG
   387 	        TInt r = 
   388 #endif
   389 			GetName( &aRequest, fileName);
   390 			ASSERT(r == KErrNone);
   391 			// get process id (uses message handle)
   392 			TUid processId = aRequest.Message().Identity();
   393             RDebug::Print(_L("<%S\t(%S), PID %X"),&functionName, &fileName, processId.iUid);
   394 			}
   395 		else
   396 			{
   397 			RDebug::Print(_L("<%S"), &functionName);
   398 			}
   399 		}
   400 
   401 	return err;
   402 	}
   403 
   404 
   405 
   406 
   407 /**
   408 @internalComponent
   409 */
   410 TInt CTestTraceHook::TracePluginName(TDes& aName)
   411 	{
   412 	aName = KTracePluginName;
   413 	return KErrNone;
   414 	}
   415 
   416 
   417 
   418 
   419 //factory functions
   420 
   421 class CTraceHookFactory : public CFsPluginFactory
   422 	{
   423 public:
   424 	CTraceHookFactory();
   425 	virtual TInt Install();			
   426 	virtual CFsPlugin* NewPluginL();
   427 	virtual CFsPlugin* NewPluginConnL();
   428 	virtual TInt UniquePosition();
   429 	};
   430 
   431 /**
   432 Constructor for the plugin factory
   433 @internalComponent
   434 */
   435 CTraceHookFactory::CTraceHookFactory()
   436 	{
   437 	}
   438 
   439 /**
   440 Install function for the plugin factory
   441 @internalComponent
   442 */
   443 TInt CTraceHookFactory::Install()
   444 	{
   445 	iSupportedDrives = KPluginAutoAttach;
   446 
   447 	_LIT(KTraceHookName,"TraceHook");
   448 	return(SetName(&KTraceHookName));
   449 	}
   450 
   451 /**
   452 @internalComponent
   453 */
   454 TInt CTraceHookFactory::UniquePosition()
   455 	{
   456 	return(0x1EC);
   457 	}
   458 
   459 /**
   460 Plugin factory function
   461 @internalComponent
   462 */
   463 CFsPlugin* CTraceHookFactory::NewPluginL()
   464 
   465 	{
   466 	return CTestTraceHook::NewL();
   467 	}
   468 
   469 /**
   470 Plugin factory function
   471 @internalComponent
   472 */
   473 CFsPlugin* CTraceHookFactory::NewPluginConnL()
   474 
   475 	{
   476 	return CTestTraceHook::NewL();
   477 	}
   478 
   479 /**
   480 Create a new Plugin
   481 @internalComponent
   482 */
   483 extern "C" {
   484 
   485 EXPORT_C CFsPluginFactory* CreateFileSystem()
   486 	{
   487 	return(new CTraceHookFactory());
   488 	}
   489 }
   490