Skip to content

Commit 0472db8

Browse files
committed
Preserve last error
Hooked functions that failed and logged debug messages were causing an incorrect last error to be set.
1 parent 06459ed commit 0472db8

File tree

2 files changed

+21
-7
lines changed

2 files changed

+21
-7
lines changed

ANSI.c

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,8 @@
213213
v1.85, 22 & 23 August, 2018:
214214
fix creating the wrap buffer;
215215
always inject from ansicon.exe, even if it's GUI or excluded;
216-
log CreateFile calls.
216+
log CreateFile calls;
217+
preserve last error.
217218
*/
218219

219220
#include "ansicon.h"
@@ -3113,7 +3114,9 @@ BOOL WINAPI MyCreateProcessA( LPCSTR lpApplicationName,
31133114
lpStartupInfo,
31143115
&child_pi ))
31153116
{
3116-
DEBUGSTR( 1, " Failed (%u)", GetLastError() );
3117+
DWORD err = GetLastError();
3118+
DEBUGSTR( 1, " Failed (%u)", err );
3119+
SetLastError( err );
31173120
return FALSE;
31183121
}
31193122

@@ -3151,7 +3154,9 @@ BOOL WINAPI MyCreateProcessW( LPCWSTR lpApplicationName,
31513154
lpStartupInfo,
31523155
&child_pi ))
31533156
{
3154-
DEBUGSTR( 1, " Failed (%u)", GetLastError() );
3157+
DWORD err = GetLastError();
3158+
DEBUGSTR( 1, " Failed (%u)", err );
3159+
SetLastError( err );
31553160
return FALSE;
31563161
}
31573162

@@ -3222,17 +3227,21 @@ FARPROC WINAPI MyGetProcAddress( HMODULE hModule, LPCSTR lpProcName )
32223227
HMODULE WINAPI MyLoadLibraryA( LPCSTR lpFileName )
32233228
{
32243229
HMODULE hMod = LoadLibraryA( lpFileName );
3225-
DEBUGSTR( 2, "LoadLibraryA %s", lpFileName );
3230+
DWORD err = GetLastError();
3231+
DEBUGSTR( 2, "LoadLibraryA %\"s", lpFileName );
32263232
HookAPIAllMod( Hooks, FALSE, TRUE );
3233+
SetLastError( err );
32273234
return hMod;
32283235
}
32293236

32303237

32313238
HMODULE WINAPI MyLoadLibraryW( LPCWSTR lpFileName )
32323239
{
32333240
HMODULE hMod = LoadLibraryW( lpFileName );
3234-
DEBUGSTR( 2, "LoadLibraryW %S", lpFileName );
3241+
DWORD err = GetLastError();
3242+
DEBUGSTR( 2, "LoadLibraryW %\"S", lpFileName );
32353243
HookAPIAllMod( Hooks, FALSE, TRUE );
3244+
SetLastError( err );
32363245
return hMod;
32373246
}
32383247

@@ -3245,8 +3254,10 @@ HMODULE WINAPI MyLoadLibraryExA( LPCSTR lpFileName, HANDLE hFile,
32453254
LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE |
32463255
LOAD_LIBRARY_AS_IMAGE_RESOURCE)))
32473256
{
3248-
DEBUGSTR( 2, "LoadLibraryExA %s", lpFileName );
3257+
DWORD err = GetLastError();
3258+
DEBUGSTR( 2, "LoadLibraryExA %\"s", lpFileName );
32493259
HookAPIAllMod( Hooks, FALSE, TRUE );
3260+
SetLastError( err );
32503261
}
32513262
return hMod;
32523263
}
@@ -3260,8 +3271,10 @@ HMODULE WINAPI MyLoadLibraryExW( LPCWSTR lpFileName, HANDLE hFile,
32603271
LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE |
32613272
LOAD_LIBRARY_AS_IMAGE_RESOURCE)))
32623273
{
3263-
DEBUGSTR( 2, "LoadLibraryExW %S", lpFileName );
3274+
DWORD err = GetLastError();
3275+
DEBUGSTR( 2, "LoadLibraryExW %\"S", lpFileName );
32643276
HookAPIAllMod( Hooks, FALSE, TRUE );
3277+
SetLastError( err );
32653278
}
32663279
return hMod;
32673280
}

readme.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -345,6 +345,7 @@ Version History
345345
- fix -e et al when redirecting to NUL;
346346
- prevent -p from injecting when already injected;
347347
- fix running directly via ansicon (hook even if it's GUI or excluded);
348+
- preserve last error;
348349
+ add log level 32 to monitor CreateFile.
349350

350351
1.84 - 11 May, 2018:

0 commit comments

Comments
 (0)