diff --git a/dll/divert.c b/dll/divert.c index 4ce1ff5..d3ca4b5 100644 --- a/dll/divert.c +++ b/dll/divert.c @@ -28,8 +28,9 @@ #include #include -#ifdef __MINGW32__ -// Mingw does not have wdfinstaller.h +/* + * From wdfinstaller.h + */ typedef struct _WDF_COINSTALLER_INSTALL_OPTIONS { ULONG Size; @@ -59,9 +60,6 @@ typedef ULONG (WINAPI *PFN_WDFPOSTDEVICEREMOVE)( LPCWSTR inf_path, LPCWSTR inf_sec_name ); -#else /* __MINGW32__ */ -#include -#endif /* __MINGW32__ */ // #define DIVERT_DEBUG diff --git a/dll/sources b/dll/sources index 81da006..3325a4d 100644 --- a/dll/sources +++ b/dll/sources @@ -16,7 +16,7 @@ TARGETNAME=WinDivert TARGETTYPE=DYNLINK -TARGETPATH=..\install +TARGETPATH=..\install\WDDK TARGETLIBS=\ $(SDK_LIB_PATH)\advapi32.lib \ $(SDK_LIB_PATH)\setupapi.lib \ diff --git a/examples/netdump/sources b/examples/netdump/sources index 5f83bbc..661ca52 100644 --- a/examples/netdump/sources +++ b/examples/netdump/sources @@ -22,7 +22,7 @@ CPU=$(_BUILDARCH) TARGETNAME=netdump TARGETTYPE=PROGRAM -TARGETPATH=..\..\install +TARGETPATH=..\..\install\WDDK TARGETLIBS=\ $(SDK_LIB_PATH)\setupapi.lib \ $(SDK_LIB_PATH)\user32.lib \ diff --git a/examples/netfilter/sources b/examples/netfilter/sources index 0d4d84a..8eb8fc6 100644 --- a/examples/netfilter/sources +++ b/examples/netfilter/sources @@ -22,7 +22,7 @@ CPU=$(_BUILDARCH) TARGETNAME=netfilter TARGETTYPE=PROGRAM -TARGETPATH=..\..\install +TARGETPATH=..\..\install\WDDK TARGETLIBS=\ $(SDK_LIB_PATH)\setupapi.lib \ $(SDK_LIB_PATH)\user32.lib \ diff --git a/examples/passthru/passthru.c b/examples/passthru/passthru.c index 774eae4..b3f3924 100644 --- a/examples/passthru/passthru.c +++ b/examples/passthru/passthru.c @@ -33,7 +33,7 @@ #define MAXBUF 0xFFFF -static DWORD passthru(LPVOID arg); +static __stdcall DWORD passthru(LPVOID arg); /* * Entry. @@ -88,7 +88,7 @@ int __cdecl main(int argc, char **argv) } // Passthru thread. -static DWORD passthru(LPVOID arg) +static __stdcall DWORD passthru(LPVOID arg) { char packet[MAXBUF]; UINT packet_len; diff --git a/examples/passthru/sources b/examples/passthru/sources index 6b64ed4..6f2f84e 100644 --- a/examples/passthru/sources +++ b/examples/passthru/sources @@ -22,7 +22,7 @@ CPU=$(_BUILDARCH) TARGETNAME=passthru TARGETTYPE=PROGRAM -TARGETPATH=..\..\install +TARGETPATH=..\..\install\WDDK TARGETLIBS=\ $(SDK_LIB_PATH)\setupapi.lib \ $(SDK_LIB_PATH)\user32.lib \ diff --git a/examples/webfilter/sources b/examples/webfilter/sources index b81a377..1a6e470 100644 --- a/examples/webfilter/sources +++ b/examples/webfilter/sources @@ -22,7 +22,7 @@ CPU=$(_BUILDARCH) TARGETNAME=webfilter TARGETTYPE=PROGRAM -TARGETPATH=..\..\install +TARGETPATH=..\..\install\WDDK TARGETLIBS=\ $(SDK_LIB_PATH)\setupapi.lib \ $(SDK_LIB_PATH)\user32.lib \ diff --git a/mingw-build.sh b/mingw-build.sh index c8e6b86..9723f61 100644 --- a/mingw-build.sh +++ b/mingw-build.sh @@ -17,22 +17,59 @@ # along with this program. If not, see . # Script for MinGW/Linux cross compilation. -# NOTE: This script only builds divert.dll, not the driver divert.sys +# NOTE: run wddk-build.bat before this script. + +set -e ENVS="i586-mingw32msvc amd64-mingw32msvc" for ENV in $ENVS do + if [ $ENV = "i586-mingw32msvc" ] + then + CPU=i386 + else + CPU=amd64 + fi + if [ ! -d install/WDDK/$CPU ] + then + echo "WARNING: missing WDDK build; run wddk-build.bat first" + echo "SKIP WDDK-$CPU" + continue + fi + echo "BUILD WDDK-$CPU" CC="$ENV-gcc" if [ -x "`which $CC`" ] then - mkdir -p "install/$ENV" - echo "$CC -Wall -O2 -Iinclude/ -c dll/divert.c" - $CC -Wall -O2 -Iinclude/ -c dll/divert.c - echo "$CC -Wall -shared -o install/$ENV/WinDivert.dll divert.o" - $CC -Wall -shared -o "install/$ENV/WinDivert.dll" divert.o + echo "\tmake install/MINGW/$CPU..." + mkdir -p "install/MINGW/$CPU" + echo "\tbuild install/MINGW/$CPU/WinDivert.dll..." + $CC -Wall -O2 -Iinclude/ -c dll/divert.c -o dll/divert.o + $CC -Wall -shared -o "install/MINGW/$CPU/WinDivert.dll" dll/divert.o + echo "\tbuild install/MINGW/$CPU/netdump.exe..." + $CC -O2 -Iinclude/ examples/netdump/netdump.c \ + -o "install/MINGW/$CPU/netdump.exe" -lWinDivert -lws2_32 \ + -L"install/MINGW/$CPU/" + echo "\tbuild install/MINGW/$CPU/netfilter.exe..." + $CC -O2 -Iinclude/ examples/netfilter/netfilter.c \ + -o "install/MINGW/$CPU/netfilter.exe" -lWinDivert -lws2_32 \ + -L"install/MINGW/$CPU/" + echo "\tbuild install/MINGW/$CPU/passthru.exe..." + $CC -O2 -Iinclude/ examples/passthru/passthru.c \ + -o "install/MINGW/$CPU/passthru.exe" -lWinDivert -lws2_32 \ + -L"install/MINGW/$CPU/" + echo "\tbuild install/MINGW/$CPU/webfilter.exe..." + $CC -O2 -Iinclude/ examples/webfilter/webfilter.c \ + -o "install/MINGW/$CPU/webfilter.exe" -lWinDivert -lws2_32 \ + -L"install/MINGW/$CPU/" + echo "\tcopy install/MINGW/$CPU/WinDivert.inf..." + cp install/WDDK/$CPU/WinDivert.inf install/MINGW/$CPU + echo "\tcopy install/MINGW/$CPU/WinDivert.sys..." + cp install/WDDK/$CPU/WinDivert.sys install/MINGW/$CPU + echo "\tcopy install/MINGW/$CPU/WdfCoInstaller01009.dll..." + cp install/WDDK/$CPU/WdfCoInstaller01009.dll install/MINGW/$CPU else - echo "$CC: not found" + echo "WARNING: $CC not found" fi done diff --git a/release-build.sh b/release-build.sh index 463b09a..d247532 100644 --- a/release-build.sh +++ b/release-build.sh @@ -23,46 +23,104 @@ set -e VERSION=1.0 NAME=WinDivert-$VERSION -echo -n "COPYING FILES..." -INSTALL=install/$NAME -mkdir -p $INSTALL -cp README $INSTALL -cp LICENSE $INSTALL -cp sys/divert.inf $INSTALL/WinDivert.inf -cp include/divert.h $INSTALL -mkdir -p $INSTALL/x86 -cp install/i386/WinDivert.sys $INSTALL/x86 -cp install/i386/WdfCoInstaller01009.dll $INSTALL/x86 -mkdir -p $INSTALL/amd64 -cp install/amd64/WinDivert.sys $INSTALL/amd64 -cp install/amd64/WdfCoInstaller01009.dll $INSTALL/amd64 -echo "DONE" - -PACKAGE=$NAME-MSVC.tar.gz -echo -n "BUILDING $PACKAGE..." -cp install/i386/WinDivert.dll $INSTALL/x86 -cp install/amd64/WinDivert.dll $INSTALL/amd64 -(cd install; tar cvz --owner root --group root -f $PACKAGE $NAME > /dev/null) -echo "DONE" - -PACKAGE=$NAME-MSVC.zip -echo -n "BUILDING $PACKAGE..." -(cd install; zip -r $PACKAGE $NAME > /dev/null) -echo "DONE" - -PACKAGE=$NAME-MinGW.tar.gz -echo -n "BUILDING $PACKAGE..." -cp install/i586-mingw32msvc/WinDivert.dll $INSTALL/x86 -cp install/amd64-mingw32msvc/WinDivert.dll $INSTALL/amd64 -(cd install; tar cvz --owner root --group root -f $PACKAGE $NAME > /dev/null) -echo "DONE" - -PACKAGE=$NAME-MinGW.zip -echo -n "BUILDING $PACKAGE..." -(cd install; zip -r $PACKAGE $NAME > /dev/null) -echo "DONE" - -echo -n "CLEANING UP..." -rm -rf $INSTALL -echo "DONE" +for TARGET in WDDK MSVC MINGW +do + if [ ! -d "install/$TARGET" ] + then + echo "SKIP $NAME-$TARGET" + continue + fi + echo "BUILD $NAME-$TARGET" + INSTALL=install/$NAME-$TARGET + echo "\tmake $INSTALL..." + mkdir -p $INSTALL + echo "\tcopy $INSTALL/README..." + cp README $INSTALL + echo "\tcopy $INSTALL/LICENSE..." + cp LICENSE $INSTALL + echo "\tmake $INSTALL/include..." + mkdir -p $INSTALL/include + echo "\tcopy $INSTALL/include/divert.h..." + cp include/divert.h $INSTALL/include + echo "\tmake $INSTALL/doc..." + mkdir -p $INSTALL/doc + echo "\tcopy $INSTALL/doc/WinDivert.html..." + cp doc/divert.html $INSTALL/doc/WinDivert.html + echo "\tmake $INSTALL/x86..." + mkdir -p $INSTALL/x86 + echo "\tcopy $INSTALL/x86/WinDivert.inf..." + cp sys/divert.inf $INSTALL/x86/WinDivert.inf + echo "\tcopy $INSTALL/x86/WinDivert.sys..." + cp install/$TARGET/i386/WinDivert.sys $INSTALL/x86 + if [ $TARGET != MINGW ] + then + echo "\tcopy $INSTALL/x86/WinDivert.lib..." + cp install/$TARGET/i386/WinDivert.lib $INSTALL/x86 + fi + echo "\tcopy $INSTALL/x86/WinDivert.dll..." + cp install/$TARGET/i386/WinDivert.dll $INSTALL/x86 + echo "\tcopy $INSTALL/x86/WdfCoInstaller01009.dll..." + cp install/$TARGET/i386/WdfCoInstaller01009.dll $INSTALL/x86 + COINST_SIZE=`stat --printf="%s" $INSTALL/x86/WdfCoInstaller01009.dll` + if [ $COINST_SIZE -gt 1000000 ] + then + echo "\tWARNING: using fat WdfCoInstaller01009.dll..." + fi + echo "\tcopy $INSTALL/x86/netdump.exe..." + cp install/$TARGET/i386/netdump.exe $INSTALL/x86 + echo "\tcopy $INSTALL/x86/netfilter.exe..." + cp install/$TARGET/i386/netfilter.exe $INSTALL/x86 + echo "\tcopy $INSTALL/x86/passtru.exe..." + cp install/$TARGET/i386/passthru.exe $INSTALL/x86 + echo "\tcopy $INSTALL/x86/webfilter.exe..." + cp install/$TARGET/i386/webfilter.exe $INSTALL/x86 + if [ -d "install/$TARGET/amd64" ] + then + echo "\tmake $INSTALL/amd64..." + mkdir -p $INSTALL/amd64 + echo "\tcopy $INSTALL/amd64/WinDivert.inf..." + cp sys/divert.inf $INSTALL/amd64/WinDivert.inf + echo "\tcopy $INSTALL/amd64/WinDivert.sys..." + cp install/$TARGET/amd64/WinDivert.sys $INSTALL/amd64 + if [ $TARGET != MINGW ] + then + echo "\tcopy $INSTALL/amd64/WinDivert.lib..." + cp install/$TARGET/amd64/WinDivert.lib $INSTALL/amd64 + fi + echo "\tcopy $INSTALL/amd64/WinDivert.dll..." + cp install/$TARGET/amd64/WinDivert.dll $INSTALL/amd64 + echo "\tcopy $INSTALL/amd64/WdfCoInstaller01009.dll..." + cp install/$TARGET/amd64/WdfCoInstaller01009.dll $INSTALL/amd64 + COINST_SIZE=`stat --printf="%s" $INSTALL/amd64/WdfCoInstaller01009.dll` + if [ $COINST_SIZE -gt 1000000 ] + then + echo "\tWARNING: using fat WdfCoInstaller01009.dll..." + fi + echo "\tcopy $INSTALL/amd64/netdump.exe..." + cp install/$TARGET/amd64/netdump.exe $INSTALL/amd64 + echo "\tcopy $INSTALL/amd64/netfilter.exe..." + cp install/$TARGET/amd64/netfilter.exe $INSTALL/amd64 + echo "\tcopy $INSTALL/amd64/passtru.exe..." + cp install/$TARGET/amd64/passthru.exe $INSTALL/amd64 + echo "\tcopy $INSTALL/amd64/webfilter.exe..." + cp install/$TARGET/amd64/webfilter.exe $INSTALL/amd64 + else + echo "\tWARNING: skipping missing AMD64 build..." + fi + PACKAGE=$NAME-$TARGET.tar.gz + echo "\tbuilding $PACKAGE..." + ( + cd install; + tar cvz --owner root --group root -f $PACKAGE $NAME-$TARGET > /dev/null + ) + PACKAGE=$NAME-$TARGET.zip + echo "\tbuilding $PACKAGE..." + ( + cd install; + zip -r $PACKAGE $NAME-$TARGET > /dev/null + ) + echo -n "\tclean $INSTALL..." + rm -rf $INSTALL + echo "DONE" +done diff --git a/sys/sources b/sys/sources index 7f27baa..9c7cd22 100644 --- a/sys/sources +++ b/sys/sources @@ -22,7 +22,7 @@ CPU=$(_BUILDARCH) TARGETNAME=WinDivert TARGETTYPE=DRIVER -TARGETPATH=..\install +TARGETPATH=..\install\WDDK TARGETLIBS=\ $(DDK_LIB_PATH)\wdmsec.lib \ $(DDK_LIB_PATH)\ndis.lib \