644 lines
14 KiB
C++
644 lines
14 KiB
C++
|
/*++
|
||
|
|
||
|
Copyright (c) 2000 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
RemoveSpacesAfterSlashFromFilenames.cpp
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
This shims all of the listed apis and simply searches a filename var for
|
||
|
"\ " and replaces it with "\"
|
||
|
|
||
|
Notes:
|
||
|
|
||
|
This is a general purpose shim.
|
||
|
|
||
|
History:
|
||
|
|
||
|
12/15/1999 markder Created
|
||
|
05/16/2000 robkenny Check for memory alloc failure.
|
||
|
Moved MassagePath routines to here.
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#include "ShimHook.h"
|
||
|
|
||
|
enum
|
||
|
{
|
||
|
|
||
|
APIHOOK_CreateFileA = USERAPIHOOKSTART,
|
||
|
APIHOOK_CreateFileW,
|
||
|
APIHOOK_GetFileAttributesA,
|
||
|
APIHOOK_GetFileAttributesW,
|
||
|
APIHOOK_GetFileAttributesExA,
|
||
|
APIHOOK_GetFileAttributesExW,
|
||
|
APIHOOK_DeleteFileA,
|
||
|
APIHOOK_DeleteFileW,
|
||
|
APIHOOK_RemoveDirectoryA,
|
||
|
APIHOOK_RemoveDirectoryW,
|
||
|
APIHOOK_MoveFileA,
|
||
|
APIHOOK_MoveFileW,
|
||
|
APIHOOK_MoveFileExA,
|
||
|
APIHOOK_MoveFileExW,
|
||
|
APIHOOK_Count
|
||
|
};
|
||
|
/*++
|
||
|
|
||
|
Function Description:
|
||
|
|
||
|
Removes all "\ " and replaces with "\".
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
IN pszOldPath - String to scan
|
||
|
OUT pszNewPath - Resultant string
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
None
|
||
|
|
||
|
History:
|
||
|
|
||
|
01/10/2000 linstev Updated
|
||
|
|
||
|
--*/
|
||
|
|
||
|
VOID
|
||
|
MassagePathA(
|
||
|
LPCSTR pszOldPath,
|
||
|
LPSTR pszNewPath
|
||
|
)
|
||
|
{
|
||
|
PCHAR pszTempBuffer;
|
||
|
PCHAR pszPointer;
|
||
|
LONG nOldPos, nNewPos, nOldStringLen;
|
||
|
BOOL bAtSeparator = TRUE;
|
||
|
|
||
|
nOldStringLen = strlen(pszOldPath);
|
||
|
pszTempBuffer = (PCHAR) LocalAlloc(LPTR, nOldStringLen + 1);
|
||
|
if (pszTempBuffer == NULL)
|
||
|
{
|
||
|
// Alloc failed, do nothing.
|
||
|
strcpy(pszNewPath, pszOldPath);
|
||
|
return;
|
||
|
}
|
||
|
pszPointer = pszTempBuffer;
|
||
|
|
||
|
nNewPos = nOldStringLen;
|
||
|
for (nOldPos = nOldStringLen - 1; nOldPos >= 0; nOldPos--)
|
||
|
{
|
||
|
if (pszOldPath[ nOldPos ] == '\\')
|
||
|
{
|
||
|
bAtSeparator = TRUE;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if (pszOldPath[nOldPos] == ' ' && bAtSeparator)
|
||
|
{
|
||
|
DPF(eDbgLevelError, "[MassagePathA] Found \"\\ \" in filename. Removing space.\n");
|
||
|
continue;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
bAtSeparator = FALSE;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
pszPointer[--nNewPos] = pszOldPath[nOldPos];
|
||
|
}
|
||
|
|
||
|
pszPointer += nNewPos;
|
||
|
strcpy(pszNewPath, pszPointer);
|
||
|
LocalFree(pszTempBuffer);
|
||
|
}
|
||
|
|
||
|
/*++
|
||
|
|
||
|
Function Description:
|
||
|
|
||
|
Removes all L"\ " and replaces with L"\".
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
IN pwszOldPath - String to scan
|
||
|
OUT pwszNewPath - Resultant string
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
None
|
||
|
|
||
|
History:
|
||
|
|
||
|
01/10/2000 linstev Updated
|
||
|
|
||
|
--*/
|
||
|
|
||
|
VOID
|
||
|
MassagePathW(
|
||
|
LPCWSTR pwszOldPath,
|
||
|
LPWSTR pwszNewPath
|
||
|
)
|
||
|
{
|
||
|
PWCHAR pwszTempBuffer;
|
||
|
PWCHAR pwszPointer;
|
||
|
LONG nOldPos, nNewPos, nOldStringLen;
|
||
|
BOOL bAtSeparator = TRUE;
|
||
|
|
||
|
nOldStringLen = wcslen(pwszOldPath);
|
||
|
pwszTempBuffer = (PWCHAR) LocalAlloc(LPTR, (nOldStringLen + 1) * sizeof(WCHAR));
|
||
|
if (pwszTempBuffer == NULL)
|
||
|
{
|
||
|
// Alloc failed, do nothing.
|
||
|
wcscpy(pwszNewPath, pwszOldPath);
|
||
|
return;
|
||
|
}
|
||
|
pwszPointer = pwszTempBuffer;
|
||
|
|
||
|
nNewPos = nOldStringLen;
|
||
|
for (nOldPos = nOldStringLen - 1; nOldPos >= 0; nOldPos--)
|
||
|
{
|
||
|
if (pwszOldPath[ nOldPos ] == L'\\')
|
||
|
{
|
||
|
bAtSeparator = TRUE;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if (pwszOldPath[nOldPos] == L' ' && bAtSeparator)
|
||
|
{
|
||
|
DPF(eDbgLevelError, "[MassagePathW] Found \"\\ \" in filename. Removing space.\n");
|
||
|
continue;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
bAtSeparator = FALSE;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
pwszPointer[--nNewPos] = pwszOldPath[nOldPos];
|
||
|
}
|
||
|
|
||
|
pwszPointer += nNewPos;
|
||
|
|
||
|
wcscpy(pwszNewPath, pwszPointer);
|
||
|
|
||
|
LocalFree(pwszTempBuffer);
|
||
|
}
|
||
|
|
||
|
/*++
|
||
|
|
||
|
This stub searches pathnames and changes "\ " to "\" prior to OEM call
|
||
|
|
||
|
--*/
|
||
|
|
||
|
HANDLE
|
||
|
APIHook_CreateFileA(
|
||
|
LPCSTR lpFileName,
|
||
|
DWORD dwDesiredAccess,
|
||
|
DWORD dwShareMode,
|
||
|
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
|
||
|
DWORD dwCreationDisposition,
|
||
|
DWORD dwFlagsAndAttributes,
|
||
|
HANDLE hTemplateFile
|
||
|
)
|
||
|
{
|
||
|
LPSTR lpNewFileName = NULL;
|
||
|
HANDLE hResult = NULL;
|
||
|
|
||
|
lpNewFileName = (LPSTR) malloc(strlen(lpFileName) + 1);
|
||
|
if (lpNewFileName != NULL)
|
||
|
{
|
||
|
MassagePathA(lpFileName, lpNewFileName);
|
||
|
hResult = LOOKUP_APIHOOK(CreateFileA)(
|
||
|
lpNewFileName,
|
||
|
dwDesiredAccess,
|
||
|
dwShareMode,
|
||
|
lpSecurityAttributes,
|
||
|
dwCreationDisposition,
|
||
|
dwFlagsAndAttributes,
|
||
|
hTemplateFile);
|
||
|
}
|
||
|
free(lpNewFileName);
|
||
|
|
||
|
return hResult;
|
||
|
}
|
||
|
|
||
|
/*++
|
||
|
|
||
|
This stub searches pathnames and changes "\ " to "\" prior to OEM call
|
||
|
|
||
|
--*/
|
||
|
|
||
|
HANDLE
|
||
|
APIHook_CreateFileW(
|
||
|
LPCWSTR lpFileName,
|
||
|
DWORD dwDesiredAccess,
|
||
|
DWORD dwShareMode,
|
||
|
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
|
||
|
DWORD dwCreationDisposition,
|
||
|
DWORD dwFlagsAndAttributes,
|
||
|
HANDLE hTemplateFile
|
||
|
)
|
||
|
{
|
||
|
LPWSTR lpNewFileName = NULL;
|
||
|
HANDLE hResult = NULL;
|
||
|
|
||
|
lpNewFileName = (LPWSTR) malloc( (wcslen(lpFileName) + 1) * sizeof(WCHAR));
|
||
|
if (lpNewFileName != NULL)
|
||
|
{
|
||
|
MassagePathW(lpFileName, lpNewFileName);
|
||
|
hResult = LOOKUP_APIHOOK(CreateFileW)(
|
||
|
lpNewFileName,
|
||
|
dwDesiredAccess,
|
||
|
dwShareMode,
|
||
|
lpSecurityAttributes,
|
||
|
dwCreationDisposition,
|
||
|
dwFlagsAndAttributes,
|
||
|
hTemplateFile);
|
||
|
}
|
||
|
free(lpNewFileName);
|
||
|
|
||
|
return hResult;
|
||
|
}
|
||
|
|
||
|
/*++
|
||
|
|
||
|
This stub searches pathnames and changes "\ " to "\" prior to OEM call
|
||
|
|
||
|
--*/
|
||
|
|
||
|
DWORD
|
||
|
APIHook_GetFileAttributesA(LPCSTR lpFileName)
|
||
|
{
|
||
|
LPSTR lpNewFileName = NULL;
|
||
|
DWORD dwResult = -1;
|
||
|
|
||
|
lpNewFileName = (LPSTR) malloc(strlen(lpFileName) + 1);
|
||
|
if (lpNewFileName != NULL)
|
||
|
{
|
||
|
MassagePathA(lpFileName, lpNewFileName);
|
||
|
dwResult = LOOKUP_APIHOOK(GetFileAttributesA)(lpNewFileName);
|
||
|
}
|
||
|
free(lpNewFileName);
|
||
|
|
||
|
return dwResult;
|
||
|
}
|
||
|
|
||
|
/*++
|
||
|
|
||
|
This stub searches pathnames and changes "\ " to "\" prior to OEM call
|
||
|
|
||
|
--*/
|
||
|
|
||
|
DWORD
|
||
|
APIHook_GetFileAttributesW(LPCWSTR lpFileName)
|
||
|
{
|
||
|
LPWSTR lpNewFileName = NULL;
|
||
|
DWORD dwResult = -1;
|
||
|
|
||
|
lpNewFileName = (LPWSTR) malloc( (wcslen(lpFileName) + 1) * sizeof(WCHAR));
|
||
|
if (lpNewFileName != NULL)
|
||
|
{
|
||
|
MassagePathW(lpFileName, lpNewFileName);
|
||
|
dwResult = LOOKUP_APIHOOK(GetFileAttributesW)(lpNewFileName);
|
||
|
}
|
||
|
free(lpNewFileName);
|
||
|
|
||
|
return dwResult;
|
||
|
}
|
||
|
|
||
|
/*++
|
||
|
|
||
|
This stub searches pathnames and changes "\ " to "\" prior to OEM call
|
||
|
|
||
|
--*/
|
||
|
|
||
|
BOOL
|
||
|
APIHook_GetFileAttributesExA(
|
||
|
LPCSTR lpFileName,
|
||
|
GET_FILEEX_INFO_LEVELS fInfoLevelId,
|
||
|
LPVOID lpFileInformation
|
||
|
)
|
||
|
{
|
||
|
LPSTR lpNewFileName = NULL;
|
||
|
BOOL bResult = FALSE;
|
||
|
|
||
|
lpNewFileName = (LPSTR)malloc(strlen(lpFileName) + 1);
|
||
|
if (lpNewFileName != NULL)
|
||
|
{
|
||
|
MassagePathA(lpFileName, lpNewFileName);
|
||
|
bResult = LOOKUP_APIHOOK(GetFileAttributesExA)(
|
||
|
lpNewFileName,
|
||
|
fInfoLevelId,
|
||
|
lpFileInformation);
|
||
|
}
|
||
|
free( lpNewFileName );
|
||
|
|
||
|
return bResult;
|
||
|
}
|
||
|
|
||
|
/*++
|
||
|
|
||
|
This stub searches pathnames and changes "\ " to "\" prior to OEM call
|
||
|
|
||
|
--*/
|
||
|
|
||
|
BOOL
|
||
|
APIHook_GetFileAttributesExW(
|
||
|
LPCWSTR lpFileName,
|
||
|
GET_FILEEX_INFO_LEVELS fInfoLevelId,
|
||
|
LPVOID lpFileInformation
|
||
|
)
|
||
|
{
|
||
|
LPWSTR lpNewFileName = NULL;
|
||
|
BOOL bResult = FALSE;
|
||
|
|
||
|
lpNewFileName = (LPWSTR) malloc( (wcslen(lpFileName) + 1) * sizeof(WCHAR));
|
||
|
if (lpNewFileName != NULL)
|
||
|
{
|
||
|
MassagePathW(lpFileName, lpNewFileName);
|
||
|
bResult = LOOKUP_APIHOOK(GetFileAttributesExW)(
|
||
|
lpNewFileName,
|
||
|
fInfoLevelId,
|
||
|
lpFileInformation);
|
||
|
}
|
||
|
free(lpNewFileName);
|
||
|
|
||
|
return bResult;
|
||
|
}
|
||
|
|
||
|
/*++
|
||
|
|
||
|
This stub searches pathnames and changes "\ " to "\" prior to OEM call
|
||
|
|
||
|
--*/
|
||
|
|
||
|
BOOL
|
||
|
APIHook_DeleteFileA(LPCSTR lpFileName)
|
||
|
{
|
||
|
LPSTR lpNewFileName = NULL;
|
||
|
BOOL bResult = FALSE;
|
||
|
|
||
|
lpNewFileName = (LPSTR) malloc(strlen(lpFileName) + 1);
|
||
|
if (lpNewFileName != NULL)
|
||
|
{
|
||
|
MassagePathA(lpFileName, lpNewFileName);
|
||
|
bResult = LOOKUP_APIHOOK(DeleteFileA)(lpNewFileName);
|
||
|
}
|
||
|
free(lpNewFileName);
|
||
|
|
||
|
return bResult;
|
||
|
}
|
||
|
|
||
|
|
||
|
/*++
|
||
|
|
||
|
This stub searches pathnames and changes "\ " to "\" prior to OEM call
|
||
|
|
||
|
--*/
|
||
|
|
||
|
BOOL
|
||
|
APIHook_DeleteFileW(LPCWSTR lpFileName)
|
||
|
{
|
||
|
LPWSTR lpNewFileName = NULL;
|
||
|
BOOL bResult = FALSE;
|
||
|
|
||
|
lpNewFileName = (LPWSTR) malloc((wcslen(lpFileName) + 1) * sizeof(WCHAR));
|
||
|
if (lpNewFileName != NULL)
|
||
|
{
|
||
|
MassagePathW(lpFileName, lpNewFileName);
|
||
|
bResult = LOOKUP_APIHOOK(DeleteFileW)(lpNewFileName);
|
||
|
}
|
||
|
free(lpNewFileName);
|
||
|
|
||
|
return bResult;
|
||
|
}
|
||
|
|
||
|
/*++
|
||
|
|
||
|
This stub searches pathnames and changes "\ " to "\" prior to OEM call
|
||
|
|
||
|
--*/
|
||
|
|
||
|
BOOL
|
||
|
APIHook_RemoveDirectoryA(LPCSTR lpFileName)
|
||
|
{
|
||
|
LPSTR lpNewFileName = NULL;
|
||
|
BOOL bResult = FALSE;
|
||
|
|
||
|
lpNewFileName = (LPSTR)malloc( strlen( lpFileName ) + 1);
|
||
|
if (lpNewFileName != NULL)
|
||
|
{
|
||
|
MassagePathA(lpFileName, lpNewFileName);
|
||
|
bResult = LOOKUP_APIHOOK(RemoveDirectoryA)(lpNewFileName);
|
||
|
}
|
||
|
free(lpNewFileName);
|
||
|
|
||
|
return bResult;
|
||
|
}
|
||
|
|
||
|
/*++
|
||
|
|
||
|
This stub searches pathnames and changes "\ " to "\" prior to OEM call
|
||
|
|
||
|
--*/
|
||
|
|
||
|
BOOL
|
||
|
APIHook_RemoveDirectoryW(LPCWSTR lpFileName)
|
||
|
{
|
||
|
LPWSTR lpNewFileName = NULL;
|
||
|
BOOL bResult = FALSE;
|
||
|
|
||
|
lpNewFileName = (LPWSTR)malloc( (wcslen(lpFileName) + 1) * sizeof(WCHAR));
|
||
|
if (lpNewFileName != NULL)
|
||
|
{
|
||
|
MassagePathW(lpFileName, lpNewFileName);
|
||
|
bResult = LOOKUP_APIHOOK(RemoveDirectoryW)(lpNewFileName);
|
||
|
}
|
||
|
free(lpNewFileName);
|
||
|
|
||
|
return bResult;
|
||
|
}
|
||
|
|
||
|
/*++
|
||
|
|
||
|
This stub searches pathnames and changes "\ " to "\" prior to OEM call
|
||
|
|
||
|
--*/
|
||
|
|
||
|
BOOL
|
||
|
APIHook_MoveFileA(
|
||
|
LPCSTR lpExistingFileName,
|
||
|
LPCSTR lpNewFileName
|
||
|
)
|
||
|
{
|
||
|
LPSTR lpNewNewFileName = NULL;
|
||
|
LPSTR lpNewExistingFileName = NULL;
|
||
|
BOOL bResult = FALSE;
|
||
|
|
||
|
lpNewNewFileName = (LPSTR) malloc( strlen(lpNewFileName) + 1);
|
||
|
if (lpNewNewFileName != NULL)
|
||
|
{
|
||
|
lpNewExistingFileName = (LPSTR) malloc( strlen(lpExistingFileName) + 1);
|
||
|
if (lpNewNewFileName != NULL)
|
||
|
{
|
||
|
MassagePathA(lpNewFileName, lpNewNewFileName);
|
||
|
MassagePathA(lpExistingFileName, lpNewExistingFileName);
|
||
|
|
||
|
bResult = LOOKUP_APIHOOK(MoveFileA)(
|
||
|
lpNewNewFileName,
|
||
|
lpNewExistingFileName);
|
||
|
}
|
||
|
}
|
||
|
free(lpNewNewFileName);
|
||
|
free(lpNewExistingFileName);
|
||
|
|
||
|
return bResult;
|
||
|
}
|
||
|
|
||
|
/*++
|
||
|
|
||
|
This stub searches pathnames and changes "\ " to "\" prior to OEM call
|
||
|
|
||
|
--*/
|
||
|
|
||
|
BOOL
|
||
|
APIHook_MoveFileW(
|
||
|
LPCWSTR lpExistingFileName,
|
||
|
LPCWSTR lpNewFileName
|
||
|
)
|
||
|
{
|
||
|
LPWSTR lpNewNewFileName = NULL;
|
||
|
LPWSTR lpNewExistingFileName = NULL;
|
||
|
BOOL bResult = FALSE;
|
||
|
|
||
|
lpNewNewFileName = (LPWSTR) malloc((wcslen(lpNewFileName) + 1) * sizeof(WCHAR));
|
||
|
if (lpNewNewFileName != NULL)
|
||
|
{
|
||
|
lpNewExistingFileName = (LPWSTR) malloc((wcslen(lpExistingFileName) + 1) * sizeof(WCHAR));
|
||
|
if (lpNewExistingFileName != NULL)
|
||
|
{
|
||
|
MassagePathW(lpNewFileName, lpNewNewFileName);
|
||
|
MassagePathW(lpExistingFileName, lpNewExistingFileName);
|
||
|
|
||
|
bResult = LOOKUP_APIHOOK(MoveFileW)(
|
||
|
lpNewNewFileName,
|
||
|
lpNewExistingFileName);
|
||
|
}
|
||
|
}
|
||
|
free(lpNewNewFileName);
|
||
|
free(lpNewExistingFileName);
|
||
|
|
||
|
return bResult;
|
||
|
}
|
||
|
|
||
|
/*++
|
||
|
|
||
|
This stub searches pathnames and changes "\ " to "\" prior to OEM call
|
||
|
|
||
|
--*/
|
||
|
|
||
|
BOOL
|
||
|
APIHook_MoveFileExA(
|
||
|
LPCSTR lpExistingFileName,
|
||
|
LPCSTR lpNewFileName,
|
||
|
DWORD dwFlags
|
||
|
)
|
||
|
{
|
||
|
LPSTR lpNewNewFileName = NULL;
|
||
|
LPSTR lpNewExistingFileName = NULL;
|
||
|
BOOL bResult = FALSE;
|
||
|
|
||
|
lpNewNewFileName = (LPSTR)malloc( strlen(lpNewFileName) + 1);
|
||
|
if (lpNewNewFileName != NULL)
|
||
|
{
|
||
|
lpNewExistingFileName = (LPSTR)malloc( strlen(lpExistingFileName) + 1);
|
||
|
if (lpNewExistingFileName != NULL)
|
||
|
{
|
||
|
MassagePathA(lpNewFileName, lpNewNewFileName);
|
||
|
MassagePathA(lpExistingFileName, lpNewExistingFileName);
|
||
|
|
||
|
bResult = LOOKUP_APIHOOK(MoveFileExA)(
|
||
|
lpNewNewFileName,
|
||
|
lpNewExistingFileName,
|
||
|
dwFlags);
|
||
|
}
|
||
|
}
|
||
|
free(lpNewNewFileName);
|
||
|
free(lpNewExistingFileName);
|
||
|
|
||
|
return bResult;
|
||
|
}
|
||
|
|
||
|
/*++
|
||
|
|
||
|
This stub searches pathnames and changes "\ " to "\" prior to OEM call
|
||
|
|
||
|
--*/
|
||
|
|
||
|
BOOL
|
||
|
APIHook_MoveFileExW(
|
||
|
LPCWSTR lpExistingFileName,
|
||
|
LPCWSTR lpNewFileName,
|
||
|
DWORD dwFlags
|
||
|
)
|
||
|
{
|
||
|
LPWSTR lpNewNewFileName = NULL;
|
||
|
LPWSTR lpNewExistingFileName = NULL;
|
||
|
BOOL bResult = FALSE;
|
||
|
|
||
|
lpNewNewFileName = (LPWSTR) malloc( (wcslen(lpNewFileName) + 1) * sizeof(WCHAR));
|
||
|
if (lpNewNewFileName != NULL)
|
||
|
{
|
||
|
lpNewExistingFileName = (LPWSTR) malloc((wcslen(lpExistingFileName) + 1) * sizeof(WCHAR));
|
||
|
if (lpNewExistingFileName != NULL)
|
||
|
{
|
||
|
MassagePathW(lpNewFileName, lpNewNewFileName);
|
||
|
MassagePathW(lpExistingFileName, lpNewExistingFileName);
|
||
|
|
||
|
bResult = LOOKUP_APIHOOK(MoveFileExW)(
|
||
|
lpNewNewFileName,
|
||
|
lpNewExistingFileName,
|
||
|
dwFlags);
|
||
|
}
|
||
|
}
|
||
|
free(lpNewNewFileName);
|
||
|
free(lpNewExistingFileName);
|
||
|
|
||
|
return bResult;
|
||
|
}
|
||
|
|
||
|
/*++
|
||
|
|
||
|
Register hooked functions
|
||
|
|
||
|
--*/
|
||
|
|
||
|
VOID
|
||
|
InitializeHooks(DWORD fdwReason)
|
||
|
{
|
||
|
if (fdwReason != DLL_PROCESS_ATTACH) return;
|
||
|
|
||
|
INIT_HOOKS(APIHOOK_Count);
|
||
|
|
||
|
DECLARE_APIHOOK(KERNEL32.DLL, CreateFileA);
|
||
|
DECLARE_APIHOOK(KERNEL32.DLL, CreateFileW);
|
||
|
DECLARE_APIHOOK(KERNEL32.DLL, GetFileAttributesA);
|
||
|
DECLARE_APIHOOK(KERNEL32.DLL, GetFileAttributesW);
|
||
|
DECLARE_APIHOOK(KERNEL32.DLL, GetFileAttributesExA);
|
||
|
DECLARE_APIHOOK(KERNEL32.DLL, GetFileAttributesExW);
|
||
|
DECLARE_APIHOOK(KERNEL32.DLL, DeleteFileA);
|
||
|
DECLARE_APIHOOK(KERNEL32.DLL, DeleteFileW);
|
||
|
DECLARE_APIHOOK(KERNEL32.DLL, RemoveDirectoryA);
|
||
|
DECLARE_APIHOOK(KERNEL32.DLL, RemoveDirectoryW);
|
||
|
DECLARE_APIHOOK(KERNEL32.DLL, MoveFileA);
|
||
|
DECLARE_APIHOOK(KERNEL32.DLL, MoveFileW);
|
||
|
DECLARE_APIHOOK(KERNEL32.DLL, MoveFileExA);
|
||
|
DECLARE_APIHOOK(KERNEL32.DLL, MoveFileExW);
|
||
|
}
|
||
|
|
||
|
IMPLEMENT_SHIM_END
|
||
|
#include "ShimHookMacro.h"
|
||
|
|