Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*++
Copyright (c) 2000 Microsoft Corporation
Module Name:
EmulateLZHandles.cpp
Abstract:
This shim hooks all of the LZ api calls and increments/decrements the handles so that a valid handle from the app's perspective is always > 0 instead of >= 0.
Fixes apps that treated a handle value of zero as an error; Win9x never returned handles of zero.
History:
07/25/2000 t-adams Created
--*/
#include "precomp.h"
IMPLEMENT_SHIM_BEGIN(EmulateLZHandles) #include "ShimHookMacro.h"
APIHOOK_ENUM_BEGIN APIHOOK_ENUM_ENTRY(LZClose) APIHOOK_ENUM_ENTRY(LZCopy) APIHOOK_ENUM_ENTRY(LZInit) APIHOOK_ENUM_ENTRY(LZOpenFile) APIHOOK_ENUM_ENTRY(LZRead) APIHOOK_ENUM_ENTRY(LZSeek) APIHOOK_ENUM_END
#define KEY_SIZE_STEP MAX_PATH
/*++
Abstract: This function decrements the handles on the way in and increments handles that are passed back to the app
History:
07/25/2000 t-adams Created
--*/
VOID APIHOOK(LZClose)(INT hFile) { ORIGINAL_API(LZClose)(--hFile); }
/*++
Abstract: This function decrements the handles on the way in and increments handles that are passed back to the app
History:
07/25/2000 t-adams Created
--*/
LONG APIHOOK(LZCopy)( INT hSource, INT hDest ) { return ORIGINAL_API(LZCopy)(--hSource, --hDest); }
/*++
Abstract: This function does not decrement the handle passed in to it because the handle passed in is supposed to be a regular HANDLE created by CreateFile. It does decrement handles that are passed back to the app because they represent LZ file handles. The differences between the handles are poorly documented in MSDN.
History:
07/25/2000 t-adams Created
--*/
INT APIHOOK(LZInit)(INT hfSource) { INT iRet = 0;
// Don't decrement handle. See above.
iRet = ORIGINAL_API(LZInit)(hfSource);
// If there was an error, don't increment the error.
if(iRet < 0) { return iRet; } return ++iRet; }
/*++
Abstract: This function decrements the handles on the way in and increments handles that are passed back to the app
History:
07/25/2000 t-adams Created
--*/
INT APIHOOK(LZOpenFile)( LPSTR lpFileName, LPOFSTRUCT lpReOpenBuf, WORD wStyle ) { INT iRet = 0; iRet = ORIGINAL_API(LZOpenFile)(lpFileName, lpReOpenBuf, wStyle);
// If there was an error, don't increment the error.
if( iRet < 0 ) { return iRet; }
return ++iRet; }
/*++
Abstract: This function decrements the handles on the way in and increments handles that are passed back to the app
History:
07/25/2000 t-adams Created
--*/
INT APIHOOK(LZRead)( INT hFile, LPSTR lpBuffer, INT cbRead ) { return ORIGINAL_API(LZRead)(--hFile, lpBuffer, cbRead); }
/*++
Abstract: This function decrements the handles on the way in and increments handles that are passed back to the app
History:
07/25/2000 t-adams Created
--*/
LONG APIHOOK(LZSeek)( INT hFile, LONG lOffset, INT iOrigin ) { return ORIGINAL_API(LZSeek)(--hFile, lOffset, iOrigin); }
/*++
Register hooked functions
--*/
HOOK_BEGIN
APIHOOK_ENTRY(LZ32.DLL, LZClose) APIHOOK_ENTRY(LZ32.DLL, LZCopy) APIHOOK_ENTRY(LZ32.DLL, LZInit) APIHOOK_ENTRY(LZ32.DLL, LZOpenFile) APIHOOK_ENTRY(LZ32.DLL, LZRead) APIHOOK_ENTRY(LZ32.DLL, LZSeek)
HOOK_END
IMPLEMENT_SHIM_END
|