|
|
/*++
Copyright (c) 2000 Microsoft Corporation
Module Name:
GetVolumeInformationLie.cpp
Abstract:
This DLL Hooks GetVolumeInformationA/W and strips out specified FILE_SUPPORTS_XXX flags
Notes: This is a general purpose shim.
History:
05/28/2002 yoda - the force wisely have I used, hmmmmm, yes!
--*/
#include "precomp.h"
IMPLEMENT_SHIM_BEGIN(GetVolumeInformationLie) #include "ShimHookMacro.h"
APIHOOK_ENUM_BEGIN APIHOOK_ENUM_ENTRY(GetVolumeInformationA) APIHOOK_ENUM_ENTRY(GetVolumeInformationW) APIHOOK_ENUM_END
DWORD GetRestricedFSFlags() { static DWORD s_dwRet = (DWORD)-1;
if (s_dwRet == (DWORD)-1) { char* pszCmdLine = COMMAND_LINE;
if (pszCmdLine && *pszCmdLine) { while (*pszCmdLine == ' ') { pszCmdLine++; }
s_dwRet = (DWORD)atol(pszCmdLine); } else { s_dwRet = 0; } }
return s_dwRet; }
BOOL APIHOOK(GetVolumeInformationA)(LPCSTR lpRootPathName, LPSTR lpVolumeNameBuffer, DWORD nVolumeNameSize, LPDWORD lpVolumeSerialNumber, LPDWORD lpMaximumComponentLength, LPDWORD lpFileSystemFlags, LPSTR lpFileSystemNameBuffer, DWORD nFileSystemNameSize) { BOOL bRet; bRet = ORIGINAL_API(GetVolumeInformationA)(lpRootPathName, lpVolumeNameBuffer, nVolumeNameSize, lpVolumeSerialNumber, lpMaximumComponentLength, lpFileSystemFlags, lpFileSystemNameBuffer, nFileSystemNameSize);
if (lpFileSystemFlags) { // mask off whatever flags we don't want the app to see
*lpFileSystemFlags = (*lpFileSystemFlags & (~GetRestricedFSFlags())); }
return bRet; }
BOOL APIHOOK(GetVolumeInformationW) (LPCWSTR lpRootPathName, // root directory
LPWSTR lpVolumeNameBuffer, // volume name buffer
DWORD nVolumeNameSize, // length of name buffer
LPDWORD lpVolumeSerialNumber, // volume serial number
LPDWORD lpMaximumComponentLength, // maximum file name length
LPDWORD lpFileSystemFlags, // file system options
LPWSTR lpFileSystemNameBuffer, // file system name buffer
DWORD nFileSystemNameSize // length of file system name buffer
) { BOOL bRet; bRet = ORIGINAL_API(GetVolumeInformationW)(lpRootPathName, lpVolumeNameBuffer, nVolumeNameSize, lpVolumeSerialNumber, lpMaximumComponentLength, lpFileSystemFlags, lpFileSystemNameBuffer, nFileSystemNameSize);
if (lpFileSystemFlags) { // mask off whatever flags we don't want the app to see
*lpFileSystemFlags = (*lpFileSystemFlags & (~GetRestricedFSFlags())); }
return bRet; }
/*++
Register hooked functions
--*/
HOOK_BEGIN
APIHOOK_ENTRY(KERNEL32.DLL, GetVolumeInformationA) APIHOOK_ENTRY(KERNEL32.DLL, GetVolumeInformationW)
HOOK_END
IMPLEMENT_SHIM_END
|