LoadLibrary hooking improvements.
Don't hook ourself from LoadLibrary or LoadLibraryEx. Test additional LoadLibraryEx flags before deciding to hook.
This commit is contained in:
parent
cf6f8c741e
commit
b2c8a9ec12
17
ANSI.c
17
ANSI.c
@ -107,6 +107,13 @@
|
|||||||
|
|
||||||
v1.65, 28 August, 2013:
|
v1.65, 28 August, 2013:
|
||||||
fix \e[K (was using window, not buffer).
|
fix \e[K (was using window, not buffer).
|
||||||
|
|
||||||
|
v.166, 20 & 21 September, 2013:
|
||||||
|
fix 32-bit process trying to detect 64-bit process.
|
||||||
|
|
||||||
|
v1.67, 25 January, 2014:
|
||||||
|
don't hook ourself from LoadLibrary or LoadLibraryEx;
|
||||||
|
update the LoadLibraryEx flags that should not cause hooking.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "ansicon.h"
|
#include "ansicon.h"
|
||||||
@ -1470,7 +1477,7 @@ void HookLibrary( HMODULE hMod, LPCVOID lpFileName, BOOL wide, LPCSTR funcName )
|
|||||||
LPCWSTR name;
|
LPCWSTR name;
|
||||||
WCHAR wname[MAX_PATH];
|
WCHAR wname[MAX_PATH];
|
||||||
|
|
||||||
if (hMod && hMod != hKernel)
|
if (hMod && hMod != hKernel && hMod != hDllInstance)
|
||||||
{
|
{
|
||||||
if (!wide)
|
if (!wide)
|
||||||
{
|
{
|
||||||
@ -1514,7 +1521,9 @@ HMODULE WINAPI MyLoadLibraryExA( LPCSTR lpFileName, HANDLE hFile,
|
|||||||
DWORD dwFlags )
|
DWORD dwFlags )
|
||||||
{
|
{
|
||||||
HMODULE hMod = LoadLibraryExA( lpFileName, hFile, dwFlags );
|
HMODULE hMod = LoadLibraryExA( lpFileName, hFile, dwFlags );
|
||||||
if (!(dwFlags & LOAD_LIBRARY_AS_DATAFILE))
|
if (!(dwFlags & (LOAD_LIBRARY_AS_DATAFILE |
|
||||||
|
LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE |
|
||||||
|
LOAD_LIBRARY_AS_IMAGE_RESOURCE)))
|
||||||
HookLibrary( hMod, lpFileName, FALSE, "LoadLibraryExA" );
|
HookLibrary( hMod, lpFileName, FALSE, "LoadLibraryExA" );
|
||||||
return hMod;
|
return hMod;
|
||||||
}
|
}
|
||||||
@ -1524,7 +1533,9 @@ HMODULE WINAPI MyLoadLibraryExW( LPCWSTR lpFileName, HANDLE hFile,
|
|||||||
DWORD dwFlags )
|
DWORD dwFlags )
|
||||||
{
|
{
|
||||||
HMODULE hMod = LoadLibraryExW( lpFileName, hFile, dwFlags );
|
HMODULE hMod = LoadLibraryExW( lpFileName, hFile, dwFlags );
|
||||||
if (!(dwFlags & LOAD_LIBRARY_AS_DATAFILE))
|
if (!(dwFlags & (LOAD_LIBRARY_AS_DATAFILE |
|
||||||
|
LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE |
|
||||||
|
LOAD_LIBRARY_AS_IMAGE_RESOURCE)))
|
||||||
HookLibrary( hMod, lpFileName, TRUE, "LoadLibraryExW" );
|
HookLibrary( hMod, lpFileName, TRUE, "LoadLibraryExW" );
|
||||||
return hMod;
|
return hMod;
|
||||||
}
|
}
|
||||||
|
@ -78,7 +78,7 @@
|
|||||||
don't write the reset sequence if output is redirected.
|
don't write the reset sequence if output is redirected.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define PDATE L"21 September, 2013"
|
#define PDATE L"25 January, 2014"
|
||||||
|
|
||||||
#include "ansicon.h"
|
#include "ansicon.h"
|
||||||
#include "version.h"
|
#include "version.h"
|
||||||
|
@ -24,6 +24,13 @@
|
|||||||
#define lenof(array) (sizeof(array)/sizeof(*(array)))
|
#define lenof(array) (sizeof(array)/sizeof(*(array)))
|
||||||
#define TSIZE(size) ((size) * sizeof(TCHAR))
|
#define TSIZE(size) ((size) * sizeof(TCHAR))
|
||||||
|
|
||||||
|
#ifndef LOAD_LIBRARY_AS_IMAGE_RESOURCE
|
||||||
|
#define LOAD_LIBRARY_AS_IMAGE_RESOURCE 0x20
|
||||||
|
#endif
|
||||||
|
#ifndef LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE
|
||||||
|
#define LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE 0x20
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
|
@ -63,8 +63,7 @@ BOOL get_LLW32( void )
|
|||||||
|
|
||||||
len = GetSystemWow64Directory( buf, MAX_PATH );
|
len = GetSystemWow64Directory( buf, MAX_PATH );
|
||||||
wcscpy( buf + len, L"\\kernel32.dll" );
|
wcscpy( buf + len, L"\\kernel32.dll" );
|
||||||
// MinGW-w64 had a typo, calling it LINRARY.
|
kernel32 = LoadLibraryEx( buf, NULL, LOAD_LIBRARY_AS_IMAGE_RESOURCE );
|
||||||
kernel32 = LoadLibraryEx( buf, NULL, 0x20/*LOAD_LIBRARY_AS_IMAGE_RESOURCE*/ );
|
|
||||||
if (kernel32 == NULL)
|
if (kernel32 == NULL)
|
||||||
{
|
{
|
||||||
DEBUGSTR( 1, L"Unable to load 32-bit kernel32.dll!" );
|
DEBUGSTR( 1, L"Unable to load 32-bit kernel32.dll!" );
|
||||||
|
10
version.h
10
version.h
@ -2,11 +2,11 @@
|
|||||||
version.h - Version defines.
|
version.h - Version defines.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define PVERS L"1.66" // wide string
|
#define PVERS L"1.67" // wide string
|
||||||
#define PVERSA "1.66" // ANSI string (windres 2.16.91 didn't like L)
|
#define PVERSA "1.67" // ANSI string (windres 2.16.91 didn't like L)
|
||||||
#define PVERE L"166" // wide environment string
|
#define PVERE L"167" // wide environment string
|
||||||
#define PVEREA "166" // ANSI environment string
|
#define PVEREA "167" // ANSI environment string
|
||||||
#define PVERB 1,6,6,0 // binary (resource)
|
#define PVERB 1,6,7,0 // binary (resource)
|
||||||
|
|
||||||
#ifdef _WIN64
|
#ifdef _WIN64
|
||||||
# define BITS L"64"
|
# define BITS L"64"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user