diff --git a/ANSI.c b/ANSI.c index 78e90e8..6c3c4f6 100644 --- a/ANSI.c +++ b/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; } diff --git a/ansicon.c b/ansicon.c index b5e8a07..ae28440 100644 --- a/ansicon.c +++ b/ansicon.c @@ -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" diff --git a/ansicon.h b/ansicon.h index 4e07db5..cba8c9d 100644 --- a/ansicon.h +++ b/ansicon.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 { diff --git a/injdll32.c b/injdll32.c index 82978e6..06e98d4 100644 --- a/injdll32.c +++ b/injdll32.c @@ -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!" ); diff --git a/version.h b/version.h index 4627c14..d21198b 100644 --- a/version.h +++ b/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"