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:
|
||||
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"
|
||||
@ -1470,7 +1477,7 @@ void HookLibrary( HMODULE hMod, LPCVOID lpFileName, BOOL wide, LPCSTR funcName )
|
||||
LPCWSTR name;
|
||||
WCHAR wname[MAX_PATH];
|
||||
|
||||
if (hMod && hMod != hKernel)
|
||||
if (hMod && hMod != hKernel && hMod != hDllInstance)
|
||||
{
|
||||
if (!wide)
|
||||
{
|
||||
@ -1514,7 +1521,9 @@ HMODULE WINAPI MyLoadLibraryExA( LPCSTR lpFileName, HANDLE hFile,
|
||||
DWORD 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" );
|
||||
return hMod;
|
||||
}
|
||||
@ -1524,7 +1533,9 @@ HMODULE WINAPI MyLoadLibraryExW( LPCWSTR lpFileName, HANDLE hFile,
|
||||
DWORD 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" );
|
||||
return hMod;
|
||||
}
|
||||
|
@ -78,7 +78,7 @@
|
||||
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 "version.h"
|
||||
|
@ -24,6 +24,13 @@
|
||||
#define lenof(array) (sizeof(array)/sizeof(*(array)))
|
||||
#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
|
||||
{
|
||||
|
@ -63,8 +63,7 @@ BOOL get_LLW32( void )
|
||||
|
||||
len = GetSystemWow64Directory( buf, MAX_PATH );
|
||||
wcscpy( buf + len, L"\\kernel32.dll" );
|
||||
// MinGW-w64 had a typo, calling it LINRARY.
|
||||
kernel32 = LoadLibraryEx( buf, NULL, 0x20/*LOAD_LIBRARY_AS_IMAGE_RESOURCE*/ );
|
||||
kernel32 = LoadLibraryEx( buf, NULL, LOAD_LIBRARY_AS_IMAGE_RESOURCE );
|
||||
if (kernel32 == NULL)
|
||||
{
|
||||
DEBUGSTR( 1, L"Unable to load 32-bit kernel32.dll!" );
|
||||
|
10
version.h
10
version.h
@ -2,11 +2,11 @@
|
||||
version.h - Version defines.
|
||||
*/
|
||||
|
||||
#define PVERS L"1.66" // wide string
|
||||
#define PVERSA "1.66" // ANSI string (windres 2.16.91 didn't like L)
|
||||
#define PVERE L"166" // wide environment string
|
||||
#define PVEREA "166" // ANSI environment string
|
||||
#define PVERB 1,6,6,0 // binary (resource)
|
||||
#define PVERS L"1.67" // wide string
|
||||
#define PVERSA "1.67" // ANSI string (windres 2.16.91 didn't like L)
|
||||
#define PVERE L"167" // wide environment string
|
||||
#define PVEREA "167" // ANSI environment string
|
||||
#define PVERB 1,6,7,0 // binary (resource)
|
||||
|
||||
#ifdef _WIN64
|
||||
# define BITS L"64"
|
||||
|
Loading…
x
Reference in New Issue
Block a user