INFO: Using IFSMGR_InstallFileSystemApiHook in Windows 98 to Intercept Executable FilesID: Q223282
|
Under Windows 98, programs that use the IFSMGR_InstallFileSystemApiHook service to encrypt and/or otherwise modify the content of executable files need to disable the new operation type ENUMH_MAPCACHEBLOCK in the service FS_EnumerateHandle, in order to intercept the entire executable file.
The new IFSMGR_Ring0FileIO service R0_MAPCACHEBLOCK is included in the Ifs.h header file located in the Windows 98 DDK. This service maps a zero-relative page number (4 KB) within a file into a VCACHE buffer and returns the address of the VCACHE buffer header to the caller. This API is strictly intended for use by the operating system; its purpose is to make more efficient use of system memory by reducing double caching of EXE and DLL files. This service does not exist in Windows 95.
This service replaces the FS_ReadFile calls normally used to read EXE and DLL files. When this service is called, programs that hook the file system observe an incoming FS_EnumerateHandle, containing (new) operation type ENUMH_MAPCACHEBLOCK (also found in Ifs.h). This operation type is handled only by VFAT.
Your file system hooker can disable ENUMH_MAPCACHEBLOCK and therefore force conventional FS_ReadFile application loading behavior (at a cost in system performance) by causing this service to fail; details follow.
There are many restrictions made on this operation; if any restriction fails, this service fails. When this happens, the operating system responds to this by using conventional reads in order to load the executable file. The restrictions are:
ENUMH_MAPCACHEBLOCK Details:
Entry
ir_pos = zero-relative cache block number to map (from beginning of file)
ir_length = number of cache blocks to map (1)
ir_data = 0
Exit
If success, ir_error = 0
ir_data = VCACHE handle for cache block
To report failure, ir_error = errorcode
Additional query words:
Keywords : kbDDK kbIFS kbStorageDev kbWinOS98
Version : WINDOWS:; Win98:
Platform : WINDOWS Win98
Issue type : kbinfo
Last Reviewed: May 7, 1999