From f377a318390c17ae4ffcb3d94fd4462ad92795b1 Mon Sep 17 00:00:00 2001 From: Sam Hocevar Date: Wed, 22 Sep 2010 22:26:44 +0000 Subject: [PATCH] Divert CreateFileW in addition to CreateFileA. --- configure.ac | 2 +- msvc/config.h | 3 ++- src/libzzuf/lib-win32.c | 33 ++++++++++++++++++++++++++------- 3 files changed, 29 insertions(+), 9 deletions(-) diff --git a/configure.ac b/configure.ac index 073898b..827243b 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(CreateFile) +AC_CHECK_FUNCS(CreateFileA CreateFileW) AC_CHECK_TYPES(sighandler_t, [], [], [#define _GNU_SOURCE diff --git a/msvc/config.h b/msvc/config.h index 6e393e6..d8fdaf3 100644 --- a/msvc/config.h +++ b/msvc/config.h @@ -25,7 +25,8 @@ /* #undef HAVE_ARPA_INET_H */ #define HAVE_BIND 1 #define HAVE_CONNECT 1 -#define HAVE_CREATEFILE 1 +#define HAVE_CREATEFILEA 1 +#define HAVE_CREATEFILEW 1 /* #undef HAVE_DLFCN_H */ #define HAVE_DUP 1 #define HAVE_DUP2 1 diff --git a/src/libzzuf/lib-win32.c b/src/libzzuf/lib-win32.c index 1743c0e..87a9cef 100644 --- a/src/libzzuf/lib-win32.c +++ b/src/libzzuf/lib-win32.c @@ -36,14 +36,17 @@ #include "fd.h" /* Kernel functions that we divert */ -#if defined HAVE_CREATEFILE -static HANDLE (*ORIG(CreateFileA))(LPCTSTR lpFileName, DWORD dwDesiredAccess, - DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, - DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, - HANDLE hTemplateFile); +#if defined HAVE_CREATEFILEA +static HANDLE (*ORIG(CreateFileA))(LPCTSTR, DWORD, DWORD, LPSECURITY_ATTRIBUTES, + DWORD, DWORD, HANDLE); #endif -#if defined HAVE_CREATEFILE +#if defined HAVE_CREATEFILEA +static HANDLE (*ORIG(CreateFileW))(LPCWSTR, DWORD, DWORD, LPSECURITY_ATTRIBUTES, + DWORD, DWORD, HANDLE); +#endif + +#if defined HAVE_CREATEFILEA HANDLE NEW(CreateFileA)(LPCTSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, @@ -56,12 +59,28 @@ HANDLE NEW(CreateFileA)(LPCTSTR lpFileName, DWORD dwDesiredAccess, } #endif +#if defined HAVE_CREATEFILEW +HANDLE NEW(CreateFileW)(LPCWSTR lpFileName, DWORD dwDesiredAccess, + DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, + DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, + HANDLE hTemplateFile) +{ + fprintf(stderr, "CreateFileW diverted!\n"); + return ORIG(CreateFileW)(lpFileName, dwDesiredAccess, dwShareMode, + lpSecurityAttributes, dwCreationDisposition, + dwFlagsAndAttributes, hTemplateFile); +} +#endif + /* Win32 function table */ #if defined _WIN32 zzuf_table_t table_win32[] = { -#if defined HAVE_CREATEFILE +#if defined HAVE_CREATEFILEA DIVERT(CreateFileA), +#endif +#if defined HAVE_CREATEFILEW + DIVERT(CreateFileW), #endif DIVERT_END };