diff --git a/configure.ac b/configure.ac index 827243b..0d9fb0e 100644 --- a/configure.ac +++ b/configure.ac @@ -54,7 +54,7 @@ AC_CHECK_FUNCS(__getdelim __srefill __filbuf __srget __uflow) AC_CHECK_FUNCS(open64 lseek64 mmap64 fopen64 freopen64 ftello64 fseeko64 fsetpos64) AC_CHECK_FUNCS(__open64 __lseek64 __fopen64 __freopen64 __ftello64 __fseeko64 __fsetpos64) AC_CHECK_FUNCS(__fgets_chk __fgets_unlocked_chk __fread_chk __fread_unlocked_chk __read_chk __recv_chk __recvfrom_chk) -AC_CHECK_FUNCS(CreateFileA CreateFileW) +AC_CHECK_FUNCS(CreateFileA CreateFileW ReadFile CloseHandle) AC_CHECK_TYPES(sighandler_t, [], [], [#define _GNU_SOURCE diff --git a/msvc/config.h b/msvc/config.h index ecfb1df..b15bdb4 100644 --- a/msvc/config.h +++ b/msvc/config.h @@ -24,6 +24,7 @@ /* #undef HAVE_AIO_READ */ /* #undef HAVE_ARPA_INET_H */ #define HAVE_BIND 1 +#define HAVE_CLOSEHANDLE 1 #define HAVE_CONNECT 1 #define HAVE_CREATEFILEA 1 #define HAVE_CREATEFILEW 1 @@ -72,6 +73,7 @@ /* #undef HAVE_PRAGMA_INIT */ /* #undef HAVE_PREAD */ #define HAVE_PROCESS_H 1 +#define HAVE_READFILE 1 /* #undef HAVE_READV */ #define HAVE_RECV 1 #define HAVE_RECVFROM 1 diff --git a/src/libzzuf/lib-win32.c b/src/libzzuf/lib-win32.c index 87a9cef..9e37df3 100644 --- a/src/libzzuf/lib-win32.c +++ b/src/libzzuf/lib-win32.c @@ -40,11 +40,20 @@ static HANDLE (*ORIG(CreateFileA))(LPCTSTR, DWORD, DWORD, LPSECURITY_ATTRIBUTES, DWORD, DWORD, HANDLE); #endif - #if defined HAVE_CREATEFILEA static HANDLE (*ORIG(CreateFileW))(LPCWSTR, DWORD, DWORD, LPSECURITY_ATTRIBUTES, DWORD, DWORD, HANDLE); #endif +#if defined HAVE_READFILE +static BOOL (*ORIG(ReadFile))(HANDLE, LPVOID, DWORD, LPDWORD, LPOVERLAPPED); +#endif +#if defined HAVE_CLOSEHANDLE +static BOOL (*ORIG(CloseHandle))(HANDLE); +#endif + +/* + * CreateFileA, CreateFileW + */ #if defined HAVE_CREATEFILEA HANDLE NEW(CreateFileA)(LPCTSTR lpFileName, DWORD dwDesiredAccess, @@ -72,15 +81,47 @@ HANDLE NEW(CreateFileW)(LPCWSTR lpFileName, DWORD dwDesiredAccess, } #endif +/* + * ReadFile + */ + +#if defined HAVE_READFILE +BOOL NEW(ReadFile)(HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, + LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped) +{ + fprintf(stderr, "ReadFile diverted!\n"); + return ORIG(ReadFile)(hFile, lpBuffer, nNumberOfBytesToRead, + lpNumberOfBytesRead, lpOverlapped); +} +#endif + +/* + * CloseHandle + */ + +#if defined HAVE_CLOSEHANDLE +BOOL NEW(CloseHandle)(HANDLE hObject) +{ + fprintf(stderr, "CloseHandle diverted!\n"); + return ORIG(CloseHandle)(hObject); +} +#endif + /* Win32 function table */ #if defined _WIN32 zzuf_table_t table_win32[] = { +#if defined HAVE_CLOSEHANDLE + DIVERT(CloseHandle), +#endif #if defined HAVE_CREATEFILEA DIVERT(CreateFileA), #endif #if defined HAVE_CREATEFILEW DIVERT(CreateFileW), +#endif +#if defined HAVE_READFILE + DIVERT(ReadFile), #endif DIVERT_END };