From 3406b83bea7871b048d604cb89b5da1261d99614 Mon Sep 17 00:00:00 2001 From: Loris Degioanni Date: Sat, 3 Sep 2005 01:11:53 +0000 Subject: [PATCH 001/316] *** empty log message *** --- .gitignore | 28 + OEM/WinpcapOem/NetMonInstaller.h | 38 + OEM/WinpcapOem/PacketWrapper.cpp | 959 +++++++++ OEM/WinpcapOem/Resources.cpp | 79 + OEM/WinpcapOem/SerivcesInstallers.cpp | 966 +++++++++ OEM/WinpcapOem/WinPcapOem.cpp | 1414 +++++++++++++ OEM/WinpcapOem/WinpcapOem.def | 34 + OEM/WinpcapOem/WinpcapOem.dsp | 173 ++ OEM/WinpcapOem/WinpcapOem.dsw | 29 + OEM/WinpcapOem/WinpcapOem.h | 68 + OEM/WinpcapOem/WinpcapOem.rc | 74 + OEM/WinpcapOem/binaries/Note.txt | 6 + OEM/WinpcapOem/idls.h | 2518 +++++++++++++++++++++++ OEM/WinpcapOem/idls_i.c | 230 +++ OEM/WinpcapOem/netcfgn.h | 1450 ++++++++++++++ OEM/WinpcapOem/netcfgx.h | 2519 ++++++++++++++++++++++++ OEM/WinpcapOem/pch.h | 31 + OEM/WinpcapOem/resource.h | 5 + OEM/WinpcapOem/resrc1.h | 16 + OEM/WinpcapOem/version.h | 15 + packetNtx/Dll/Project/PacketAndWan.dsp | 148 ++ packetNtx/Dll/Project/PacketAndWan.dsw | 29 + 22 files changed, 10829 insertions(+) create mode 100644 .gitignore create mode 100644 OEM/WinpcapOem/NetMonInstaller.h create mode 100644 OEM/WinpcapOem/PacketWrapper.cpp create mode 100644 OEM/WinpcapOem/Resources.cpp create mode 100644 OEM/WinpcapOem/SerivcesInstallers.cpp create mode 100644 OEM/WinpcapOem/WinPcapOem.cpp create mode 100644 OEM/WinpcapOem/WinpcapOem.def create mode 100644 OEM/WinpcapOem/WinpcapOem.dsp create mode 100644 OEM/WinpcapOem/WinpcapOem.dsw create mode 100644 OEM/WinpcapOem/WinpcapOem.h create mode 100644 OEM/WinpcapOem/WinpcapOem.rc create mode 100644 OEM/WinpcapOem/binaries/Note.txt create mode 100644 OEM/WinpcapOem/idls.h create mode 100644 OEM/WinpcapOem/idls_i.c create mode 100644 OEM/WinpcapOem/netcfgn.h create mode 100644 OEM/WinpcapOem/netcfgx.h create mode 100644 OEM/WinpcapOem/pch.h create mode 100644 OEM/WinpcapOem/resource.h create mode 100644 OEM/WinpcapOem/resrc1.h create mode 100644 OEM/WinpcapOem/version.h create mode 100644 packetNtx/Dll/Project/PacketAndWan.dsp create mode 100644 packetNtx/Dll/Project/PacketAndWan.dsw diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..40caffa8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,28 @@ +# CVS default ignores begin +tags +TAGS +.make.state +.nse_depinfo +*~ +#* +.#* +,* +_$* +*$ +*.old +*.bak +*.BAK +*.orig +*.rej +.del-* +*.a +*.olb +*.o +*.obj +*.so +*.exe +*.Z +*.elc +*.ln +core +# CVS default ignores end diff --git a/OEM/WinpcapOem/NetMonInstaller.h b/OEM/WinpcapOem/NetMonInstaller.h new file mode 100644 index 00000000..6e0b8892 --- /dev/null +++ b/OEM/WinpcapOem/NetMonInstaller.h @@ -0,0 +1,38 @@ +//+--------------------------------------------------------------------------- +// +// Microsoft Windows +// Copyright (C) Microsoft Corporation, 1997. +// +// File: S N E T C F G . H +// +// Contents: Sample code that demonstrates how to: +// - find out if a component is installed +// - install a net component +// - install an OEM net component +// - uninstall a net component +// - enumerate net components +// - enumerate net adapters using Setup API +// - enumerate binding paths of a component +// +// Notes: +// +// Author: kumarp 26-March-98 +// +//---------------------------------------------------------------------------- + +#pragma once + +enum NetClass +{ + NC_NetAdapter=0, + NC_NetProtocol, + NC_NetService, + NC_NetClient, + NC_Unknown +}; + +void FindIfComponentInstalled(IN PCWSTR szComponentId); + +HRESULT HrInstallNetMonProtocol(); +HRESULT HrUninstallNetMonProtocol(); + diff --git a/OEM/WinpcapOem/PacketWrapper.cpp b/OEM/WinpcapOem/PacketWrapper.cpp new file mode 100644 index 00000000..19f214c4 --- /dev/null +++ b/OEM/WinpcapOem/PacketWrapper.cpp @@ -0,0 +1,959 @@ +#include +#include "../../Common/Packet32.h" +#include "WinpcapOem.h" + +HMODULE PacketLib; +BOOL StillToInit = TRUE; +extern HINSTANCE DllHandle; +extern char *LastWoemError; + +//--------------------------------------------------------------------------- +// PUBLIC PACKET.DLL API WRAPPERS - HANDLERS +//--------------------------------------------------------------------------- +typedef PCHAR (*PacketGetVersionHandler)(); +typedef PCHAR (*PacketGetDriverVersionHandler)(); +typedef BOOL (*PacketStopDriverHandler)(); +typedef LPADAPTER (*PacketOpenAdapterHandler)(PCHAR AdapterName); +typedef VOID (*PacketCloseAdapterHandler)(LPADAPTER lpAdapter); +typedef LPPACKET (*PacketAllocatePacketHandler)(void); +typedef VOID (*PacketFreePacketHandler)(LPPACKET lpPacket); +typedef VOID (*PacketInitPacketHandler)(LPPACKET lpPacket,PVOID Buffer,UINT Length); +typedef BOOLEAN (*PacketReceivePacketHandler)(LPADAPTER AdapterObject,LPPACKET lpPacket,BOOLEAN Sync); +typedef BOOLEAN (*PacketSendPacketHandler)(LPADAPTER AdapterObject,LPPACKET lpPacket,BOOLEAN Sync); +typedef INT (*PacketSendPacketsHandler)(LPADAPTER AdapterObject, PVOID PacketBuff, ULONG Size, BOOLEAN Sync); +typedef BOOLEAN (*PacketSetMinToCopyHandler)(LPADAPTER AdapterObject,int nbytes); +typedef BOOLEAN (*PacketSetModeHandler)(LPADAPTER AdapterObject,int mode); +typedef BOOLEAN (*PacketSetDumpNameHandler)(LPADAPTER AdapterObject, void *name, int len); +typedef BOOLEAN (*PacketSetDumpLimitsHandler)(LPADAPTER AdapterObject, UINT maxfilesize, UINT maxnpacks); +typedef BOOLEAN (*PacketIsDumpEndedHandler)(LPADAPTER AdapterObject, BOOLEAN sync); +typedef HANDLE (*PacketGetReadEventHandler)(LPADAPTER AdapterObject); +typedef BOOLEAN (*PacketSetNumWritesHandler)(LPADAPTER AdapterObject,int nwrites); +typedef BOOLEAN (*PacketSetReadTimeoutHandler)(LPADAPTER AdapterObject,int timeout); +typedef BOOLEAN (*PacketSetBuffHandler)(LPADAPTER AdapterObject,int dim); +typedef BOOLEAN (*PacketSetBpfHandler)(LPADAPTER AdapterObject, struct bpf_program *fp); +typedef INT (*PacketSetSnapLenHandler)(LPADAPTER AdapterObject, int snaplen); +typedef BOOLEAN (*PacketGetStatsHandler)(LPADAPTER AdapterObject,struct bpf_stat *s); +typedef BOOLEAN (*PacketGetStatsExHandler)(LPADAPTER AdapterObject,struct bpf_stat *s); +typedef BOOLEAN (*PacketRequestHandler)(LPADAPTER AdapterObject,BOOLEAN Set,PPACKET_OID_DATA OidData); +typedef BOOLEAN (*PacketSetHwFilterHandler)(LPADAPTER AdapterObject,ULONG Filter); +typedef BOOLEAN (*PacketGetAdapterNamesHandler)(PTSTR pStr,PULONG BufferSize); +typedef BOOLEAN (*PacketGetNetInfoExHandler)(PCHAR AdapterName, npf_if_addr* buffer, PLONG NEntries); +typedef BOOLEAN (*PacketGetNetTypeHandler)(LPADAPTER AdapterObject, NetType *type); + +PacketGetVersionHandler PacketGetVersionH = NULL; +PacketGetDriverVersionHandler PacketGetDriverVersionH = NULL; +PacketStopDriverHandler PacketStopDriverH = NULL; +PacketOpenAdapterHandler PacketOpenAdapterH = NULL; +PacketCloseAdapterHandler PacketCloseAdapterH = NULL; +PacketAllocatePacketHandler PacketAllocatePacketH = NULL; +PacketFreePacketHandler PacketFreePacketH = NULL; +PacketInitPacketHandler PacketInitPacketH = NULL; +PacketReceivePacketHandler PacketReceivePacketH = NULL; +PacketSendPacketHandler PacketSendPacketH = NULL; +PacketSendPacketsHandler PacketSendPacketsH = NULL; +PacketSetMinToCopyHandler PacketSetMinToCopyH = NULL; +PacketSetModeHandler PacketSetModeH = NULL; +PacketSetDumpNameHandler PacketSetDumpNameH = NULL; +PacketSetDumpLimitsHandler PacketSetDumpLimitsH = NULL; +PacketIsDumpEndedHandler PacketIsDumpEndedH = NULL; +PacketGetReadEventHandler PacketGetReadEventH = NULL; +PacketSetNumWritesHandler PacketSetNumWritesH = NULL; +PacketSetReadTimeoutHandler PacketSetReadTimeoutH = NULL; +PacketSetBuffHandler PacketSetBuffH = NULL; +PacketSetBpfHandler PacketSetBpfH = NULL; +PacketSetSnapLenHandler PacketSetSnapLenH = NULL; +PacketGetStatsHandler PacketGetStatsH = NULL; +PacketGetStatsExHandler PacketGetStatsExH = NULL; +PacketRequestHandler PacketRequestH = NULL; +PacketSetHwFilterHandler PacketSetHwFilterH = NULL; +PacketGetAdapterNamesHandler PacketGetAdapterNamesH = NULL; +PacketGetNetInfoExHandler PacketGetNetInfoExH = NULL; +PacketGetNetTypeHandler PacketGetNetTypeH = NULL; + +//--------------------------------------------------------------------------- +// PUBLIC PACKET.DLL API WRAPPERS - IMPLEMENTATIONS +//--------------------------------------------------------------------------- +PCHAR PacketGetVersion() +{ + TraceEnter("PacketGetVersion"); + + // + // Check if we are the first instance and Init everything accordingly + // + if(StillToInit) + { + if(!WoemEnterDll(DllHandle)) + { + return "failed to load packet.dll"; + } + + StillToInit = FALSE; + } + + return PacketGetVersionH(); +} + +PCHAR PacketGetDriverVersion() +{ + TraceEnter("PacketGetDriverVersion"); + + // + // Check if we are the first instance and Init everything accordingly + // + if(StillToInit) + { + if(!WoemEnterDll(DllHandle)) + { + return "failed to load packet.dll"; + } + + StillToInit = FALSE; + } + + // + // We don't have the driver binary, but we are sure that driver and dll + // versions are identical + // + return PacketGetVersionH(); +} + +BOOL PacketStopDriver() +{ + TraceEnter("PacketStopDriver"); + + // + // Check if we are the first instance and Init everything accordingly + // + if(StillToInit) + { + if(!WoemEnterDll(DllHandle)) + { + return FALSE; + } + + StillToInit = FALSE; + } + + return PacketStopDriverH(); +} + +LPADAPTER PacketOpenAdapter(PCHAR AdapterName) +{ + TraceEnter("PacketOpenAdapter"); + + // + // Check if we are the first instance and Init everything accordingly + // + if(StillToInit) + { + if(!WoemEnterDll(DllHandle)) + { + return NULL; + } + + StillToInit = FALSE; + } + + return PacketOpenAdapterH(AdapterName); +} + +VOID PacketCloseAdapter(LPADAPTER lpAdapter) +{ + TraceEnter("PacketCloseAdapter"); + + // + // Check if we are the first instance and Init everything accordingly + // + if(StillToInit) + { + if(!WoemEnterDll(DllHandle)) + { + return; + } + + StillToInit = FALSE; + } + + PacketCloseAdapterH(lpAdapter); +} + +LPPACKET PacketAllocatePacket(void) +{ + TraceEnter("PacketAllocatePacket"); + + // + // Check if we are the first instance and Init everything accordingly + // + if(StillToInit) + { + if(!WoemEnterDll(DllHandle)) + { + return NULL; + } + + StillToInit = FALSE; + } + + return PacketAllocatePacketH(); +} + +VOID PacketFreePacket(LPPACKET lpPacket) +{ + TraceEnter("PacketFreePacket"); + + // + // Check if we are the first instance and Init everything accordingly + // + if(StillToInit) + { + if(!WoemEnterDll(DllHandle)) + { + return; + } + + StillToInit = FALSE; + } + + PacketFreePacketH(lpPacket); +} + +VOID PacketInitPacket(LPPACKET lpPacket,PVOID Buffer,UINT Length) +{ + TraceEnter("PacketInitPacket"); + + // + // Check if we are the first instance and Init everything accordingly + // + if(StillToInit) + { + if(!WoemEnterDll(DllHandle)) + { + return; + } + + StillToInit = FALSE; + } + + PacketInitPacketH(lpPacket, Buffer, Length); +} + +BOOLEAN PacketReceivePacket(LPADAPTER AdapterObject,LPPACKET lpPacket,BOOLEAN Sync) +{ + TraceEnter("PacketReceivePacket"); + + // + // Check if we are the first instance and Init everything accordingly + // + if(StillToInit) + { + if(!WoemEnterDll(DllHandle)) + { + return FALSE; + } + + StillToInit = FALSE; + } + + return PacketReceivePacketH(AdapterObject, lpPacket, Sync); +} + +BOOLEAN PacketSendPacket(LPADAPTER AdapterObject,LPPACKET lpPacket,BOOLEAN Sync) +{ + TraceEnter("PacketSendPacket"); + + // + // Check if we are the first instance and Init everything accordingly + // + if(StillToInit) + { + if(!WoemEnterDll(DllHandle)) + { + return FALSE; + } + + StillToInit = FALSE; + } + + return PacketSendPacketH(AdapterObject, lpPacket, Sync); +} + +INT PacketSendPackets(LPADAPTER AdapterObject, PVOID PacketBuff, ULONG Size, BOOLEAN Sync) +{ + TraceEnter("PacketSendPackets"); + + // + // Check if we are the first instance and Init everything accordingly + // + if(StillToInit) + { + if(!WoemEnterDll(DllHandle)) + { + return 0; + } + + StillToInit = FALSE; + } + + return PacketSendPacketsH(AdapterObject, PacketBuff, Size, Sync); +} + +BOOLEAN PacketSetMinToCopy(LPADAPTER AdapterObject,int nbytes) +{ + TraceEnter("PacketSetMinToCopy"); + + // + // Check if we are the first instance and Init everything accordingly + // + if(StillToInit) + { + if(!WoemEnterDll(DllHandle)) + { + return FALSE; + } + + StillToInit = FALSE; + } + + return PacketSetMinToCopyH(AdapterObject, nbytes); +} + +BOOLEAN PacketSetMode(LPADAPTER AdapterObject,int mode) +{ + TraceEnter("PacketSetMode"); + + // + // Check if we are the first instance and Init everything accordingly + // + if(StillToInit) + { + if(!WoemEnterDll(DllHandle)) + { + return FALSE; + } + + StillToInit = FALSE; + } + + return PacketSetModeH(AdapterObject, mode); +} + +BOOLEAN PacketSetDumpName(LPADAPTER AdapterObject, void *name, int len) +{ + TraceEnter("PacketSetDumpName"); + + // + // Check if we are the first instance and Init everything accordingly + // + if(StillToInit) + { + if(!WoemEnterDll(DllHandle)) + { + return FALSE; + } + + StillToInit = FALSE; + } + + return PacketSetDumpNameH(AdapterObject, name, len); +} + +BOOLEAN PacketSetDumpLimits(LPADAPTER AdapterObject, UINT maxfilesize, UINT maxnpacks) +{ + TraceEnter("PacketSetDumpLimits"); + + // + // Check if we are the first instance and Init everything accordingly + // + if(StillToInit) + { + if(!WoemEnterDll(DllHandle)) + { + return FALSE; + } + + StillToInit = FALSE; + } + + return PacketSetDumpLimitsH(AdapterObject, maxfilesize, maxnpacks); +} + +BOOLEAN PacketIsDumpEnded(LPADAPTER AdapterObject, BOOLEAN sync) +{ + TraceEnter("PacketIsDumpEnded"); + + // + // Check if we are the first instance and Init everything accordingly + // + if(StillToInit) + { + if(!WoemEnterDll(DllHandle)) + { + return FALSE; + } + + StillToInit = FALSE; + } + + return PacketIsDumpEndedH(AdapterObject, sync); +} + +HANDLE PacketGetReadEvent(LPADAPTER AdapterObject) +{ + TraceEnter("PacketGetReadEvent"); + + // + // Check if we are the first instance and Init everything accordingly + // + if(StillToInit) + { + if(!WoemEnterDll(DllHandle)) + { + return NULL; + } + + StillToInit = FALSE; + } + + return PacketGetReadEventH(AdapterObject); +} + +BOOLEAN PacketSetNumWrites(LPADAPTER AdapterObject,int nwrites) +{ + TraceEnter("PacketSetNumWrites"); + + // + // Check if we are the first instance and Init everything accordingly + // + if(StillToInit) + { + if(!WoemEnterDll(DllHandle)) + { + return FALSE; + } + + StillToInit = FALSE; + } + + return PacketSetNumWritesH(AdapterObject, nwrites); +} + +BOOLEAN PacketSetReadTimeout(LPADAPTER AdapterObject,int timeout) +{ + TraceEnter("PacketSetReadTimeout"); + + // + // Check if we are the first instance and Init everything accordingly + // + if(StillToInit) + { + if(!WoemEnterDll(DllHandle)) + { + return FALSE; + } + + StillToInit = FALSE; + } + + return PacketSetReadTimeoutH(AdapterObject, timeout); +} + +BOOLEAN PacketSetBuff(LPADAPTER AdapterObject,int dim) +{ + TraceEnter("PacketSetBuff"); + + // + // Check if we are the first instance and Init everything accordingly + // + if(StillToInit) + { + if(!WoemEnterDll(DllHandle)) + { + return FALSE; + } + + StillToInit = FALSE; + } + + return PacketSetBuffH(AdapterObject, dim); +} + +BOOLEAN PacketSetBpf(LPADAPTER AdapterObject, struct bpf_program *fp) +{ + TraceEnter("PacketSetBpf"); + + // + // Check if we are the first instance and Init everything accordingly + // + if(StillToInit) + { + if(!WoemEnterDll(DllHandle)) + { + return FALSE; + } + + StillToInit = FALSE; + } + + return PacketSetBpfH(AdapterObject, fp); +} + +INT PacketSetSnapLen(LPADAPTER AdapterObject, int snaplen) +{ + TraceEnter("PacketSetSnapLen"); + + // + // Check if we are the first instance and Init everything accordingly + // + if(StillToInit) + { + if(!WoemEnterDll(DllHandle)) + { + return 0; + } + + StillToInit = FALSE; + } + + return PacketSetSnapLenH(AdapterObject, snaplen); +} + +BOOLEAN PacketGetStats(LPADAPTER AdapterObject,struct bpf_stat *s) +{ + TraceEnter("PacketGetStats"); + + // + // Check if we are the first instance and Init everything accordingly + // + if(StillToInit) + { + if(!WoemEnterDll(DllHandle)) + { + return FALSE; + } + + StillToInit = FALSE; + } + + return PacketGetStatsH(AdapterObject, s); +} + +BOOLEAN PacketGetStatsEx(LPADAPTER AdapterObject,struct bpf_stat *s) +{ + TraceEnter("PacketGetStatsEx"); + + // + // Check if we are the first instance and Init everything accordingly + // + if(StillToInit) + { + if(!WoemEnterDll(DllHandle)) + { + return FALSE; + } + + StillToInit = FALSE; + } + + return PacketGetStatsExH(AdapterObject, s); +} + +BOOLEAN PacketRequest(LPADAPTER AdapterObject,BOOLEAN Set,PPACKET_OID_DATA OidData) +{ + TraceEnter("PacketRequest"); + + // + // Check if we are the first instance and Init everything accordingly + // + if(StillToInit) + { + if(!WoemEnterDll(DllHandle)) + { + return FALSE; + } + + StillToInit = FALSE; + } + + return PacketRequestH(AdapterObject, Set, OidData); +} + +BOOLEAN PacketSetHwFilter(LPADAPTER AdapterObject,ULONG Filter) +{ + TraceEnter("PacketSetHwFilter"); + + // + // Check if we are the first instance and Init everything accordingly + // + if(StillToInit) + { + if(!WoemEnterDll(DllHandle)) + { + return FALSE; + } + + StillToInit = FALSE; + } + + return PacketSetHwFilterH(AdapterObject, Filter); +} + +BOOLEAN PacketGetAdapterNames(PTSTR pStr,PULONG BufferSize) +{ + TraceEnter("PacketGetAdapterNames"); +// char pippo[256]; + + // + // Check if we are the first instance and Init everything accordingly + // + if(StillToInit) + { + if(!WoemEnterDll(DllHandle)) + { + *BufferSize = 0; + return FALSE; + } + + StillToInit = FALSE; + } +/* +_snprintf(pippo, + PACKET_ERRSTR_SIZE - 1, + "PacketGetAdapterNames: (handle:%x) fnpointer:%x str:%x bufsize%d\n", + DllHandle, + PacketGetAdapterNamesH, + pStr, + BufferSize); + +OutputDebugString(pippo); +*/ + return PacketGetAdapterNamesH(pStr, BufferSize); +} + +BOOLEAN PacketGetNetInfoEx(PCHAR AdapterName, npf_if_addr* buffer, PLONG NEntries) +{ + TraceEnter("PacketGetNetInfoEx"); + + // + // Check if we are the first instance and Init everything accordingly + // + if(StillToInit) + { + if(!WoemEnterDll(DllHandle)) + { + return FALSE; + } + + StillToInit = FALSE; + } + + return PacketGetNetInfoExH(AdapterName, buffer, NEntries); +} + +BOOLEAN PacketGetNetType(LPADAPTER AdapterObject, NetType *type) +{ + TraceEnter("PacketGetNetType"); + + // + // Check if we are the first instance and Init everything accordingly + // + if(StillToInit) + { + if(!WoemEnterDll(DllHandle)) + { + return FALSE; + } + + StillToInit = FALSE; + } + + return PacketGetNetTypeH(AdapterObject, type); +} + +//--------------------------------------------------------------------------- +// ADDITIONAL EXPORTS NOT PRESENT IN STANDARD PACKET.DLL +//--------------------------------------------------------------------------- +PCHAR PacketGetLastOemError() +{ + return LastWoemError; +} + +//--------------------------------------------------------------------------- +// FUNCTIONS +//--------------------------------------------------------------------------- + +//////////////////////////////////////////////////////////////////// +// Load the packet.dll binary with the specifed name +//////////////////////////////////////////////////////////////////// +BOOL LoadPacketDll(char *PacketDllFileName) +{ + // + // Dinamically load the packet.dll library with loadlibrary + // + if((PacketLib = LoadLibrary(PacketDllFileName)) == NULL) + { + _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to initialize the Packet.dll dynamic library"); + WoemReportError(); + return FALSE; + } + + // + // Get the entry points of the just loaded library + // + PacketGetVersionH = (PacketGetVersionHandler) GetProcAddress(PacketLib, "PacketGetVersion"); + if(!PacketGetVersionH) + { + _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 1)"); + WoemReportError(); + return FALSE; + } + + PacketGetDriverVersionH = (PacketGetDriverVersionHandler) GetProcAddress(PacketLib, "PacketGetDriverVersion"); + if(!PacketGetDriverVersionH) + { + _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 2)"); + WoemReportError(); + return FALSE; + } + + PacketStopDriverH = (PacketStopDriverHandler) GetProcAddress(PacketLib, "PacketStopDriver"); + if(!PacketStopDriverH) + { + _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 3)"); + WoemReportError(); + return FALSE; + } + + PacketOpenAdapterH = (PacketOpenAdapterHandler) GetProcAddress(PacketLib, "PacketOpenAdapter"); + if(!PacketOpenAdapterH) + { + _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 4)"); + WoemReportError(); + return FALSE; + } + + PacketCloseAdapterH = (PacketCloseAdapterHandler) GetProcAddress(PacketLib, "PacketCloseAdapter"); + if(!PacketCloseAdapterH) + { + _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 5)"); + WoemReportError(); + return FALSE; + } + + PacketAllocatePacketH = (PacketAllocatePacketHandler) GetProcAddress(PacketLib, "PacketAllocatePacket"); + if(!PacketAllocatePacketH) + { + _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 6)"); + WoemReportError(); + return FALSE; + } + + PacketFreePacketH = (PacketFreePacketHandler) GetProcAddress(PacketLib, "PacketFreePacket"); + if(!PacketFreePacketH) + { + _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 7)"); + WoemReportError(); + return FALSE; + } + + PacketInitPacketH = (PacketInitPacketHandler) GetProcAddress(PacketLib, "PacketInitPacket"); + if(!PacketInitPacketH) + { + _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 8)"); + WoemReportError(); + return FALSE; + } + + PacketReceivePacketH = (PacketReceivePacketHandler) GetProcAddress(PacketLib, "PacketReceivePacket"); + if(!PacketReceivePacketH) + { + _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 9)"); + WoemReportError(); + return FALSE; + } + + PacketSendPacketH = (PacketSendPacketHandler) GetProcAddress(PacketLib, "PacketSendPacket"); + if(!PacketSendPacketH) + { + _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 10)"); + WoemReportError(); + return FALSE; + } + + PacketSendPacketsH = (PacketSendPacketsHandler) GetProcAddress(PacketLib, "PacketSendPackets"); + if(!PacketSendPacketsH) + { + _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 11)"); + WoemReportError(); + return FALSE; + } + + PacketSetMinToCopyH = (PacketSetMinToCopyHandler) GetProcAddress(PacketLib, "PacketSetMinToCopy"); + if(!PacketSetMinToCopyH) + { + _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 12)"); + WoemReportError(); + return FALSE; + } + + PacketSetModeH = (PacketSetModeHandler) GetProcAddress(PacketLib, "PacketSetMode"); + if(!PacketSetModeH) + { + _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 12a)"); + WoemReportError(); + return FALSE; + } + + PacketSetDumpNameH = (PacketSetDumpNameHandler) GetProcAddress(PacketLib, "PacketSetDumpName"); + if(!PacketSetDumpNameH) + { + _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 13)"); + WoemReportError(); + return FALSE; + } + + PacketSetDumpLimitsH = (PacketSetDumpLimitsHandler) GetProcAddress(PacketLib, "PacketSetDumpLimits"); + if(!PacketSetDumpLimitsH) + { + _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 14)"); + WoemReportError(); + return FALSE; + } + + PacketIsDumpEndedH = (PacketIsDumpEndedHandler) GetProcAddress(PacketLib, "PacketIsDumpEnded"); + if(!PacketIsDumpEndedH) + { + _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 15)"); + WoemReportError(); + return FALSE; + } + + PacketGetReadEventH = (PacketGetReadEventHandler) GetProcAddress(PacketLib, "PacketGetReadEvent"); + if(!PacketGetReadEventH) + { + _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 16)"); + WoemReportError(); + return FALSE; + } + + PacketSetNumWritesH = (PacketSetNumWritesHandler) GetProcAddress(PacketLib, "PacketSetNumWrites"); + if(!PacketSetNumWritesH) + { + _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 17)"); + WoemReportError(); + return FALSE; + } + + PacketSetReadTimeoutH = (PacketSetReadTimeoutHandler) GetProcAddress(PacketLib, "PacketSetReadTimeout"); + if(!PacketSetReadTimeoutH) + { + _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 18)"); + WoemReportError(); + return FALSE; + } + + PacketSetBuffH = (PacketSetBuffHandler) GetProcAddress(PacketLib, "PacketSetBuff"); + if(!PacketSetBuffH) + { + _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 19)"); + WoemReportError(); + return FALSE; + } + + PacketSetBpfH = (PacketSetBpfHandler) GetProcAddress(PacketLib, "PacketSetBpf"); + if(!PacketSetBpfH) + { + _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 20)"); + WoemReportError(); + return FALSE; + } + + PacketSetSnapLenH = (PacketSetSnapLenHandler) GetProcAddress(PacketLib, "PacketSetSnapLen"); + if(!PacketSetSnapLenH) + { + _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 21)"); + WoemReportError(); + return FALSE; + } + + PacketGetStatsH = (PacketGetStatsHandler) GetProcAddress(PacketLib, "PacketGetStats"); + if(!PacketGetStatsH) + { + _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 22)"); + WoemReportError(); + return FALSE; + } + + PacketGetStatsExH = (PacketGetStatsExHandler) GetProcAddress(PacketLib, "PacketGetStatsEx"); + if(!PacketGetStatsExH) + { + _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 23)"); + WoemReportError(); + return FALSE; + } + + PacketRequestH = (PacketRequestHandler) GetProcAddress(PacketLib, "PacketRequest"); + if(!PacketRequestH) + { + _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 24)"); + WoemReportError(); + return FALSE; + } + + PacketSetHwFilterH = (PacketSetHwFilterHandler) GetProcAddress(PacketLib, "PacketSetHwFilter"); + if(!PacketSetHwFilterH) + { + _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 25)"); + WoemReportError(); + return FALSE; + } + + PacketGetAdapterNamesH = (PacketGetAdapterNamesHandler) GetProcAddress(PacketLib, "PacketGetAdapterNames"); + if(!PacketGetAdapterNamesH) + { + _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 26)"); + WoemReportError(); + return FALSE; + } + + PacketGetNetInfoExH = (PacketGetNetInfoExHandler) GetProcAddress(PacketLib, "PacketGetNetInfoEx"); + if(!PacketGetNetInfoExH) + { + _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 27)"); + WoemReportError(); + return FALSE; + } + + PacketGetNetTypeH = (PacketGetNetTypeHandler) GetProcAddress(PacketLib, "PacketGetNetType"); + if(!PacketGetNetTypeH) + { + _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 28)"); + WoemReportError(); + return FALSE; + } + + return TRUE; +} + +//////////////////////////////////////////////////////////////////// +// Unload the packet.dll binary we loaded on startup, and delete +// the file on disk. +//////////////////////////////////////////////////////////////////// +void UnloadAndDeleteDll(char *PacketDllFileName) +{ +// BOOL FRes; + + // + // We don't check return values because in every case we want to go on with cleanup + // + +// FRes = FreeLibrary(PacketLib); + + // + // We cannot delete the library, because we're using it. Therefore, we delay its deletion to + // the next reboot. + // + MoveFileEx( + PacketDllFileName, + NULL, + MOVEFILE_DELAY_UNTIL_REBOOT); +} diff --git a/OEM/WinpcapOem/Resources.cpp b/OEM/WinpcapOem/Resources.cpp new file mode 100644 index 00000000..822789de --- /dev/null +++ b/OEM/WinpcapOem/Resources.cpp @@ -0,0 +1,79 @@ +#include +#include + +char* ResourceNames[] = +{ + "packet2k.dll", + "driver2k.dll" +}; + +//////////////////////////////////////////////////////////////////// +// This function locates one of the binary resources embedded in the +// dll and saves it to disk +//////////////////////////////////////////////////////////////////// +BOOL WoemSaveResourceToDisk(HINSTANCE hInst, int ResID, char* FileName) +{ + char ResName[100]; + sprintf(ResName, "#%d", ResID); + FILE* OutFile; + + // + // Find the resource + // + HRSRC hRes = FindResource(hInst, ResName, RT_RCDATA); + if(!hRes) + { + return FALSE; + } + + // + // Get the size of the resource + // + DWORD dwResSize = SizeofResource(hInst, hRes); + if(dwResSize == 0) + { + return FALSE; + } + + // + // Load the resource + // + HGLOBAL hResGlobal = LoadResource(hInst, hRes); + if(!hResGlobal) + { + return FALSE; + } + + // + // Get the address of the resource + // Note: according to MSDN it's not necessary to unlock the resource + // + LPVOID lpResMem = LockResource(hResGlobal); + if(!hRes) + { + return FALSE; + } + + // + // Save the resource to disk + // + OutFile = fopen(FileName, "wb"); + if(!OutFile) + { + return FALSE; + } + + if(fwrite(lpResMem, + 1, + dwResSize, + OutFile) != dwResSize) + { + fclose(OutFile); + return FALSE; + } + + fclose(OutFile); + + return TRUE; +} + diff --git a/OEM/WinpcapOem/SerivcesInstallers.cpp b/OEM/WinpcapOem/SerivcesInstallers.cpp new file mode 100644 index 00000000..892a948a --- /dev/null +++ b/OEM/WinpcapOem/SerivcesInstallers.cpp @@ -0,0 +1,966 @@ +/* + * Copyright (c) 2003 - 2005 NetGroup, Politecnico di Torino (Italy). + * Copyright (c) 2005 CACE Technologies, Davis (California). + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Politecnico di Torino, CACE Technologies + * nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +//+--------------------------------------------------------------------------- +// +// This file includes code shipped with (c) Microsoft Windows DDK (build 2600) +// Copyright (C) Microsoft Corporation, 1997. +// +//---------------------------------------------------------------------------- + +#define _WIN32_DCOM + +#include +#include + +#include +#include +#include +#include +#include + +#include +#include + +#include + + +#include "pch.h" +#pragma hdrstop +#include "NetMonInstaller.h" +//#define DEBUGTRACE +#include "WinpcapOem.h" + +//---------------------------------------------------------------------------- +// Globals +// +static const GUID* c_aguidClass[] = +{ + &GUID_DEVCLASS_NET, + &GUID_DEVCLASS_NETTRANS, + &GUID_DEVCLASS_NETSERVICE, + &GUID_DEVCLASS_NETCLIENT +}; + +//---------------------------------------------------------------------------- +// Prototypes of helper functions +// +HRESULT HrInstallNetComponent(IN INetCfg* pnc, + IN PCWSTR szComponentId, + IN const GUID* pguidClass); + +HRESULT HrUninstallNetComponent(IN INetCfg* pnc, IN PCWSTR szComponentId); +HRESULT HrGetINetCfg(IN BOOL fGetWriteLock, INetCfg** ppnc); +HRESULT HrReleaseINetCfg(BOOL fHasWriteLock, INetCfg* pnc); +inline ULONG ReleaseObj(IUnknown* punk) +{ + return (punk) ? punk->Release () : 0; +} + +void DisplayErrorText(DWORD dwLastError); + + +/////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////// +// Netmon-related functions // +/////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////// + +//+--------------------------------------------------------------------------- +// +// Function: HrIsComponentInstalled +// +// Purpose: Find out if a component is installed +// +// Arguments: +// szComponentId [in] id of component to search +// +// Returns: S_OK if installed, +// S_FALSE if not installed, +// otherwise an error code +// +// Author: kumarp 11-February-99 +// +// Notes: +// +HRESULT HrIsComponentInstalled(IN PCWSTR szComponentId) +{ + HRESULT hr=S_OK; + INetCfg* pnc; + INetCfgComponent* pncc; + + hr = HrGetINetCfg(FALSE, &pnc); + if (S_OK == hr) + { + hr = pnc->FindComponent(szComponentId, &pncc); + if (S_OK == hr) + { + ReleaseObj(pncc); + } + (void) HrReleaseINetCfg(FALSE, pnc); + } + + return hr; +} + +//+--------------------------------------------------------------------------- +// +// Function: HrInstallNetComponent +// +// Purpose: Install the specified net component +// +// Arguments: +// szComponentId [in] component to install +// nc [in] class of the component +// szInfFullPath [in] full path to primary INF file +// required if the primary INF and other +// associated files are not pre-copied to +// the right destination dirs. +// Not required when installing MS components +// since the files are pre-copied by +// Windows NT Setup. +// +// Returns: S_OK or NETCFG_S_REBOOT on success, otherwise an error code +// +// Notes: +// + +HRESULT HrInstallNetMonProtocol() +{ + HRESULT hr=S_OK; + INetCfg* pnc; + + hr = HrGetINetCfg(TRUE, &pnc); + + if (SUCCEEDED(hr)) + { + // install szComponentId + hr = HrInstallNetComponent(pnc, L"MS_NetMon", &GUID_DEVCLASS_NETTRANS); + if (SUCCEEDED(hr)) + { + // Apply the changes + hr = pnc->Apply(); + } + + // release INetCfg + (void) HrReleaseINetCfg(TRUE, pnc); + } + return hr; +} + +//+--------------------------------------------------------------------------- +// +// Function: HrInstallNetComponent +// +// Purpose: Install the specified net component +// +// Arguments: +// pnc [in] pointer to INetCfg object +// szComponentId [in] component to install +// pguidClass [in] class guid of the component +// +// Returns: S_OK or NETCFG_S_REBOOT on success, otherwise an error code +// +// Notes: +// +HRESULT HrInstallNetComponent(IN INetCfg* pnc, + IN PCWSTR szComponentId, + IN const GUID* pguidClass) +{ + HRESULT hr=S_OK; + OBO_TOKEN OboToken; + INetCfgClassSetup* pncClassSetup; + INetCfgComponent* pncc; + + // OBO_TOKEN specifies the entity on whose behalf this + // component is being installed + + // set it to OBO_USER so that szComponentId will be installed + // On-Behalf-Of "user" + ZeroMemory (&OboToken, sizeof(OboToken)); + OboToken.Type = OBO_USER; + + hr = pnc->QueryNetCfgClass (pguidClass, IID_INetCfgClassSetup, + (void**)&pncClassSetup); + if (SUCCEEDED(hr)) + { + hr = pncClassSetup->Install(szComponentId, + &OboToken, + NSF_POSTSYSINSTALL, + 0, // + NULL, // answerfile name + NULL, // answerfile section name + &pncc); + if (S_OK == hr) + { + // we dont want to use pncc (INetCfgComponent), release it + ReleaseObj(pncc); + } + + ReleaseObj(pncClassSetup); + } + + return hr; +} + +//+--------------------------------------------------------------------------- +// +// Function: HrUninstallNetComponent +// +// Purpose: Initialize INetCfg and uninstall a component +// +// Arguments: +// szComponentId [in] InfId of component to uninstall (e.g. MS_TCPIP) +// +// Returns: S_OK or NETCFG_S_REBOOT on success, otherwise an error code +// +// Notes: +// +HRESULT HrUninstallNetMonProtocol() +{ + HRESULT hr=S_OK; + INetCfg* pnc; + + // get INetCfg interface + hr = HrGetINetCfg(TRUE, &pnc); + + if (SUCCEEDED(hr)) + { + // uninstall szComponentId + hr = HrUninstallNetComponent(pnc, L"MS_NetMon"); + + if (S_OK == hr) + { + // Apply the changes + hr = pnc->Apply(); + } + // release INetCfg + (void) HrReleaseINetCfg(TRUE, pnc); + } + + return hr; +} + +//+--------------------------------------------------------------------------- +// +// Function: HrUninstallNetComponent +// +// Purpose: Uninstall the specified component. +// +// Arguments: +// pnc [in] pointer to INetCfg object +// szComponentId [in] component to uninstall +// +// Returns: S_OK or NETCFG_S_REBOOT on success, otherwise an error code +// +// Notes: +// +HRESULT HrUninstallNetComponent(IN INetCfg* pnc, IN PCWSTR szComponentId) +{ + HRESULT hr=S_OK; + OBO_TOKEN OboToken; + INetCfgComponent* pncc; + GUID guidClass; + INetCfgClass* pncClass; + INetCfgClassSetup* pncClassSetup; + + // OBO_TOKEN specifies the entity on whose behalf this + // component is being uninstalld + + // set it to OBO_USER so that szComponentId will be uninstalld + // On-Behalf-Of "user" + ZeroMemory (&OboToken, sizeof(OboToken)); + OboToken.Type = OBO_USER; + + // see if the component is really installed + hr = pnc->FindComponent(szComponentId, &pncc); + + if (S_OK == hr) + { + // yes, it is installed. obtain INetCfgClassSetup and DeInstall + + hr = pncc->GetClassGuid(&guidClass); + + if (S_OK == hr) + { + hr = pnc->QueryNetCfgClass(&guidClass, IID_INetCfgClass, + (void**)&pncClass); + if (SUCCEEDED(hr)) + { + hr = pncClass->QueryInterface(IID_INetCfgClassSetup, + (void**)&pncClassSetup); + if (SUCCEEDED(hr)) + { + hr = pncClassSetup->DeInstall (pncc, &OboToken, NULL); + + ReleaseObj (pncClassSetup); + } + ReleaseObj(pncClass); + } + } + ReleaseObj(pncc); + } + + return hr; +} + + +//+--------------------------------------------------------------------------- +// +// Function: HrGetINetCfg +// +// Purpose: Initialize COM, create and initialize INetCfg. +// Obtain write lock if indicated. +// +// Arguments: +// fGetWriteLock [in] whether to get write lock +// ppnc [in] pointer to pointer to INetCfg object +// +// Returns: S_OK on success, otherwise an error code +// +// Notes: +// +HRESULT HrGetINetCfg(IN BOOL fGetWriteLock, + INetCfg** ppnc) +{ + HRESULT hr=S_OK; + + // Initialize the output parameters. + *ppnc = NULL; + + // initialize COM + hr = CoInitializeEx(NULL, + COINIT_DISABLE_OLE1DDE | COINIT_APARTMENTTHREADED ); + + if (SUCCEEDED(hr)) + { + // Create the object implementing INetCfg. + // + INetCfg* pnc; + hr = CoCreateInstance(CLSID_CNetCfg, NULL, CLSCTX_INPROC_SERVER, + IID_INetCfg, (void**)&pnc); + if (SUCCEEDED(hr)) + { + INetCfgLock * pncLock = NULL; + if (fGetWriteLock) + { + // Get the locking interface + hr = pnc->QueryInterface(IID_INetCfgLock, + (LPVOID *)&pncLock); + if (SUCCEEDED(hr)) + { + // Attempt to lock the INetCfg for read/write + static const ULONG c_cmsTimeout = 15000; + static const WCHAR c_szSampleNetcfgApp[] = + L"Sample Netcfg Application (netcfg.exe)"; + PWSTR szLockedBy; + + hr = pncLock->AcquireWriteLock(c_cmsTimeout, + c_szSampleNetcfgApp, + &szLockedBy); + if (S_FALSE == hr) + { + hr = NETCFG_E_NO_WRITE_LOCK; + } + } + } + + if (SUCCEEDED(hr)) + { + // Initialize the INetCfg object. + // + hr = pnc->Initialize(NULL); + if (SUCCEEDED(hr)) + { + *ppnc = pnc; + pnc->AddRef(); + } + else + { + // initialize failed, if obtained lock, release it + if (pncLock) + { + pncLock->ReleaseWriteLock(); + } + } + } + ReleaseObj(pncLock); + ReleaseObj(pnc); + } + + if (FAILED(hr)) + { + CoUninitialize(); + } + } + + return hr; +} + +//+--------------------------------------------------------------------------- +// +// Function: HrReleaseINetCfg +// +// Purpose: Uninitialize INetCfg, release write lock (if present) +// and uninitialize COM. +// +// Arguments: +// fHasWriteLock [in] whether write lock needs to be released. +// pnc [in] pointer to INetCfg object +// +// Returns: S_OK on success, otherwise an error code +// +// Notes: +// +HRESULT HrReleaseINetCfg(BOOL fHasWriteLock, INetCfg* pnc) +{ + HRESULT hr = S_OK; + + // uninitialize INetCfg + hr = pnc->Uninitialize(); + + // if write lock is present, unlock it + if (SUCCEEDED(hr) && fHasWriteLock) + { + INetCfgLock* pncLock; + + // Get the locking interface + hr = pnc->QueryInterface(IID_INetCfgLock, + (LPVOID *)&pncLock); + if (SUCCEEDED(hr)) + { + hr = pncLock->ReleaseWriteLock(); + ReleaseObj(pncLock); + } + } + + ReleaseObj(pnc); + + CoUninitialize(); + + return hr; +} + + +/////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////// +// NPF-related functions // +/////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////// +int delete_service(LPCTSTR ServiceName) +{ + SC_HANDLE SCM_Handle; + SC_HANDLE ServiceHandle; + SERVICE_STATUS ServiceStatus; + + DWORD ReturnValue; + + SCM_Handle=OpenSCManager(NULL, /*local machine */ + NULL, /*active database*/ + SC_MANAGER_ALL_ACCESS); + + if (SCM_Handle==NULL) + { + TracePrint("Error opening Service Control Manager: "); + DisplayErrorText(GetLastError()); + return -1; + } + + ServiceHandle=OpenService(SCM_Handle, + ServiceName, + SERVICE_ALL_ACCESS); + + + if (ServiceHandle==NULL) + { + TracePrint("Error opening Service Control Manager: "); + DisplayErrorText(GetLastError()); + + if (!CloseServiceHandle(SCM_Handle)) + TracePrint("Error closing Service control Manager\n"); + + return -1; + } + + ReturnValue=0; + + if(!ControlService(ServiceHandle,SERVICE_CONTROL_STOP,&ServiceStatus)) + { + DWORD Err=GetLastError(); + + if (Err != ERROR_SERVICE_NOT_ACTIVE) + { + TracePrint("Error stopping service %s: ",ServiceName); + DisplayErrorText(Err); + ReturnValue=-1; + } + } + else + TracePrint("Service %s successfully stopped\n",ServiceName); + + if(!DeleteService(ServiceHandle)) + { + TracePrint("Error deleting service %s: ",ServiceName); + DisplayErrorText(GetLastError()); + ReturnValue=-1; + + } + else + TracePrint("Service %s successfully deleted\n",ServiceName); + + if(!CloseServiceHandle(ServiceHandle)) + { + TracePrint("Error closing service %s: ",ServiceName); + DisplayErrorText(GetLastError()); + ReturnValue=-1; + } + + + if(!CloseServiceHandle(SCM_Handle)) + { + TracePrint("Error closing Service control Manager\n"); + ReturnValue=-1; + } + + return ReturnValue; + +} + +int stop_service(LPCTSTR ServiceName) +{ + SC_HANDLE SCM_Handle; + SC_HANDLE ServiceHandle; + SERVICE_STATUS ServiceStatus; + DWORD ReturnValue; + + SCM_Handle=OpenSCManager(NULL, /*local machine */ + NULL, /*active database*/ + SC_MANAGER_ALL_ACCESS); + + if (SCM_Handle==NULL) + { + TracePrint("Error opening Service Control Manager: "); + DisplayErrorText(GetLastError()); + + return -1; + } + + ServiceHandle=OpenService(SCM_Handle, + ServiceName, + SERVICE_ALL_ACCESS); + + + if (ServiceHandle==NULL) + { + TracePrint("Error opening service %s:",ServiceName); + DisplayErrorText(GetLastError()); + + if (!CloseServiceHandle(SCM_Handle)) + TracePrint("Error closing Service control Manager\n"); + + return -1; + } + + ReturnValue=0; + + if (!ControlService(ServiceHandle,SERVICE_CONTROL_STOP,&ServiceStatus)) + { + TracePrint("Error stopping service %s: ",ServiceName); + DisplayErrorText(GetLastError()); + ReturnValue=-1; + + } + else + TracePrint("Service %s successfully stopped\n",ServiceName); + + if (!CloseServiceHandle(ServiceHandle)) + { + TracePrint("Error closing service %s: ",ServiceName); + DisplayErrorText(GetLastError()); + + ReturnValue=-1; + } + + if (!CloseServiceHandle(SCM_Handle)) + { + TracePrint("Error closing Service control Manager\n"); + ReturnValue=-1; + } + + return ReturnValue; + +} + +int change_start_type_service(LPCTSTR ServiceName, DWORD StartType) +{ + SC_HANDLE SCM_Handle; + SC_HANDLE ServiceHandle; + DWORD ReturnValue; + + SCM_Handle=OpenSCManager(NULL, /*local machine */ + NULL, /*active database*/ + SC_MANAGER_ALL_ACCESS); + + if (SCM_Handle == NULL) + { + TracePrint("Error opening Service Control Manager: "); + DisplayErrorText(GetLastError()); + return -1; + } + + ServiceHandle=OpenService(SCM_Handle, + ServiceName, + SERVICE_ALL_ACCESS); + + + if (ServiceHandle == NULL) + { + TracePrint("Error opening service %s: ",ServiceName); + DisplayErrorText(GetLastError()); + + if (!CloseServiceHandle(SCM_Handle)) + TracePrint("Error closing Service control Manager\n"); + + return -1; + } + + ReturnValue=0; + + if (!ChangeServiceConfig(ServiceHandle, + SERVICE_NO_CHANGE, + StartType, + SERVICE_NO_CHANGE, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL)) + { + TracePrint("Error changing start type for service %s:",ServiceName); + DisplayErrorText(GetLastError()); + ReturnValue=-1; + + } + else + TracePrint("Successfully changed start-type for service %s\n",ServiceName); + + if (!CloseServiceHandle(ServiceHandle)) + { + TracePrint("Error closing service %s\n",ServiceName); + ReturnValue=-1; + } + + + if (!CloseServiceHandle(SCM_Handle)) + { + TracePrint("Error closing Service control Manager\n"); + ReturnValue=-1; + } + + return ReturnValue; + +} + + +int start_service(LPCTSTR ServiceName) +{ + SC_HANDLE SCM_Handle; + SC_HANDLE ServiceHandle; + DWORD ReturnValue; + + SCM_Handle=OpenSCManager(NULL, /*local machine */ + NULL, /*active database*/ + SC_MANAGER_ALL_ACCESS); + + if (SCM_Handle == NULL) + { + TracePrint("Error opening Service Control Manager: "); + DisplayErrorText(GetLastError()); + return -1; + } + + ServiceHandle=OpenService(SCM_Handle, + ServiceName, + SERVICE_ALL_ACCESS); + + + if (ServiceHandle == NULL) + { + TracePrint("Error opening service %s: ",ServiceName); + DisplayErrorText(GetLastError()); + + if (!CloseServiceHandle(SCM_Handle)) + TracePrint("Error closing Service control Manager\n"); + + return -1; + } + + ReturnValue=0; + + if (!StartService(ServiceHandle,0,NULL)) + { + TracePrint("Error starting service %s:",ServiceName); + DisplayErrorText(GetLastError()); + ReturnValue=-1; + + } + else + TracePrint("Service %s successfully started\n",ServiceName); + + if (!CloseServiceHandle(ServiceHandle)) + { + TracePrint("Error closing service %s\n",ServiceName); + ReturnValue=-1; + } + + + if (!CloseServiceHandle(SCM_Handle)) + { + TracePrint("Error closing Service control Manager\n"); + ReturnValue=-1; + } + + return ReturnValue; + +} + + +int create_driver_service(LPCTSTR ServiceName,LPCTSTR ServiceDescription,LPCTSTR ServicePath) +{ + SC_HANDLE SCM_Handle; + SC_HANDLE ServiceHandle; + DWORD ReturnValue; + + SCM_Handle=OpenSCManager(NULL, /*local machine */ + NULL, /*active database*/ + SC_MANAGER_ALL_ACCESS); + + if (SCM_Handle==NULL) + { + + TracePrint("Error opening Service Control Manager: "); + DisplayErrorText(GetLastError()); + + return -1; + } + + ServiceHandle=CreateService(SCM_Handle, + ServiceName, + ServiceDescription, + SERVICE_ALL_ACCESS, + SERVICE_KERNEL_DRIVER, + SERVICE_DEMAND_START, + SERVICE_ERROR_NORMAL, + ServicePath, + NULL, + NULL, + NULL, + NULL, + NULL); + + if (ServiceHandle==NULL) + { + if(GetLastError() == ERROR_SERVICE_EXISTS) + { + if (!CloseServiceHandle(SCM_Handle)) + if (stdout != NULL) + TracePrint("Error closing Service control Manager\n"); + + return 0; + } + + TracePrint("Error creating service %s: (%d)", + ServiceName, + GetLastError()); + + DisplayErrorText(GetLastError()); + + if (!CloseServiceHandle(SCM_Handle)) + if (stdout != NULL) + TracePrint("Error closing Service control Manager\n"); + + return -1; + } + + TracePrint("Service %s successfully created.\n",ServiceName); + + ReturnValue=0; + + if (!CloseServiceHandle(ServiceHandle)) + { + TracePrint("Error closing service %s.\n",ServiceName); + ReturnValue=-1; + } + + + if (!CloseServiceHandle(SCM_Handle)) + { + TracePrint("Error closing Service control Manager\n"); + ReturnValue=-1; + } + + return ReturnValue; + +} + + +int check_if_service_is_running(LPCTSTR ServiceName) +{ + SC_HANDLE SCM_Handle; + SC_HANDLE ServiceHandle; + SERVICE_STATUS ServiceStatus; + + SCM_Handle=OpenSCManager(NULL, /*local machine */ + NULL, /*active database*/ + SC_MANAGER_ALL_ACCESS); + + if (SCM_Handle == NULL) + { + TracePrint("Error opening Service Control Manager: "); + DisplayErrorText(GetLastError()); + return -1; + } + + ServiceHandle = OpenService(SCM_Handle, + ServiceName, + SERVICE_ALL_ACCESS); + + if (ServiceHandle == NULL) + { + // Requested service not existing + CloseServiceHandle(SCM_Handle); + return -1; + } + + if(!ControlService(ServiceHandle, SERVICE_CONTROL_INTERROGATE, &ServiceStatus)) + { + // We get here if service's not been started + + DisplayErrorText(GetLastError()); + + // Close handles + CloseServiceHandle(ServiceHandle); + CloseServiceHandle(SCM_Handle); + + return -1; + } + + // Close handles + CloseServiceHandle(ServiceHandle); + CloseServiceHandle(SCM_Handle); + + if(ServiceStatus.dwCurrentState == SERVICE_RUNNING) + return 0; + else + return -1; +} + + +int check_if_service_is_present(LPCTSTR ServiceName) +{ + SC_HANDLE SCM_Handle; + SC_HANDLE ServiceHandle; + + SCM_Handle=OpenSCManager(NULL, /*local machine */ + NULL, /*active database*/ + SC_MANAGER_ALL_ACCESS); + + if (SCM_Handle == NULL) + { + TracePrint("Error opening Service Control Manager: "); + DisplayErrorText(GetLastError()); + return -1; + } + + ServiceHandle = OpenService(SCM_Handle, + ServiceName, + SERVICE_ALL_ACCESS); + + if (ServiceHandle == NULL) + { + // Requested service not existing + CloseServiceHandle(SCM_Handle); + return -1; + } + + + // Close handles + CloseServiceHandle(ServiceHandle); + CloseServiceHandle(SCM_Handle); + + return 0; +} + + +void DisplayErrorText(DWORD dwLastError) +{ + HMODULE hModule = NULL; // default to system source + LPSTR MessageBuffer; + DWORD dwBufferLength; + + DWORD dwFormatFlags = FORMAT_MESSAGE_ALLOCATE_BUFFER | + FORMAT_MESSAGE_IGNORE_INSERTS | + FORMAT_MESSAGE_FROM_SYSTEM ; + + // + // Call FormatMessage() to allow for message + // text to be acquired from the system + // or from the supplied module handle. + // + + if(dwBufferLength = FormatMessageA( + dwFormatFlags, + hModule, // module to get message from (NULL == system) + dwLastError, + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // default language + (LPSTR) &MessageBuffer, + 0, + NULL + )) + { + TracePrint("%s",MessageBuffer); + + // + // Free the buffer allocated by the system. + // + LocalFree(MessageBuffer); + } + + // + // If we loaded a message source, unload it. + // + if(hModule != NULL) + FreeLibrary(hModule); +} diff --git a/OEM/WinpcapOem/WinPcapOem.cpp b/OEM/WinpcapOem/WinPcapOem.cpp new file mode 100644 index 00000000..289a57d0 --- /dev/null +++ b/OEM/WinpcapOem/WinPcapOem.cpp @@ -0,0 +1,1414 @@ +#include +#include "../../Common/Packet32.h" +#include "../../Common/WpcapNames.h" +#include "WinpcapOem.h" +#include "resource.h" + +HANDLE hMx = NULL, hSp = NULL; +char SysDir[MAX_PATH + 16]; +char SemName[MAX_OBJNAME_LEN]; +char DllFullPath[MAX_PATH + 16]; +char DriverFullPath[MAX_PATH + 16]; +char NpfDrNameWhId[32]; +WCHAR NpfDrNameWhIdW[32]; +HINSTANCE DllHandle; +char LastWoemError[PACKET_ERRSTR_SIZE]; + +//////////////////////////////////////////////////////////////////// +// DLL Entry point +//////////////////////////////////////////////////////////////////// +BOOL APIENTRY DllMain(HINSTANCE Dllh, DWORD Reason, LPVOID lpReserved) +{ + switch(Reason) + { + + case DLL_PROCESS_ATTACH: + +//MessageBox(NULL, "1", "1", MB_OK); + DllHandle = Dllh; + + break; + + case DLL_PROCESS_DETACH: + + UnloadAndDeleteDll(DllFullPath); + + WoemLeaveDll(); + + break; + + default: + break; + } + + return TRUE; +} + +//////////////////////////////////////////////////////////////////// +// Function called when a process loads the dll. +// If this is the first time the dll is loaded, we start the driver +// service +//////////////////////////////////////////////////////////////////// +PCHAR getObjectName(PCHAR systemObjectName, UINT strlen) +{ + OSVERSIONINFO osVer; + char TmpName[MAX_OBJNAME_LEN]; + + ZeroMemory(&osVer,sizeof(OSVERSIONINFO)); + osVer.dwOSVersionInfoSize=sizeof(OSVERSIONINFO); + + if (GetVersionEx(&osVer)==0) + { + return NULL; + } + + //Version prior to 2000 does not accept any / character for system object name + //and they does not understand it + if (osVer.dwMajorVersion > 4) + { + _snprintf(TmpName, strlen, "Global\\%s", systemObjectName); + memcpy(systemObjectName, TmpName, strlen); + } + + return systemObjectName; +} + +//////////////////////////////////////////////////////////////////// +// Function called when a process loads the dll. +// If this is the first time the dll is loaded, we start the driver +// service +//////////////////////////////////////////////////////////////////// +BOOL WoemEnterDll(HINSTANCE DllHandle) +{ + SECURITY_DESCRIPTOR sd; + SECURITY_ATTRIBUTES sa; + BOOLEAN retry; + LONG lold; + char ObjName[MAX_OBJNAME_LEN]; + UINT i; + char SvcDesc[MAX_PATH + 16]; + char SvcBin[MAX_PATH + 16]; + OSVERSIONINFO osVer; + HRESULT hr; + + if(!DllHandle) + { + _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "NULL DLL Handle"); + WoemReportError(); + return FALSE; + } + + if(hMx) + { + // + // This should never happen, but better to be sure... + // + _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Double initialization"); + WoemReportError(); + return FALSE; + } + + // + // Create a Security Descriptor with NULL DACL to turn off all security checks. + // This allows to share the Mutex among different users. + // + InitializeSecurityDescriptor(&sd,SECURITY_DESCRIPTOR_REVISION); + SetSecurityDescriptorDacl(&sd, TRUE, 0, FALSE); + sa.bInheritHandle = FALSE; + sa.lpSecurityDescriptor = &sd; + sa.nLength = sizeof(sa); + + // + // Get the MUTEX + // + _snprintf(ObjName, MAX_OBJNAME_LEN, MUTEX_NAME); + hMx = CreateMutex(&sa, FALSE, getObjectName(ObjName, MAX_OBJNAME_LEN)); + if (hMx == NULL) + { + if (GetLastError()==5) + { + _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "not enough priviles to start the packet driver"); + } + + _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "unable to create the global mutex"); + + WoemReportError(); + + return FALSE; + } + + // + // Try to acquire the ownership of the mutex + // + retry = TRUE; + + do + { + DWORD result=WaitForSingleObject(hMx,10000); + switch(result) + { + case WAIT_FAILED: + + ReleaseMutex(hMx); + + if(hMx!=0) + { + CloseHandle(hMx); + hMx = NULL; + + } + if (hSp!=0) + { + CloseHandle(hSp); + hSp = NULL; + } + + return FALSE; + + case WAIT_TIMEOUT: + + _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Timeout on the global mutex"); + WoemReportError(); + + break; + + default: + retry = FALSE; + break; + } + } while (retry); + + // + // Create a Security Descriptor with NULL DACL to turn off all security checks. + // This allows to share the Semaphore among different users. + // + InitializeSecurityDescriptor(&sd,SECURITY_DESCRIPTOR_REVISION); + SetSecurityDescriptorDacl(&sd, TRUE, 0, FALSE); + sa.bInheritHandle = FALSE; + sa.lpSecurityDescriptor = &sd; + sa.nLength =sizeof(sa); + + // + // Get the semaphore + // + _snprintf(SemName, MAX_OBJNAME_LEN, SEMAPHORE_NAME); + hSp = CreateSemaphore(&sa, 0, MAX_VALUE_SEMAPHORE, getObjectName(SemName, MAX_OBJNAME_LEN)); + if (hSp == NULL) + { + if (GetLastError()==5) + { + _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "not enough priviles to start the packet driver"); + } + else + { + _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "unable to create the global semaphore"); + } + + ReleaseMutex(hMx); + + WoemReportError(); + + if(hMx!=0) + { + CloseHandle(hMx); + hMx = NULL; + + } + if (hSp!=0) + { + CloseHandle(hSp); + hSp = NULL; + } + + return FALSE; + } + + // + // Check the value of the semaphore + // + if(ReleaseSemaphore(hSp, 1, &lold)==FALSE) + { + _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "unable to release the semaphore"); + + ReleaseMutex(hMx); + + WoemReportError(); + + if(hMx!=0) + { + CloseHandle(hMx); + hMx = NULL; + + } + if (hSp!=0) + { + CloseHandle(hSp); + hSp = NULL; + } + + return FALSE; + } + + if (lold==0) + { + // + // IF WE ARE HERE, THE DLL IS BEING LOADED FOR THE FIRST TIME. + // + + // + // Get the OS we're running on + // + ZeroMemory(&osVer, sizeof(OSVERSIONINFO)); + osVer.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); + + if (GetVersionEx(&osVer)==0) + { + _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to determine OS version"); + + ReleaseMutex(hMx); + + WoemReportError(); + + if(hMx!=0) + { + CloseHandle(hMx); + hMx = NULL; + + } + if (hSp!=0) + { + CloseHandle(hSp); + hSp = NULL; + } + + return FALSE; + } + + // + // Create the WinPcap global registry key + // + if(!WoemCreateNameRegistryEntries()) + { + _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "unable to create registry entries. Administrator provileges are required for this operation"); + + ReleaseMutex(hMx); + + WoemReportError(); + + if(hMx!=0) + { + CloseHandle(hMx); + hMx = NULL; + + } + if (hSp!=0) + { + CloseHandle(hSp); + hSp = NULL; + } + + return FALSE; + } + + if(!WoemCreateBinaryNames()) + { + _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "unable to create binary names"); + + ReleaseMutex(hMx); + + WoemReportError(); + + if(hMx!=0) + { + CloseHandle(hMx); + hMx = NULL; + + } + if (hSp!=0) + { + CloseHandle(hSp); + hSp = NULL; + } + + return FALSE; + } + + if(check_if_service_is_running(NpfDrNameWhId) == 0) + { + // + // If we are here and the service is running, it's almost surely the result + // of some mess. We try to cleanup. + // + delete_service(NpfDrNameWhId); + } + + if(osVer.dwMajorVersion == 4) + { + // + // Windows NT4 + // + + // + // Extract packet.dll to disk + // + if(!WoemSaveResourceToDisk(DllHandle, IDP_DLLNT, DllFullPath)) + { + _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to copy the WinPcap OEM files. Administrative privileges are required for this operation.", DllFullPath); + + ReleaseMutex(hMx); + + WoemReportError(); + + if(hMx!=0) + { + CloseHandle(hMx); + hMx = NULL; + + } + if (hSp!=0) + { + CloseHandle(hSp); + hSp = NULL; + } + + return FALSE; + } + + // + // Extract the driver to disk + // + if(!WoemSaveResourceToDisk(DllHandle, IDP_DRINT, DriverFullPath)) + { + _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to copy the WinPcap OEM files. Administrative privileges are required for this operation.", DllFullPath); + + unlink(DllFullPath); + + ReleaseMutex(hMx); + + WoemReportError(); + + if(hMx!=0) + { + CloseHandle(hMx); + hMx = NULL; + + } + if (hSp!=0) + { + CloseHandle(hSp); + hSp = NULL; + } + + return FALSE; + } + } + else if(osVer.dwMajorVersion == 5) + { + // + // Windows 2000, XP, 2003 + // + + // + // Install Netmon + // + if(check_if_service_is_present("nm") != 0) + { + hr = HrInstallNetMonProtocol(); + if (hr != S_OK) + { + _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Warning: unable to load the netmon driver, ndiswan captures will not be available"); + WoemReportError(); + } + } + else + { + // printf("netmon already here!!!\n"); + } + + // + // Extract packet.dll to disk + // + if(!WoemSaveResourceToDisk(DllHandle, IDP_DLL2K, DllFullPath)) + { + _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to copy the WinPcap OEM files. Administrative privileges are required for this operation.", DllFullPath); + + ReleaseMutex(hMx); + + WoemReportError(); + + if(hMx!=0) + { + CloseHandle(hMx); + hMx = NULL; + + } + if (hSp!=0) + { + CloseHandle(hSp); + hSp = NULL; + } + + return FALSE; + } + + // + // Extract the driver to disk + // + if(!WoemSaveResourceToDisk(DllHandle, IDP_DRI2K, DriverFullPath)) + { + _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to copy the WinPcap OEM files. Administrative privileges are required for this operation.", DllFullPath); + + unlink(DllFullPath); + + ReleaseMutex(hMx); + + WoemReportError(); + + if(hMx!=0) + { + CloseHandle(hMx); + hMx = NULL; + + } + if (hSp!=0) + { + CloseHandle(hSp); + hSp = NULL; + } + + return FALSE; + } + } + else if(osVer.dwMajorVersion == 6) + { + // + // Windows Vista + // + + // + // Extract packet.dll to disk + // + if(!WoemSaveResourceToDisk(DllHandle, IDP_DLL2K, DllFullPath)) + { + _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to copy the WinPcap OEM files. Administrative privileges are required for this operation.", DllFullPath); + + ReleaseMutex(hMx); + + WoemReportError(); + + if(hMx!=0) + { + CloseHandle(hMx); + hMx = NULL; + + } + if (hSp!=0) + { + CloseHandle(hSp); + hSp = NULL; + } + + return FALSE; + } + + // + // Extract the driver to disk + // + if(!WoemSaveResourceToDisk(DllHandle, IDP_DRI2K, DriverFullPath)) + { + _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to copy the WinPcap OEM files. Administrative privileges are required for this operation.", DllFullPath); + + unlink(DllFullPath); + + WoemReportError(); + + ReleaseMutex(hMx); + + if(hMx!=0) + { + CloseHandle(hMx); + hMx = NULL; + + } + if (hSp!=0) + { + CloseHandle(hSp); + hSp = NULL; + } + + return FALSE; + } + + } + + // + // Create the driver service + // + _snprintf(SvcDesc, + sizeof(SvcDesc) - 1, + "WinPcap Packet Driver (%s)", + NpfDrNameWhId); + + _snprintf(SvcBin, + sizeof(SvcDesc) - 1, + "system32\\drivers\\%s.sys", + NpfDrNameWhId); + + if(create_driver_service(NpfDrNameWhId, + SvcDesc, + SvcBin) == -1) + { + _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "unable to create the packet driver service"); + + unlink(DllFullPath); + unlink(DriverFullPath); + + ReleaseMutex(hMx); + + WoemReportError(); + + if(hMx!=0) + { + CloseHandle(hMx); + hMx = NULL; + + } + if (hSp!=0) + { + CloseHandle(hSp); + hSp = NULL; + } + + return FALSE; + } + + // + // Load the driver + // + if(start_service(NpfDrNameWhId) == -1) + { + _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "unable to start the packet driver service"); + + delete_service(NpfDrNameWhId); + unlink(DllFullPath); + unlink(DriverFullPath); + + ReleaseMutex(hMx); + + WoemReportError(); + + if(hMx!=0) + { + CloseHandle(hMx); + hMx = NULL; + + } + if (hSp!=0) + { + CloseHandle(hSp); + hSp = NULL; + } + + return FALSE; + } + + // + // Wait until the service is running + // + i = 0; + while(TRUE) + { + if(check_if_service_is_running(NpfDrNameWhId) == 0) + { + break; + } + + i++; + if(i == 300) + { + _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "timeout while starting the packet driver"); + + delete_service(NpfDrNameWhId); + unlink(DllFullPath); + unlink(DriverFullPath); + + ReleaseMutex(hMx); + + WoemReportError(); + + if(hMx!=0) + { + CloseHandle(hMx); + hMx = NULL; + + } + if (hSp!=0) + { + CloseHandle(hSp); + hSp = NULL; + } + + return FALSE; + + } + + Sleep(100); + } + + // + // We've loaded the driver, we can delete its binary + // + unlink(DriverFullPath); + } + + // + // Create the names for the binaries + // + if(!WoemCreateBinaryNames()) + { + _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "unable to create binary names"); + + delete_service(NpfDrNameWhId); + unlink(DllFullPath); + unlink(DriverFullPath); + + ReleaseMutex(hMx); + + WoemReportError(); + + if(hMx!=0) + { + CloseHandle(hMx); + hMx = NULL; + + } + if (hSp!=0) + { + CloseHandle(hSp); + hSp = NULL; + } + + return FALSE; + } + + // + // Load packet.dll and intercept all the calls + // + if(!LoadPacketDll(DllFullPath)) + { + _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "unable to load packet.dll"); + + delete_service(NpfDrNameWhId); + unlink(DllFullPath); + unlink(DriverFullPath); + + ReleaseMutex(hMx); + + WoemReportError(); + + if(hMx!=0) + { + CloseHandle(hMx); + hMx = NULL; + + } + if (hSp!=0) + { + CloseHandle(hSp); + hSp = NULL; + } + + return FALSE; + } + + // + // Now we can release the MUTEX + // + ReleaseMutex(hMx); + + return TRUE; +} + +//////////////////////////////////////////////////////////////////// +// Function called when a process loads the dll. +//////////////////////////////////////////////////////////////////// +BOOL WoemLeaveDll() +{ + DWORD result; + BOOLEAN retry; + + // + // Try to acquire the ownership of the mutex + // + retry = TRUE; + do + { + DWORD result=WaitForSingleObject(hMx, 10000); + switch(result) + { + case WAIT_FAILED: + + if(hMx!=0) + { + CloseHandle(hMx); + hMx = NULL; + + } + if (hSp!=0) + { + CloseHandle(hSp); + hSp = NULL; + } + + return FALSE; + + case WAIT_TIMEOUT: + + break; + + default: + retry = FALSE; + break; + } + } while (retry); + + + // + // See if the semaphore count is 1 + // + if(WaitForSingleObject(hSp, 0) == WAIT_FAILED) + { + ReleaseMutex(hMx); + + if(hMx!=0) + { + CloseHandle(hMx); + hMx = NULL; + + } + if (hSp!=0) + { + CloseHandle(hSp); + hSp = NULL; + } + + return FALSE; + } + + // + // Now check if we would block on the semaphore + // + result = WaitForSingleObject(hSp, 0); + + switch (result) + { + case WAIT_TIMEOUT: + + // + // IF WE ARE HERE, THE DLL IS BEING UNLOADED FOR THE LAST TIME. + // + + delete_service(NpfDrNameWhId); + + break; + + case WAIT_FAILED: + + ReleaseMutex(hMx); + + if(hMx!=0) + { + CloseHandle(hMx); + hMx = NULL; + + } + if (hSp!=0) + { + CloseHandle(hSp); + hSp = NULL; + } + + return FALSE; + + case WAIT_OBJECT_0: + if (ReleaseSemaphore(hSp,1,NULL) == FALSE) + { + ReleaseMutex(hMx); + + if(hMx!=0) + { + CloseHandle(hMx); + hMx = NULL; + + } + if (hSp!=0) + { + CloseHandle(hSp); + hSp = NULL; + } + + return FALSE; + } + + break; + } + + // + // Release the MUTEX + // + ReleaseMutex(hMx); + + // + // We're done, close the handles + // + if(hMx!=0) + { + CloseHandle(hMx); + hMx = NULL; + + } + if (hSp!=0) + { + CloseHandle(hSp); + hSp = NULL; + } + + return TRUE; +} + +//////////////////////////////////////////////////////////////////// +// Create the temporary registry key with the name that all the +// WinPcap components will use +//////////////////////////////////////////////////////////////////// +BOOL WoemCreateNameRegistryEntries() +{ + HKEY WinpcapKey; + DWORD DriverId = 0; + DWORD Type; + DWORD Len = sizeof(DriverId); + char KeyValBuf[MAX_WINPCAP_KEY_CHARS]; + WCHAR KeyValBufW[MAX_WINPCAP_KEY_CHARS]; + + // + // First, check if the WinPcap global key is already present and + // if yes retrieve the id of the last loaded instance + // + if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, + WINPCAP_GLOBAL_KEY, + 0, + KEY_ALL_ACCESS, + &WinpcapKey) == ERROR_SUCCESS) + { + // + // Key present, check the ID + // + if(RegQueryValueEx(WinpcapKey, + "npf_driver_id", + NULL, + &Type, + (LPBYTE)&DriverId, + &Len) != ERROR_SUCCESS) // We include two bytes for string termination + { + // + // Key present but ID not present: this is the result of some mess + // + DriverId = 0; + } + } + + // + // Do a cleanup, just to be sure + // + RegDeleteKey(HKEY_LOCAL_MACHINE, WINPCAP_GLOBAL_KEY); + + // + // Create the global WinPcap key + // + if(RegCreateKeyEx(HKEY_LOCAL_MACHINE, + WINPCAP_GLOBAL_KEY, + 0, + NULL, + REG_OPTION_NON_VOLATILE, + KEY_ALL_ACCESS, + NULL, + &WinpcapKey, + 0) != ERROR_SUCCESS) + { + return FALSE; + } + + // + // Increase the ID and write it into the registry + // + DriverId++; + + if(DriverId > 99) + DriverId = 0; + + if(RegSetValueEx(WinpcapKey, + "npf_driver_id", + 0, + REG_DWORD, + (LPBYTE)&DriverId, + sizeof(DriverId)) != ERROR_SUCCESS) + { + RegCloseKey(WinpcapKey); + + RegDeleteKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\CaceWinPcap"); + return FALSE; + } + + // + // Created the strings that we'll use to build the registry keys values + // and load the components + // +/* XXX this is the totally dynamic version! + + _snprintf(NpfDrNameWhId, + sizeof(NpfDrNameWhId) - 1, + "%s%.2d", + NPF_DRIVER_NAME, + DriverId); + + _snwprintf(NpfDrNameWhIdW, + sizeof(NpfDrNameWhIdW) / sizeof(WCHAR) - 1, + L"%ws%.2d", + NPF_DRIVER_NAME_WIDECHAR, + DriverId); +*/ + _snprintf(NpfDrNameWhId, + sizeof(NpfDrNameWhId) - 1, + "%s", + NPF_DRIVER_NAME); + + _snwprintf(NpfDrNameWhIdW, + sizeof(NpfDrNameWhIdW) / sizeof(WCHAR) - 1, + L"%ws", + NPF_DRIVER_NAME_WIDECHAR); + + // + // Add subkeys with the strings + // + + // npf_driver_name + + memset(KeyValBuf, sizeof(KeyValBuf), 0); + memset(KeyValBufW, sizeof(KeyValBufW), 0); + + if(RegSetValueEx(WinpcapKey, + "npf_driver_name", + 0, + REG_BINARY, + (LPBYTE)NpfDrNameWhId, + strlen(NpfDrNameWhId) + 1) != ERROR_SUCCESS) + { + RegCloseKey(WinpcapKey); + + RegDeleteKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\CaceWinPcap"); + return FALSE; + } + + // npf_driver_name_widechar + + memset(KeyValBuf, sizeof(KeyValBuf), 0); + memset(KeyValBufW, sizeof(KeyValBufW), 0); + + if(RegSetValueEx(WinpcapKey, + "npf_driver_name_widechar", + 0, + REG_BINARY, + (LPBYTE)NpfDrNameWhIdW, + (wcslen(NpfDrNameWhIdW) + 1) * sizeof(WCHAR)) != ERROR_SUCCESS) + { + RegCloseKey(WinpcapKey); + + RegDeleteKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\CaceWinPcap"); + return FALSE; + } + + // npf_service_desc_widechar + + memset(KeyValBuf, sizeof(KeyValBuf), 0); + memset(KeyValBufW, sizeof(KeyValBufW), 0); + + _snwprintf(KeyValBufW, + sizeof(KeyValBufW) / sizeof(WCHAR) - 1, + L"%ws (%ws)", + NPF_SERVICE_DESC_WIDECHAR, + NpfDrNameWhIdW); + + if(RegSetValueEx(WinpcapKey, + "npf_service_desc_widechar", + 0, + REG_BINARY, + (LPBYTE)KeyValBufW, + (wcslen(KeyValBufW) + 1) * sizeof(WCHAR)) != ERROR_SUCCESS) + { + RegCloseKey(WinpcapKey); + + RegDeleteKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\CaceWinPcap"); + return FALSE; + } + + // npf_service_registry_location_widechar + + memset(KeyValBuf, sizeof(KeyValBuf), 0); + memset(KeyValBufW, sizeof(KeyValBufW), 0); + + _snwprintf(KeyValBufW, + sizeof(KeyValBufW) / sizeof(WCHAR) - 1, + L"SYSTEM\\CurrentControlSet\\Services\\%ws", + NpfDrNameWhIdW); + + if(RegSetValueEx(WinpcapKey, + "npf_service_registry_location_widechar", + 0, + REG_BINARY, + (LPBYTE)KeyValBufW, + (wcslen(KeyValBufW) + 1) * sizeof(WCHAR)) != ERROR_SUCCESS) + { + RegCloseKey(WinpcapKey); + + RegDeleteKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\CaceWinPcap"); + return FALSE; + } + + // npf_complete_service_registry_location + + memset(KeyValBuf, sizeof(KeyValBuf), 0); + memset(KeyValBufW, sizeof(KeyValBufW), 0); + + _snprintf(KeyValBuf, + sizeof(KeyValBuf) / sizeof(CHAR) - 1, + "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\%s", + NpfDrNameWhId); + + if(RegSetValueEx(WinpcapKey, + "npf_complete_service_registry_location", + 0, + REG_BINARY, + (LPBYTE)KeyValBuf, + strlen(KeyValBuf) + 1) != ERROR_SUCCESS) + { + RegCloseKey(WinpcapKey); + + RegDeleteKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\CaceWinPcap"); + return FALSE; + } + + // npf_driver_path_widechar + + if(RegSetValueEx(WinpcapKey, + "npf_driver_path_widechar", + 0, + REG_BINARY, + (LPBYTE)NPF_DRIVER_PATH_WIDECHAR, + sizeof(NPF_DRIVER_PATH_WIDECHAR)) != ERROR_SUCCESS) + { + RegCloseKey(WinpcapKey); + + RegDeleteKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\CaceWinPcap"); + return FALSE; + } + + // npf_driver_binary_widechar + + memset(KeyValBuf, sizeof(KeyValBuf), 0); + memset(KeyValBufW, sizeof(KeyValBufW), 0); + + _snwprintf(KeyValBufW, + sizeof(KeyValBufW) / sizeof(WCHAR) - 1, + L"%ws.sys", + NpfDrNameWhIdW); + + if(RegSetValueEx(WinpcapKey, + "npf_driver_binary_widechar", + 0, + REG_BINARY, + (LPBYTE)KeyValBufW, + (wcslen(KeyValBufW) + 1) * sizeof(WCHAR)) != ERROR_SUCCESS) + { + RegCloseKey(WinpcapKey); + + RegDeleteKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\CaceWinPcap"); + return FALSE; + } + + // npf_device_names_prefix + + memset(KeyValBuf, sizeof(KeyValBuf), 0); + memset(KeyValBufW, sizeof(KeyValBufW), 0); + + _snprintf(KeyValBuf, + sizeof(KeyValBuf) / sizeof(CHAR) - 1, + "%s_", + NpfDrNameWhId); + + if(RegSetValueEx(WinpcapKey, + "npf_device_names_prefix", + 0, + REG_BINARY, + (LPBYTE)KeyValBuf, + strlen(KeyValBuf) + 1) != ERROR_SUCCESS) + { + RegCloseKey(WinpcapKey); + + RegDeleteKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\CaceWinPcap"); + return FALSE; + } + + // npf_device_names_prefix_widechar + + memset(KeyValBuf, sizeof(KeyValBuf), 0); + memset(KeyValBufW, sizeof(KeyValBufW), 0); + + _snwprintf(KeyValBufW, + sizeof(KeyValBufW) / sizeof(WCHAR) - 1, + L"%ws_", + NpfDrNameWhIdW); + + if(RegSetValueEx(WinpcapKey, + "npf_device_names_prefix_widechar", + 0, + REG_BINARY, + (LPBYTE)KeyValBufW, + (wcslen(KeyValBufW) + 1) * sizeof(WCHAR)) != ERROR_SUCCESS) + { + RegCloseKey(WinpcapKey); + + RegDeleteKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\CaceWinPcap"); + return FALSE; + } + + // npf_user_events_names + + memset(KeyValBuf, sizeof(KeyValBuf), 0); + memset(KeyValBufW, sizeof(KeyValBufW), 0); + + _snwprintf(KeyValBufW, + sizeof(KeyValBufW) / sizeof(WCHAR) - 1, + L"%ws0000000000", + NpfDrNameWhIdW); + + if(RegSetValueEx(WinpcapKey, + "npf_user_events_names", + 0, + REG_BINARY, + (LPBYTE)KeyValBufW, + (wcslen(KeyValBufW) + 1) * sizeof(WCHAR)) != ERROR_SUCCESS) + { + RegCloseKey(WinpcapKey); + + RegDeleteKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\CaceWinPcap"); + return FALSE; + } + + // npf_kernel_events_names + + memset(KeyValBuf, sizeof(KeyValBuf), 0); + memset(KeyValBufW, sizeof(KeyValBufW), 0); + + _snwprintf(KeyValBufW, + sizeof(KeyValBufW) / sizeof(WCHAR) - 1, + L"\\BaseNamedObjects\\%ws0000000000\0", + NpfDrNameWhIdW); + + if(RegSetValueEx(WinpcapKey, + "npf_kernel_events_names", + 0, + REG_BINARY, + (LPBYTE)KeyValBufW, + (wcslen(KeyValBufW) + 1) * sizeof(WCHAR)) != ERROR_SUCCESS) + { + RegCloseKey(WinpcapKey); + + RegDeleteKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\CaceWinPcap"); + return FALSE; + } + + // fake_ndiswan_adapter_name + + memset(KeyValBuf, sizeof(KeyValBuf), 0); + memset(KeyValBufW, sizeof(KeyValBufW), 0); + + _snprintf(KeyValBuf, + sizeof(KeyValBuf) / sizeof(CHAR) - 1, + "\\Device\\%s_GenericDialupAdapter", + NpfDrNameWhId); + + if(RegSetValueEx(WinpcapKey, + "fake_ndiswan_adapter_name", + 0, + REG_BINARY, + (LPBYTE)KeyValBuf, + strlen(KeyValBuf) + 1) != ERROR_SUCCESS) + { + RegCloseKey(WinpcapKey); + + RegDeleteKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\CaceWinPcap"); + return FALSE; + } + + // fake_ndiswan_adapter_description + + if(RegSetValueEx(WinpcapKey, + "fake_ndiswan_adapter_description", + 0, + REG_BINARY, + (LPBYTE)FAKE_NDISWAN_ADAPTER_DESCRIPTION, + sizeof(FAKE_NDISWAN_ADAPTER_DESCRIPTION)) != ERROR_SUCCESS) + { + RegCloseKey(WinpcapKey); + + RegDeleteKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\CaceWinPcap"); + return FALSE; + } + + // npf_driver_complete_widechar + + memset(KeyValBuf, sizeof(KeyValBuf), 0); + memset(KeyValBufW, sizeof(KeyValBufW), 0); + + _snwprintf(KeyValBufW, + sizeof(KeyValBufW) / sizeof(WCHAR) - 1, + L"system32\\drivers\\%ws.sys", + NpfDrNameWhIdW); + + if(RegSetValueEx(WinpcapKey, + "npf_driver_complete_widechar", + 0, + REG_BINARY, + (LPBYTE)KeyValBufW, + (wcslen(KeyValBufW) + 1) * sizeof(WCHAR)) != ERROR_SUCCESS) + { + RegCloseKey(WinpcapKey); + + RegDeleteKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\CaceWinPcap"); + return FALSE; + } + + // npf_driver_complete_driver_prefix + + memset(KeyValBuf, sizeof(KeyValBuf), 0); + memset(KeyValBufW, sizeof(KeyValBufW), 0); + + _snprintf(KeyValBuf, + sizeof(KeyValBuf) / sizeof(CHAR) - 1, + "\\Device\\%s_", + NpfDrNameWhId); + + if(RegSetValueEx(WinpcapKey, + "npf_driver_complete_driver_prefix", + 0, + REG_BINARY, + (LPBYTE)KeyValBuf, + strlen(KeyValBuf) + 1) != ERROR_SUCCESS) + { + RegCloseKey(WinpcapKey); + + RegDeleteKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\CaceWinPcap"); + return FALSE; + } + + RegCloseKey(WinpcapKey); + + return TRUE; +} + +//////////////////////////////////////////////////////////////////// +// Create the binaries names according to the name we have +//////////////////////////////////////////////////////////////////// +BOOL WoemCreateBinaryNames() +{ + UINT GsdRes; + + // + // Get the location of the system folder to create the complete paths + // + GsdRes = GetSystemDirectory(SysDir, sizeof(SysDir)); + if(GsdRes == 0 || GsdRes == sizeof(SysDir)) + { + return FALSE; + } + +/* XXX this is the totally dynamic version! + // + // First, check if the WinPcap global key is already present and + // if yes retrieve the id of the last loaded instance + // + if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, + WINPCAP_GLOBAL_KEY, + 0, + KEY_ALL_ACCESS, + &WinpcapKey) == ERROR_SUCCESS) + { + // + // Key present, check the ID + // + if(RegQueryValueEx(WinpcapKey, + "npf_driver_id", + NULL, + &Type, + (LPBYTE)&DriverId, + &Len) != ERROR_SUCCESS) // We include two bytes for string termination + { + // + // Key present but ID not present: this is the result of some mess + // + DriverId = 0; + } + } + + // + // Created the strings that we'll use to build the registry keys values + // and load the components + // + + _snprintf(NpfDrNameWhId, + sizeof(NpfDrNameWhId) - 1, + "%s%.2d", + NPF_DRIVER_NAME, + DriverId); + + _snwprintf(NpfDrNameWhIdW, + sizeof(NpfDrNameWhIdW) / sizeof(WCHAR) - 1, + L"%ws%.2d", + NPF_DRIVER_NAME_WIDECHAR, + DriverId); +*/ + _snprintf(NpfDrNameWhId, + sizeof(NpfDrNameWhId) - 1, + "%s", + NPF_DRIVER_NAME); + + _snwprintf(NpfDrNameWhIdW, + sizeof(NpfDrNameWhIdW) / sizeof(WCHAR) - 1, + L"%ws", + NPF_DRIVER_NAME_WIDECHAR); + + _snprintf(DllFullPath, + sizeof(DllFullPath) - 1, + "%s\\%swoem.tmp", + SysDir, + NpfDrNameWhId); + + _snprintf(DriverFullPath, + sizeof(DriverFullPath) - 1, + "%s\\drivers\\%s.sys", + SysDir, + NpfDrNameWhId); + + return TRUE; +} + +//////////////////////////////////////////////////////////////////// +// Delete the temporary registry key with the name that all the +// WinPcap components will use +//////////////////////////////////////////////////////////////////// +BOOL WoemDeleteNameRegistryEntries() +{ + if(RegDeleteKey(HKEY_LOCAL_MACHINE, WINPCAP_GLOBAL_KEY) != ERROR_SUCCESS) + return FALSE; + else + return TRUE; +} \ No newline at end of file diff --git a/OEM/WinpcapOem/WinpcapOem.def b/OEM/WinpcapOem/WinpcapOem.def new file mode 100644 index 00000000..e17e1290 --- /dev/null +++ b/OEM/WinpcapOem/WinpcapOem.def @@ -0,0 +1,34 @@ +LIBRARY packet + +EXPORTS + PacketGetVersion + PacketGetDriverVersion + PacketOpenAdapter + PacketSendPacket + PacketSendPackets + PacketAllocatePacket + PacketInitPacket + PacketFreePacket + PacketReceivePacket + PacketCloseAdapter + PacketSetHwFilter + PacketGetAdapterNames + PacketRequest + PacketSetBuff + PacketSetBpf + PacketSetSnapLen + PacketGetStats + PacketGetStatsEx + PacketGetNetType + PacketSetReadTimeout + PacketSetMode + PacketSetNumWrites + PacketGetNetInfoEx + PacketSetMinToCopy + PacketGetReadEvent + PacketStopDriver + PacketSetDumpName + PacketSetDumpLimits + PacketIsDumpEnded + + PacketGetLastOemError \ No newline at end of file diff --git a/OEM/WinpcapOem/WinpcapOem.dsp b/OEM/WinpcapOem/WinpcapOem.dsp new file mode 100644 index 00000000..0bf2281e --- /dev/null +++ b/OEM/WinpcapOem/WinpcapOem.dsp @@ -0,0 +1,173 @@ +# Microsoft Developer Studio Project File - Name="WinpcapOem" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 + +CFG=WinpcapOem - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "WinpcapOem.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "WinpcapOem.mak" CFG="WinpcapOem - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "WinpcapOem - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "WinpcapOem - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "WinpcapOem - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "WinpcapOem_EXPORTS" /Yu"stdafx.h" /FD /c +# ADD CPP /nologo /MT /W3 /GX /O2 /I ".\\" /D "NDEBUG" /D "_MBCS" /D "_USRDLL" /D "WinpcapOem_EXPORTS" /D "WIN32" /D "_WINDOWS" /FD /c +# SUBTRACT CPP /YX /Yc /Yu +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x410 /d "NDEBUG" +# ADD RSC /l 0x410 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 +# ADD LINK32 npptools.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"Release/Packet.dll" /libpath:"..\..\WinpcapOem\Release\\" + +!ELSEIF "$(CFG)" == "WinpcapOem - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "WinpcapOem_EXPORTS" /Yu"stdafx.h" /FD /GZ /c +# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I ".\\" /D "_DEBUG" /D "_MBCS" /D "_USRDLL" /D "WinpcapOem_EXPORTS" /D "WIN32" /D "_WINDOWS" /FD /GZ /c +# SUBTRACT CPP /YX /Yc /Yu +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x410 /d "_DEBUG" +# ADD RSC /l 0x410 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib npptools.lib /nologo /dll /debug /machine:I386 /out:"Debug/Packet.dll" /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "WinpcapOem - Win32 Release" +# Name "WinpcapOem - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\PacketWrapper.cpp +# End Source File +# Begin Source File + +SOURCE=.\Resources.cpp +# End Source File +# Begin Source File + +SOURCE=.\SerivcesInstallers.cpp +# End Source File +# Begin Source File + +SOURCE=.\WinPcapOem.cpp +# End Source File +# Begin Source File + +SOURCE=.\WinPcapOem.rc +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=.\idls.h +# End Source File +# Begin Source File + +SOURCE=.\netcfgn.h +# End Source File +# Begin Source File + +SOURCE=.\netcfgx.h +# End Source File +# Begin Source File + +SOURCE=.\NetMonInstaller.h +# End Source File +# Begin Source File + +SOURCE=.\pch.h +# End Source File +# Begin Source File + +SOURCE=.\version.h +# End Source File +# Begin Source File + +SOURCE=.\WinpcapOem.h +# End Source File +# Begin Source File + +SOURCE=..\..\Common\WpcapNames.h +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# Begin Source File + +SOURCE=.\binaries\npf2k.sys +# End Source File +# Begin Source File + +SOURCE=.\binaries\Packet2k.dll +# End Source File +# Begin Source File + +SOURCE=.\Packet2k.dll +# End Source File +# Begin Source File + +SOURCE=.\WinpcapOem.def +# End Source File +# End Target +# End Project diff --git a/OEM/WinpcapOem/WinpcapOem.dsw b/OEM/WinpcapOem/WinpcapOem.dsw new file mode 100644 index 00000000..4ece9b32 --- /dev/null +++ b/OEM/WinpcapOem/WinpcapOem.dsw @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "WinpcapOem"=.\WinpcapOem.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/OEM/WinpcapOem/WinpcapOem.h b/OEM/WinpcapOem/WinpcapOem.h new file mode 100644 index 00000000..359b83ee --- /dev/null +++ b/OEM/WinpcapOem/WinpcapOem.h @@ -0,0 +1,68 @@ +//////////////////////////////////////////////////////////////////// +// Constants and names +//////////////////////////////////////////////////////////////////// + +#define MUTEX_NAME "WinPcapOEM-MutexProtectMultipleInstances" +#define SEMAPHORE_NAME "WinPcapOEM-SemaphoreProtectMultipleInstances" +#define MAX_VALUE_SEMAPHORE 65535 +#define MAX_OBJNAME_LEN 1024 +#define PACKET_ERRSTR_SIZE 1024 + +//////////////////////////////////////////////////////////////////// +// Services-related prototypes +//////////////////////////////////////////////////////////////////// +int delete_service(LPCTSTR ServiceName); +int stop_service(LPCTSTR ServiceName); +int start_service(LPCTSTR ServiceName); +int create_driver_service(LPCTSTR ServiceName, LPCTSTR ServiceDescription, LPCTSTR ServicePath); +int check_if_service_is_running(LPCTSTR ServiceName); +int check_if_service_is_present(LPCTSTR ServiceName); +int change_start_type_service(LPCTSTR ServiceName, DWORD StartType); +HRESULT HrInstallNetMonProtocol(); +HRESULT HrUninstallNetMonProtocol(); + +//////////////////////////////////////////////////////////////////// +// Packet.dll wrapper prototypes +//////////////////////////////////////////////////////////////////// +BOOL LoadPacketDll(char *PacketDllFileName); +void UnloadAndDeleteDll(char *PacketDllFileName); +BOOL WoemEnterDll(HINSTANCE DllHandle); +BOOL WoemLeaveDll(); + +//////////////////////////////////////////////////////////////////// +// Resources handling prototypes +//////////////////////////////////////////////////////////////////// +BOOL WoemSaveResourceToDisk(HINSTANCE hInst, int ResID, char* FileName); + +//////////////////////////////////////////////////////////////////// +// Registry and names-related functions +//////////////////////////////////////////////////////////////////// +BOOL WoemCreateNameRegistryEntries(); +BOOL WoemCreateBinaryNames(); + +//////////////////////////////////////////////////////////////////// +// Debug definitions +//////////////////////////////////////////////////////////////////// + +#define DEBUGTRACE +//#define TRACE_OUTPUTDEBUGSTRING + +#ifdef DEBUGTRACE +#define TracePrint printf +#define WoemReportError() MessageBox(NULL, LastWoemError, "WinPcap OEM error", MB_OK) +#else +#define TracePrint +#define WoemReportError() +#endif // DEBUGTRACE + +#ifdef TRACE_MBOXES +#define TraceEnter(X) MessageBox(NULL, X, "WinPcap OEM trace", MB_OK) +#else +#define TraceEnter(X) +#endif + +#ifdef TRACE_OUTPUTDEBUGSTRING +#define TraceEnter(X) OutputDebugString(X) +#else +#define TraceEnter(X) +#endif diff --git a/OEM/WinpcapOem/WinpcapOem.rc b/OEM/WinpcapOem/WinpcapOem.rc new file mode 100644 index 00000000..8e30203b --- /dev/null +++ b/OEM/WinpcapOem/WinpcapOem.rc @@ -0,0 +1,74 @@ +//Microsoft Developer Studio generated resource script. +// +#include "resrc1.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "resource.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// +// Data +// + +IDP_DLL2K RCDATA MOVEABLE PURE "binaries\\packet2k.dll" +IDP_DRI2K RCDATA MOVEABLE PURE "binaries\\npf2k.sys" +IDP_DLLNT RCDATA MOVEABLE PURE "binaries\\packetnt.dll" +IDP_DRINT RCDATA MOVEABLE PURE "binaries\\npfnt.sys" + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE DISCARDABLE +BEGIN + "resrc1.h\0" +END + +2 TEXTINCLUDE DISCARDABLE +BEGIN + "#include ""resource.h""\r\n" + "\0" +END + +3 TEXTINCLUDE DISCARDABLE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// String Table +// + +STRINGTABLE DISCARDABLE +BEGIN + Wpcap "NPF" +END + +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/OEM/WinpcapOem/binaries/Note.txt b/OEM/WinpcapOem/binaries/Note.txt new file mode 100644 index 00000000..51f3a1b0 --- /dev/null +++ b/OEM/WinpcapOem/binaries/Note.txt @@ -0,0 +1,6 @@ +Put here the binaries that will be linked as resources to the winpcap OEM packet.dll: + +Packet2k.dll: Windows 2k/XP/2003 packet.dll +Packetnt.dll: Windows NT packet.dll +npf2k.sys: Windows 2k/XP/2003 driver +npfnt.sys: Windows NT driver diff --git a/OEM/WinpcapOem/idls.h b/OEM/WinpcapOem/idls.h new file mode 100644 index 00000000..4e2cd74b --- /dev/null +++ b/OEM/WinpcapOem/idls.h @@ -0,0 +1,2518 @@ + + +/* this ALWAYS GENERATED file contains the definitions for the interfaces */ + + + /* File created by MIDL compiler version 6.00.0361 */ +/* Compiler settings for idls.idl: + Oicf, W1, Zp8, env=Win32 (32b run) + protocol : dce , ms_ext, c_ext, robust + error checks: allocation ref bounds_check enum stub_data + VC __declspec() decoration level: + __declspec(uuid()), __declspec(selectany), __declspec(novtable) + DECLSPEC_UUID(), MIDL_INTERFACE() +*/ +//@@MIDL_FILE_HEADING( ) + +#pragma warning( disable: 4049 ) /* more than 64k source lines */ + + +/* verify that the version is high enough to compile this file*/ +#ifndef __REQUIRED_RPCNDR_H_VERSION__ +#define __REQUIRED_RPCNDR_H_VERSION__ 475 +#endif + +#include "rpc.h" +#include "rpcndr.h" + +#ifndef __RPCNDR_H_VERSION__ +#error this stub requires an updated version of +#endif // __RPCNDR_H_VERSION__ + +#ifndef COM_NO_WINDOWS_H +#include "windows.h" +#include "ole2.h" +#endif /*COM_NO_WINDOWS_H*/ + +#ifndef __idls_h__ +#define __idls_h__ + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#pragma once +#endif + +/* Forward Declarations */ + +#ifndef __IEnumNetCfgBindingInterface_FWD_DEFINED__ +#define __IEnumNetCfgBindingInterface_FWD_DEFINED__ +typedef interface IEnumNetCfgBindingInterface IEnumNetCfgBindingInterface; +#endif /* __IEnumNetCfgBindingInterface_FWD_DEFINED__ */ + + +#ifndef __IEnumNetCfgBindingPath_FWD_DEFINED__ +#define __IEnumNetCfgBindingPath_FWD_DEFINED__ +typedef interface IEnumNetCfgBindingPath IEnumNetCfgBindingPath; +#endif /* __IEnumNetCfgBindingPath_FWD_DEFINED__ */ + + +#ifndef __IEnumNetCfgComponent_FWD_DEFINED__ +#define __IEnumNetCfgComponent_FWD_DEFINED__ +typedef interface IEnumNetCfgComponent IEnumNetCfgComponent; +#endif /* __IEnumNetCfgComponent_FWD_DEFINED__ */ + + +#ifndef __INetCfg_FWD_DEFINED__ +#define __INetCfg_FWD_DEFINED__ +typedef interface INetCfg INetCfg; +#endif /* __INetCfg_FWD_DEFINED__ */ + + +#ifndef __INetCfgLock_FWD_DEFINED__ +#define __INetCfgLock_FWD_DEFINED__ +typedef interface INetCfgLock INetCfgLock; +#endif /* __INetCfgLock_FWD_DEFINED__ */ + + +#ifndef __INetCfgBindingInterface_FWD_DEFINED__ +#define __INetCfgBindingInterface_FWD_DEFINED__ +typedef interface INetCfgBindingInterface INetCfgBindingInterface; +#endif /* __INetCfgBindingInterface_FWD_DEFINED__ */ + + +#ifndef __INetCfgBindingPath_FWD_DEFINED__ +#define __INetCfgBindingPath_FWD_DEFINED__ +typedef interface INetCfgBindingPath INetCfgBindingPath; +#endif /* __INetCfgBindingPath_FWD_DEFINED__ */ + + +#ifndef __INetCfgClass_FWD_DEFINED__ +#define __INetCfgClass_FWD_DEFINED__ +typedef interface INetCfgClass INetCfgClass; +#endif /* __INetCfgClass_FWD_DEFINED__ */ + + +#ifndef __INetCfgClassSetup_FWD_DEFINED__ +#define __INetCfgClassSetup_FWD_DEFINED__ +typedef interface INetCfgClassSetup INetCfgClassSetup; +#endif /* __INetCfgClassSetup_FWD_DEFINED__ */ + + +#ifndef __INetCfgComponent_FWD_DEFINED__ +#define __INetCfgComponent_FWD_DEFINED__ +typedef interface INetCfgComponent INetCfgComponent; +#endif /* __INetCfgComponent_FWD_DEFINED__ */ + + +#ifndef __INetCfgComponentBindings_FWD_DEFINED__ +#define __INetCfgComponentBindings_FWD_DEFINED__ +typedef interface INetCfgComponentBindings INetCfgComponentBindings; +#endif /* __INetCfgComponentBindings_FWD_DEFINED__ */ + + +#ifndef __INetCfgSysPrep_FWD_DEFINED__ +#define __INetCfgSysPrep_FWD_DEFINED__ +typedef interface INetCfgSysPrep INetCfgSysPrep; +#endif /* __INetCfgSysPrep_FWD_DEFINED__ */ + + +/* header files for imported files */ +#include "unknwn.h" +#include "prsht.h" + +#ifdef __cplusplus +extern "C"{ +#endif + +void * __RPC_USER MIDL_user_allocate(size_t); +void __RPC_USER MIDL_user_free( void * ); + +/* interface __MIDL_itf_idls_0000 */ +/* [local] */ + +//+------------------------------------------------------------------------- +// +// Microsoft Windows +// Copyright (c) Microsoft Corporation. All rights reserved. +// +//-------------------------------------------------------------------------- +#if ( _MSC_VER >= 800 ) +#pragma warning(disable:4201) +#endif + +EXTERN_C const CLSID CLSID_CNetCfg; + +#define NETCFG_E_ALREADY_INITIALIZED MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0xA020) +#define NETCFG_E_NOT_INITIALIZED MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0xA021) +#define NETCFG_E_IN_USE MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0xA022) +#define NETCFG_E_NO_WRITE_LOCK MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0xA024) +#define NETCFG_E_NEED_REBOOT MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0xA025) +#define NETCFG_E_ACTIVE_RAS_CONNECTIONS MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0xA026) +#define NETCFG_E_ADAPTER_NOT_FOUND MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0xA027) +#define NETCFG_E_COMPONENT_REMOVED_PENDING_REBOOT MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0xA028) +#define NETCFG_S_REBOOT MAKE_HRESULT(SEVERITY_SUCCESS, FACILITY_ITF, 0xA020) +#define NETCFG_S_DISABLE_QUERY MAKE_HRESULT(SEVERITY_SUCCESS, FACILITY_ITF, 0xA022) +#define NETCFG_S_STILL_REFERENCED MAKE_HRESULT(SEVERITY_SUCCESS, FACILITY_ITF, 0xA023) +#define NETCFG_S_CAUSED_SETUP_CHANGE MAKE_HRESULT(SEVERITY_SUCCESS, FACILITY_ITF, 0xA024) +#define NETCFG_S_COMMIT_NOW MAKE_HRESULT(SEVERITY_SUCCESS, FACILITY_ITF, 0xA025) + +#define NETCFG_CLIENT_CID_MS_MSClient TEXT("ms_msclient") +#define NETCFG_SERVICE_CID_MS_SERVER TEXT("ms_server") +#define NETCFG_SERVICE_CID_MS_NETBIOS TEXT("ms_netbios") +#define NETCFG_SERVICE_CID_MS_PSCHED TEXT("ms_pschedpc") +#define NETCFG_SERVICE_CID_MS_WLBS TEXT("ms_wlbs") +#define NETCFG_TRANS_CID_MS_APPLETALK TEXT("ms_appletalk") +#define NETCFG_TRANS_CID_MS_NETBEUI TEXT("ms_netbeui") +#define NETCFG_TRANS_CID_MS_NETMON TEXT("ms_netmon") +#define NETCFG_TRANS_CID_MS_NWIPX TEXT("ms_nwipx") +#define NETCFG_TRANS_CID_MS_NWSPX TEXT("ms_nwspx") +#define NETCFG_TRANS_CID_MS_TCPIP TEXT("ms_tcpip") + + + + + + + + + + + + + + + + +extern RPC_IF_HANDLE __MIDL_itf_idls_0000_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_idls_0000_v0_0_s_ifspec; + +#ifndef __IEnumNetCfgBindingInterface_INTERFACE_DEFINED__ +#define __IEnumNetCfgBindingInterface_INTERFACE_DEFINED__ + +/* interface IEnumNetCfgBindingInterface */ +/* [unique][uuid][object][local] */ + + +EXTERN_C const IID IID_IEnumNetCfgBindingInterface; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("C0E8AE90-306E-11D1-AACF-00805FC1270E") + IEnumNetCfgBindingInterface : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Next( + /* [in] */ ULONG celt, + /* [length_is][size_is][out] */ INetCfgBindingInterface **rgelt, + /* [out] */ ULONG *pceltFetched) = 0; + + virtual HRESULT STDMETHODCALLTYPE Skip( + /* [in] */ ULONG celt) = 0; + + virtual HRESULT STDMETHODCALLTYPE Reset( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE Clone( + /* [out] */ IEnumNetCfgBindingInterface **ppenum) = 0; + + }; + +#else /* C style interface */ + + typedef struct IEnumNetCfgBindingInterfaceVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IEnumNetCfgBindingInterface * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IEnumNetCfgBindingInterface * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IEnumNetCfgBindingInterface * This); + + HRESULT ( STDMETHODCALLTYPE *Next )( + IEnumNetCfgBindingInterface * This, + /* [in] */ ULONG celt, + /* [length_is][size_is][out] */ INetCfgBindingInterface **rgelt, + /* [out] */ ULONG *pceltFetched); + + HRESULT ( STDMETHODCALLTYPE *Skip )( + IEnumNetCfgBindingInterface * This, + /* [in] */ ULONG celt); + + HRESULT ( STDMETHODCALLTYPE *Reset )( + IEnumNetCfgBindingInterface * This); + + HRESULT ( STDMETHODCALLTYPE *Clone )( + IEnumNetCfgBindingInterface * This, + /* [out] */ IEnumNetCfgBindingInterface **ppenum); + + END_INTERFACE + } IEnumNetCfgBindingInterfaceVtbl; + + interface IEnumNetCfgBindingInterface + { + CONST_VTBL struct IEnumNetCfgBindingInterfaceVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IEnumNetCfgBindingInterface_QueryInterface(This,riid,ppvObject) \ + (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) + +#define IEnumNetCfgBindingInterface_AddRef(This) \ + (This)->lpVtbl -> AddRef(This) + +#define IEnumNetCfgBindingInterface_Release(This) \ + (This)->lpVtbl -> Release(This) + + +#define IEnumNetCfgBindingInterface_Next(This,celt,rgelt,pceltFetched) \ + (This)->lpVtbl -> Next(This,celt,rgelt,pceltFetched) + +#define IEnumNetCfgBindingInterface_Skip(This,celt) \ + (This)->lpVtbl -> Skip(This,celt) + +#define IEnumNetCfgBindingInterface_Reset(This) \ + (This)->lpVtbl -> Reset(This) + +#define IEnumNetCfgBindingInterface_Clone(This,ppenum) \ + (This)->lpVtbl -> Clone(This,ppenum) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + +HRESULT STDMETHODCALLTYPE IEnumNetCfgBindingInterface_Next_Proxy( + IEnumNetCfgBindingInterface * This, + /* [in] */ ULONG celt, + /* [length_is][size_is][out] */ INetCfgBindingInterface **rgelt, + /* [out] */ ULONG *pceltFetched); + + +void __RPC_STUB IEnumNetCfgBindingInterface_Next_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE IEnumNetCfgBindingInterface_Skip_Proxy( + IEnumNetCfgBindingInterface * This, + /* [in] */ ULONG celt); + + +void __RPC_STUB IEnumNetCfgBindingInterface_Skip_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE IEnumNetCfgBindingInterface_Reset_Proxy( + IEnumNetCfgBindingInterface * This); + + +void __RPC_STUB IEnumNetCfgBindingInterface_Reset_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE IEnumNetCfgBindingInterface_Clone_Proxy( + IEnumNetCfgBindingInterface * This, + /* [out] */ IEnumNetCfgBindingInterface **ppenum); + + +void __RPC_STUB IEnumNetCfgBindingInterface_Clone_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#endif /* __IEnumNetCfgBindingInterface_INTERFACE_DEFINED__ */ + + +#ifndef __IEnumNetCfgBindingPath_INTERFACE_DEFINED__ +#define __IEnumNetCfgBindingPath_INTERFACE_DEFINED__ + +/* interface IEnumNetCfgBindingPath */ +/* [unique][uuid][object][local] */ + + +EXTERN_C const IID IID_IEnumNetCfgBindingPath; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("C0E8AE91-306E-11D1-AACF-00805FC1270E") + IEnumNetCfgBindingPath : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Next( + /* [in] */ ULONG celt, + /* [length_is][size_is][out] */ INetCfgBindingPath **rgelt, + /* [out] */ ULONG *pceltFetched) = 0; + + virtual HRESULT STDMETHODCALLTYPE Skip( + /* [in] */ ULONG celt) = 0; + + virtual HRESULT STDMETHODCALLTYPE Reset( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE Clone( + /* [out] */ IEnumNetCfgBindingPath **ppenum) = 0; + + }; + +#else /* C style interface */ + + typedef struct IEnumNetCfgBindingPathVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IEnumNetCfgBindingPath * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IEnumNetCfgBindingPath * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IEnumNetCfgBindingPath * This); + + HRESULT ( STDMETHODCALLTYPE *Next )( + IEnumNetCfgBindingPath * This, + /* [in] */ ULONG celt, + /* [length_is][size_is][out] */ INetCfgBindingPath **rgelt, + /* [out] */ ULONG *pceltFetched); + + HRESULT ( STDMETHODCALLTYPE *Skip )( + IEnumNetCfgBindingPath * This, + /* [in] */ ULONG celt); + + HRESULT ( STDMETHODCALLTYPE *Reset )( + IEnumNetCfgBindingPath * This); + + HRESULT ( STDMETHODCALLTYPE *Clone )( + IEnumNetCfgBindingPath * This, + /* [out] */ IEnumNetCfgBindingPath **ppenum); + + END_INTERFACE + } IEnumNetCfgBindingPathVtbl; + + interface IEnumNetCfgBindingPath + { + CONST_VTBL struct IEnumNetCfgBindingPathVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IEnumNetCfgBindingPath_QueryInterface(This,riid,ppvObject) \ + (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) + +#define IEnumNetCfgBindingPath_AddRef(This) \ + (This)->lpVtbl -> AddRef(This) + +#define IEnumNetCfgBindingPath_Release(This) \ + (This)->lpVtbl -> Release(This) + + +#define IEnumNetCfgBindingPath_Next(This,celt,rgelt,pceltFetched) \ + (This)->lpVtbl -> Next(This,celt,rgelt,pceltFetched) + +#define IEnumNetCfgBindingPath_Skip(This,celt) \ + (This)->lpVtbl -> Skip(This,celt) + +#define IEnumNetCfgBindingPath_Reset(This) \ + (This)->lpVtbl -> Reset(This) + +#define IEnumNetCfgBindingPath_Clone(This,ppenum) \ + (This)->lpVtbl -> Clone(This,ppenum) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + +HRESULT STDMETHODCALLTYPE IEnumNetCfgBindingPath_Next_Proxy( + IEnumNetCfgBindingPath * This, + /* [in] */ ULONG celt, + /* [length_is][size_is][out] */ INetCfgBindingPath **rgelt, + /* [out] */ ULONG *pceltFetched); + + +void __RPC_STUB IEnumNetCfgBindingPath_Next_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE IEnumNetCfgBindingPath_Skip_Proxy( + IEnumNetCfgBindingPath * This, + /* [in] */ ULONG celt); + + +void __RPC_STUB IEnumNetCfgBindingPath_Skip_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE IEnumNetCfgBindingPath_Reset_Proxy( + IEnumNetCfgBindingPath * This); + + +void __RPC_STUB IEnumNetCfgBindingPath_Reset_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE IEnumNetCfgBindingPath_Clone_Proxy( + IEnumNetCfgBindingPath * This, + /* [out] */ IEnumNetCfgBindingPath **ppenum); + + +void __RPC_STUB IEnumNetCfgBindingPath_Clone_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#endif /* __IEnumNetCfgBindingPath_INTERFACE_DEFINED__ */ + + +#ifndef __IEnumNetCfgComponent_INTERFACE_DEFINED__ +#define __IEnumNetCfgComponent_INTERFACE_DEFINED__ + +/* interface IEnumNetCfgComponent */ +/* [unique][uuid][object][local] */ + + +EXTERN_C const IID IID_IEnumNetCfgComponent; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("C0E8AE92-306E-11D1-AACF-00805FC1270E") + IEnumNetCfgComponent : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Next( + /* [in] */ ULONG celt, + /* [length_is][size_is][out] */ INetCfgComponent **rgelt, + /* [out] */ ULONG *pceltFetched) = 0; + + virtual HRESULT STDMETHODCALLTYPE Skip( + /* [in] */ ULONG celt) = 0; + + virtual HRESULT STDMETHODCALLTYPE Reset( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE Clone( + /* [out] */ IEnumNetCfgComponent **ppenum) = 0; + + }; + +#else /* C style interface */ + + typedef struct IEnumNetCfgComponentVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IEnumNetCfgComponent * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IEnumNetCfgComponent * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IEnumNetCfgComponent * This); + + HRESULT ( STDMETHODCALLTYPE *Next )( + IEnumNetCfgComponent * This, + /* [in] */ ULONG celt, + /* [length_is][size_is][out] */ INetCfgComponent **rgelt, + /* [out] */ ULONG *pceltFetched); + + HRESULT ( STDMETHODCALLTYPE *Skip )( + IEnumNetCfgComponent * This, + /* [in] */ ULONG celt); + + HRESULT ( STDMETHODCALLTYPE *Reset )( + IEnumNetCfgComponent * This); + + HRESULT ( STDMETHODCALLTYPE *Clone )( + IEnumNetCfgComponent * This, + /* [out] */ IEnumNetCfgComponent **ppenum); + + END_INTERFACE + } IEnumNetCfgComponentVtbl; + + interface IEnumNetCfgComponent + { + CONST_VTBL struct IEnumNetCfgComponentVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IEnumNetCfgComponent_QueryInterface(This,riid,ppvObject) \ + (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) + +#define IEnumNetCfgComponent_AddRef(This) \ + (This)->lpVtbl -> AddRef(This) + +#define IEnumNetCfgComponent_Release(This) \ + (This)->lpVtbl -> Release(This) + + +#define IEnumNetCfgComponent_Next(This,celt,rgelt,pceltFetched) \ + (This)->lpVtbl -> Next(This,celt,rgelt,pceltFetched) + +#define IEnumNetCfgComponent_Skip(This,celt) \ + (This)->lpVtbl -> Skip(This,celt) + +#define IEnumNetCfgComponent_Reset(This) \ + (This)->lpVtbl -> Reset(This) + +#define IEnumNetCfgComponent_Clone(This,ppenum) \ + (This)->lpVtbl -> Clone(This,ppenum) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + +HRESULT STDMETHODCALLTYPE IEnumNetCfgComponent_Next_Proxy( + IEnumNetCfgComponent * This, + /* [in] */ ULONG celt, + /* [length_is][size_is][out] */ INetCfgComponent **rgelt, + /* [out] */ ULONG *pceltFetched); + + +void __RPC_STUB IEnumNetCfgComponent_Next_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE IEnumNetCfgComponent_Skip_Proxy( + IEnumNetCfgComponent * This, + /* [in] */ ULONG celt); + + +void __RPC_STUB IEnumNetCfgComponent_Skip_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE IEnumNetCfgComponent_Reset_Proxy( + IEnumNetCfgComponent * This); + + +void __RPC_STUB IEnumNetCfgComponent_Reset_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE IEnumNetCfgComponent_Clone_Proxy( + IEnumNetCfgComponent * This, + /* [out] */ IEnumNetCfgComponent **ppenum); + + +void __RPC_STUB IEnumNetCfgComponent_Clone_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#endif /* __IEnumNetCfgComponent_INTERFACE_DEFINED__ */ + + +#ifndef __INetCfg_INTERFACE_DEFINED__ +#define __INetCfg_INTERFACE_DEFINED__ + +/* interface INetCfg */ +/* [unique][uuid][object][local] */ + + +EXTERN_C const IID IID_INetCfg; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("C0E8AE93-306E-11D1-AACF-00805FC1270E") + INetCfg : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Initialize( + /* [in] */ PVOID pvReserved) = 0; + + virtual HRESULT STDMETHODCALLTYPE Uninitialize( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE Apply( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE Cancel( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE EnumComponents( + /* [in] */ const GUID *pguidClass, + /* [out] */ IEnumNetCfgComponent **ppenumComponent) = 0; + + virtual HRESULT STDMETHODCALLTYPE FindComponent( + /* [string][in] */ LPCWSTR pszwInfId, + /* [out] */ INetCfgComponent **pComponent) = 0; + + virtual HRESULT STDMETHODCALLTYPE QueryNetCfgClass( + /* [in] */ const GUID *pguidClass, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppvObject) = 0; + + }; + +#else /* C style interface */ + + typedef struct INetCfgVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + INetCfg * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + INetCfg * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + INetCfg * This); + + HRESULT ( STDMETHODCALLTYPE *Initialize )( + INetCfg * This, + /* [in] */ PVOID pvReserved); + + HRESULT ( STDMETHODCALLTYPE *Uninitialize )( + INetCfg * This); + + HRESULT ( STDMETHODCALLTYPE *Apply )( + INetCfg * This); + + HRESULT ( STDMETHODCALLTYPE *Cancel )( + INetCfg * This); + + HRESULT ( STDMETHODCALLTYPE *EnumComponents )( + INetCfg * This, + /* [in] */ const GUID *pguidClass, + /* [out] */ IEnumNetCfgComponent **ppenumComponent); + + HRESULT ( STDMETHODCALLTYPE *FindComponent )( + INetCfg * This, + /* [string][in] */ LPCWSTR pszwInfId, + /* [out] */ INetCfgComponent **pComponent); + + HRESULT ( STDMETHODCALLTYPE *QueryNetCfgClass )( + INetCfg * This, + /* [in] */ const GUID *pguidClass, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppvObject); + + END_INTERFACE + } INetCfgVtbl; + + interface INetCfg + { + CONST_VTBL struct INetCfgVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define INetCfg_QueryInterface(This,riid,ppvObject) \ + (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) + +#define INetCfg_AddRef(This) \ + (This)->lpVtbl -> AddRef(This) + +#define INetCfg_Release(This) \ + (This)->lpVtbl -> Release(This) + + +#define INetCfg_Initialize(This,pvReserved) \ + (This)->lpVtbl -> Initialize(This,pvReserved) + +#define INetCfg_Uninitialize(This) \ + (This)->lpVtbl -> Uninitialize(This) + +#define INetCfg_Apply(This) \ + (This)->lpVtbl -> Apply(This) + +#define INetCfg_Cancel(This) \ + (This)->lpVtbl -> Cancel(This) + +#define INetCfg_EnumComponents(This,pguidClass,ppenumComponent) \ + (This)->lpVtbl -> EnumComponents(This,pguidClass,ppenumComponent) + +#define INetCfg_FindComponent(This,pszwInfId,pComponent) \ + (This)->lpVtbl -> FindComponent(This,pszwInfId,pComponent) + +#define INetCfg_QueryNetCfgClass(This,pguidClass,riid,ppvObject) \ + (This)->lpVtbl -> QueryNetCfgClass(This,pguidClass,riid,ppvObject) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + +HRESULT STDMETHODCALLTYPE INetCfg_Initialize_Proxy( + INetCfg * This, + /* [in] */ PVOID pvReserved); + + +void __RPC_STUB INetCfg_Initialize_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfg_Uninitialize_Proxy( + INetCfg * This); + + +void __RPC_STUB INetCfg_Uninitialize_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfg_Apply_Proxy( + INetCfg * This); + + +void __RPC_STUB INetCfg_Apply_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfg_Cancel_Proxy( + INetCfg * This); + + +void __RPC_STUB INetCfg_Cancel_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfg_EnumComponents_Proxy( + INetCfg * This, + /* [in] */ const GUID *pguidClass, + /* [out] */ IEnumNetCfgComponent **ppenumComponent); + + +void __RPC_STUB INetCfg_EnumComponents_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfg_FindComponent_Proxy( + INetCfg * This, + /* [string][in] */ LPCWSTR pszwInfId, + /* [out] */ INetCfgComponent **pComponent); + + +void __RPC_STUB INetCfg_FindComponent_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfg_QueryNetCfgClass_Proxy( + INetCfg * This, + /* [in] */ const GUID *pguidClass, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppvObject); + + +void __RPC_STUB INetCfg_QueryNetCfgClass_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#endif /* __INetCfg_INTERFACE_DEFINED__ */ + + +#ifndef __INetCfgLock_INTERFACE_DEFINED__ +#define __INetCfgLock_INTERFACE_DEFINED__ + +/* interface INetCfgLock */ +/* [unique][uuid][object][local] */ + + +EXTERN_C const IID IID_INetCfgLock; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("C0E8AE9F-306E-11D1-AACF-00805FC1270E") + INetCfgLock : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE AcquireWriteLock( + /* [in] */ DWORD cmsTimeout, + /* [string][in] */ LPCWSTR pszwClientDescription, + /* [string][out] */ LPWSTR *ppszwClientDescription) = 0; + + virtual HRESULT STDMETHODCALLTYPE ReleaseWriteLock( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE IsWriteLocked( + /* [string][out] */ LPWSTR *ppszwClientDescription) = 0; + + }; + +#else /* C style interface */ + + typedef struct INetCfgLockVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + INetCfgLock * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + INetCfgLock * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + INetCfgLock * This); + + HRESULT ( STDMETHODCALLTYPE *AcquireWriteLock )( + INetCfgLock * This, + /* [in] */ DWORD cmsTimeout, + /* [string][in] */ LPCWSTR pszwClientDescription, + /* [string][out] */ LPWSTR *ppszwClientDescription); + + HRESULT ( STDMETHODCALLTYPE *ReleaseWriteLock )( + INetCfgLock * This); + + HRESULT ( STDMETHODCALLTYPE *IsWriteLocked )( + INetCfgLock * This, + /* [string][out] */ LPWSTR *ppszwClientDescription); + + END_INTERFACE + } INetCfgLockVtbl; + + interface INetCfgLock + { + CONST_VTBL struct INetCfgLockVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define INetCfgLock_QueryInterface(This,riid,ppvObject) \ + (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) + +#define INetCfgLock_AddRef(This) \ + (This)->lpVtbl -> AddRef(This) + +#define INetCfgLock_Release(This) \ + (This)->lpVtbl -> Release(This) + + +#define INetCfgLock_AcquireWriteLock(This,cmsTimeout,pszwClientDescription,ppszwClientDescription) \ + (This)->lpVtbl -> AcquireWriteLock(This,cmsTimeout,pszwClientDescription,ppszwClientDescription) + +#define INetCfgLock_ReleaseWriteLock(This) \ + (This)->lpVtbl -> ReleaseWriteLock(This) + +#define INetCfgLock_IsWriteLocked(This,ppszwClientDescription) \ + (This)->lpVtbl -> IsWriteLocked(This,ppszwClientDescription) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + +HRESULT STDMETHODCALLTYPE INetCfgLock_AcquireWriteLock_Proxy( + INetCfgLock * This, + /* [in] */ DWORD cmsTimeout, + /* [string][in] */ LPCWSTR pszwClientDescription, + /* [string][out] */ LPWSTR *ppszwClientDescription); + + +void __RPC_STUB INetCfgLock_AcquireWriteLock_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgLock_ReleaseWriteLock_Proxy( + INetCfgLock * This); + + +void __RPC_STUB INetCfgLock_ReleaseWriteLock_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgLock_IsWriteLocked_Proxy( + INetCfgLock * This, + /* [string][out] */ LPWSTR *ppszwClientDescription); + + +void __RPC_STUB INetCfgLock_IsWriteLocked_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#endif /* __INetCfgLock_INTERFACE_DEFINED__ */ + + +#ifndef __INetCfgBindingInterface_INTERFACE_DEFINED__ +#define __INetCfgBindingInterface_INTERFACE_DEFINED__ + +/* interface INetCfgBindingInterface */ +/* [unique][uuid][object][local] */ + + +EXTERN_C const IID IID_INetCfgBindingInterface; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("C0E8AE94-306E-11D1-AACF-00805FC1270E") + INetCfgBindingInterface : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE GetName( + /* [string][out] */ LPWSTR *ppszwInterfaceName) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetUpperComponent( + /* [out] */ INetCfgComponent **ppnccItem) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetLowerComponent( + /* [out] */ INetCfgComponent **ppnccItem) = 0; + + }; + +#else /* C style interface */ + + typedef struct INetCfgBindingInterfaceVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + INetCfgBindingInterface * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + INetCfgBindingInterface * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + INetCfgBindingInterface * This); + + HRESULT ( STDMETHODCALLTYPE *GetName )( + INetCfgBindingInterface * This, + /* [string][out] */ LPWSTR *ppszwInterfaceName); + + HRESULT ( STDMETHODCALLTYPE *GetUpperComponent )( + INetCfgBindingInterface * This, + /* [out] */ INetCfgComponent **ppnccItem); + + HRESULT ( STDMETHODCALLTYPE *GetLowerComponent )( + INetCfgBindingInterface * This, + /* [out] */ INetCfgComponent **ppnccItem); + + END_INTERFACE + } INetCfgBindingInterfaceVtbl; + + interface INetCfgBindingInterface + { + CONST_VTBL struct INetCfgBindingInterfaceVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define INetCfgBindingInterface_QueryInterface(This,riid,ppvObject) \ + (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) + +#define INetCfgBindingInterface_AddRef(This) \ + (This)->lpVtbl -> AddRef(This) + +#define INetCfgBindingInterface_Release(This) \ + (This)->lpVtbl -> Release(This) + + +#define INetCfgBindingInterface_GetName(This,ppszwInterfaceName) \ + (This)->lpVtbl -> GetName(This,ppszwInterfaceName) + +#define INetCfgBindingInterface_GetUpperComponent(This,ppnccItem) \ + (This)->lpVtbl -> GetUpperComponent(This,ppnccItem) + +#define INetCfgBindingInterface_GetLowerComponent(This,ppnccItem) \ + (This)->lpVtbl -> GetLowerComponent(This,ppnccItem) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + +HRESULT STDMETHODCALLTYPE INetCfgBindingInterface_GetName_Proxy( + INetCfgBindingInterface * This, + /* [string][out] */ LPWSTR *ppszwInterfaceName); + + +void __RPC_STUB INetCfgBindingInterface_GetName_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgBindingInterface_GetUpperComponent_Proxy( + INetCfgBindingInterface * This, + /* [out] */ INetCfgComponent **ppnccItem); + + +void __RPC_STUB INetCfgBindingInterface_GetUpperComponent_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgBindingInterface_GetLowerComponent_Proxy( + INetCfgBindingInterface * This, + /* [out] */ INetCfgComponent **ppnccItem); + + +void __RPC_STUB INetCfgBindingInterface_GetLowerComponent_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#endif /* __INetCfgBindingInterface_INTERFACE_DEFINED__ */ + + +#ifndef __INetCfgBindingPath_INTERFACE_DEFINED__ +#define __INetCfgBindingPath_INTERFACE_DEFINED__ + +/* interface INetCfgBindingPath */ +/* [unique][uuid][object][local] */ + + +EXTERN_C const IID IID_INetCfgBindingPath; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("C0E8AE96-306E-11D1-AACF-00805FC1270E") + INetCfgBindingPath : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE IsSamePathAs( + /* [in] */ INetCfgBindingPath *pPath) = 0; + + virtual HRESULT STDMETHODCALLTYPE IsSubPathOf( + /* [in] */ INetCfgBindingPath *pPath) = 0; + + virtual HRESULT STDMETHODCALLTYPE IsEnabled( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE Enable( + /* [in] */ BOOL fEnable) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetPathToken( + /* [string][out] */ LPWSTR *ppszwPathToken) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetOwner( + /* [out] */ INetCfgComponent **ppComponent) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetDepth( + /* [out] */ ULONG *pcInterfaces) = 0; + + virtual HRESULT STDMETHODCALLTYPE EnumBindingInterfaces( + /* [out] */ IEnumNetCfgBindingInterface **ppenumInterface) = 0; + + }; + +#else /* C style interface */ + + typedef struct INetCfgBindingPathVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + INetCfgBindingPath * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + INetCfgBindingPath * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + INetCfgBindingPath * This); + + HRESULT ( STDMETHODCALLTYPE *IsSamePathAs )( + INetCfgBindingPath * This, + /* [in] */ INetCfgBindingPath *pPath); + + HRESULT ( STDMETHODCALLTYPE *IsSubPathOf )( + INetCfgBindingPath * This, + /* [in] */ INetCfgBindingPath *pPath); + + HRESULT ( STDMETHODCALLTYPE *IsEnabled )( + INetCfgBindingPath * This); + + HRESULT ( STDMETHODCALLTYPE *Enable )( + INetCfgBindingPath * This, + /* [in] */ BOOL fEnable); + + HRESULT ( STDMETHODCALLTYPE *GetPathToken )( + INetCfgBindingPath * This, + /* [string][out] */ LPWSTR *ppszwPathToken); + + HRESULT ( STDMETHODCALLTYPE *GetOwner )( + INetCfgBindingPath * This, + /* [out] */ INetCfgComponent **ppComponent); + + HRESULT ( STDMETHODCALLTYPE *GetDepth )( + INetCfgBindingPath * This, + /* [out] */ ULONG *pcInterfaces); + + HRESULT ( STDMETHODCALLTYPE *EnumBindingInterfaces )( + INetCfgBindingPath * This, + /* [out] */ IEnumNetCfgBindingInterface **ppenumInterface); + + END_INTERFACE + } INetCfgBindingPathVtbl; + + interface INetCfgBindingPath + { + CONST_VTBL struct INetCfgBindingPathVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define INetCfgBindingPath_QueryInterface(This,riid,ppvObject) \ + (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) + +#define INetCfgBindingPath_AddRef(This) \ + (This)->lpVtbl -> AddRef(This) + +#define INetCfgBindingPath_Release(This) \ + (This)->lpVtbl -> Release(This) + + +#define INetCfgBindingPath_IsSamePathAs(This,pPath) \ + (This)->lpVtbl -> IsSamePathAs(This,pPath) + +#define INetCfgBindingPath_IsSubPathOf(This,pPath) \ + (This)->lpVtbl -> IsSubPathOf(This,pPath) + +#define INetCfgBindingPath_IsEnabled(This) \ + (This)->lpVtbl -> IsEnabled(This) + +#define INetCfgBindingPath_Enable(This,fEnable) \ + (This)->lpVtbl -> Enable(This,fEnable) + +#define INetCfgBindingPath_GetPathToken(This,ppszwPathToken) \ + (This)->lpVtbl -> GetPathToken(This,ppszwPathToken) + +#define INetCfgBindingPath_GetOwner(This,ppComponent) \ + (This)->lpVtbl -> GetOwner(This,ppComponent) + +#define INetCfgBindingPath_GetDepth(This,pcInterfaces) \ + (This)->lpVtbl -> GetDepth(This,pcInterfaces) + +#define INetCfgBindingPath_EnumBindingInterfaces(This,ppenumInterface) \ + (This)->lpVtbl -> EnumBindingInterfaces(This,ppenumInterface) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + +HRESULT STDMETHODCALLTYPE INetCfgBindingPath_IsSamePathAs_Proxy( + INetCfgBindingPath * This, + /* [in] */ INetCfgBindingPath *pPath); + + +void __RPC_STUB INetCfgBindingPath_IsSamePathAs_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgBindingPath_IsSubPathOf_Proxy( + INetCfgBindingPath * This, + /* [in] */ INetCfgBindingPath *pPath); + + +void __RPC_STUB INetCfgBindingPath_IsSubPathOf_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgBindingPath_IsEnabled_Proxy( + INetCfgBindingPath * This); + + +void __RPC_STUB INetCfgBindingPath_IsEnabled_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgBindingPath_Enable_Proxy( + INetCfgBindingPath * This, + /* [in] */ BOOL fEnable); + + +void __RPC_STUB INetCfgBindingPath_Enable_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgBindingPath_GetPathToken_Proxy( + INetCfgBindingPath * This, + /* [string][out] */ LPWSTR *ppszwPathToken); + + +void __RPC_STUB INetCfgBindingPath_GetPathToken_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgBindingPath_GetOwner_Proxy( + INetCfgBindingPath * This, + /* [out] */ INetCfgComponent **ppComponent); + + +void __RPC_STUB INetCfgBindingPath_GetOwner_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgBindingPath_GetDepth_Proxy( + INetCfgBindingPath * This, + /* [out] */ ULONG *pcInterfaces); + + +void __RPC_STUB INetCfgBindingPath_GetDepth_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgBindingPath_EnumBindingInterfaces_Proxy( + INetCfgBindingPath * This, + /* [out] */ IEnumNetCfgBindingInterface **ppenumInterface); + + +void __RPC_STUB INetCfgBindingPath_EnumBindingInterfaces_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#endif /* __INetCfgBindingPath_INTERFACE_DEFINED__ */ + + +#ifndef __INetCfgClass_INTERFACE_DEFINED__ +#define __INetCfgClass_INTERFACE_DEFINED__ + +/* interface INetCfgClass */ +/* [unique][uuid][object][local] */ + + +EXTERN_C const IID IID_INetCfgClass; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("C0E8AE97-306E-11D1-AACF-00805FC1270E") + INetCfgClass : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE FindComponent( + /* [string][in] */ LPCWSTR pszwInfId, + /* [out] */ INetCfgComponent **ppnccItem) = 0; + + virtual HRESULT STDMETHODCALLTYPE EnumComponents( + /* [out] */ IEnumNetCfgComponent **ppenumComponent) = 0; + + }; + +#else /* C style interface */ + + typedef struct INetCfgClassVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + INetCfgClass * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + INetCfgClass * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + INetCfgClass * This); + + HRESULT ( STDMETHODCALLTYPE *FindComponent )( + INetCfgClass * This, + /* [string][in] */ LPCWSTR pszwInfId, + /* [out] */ INetCfgComponent **ppnccItem); + + HRESULT ( STDMETHODCALLTYPE *EnumComponents )( + INetCfgClass * This, + /* [out] */ IEnumNetCfgComponent **ppenumComponent); + + END_INTERFACE + } INetCfgClassVtbl; + + interface INetCfgClass + { + CONST_VTBL struct INetCfgClassVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define INetCfgClass_QueryInterface(This,riid,ppvObject) \ + (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) + +#define INetCfgClass_AddRef(This) \ + (This)->lpVtbl -> AddRef(This) + +#define INetCfgClass_Release(This) \ + (This)->lpVtbl -> Release(This) + + +#define INetCfgClass_FindComponent(This,pszwInfId,ppnccItem) \ + (This)->lpVtbl -> FindComponent(This,pszwInfId,ppnccItem) + +#define INetCfgClass_EnumComponents(This,ppenumComponent) \ + (This)->lpVtbl -> EnumComponents(This,ppenumComponent) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + +HRESULT STDMETHODCALLTYPE INetCfgClass_FindComponent_Proxy( + INetCfgClass * This, + /* [string][in] */ LPCWSTR pszwInfId, + /* [out] */ INetCfgComponent **ppnccItem); + + +void __RPC_STUB INetCfgClass_FindComponent_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgClass_EnumComponents_Proxy( + INetCfgClass * This, + /* [out] */ IEnumNetCfgComponent **ppenumComponent); + + +void __RPC_STUB INetCfgClass_EnumComponents_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#endif /* __INetCfgClass_INTERFACE_DEFINED__ */ + + +#ifndef __INetCfgClassSetup_INTERFACE_DEFINED__ +#define __INetCfgClassSetup_INTERFACE_DEFINED__ + +/* interface INetCfgClassSetup */ +/* [unique][uuid][object][local] */ + +typedef +enum tagOBO_TOKEN_TYPE + { OBO_USER = 1, + OBO_COMPONENT = 2, + OBO_SOFTWARE = 3 + } OBO_TOKEN_TYPE; + +typedef struct tagOBO_TOKEN + { + OBO_TOKEN_TYPE Type; + INetCfgComponent *pncc; + LPCWSTR pszwManufacturer; + LPCWSTR pszwProduct; + LPCWSTR pszwDisplayName; + BOOL fRegistered; + } OBO_TOKEN; + + +EXTERN_C const IID IID_INetCfgClassSetup; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("C0E8AE9D-306E-11D1-AACF-00805FC1270E") + INetCfgClassSetup : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE SelectAndInstall( + /* [in] */ HWND hwndParent, + /* [in] */ OBO_TOKEN *pOboToken, + /* [out] */ INetCfgComponent **ppnccItem) = 0; + + virtual HRESULT STDMETHODCALLTYPE Install( + /* [string][in] */ LPCWSTR pszwInfId, + /* [in] */ OBO_TOKEN *pOboToken, + /* [in] */ DWORD dwSetupFlags, + /* [in] */ DWORD dwUpgradeFromBuildNo, + /* [string][in] */ LPCWSTR pszwAnswerFile, + /* [string][in] */ LPCWSTR pszwAnswerSections, + /* [out] */ INetCfgComponent **ppnccItem) = 0; + + virtual HRESULT STDMETHODCALLTYPE DeInstall( + /* [in] */ INetCfgComponent *pComponent, + /* [in] */ OBO_TOKEN *pOboToken, + /* [out] */ LPWSTR *pmszwRefs) = 0; + + }; + +#else /* C style interface */ + + typedef struct INetCfgClassSetupVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + INetCfgClassSetup * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + INetCfgClassSetup * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + INetCfgClassSetup * This); + + HRESULT ( STDMETHODCALLTYPE *SelectAndInstall )( + INetCfgClassSetup * This, + /* [in] */ HWND hwndParent, + /* [in] */ OBO_TOKEN *pOboToken, + /* [out] */ INetCfgComponent **ppnccItem); + + HRESULT ( STDMETHODCALLTYPE *Install )( + INetCfgClassSetup * This, + /* [string][in] */ LPCWSTR pszwInfId, + /* [in] */ OBO_TOKEN *pOboToken, + /* [in] */ DWORD dwSetupFlags, + /* [in] */ DWORD dwUpgradeFromBuildNo, + /* [string][in] */ LPCWSTR pszwAnswerFile, + /* [string][in] */ LPCWSTR pszwAnswerSections, + /* [out] */ INetCfgComponent **ppnccItem); + + HRESULT ( STDMETHODCALLTYPE *DeInstall )( + INetCfgClassSetup * This, + /* [in] */ INetCfgComponent *pComponent, + /* [in] */ OBO_TOKEN *pOboToken, + /* [out] */ LPWSTR *pmszwRefs); + + END_INTERFACE + } INetCfgClassSetupVtbl; + + interface INetCfgClassSetup + { + CONST_VTBL struct INetCfgClassSetupVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define INetCfgClassSetup_QueryInterface(This,riid,ppvObject) \ + (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) + +#define INetCfgClassSetup_AddRef(This) \ + (This)->lpVtbl -> AddRef(This) + +#define INetCfgClassSetup_Release(This) \ + (This)->lpVtbl -> Release(This) + + +#define INetCfgClassSetup_SelectAndInstall(This,hwndParent,pOboToken,ppnccItem) \ + (This)->lpVtbl -> SelectAndInstall(This,hwndParent,pOboToken,ppnccItem) + +#define INetCfgClassSetup_Install(This,pszwInfId,pOboToken,dwSetupFlags,dwUpgradeFromBuildNo,pszwAnswerFile,pszwAnswerSections,ppnccItem) \ + (This)->lpVtbl -> Install(This,pszwInfId,pOboToken,dwSetupFlags,dwUpgradeFromBuildNo,pszwAnswerFile,pszwAnswerSections,ppnccItem) + +#define INetCfgClassSetup_DeInstall(This,pComponent,pOboToken,pmszwRefs) \ + (This)->lpVtbl -> DeInstall(This,pComponent,pOboToken,pmszwRefs) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + +HRESULT STDMETHODCALLTYPE INetCfgClassSetup_SelectAndInstall_Proxy( + INetCfgClassSetup * This, + /* [in] */ HWND hwndParent, + /* [in] */ OBO_TOKEN *pOboToken, + /* [out] */ INetCfgComponent **ppnccItem); + + +void __RPC_STUB INetCfgClassSetup_SelectAndInstall_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgClassSetup_Install_Proxy( + INetCfgClassSetup * This, + /* [string][in] */ LPCWSTR pszwInfId, + /* [in] */ OBO_TOKEN *pOboToken, + /* [in] */ DWORD dwSetupFlags, + /* [in] */ DWORD dwUpgradeFromBuildNo, + /* [string][in] */ LPCWSTR pszwAnswerFile, + /* [string][in] */ LPCWSTR pszwAnswerSections, + /* [out] */ INetCfgComponent **ppnccItem); + + +void __RPC_STUB INetCfgClassSetup_Install_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgClassSetup_DeInstall_Proxy( + INetCfgClassSetup * This, + /* [in] */ INetCfgComponent *pComponent, + /* [in] */ OBO_TOKEN *pOboToken, + /* [out] */ LPWSTR *pmszwRefs); + + +void __RPC_STUB INetCfgClassSetup_DeInstall_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#endif /* __INetCfgClassSetup_INTERFACE_DEFINED__ */ + + +#ifndef __INetCfgComponent_INTERFACE_DEFINED__ +#define __INetCfgComponent_INTERFACE_DEFINED__ + +/* interface INetCfgComponent */ +/* [unique][uuid][object][local] */ + +typedef +enum tagCOMPONENT_CHARACTERISTICS + { NCF_VIRTUAL = 0x1, + NCF_SOFTWARE_ENUMERATED = 0x2, + NCF_PHYSICAL = 0x4, + NCF_HIDDEN = 0x8, + NCF_NO_SERVICE = 0x10, + NCF_NOT_USER_REMOVABLE = 0x20, + NCF_MULTIPORT_INSTANCED_ADAPTER = 0x40, + NCF_HAS_UI = 0x80, + NCF_SINGLE_INSTANCE = 0x100, + NCF_FILTER = 0x400, + NCF_DONTEXPOSELOWER = 0x1000, + NCF_HIDE_BINDING = 0x2000, + NCF_NDIS_PROTOCOL = 0x4000, + NCF_FIXED_BINDING = 0x20000 + } COMPONENT_CHARACTERISTICS; + +typedef +enum tagNCRP_FLAGS + { NCRP_QUERY_PROPERTY_UI = 0x1, + NCRP_SHOW_PROPERTY_UI = 0x2 + } NCRP_FLAGS; + + +EXTERN_C const IID IID_INetCfgComponent; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("C0E8AE99-306E-11D1-AACF-00805FC1270E") + INetCfgComponent : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE GetDisplayName( + /* [string][out] */ LPWSTR *ppszwDisplayName) = 0; + + virtual HRESULT STDMETHODCALLTYPE SetDisplayName( + /* [string][in] */ LPCWSTR pszwDisplayName) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetHelpText( + /* [string][out] */ LPWSTR *pszwHelpText) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetId( + /* [string][out] */ LPWSTR *ppszwId) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetCharacteristics( + /* [out] */ LPDWORD pdwCharacteristics) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetInstanceGuid( + /* [out] */ GUID *pGuid) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetPnpDevNodeId( + /* [string][out] */ LPWSTR *ppszwDevNodeId) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetClassGuid( + /* [out] */ GUID *pGuid) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetBindName( + /* [string][out] */ LPWSTR *ppszwBindName) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetDeviceStatus( + /* [out] */ ULONG *pulStatus) = 0; + + virtual HRESULT STDMETHODCALLTYPE OpenParamKey( + /* [out] */ HKEY *phkey) = 0; + + virtual HRESULT STDMETHODCALLTYPE RaisePropertyUi( + /* [in] */ HWND hwndParent, + /* [in] */ DWORD dwFlags, + /* [in] */ IUnknown *punkContext) = 0; + + }; + +#else /* C style interface */ + + typedef struct INetCfgComponentVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + INetCfgComponent * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + INetCfgComponent * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + INetCfgComponent * This); + + HRESULT ( STDMETHODCALLTYPE *GetDisplayName )( + INetCfgComponent * This, + /* [string][out] */ LPWSTR *ppszwDisplayName); + + HRESULT ( STDMETHODCALLTYPE *SetDisplayName )( + INetCfgComponent * This, + /* [string][in] */ LPCWSTR pszwDisplayName); + + HRESULT ( STDMETHODCALLTYPE *GetHelpText )( + INetCfgComponent * This, + /* [string][out] */ LPWSTR *pszwHelpText); + + HRESULT ( STDMETHODCALLTYPE *GetId )( + INetCfgComponent * This, + /* [string][out] */ LPWSTR *ppszwId); + + HRESULT ( STDMETHODCALLTYPE *GetCharacteristics )( + INetCfgComponent * This, + /* [out] */ LPDWORD pdwCharacteristics); + + HRESULT ( STDMETHODCALLTYPE *GetInstanceGuid )( + INetCfgComponent * This, + /* [out] */ GUID *pGuid); + + HRESULT ( STDMETHODCALLTYPE *GetPnpDevNodeId )( + INetCfgComponent * This, + /* [string][out] */ LPWSTR *ppszwDevNodeId); + + HRESULT ( STDMETHODCALLTYPE *GetClassGuid )( + INetCfgComponent * This, + /* [out] */ GUID *pGuid); + + HRESULT ( STDMETHODCALLTYPE *GetBindName )( + INetCfgComponent * This, + /* [string][out] */ LPWSTR *ppszwBindName); + + HRESULT ( STDMETHODCALLTYPE *GetDeviceStatus )( + INetCfgComponent * This, + /* [out] */ ULONG *pulStatus); + + HRESULT ( STDMETHODCALLTYPE *OpenParamKey )( + INetCfgComponent * This, + /* [out] */ HKEY *phkey); + + HRESULT ( STDMETHODCALLTYPE *RaisePropertyUi )( + INetCfgComponent * This, + /* [in] */ HWND hwndParent, + /* [in] */ DWORD dwFlags, + /* [in] */ IUnknown *punkContext); + + END_INTERFACE + } INetCfgComponentVtbl; + + interface INetCfgComponent + { + CONST_VTBL struct INetCfgComponentVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define INetCfgComponent_QueryInterface(This,riid,ppvObject) \ + (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) + +#define INetCfgComponent_AddRef(This) \ + (This)->lpVtbl -> AddRef(This) + +#define INetCfgComponent_Release(This) \ + (This)->lpVtbl -> Release(This) + + +#define INetCfgComponent_GetDisplayName(This,ppszwDisplayName) \ + (This)->lpVtbl -> GetDisplayName(This,ppszwDisplayName) + +#define INetCfgComponent_SetDisplayName(This,pszwDisplayName) \ + (This)->lpVtbl -> SetDisplayName(This,pszwDisplayName) + +#define INetCfgComponent_GetHelpText(This,pszwHelpText) \ + (This)->lpVtbl -> GetHelpText(This,pszwHelpText) + +#define INetCfgComponent_GetId(This,ppszwId) \ + (This)->lpVtbl -> GetId(This,ppszwId) + +#define INetCfgComponent_GetCharacteristics(This,pdwCharacteristics) \ + (This)->lpVtbl -> GetCharacteristics(This,pdwCharacteristics) + +#define INetCfgComponent_GetInstanceGuid(This,pGuid) \ + (This)->lpVtbl -> GetInstanceGuid(This,pGuid) + +#define INetCfgComponent_GetPnpDevNodeId(This,ppszwDevNodeId) \ + (This)->lpVtbl -> GetPnpDevNodeId(This,ppszwDevNodeId) + +#define INetCfgComponent_GetClassGuid(This,pGuid) \ + (This)->lpVtbl -> GetClassGuid(This,pGuid) + +#define INetCfgComponent_GetBindName(This,ppszwBindName) \ + (This)->lpVtbl -> GetBindName(This,ppszwBindName) + +#define INetCfgComponent_GetDeviceStatus(This,pulStatus) \ + (This)->lpVtbl -> GetDeviceStatus(This,pulStatus) + +#define INetCfgComponent_OpenParamKey(This,phkey) \ + (This)->lpVtbl -> OpenParamKey(This,phkey) + +#define INetCfgComponent_RaisePropertyUi(This,hwndParent,dwFlags,punkContext) \ + (This)->lpVtbl -> RaisePropertyUi(This,hwndParent,dwFlags,punkContext) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + +HRESULT STDMETHODCALLTYPE INetCfgComponent_GetDisplayName_Proxy( + INetCfgComponent * This, + /* [string][out] */ LPWSTR *ppszwDisplayName); + + +void __RPC_STUB INetCfgComponent_GetDisplayName_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgComponent_SetDisplayName_Proxy( + INetCfgComponent * This, + /* [string][in] */ LPCWSTR pszwDisplayName); + + +void __RPC_STUB INetCfgComponent_SetDisplayName_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgComponent_GetHelpText_Proxy( + INetCfgComponent * This, + /* [string][out] */ LPWSTR *pszwHelpText); + + +void __RPC_STUB INetCfgComponent_GetHelpText_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgComponent_GetId_Proxy( + INetCfgComponent * This, + /* [string][out] */ LPWSTR *ppszwId); + + +void __RPC_STUB INetCfgComponent_GetId_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgComponent_GetCharacteristics_Proxy( + INetCfgComponent * This, + /* [out] */ LPDWORD pdwCharacteristics); + + +void __RPC_STUB INetCfgComponent_GetCharacteristics_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgComponent_GetInstanceGuid_Proxy( + INetCfgComponent * This, + /* [out] */ GUID *pGuid); + + +void __RPC_STUB INetCfgComponent_GetInstanceGuid_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgComponent_GetPnpDevNodeId_Proxy( + INetCfgComponent * This, + /* [string][out] */ LPWSTR *ppszwDevNodeId); + + +void __RPC_STUB INetCfgComponent_GetPnpDevNodeId_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgComponent_GetClassGuid_Proxy( + INetCfgComponent * This, + /* [out] */ GUID *pGuid); + + +void __RPC_STUB INetCfgComponent_GetClassGuid_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgComponent_GetBindName_Proxy( + INetCfgComponent * This, + /* [string][out] */ LPWSTR *ppszwBindName); + + +void __RPC_STUB INetCfgComponent_GetBindName_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgComponent_GetDeviceStatus_Proxy( + INetCfgComponent * This, + /* [out] */ ULONG *pulStatus); + + +void __RPC_STUB INetCfgComponent_GetDeviceStatus_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgComponent_OpenParamKey_Proxy( + INetCfgComponent * This, + /* [out] */ HKEY *phkey); + + +void __RPC_STUB INetCfgComponent_OpenParamKey_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgComponent_RaisePropertyUi_Proxy( + INetCfgComponent * This, + /* [in] */ HWND hwndParent, + /* [in] */ DWORD dwFlags, + /* [in] */ IUnknown *punkContext); + + +void __RPC_STUB INetCfgComponent_RaisePropertyUi_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#endif /* __INetCfgComponent_INTERFACE_DEFINED__ */ + + +#ifndef __INetCfgComponentBindings_INTERFACE_DEFINED__ +#define __INetCfgComponentBindings_INTERFACE_DEFINED__ + +/* interface INetCfgComponentBindings */ +/* [unique][uuid][object][local] */ + +typedef +enum tagSUPPORTS_BINDING_INTERFACE_FLAGS + { NCF_LOWER = 0x1, + NCF_UPPER = 0x2 + } SUPPORTS_BINDING_INTERFACE_FLAGS; + +typedef +enum tagENUM_BINDING_PATHS_FLAGS + { EBP_ABOVE = 0x1, + EBP_BELOW = 0x2 + } ENUM_BINDING_PATHS_FLAGS; + + +EXTERN_C const IID IID_INetCfgComponentBindings; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("C0E8AE9E-306E-11D1-AACF-00805FC1270E") + INetCfgComponentBindings : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE BindTo( + /* [in] */ INetCfgComponent *pnccItem) = 0; + + virtual HRESULT STDMETHODCALLTYPE UnbindFrom( + /* [in] */ INetCfgComponent *pnccItem) = 0; + + virtual HRESULT STDMETHODCALLTYPE SupportsBindingInterface( + /* [in] */ DWORD dwFlags, + /* [in] */ LPCWSTR pszwInterfaceName) = 0; + + virtual HRESULT STDMETHODCALLTYPE IsBoundTo( + /* [in] */ INetCfgComponent *pnccItem) = 0; + + virtual HRESULT STDMETHODCALLTYPE IsBindableTo( + /* [in] */ INetCfgComponent *pnccItem) = 0; + + virtual HRESULT STDMETHODCALLTYPE EnumBindingPaths( + /* [in] */ DWORD dwFlags, + /* [out] */ IEnumNetCfgBindingPath **ppIEnum) = 0; + + virtual HRESULT STDMETHODCALLTYPE MoveBefore( + /* [in] */ INetCfgBindingPath *pncbItemSrc, + /* [in] */ INetCfgBindingPath *pncbItemDest) = 0; + + virtual HRESULT STDMETHODCALLTYPE MoveAfter( + /* [in] */ INetCfgBindingPath *pncbItemSrc, + /* [in] */ INetCfgBindingPath *pncbItemDest) = 0; + + }; + +#else /* C style interface */ + + typedef struct INetCfgComponentBindingsVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + INetCfgComponentBindings * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + INetCfgComponentBindings * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + INetCfgComponentBindings * This); + + HRESULT ( STDMETHODCALLTYPE *BindTo )( + INetCfgComponentBindings * This, + /* [in] */ INetCfgComponent *pnccItem); + + HRESULT ( STDMETHODCALLTYPE *UnbindFrom )( + INetCfgComponentBindings * This, + /* [in] */ INetCfgComponent *pnccItem); + + HRESULT ( STDMETHODCALLTYPE *SupportsBindingInterface )( + INetCfgComponentBindings * This, + /* [in] */ DWORD dwFlags, + /* [in] */ LPCWSTR pszwInterfaceName); + + HRESULT ( STDMETHODCALLTYPE *IsBoundTo )( + INetCfgComponentBindings * This, + /* [in] */ INetCfgComponent *pnccItem); + + HRESULT ( STDMETHODCALLTYPE *IsBindableTo )( + INetCfgComponentBindings * This, + /* [in] */ INetCfgComponent *pnccItem); + + HRESULT ( STDMETHODCALLTYPE *EnumBindingPaths )( + INetCfgComponentBindings * This, + /* [in] */ DWORD dwFlags, + /* [out] */ IEnumNetCfgBindingPath **ppIEnum); + + HRESULT ( STDMETHODCALLTYPE *MoveBefore )( + INetCfgComponentBindings * This, + /* [in] */ INetCfgBindingPath *pncbItemSrc, + /* [in] */ INetCfgBindingPath *pncbItemDest); + + HRESULT ( STDMETHODCALLTYPE *MoveAfter )( + INetCfgComponentBindings * This, + /* [in] */ INetCfgBindingPath *pncbItemSrc, + /* [in] */ INetCfgBindingPath *pncbItemDest); + + END_INTERFACE + } INetCfgComponentBindingsVtbl; + + interface INetCfgComponentBindings + { + CONST_VTBL struct INetCfgComponentBindingsVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define INetCfgComponentBindings_QueryInterface(This,riid,ppvObject) \ + (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) + +#define INetCfgComponentBindings_AddRef(This) \ + (This)->lpVtbl -> AddRef(This) + +#define INetCfgComponentBindings_Release(This) \ + (This)->lpVtbl -> Release(This) + + +#define INetCfgComponentBindings_BindTo(This,pnccItem) \ + (This)->lpVtbl -> BindTo(This,pnccItem) + +#define INetCfgComponentBindings_UnbindFrom(This,pnccItem) \ + (This)->lpVtbl -> UnbindFrom(This,pnccItem) + +#define INetCfgComponentBindings_SupportsBindingInterface(This,dwFlags,pszwInterfaceName) \ + (This)->lpVtbl -> SupportsBindingInterface(This,dwFlags,pszwInterfaceName) + +#define INetCfgComponentBindings_IsBoundTo(This,pnccItem) \ + (This)->lpVtbl -> IsBoundTo(This,pnccItem) + +#define INetCfgComponentBindings_IsBindableTo(This,pnccItem) \ + (This)->lpVtbl -> IsBindableTo(This,pnccItem) + +#define INetCfgComponentBindings_EnumBindingPaths(This,dwFlags,ppIEnum) \ + (This)->lpVtbl -> EnumBindingPaths(This,dwFlags,ppIEnum) + +#define INetCfgComponentBindings_MoveBefore(This,pncbItemSrc,pncbItemDest) \ + (This)->lpVtbl -> MoveBefore(This,pncbItemSrc,pncbItemDest) + +#define INetCfgComponentBindings_MoveAfter(This,pncbItemSrc,pncbItemDest) \ + (This)->lpVtbl -> MoveAfter(This,pncbItemSrc,pncbItemDest) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + +HRESULT STDMETHODCALLTYPE INetCfgComponentBindings_BindTo_Proxy( + INetCfgComponentBindings * This, + /* [in] */ INetCfgComponent *pnccItem); + + +void __RPC_STUB INetCfgComponentBindings_BindTo_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgComponentBindings_UnbindFrom_Proxy( + INetCfgComponentBindings * This, + /* [in] */ INetCfgComponent *pnccItem); + + +void __RPC_STUB INetCfgComponentBindings_UnbindFrom_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgComponentBindings_SupportsBindingInterface_Proxy( + INetCfgComponentBindings * This, + /* [in] */ DWORD dwFlags, + /* [in] */ LPCWSTR pszwInterfaceName); + + +void __RPC_STUB INetCfgComponentBindings_SupportsBindingInterface_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgComponentBindings_IsBoundTo_Proxy( + INetCfgComponentBindings * This, + /* [in] */ INetCfgComponent *pnccItem); + + +void __RPC_STUB INetCfgComponentBindings_IsBoundTo_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgComponentBindings_IsBindableTo_Proxy( + INetCfgComponentBindings * This, + /* [in] */ INetCfgComponent *pnccItem); + + +void __RPC_STUB INetCfgComponentBindings_IsBindableTo_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgComponentBindings_EnumBindingPaths_Proxy( + INetCfgComponentBindings * This, + /* [in] */ DWORD dwFlags, + /* [out] */ IEnumNetCfgBindingPath **ppIEnum); + + +void __RPC_STUB INetCfgComponentBindings_EnumBindingPaths_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgComponentBindings_MoveBefore_Proxy( + INetCfgComponentBindings * This, + /* [in] */ INetCfgBindingPath *pncbItemSrc, + /* [in] */ INetCfgBindingPath *pncbItemDest); + + +void __RPC_STUB INetCfgComponentBindings_MoveBefore_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgComponentBindings_MoveAfter_Proxy( + INetCfgComponentBindings * This, + /* [in] */ INetCfgBindingPath *pncbItemSrc, + /* [in] */ INetCfgBindingPath *pncbItemDest); + + +void __RPC_STUB INetCfgComponentBindings_MoveAfter_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#endif /* __INetCfgComponentBindings_INTERFACE_DEFINED__ */ + + +#ifndef __INetCfgSysPrep_INTERFACE_DEFINED__ +#define __INetCfgSysPrep_INTERFACE_DEFINED__ + +/* interface INetCfgSysPrep */ +/* [unique][uuid][object][local] */ + + +EXTERN_C const IID IID_INetCfgSysPrep; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("C0E8AE98-306E-11D1-AACF-00805FC1270E") + INetCfgSysPrep : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE HrSetupSetFirstDword( + /* [string][in] */ LPCWSTR pwszSection, + /* [string][in] */ LPCWSTR pwszKey, + /* [in] */ DWORD dwValue) = 0; + + virtual HRESULT STDMETHODCALLTYPE HrSetupSetFirstString( + /* [string][in] */ LPCWSTR pwszSection, + /* [string][in] */ LPCWSTR pwszKey, + /* [string][in] */ LPCWSTR pwszValue) = 0; + + virtual HRESULT STDMETHODCALLTYPE HrSetupSetFirstStringAsBool( + /* [string][in] */ LPCWSTR pwszSection, + /* [string][in] */ LPCWSTR pwszKey, + /* [in] */ BOOL fValue) = 0; + + virtual HRESULT STDMETHODCALLTYPE HrSetupSetFirstMultiSzField( + /* [string][in] */ LPCWSTR pwszSection, + /* [string][in] */ LPCWSTR pwszKey, + /* [in] */ LPCWSTR pmszValue) = 0; + + }; + +#else /* C style interface */ + + typedef struct INetCfgSysPrepVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + INetCfgSysPrep * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + INetCfgSysPrep * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + INetCfgSysPrep * This); + + HRESULT ( STDMETHODCALLTYPE *HrSetupSetFirstDword )( + INetCfgSysPrep * This, + /* [string][in] */ LPCWSTR pwszSection, + /* [string][in] */ LPCWSTR pwszKey, + /* [in] */ DWORD dwValue); + + HRESULT ( STDMETHODCALLTYPE *HrSetupSetFirstString )( + INetCfgSysPrep * This, + /* [string][in] */ LPCWSTR pwszSection, + /* [string][in] */ LPCWSTR pwszKey, + /* [string][in] */ LPCWSTR pwszValue); + + HRESULT ( STDMETHODCALLTYPE *HrSetupSetFirstStringAsBool )( + INetCfgSysPrep * This, + /* [string][in] */ LPCWSTR pwszSection, + /* [string][in] */ LPCWSTR pwszKey, + /* [in] */ BOOL fValue); + + HRESULT ( STDMETHODCALLTYPE *HrSetupSetFirstMultiSzField )( + INetCfgSysPrep * This, + /* [string][in] */ LPCWSTR pwszSection, + /* [string][in] */ LPCWSTR pwszKey, + /* [in] */ LPCWSTR pmszValue); + + END_INTERFACE + } INetCfgSysPrepVtbl; + + interface INetCfgSysPrep + { + CONST_VTBL struct INetCfgSysPrepVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define INetCfgSysPrep_QueryInterface(This,riid,ppvObject) \ + (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) + +#define INetCfgSysPrep_AddRef(This) \ + (This)->lpVtbl -> AddRef(This) + +#define INetCfgSysPrep_Release(This) \ + (This)->lpVtbl -> Release(This) + + +#define INetCfgSysPrep_HrSetupSetFirstDword(This,pwszSection,pwszKey,dwValue) \ + (This)->lpVtbl -> HrSetupSetFirstDword(This,pwszSection,pwszKey,dwValue) + +#define INetCfgSysPrep_HrSetupSetFirstString(This,pwszSection,pwszKey,pwszValue) \ + (This)->lpVtbl -> HrSetupSetFirstString(This,pwszSection,pwszKey,pwszValue) + +#define INetCfgSysPrep_HrSetupSetFirstStringAsBool(This,pwszSection,pwszKey,fValue) \ + (This)->lpVtbl -> HrSetupSetFirstStringAsBool(This,pwszSection,pwszKey,fValue) + +#define INetCfgSysPrep_HrSetupSetFirstMultiSzField(This,pwszSection,pwszKey,pmszValue) \ + (This)->lpVtbl -> HrSetupSetFirstMultiSzField(This,pwszSection,pwszKey,pmszValue) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + +HRESULT STDMETHODCALLTYPE INetCfgSysPrep_HrSetupSetFirstDword_Proxy( + INetCfgSysPrep * This, + /* [string][in] */ LPCWSTR pwszSection, + /* [string][in] */ LPCWSTR pwszKey, + /* [in] */ DWORD dwValue); + + +void __RPC_STUB INetCfgSysPrep_HrSetupSetFirstDword_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgSysPrep_HrSetupSetFirstString_Proxy( + INetCfgSysPrep * This, + /* [string][in] */ LPCWSTR pwszSection, + /* [string][in] */ LPCWSTR pwszKey, + /* [string][in] */ LPCWSTR pwszValue); + + +void __RPC_STUB INetCfgSysPrep_HrSetupSetFirstString_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgSysPrep_HrSetupSetFirstStringAsBool_Proxy( + INetCfgSysPrep * This, + /* [string][in] */ LPCWSTR pwszSection, + /* [string][in] */ LPCWSTR pwszKey, + /* [in] */ BOOL fValue); + + +void __RPC_STUB INetCfgSysPrep_HrSetupSetFirstStringAsBool_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgSysPrep_HrSetupSetFirstMultiSzField_Proxy( + INetCfgSysPrep * This, + /* [string][in] */ LPCWSTR pwszSection, + /* [string][in] */ LPCWSTR pwszKey, + /* [in] */ LPCWSTR pmszValue); + + +void __RPC_STUB INetCfgSysPrep_HrSetupSetFirstMultiSzField_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#endif /* __INetCfgSysPrep_INTERFACE_DEFINED__ */ + + +/* Additional Prototypes for ALL interfaces */ + +/* end of Additional Prototypes */ + +#ifdef __cplusplus +} +#endif + +#endif + + diff --git a/OEM/WinpcapOem/idls_i.c b/OEM/WinpcapOem/idls_i.c new file mode 100644 index 00000000..207ee5f4 --- /dev/null +++ b/OEM/WinpcapOem/idls_i.c @@ -0,0 +1,230 @@ + + +/* this ALWAYS GENERATED file contains the IIDs and CLSIDs */ + +/* link this file in with the server and any clients */ + + + /* File created by MIDL compiler version 6.00.0361 */ +/* Compiler settings for idls.idl: + Oicf, W1, Zp8, env=Win32 (32b run) + protocol : dce , ms_ext, c_ext, robust + error checks: allocation ref bounds_check enum stub_data + VC __declspec() decoration level: + __declspec(uuid()), __declspec(selectany), __declspec(novtable) + DECLSPEC_UUID(), MIDL_INTERFACE() +*/ +//@@MIDL_FILE_HEADING( ) + +#if !defined(_M_IA64) && !defined(_M_AMD64) + + +#pragma warning( disable: 4049 ) /* more than 64k source lines */ + + +#ifdef __cplusplus +extern "C"{ +#endif + + +#include +#include + +#ifdef _MIDL_USE_GUIDDEF_ + +#ifndef INITGUID +#define INITGUID +#include +#undef INITGUID +#else +#include +#endif + +#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \ + DEFINE_GUID(name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) + +#else // !_MIDL_USE_GUIDDEF_ + +#ifndef __IID_DEFINED__ +#define __IID_DEFINED__ + +typedef struct _IID +{ + unsigned long x; + unsigned short s1; + unsigned short s2; + unsigned char c[8]; +} IID; + +#endif // __IID_DEFINED__ + +#ifndef CLSID_DEFINED +#define CLSID_DEFINED +typedef IID CLSID; +#endif // CLSID_DEFINED + +#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \ + const type name = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}} + +#endif !_MIDL_USE_GUIDDEF_ + +MIDL_DEFINE_GUID(IID, IID_IEnumNetCfgBindingInterface,0xC0E8AE90,0x306E,0x11D1,0xAA,0xCF,0x00,0x80,0x5F,0xC1,0x27,0x0E); + + +MIDL_DEFINE_GUID(IID, IID_IEnumNetCfgBindingPath,0xC0E8AE91,0x306E,0x11D1,0xAA,0xCF,0x00,0x80,0x5F,0xC1,0x27,0x0E); + + +MIDL_DEFINE_GUID(IID, IID_IEnumNetCfgComponent,0xC0E8AE92,0x306E,0x11D1,0xAA,0xCF,0x00,0x80,0x5F,0xC1,0x27,0x0E); + + +MIDL_DEFINE_GUID(IID, IID_INetCfg,0xC0E8AE93,0x306E,0x11D1,0xAA,0xCF,0x00,0x80,0x5F,0xC1,0x27,0x0E); + + +MIDL_DEFINE_GUID(IID, IID_INetCfgLock,0xC0E8AE9F,0x306E,0x11D1,0xAA,0xCF,0x00,0x80,0x5F,0xC1,0x27,0x0E); + + +MIDL_DEFINE_GUID(IID, IID_INetCfgBindingInterface,0xC0E8AE94,0x306E,0x11D1,0xAA,0xCF,0x00,0x80,0x5F,0xC1,0x27,0x0E); + + +MIDL_DEFINE_GUID(IID, IID_INetCfgBindingPath,0xC0E8AE96,0x306E,0x11D1,0xAA,0xCF,0x00,0x80,0x5F,0xC1,0x27,0x0E); + + +MIDL_DEFINE_GUID(IID, IID_INetCfgClass,0xC0E8AE97,0x306E,0x11D1,0xAA,0xCF,0x00,0x80,0x5F,0xC1,0x27,0x0E); + + +MIDL_DEFINE_GUID(IID, IID_INetCfgClassSetup,0xC0E8AE9D,0x306E,0x11D1,0xAA,0xCF,0x00,0x80,0x5F,0xC1,0x27,0x0E); + + +MIDL_DEFINE_GUID(IID, IID_INetCfgComponent,0xC0E8AE99,0x306E,0x11D1,0xAA,0xCF,0x00,0x80,0x5F,0xC1,0x27,0x0E); + + +MIDL_DEFINE_GUID(IID, IID_INetCfgComponentBindings,0xC0E8AE9E,0x306E,0x11D1,0xAA,0xCF,0x00,0x80,0x5F,0xC1,0x27,0x0E); + + +MIDL_DEFINE_GUID(IID, IID_INetCfgSysPrep,0xC0E8AE98,0x306E,0x11D1,0xAA,0xCF,0x00,0x80,0x5F,0xC1,0x27,0x0E); + +#undef MIDL_DEFINE_GUID + +#ifdef __cplusplus +} +#endif + + + +#endif /* !defined(_M_IA64) && !defined(_M_AMD64)*/ + + + +/* this ALWAYS GENERATED file contains the IIDs and CLSIDs */ + +/* link this file in with the server and any clients */ + + + /* File created by MIDL compiler version 6.00.0361 */ +/* Compiler settings for idls.idl: + Oicf, W1, Zp8, env=Win64 (32b run,appending) + protocol : dce , ms_ext, c_ext, robust + error checks: allocation ref bounds_check enum stub_data + VC __declspec() decoration level: + __declspec(uuid()), __declspec(selectany), __declspec(novtable) + DECLSPEC_UUID(), MIDL_INTERFACE() +*/ +//@@MIDL_FILE_HEADING( ) + +#if defined(_M_IA64) || defined(_M_AMD64) + + +#pragma warning( disable: 4049 ) /* more than 64k source lines */ + + +#ifdef __cplusplus +extern "C"{ +#endif + + +#include +#include + +#ifdef _MIDL_USE_GUIDDEF_ + +#ifndef INITGUID +#define INITGUID +#include +#undef INITGUID +#else +#include +#endif + +#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \ + DEFINE_GUID(name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) + +#else // !_MIDL_USE_GUIDDEF_ + +#ifndef __IID_DEFINED__ +#define __IID_DEFINED__ + +typedef struct _IID +{ + unsigned long x; + unsigned short s1; + unsigned short s2; + unsigned char c[8]; +} IID; + +#endif // __IID_DEFINED__ + +#ifndef CLSID_DEFINED +#define CLSID_DEFINED +typedef IID CLSID; +#endif // CLSID_DEFINED + +#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \ + const type name = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}} + +#endif !_MIDL_USE_GUIDDEF_ + +MIDL_DEFINE_GUID(IID, IID_IEnumNetCfgBindingInterface,0xC0E8AE90,0x306E,0x11D1,0xAA,0xCF,0x00,0x80,0x5F,0xC1,0x27,0x0E); + + +MIDL_DEFINE_GUID(IID, IID_IEnumNetCfgBindingPath,0xC0E8AE91,0x306E,0x11D1,0xAA,0xCF,0x00,0x80,0x5F,0xC1,0x27,0x0E); + + +MIDL_DEFINE_GUID(IID, IID_IEnumNetCfgComponent,0xC0E8AE92,0x306E,0x11D1,0xAA,0xCF,0x00,0x80,0x5F,0xC1,0x27,0x0E); + + +MIDL_DEFINE_GUID(IID, IID_INetCfg,0xC0E8AE93,0x306E,0x11D1,0xAA,0xCF,0x00,0x80,0x5F,0xC1,0x27,0x0E); + + +MIDL_DEFINE_GUID(IID, IID_INetCfgLock,0xC0E8AE9F,0x306E,0x11D1,0xAA,0xCF,0x00,0x80,0x5F,0xC1,0x27,0x0E); + + +MIDL_DEFINE_GUID(IID, IID_INetCfgBindingInterface,0xC0E8AE94,0x306E,0x11D1,0xAA,0xCF,0x00,0x80,0x5F,0xC1,0x27,0x0E); + + +MIDL_DEFINE_GUID(IID, IID_INetCfgBindingPath,0xC0E8AE96,0x306E,0x11D1,0xAA,0xCF,0x00,0x80,0x5F,0xC1,0x27,0x0E); + + +MIDL_DEFINE_GUID(IID, IID_INetCfgClass,0xC0E8AE97,0x306E,0x11D1,0xAA,0xCF,0x00,0x80,0x5F,0xC1,0x27,0x0E); + + +MIDL_DEFINE_GUID(IID, IID_INetCfgClassSetup,0xC0E8AE9D,0x306E,0x11D1,0xAA,0xCF,0x00,0x80,0x5F,0xC1,0x27,0x0E); + + +MIDL_DEFINE_GUID(IID, IID_INetCfgComponent,0xC0E8AE99,0x306E,0x11D1,0xAA,0xCF,0x00,0x80,0x5F,0xC1,0x27,0x0E); + + +MIDL_DEFINE_GUID(IID, IID_INetCfgComponentBindings,0xC0E8AE9E,0x306E,0x11D1,0xAA,0xCF,0x00,0x80,0x5F,0xC1,0x27,0x0E); + + +MIDL_DEFINE_GUID(IID, IID_INetCfgSysPrep,0xC0E8AE98,0x306E,0x11D1,0xAA,0xCF,0x00,0x80,0x5F,0xC1,0x27,0x0E); + +#undef MIDL_DEFINE_GUID + +#ifdef __cplusplus +} +#endif + + + +#endif /* defined(_M_IA64) || defined(_M_AMD64)*/ + diff --git a/OEM/WinpcapOem/netcfgn.h b/OEM/WinpcapOem/netcfgn.h new file mode 100644 index 00000000..7e3bf07f --- /dev/null +++ b/OEM/WinpcapOem/netcfgn.h @@ -0,0 +1,1450 @@ + + +/* this ALWAYS GENERATED file contains the definitions for the interfaces */ + + + /* File created by MIDL compiler version 6.00.0361 */ +/* Compiler settings for netcfgn.idl: + Oicf, W1, Zp8, env=Win32 (32b run) + protocol : dce , ms_ext, c_ext, robust + error checks: allocation ref bounds_check enum stub_data + VC __declspec() decoration level: + __declspec(uuid()), __declspec(selectany), __declspec(novtable) + DECLSPEC_UUID(), MIDL_INTERFACE() +*/ +//@@MIDL_FILE_HEADING( ) + +#pragma warning( disable: 4049 ) /* more than 64k source lines */ + + +/* verify that the version is high enough to compile this file*/ +#ifndef __REQUIRED_RPCNDR_H_VERSION__ +#define __REQUIRED_RPCNDR_H_VERSION__ 475 +#endif + +#include "rpc.h" +#include "rpcndr.h" + +#ifndef __RPCNDR_H_VERSION__ +#error this stub requires an updated version of +#endif // __RPCNDR_H_VERSION__ + +#ifndef COM_NO_WINDOWS_H +#include "windows.h" +#include "ole2.h" +#endif /*COM_NO_WINDOWS_H*/ + +#ifndef __netcfgn_h__ +#define __netcfgn_h__ + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#pragma once +#endif + +/* Forward Declarations */ + +#ifndef __INetCfgPnpReconfigCallback_FWD_DEFINED__ +#define __INetCfgPnpReconfigCallback_FWD_DEFINED__ +typedef interface INetCfgPnpReconfigCallback INetCfgPnpReconfigCallback; +#endif /* __INetCfgPnpReconfigCallback_FWD_DEFINED__ */ + + +#ifndef __INetCfgComponentControl_FWD_DEFINED__ +#define __INetCfgComponentControl_FWD_DEFINED__ +typedef interface INetCfgComponentControl INetCfgComponentControl; +#endif /* __INetCfgComponentControl_FWD_DEFINED__ */ + + +#ifndef __INetCfgComponentSetup_FWD_DEFINED__ +#define __INetCfgComponentSetup_FWD_DEFINED__ +typedef interface INetCfgComponentSetup INetCfgComponentSetup; +#endif /* __INetCfgComponentSetup_FWD_DEFINED__ */ + + +#ifndef __INetCfgComponentPropertyUi_FWD_DEFINED__ +#define __INetCfgComponentPropertyUi_FWD_DEFINED__ +typedef interface INetCfgComponentPropertyUi INetCfgComponentPropertyUi; +#endif /* __INetCfgComponentPropertyUi_FWD_DEFINED__ */ + + +#ifndef __INetCfgComponentNotifyBinding_FWD_DEFINED__ +#define __INetCfgComponentNotifyBinding_FWD_DEFINED__ +typedef interface INetCfgComponentNotifyBinding INetCfgComponentNotifyBinding; +#endif /* __INetCfgComponentNotifyBinding_FWD_DEFINED__ */ + + +#ifndef __INetCfgComponentNotifyGlobal_FWD_DEFINED__ +#define __INetCfgComponentNotifyGlobal_FWD_DEFINED__ +typedef interface INetCfgComponentNotifyGlobal INetCfgComponentNotifyGlobal; +#endif /* __INetCfgComponentNotifyGlobal_FWD_DEFINED__ */ + + +#ifndef __INetCfgComponentUpperEdge_FWD_DEFINED__ +#define __INetCfgComponentUpperEdge_FWD_DEFINED__ +typedef interface INetCfgComponentUpperEdge INetCfgComponentUpperEdge; +#endif /* __INetCfgComponentUpperEdge_FWD_DEFINED__ */ + + +#ifndef __INetLanConnectionUiInfo_FWD_DEFINED__ +#define __INetLanConnectionUiInfo_FWD_DEFINED__ +typedef interface INetLanConnectionUiInfo INetLanConnectionUiInfo; +#endif /* __INetLanConnectionUiInfo_FWD_DEFINED__ */ + + +#ifndef __INetCfgComponentSysPrep_FWD_DEFINED__ +#define __INetCfgComponentSysPrep_FWD_DEFINED__ +typedef interface INetCfgComponentSysPrep INetCfgComponentSysPrep; +#endif /* __INetCfgComponentSysPrep_FWD_DEFINED__ */ + + +/* header files for imported files */ +#include "unknwn.h" +#include "netcfgx.h" + +#ifdef __cplusplus +extern "C"{ +#endif + +void * __RPC_USER MIDL_user_allocate(size_t); +void __RPC_USER MIDL_user_free( void * ); + +/* interface __MIDL_itf_netcfgn_0000 */ +/* [local] */ + +//+------------------------------------------------------------------------- +// +// Microsoft Windows +// Copyright (c) Microsoft Corporation. All rights reserved. +// +//-------------------------------------------------------------------------- +#if ( _MSC_VER >= 800 ) +#pragma warning(disable:4201) +#endif + + +extern RPC_IF_HANDLE __MIDL_itf_netcfgn_0000_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_netcfgn_0000_v0_0_s_ifspec; + +#ifndef __INetCfgPnpReconfigCallback_INTERFACE_DEFINED__ +#define __INetCfgPnpReconfigCallback_INTERFACE_DEFINED__ + +/* interface INetCfgPnpReconfigCallback */ +/* [unique][uuid][object][local] */ + +typedef /* [v1_enum] */ +enum tagNCPNP_RECONFIG_LAYER + { NCRL_NDIS = 1, + NCRL_TDI = 2 + } NCPNP_RECONFIG_LAYER; + + +EXTERN_C const IID IID_INetCfgPnpReconfigCallback; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("8d84bd35-e227-11d2-b700-00a0c98a6a85") + INetCfgPnpReconfigCallback : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE SendPnpReconfig( + /* [in] */ NCPNP_RECONFIG_LAYER Layer, + /* [in] */ LPCWSTR pszwUpper, + /* [in] */ LPCWSTR pszwLower, + /* [in] */ PVOID pvData, + /* [in] */ DWORD dwSizeOfData) = 0; + + }; + +#else /* C style interface */ + + typedef struct INetCfgPnpReconfigCallbackVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + INetCfgPnpReconfigCallback * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + INetCfgPnpReconfigCallback * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + INetCfgPnpReconfigCallback * This); + + HRESULT ( STDMETHODCALLTYPE *SendPnpReconfig )( + INetCfgPnpReconfigCallback * This, + /* [in] */ NCPNP_RECONFIG_LAYER Layer, + /* [in] */ LPCWSTR pszwUpper, + /* [in] */ LPCWSTR pszwLower, + /* [in] */ PVOID pvData, + /* [in] */ DWORD dwSizeOfData); + + END_INTERFACE + } INetCfgPnpReconfigCallbackVtbl; + + interface INetCfgPnpReconfigCallback + { + CONST_VTBL struct INetCfgPnpReconfigCallbackVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define INetCfgPnpReconfigCallback_QueryInterface(This,riid,ppvObject) \ + (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) + +#define INetCfgPnpReconfigCallback_AddRef(This) \ + (This)->lpVtbl -> AddRef(This) + +#define INetCfgPnpReconfigCallback_Release(This) \ + (This)->lpVtbl -> Release(This) + + +#define INetCfgPnpReconfigCallback_SendPnpReconfig(This,Layer,pszwUpper,pszwLower,pvData,dwSizeOfData) \ + (This)->lpVtbl -> SendPnpReconfig(This,Layer,pszwUpper,pszwLower,pvData,dwSizeOfData) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + +HRESULT STDMETHODCALLTYPE INetCfgPnpReconfigCallback_SendPnpReconfig_Proxy( + INetCfgPnpReconfigCallback * This, + /* [in] */ NCPNP_RECONFIG_LAYER Layer, + /* [in] */ LPCWSTR pszwUpper, + /* [in] */ LPCWSTR pszwLower, + /* [in] */ PVOID pvData, + /* [in] */ DWORD dwSizeOfData); + + +void __RPC_STUB INetCfgPnpReconfigCallback_SendPnpReconfig_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#endif /* __INetCfgPnpReconfigCallback_INTERFACE_DEFINED__ */ + + +#ifndef __INetCfgComponentControl_INTERFACE_DEFINED__ +#define __INetCfgComponentControl_INTERFACE_DEFINED__ + +/* interface INetCfgComponentControl */ +/* [unique][uuid][object][local] */ + + +EXTERN_C const IID IID_INetCfgComponentControl; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("932238df-bea1-11d0-9298-00c04fc99dcf") + INetCfgComponentControl : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Initialize( + /* [in] */ INetCfgComponent *pIComp, + /* [in] */ INetCfg *pINetCfg, + /* [in] */ BOOL fInstalling) = 0; + + virtual HRESULT STDMETHODCALLTYPE ApplyRegistryChanges( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE ApplyPnpChanges( + /* [in] */ INetCfgPnpReconfigCallback *pICallback) = 0; + + virtual HRESULT STDMETHODCALLTYPE CancelChanges( void) = 0; + + }; + +#else /* C style interface */ + + typedef struct INetCfgComponentControlVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + INetCfgComponentControl * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + INetCfgComponentControl * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + INetCfgComponentControl * This); + + HRESULT ( STDMETHODCALLTYPE *Initialize )( + INetCfgComponentControl * This, + /* [in] */ INetCfgComponent *pIComp, + /* [in] */ INetCfg *pINetCfg, + /* [in] */ BOOL fInstalling); + + HRESULT ( STDMETHODCALLTYPE *ApplyRegistryChanges )( + INetCfgComponentControl * This); + + HRESULT ( STDMETHODCALLTYPE *ApplyPnpChanges )( + INetCfgComponentControl * This, + /* [in] */ INetCfgPnpReconfigCallback *pICallback); + + HRESULT ( STDMETHODCALLTYPE *CancelChanges )( + INetCfgComponentControl * This); + + END_INTERFACE + } INetCfgComponentControlVtbl; + + interface INetCfgComponentControl + { + CONST_VTBL struct INetCfgComponentControlVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define INetCfgComponentControl_QueryInterface(This,riid,ppvObject) \ + (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) + +#define INetCfgComponentControl_AddRef(This) \ + (This)->lpVtbl -> AddRef(This) + +#define INetCfgComponentControl_Release(This) \ + (This)->lpVtbl -> Release(This) + + +#define INetCfgComponentControl_Initialize(This,pIComp,pINetCfg,fInstalling) \ + (This)->lpVtbl -> Initialize(This,pIComp,pINetCfg,fInstalling) + +#define INetCfgComponentControl_ApplyRegistryChanges(This) \ + (This)->lpVtbl -> ApplyRegistryChanges(This) + +#define INetCfgComponentControl_ApplyPnpChanges(This,pICallback) \ + (This)->lpVtbl -> ApplyPnpChanges(This,pICallback) + +#define INetCfgComponentControl_CancelChanges(This) \ + (This)->lpVtbl -> CancelChanges(This) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + +HRESULT STDMETHODCALLTYPE INetCfgComponentControl_Initialize_Proxy( + INetCfgComponentControl * This, + /* [in] */ INetCfgComponent *pIComp, + /* [in] */ INetCfg *pINetCfg, + /* [in] */ BOOL fInstalling); + + +void __RPC_STUB INetCfgComponentControl_Initialize_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgComponentControl_ApplyRegistryChanges_Proxy( + INetCfgComponentControl * This); + + +void __RPC_STUB INetCfgComponentControl_ApplyRegistryChanges_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgComponentControl_ApplyPnpChanges_Proxy( + INetCfgComponentControl * This, + /* [in] */ INetCfgPnpReconfigCallback *pICallback); + + +void __RPC_STUB INetCfgComponentControl_ApplyPnpChanges_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgComponentControl_CancelChanges_Proxy( + INetCfgComponentControl * This); + + +void __RPC_STUB INetCfgComponentControl_CancelChanges_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#endif /* __INetCfgComponentControl_INTERFACE_DEFINED__ */ + + +#ifndef __INetCfgComponentSetup_INTERFACE_DEFINED__ +#define __INetCfgComponentSetup_INTERFACE_DEFINED__ + +/* interface INetCfgComponentSetup */ +/* [unique][uuid][object][local] */ + +typedef /* [v1_enum] */ +enum tagNETWORK_INSTALL_TIME + { NSF_PRIMARYINSTALL = 0x1, + NSF_POSTSYSINSTALL = 0x2 + } NETWORK_INSTALL_TIME; + +typedef /* [v1_enum] */ +enum tagNETWORK_UPGRADE_TYPE + { NSF_WIN16_UPGRADE = 0x10, + NSF_WIN95_UPGRADE = 0x20, + NSF_WINNT_WKS_UPGRADE = 0x40, + NSF_WINNT_SVR_UPGRADE = 0x80, + NSF_WINNT_SBS_UPGRADE = 0x100, + NSF_COMPONENT_UPDATE = 0x200 + } NETWORK_UPGRADE_TYPE; + + +EXTERN_C const IID IID_INetCfgComponentSetup; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("932238e3-bea1-11d0-9298-00c04fc99dcf") + INetCfgComponentSetup : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Install( + /* [in] */ DWORD dwSetupFlags) = 0; + + virtual HRESULT STDMETHODCALLTYPE Upgrade( + /* [in] */ DWORD dwSetupFlags, + /* [in] */ DWORD dwUpgradeFomBuildNo) = 0; + + virtual HRESULT STDMETHODCALLTYPE ReadAnswerFile( + /* [in] */ LPCWSTR pszwAnswerFile, + /* [in] */ LPCWSTR pszwAnswerSections) = 0; + + virtual HRESULT STDMETHODCALLTYPE Removing( void) = 0; + + }; + +#else /* C style interface */ + + typedef struct INetCfgComponentSetupVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + INetCfgComponentSetup * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + INetCfgComponentSetup * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + INetCfgComponentSetup * This); + + HRESULT ( STDMETHODCALLTYPE *Install )( + INetCfgComponentSetup * This, + /* [in] */ DWORD dwSetupFlags); + + HRESULT ( STDMETHODCALLTYPE *Upgrade )( + INetCfgComponentSetup * This, + /* [in] */ DWORD dwSetupFlags, + /* [in] */ DWORD dwUpgradeFomBuildNo); + + HRESULT ( STDMETHODCALLTYPE *ReadAnswerFile )( + INetCfgComponentSetup * This, + /* [in] */ LPCWSTR pszwAnswerFile, + /* [in] */ LPCWSTR pszwAnswerSections); + + HRESULT ( STDMETHODCALLTYPE *Removing )( + INetCfgComponentSetup * This); + + END_INTERFACE + } INetCfgComponentSetupVtbl; + + interface INetCfgComponentSetup + { + CONST_VTBL struct INetCfgComponentSetupVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define INetCfgComponentSetup_QueryInterface(This,riid,ppvObject) \ + (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) + +#define INetCfgComponentSetup_AddRef(This) \ + (This)->lpVtbl -> AddRef(This) + +#define INetCfgComponentSetup_Release(This) \ + (This)->lpVtbl -> Release(This) + + +#define INetCfgComponentSetup_Install(This,dwSetupFlags) \ + (This)->lpVtbl -> Install(This,dwSetupFlags) + +#define INetCfgComponentSetup_Upgrade(This,dwSetupFlags,dwUpgradeFomBuildNo) \ + (This)->lpVtbl -> Upgrade(This,dwSetupFlags,dwUpgradeFomBuildNo) + +#define INetCfgComponentSetup_ReadAnswerFile(This,pszwAnswerFile,pszwAnswerSections) \ + (This)->lpVtbl -> ReadAnswerFile(This,pszwAnswerFile,pszwAnswerSections) + +#define INetCfgComponentSetup_Removing(This) \ + (This)->lpVtbl -> Removing(This) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + +HRESULT STDMETHODCALLTYPE INetCfgComponentSetup_Install_Proxy( + INetCfgComponentSetup * This, + /* [in] */ DWORD dwSetupFlags); + + +void __RPC_STUB INetCfgComponentSetup_Install_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgComponentSetup_Upgrade_Proxy( + INetCfgComponentSetup * This, + /* [in] */ DWORD dwSetupFlags, + /* [in] */ DWORD dwUpgradeFomBuildNo); + + +void __RPC_STUB INetCfgComponentSetup_Upgrade_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgComponentSetup_ReadAnswerFile_Proxy( + INetCfgComponentSetup * This, + /* [in] */ LPCWSTR pszwAnswerFile, + /* [in] */ LPCWSTR pszwAnswerSections); + + +void __RPC_STUB INetCfgComponentSetup_ReadAnswerFile_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgComponentSetup_Removing_Proxy( + INetCfgComponentSetup * This); + + +void __RPC_STUB INetCfgComponentSetup_Removing_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#endif /* __INetCfgComponentSetup_INTERFACE_DEFINED__ */ + + +#ifndef __INetCfgComponentPropertyUi_INTERFACE_DEFINED__ +#define __INetCfgComponentPropertyUi_INTERFACE_DEFINED__ + +/* interface INetCfgComponentPropertyUi */ +/* [unique][uuid][object][local] */ + +typedef /* [v1_enum] */ +enum tagDEFAULT_PAGES + { DPP_ADVANCED = 1 + } DEFAULT_PAGES; + + +EXTERN_C const IID IID_INetCfgComponentPropertyUi; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("932238e0-bea1-11d0-9298-00c04fc99dcf") + INetCfgComponentPropertyUi : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE QueryPropertyUi( + /* [in] */ IUnknown *pUnkReserved) = 0; + + virtual HRESULT STDMETHODCALLTYPE SetContext( + /* [in] */ IUnknown *pUnkReserved) = 0; + + virtual HRESULT STDMETHODCALLTYPE MergePropPages( + /* [out][in] */ DWORD *pdwDefPages, + /* [out] */ BYTE **pahpspPrivate, + /* [out] */ UINT *pcPages, + /* [in] */ HWND hwndParent, + /* [out] */ LPCWSTR *pszStartPage) = 0; + + virtual HRESULT STDMETHODCALLTYPE ValidateProperties( + /* [in] */ HWND hwndSheet) = 0; + + virtual HRESULT STDMETHODCALLTYPE ApplyProperties( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE CancelProperties( void) = 0; + + }; + +#else /* C style interface */ + + typedef struct INetCfgComponentPropertyUiVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + INetCfgComponentPropertyUi * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + INetCfgComponentPropertyUi * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + INetCfgComponentPropertyUi * This); + + HRESULT ( STDMETHODCALLTYPE *QueryPropertyUi )( + INetCfgComponentPropertyUi * This, + /* [in] */ IUnknown *pUnkReserved); + + HRESULT ( STDMETHODCALLTYPE *SetContext )( + INetCfgComponentPropertyUi * This, + /* [in] */ IUnknown *pUnkReserved); + + HRESULT ( STDMETHODCALLTYPE *MergePropPages )( + INetCfgComponentPropertyUi * This, + /* [out][in] */ DWORD *pdwDefPages, + /* [out] */ BYTE **pahpspPrivate, + /* [out] */ UINT *pcPages, + /* [in] */ HWND hwndParent, + /* [out] */ LPCWSTR *pszStartPage); + + HRESULT ( STDMETHODCALLTYPE *ValidateProperties )( + INetCfgComponentPropertyUi * This, + /* [in] */ HWND hwndSheet); + + HRESULT ( STDMETHODCALLTYPE *ApplyProperties )( + INetCfgComponentPropertyUi * This); + + HRESULT ( STDMETHODCALLTYPE *CancelProperties )( + INetCfgComponentPropertyUi * This); + + END_INTERFACE + } INetCfgComponentPropertyUiVtbl; + + interface INetCfgComponentPropertyUi + { + CONST_VTBL struct INetCfgComponentPropertyUiVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define INetCfgComponentPropertyUi_QueryInterface(This,riid,ppvObject) \ + (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) + +#define INetCfgComponentPropertyUi_AddRef(This) \ + (This)->lpVtbl -> AddRef(This) + +#define INetCfgComponentPropertyUi_Release(This) \ + (This)->lpVtbl -> Release(This) + + +#define INetCfgComponentPropertyUi_QueryPropertyUi(This,pUnkReserved) \ + (This)->lpVtbl -> QueryPropertyUi(This,pUnkReserved) + +#define INetCfgComponentPropertyUi_SetContext(This,pUnkReserved) \ + (This)->lpVtbl -> SetContext(This,pUnkReserved) + +#define INetCfgComponentPropertyUi_MergePropPages(This,pdwDefPages,pahpspPrivate,pcPages,hwndParent,pszStartPage) \ + (This)->lpVtbl -> MergePropPages(This,pdwDefPages,pahpspPrivate,pcPages,hwndParent,pszStartPage) + +#define INetCfgComponentPropertyUi_ValidateProperties(This,hwndSheet) \ + (This)->lpVtbl -> ValidateProperties(This,hwndSheet) + +#define INetCfgComponentPropertyUi_ApplyProperties(This) \ + (This)->lpVtbl -> ApplyProperties(This) + +#define INetCfgComponentPropertyUi_CancelProperties(This) \ + (This)->lpVtbl -> CancelProperties(This) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + +HRESULT STDMETHODCALLTYPE INetCfgComponentPropertyUi_QueryPropertyUi_Proxy( + INetCfgComponentPropertyUi * This, + /* [in] */ IUnknown *pUnkReserved); + + +void __RPC_STUB INetCfgComponentPropertyUi_QueryPropertyUi_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgComponentPropertyUi_SetContext_Proxy( + INetCfgComponentPropertyUi * This, + /* [in] */ IUnknown *pUnkReserved); + + +void __RPC_STUB INetCfgComponentPropertyUi_SetContext_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgComponentPropertyUi_MergePropPages_Proxy( + INetCfgComponentPropertyUi * This, + /* [out][in] */ DWORD *pdwDefPages, + /* [out] */ BYTE **pahpspPrivate, + /* [out] */ UINT *pcPages, + /* [in] */ HWND hwndParent, + /* [out] */ LPCWSTR *pszStartPage); + + +void __RPC_STUB INetCfgComponentPropertyUi_MergePropPages_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgComponentPropertyUi_ValidateProperties_Proxy( + INetCfgComponentPropertyUi * This, + /* [in] */ HWND hwndSheet); + + +void __RPC_STUB INetCfgComponentPropertyUi_ValidateProperties_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgComponentPropertyUi_ApplyProperties_Proxy( + INetCfgComponentPropertyUi * This); + + +void __RPC_STUB INetCfgComponentPropertyUi_ApplyProperties_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgComponentPropertyUi_CancelProperties_Proxy( + INetCfgComponentPropertyUi * This); + + +void __RPC_STUB INetCfgComponentPropertyUi_CancelProperties_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#endif /* __INetCfgComponentPropertyUi_INTERFACE_DEFINED__ */ + + +#ifndef __INetCfgComponentNotifyBinding_INTERFACE_DEFINED__ +#define __INetCfgComponentNotifyBinding_INTERFACE_DEFINED__ + +/* interface INetCfgComponentNotifyBinding */ +/* [unique][uuid][object][local] */ + +typedef /* [v1_enum] */ +enum tagBIND_FLAGS1 + { NCN_ADD = 0x1, + NCN_REMOVE = 0x2, + NCN_UPDATE = 0x4, + NCN_ENABLE = 0x10, + NCN_DISABLE = 0x20, + NCN_BINDING_PATH = 0x100, + NCN_PROPERTYCHANGE = 0x200, + NCN_NET = 0x10000, + NCN_NETTRANS = 0x20000, + NCN_NETCLIENT = 0x40000, + NCN_NETSERVICE = 0x80000 + } BIND_FLAGS1; + + +EXTERN_C const IID IID_INetCfgComponentNotifyBinding; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("932238e1-bea1-11d0-9298-00c04fc99dcf") + INetCfgComponentNotifyBinding : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE QueryBindingPath( + /* [in] */ DWORD dwChangeFlag, + /* [in] */ INetCfgBindingPath *pIPath) = 0; + + virtual HRESULT STDMETHODCALLTYPE NotifyBindingPath( + /* [in] */ DWORD dwChangeFlag, + /* [in] */ INetCfgBindingPath *pIPath) = 0; + + }; + +#else /* C style interface */ + + typedef struct INetCfgComponentNotifyBindingVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + INetCfgComponentNotifyBinding * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + INetCfgComponentNotifyBinding * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + INetCfgComponentNotifyBinding * This); + + HRESULT ( STDMETHODCALLTYPE *QueryBindingPath )( + INetCfgComponentNotifyBinding * This, + /* [in] */ DWORD dwChangeFlag, + /* [in] */ INetCfgBindingPath *pIPath); + + HRESULT ( STDMETHODCALLTYPE *NotifyBindingPath )( + INetCfgComponentNotifyBinding * This, + /* [in] */ DWORD dwChangeFlag, + /* [in] */ INetCfgBindingPath *pIPath); + + END_INTERFACE + } INetCfgComponentNotifyBindingVtbl; + + interface INetCfgComponentNotifyBinding + { + CONST_VTBL struct INetCfgComponentNotifyBindingVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define INetCfgComponentNotifyBinding_QueryInterface(This,riid,ppvObject) \ + (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) + +#define INetCfgComponentNotifyBinding_AddRef(This) \ + (This)->lpVtbl -> AddRef(This) + +#define INetCfgComponentNotifyBinding_Release(This) \ + (This)->lpVtbl -> Release(This) + + +#define INetCfgComponentNotifyBinding_QueryBindingPath(This,dwChangeFlag,pIPath) \ + (This)->lpVtbl -> QueryBindingPath(This,dwChangeFlag,pIPath) + +#define INetCfgComponentNotifyBinding_NotifyBindingPath(This,dwChangeFlag,pIPath) \ + (This)->lpVtbl -> NotifyBindingPath(This,dwChangeFlag,pIPath) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + +HRESULT STDMETHODCALLTYPE INetCfgComponentNotifyBinding_QueryBindingPath_Proxy( + INetCfgComponentNotifyBinding * This, + /* [in] */ DWORD dwChangeFlag, + /* [in] */ INetCfgBindingPath *pIPath); + + +void __RPC_STUB INetCfgComponentNotifyBinding_QueryBindingPath_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgComponentNotifyBinding_NotifyBindingPath_Proxy( + INetCfgComponentNotifyBinding * This, + /* [in] */ DWORD dwChangeFlag, + /* [in] */ INetCfgBindingPath *pIPath); + + +void __RPC_STUB INetCfgComponentNotifyBinding_NotifyBindingPath_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#endif /* __INetCfgComponentNotifyBinding_INTERFACE_DEFINED__ */ + + +#ifndef __INetCfgComponentNotifyGlobal_INTERFACE_DEFINED__ +#define __INetCfgComponentNotifyGlobal_INTERFACE_DEFINED__ + +/* interface INetCfgComponentNotifyGlobal */ +/* [unique][uuid][object][local] */ + + +EXTERN_C const IID IID_INetCfgComponentNotifyGlobal; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("932238e2-bea1-11d0-9298-00c04fc99dcf") + INetCfgComponentNotifyGlobal : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE GetSupportedNotifications( + /* [out] */ DWORD *dwNotifications) = 0; + + virtual HRESULT STDMETHODCALLTYPE SysQueryBindingPath( + /* [in] */ DWORD dwChangeFlag, + /* [in] */ INetCfgBindingPath *pIPath) = 0; + + virtual HRESULT STDMETHODCALLTYPE SysNotifyBindingPath( + /* [in] */ DWORD dwChangeFlag, + /* [in] */ INetCfgBindingPath *pIPath) = 0; + + virtual HRESULT STDMETHODCALLTYPE SysNotifyComponent( + /* [in] */ DWORD dwChangeFlag, + /* [in] */ INetCfgComponent *pIComp) = 0; + + }; + +#else /* C style interface */ + + typedef struct INetCfgComponentNotifyGlobalVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + INetCfgComponentNotifyGlobal * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + INetCfgComponentNotifyGlobal * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + INetCfgComponentNotifyGlobal * This); + + HRESULT ( STDMETHODCALLTYPE *GetSupportedNotifications )( + INetCfgComponentNotifyGlobal * This, + /* [out] */ DWORD *dwNotifications); + + HRESULT ( STDMETHODCALLTYPE *SysQueryBindingPath )( + INetCfgComponentNotifyGlobal * This, + /* [in] */ DWORD dwChangeFlag, + /* [in] */ INetCfgBindingPath *pIPath); + + HRESULT ( STDMETHODCALLTYPE *SysNotifyBindingPath )( + INetCfgComponentNotifyGlobal * This, + /* [in] */ DWORD dwChangeFlag, + /* [in] */ INetCfgBindingPath *pIPath); + + HRESULT ( STDMETHODCALLTYPE *SysNotifyComponent )( + INetCfgComponentNotifyGlobal * This, + /* [in] */ DWORD dwChangeFlag, + /* [in] */ INetCfgComponent *pIComp); + + END_INTERFACE + } INetCfgComponentNotifyGlobalVtbl; + + interface INetCfgComponentNotifyGlobal + { + CONST_VTBL struct INetCfgComponentNotifyGlobalVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define INetCfgComponentNotifyGlobal_QueryInterface(This,riid,ppvObject) \ + (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) + +#define INetCfgComponentNotifyGlobal_AddRef(This) \ + (This)->lpVtbl -> AddRef(This) + +#define INetCfgComponentNotifyGlobal_Release(This) \ + (This)->lpVtbl -> Release(This) + + +#define INetCfgComponentNotifyGlobal_GetSupportedNotifications(This,dwNotifications) \ + (This)->lpVtbl -> GetSupportedNotifications(This,dwNotifications) + +#define INetCfgComponentNotifyGlobal_SysQueryBindingPath(This,dwChangeFlag,pIPath) \ + (This)->lpVtbl -> SysQueryBindingPath(This,dwChangeFlag,pIPath) + +#define INetCfgComponentNotifyGlobal_SysNotifyBindingPath(This,dwChangeFlag,pIPath) \ + (This)->lpVtbl -> SysNotifyBindingPath(This,dwChangeFlag,pIPath) + +#define INetCfgComponentNotifyGlobal_SysNotifyComponent(This,dwChangeFlag,pIComp) \ + (This)->lpVtbl -> SysNotifyComponent(This,dwChangeFlag,pIComp) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + +HRESULT STDMETHODCALLTYPE INetCfgComponentNotifyGlobal_GetSupportedNotifications_Proxy( + INetCfgComponentNotifyGlobal * This, + /* [out] */ DWORD *dwNotifications); + + +void __RPC_STUB INetCfgComponentNotifyGlobal_GetSupportedNotifications_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgComponentNotifyGlobal_SysQueryBindingPath_Proxy( + INetCfgComponentNotifyGlobal * This, + /* [in] */ DWORD dwChangeFlag, + /* [in] */ INetCfgBindingPath *pIPath); + + +void __RPC_STUB INetCfgComponentNotifyGlobal_SysQueryBindingPath_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgComponentNotifyGlobal_SysNotifyBindingPath_Proxy( + INetCfgComponentNotifyGlobal * This, + /* [in] */ DWORD dwChangeFlag, + /* [in] */ INetCfgBindingPath *pIPath); + + +void __RPC_STUB INetCfgComponentNotifyGlobal_SysNotifyBindingPath_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgComponentNotifyGlobal_SysNotifyComponent_Proxy( + INetCfgComponentNotifyGlobal * This, + /* [in] */ DWORD dwChangeFlag, + /* [in] */ INetCfgComponent *pIComp); + + +void __RPC_STUB INetCfgComponentNotifyGlobal_SysNotifyComponent_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#endif /* __INetCfgComponentNotifyGlobal_INTERFACE_DEFINED__ */ + + +#ifndef __INetCfgComponentUpperEdge_INTERFACE_DEFINED__ +#define __INetCfgComponentUpperEdge_INTERFACE_DEFINED__ + +/* interface INetCfgComponentUpperEdge */ +/* [unique][uuid][object][local] */ + + +EXTERN_C const IID IID_INetCfgComponentUpperEdge; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("932238e4-bea1-11d0-9298-00c04fc99dcf") + INetCfgComponentUpperEdge : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE GetInterfaceIdsForAdapter( + /* [in] */ INetCfgComponent *pAdapter, + /* [out] */ DWORD *pdwNumInterfaces, + /* [out] */ GUID **ppguidInterfaceIds) = 0; + + virtual HRESULT STDMETHODCALLTYPE AddInterfacesToAdapter( + /* [in] */ INetCfgComponent *pAdapter, + /* [in] */ DWORD dwNumInterfaces) = 0; + + virtual HRESULT STDMETHODCALLTYPE RemoveInterfacesFromAdapter( + /* [in] */ INetCfgComponent *pAdapter, + /* [in] */ DWORD dwNumInterfaces, + /* [in] */ const GUID *pguidInterfaceIds) = 0; + + }; + +#else /* C style interface */ + + typedef struct INetCfgComponentUpperEdgeVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + INetCfgComponentUpperEdge * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + INetCfgComponentUpperEdge * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + INetCfgComponentUpperEdge * This); + + HRESULT ( STDMETHODCALLTYPE *GetInterfaceIdsForAdapter )( + INetCfgComponentUpperEdge * This, + /* [in] */ INetCfgComponent *pAdapter, + /* [out] */ DWORD *pdwNumInterfaces, + /* [out] */ GUID **ppguidInterfaceIds); + + HRESULT ( STDMETHODCALLTYPE *AddInterfacesToAdapter )( + INetCfgComponentUpperEdge * This, + /* [in] */ INetCfgComponent *pAdapter, + /* [in] */ DWORD dwNumInterfaces); + + HRESULT ( STDMETHODCALLTYPE *RemoveInterfacesFromAdapter )( + INetCfgComponentUpperEdge * This, + /* [in] */ INetCfgComponent *pAdapter, + /* [in] */ DWORD dwNumInterfaces, + /* [in] */ const GUID *pguidInterfaceIds); + + END_INTERFACE + } INetCfgComponentUpperEdgeVtbl; + + interface INetCfgComponentUpperEdge + { + CONST_VTBL struct INetCfgComponentUpperEdgeVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define INetCfgComponentUpperEdge_QueryInterface(This,riid,ppvObject) \ + (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) + +#define INetCfgComponentUpperEdge_AddRef(This) \ + (This)->lpVtbl -> AddRef(This) + +#define INetCfgComponentUpperEdge_Release(This) \ + (This)->lpVtbl -> Release(This) + + +#define INetCfgComponentUpperEdge_GetInterfaceIdsForAdapter(This,pAdapter,pdwNumInterfaces,ppguidInterfaceIds) \ + (This)->lpVtbl -> GetInterfaceIdsForAdapter(This,pAdapter,pdwNumInterfaces,ppguidInterfaceIds) + +#define INetCfgComponentUpperEdge_AddInterfacesToAdapter(This,pAdapter,dwNumInterfaces) \ + (This)->lpVtbl -> AddInterfacesToAdapter(This,pAdapter,dwNumInterfaces) + +#define INetCfgComponentUpperEdge_RemoveInterfacesFromAdapter(This,pAdapter,dwNumInterfaces,pguidInterfaceIds) \ + (This)->lpVtbl -> RemoveInterfacesFromAdapter(This,pAdapter,dwNumInterfaces,pguidInterfaceIds) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + +HRESULT STDMETHODCALLTYPE INetCfgComponentUpperEdge_GetInterfaceIdsForAdapter_Proxy( + INetCfgComponentUpperEdge * This, + /* [in] */ INetCfgComponent *pAdapter, + /* [out] */ DWORD *pdwNumInterfaces, + /* [out] */ GUID **ppguidInterfaceIds); + + +void __RPC_STUB INetCfgComponentUpperEdge_GetInterfaceIdsForAdapter_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgComponentUpperEdge_AddInterfacesToAdapter_Proxy( + INetCfgComponentUpperEdge * This, + /* [in] */ INetCfgComponent *pAdapter, + /* [in] */ DWORD dwNumInterfaces); + + +void __RPC_STUB INetCfgComponentUpperEdge_AddInterfacesToAdapter_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgComponentUpperEdge_RemoveInterfacesFromAdapter_Proxy( + INetCfgComponentUpperEdge * This, + /* [in] */ INetCfgComponent *pAdapter, + /* [in] */ DWORD dwNumInterfaces, + /* [in] */ const GUID *pguidInterfaceIds); + + +void __RPC_STUB INetCfgComponentUpperEdge_RemoveInterfacesFromAdapter_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#endif /* __INetCfgComponentUpperEdge_INTERFACE_DEFINED__ */ + + +#ifndef __INetLanConnectionUiInfo_INTERFACE_DEFINED__ +#define __INetLanConnectionUiInfo_INTERFACE_DEFINED__ + +/* interface INetLanConnectionUiInfo */ +/* [unique][uuid][object] */ + + +EXTERN_C const IID IID_INetLanConnectionUiInfo; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("C08956A6-1CD3-11D1-B1C5-00805FC1270E") + INetLanConnectionUiInfo : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE GetDeviceGuid( + /* [out] */ GUID *pguid) = 0; + + }; + +#else /* C style interface */ + + typedef struct INetLanConnectionUiInfoVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + INetLanConnectionUiInfo * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + INetLanConnectionUiInfo * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + INetLanConnectionUiInfo * This); + + HRESULT ( STDMETHODCALLTYPE *GetDeviceGuid )( + INetLanConnectionUiInfo * This, + /* [out] */ GUID *pguid); + + END_INTERFACE + } INetLanConnectionUiInfoVtbl; + + interface INetLanConnectionUiInfo + { + CONST_VTBL struct INetLanConnectionUiInfoVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define INetLanConnectionUiInfo_QueryInterface(This,riid,ppvObject) \ + (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) + +#define INetLanConnectionUiInfo_AddRef(This) \ + (This)->lpVtbl -> AddRef(This) + +#define INetLanConnectionUiInfo_Release(This) \ + (This)->lpVtbl -> Release(This) + + +#define INetLanConnectionUiInfo_GetDeviceGuid(This,pguid) \ + (This)->lpVtbl -> GetDeviceGuid(This,pguid) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + +HRESULT STDMETHODCALLTYPE INetLanConnectionUiInfo_GetDeviceGuid_Proxy( + INetLanConnectionUiInfo * This, + /* [out] */ GUID *pguid); + + +void __RPC_STUB INetLanConnectionUiInfo_GetDeviceGuid_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#endif /* __INetLanConnectionUiInfo_INTERFACE_DEFINED__ */ + + +#ifndef __INetCfgComponentSysPrep_INTERFACE_DEFINED__ +#define __INetCfgComponentSysPrep_INTERFACE_DEFINED__ + +/* interface INetCfgComponentSysPrep */ +/* [unique][uuid][object][local] */ + + +EXTERN_C const IID IID_INetCfgComponentSysPrep; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("C0E8AE9A-306E-11D1-AACF-00805FC1270E") + INetCfgComponentSysPrep : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE SaveAdapterParameters( + /* [in] */ INetCfgSysPrep *pncsp, + /* [in] */ LPCWSTR pszwAnswerSections, + /* [in] */ GUID *pAdapterInstanceGuid) = 0; + + virtual HRESULT STDMETHODCALLTYPE RestoreAdapterParameters( + /* [in] */ LPCWSTR pszwAnswerFile, + /* [in] */ LPCWSTR pszwAnswerSection, + /* [in] */ GUID *pAdapterInstanceGuid) = 0; + + }; + +#else /* C style interface */ + + typedef struct INetCfgComponentSysPrepVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + INetCfgComponentSysPrep * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + INetCfgComponentSysPrep * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + INetCfgComponentSysPrep * This); + + HRESULT ( STDMETHODCALLTYPE *SaveAdapterParameters )( + INetCfgComponentSysPrep * This, + /* [in] */ INetCfgSysPrep *pncsp, + /* [in] */ LPCWSTR pszwAnswerSections, + /* [in] */ GUID *pAdapterInstanceGuid); + + HRESULT ( STDMETHODCALLTYPE *RestoreAdapterParameters )( + INetCfgComponentSysPrep * This, + /* [in] */ LPCWSTR pszwAnswerFile, + /* [in] */ LPCWSTR pszwAnswerSection, + /* [in] */ GUID *pAdapterInstanceGuid); + + END_INTERFACE + } INetCfgComponentSysPrepVtbl; + + interface INetCfgComponentSysPrep + { + CONST_VTBL struct INetCfgComponentSysPrepVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define INetCfgComponentSysPrep_QueryInterface(This,riid,ppvObject) \ + (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) + +#define INetCfgComponentSysPrep_AddRef(This) \ + (This)->lpVtbl -> AddRef(This) + +#define INetCfgComponentSysPrep_Release(This) \ + (This)->lpVtbl -> Release(This) + + +#define INetCfgComponentSysPrep_SaveAdapterParameters(This,pncsp,pszwAnswerSections,pAdapterInstanceGuid) \ + (This)->lpVtbl -> SaveAdapterParameters(This,pncsp,pszwAnswerSections,pAdapterInstanceGuid) + +#define INetCfgComponentSysPrep_RestoreAdapterParameters(This,pszwAnswerFile,pszwAnswerSection,pAdapterInstanceGuid) \ + (This)->lpVtbl -> RestoreAdapterParameters(This,pszwAnswerFile,pszwAnswerSection,pAdapterInstanceGuid) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + +HRESULT STDMETHODCALLTYPE INetCfgComponentSysPrep_SaveAdapterParameters_Proxy( + INetCfgComponentSysPrep * This, + /* [in] */ INetCfgSysPrep *pncsp, + /* [in] */ LPCWSTR pszwAnswerSections, + /* [in] */ GUID *pAdapterInstanceGuid); + + +void __RPC_STUB INetCfgComponentSysPrep_SaveAdapterParameters_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgComponentSysPrep_RestoreAdapterParameters_Proxy( + INetCfgComponentSysPrep * This, + /* [in] */ LPCWSTR pszwAnswerFile, + /* [in] */ LPCWSTR pszwAnswerSection, + /* [in] */ GUID *pAdapterInstanceGuid); + + +void __RPC_STUB INetCfgComponentSysPrep_RestoreAdapterParameters_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#endif /* __INetCfgComponentSysPrep_INTERFACE_DEFINED__ */ + + +/* Additional Prototypes for ALL interfaces */ + +/* end of Additional Prototypes */ + +#ifdef __cplusplus +} +#endif + +#endif + + + diff --git a/OEM/WinpcapOem/netcfgx.h b/OEM/WinpcapOem/netcfgx.h new file mode 100644 index 00000000..c3021e27 --- /dev/null +++ b/OEM/WinpcapOem/netcfgx.h @@ -0,0 +1,2519 @@ + + +/* this ALWAYS GENERATED file contains the definitions for the interfaces */ + + + /* File created by MIDL compiler version 6.00.0361 */ +/* Compiler settings for netcfgx.idl: + Oicf, W1, Zp8, env=Win32 (32b run) + protocol : dce , ms_ext, c_ext, robust + error checks: allocation ref bounds_check enum stub_data + VC __declspec() decoration level: + __declspec(uuid()), __declspec(selectany), __declspec(novtable) + DECLSPEC_UUID(), MIDL_INTERFACE() +*/ +//@@MIDL_FILE_HEADING( ) + +#pragma warning( disable: 4049 ) /* more than 64k source lines */ + + +/* verify that the version is high enough to compile this file*/ +#ifndef __REQUIRED_RPCNDR_H_VERSION__ +#define __REQUIRED_RPCNDR_H_VERSION__ 475 +#endif + +#include "rpc.h" +#include "rpcndr.h" + +#ifndef __RPCNDR_H_VERSION__ +#error this stub requires an updated version of +#endif // __RPCNDR_H_VERSION__ + +#ifndef COM_NO_WINDOWS_H +#include "windows.h" +#include "ole2.h" +#endif /*COM_NO_WINDOWS_H*/ + +#ifndef __netcfgx_h__ +#define __netcfgx_h__ + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#pragma once +#endif + +/* Forward Declarations */ + +#ifndef __IEnumNetCfgBindingInterface_FWD_DEFINED__ +#define __IEnumNetCfgBindingInterface_FWD_DEFINED__ +typedef interface IEnumNetCfgBindingInterface IEnumNetCfgBindingInterface; +#endif /* __IEnumNetCfgBindingInterface_FWD_DEFINED__ */ + + +#ifndef __IEnumNetCfgBindingPath_FWD_DEFINED__ +#define __IEnumNetCfgBindingPath_FWD_DEFINED__ +typedef interface IEnumNetCfgBindingPath IEnumNetCfgBindingPath; +#endif /* __IEnumNetCfgBindingPath_FWD_DEFINED__ */ + + +#ifndef __IEnumNetCfgComponent_FWD_DEFINED__ +#define __IEnumNetCfgComponent_FWD_DEFINED__ +typedef interface IEnumNetCfgComponent IEnumNetCfgComponent; +#endif /* __IEnumNetCfgComponent_FWD_DEFINED__ */ + + +#ifndef __INetCfg_FWD_DEFINED__ +#define __INetCfg_FWD_DEFINED__ +typedef interface INetCfg INetCfg; +#endif /* __INetCfg_FWD_DEFINED__ */ + + +#ifndef __INetCfgLock_FWD_DEFINED__ +#define __INetCfgLock_FWD_DEFINED__ +typedef interface INetCfgLock INetCfgLock; +#endif /* __INetCfgLock_FWD_DEFINED__ */ + + +#ifndef __INetCfgBindingInterface_FWD_DEFINED__ +#define __INetCfgBindingInterface_FWD_DEFINED__ +typedef interface INetCfgBindingInterface INetCfgBindingInterface; +#endif /* __INetCfgBindingInterface_FWD_DEFINED__ */ + + +#ifndef __INetCfgBindingPath_FWD_DEFINED__ +#define __INetCfgBindingPath_FWD_DEFINED__ +typedef interface INetCfgBindingPath INetCfgBindingPath; +#endif /* __INetCfgBindingPath_FWD_DEFINED__ */ + + +#ifndef __INetCfgClass_FWD_DEFINED__ +#define __INetCfgClass_FWD_DEFINED__ +typedef interface INetCfgClass INetCfgClass; +#endif /* __INetCfgClass_FWD_DEFINED__ */ + + +#ifndef __INetCfgClassSetup_FWD_DEFINED__ +#define __INetCfgClassSetup_FWD_DEFINED__ +typedef interface INetCfgClassSetup INetCfgClassSetup; +#endif /* __INetCfgClassSetup_FWD_DEFINED__ */ + + +#ifndef __INetCfgComponent_FWD_DEFINED__ +#define __INetCfgComponent_FWD_DEFINED__ +typedef interface INetCfgComponent INetCfgComponent; +#endif /* __INetCfgComponent_FWD_DEFINED__ */ + + +#ifndef __INetCfgComponentBindings_FWD_DEFINED__ +#define __INetCfgComponentBindings_FWD_DEFINED__ +typedef interface INetCfgComponentBindings INetCfgComponentBindings; +#endif /* __INetCfgComponentBindings_FWD_DEFINED__ */ + + +#ifndef __INetCfgSysPrep_FWD_DEFINED__ +#define __INetCfgSysPrep_FWD_DEFINED__ +typedef interface INetCfgSysPrep INetCfgSysPrep; +#endif /* __INetCfgSysPrep_FWD_DEFINED__ */ + + +/* header files for imported files */ +#include "unknwn.h" +#include "prsht.h" + +#ifdef __cplusplus +extern "C"{ +#endif + +void * __RPC_USER MIDL_user_allocate(size_t); +void __RPC_USER MIDL_user_free( void * ); + +/* interface __MIDL_itf_netcfgx_0000 */ +/* [local] */ + +//+------------------------------------------------------------------------- +// +// Microsoft Windows +// Copyright (c) Microsoft Corporation. All rights reserved. +// +//-------------------------------------------------------------------------- +#if ( _MSC_VER >= 800 ) +#pragma warning(disable:4201) +#endif + +EXTERN_C const CLSID CLSID_CNetCfg; + +#define NETCFG_E_ALREADY_INITIALIZED MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0xA020) +#define NETCFG_E_NOT_INITIALIZED MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0xA021) +#define NETCFG_E_IN_USE MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0xA022) +#define NETCFG_E_NO_WRITE_LOCK MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0xA024) +#define NETCFG_E_NEED_REBOOT MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0xA025) +#define NETCFG_E_ACTIVE_RAS_CONNECTIONS MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0xA026) +#define NETCFG_E_ADAPTER_NOT_FOUND MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0xA027) +#define NETCFG_E_COMPONENT_REMOVED_PENDING_REBOOT MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0xA028) +#define NETCFG_S_REBOOT MAKE_HRESULT(SEVERITY_SUCCESS, FACILITY_ITF, 0xA020) +#define NETCFG_S_DISABLE_QUERY MAKE_HRESULT(SEVERITY_SUCCESS, FACILITY_ITF, 0xA022) +#define NETCFG_S_STILL_REFERENCED MAKE_HRESULT(SEVERITY_SUCCESS, FACILITY_ITF, 0xA023) +#define NETCFG_S_CAUSED_SETUP_CHANGE MAKE_HRESULT(SEVERITY_SUCCESS, FACILITY_ITF, 0xA024) +#define NETCFG_S_COMMIT_NOW MAKE_HRESULT(SEVERITY_SUCCESS, FACILITY_ITF, 0xA025) + +#define NETCFG_CLIENT_CID_MS_MSClient TEXT("ms_msclient") +#define NETCFG_SERVICE_CID_MS_SERVER TEXT("ms_server") +#define NETCFG_SERVICE_CID_MS_NETBIOS TEXT("ms_netbios") +#define NETCFG_SERVICE_CID_MS_PSCHED TEXT("ms_pschedpc") +#define NETCFG_SERVICE_CID_MS_WLBS TEXT("ms_wlbs") +#define NETCFG_TRANS_CID_MS_APPLETALK TEXT("ms_appletalk") +#define NETCFG_TRANS_CID_MS_NETBEUI TEXT("ms_netbeui") +#define NETCFG_TRANS_CID_MS_NETMON TEXT("ms_netmon") +#define NETCFG_TRANS_CID_MS_NWIPX TEXT("ms_nwipx") +#define NETCFG_TRANS_CID_MS_NWSPX TEXT("ms_nwspx") +#define NETCFG_TRANS_CID_MS_TCPIP TEXT("ms_tcpip") + + + + + + + + + + + + + + + + +extern RPC_IF_HANDLE __MIDL_itf_netcfgx_0000_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_netcfgx_0000_v0_0_s_ifspec; + +#ifndef __IEnumNetCfgBindingInterface_INTERFACE_DEFINED__ +#define __IEnumNetCfgBindingInterface_INTERFACE_DEFINED__ + +/* interface IEnumNetCfgBindingInterface */ +/* [unique][uuid][object][local] */ + + +EXTERN_C const IID IID_IEnumNetCfgBindingInterface; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("C0E8AE90-306E-11D1-AACF-00805FC1270E") + IEnumNetCfgBindingInterface : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Next( + /* [in] */ ULONG celt, + /* [length_is][size_is][out] */ INetCfgBindingInterface **rgelt, + /* [out] */ ULONG *pceltFetched) = 0; + + virtual HRESULT STDMETHODCALLTYPE Skip( + /* [in] */ ULONG celt) = 0; + + virtual HRESULT STDMETHODCALLTYPE Reset( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE Clone( + /* [out] */ IEnumNetCfgBindingInterface **ppenum) = 0; + + }; + +#else /* C style interface */ + + typedef struct IEnumNetCfgBindingInterfaceVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IEnumNetCfgBindingInterface * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IEnumNetCfgBindingInterface * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IEnumNetCfgBindingInterface * This); + + HRESULT ( STDMETHODCALLTYPE *Next )( + IEnumNetCfgBindingInterface * This, + /* [in] */ ULONG celt, + /* [length_is][size_is][out] */ INetCfgBindingInterface **rgelt, + /* [out] */ ULONG *pceltFetched); + + HRESULT ( STDMETHODCALLTYPE *Skip )( + IEnumNetCfgBindingInterface * This, + /* [in] */ ULONG celt); + + HRESULT ( STDMETHODCALLTYPE *Reset )( + IEnumNetCfgBindingInterface * This); + + HRESULT ( STDMETHODCALLTYPE *Clone )( + IEnumNetCfgBindingInterface * This, + /* [out] */ IEnumNetCfgBindingInterface **ppenum); + + END_INTERFACE + } IEnumNetCfgBindingInterfaceVtbl; + + interface IEnumNetCfgBindingInterface + { + CONST_VTBL struct IEnumNetCfgBindingInterfaceVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IEnumNetCfgBindingInterface_QueryInterface(This,riid,ppvObject) \ + (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) + +#define IEnumNetCfgBindingInterface_AddRef(This) \ + (This)->lpVtbl -> AddRef(This) + +#define IEnumNetCfgBindingInterface_Release(This) \ + (This)->lpVtbl -> Release(This) + + +#define IEnumNetCfgBindingInterface_Next(This,celt,rgelt,pceltFetched) \ + (This)->lpVtbl -> Next(This,celt,rgelt,pceltFetched) + +#define IEnumNetCfgBindingInterface_Skip(This,celt) \ + (This)->lpVtbl -> Skip(This,celt) + +#define IEnumNetCfgBindingInterface_Reset(This) \ + (This)->lpVtbl -> Reset(This) + +#define IEnumNetCfgBindingInterface_Clone(This,ppenum) \ + (This)->lpVtbl -> Clone(This,ppenum) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + +HRESULT STDMETHODCALLTYPE IEnumNetCfgBindingInterface_Next_Proxy( + IEnumNetCfgBindingInterface * This, + /* [in] */ ULONG celt, + /* [length_is][size_is][out] */ INetCfgBindingInterface **rgelt, + /* [out] */ ULONG *pceltFetched); + + +void __RPC_STUB IEnumNetCfgBindingInterface_Next_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE IEnumNetCfgBindingInterface_Skip_Proxy( + IEnumNetCfgBindingInterface * This, + /* [in] */ ULONG celt); + + +void __RPC_STUB IEnumNetCfgBindingInterface_Skip_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE IEnumNetCfgBindingInterface_Reset_Proxy( + IEnumNetCfgBindingInterface * This); + + +void __RPC_STUB IEnumNetCfgBindingInterface_Reset_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE IEnumNetCfgBindingInterface_Clone_Proxy( + IEnumNetCfgBindingInterface * This, + /* [out] */ IEnumNetCfgBindingInterface **ppenum); + + +void __RPC_STUB IEnumNetCfgBindingInterface_Clone_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#endif /* __IEnumNetCfgBindingInterface_INTERFACE_DEFINED__ */ + + +#ifndef __IEnumNetCfgBindingPath_INTERFACE_DEFINED__ +#define __IEnumNetCfgBindingPath_INTERFACE_DEFINED__ + +/* interface IEnumNetCfgBindingPath */ +/* [unique][uuid][object][local] */ + + +EXTERN_C const IID IID_IEnumNetCfgBindingPath; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("C0E8AE91-306E-11D1-AACF-00805FC1270E") + IEnumNetCfgBindingPath : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Next( + /* [in] */ ULONG celt, + /* [length_is][size_is][out] */ INetCfgBindingPath **rgelt, + /* [out] */ ULONG *pceltFetched) = 0; + + virtual HRESULT STDMETHODCALLTYPE Skip( + /* [in] */ ULONG celt) = 0; + + virtual HRESULT STDMETHODCALLTYPE Reset( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE Clone( + /* [out] */ IEnumNetCfgBindingPath **ppenum) = 0; + + }; + +#else /* C style interface */ + + typedef struct IEnumNetCfgBindingPathVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IEnumNetCfgBindingPath * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IEnumNetCfgBindingPath * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IEnumNetCfgBindingPath * This); + + HRESULT ( STDMETHODCALLTYPE *Next )( + IEnumNetCfgBindingPath * This, + /* [in] */ ULONG celt, + /* [length_is][size_is][out] */ INetCfgBindingPath **rgelt, + /* [out] */ ULONG *pceltFetched); + + HRESULT ( STDMETHODCALLTYPE *Skip )( + IEnumNetCfgBindingPath * This, + /* [in] */ ULONG celt); + + HRESULT ( STDMETHODCALLTYPE *Reset )( + IEnumNetCfgBindingPath * This); + + HRESULT ( STDMETHODCALLTYPE *Clone )( + IEnumNetCfgBindingPath * This, + /* [out] */ IEnumNetCfgBindingPath **ppenum); + + END_INTERFACE + } IEnumNetCfgBindingPathVtbl; + + interface IEnumNetCfgBindingPath + { + CONST_VTBL struct IEnumNetCfgBindingPathVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IEnumNetCfgBindingPath_QueryInterface(This,riid,ppvObject) \ + (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) + +#define IEnumNetCfgBindingPath_AddRef(This) \ + (This)->lpVtbl -> AddRef(This) + +#define IEnumNetCfgBindingPath_Release(This) \ + (This)->lpVtbl -> Release(This) + + +#define IEnumNetCfgBindingPath_Next(This,celt,rgelt,pceltFetched) \ + (This)->lpVtbl -> Next(This,celt,rgelt,pceltFetched) + +#define IEnumNetCfgBindingPath_Skip(This,celt) \ + (This)->lpVtbl -> Skip(This,celt) + +#define IEnumNetCfgBindingPath_Reset(This) \ + (This)->lpVtbl -> Reset(This) + +#define IEnumNetCfgBindingPath_Clone(This,ppenum) \ + (This)->lpVtbl -> Clone(This,ppenum) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + +HRESULT STDMETHODCALLTYPE IEnumNetCfgBindingPath_Next_Proxy( + IEnumNetCfgBindingPath * This, + /* [in] */ ULONG celt, + /* [length_is][size_is][out] */ INetCfgBindingPath **rgelt, + /* [out] */ ULONG *pceltFetched); + + +void __RPC_STUB IEnumNetCfgBindingPath_Next_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE IEnumNetCfgBindingPath_Skip_Proxy( + IEnumNetCfgBindingPath * This, + /* [in] */ ULONG celt); + + +void __RPC_STUB IEnumNetCfgBindingPath_Skip_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE IEnumNetCfgBindingPath_Reset_Proxy( + IEnumNetCfgBindingPath * This); + + +void __RPC_STUB IEnumNetCfgBindingPath_Reset_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE IEnumNetCfgBindingPath_Clone_Proxy( + IEnumNetCfgBindingPath * This, + /* [out] */ IEnumNetCfgBindingPath **ppenum); + + +void __RPC_STUB IEnumNetCfgBindingPath_Clone_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#endif /* __IEnumNetCfgBindingPath_INTERFACE_DEFINED__ */ + + +#ifndef __IEnumNetCfgComponent_INTERFACE_DEFINED__ +#define __IEnumNetCfgComponent_INTERFACE_DEFINED__ + +/* interface IEnumNetCfgComponent */ +/* [unique][uuid][object][local] */ + + +EXTERN_C const IID IID_IEnumNetCfgComponent; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("C0E8AE92-306E-11D1-AACF-00805FC1270E") + IEnumNetCfgComponent : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Next( + /* [in] */ ULONG celt, + /* [length_is][size_is][out] */ INetCfgComponent **rgelt, + /* [out] */ ULONG *pceltFetched) = 0; + + virtual HRESULT STDMETHODCALLTYPE Skip( + /* [in] */ ULONG celt) = 0; + + virtual HRESULT STDMETHODCALLTYPE Reset( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE Clone( + /* [out] */ IEnumNetCfgComponent **ppenum) = 0; + + }; + +#else /* C style interface */ + + typedef struct IEnumNetCfgComponentVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + IEnumNetCfgComponent * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + IEnumNetCfgComponent * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + IEnumNetCfgComponent * This); + + HRESULT ( STDMETHODCALLTYPE *Next )( + IEnumNetCfgComponent * This, + /* [in] */ ULONG celt, + /* [length_is][size_is][out] */ INetCfgComponent **rgelt, + /* [out] */ ULONG *pceltFetched); + + HRESULT ( STDMETHODCALLTYPE *Skip )( + IEnumNetCfgComponent * This, + /* [in] */ ULONG celt); + + HRESULT ( STDMETHODCALLTYPE *Reset )( + IEnumNetCfgComponent * This); + + HRESULT ( STDMETHODCALLTYPE *Clone )( + IEnumNetCfgComponent * This, + /* [out] */ IEnumNetCfgComponent **ppenum); + + END_INTERFACE + } IEnumNetCfgComponentVtbl; + + interface IEnumNetCfgComponent + { + CONST_VTBL struct IEnumNetCfgComponentVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define IEnumNetCfgComponent_QueryInterface(This,riid,ppvObject) \ + (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) + +#define IEnumNetCfgComponent_AddRef(This) \ + (This)->lpVtbl -> AddRef(This) + +#define IEnumNetCfgComponent_Release(This) \ + (This)->lpVtbl -> Release(This) + + +#define IEnumNetCfgComponent_Next(This,celt,rgelt,pceltFetched) \ + (This)->lpVtbl -> Next(This,celt,rgelt,pceltFetched) + +#define IEnumNetCfgComponent_Skip(This,celt) \ + (This)->lpVtbl -> Skip(This,celt) + +#define IEnumNetCfgComponent_Reset(This) \ + (This)->lpVtbl -> Reset(This) + +#define IEnumNetCfgComponent_Clone(This,ppenum) \ + (This)->lpVtbl -> Clone(This,ppenum) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + +HRESULT STDMETHODCALLTYPE IEnumNetCfgComponent_Next_Proxy( + IEnumNetCfgComponent * This, + /* [in] */ ULONG celt, + /* [length_is][size_is][out] */ INetCfgComponent **rgelt, + /* [out] */ ULONG *pceltFetched); + + +void __RPC_STUB IEnumNetCfgComponent_Next_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE IEnumNetCfgComponent_Skip_Proxy( + IEnumNetCfgComponent * This, + /* [in] */ ULONG celt); + + +void __RPC_STUB IEnumNetCfgComponent_Skip_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE IEnumNetCfgComponent_Reset_Proxy( + IEnumNetCfgComponent * This); + + +void __RPC_STUB IEnumNetCfgComponent_Reset_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE IEnumNetCfgComponent_Clone_Proxy( + IEnumNetCfgComponent * This, + /* [out] */ IEnumNetCfgComponent **ppenum); + + +void __RPC_STUB IEnumNetCfgComponent_Clone_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#endif /* __IEnumNetCfgComponent_INTERFACE_DEFINED__ */ + + +#ifndef __INetCfg_INTERFACE_DEFINED__ +#define __INetCfg_INTERFACE_DEFINED__ + +/* interface INetCfg */ +/* [unique][uuid][object][local] */ + + +EXTERN_C const IID IID_INetCfg; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("C0E8AE93-306E-11D1-AACF-00805FC1270E") + INetCfg : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE Initialize( + /* [in] */ PVOID pvReserved) = 0; + + virtual HRESULT STDMETHODCALLTYPE Uninitialize( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE Apply( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE Cancel( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE EnumComponents( + /* [in] */ const GUID *pguidClass, + /* [out] */ IEnumNetCfgComponent **ppenumComponent) = 0; + + virtual HRESULT STDMETHODCALLTYPE FindComponent( + /* [string][in] */ LPCWSTR pszwInfId, + /* [out] */ INetCfgComponent **pComponent) = 0; + + virtual HRESULT STDMETHODCALLTYPE QueryNetCfgClass( + /* [in] */ const GUID *pguidClass, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppvObject) = 0; + + }; + +#else /* C style interface */ + + typedef struct INetCfgVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + INetCfg * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + INetCfg * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + INetCfg * This); + + HRESULT ( STDMETHODCALLTYPE *Initialize )( + INetCfg * This, + /* [in] */ PVOID pvReserved); + + HRESULT ( STDMETHODCALLTYPE *Uninitialize )( + INetCfg * This); + + HRESULT ( STDMETHODCALLTYPE *Apply )( + INetCfg * This); + + HRESULT ( STDMETHODCALLTYPE *Cancel )( + INetCfg * This); + + HRESULT ( STDMETHODCALLTYPE *EnumComponents )( + INetCfg * This, + /* [in] */ const GUID *pguidClass, + /* [out] */ IEnumNetCfgComponent **ppenumComponent); + + HRESULT ( STDMETHODCALLTYPE *FindComponent )( + INetCfg * This, + /* [string][in] */ LPCWSTR pszwInfId, + /* [out] */ INetCfgComponent **pComponent); + + HRESULT ( STDMETHODCALLTYPE *QueryNetCfgClass )( + INetCfg * This, + /* [in] */ const GUID *pguidClass, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppvObject); + + END_INTERFACE + } INetCfgVtbl; + + interface INetCfg + { + CONST_VTBL struct INetCfgVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define INetCfg_QueryInterface(This,riid,ppvObject) \ + (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) + +#define INetCfg_AddRef(This) \ + (This)->lpVtbl -> AddRef(This) + +#define INetCfg_Release(This) \ + (This)->lpVtbl -> Release(This) + + +#define INetCfg_Initialize(This,pvReserved) \ + (This)->lpVtbl -> Initialize(This,pvReserved) + +#define INetCfg_Uninitialize(This) \ + (This)->lpVtbl -> Uninitialize(This) + +#define INetCfg_Apply(This) \ + (This)->lpVtbl -> Apply(This) + +#define INetCfg_Cancel(This) \ + (This)->lpVtbl -> Cancel(This) + +#define INetCfg_EnumComponents(This,pguidClass,ppenumComponent) \ + (This)->lpVtbl -> EnumComponents(This,pguidClass,ppenumComponent) + +#define INetCfg_FindComponent(This,pszwInfId,pComponent) \ + (This)->lpVtbl -> FindComponent(This,pszwInfId,pComponent) + +#define INetCfg_QueryNetCfgClass(This,pguidClass,riid,ppvObject) \ + (This)->lpVtbl -> QueryNetCfgClass(This,pguidClass,riid,ppvObject) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + +HRESULT STDMETHODCALLTYPE INetCfg_Initialize_Proxy( + INetCfg * This, + /* [in] */ PVOID pvReserved); + + +void __RPC_STUB INetCfg_Initialize_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfg_Uninitialize_Proxy( + INetCfg * This); + + +void __RPC_STUB INetCfg_Uninitialize_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfg_Apply_Proxy( + INetCfg * This); + + +void __RPC_STUB INetCfg_Apply_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfg_Cancel_Proxy( + INetCfg * This); + + +void __RPC_STUB INetCfg_Cancel_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfg_EnumComponents_Proxy( + INetCfg * This, + /* [in] */ const GUID *pguidClass, + /* [out] */ IEnumNetCfgComponent **ppenumComponent); + + +void __RPC_STUB INetCfg_EnumComponents_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfg_FindComponent_Proxy( + INetCfg * This, + /* [string][in] */ LPCWSTR pszwInfId, + /* [out] */ INetCfgComponent **pComponent); + + +void __RPC_STUB INetCfg_FindComponent_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfg_QueryNetCfgClass_Proxy( + INetCfg * This, + /* [in] */ const GUID *pguidClass, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppvObject); + + +void __RPC_STUB INetCfg_QueryNetCfgClass_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#endif /* __INetCfg_INTERFACE_DEFINED__ */ + + +#ifndef __INetCfgLock_INTERFACE_DEFINED__ +#define __INetCfgLock_INTERFACE_DEFINED__ + +/* interface INetCfgLock */ +/* [unique][uuid][object][local] */ + + +EXTERN_C const IID IID_INetCfgLock; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("C0E8AE9F-306E-11D1-AACF-00805FC1270E") + INetCfgLock : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE AcquireWriteLock( + /* [in] */ DWORD cmsTimeout, + /* [string][in] */ LPCWSTR pszwClientDescription, + /* [string][out] */ LPWSTR *ppszwClientDescription) = 0; + + virtual HRESULT STDMETHODCALLTYPE ReleaseWriteLock( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE IsWriteLocked( + /* [string][out] */ LPWSTR *ppszwClientDescription) = 0; + + }; + +#else /* C style interface */ + + typedef struct INetCfgLockVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + INetCfgLock * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + INetCfgLock * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + INetCfgLock * This); + + HRESULT ( STDMETHODCALLTYPE *AcquireWriteLock )( + INetCfgLock * This, + /* [in] */ DWORD cmsTimeout, + /* [string][in] */ LPCWSTR pszwClientDescription, + /* [string][out] */ LPWSTR *ppszwClientDescription); + + HRESULT ( STDMETHODCALLTYPE *ReleaseWriteLock )( + INetCfgLock * This); + + HRESULT ( STDMETHODCALLTYPE *IsWriteLocked )( + INetCfgLock * This, + /* [string][out] */ LPWSTR *ppszwClientDescription); + + END_INTERFACE + } INetCfgLockVtbl; + + interface INetCfgLock + { + CONST_VTBL struct INetCfgLockVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define INetCfgLock_QueryInterface(This,riid,ppvObject) \ + (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) + +#define INetCfgLock_AddRef(This) \ + (This)->lpVtbl -> AddRef(This) + +#define INetCfgLock_Release(This) \ + (This)->lpVtbl -> Release(This) + + +#define INetCfgLock_AcquireWriteLock(This,cmsTimeout,pszwClientDescription,ppszwClientDescription) \ + (This)->lpVtbl -> AcquireWriteLock(This,cmsTimeout,pszwClientDescription,ppszwClientDescription) + +#define INetCfgLock_ReleaseWriteLock(This) \ + (This)->lpVtbl -> ReleaseWriteLock(This) + +#define INetCfgLock_IsWriteLocked(This,ppszwClientDescription) \ + (This)->lpVtbl -> IsWriteLocked(This,ppszwClientDescription) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + +HRESULT STDMETHODCALLTYPE INetCfgLock_AcquireWriteLock_Proxy( + INetCfgLock * This, + /* [in] */ DWORD cmsTimeout, + /* [string][in] */ LPCWSTR pszwClientDescription, + /* [string][out] */ LPWSTR *ppszwClientDescription); + + +void __RPC_STUB INetCfgLock_AcquireWriteLock_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgLock_ReleaseWriteLock_Proxy( + INetCfgLock * This); + + +void __RPC_STUB INetCfgLock_ReleaseWriteLock_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgLock_IsWriteLocked_Proxy( + INetCfgLock * This, + /* [string][out] */ LPWSTR *ppszwClientDescription); + + +void __RPC_STUB INetCfgLock_IsWriteLocked_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#endif /* __INetCfgLock_INTERFACE_DEFINED__ */ + + +#ifndef __INetCfgBindingInterface_INTERFACE_DEFINED__ +#define __INetCfgBindingInterface_INTERFACE_DEFINED__ + +/* interface INetCfgBindingInterface */ +/* [unique][uuid][object][local] */ + + +EXTERN_C const IID IID_INetCfgBindingInterface; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("C0E8AE94-306E-11D1-AACF-00805FC1270E") + INetCfgBindingInterface : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE GetName( + /* [string][out] */ LPWSTR *ppszwInterfaceName) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetUpperComponent( + /* [out] */ INetCfgComponent **ppnccItem) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetLowerComponent( + /* [out] */ INetCfgComponent **ppnccItem) = 0; + + }; + +#else /* C style interface */ + + typedef struct INetCfgBindingInterfaceVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + INetCfgBindingInterface * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + INetCfgBindingInterface * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + INetCfgBindingInterface * This); + + HRESULT ( STDMETHODCALLTYPE *GetName )( + INetCfgBindingInterface * This, + /* [string][out] */ LPWSTR *ppszwInterfaceName); + + HRESULT ( STDMETHODCALLTYPE *GetUpperComponent )( + INetCfgBindingInterface * This, + /* [out] */ INetCfgComponent **ppnccItem); + + HRESULT ( STDMETHODCALLTYPE *GetLowerComponent )( + INetCfgBindingInterface * This, + /* [out] */ INetCfgComponent **ppnccItem); + + END_INTERFACE + } INetCfgBindingInterfaceVtbl; + + interface INetCfgBindingInterface + { + CONST_VTBL struct INetCfgBindingInterfaceVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define INetCfgBindingInterface_QueryInterface(This,riid,ppvObject) \ + (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) + +#define INetCfgBindingInterface_AddRef(This) \ + (This)->lpVtbl -> AddRef(This) + +#define INetCfgBindingInterface_Release(This) \ + (This)->lpVtbl -> Release(This) + + +#define INetCfgBindingInterface_GetName(This,ppszwInterfaceName) \ + (This)->lpVtbl -> GetName(This,ppszwInterfaceName) + +#define INetCfgBindingInterface_GetUpperComponent(This,ppnccItem) \ + (This)->lpVtbl -> GetUpperComponent(This,ppnccItem) + +#define INetCfgBindingInterface_GetLowerComponent(This,ppnccItem) \ + (This)->lpVtbl -> GetLowerComponent(This,ppnccItem) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + +HRESULT STDMETHODCALLTYPE INetCfgBindingInterface_GetName_Proxy( + INetCfgBindingInterface * This, + /* [string][out] */ LPWSTR *ppszwInterfaceName); + + +void __RPC_STUB INetCfgBindingInterface_GetName_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgBindingInterface_GetUpperComponent_Proxy( + INetCfgBindingInterface * This, + /* [out] */ INetCfgComponent **ppnccItem); + + +void __RPC_STUB INetCfgBindingInterface_GetUpperComponent_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgBindingInterface_GetLowerComponent_Proxy( + INetCfgBindingInterface * This, + /* [out] */ INetCfgComponent **ppnccItem); + + +void __RPC_STUB INetCfgBindingInterface_GetLowerComponent_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#endif /* __INetCfgBindingInterface_INTERFACE_DEFINED__ */ + + +#ifndef __INetCfgBindingPath_INTERFACE_DEFINED__ +#define __INetCfgBindingPath_INTERFACE_DEFINED__ + +/* interface INetCfgBindingPath */ +/* [unique][uuid][object][local] */ + + +EXTERN_C const IID IID_INetCfgBindingPath; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("C0E8AE96-306E-11D1-AACF-00805FC1270E") + INetCfgBindingPath : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE IsSamePathAs( + /* [in] */ INetCfgBindingPath *pPath) = 0; + + virtual HRESULT STDMETHODCALLTYPE IsSubPathOf( + /* [in] */ INetCfgBindingPath *pPath) = 0; + + virtual HRESULT STDMETHODCALLTYPE IsEnabled( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE Enable( + /* [in] */ BOOL fEnable) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetPathToken( + /* [string][out] */ LPWSTR *ppszwPathToken) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetOwner( + /* [out] */ INetCfgComponent **ppComponent) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetDepth( + /* [out] */ ULONG *pcInterfaces) = 0; + + virtual HRESULT STDMETHODCALLTYPE EnumBindingInterfaces( + /* [out] */ IEnumNetCfgBindingInterface **ppenumInterface) = 0; + + }; + +#else /* C style interface */ + + typedef struct INetCfgBindingPathVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + INetCfgBindingPath * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + INetCfgBindingPath * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + INetCfgBindingPath * This); + + HRESULT ( STDMETHODCALLTYPE *IsSamePathAs )( + INetCfgBindingPath * This, + /* [in] */ INetCfgBindingPath *pPath); + + HRESULT ( STDMETHODCALLTYPE *IsSubPathOf )( + INetCfgBindingPath * This, + /* [in] */ INetCfgBindingPath *pPath); + + HRESULT ( STDMETHODCALLTYPE *IsEnabled )( + INetCfgBindingPath * This); + + HRESULT ( STDMETHODCALLTYPE *Enable )( + INetCfgBindingPath * This, + /* [in] */ BOOL fEnable); + + HRESULT ( STDMETHODCALLTYPE *GetPathToken )( + INetCfgBindingPath * This, + /* [string][out] */ LPWSTR *ppszwPathToken); + + HRESULT ( STDMETHODCALLTYPE *GetOwner )( + INetCfgBindingPath * This, + /* [out] */ INetCfgComponent **ppComponent); + + HRESULT ( STDMETHODCALLTYPE *GetDepth )( + INetCfgBindingPath * This, + /* [out] */ ULONG *pcInterfaces); + + HRESULT ( STDMETHODCALLTYPE *EnumBindingInterfaces )( + INetCfgBindingPath * This, + /* [out] */ IEnumNetCfgBindingInterface **ppenumInterface); + + END_INTERFACE + } INetCfgBindingPathVtbl; + + interface INetCfgBindingPath + { + CONST_VTBL struct INetCfgBindingPathVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define INetCfgBindingPath_QueryInterface(This,riid,ppvObject) \ + (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) + +#define INetCfgBindingPath_AddRef(This) \ + (This)->lpVtbl -> AddRef(This) + +#define INetCfgBindingPath_Release(This) \ + (This)->lpVtbl -> Release(This) + + +#define INetCfgBindingPath_IsSamePathAs(This,pPath) \ + (This)->lpVtbl -> IsSamePathAs(This,pPath) + +#define INetCfgBindingPath_IsSubPathOf(This,pPath) \ + (This)->lpVtbl -> IsSubPathOf(This,pPath) + +#define INetCfgBindingPath_IsEnabled(This) \ + (This)->lpVtbl -> IsEnabled(This) + +#define INetCfgBindingPath_Enable(This,fEnable) \ + (This)->lpVtbl -> Enable(This,fEnable) + +#define INetCfgBindingPath_GetPathToken(This,ppszwPathToken) \ + (This)->lpVtbl -> GetPathToken(This,ppszwPathToken) + +#define INetCfgBindingPath_GetOwner(This,ppComponent) \ + (This)->lpVtbl -> GetOwner(This,ppComponent) + +#define INetCfgBindingPath_GetDepth(This,pcInterfaces) \ + (This)->lpVtbl -> GetDepth(This,pcInterfaces) + +#define INetCfgBindingPath_EnumBindingInterfaces(This,ppenumInterface) \ + (This)->lpVtbl -> EnumBindingInterfaces(This,ppenumInterface) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + +HRESULT STDMETHODCALLTYPE INetCfgBindingPath_IsSamePathAs_Proxy( + INetCfgBindingPath * This, + /* [in] */ INetCfgBindingPath *pPath); + + +void __RPC_STUB INetCfgBindingPath_IsSamePathAs_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgBindingPath_IsSubPathOf_Proxy( + INetCfgBindingPath * This, + /* [in] */ INetCfgBindingPath *pPath); + + +void __RPC_STUB INetCfgBindingPath_IsSubPathOf_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgBindingPath_IsEnabled_Proxy( + INetCfgBindingPath * This); + + +void __RPC_STUB INetCfgBindingPath_IsEnabled_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgBindingPath_Enable_Proxy( + INetCfgBindingPath * This, + /* [in] */ BOOL fEnable); + + +void __RPC_STUB INetCfgBindingPath_Enable_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgBindingPath_GetPathToken_Proxy( + INetCfgBindingPath * This, + /* [string][out] */ LPWSTR *ppszwPathToken); + + +void __RPC_STUB INetCfgBindingPath_GetPathToken_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgBindingPath_GetOwner_Proxy( + INetCfgBindingPath * This, + /* [out] */ INetCfgComponent **ppComponent); + + +void __RPC_STUB INetCfgBindingPath_GetOwner_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgBindingPath_GetDepth_Proxy( + INetCfgBindingPath * This, + /* [out] */ ULONG *pcInterfaces); + + +void __RPC_STUB INetCfgBindingPath_GetDepth_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgBindingPath_EnumBindingInterfaces_Proxy( + INetCfgBindingPath * This, + /* [out] */ IEnumNetCfgBindingInterface **ppenumInterface); + + +void __RPC_STUB INetCfgBindingPath_EnumBindingInterfaces_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#endif /* __INetCfgBindingPath_INTERFACE_DEFINED__ */ + + +#ifndef __INetCfgClass_INTERFACE_DEFINED__ +#define __INetCfgClass_INTERFACE_DEFINED__ + +/* interface INetCfgClass */ +/* [unique][uuid][object][local] */ + + +EXTERN_C const IID IID_INetCfgClass; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("C0E8AE97-306E-11D1-AACF-00805FC1270E") + INetCfgClass : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE FindComponent( + /* [string][in] */ LPCWSTR pszwInfId, + /* [out] */ INetCfgComponent **ppnccItem) = 0; + + virtual HRESULT STDMETHODCALLTYPE EnumComponents( + /* [out] */ IEnumNetCfgComponent **ppenumComponent) = 0; + + }; + +#else /* C style interface */ + + typedef struct INetCfgClassVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + INetCfgClass * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + INetCfgClass * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + INetCfgClass * This); + + HRESULT ( STDMETHODCALLTYPE *FindComponent )( + INetCfgClass * This, + /* [string][in] */ LPCWSTR pszwInfId, + /* [out] */ INetCfgComponent **ppnccItem); + + HRESULT ( STDMETHODCALLTYPE *EnumComponents )( + INetCfgClass * This, + /* [out] */ IEnumNetCfgComponent **ppenumComponent); + + END_INTERFACE + } INetCfgClassVtbl; + + interface INetCfgClass + { + CONST_VTBL struct INetCfgClassVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define INetCfgClass_QueryInterface(This,riid,ppvObject) \ + (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) + +#define INetCfgClass_AddRef(This) \ + (This)->lpVtbl -> AddRef(This) + +#define INetCfgClass_Release(This) \ + (This)->lpVtbl -> Release(This) + + +#define INetCfgClass_FindComponent(This,pszwInfId,ppnccItem) \ + (This)->lpVtbl -> FindComponent(This,pszwInfId,ppnccItem) + +#define INetCfgClass_EnumComponents(This,ppenumComponent) \ + (This)->lpVtbl -> EnumComponents(This,ppenumComponent) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + +HRESULT STDMETHODCALLTYPE INetCfgClass_FindComponent_Proxy( + INetCfgClass * This, + /* [string][in] */ LPCWSTR pszwInfId, + /* [out] */ INetCfgComponent **ppnccItem); + + +void __RPC_STUB INetCfgClass_FindComponent_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgClass_EnumComponents_Proxy( + INetCfgClass * This, + /* [out] */ IEnumNetCfgComponent **ppenumComponent); + + +void __RPC_STUB INetCfgClass_EnumComponents_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#endif /* __INetCfgClass_INTERFACE_DEFINED__ */ + + +#ifndef __INetCfgClassSetup_INTERFACE_DEFINED__ +#define __INetCfgClassSetup_INTERFACE_DEFINED__ + +/* interface INetCfgClassSetup */ +/* [unique][uuid][object][local] */ + +typedef +enum tagOBO_TOKEN_TYPE + { OBO_USER = 1, + OBO_COMPONENT = 2, + OBO_SOFTWARE = 3 + } OBO_TOKEN_TYPE; + +typedef struct tagOBO_TOKEN + { + OBO_TOKEN_TYPE Type; + INetCfgComponent *pncc; + LPCWSTR pszwManufacturer; + LPCWSTR pszwProduct; + LPCWSTR pszwDisplayName; + BOOL fRegistered; + } OBO_TOKEN; + + +EXTERN_C const IID IID_INetCfgClassSetup; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("C0E8AE9D-306E-11D1-AACF-00805FC1270E") + INetCfgClassSetup : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE SelectAndInstall( + /* [in] */ HWND hwndParent, + /* [in] */ OBO_TOKEN *pOboToken, + /* [out] */ INetCfgComponent **ppnccItem) = 0; + + virtual HRESULT STDMETHODCALLTYPE Install( + /* [string][in] */ LPCWSTR pszwInfId, + /* [in] */ OBO_TOKEN *pOboToken, + /* [in] */ DWORD dwSetupFlags, + /* [in] */ DWORD dwUpgradeFromBuildNo, + /* [string][in] */ LPCWSTR pszwAnswerFile, + /* [string][in] */ LPCWSTR pszwAnswerSections, + /* [out] */ INetCfgComponent **ppnccItem) = 0; + + virtual HRESULT STDMETHODCALLTYPE DeInstall( + /* [in] */ INetCfgComponent *pComponent, + /* [in] */ OBO_TOKEN *pOboToken, + /* [out] */ LPWSTR *pmszwRefs) = 0; + + }; + +#else /* C style interface */ + + typedef struct INetCfgClassSetupVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + INetCfgClassSetup * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + INetCfgClassSetup * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + INetCfgClassSetup * This); + + HRESULT ( STDMETHODCALLTYPE *SelectAndInstall )( + INetCfgClassSetup * This, + /* [in] */ HWND hwndParent, + /* [in] */ OBO_TOKEN *pOboToken, + /* [out] */ INetCfgComponent **ppnccItem); + + HRESULT ( STDMETHODCALLTYPE *Install )( + INetCfgClassSetup * This, + /* [string][in] */ LPCWSTR pszwInfId, + /* [in] */ OBO_TOKEN *pOboToken, + /* [in] */ DWORD dwSetupFlags, + /* [in] */ DWORD dwUpgradeFromBuildNo, + /* [string][in] */ LPCWSTR pszwAnswerFile, + /* [string][in] */ LPCWSTR pszwAnswerSections, + /* [out] */ INetCfgComponent **ppnccItem); + + HRESULT ( STDMETHODCALLTYPE *DeInstall )( + INetCfgClassSetup * This, + /* [in] */ INetCfgComponent *pComponent, + /* [in] */ OBO_TOKEN *pOboToken, + /* [out] */ LPWSTR *pmszwRefs); + + END_INTERFACE + } INetCfgClassSetupVtbl; + + interface INetCfgClassSetup + { + CONST_VTBL struct INetCfgClassSetupVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define INetCfgClassSetup_QueryInterface(This,riid,ppvObject) \ + (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) + +#define INetCfgClassSetup_AddRef(This) \ + (This)->lpVtbl -> AddRef(This) + +#define INetCfgClassSetup_Release(This) \ + (This)->lpVtbl -> Release(This) + + +#define INetCfgClassSetup_SelectAndInstall(This,hwndParent,pOboToken,ppnccItem) \ + (This)->lpVtbl -> SelectAndInstall(This,hwndParent,pOboToken,ppnccItem) + +#define INetCfgClassSetup_Install(This,pszwInfId,pOboToken,dwSetupFlags,dwUpgradeFromBuildNo,pszwAnswerFile,pszwAnswerSections,ppnccItem) \ + (This)->lpVtbl -> Install(This,pszwInfId,pOboToken,dwSetupFlags,dwUpgradeFromBuildNo,pszwAnswerFile,pszwAnswerSections,ppnccItem) + +#define INetCfgClassSetup_DeInstall(This,pComponent,pOboToken,pmszwRefs) \ + (This)->lpVtbl -> DeInstall(This,pComponent,pOboToken,pmszwRefs) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + +HRESULT STDMETHODCALLTYPE INetCfgClassSetup_SelectAndInstall_Proxy( + INetCfgClassSetup * This, + /* [in] */ HWND hwndParent, + /* [in] */ OBO_TOKEN *pOboToken, + /* [out] */ INetCfgComponent **ppnccItem); + + +void __RPC_STUB INetCfgClassSetup_SelectAndInstall_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgClassSetup_Install_Proxy( + INetCfgClassSetup * This, + /* [string][in] */ LPCWSTR pszwInfId, + /* [in] */ OBO_TOKEN *pOboToken, + /* [in] */ DWORD dwSetupFlags, + /* [in] */ DWORD dwUpgradeFromBuildNo, + /* [string][in] */ LPCWSTR pszwAnswerFile, + /* [string][in] */ LPCWSTR pszwAnswerSections, + /* [out] */ INetCfgComponent **ppnccItem); + + +void __RPC_STUB INetCfgClassSetup_Install_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgClassSetup_DeInstall_Proxy( + INetCfgClassSetup * This, + /* [in] */ INetCfgComponent *pComponent, + /* [in] */ OBO_TOKEN *pOboToken, + /* [out] */ LPWSTR *pmszwRefs); + + +void __RPC_STUB INetCfgClassSetup_DeInstall_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#endif /* __INetCfgClassSetup_INTERFACE_DEFINED__ */ + + +#ifndef __INetCfgComponent_INTERFACE_DEFINED__ +#define __INetCfgComponent_INTERFACE_DEFINED__ + +/* interface INetCfgComponent */ +/* [unique][uuid][object][local] */ + +typedef +enum tagCOMPONENT_CHARACTERISTICS + { NCF_VIRTUAL = 0x1, + NCF_SOFTWARE_ENUMERATED = 0x2, + NCF_PHYSICAL = 0x4, + NCF_HIDDEN = 0x8, + NCF_NO_SERVICE = 0x10, + NCF_NOT_USER_REMOVABLE = 0x20, + NCF_MULTIPORT_INSTANCED_ADAPTER = 0x40, + NCF_HAS_UI = 0x80, + NCF_SINGLE_INSTANCE = 0x100, + NCF_FILTER = 0x400, + NCF_DONTEXPOSELOWER = 0x1000, + NCF_HIDE_BINDING = 0x2000, + NCF_NDIS_PROTOCOL = 0x4000, + NCF_FIXED_BINDING = 0x20000 + } COMPONENT_CHARACTERISTICS; + +typedef +enum tagNCRP_FLAGS + { NCRP_QUERY_PROPERTY_UI = 0x1, + NCRP_SHOW_PROPERTY_UI = 0x2 + } NCRP_FLAGS; + + +EXTERN_C const IID IID_INetCfgComponent; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("C0E8AE99-306E-11D1-AACF-00805FC1270E") + INetCfgComponent : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE GetDisplayName( + /* [string][out] */ LPWSTR *ppszwDisplayName) = 0; + + virtual HRESULT STDMETHODCALLTYPE SetDisplayName( + /* [string][in] */ LPCWSTR pszwDisplayName) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetHelpText( + /* [string][out] */ LPWSTR *pszwHelpText) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetId( + /* [string][out] */ LPWSTR *ppszwId) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetCharacteristics( + /* [out] */ LPDWORD pdwCharacteristics) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetInstanceGuid( + /* [out] */ GUID *pGuid) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetPnpDevNodeId( + /* [string][out] */ LPWSTR *ppszwDevNodeId) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetClassGuid( + /* [out] */ GUID *pGuid) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetBindName( + /* [string][out] */ LPWSTR *ppszwBindName) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetDeviceStatus( + /* [out] */ ULONG *pulStatus) = 0; + + virtual HRESULT STDMETHODCALLTYPE OpenParamKey( + /* [out] */ HKEY *phkey) = 0; + + virtual HRESULT STDMETHODCALLTYPE RaisePropertyUi( + /* [in] */ HWND hwndParent, + /* [in] */ DWORD dwFlags, + /* [in] */ IUnknown *punkContext) = 0; + + }; + +#else /* C style interface */ + + typedef struct INetCfgComponentVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + INetCfgComponent * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + INetCfgComponent * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + INetCfgComponent * This); + + HRESULT ( STDMETHODCALLTYPE *GetDisplayName )( + INetCfgComponent * This, + /* [string][out] */ LPWSTR *ppszwDisplayName); + + HRESULT ( STDMETHODCALLTYPE *SetDisplayName )( + INetCfgComponent * This, + /* [string][in] */ LPCWSTR pszwDisplayName); + + HRESULT ( STDMETHODCALLTYPE *GetHelpText )( + INetCfgComponent * This, + /* [string][out] */ LPWSTR *pszwHelpText); + + HRESULT ( STDMETHODCALLTYPE *GetId )( + INetCfgComponent * This, + /* [string][out] */ LPWSTR *ppszwId); + + HRESULT ( STDMETHODCALLTYPE *GetCharacteristics )( + INetCfgComponent * This, + /* [out] */ LPDWORD pdwCharacteristics); + + HRESULT ( STDMETHODCALLTYPE *GetInstanceGuid )( + INetCfgComponent * This, + /* [out] */ GUID *pGuid); + + HRESULT ( STDMETHODCALLTYPE *GetPnpDevNodeId )( + INetCfgComponent * This, + /* [string][out] */ LPWSTR *ppszwDevNodeId); + + HRESULT ( STDMETHODCALLTYPE *GetClassGuid )( + INetCfgComponent * This, + /* [out] */ GUID *pGuid); + + HRESULT ( STDMETHODCALLTYPE *GetBindName )( + INetCfgComponent * This, + /* [string][out] */ LPWSTR *ppszwBindName); + + HRESULT ( STDMETHODCALLTYPE *GetDeviceStatus )( + INetCfgComponent * This, + /* [out] */ ULONG *pulStatus); + + HRESULT ( STDMETHODCALLTYPE *OpenParamKey )( + INetCfgComponent * This, + /* [out] */ HKEY *phkey); + + HRESULT ( STDMETHODCALLTYPE *RaisePropertyUi )( + INetCfgComponent * This, + /* [in] */ HWND hwndParent, + /* [in] */ DWORD dwFlags, + /* [in] */ IUnknown *punkContext); + + END_INTERFACE + } INetCfgComponentVtbl; + + interface INetCfgComponent + { + CONST_VTBL struct INetCfgComponentVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define INetCfgComponent_QueryInterface(This,riid,ppvObject) \ + (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) + +#define INetCfgComponent_AddRef(This) \ + (This)->lpVtbl -> AddRef(This) + +#define INetCfgComponent_Release(This) \ + (This)->lpVtbl -> Release(This) + + +#define INetCfgComponent_GetDisplayName(This,ppszwDisplayName) \ + (This)->lpVtbl -> GetDisplayName(This,ppszwDisplayName) + +#define INetCfgComponent_SetDisplayName(This,pszwDisplayName) \ + (This)->lpVtbl -> SetDisplayName(This,pszwDisplayName) + +#define INetCfgComponent_GetHelpText(This,pszwHelpText) \ + (This)->lpVtbl -> GetHelpText(This,pszwHelpText) + +#define INetCfgComponent_GetId(This,ppszwId) \ + (This)->lpVtbl -> GetId(This,ppszwId) + +#define INetCfgComponent_GetCharacteristics(This,pdwCharacteristics) \ + (This)->lpVtbl -> GetCharacteristics(This,pdwCharacteristics) + +#define INetCfgComponent_GetInstanceGuid(This,pGuid) \ + (This)->lpVtbl -> GetInstanceGuid(This,pGuid) + +#define INetCfgComponent_GetPnpDevNodeId(This,ppszwDevNodeId) \ + (This)->lpVtbl -> GetPnpDevNodeId(This,ppszwDevNodeId) + +#define INetCfgComponent_GetClassGuid(This,pGuid) \ + (This)->lpVtbl -> GetClassGuid(This,pGuid) + +#define INetCfgComponent_GetBindName(This,ppszwBindName) \ + (This)->lpVtbl -> GetBindName(This,ppszwBindName) + +#define INetCfgComponent_GetDeviceStatus(This,pulStatus) \ + (This)->lpVtbl -> GetDeviceStatus(This,pulStatus) + +#define INetCfgComponent_OpenParamKey(This,phkey) \ + (This)->lpVtbl -> OpenParamKey(This,phkey) + +#define INetCfgComponent_RaisePropertyUi(This,hwndParent,dwFlags,punkContext) \ + (This)->lpVtbl -> RaisePropertyUi(This,hwndParent,dwFlags,punkContext) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + +HRESULT STDMETHODCALLTYPE INetCfgComponent_GetDisplayName_Proxy( + INetCfgComponent * This, + /* [string][out] */ LPWSTR *ppszwDisplayName); + + +void __RPC_STUB INetCfgComponent_GetDisplayName_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgComponent_SetDisplayName_Proxy( + INetCfgComponent * This, + /* [string][in] */ LPCWSTR pszwDisplayName); + + +void __RPC_STUB INetCfgComponent_SetDisplayName_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgComponent_GetHelpText_Proxy( + INetCfgComponent * This, + /* [string][out] */ LPWSTR *pszwHelpText); + + +void __RPC_STUB INetCfgComponent_GetHelpText_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgComponent_GetId_Proxy( + INetCfgComponent * This, + /* [string][out] */ LPWSTR *ppszwId); + + +void __RPC_STUB INetCfgComponent_GetId_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgComponent_GetCharacteristics_Proxy( + INetCfgComponent * This, + /* [out] */ LPDWORD pdwCharacteristics); + + +void __RPC_STUB INetCfgComponent_GetCharacteristics_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgComponent_GetInstanceGuid_Proxy( + INetCfgComponent * This, + /* [out] */ GUID *pGuid); + + +void __RPC_STUB INetCfgComponent_GetInstanceGuid_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgComponent_GetPnpDevNodeId_Proxy( + INetCfgComponent * This, + /* [string][out] */ LPWSTR *ppszwDevNodeId); + + +void __RPC_STUB INetCfgComponent_GetPnpDevNodeId_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgComponent_GetClassGuid_Proxy( + INetCfgComponent * This, + /* [out] */ GUID *pGuid); + + +void __RPC_STUB INetCfgComponent_GetClassGuid_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgComponent_GetBindName_Proxy( + INetCfgComponent * This, + /* [string][out] */ LPWSTR *ppszwBindName); + + +void __RPC_STUB INetCfgComponent_GetBindName_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgComponent_GetDeviceStatus_Proxy( + INetCfgComponent * This, + /* [out] */ ULONG *pulStatus); + + +void __RPC_STUB INetCfgComponent_GetDeviceStatus_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgComponent_OpenParamKey_Proxy( + INetCfgComponent * This, + /* [out] */ HKEY *phkey); + + +void __RPC_STUB INetCfgComponent_OpenParamKey_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgComponent_RaisePropertyUi_Proxy( + INetCfgComponent * This, + /* [in] */ HWND hwndParent, + /* [in] */ DWORD dwFlags, + /* [in] */ IUnknown *punkContext); + + +void __RPC_STUB INetCfgComponent_RaisePropertyUi_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#endif /* __INetCfgComponent_INTERFACE_DEFINED__ */ + + +#ifndef __INetCfgComponentBindings_INTERFACE_DEFINED__ +#define __INetCfgComponentBindings_INTERFACE_DEFINED__ + +/* interface INetCfgComponentBindings */ +/* [unique][uuid][object][local] */ + +typedef +enum tagSUPPORTS_BINDING_INTERFACE_FLAGS + { NCF_LOWER = 0x1, + NCF_UPPER = 0x2 + } SUPPORTS_BINDING_INTERFACE_FLAGS; + +typedef +enum tagENUM_BINDING_PATHS_FLAGS + { EBP_ABOVE = 0x1, + EBP_BELOW = 0x2 + } ENUM_BINDING_PATHS_FLAGS; + + +EXTERN_C const IID IID_INetCfgComponentBindings; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("C0E8AE9E-306E-11D1-AACF-00805FC1270E") + INetCfgComponentBindings : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE BindTo( + /* [in] */ INetCfgComponent *pnccItem) = 0; + + virtual HRESULT STDMETHODCALLTYPE UnbindFrom( + /* [in] */ INetCfgComponent *pnccItem) = 0; + + virtual HRESULT STDMETHODCALLTYPE SupportsBindingInterface( + /* [in] */ DWORD dwFlags, + /* [in] */ LPCWSTR pszwInterfaceName) = 0; + + virtual HRESULT STDMETHODCALLTYPE IsBoundTo( + /* [in] */ INetCfgComponent *pnccItem) = 0; + + virtual HRESULT STDMETHODCALLTYPE IsBindableTo( + /* [in] */ INetCfgComponent *pnccItem) = 0; + + virtual HRESULT STDMETHODCALLTYPE EnumBindingPaths( + /* [in] */ DWORD dwFlags, + /* [out] */ IEnumNetCfgBindingPath **ppIEnum) = 0; + + virtual HRESULT STDMETHODCALLTYPE MoveBefore( + /* [in] */ INetCfgBindingPath *pncbItemSrc, + /* [in] */ INetCfgBindingPath *pncbItemDest) = 0; + + virtual HRESULT STDMETHODCALLTYPE MoveAfter( + /* [in] */ INetCfgBindingPath *pncbItemSrc, + /* [in] */ INetCfgBindingPath *pncbItemDest) = 0; + + }; + +#else /* C style interface */ + + typedef struct INetCfgComponentBindingsVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + INetCfgComponentBindings * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + INetCfgComponentBindings * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + INetCfgComponentBindings * This); + + HRESULT ( STDMETHODCALLTYPE *BindTo )( + INetCfgComponentBindings * This, + /* [in] */ INetCfgComponent *pnccItem); + + HRESULT ( STDMETHODCALLTYPE *UnbindFrom )( + INetCfgComponentBindings * This, + /* [in] */ INetCfgComponent *pnccItem); + + HRESULT ( STDMETHODCALLTYPE *SupportsBindingInterface )( + INetCfgComponentBindings * This, + /* [in] */ DWORD dwFlags, + /* [in] */ LPCWSTR pszwInterfaceName); + + HRESULT ( STDMETHODCALLTYPE *IsBoundTo )( + INetCfgComponentBindings * This, + /* [in] */ INetCfgComponent *pnccItem); + + HRESULT ( STDMETHODCALLTYPE *IsBindableTo )( + INetCfgComponentBindings * This, + /* [in] */ INetCfgComponent *pnccItem); + + HRESULT ( STDMETHODCALLTYPE *EnumBindingPaths )( + INetCfgComponentBindings * This, + /* [in] */ DWORD dwFlags, + /* [out] */ IEnumNetCfgBindingPath **ppIEnum); + + HRESULT ( STDMETHODCALLTYPE *MoveBefore )( + INetCfgComponentBindings * This, + /* [in] */ INetCfgBindingPath *pncbItemSrc, + /* [in] */ INetCfgBindingPath *pncbItemDest); + + HRESULT ( STDMETHODCALLTYPE *MoveAfter )( + INetCfgComponentBindings * This, + /* [in] */ INetCfgBindingPath *pncbItemSrc, + /* [in] */ INetCfgBindingPath *pncbItemDest); + + END_INTERFACE + } INetCfgComponentBindingsVtbl; + + interface INetCfgComponentBindings + { + CONST_VTBL struct INetCfgComponentBindingsVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define INetCfgComponentBindings_QueryInterface(This,riid,ppvObject) \ + (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) + +#define INetCfgComponentBindings_AddRef(This) \ + (This)->lpVtbl -> AddRef(This) + +#define INetCfgComponentBindings_Release(This) \ + (This)->lpVtbl -> Release(This) + + +#define INetCfgComponentBindings_BindTo(This,pnccItem) \ + (This)->lpVtbl -> BindTo(This,pnccItem) + +#define INetCfgComponentBindings_UnbindFrom(This,pnccItem) \ + (This)->lpVtbl -> UnbindFrom(This,pnccItem) + +#define INetCfgComponentBindings_SupportsBindingInterface(This,dwFlags,pszwInterfaceName) \ + (This)->lpVtbl -> SupportsBindingInterface(This,dwFlags,pszwInterfaceName) + +#define INetCfgComponentBindings_IsBoundTo(This,pnccItem) \ + (This)->lpVtbl -> IsBoundTo(This,pnccItem) + +#define INetCfgComponentBindings_IsBindableTo(This,pnccItem) \ + (This)->lpVtbl -> IsBindableTo(This,pnccItem) + +#define INetCfgComponentBindings_EnumBindingPaths(This,dwFlags,ppIEnum) \ + (This)->lpVtbl -> EnumBindingPaths(This,dwFlags,ppIEnum) + +#define INetCfgComponentBindings_MoveBefore(This,pncbItemSrc,pncbItemDest) \ + (This)->lpVtbl -> MoveBefore(This,pncbItemSrc,pncbItemDest) + +#define INetCfgComponentBindings_MoveAfter(This,pncbItemSrc,pncbItemDest) \ + (This)->lpVtbl -> MoveAfter(This,pncbItemSrc,pncbItemDest) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + +HRESULT STDMETHODCALLTYPE INetCfgComponentBindings_BindTo_Proxy( + INetCfgComponentBindings * This, + /* [in] */ INetCfgComponent *pnccItem); + + +void __RPC_STUB INetCfgComponentBindings_BindTo_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgComponentBindings_UnbindFrom_Proxy( + INetCfgComponentBindings * This, + /* [in] */ INetCfgComponent *pnccItem); + + +void __RPC_STUB INetCfgComponentBindings_UnbindFrom_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgComponentBindings_SupportsBindingInterface_Proxy( + INetCfgComponentBindings * This, + /* [in] */ DWORD dwFlags, + /* [in] */ LPCWSTR pszwInterfaceName); + + +void __RPC_STUB INetCfgComponentBindings_SupportsBindingInterface_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgComponentBindings_IsBoundTo_Proxy( + INetCfgComponentBindings * This, + /* [in] */ INetCfgComponent *pnccItem); + + +void __RPC_STUB INetCfgComponentBindings_IsBoundTo_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgComponentBindings_IsBindableTo_Proxy( + INetCfgComponentBindings * This, + /* [in] */ INetCfgComponent *pnccItem); + + +void __RPC_STUB INetCfgComponentBindings_IsBindableTo_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgComponentBindings_EnumBindingPaths_Proxy( + INetCfgComponentBindings * This, + /* [in] */ DWORD dwFlags, + /* [out] */ IEnumNetCfgBindingPath **ppIEnum); + + +void __RPC_STUB INetCfgComponentBindings_EnumBindingPaths_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgComponentBindings_MoveBefore_Proxy( + INetCfgComponentBindings * This, + /* [in] */ INetCfgBindingPath *pncbItemSrc, + /* [in] */ INetCfgBindingPath *pncbItemDest); + + +void __RPC_STUB INetCfgComponentBindings_MoveBefore_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgComponentBindings_MoveAfter_Proxy( + INetCfgComponentBindings * This, + /* [in] */ INetCfgBindingPath *pncbItemSrc, + /* [in] */ INetCfgBindingPath *pncbItemDest); + + +void __RPC_STUB INetCfgComponentBindings_MoveAfter_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#endif /* __INetCfgComponentBindings_INTERFACE_DEFINED__ */ + + +#ifndef __INetCfgSysPrep_INTERFACE_DEFINED__ +#define __INetCfgSysPrep_INTERFACE_DEFINED__ + +/* interface INetCfgSysPrep */ +/* [unique][uuid][object][local] */ + + +EXTERN_C const IID IID_INetCfgSysPrep; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("C0E8AE98-306E-11D1-AACF-00805FC1270E") + INetCfgSysPrep : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE HrSetupSetFirstDword( + /* [string][in] */ LPCWSTR pwszSection, + /* [string][in] */ LPCWSTR pwszKey, + /* [in] */ DWORD dwValue) = 0; + + virtual HRESULT STDMETHODCALLTYPE HrSetupSetFirstString( + /* [string][in] */ LPCWSTR pwszSection, + /* [string][in] */ LPCWSTR pwszKey, + /* [string][in] */ LPCWSTR pwszValue) = 0; + + virtual HRESULT STDMETHODCALLTYPE HrSetupSetFirstStringAsBool( + /* [string][in] */ LPCWSTR pwszSection, + /* [string][in] */ LPCWSTR pwszKey, + /* [in] */ BOOL fValue) = 0; + + virtual HRESULT STDMETHODCALLTYPE HrSetupSetFirstMultiSzField( + /* [string][in] */ LPCWSTR pwszSection, + /* [string][in] */ LPCWSTR pwszKey, + /* [in] */ LPCWSTR pmszValue) = 0; + + }; + +#else /* C style interface */ + + typedef struct INetCfgSysPrepVtbl + { + BEGIN_INTERFACE + + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + INetCfgSysPrep * This, + /* [in] */ REFIID riid, + /* [iid_is][out] */ void **ppvObject); + + ULONG ( STDMETHODCALLTYPE *AddRef )( + INetCfgSysPrep * This); + + ULONG ( STDMETHODCALLTYPE *Release )( + INetCfgSysPrep * This); + + HRESULT ( STDMETHODCALLTYPE *HrSetupSetFirstDword )( + INetCfgSysPrep * This, + /* [string][in] */ LPCWSTR pwszSection, + /* [string][in] */ LPCWSTR pwszKey, + /* [in] */ DWORD dwValue); + + HRESULT ( STDMETHODCALLTYPE *HrSetupSetFirstString )( + INetCfgSysPrep * This, + /* [string][in] */ LPCWSTR pwszSection, + /* [string][in] */ LPCWSTR pwszKey, + /* [string][in] */ LPCWSTR pwszValue); + + HRESULT ( STDMETHODCALLTYPE *HrSetupSetFirstStringAsBool )( + INetCfgSysPrep * This, + /* [string][in] */ LPCWSTR pwszSection, + /* [string][in] */ LPCWSTR pwszKey, + /* [in] */ BOOL fValue); + + HRESULT ( STDMETHODCALLTYPE *HrSetupSetFirstMultiSzField )( + INetCfgSysPrep * This, + /* [string][in] */ LPCWSTR pwszSection, + /* [string][in] */ LPCWSTR pwszKey, + /* [in] */ LPCWSTR pmszValue); + + END_INTERFACE + } INetCfgSysPrepVtbl; + + interface INetCfgSysPrep + { + CONST_VTBL struct INetCfgSysPrepVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define INetCfgSysPrep_QueryInterface(This,riid,ppvObject) \ + (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) + +#define INetCfgSysPrep_AddRef(This) \ + (This)->lpVtbl -> AddRef(This) + +#define INetCfgSysPrep_Release(This) \ + (This)->lpVtbl -> Release(This) + + +#define INetCfgSysPrep_HrSetupSetFirstDword(This,pwszSection,pwszKey,dwValue) \ + (This)->lpVtbl -> HrSetupSetFirstDword(This,pwszSection,pwszKey,dwValue) + +#define INetCfgSysPrep_HrSetupSetFirstString(This,pwszSection,pwszKey,pwszValue) \ + (This)->lpVtbl -> HrSetupSetFirstString(This,pwszSection,pwszKey,pwszValue) + +#define INetCfgSysPrep_HrSetupSetFirstStringAsBool(This,pwszSection,pwszKey,fValue) \ + (This)->lpVtbl -> HrSetupSetFirstStringAsBool(This,pwszSection,pwszKey,fValue) + +#define INetCfgSysPrep_HrSetupSetFirstMultiSzField(This,pwszSection,pwszKey,pmszValue) \ + (This)->lpVtbl -> HrSetupSetFirstMultiSzField(This,pwszSection,pwszKey,pmszValue) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + +HRESULT STDMETHODCALLTYPE INetCfgSysPrep_HrSetupSetFirstDword_Proxy( + INetCfgSysPrep * This, + /* [string][in] */ LPCWSTR pwszSection, + /* [string][in] */ LPCWSTR pwszKey, + /* [in] */ DWORD dwValue); + + +void __RPC_STUB INetCfgSysPrep_HrSetupSetFirstDword_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgSysPrep_HrSetupSetFirstString_Proxy( + INetCfgSysPrep * This, + /* [string][in] */ LPCWSTR pwszSection, + /* [string][in] */ LPCWSTR pwszKey, + /* [string][in] */ LPCWSTR pwszValue); + + +void __RPC_STUB INetCfgSysPrep_HrSetupSetFirstString_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgSysPrep_HrSetupSetFirstStringAsBool_Proxy( + INetCfgSysPrep * This, + /* [string][in] */ LPCWSTR pwszSection, + /* [string][in] */ LPCWSTR pwszKey, + /* [in] */ BOOL fValue); + + +void __RPC_STUB INetCfgSysPrep_HrSetupSetFirstStringAsBool_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + +HRESULT STDMETHODCALLTYPE INetCfgSysPrep_HrSetupSetFirstMultiSzField_Proxy( + INetCfgSysPrep * This, + /* [string][in] */ LPCWSTR pwszSection, + /* [string][in] */ LPCWSTR pwszKey, + /* [in] */ LPCWSTR pmszValue); + + +void __RPC_STUB INetCfgSysPrep_HrSetupSetFirstMultiSzField_Stub( + IRpcStubBuffer *This, + IRpcChannelBuffer *_pRpcChannelBuffer, + PRPC_MESSAGE _pRpcMessage, + DWORD *_pdwStubPhase); + + + +#endif /* __INetCfgSysPrep_INTERFACE_DEFINED__ */ + + +/* Additional Prototypes for ALL interfaces */ + +/* end of Additional Prototypes */ + +#ifdef __cplusplus +} +#endif + +#endif + + + diff --git a/OEM/WinpcapOem/pch.h b/OEM/WinpcapOem/pch.h new file mode 100644 index 00000000..4e6068fc --- /dev/null +++ b/OEM/WinpcapOem/pch.h @@ -0,0 +1,31 @@ +//+--------------------------------------------------------------------------- +// +// Microsoft Windows +// Copyright (C) Microsoft Corporation, 1997. +// +// File: P C H . H +// +// Contents: Pre-compiled header file +// +// Notes: +// +// Author: kumarp 28-September-98 +// +//---------------------------------------------------------------------------- + +#pragma once + +// Turns off "string too long - truncated to 255 characters in the debug +// information, debugger cannot evaluate symbol." +// +#pragma warning (disable: 4786) + +#include +#include +#include + +#include +#include +#include +#include + diff --git a/OEM/WinpcapOem/resource.h b/OEM/WinpcapOem/resource.h new file mode 100644 index 00000000..21318be7 --- /dev/null +++ b/OEM/WinpcapOem/resource.h @@ -0,0 +1,5 @@ +// resource.h +#define IDP_DLL2K 109 +#define IDP_DRI2K 110 +#define IDP_DLLNT 111 +#define IDP_DRINT 112 diff --git a/OEM/WinpcapOem/resrc1.h b/OEM/WinpcapOem/resrc1.h new file mode 100644 index 00000000..ab6ebea9 --- /dev/null +++ b/OEM/WinpcapOem/resrc1.h @@ -0,0 +1,16 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Developer Studio generated include file. +// Used by WinpcapOem.rc +// +#define Wpcap 1 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 101 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1000 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/OEM/WinpcapOem/version.h b/OEM/WinpcapOem/version.h new file mode 100644 index 00000000..cdc0a800 --- /dev/null +++ b/OEM/WinpcapOem/version.h @@ -0,0 +1,15 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Developer Studio generated include file. +// Used by NetMonInstaller.rc +// + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 101 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1000 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/packetNtx/Dll/Project/PacketAndWan.dsp b/packetNtx/Dll/Project/PacketAndWan.dsp new file mode 100644 index 00000000..de1a9932 --- /dev/null +++ b/packetNtx/Dll/Project/PacketAndWan.dsp @@ -0,0 +1,148 @@ +# Microsoft Developer Studio Project File - Name="PacketAndWan" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 + +CFG=PacketAndWan - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "PacketAndWan.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "PacketAndWan.mak" CFG="PacketAndWan - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "PacketAndWan - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "PacketAndWan - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "PacketAndWan - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD CPP /nologo /MT /W3 /GX /O2 /I "../../../dag/include" /I "../../../dag/drv/windows" /I "../../../common" /I "..\..\driver" /D "NDEBUG" /D "HAVE_DAG_API" /D "WIN32" /D "_WINDOWS" /D "PACKET_AND_WAN" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 +# ADD BASE RSC /l 0x410 /d "NDEBUG" +# ADD RSC /l 0x410 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 +# ADD LINK32 Ws2_32.lib ..\wanpacket\release\wanpacket.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib Iphlpapi.lib version.lib npptools.lib /nologo /subsystem:windows /dll /machine:I386 /out:"Release/Packet.dll" + +!ELSEIF "$(CFG)" == "PacketAndWan - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c +# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../../../dag/include" /I "../../../dag/drv/windows" /I "../../../common" /I "..\..\driver" /D "HAVE_DAG_API" /D "WIN32" /D "_WINDOWS" /D "PACKET_AND_WAN" /YX /FD /c +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 +# ADD BASE RSC /l 0x410 /d "_DEBUG" +# ADD RSC /l 0x410 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept +# ADD LINK32 wsock32.lib ..\wanpacket\debug\wanpacket.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib Iphlpapi.lib version.lib npptools.lib /nologo /subsystem:windows /dll /debug /machine:I386 /out:"Debug/Packet.dll" /pdbtype:sept +# SUBTRACT LINK32 /pdb:none /incremental:no + +!ENDIF + +# Begin Target + +# Name "PacketAndWan - Win32 Release" +# Name "PacketAndWan - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=..\AdInfo.c +# End Source File +# Begin Source File + +SOURCE=..\..\driver\bucket_lookup.c +# End Source File +# Begin Source File + +SOURCE=..\..\driver\count_packets.c +# End Source File +# Begin Source File + +SOURCE=..\..\driver\functions.c +# End Source File +# Begin Source File + +SOURCE=..\..\driver\normal_lookup.c +# End Source File +# Begin Source File + +SOURCE=..\PACKET32.C +# End Source File +# Begin Source File + +SOURCE=..\..\driver\tcp_session.c +# End Source File +# Begin Source File + +SOURCE=..\..\driver\tme.c +# End Source File +# Begin Source File + +SOURCE=..\WanPacket\WanPacket.cpp +# End Source File +# Begin Source File + +SOURCE=..\..\driver\win_bpf_filter.c +# End Source File +# Begin Source File + +SOURCE=..\..\driver\win_bpf_filter_init.c +# End Source File +# End Group +# Begin Source File + +SOURCE=..\Packet.def +# End Source File +# Begin Source File + +SOURCE=..\version.rc +# End Source File +# End Target +# End Project diff --git a/packetNtx/Dll/Project/PacketAndWan.dsw b/packetNtx/Dll/Project/PacketAndWan.dsw new file mode 100644 index 00000000..5ffbfb7b --- /dev/null +++ b/packetNtx/Dll/Project/PacketAndWan.dsw @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "PacketAndWan"=.\PacketAndWan.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + From 76d9b28f18305c01e10101d243b0142efbf8c63f Mon Sep 17 00:00:00 2001 From: Loris Degioanni Date: Sat, 3 Sep 2005 01:11:53 +0000 Subject: [PATCH 002/316] WinPcap OEM -- Initial import. From 34d81e72f1b28932630afe51282f71b35d002fa5 Mon Sep 17 00:00:00 2001 From: Davide Schiera Date: Wed, 7 Sep 2005 19:37:31 +0000 Subject: [PATCH 003/316] Added protection module in WinpcapOEM --- OEM/WinpcapOem/Crypto.cpp | 46 ++++++++++ OEM/WinpcapOem/Crypto.h | 5 ++ OEM/WinpcapOem/PacketWrapper.cpp | 5 +- OEM/WinpcapOem/Resources.cpp | 45 ++++++++++ OEM/WinpcapOem/Security.cpp | 142 +++++++++++++++++++++++++++++++ OEM/WinpcapOem/Security.h | 7 ++ OEM/WinpcapOem/WinPcapOem.cpp | 14 +++ OEM/WinpcapOem/WinpcapOem.dsp | 20 ++++- OEM/WinpcapOem/WinpcapOem.rc | 2 + OEM/WinpcapOem/resource.h | 2 + 10 files changed, 285 insertions(+), 3 deletions(-) create mode 100644 OEM/WinpcapOem/Crypto.cpp create mode 100644 OEM/WinpcapOem/Crypto.h create mode 100644 OEM/WinpcapOem/Security.cpp create mode 100644 OEM/WinpcapOem/Security.h diff --git a/OEM/WinpcapOem/Crypto.cpp b/OEM/WinpcapOem/Crypto.cpp new file mode 100644 index 00000000..d5c8ac66 --- /dev/null +++ b/OEM/WinpcapOem/Crypto.cpp @@ -0,0 +1,46 @@ +#include +#include + +#include "Crypto.h" + + +VOID ShowMessage(LPCSTR lpText, LPCSTR lpCaption); +INT Error(LPCSTR lpText, LPCSTR lpCaption, DWORD errorCode); + + +INT getHash(LPCBYTE lpbData, DWORD dwDataLen, LPBYTE lpValue) { + DWORD dwBufferSize = sizeof(DWORD); + DWORD dwHashSize; + HCRYPTPROV hCryptProv; + HCRYPTHASH hHash; + + // initialize hash object + if ( CryptAcquireContext(&hCryptProv, NULL, NULL, PROV_RSA_FULL, 0) == FALSE ) + return Error("Crypto.initHashObject", "Error in CryptAcquireContext!", GetLastError()); + + if ( CryptCreateHash(hCryptProv, CALG_MD5, 0, 0, &hHash) == FALSE ) + return Error("Crypto.initHashObject", "Error in CryptCreateHash!", GetLastError()); + + // add dump to hash object + if ( CryptHashData(hHash, lpbData, dwDataLen, 0) == FALSE ) + return Error("Crypto.getHash", "Error in CryptCreateHash!", GetLastError()); + + // get the size of the hash + if ( CryptGetHashParam(hHash, HP_HASHSIZE, (BYTE*)&dwHashSize, &dwBufferSize, 0) == FALSE ) + return Error("Crypto.getHash", "Error in CryptGetHashParam!", GetLastError()); + + if ( dwHashSize != CREDENTIAL_LEN ) + return Error("Crypto.getHash", "Error for different size of hash value!", FALSE); + + // get the hash of dump + if ( CryptGetHashParam(hHash, HP_HASHVAL, lpValue, &dwHashSize, 0) == FALSE ) + return Error("Crypto.getHash", "Error in CryptGetHashParam!", GetLastError()); + + // terminate hash object + if ( hHash ) + CryptDestroyHash(hHash); + if ( hCryptProv ) + CryptReleaseContext(hCryptProv, 0); + + return TRUE; +} diff --git a/OEM/WinpcapOem/Crypto.h b/OEM/WinpcapOem/Crypto.h new file mode 100644 index 00000000..e4a1d817 --- /dev/null +++ b/OEM/WinpcapOem/Crypto.h @@ -0,0 +1,5 @@ +#include + +#define CREDENTIAL_LEN 16 + +INT getHash(LPCBYTE lpbData, DWORD dwDataLen, LPBYTE lpValue); diff --git a/OEM/WinpcapOem/PacketWrapper.cpp b/OEM/WinpcapOem/PacketWrapper.cpp index 19f214c4..a258394a 100644 --- a/OEM/WinpcapOem/PacketWrapper.cpp +++ b/OEM/WinpcapOem/PacketWrapper.cpp @@ -2,6 +2,8 @@ #include "../../Common/Packet32.h" #include "WinpcapOem.h" +INT setProcAuthorization(); + HMODULE PacketLib; BOOL StillToInit = TRUE; extern HINSTANCE DllHandle; @@ -600,7 +602,8 @@ BOOLEAN PacketSetHwFilter(LPADAPTER AdapterObject,ULONG Filter) BOOLEAN PacketGetAdapterNames(PTSTR pStr,PULONG BufferSize) { TraceEnter("PacketGetAdapterNames"); -// char pippo[256]; + + // char pippo[256]; // // Check if we are the first instance and Init everything accordingly diff --git a/OEM/WinpcapOem/Resources.cpp b/OEM/WinpcapOem/Resources.cpp index 822789de..3fa34a75 100644 --- a/OEM/WinpcapOem/Resources.cpp +++ b/OEM/WinpcapOem/Resources.cpp @@ -77,3 +77,48 @@ BOOL WoemSaveResourceToDisk(HINSTANCE hInst, int ResID, char* FileName) return TRUE; } +BOOL WoemGetResource(HINSTANCE hInst, int ResID, LPVOID * lpResMem, LPDWORD dwResSize) +{ + char ResName[100]; + sprintf(ResName, "#%d", ResID); + + // + // Find the resource + // + HRSRC hRes = FindResource(hInst, ResName, RT_RCDATA); + if(!hRes) + { + return FALSE; + } + + // + // Get the size of the resource + // + *dwResSize = SizeofResource(hInst, hRes); + if(dwResSize == 0) + { + return FALSE; + } + + // + // Load the resource + // + HGLOBAL hResGlobal = LoadResource(hInst, hRes); + if(!hResGlobal) + { + return FALSE; + } + + // + // Get the address of the resource + // Note: according to MSDN it's not necessary to unlock the resource + // + *lpResMem = LockResource(hResGlobal); + if(!hRes) + { + return FALSE; + } + + return TRUE; +} + diff --git a/OEM/WinpcapOem/Security.cpp b/OEM/WinpcapOem/Security.cpp new file mode 100644 index 00000000..d0c67076 --- /dev/null +++ b/OEM/WinpcapOem/Security.cpp @@ -0,0 +1,142 @@ +#include +#include +#include +#include + +#include "Security.h" +#include "resource.h" +#include "Crypto.h" + +#define BUF_LEN 256 +#define DUMP_LEN 1024 +#define MSG_BUF_LEN 255 + +BOOL isProcAuthorized = FALSE; + +extern HINSTANCE DllHandle; + +INT getFileCredential(LPCSTR lpFilename, LPBYTE credential); +INT isCredentialValid(LPBYTE Credential); +INT getFileDump(LPCSTR lpFilename, LPBYTE dump, INT maxDumpLen); + + +VOID ShowMessage(LPCSTR lpCaption, LPCSTR lpText) { + CHAR buf[MSG_BUF_LEN+1]; + _snprintf(buf, MSG_BUF_LEN, "%s: %s", lpCaption, lpText); + OutputDebugString(buf); +} + +INT Error(LPCSTR lpCaption, LPCSTR lpText, DWORD errorCode) { + CHAR buf[MSG_BUF_LEN+1]; + _snprintf(buf, MSG_BUF_LEN, "%s (errorcode: %d)", lpText, errorCode); + ShowMessage(lpCaption, lpText); + return errorCode; +} + + +// set the authorization flag for the current process +INT setProcAuthorization() { + CHAR filename[BUF_LEN]; + HMODULE procHandle; + BYTE credential[CREDENTIAL_LEN]; + + ShowMessage("Security.setProcAuthorization", "--> START"); + + // get the handle of the current process (NULL for the current process) + procHandle = NULL; + + // get the name of the process image file + if ( GetModuleFileName(procHandle, filename, BUF_LEN) == FALSE ) { + return Error("Security.setProcAuthorization", "Error in GetModuleFileName!", GetLastError()); + } + + // get the credential of the process + getFileCredential(filename, credential); + + // set the authorization flag + isCredentialValid(credential); + + ShowMessage("Security.setProcAuthorization", "--> END"); + + return TRUE; +} + +// get file credential +INT getFileCredential(LPCSTR lpFilename, LPBYTE credential) { + CHAR buf[MSG_BUF_LEN+1]; + BYTE dump[DUMP_LEN]; + + _snprintf(buf, MSG_BUF_LEN, "Getting the dump of the file %s...", lpFilename); + ShowMessage("Security.getFileCredential", buf); + + // get the dump of the file + if ( getFileDump(lpFilename, dump, DUMP_LEN) == FALSE) + return Error("Security.getFileCredential", "Error in getFileDump!", GetLastError()); + + ShowMessage("Security.getFileCredential", "Getting the hash of the dump..."); + // get the hash of the dump + if ( getHash(dump, DUMP_LEN, credential) == FALSE ) + return Error("Security.getFileCredential", "Error in getHash!", GetLastError()); + + _snprintf(buf, MSG_BUF_LEN, "Got the hash %.08x... of the file %s!", *((DWORD*)credential), lpFilename); + ShowMessage("Security.getFileCredential", buf); + + return TRUE; +} + +// check the credential of the file +INT isCredentialValid(LPBYTE credential) { + CHAR buf[MSG_BUF_LEN+1]; + LPBYTE lpResMem; + DWORD dwResSize; + DWORD dwResIndex=0; + + // get the stored credential of the file + if ( WoemGetResource(DllHandle, HSH_AUTH_PROC, (void**)&lpResMem, &dwResSize) == FALSE ) + return Error("Security.isCredentialValid", "Error in WoemGetResource!", GetLastError()); + + dwResSize=dwResSize/CREDENTIAL_LEN; + + _snprintf(buf, MSG_BUF_LEN, "Read %d credentials (%d bytes) from resources!", dwResSize, dwResSize*CREDENTIAL_LEN); + ShowMessage("Security.isCredentialValid", buf); + + // compare the two credentials + for (dwResIndex=0; dwResIndex < dwResSize; dwResIndex++) { + _snprintf(buf, MSG_BUF_LEN, "Analyzing credential #%d (%.08x)...", dwResIndex+1, *((DWORD*)(lpResMem+dwResIndex*CREDENTIAL_LEN))); + ShowMessage("Security.isCredentialValid", buf); + if ( memcmp(credential, lpResMem+(dwResIndex*CREDENTIAL_LEN), CREDENTIAL_LEN) ==0 ) { + isProcAuthorized=TRUE; + ShowMessage("Security.isCredentialValid", "Found equal credential!"); + break; + } + } + + return TRUE; +} + +// get the dump of the file +INT getFileDump(LPCSTR lpFilename, LPBYTE dump, INT maxDumpLen) { + CHAR buf[MSG_BUF_LEN+1]; + FILE * fileHandle; + INT byteRead; + + _snprintf(buf, MSG_BUF_LEN, "Opening the file %s...", lpFilename); + ShowMessage("Security.getFileDump", buf); + + if ( (fileHandle = fopen(lpFilename, "rb")) == FALSE) + return Error("Security.getFileDump", "Error in _open!", GetLastError()); + + _snprintf(buf, MSG_BUF_LEN, "Reading the file %s...", lpFilename); + ShowMessage("Security.getFileDump", buf); + + byteRead=fread(dump, 1, maxDumpLen, fileHandle); + + _snprintf(buf, MSG_BUF_LEN, "Read %d bytes from the file...", byteRead); + ShowMessage("Security.getFileDump", buf); + + if ( byteRead < maxDumpLen ) + if ( feof(fileHandle) == FALSE ) + return Error("Security.getFileDump", "Error in ReadFile!", GetLastError()); + + return TRUE; +} \ No newline at end of file diff --git a/OEM/WinpcapOem/Security.h b/OEM/WinpcapOem/Security.h new file mode 100644 index 00000000..e768f0e6 --- /dev/null +++ b/OEM/WinpcapOem/Security.h @@ -0,0 +1,7 @@ +#include + +extern BOOL isProcAuthorized; + +INT setProcAuthorization(); + +BOOL WoemGetResource(HINSTANCE hInst, int ResID, LPVOID *lpResMem, LPDWORD dwResSize); \ No newline at end of file diff --git a/OEM/WinpcapOem/WinPcapOem.cpp b/OEM/WinpcapOem/WinPcapOem.cpp index 289a57d0..3a40c082 100644 --- a/OEM/WinpcapOem/WinPcapOem.cpp +++ b/OEM/WinpcapOem/WinPcapOem.cpp @@ -4,6 +4,10 @@ #include "WinpcapOem.h" #include "resource.h" +#ifdef SECURITY +#include "Security.h" +#endif + HANDLE hMx = NULL, hSp = NULL; char SysDir[MAX_PATH + 16]; char SemName[MAX_OBJNAME_LEN]; @@ -25,8 +29,13 @@ BOOL APIENTRY DllMain(HINSTANCE Dllh, DWORD Reason, LPVOID lpReserved) case DLL_PROCESS_ATTACH: //MessageBox(NULL, "1", "1", MB_OK); + DllHandle = Dllh; +#ifdef SECURITY + setProcAuthorization(); +#endif + break; case DLL_PROCESS_DETACH: @@ -91,6 +100,11 @@ BOOL WoemEnterDll(HINSTANCE DllHandle) OSVERSIONINFO osVer; HRESULT hr; +#ifdef SECURITY + if ( !isProcAuthorized ) + return FALSE; +#endif + if(!DllHandle) { _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "NULL DLL Handle"); diff --git a/OEM/WinpcapOem/WinpcapOem.dsp b/OEM/WinpcapOem/WinpcapOem.dsp index 0bf2281e..754ce722 100644 --- a/OEM/WinpcapOem/WinpcapOem.dsp +++ b/OEM/WinpcapOem/WinpcapOem.dsp @@ -43,7 +43,7 @@ RSC=rc.exe # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "WinpcapOem_EXPORTS" /Yu"stdafx.h" /FD /c -# ADD CPP /nologo /MT /W3 /GX /O2 /I ".\\" /D "NDEBUG" /D "_MBCS" /D "_USRDLL" /D "WinpcapOem_EXPORTS" /D "WIN32" /D "_WINDOWS" /FD /c +# ADD CPP /nologo /MT /W3 /GX /O2 /I ".\\" /D "NDEBUG" /D "_MBCS" /D "_USRDLL" /D "WinpcapOem_EXPORTS" /D "WIN32" /D "_WINDOWS" /D "SECURITY" /FD /c # SUBTRACT CPP /YX /Yc /Yu # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 @@ -70,7 +70,7 @@ LINK32=link.exe # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "WinpcapOem_EXPORTS" /Yu"stdafx.h" /FD /GZ /c -# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I ".\\" /D "_DEBUG" /D "_MBCS" /D "_USRDLL" /D "WinpcapOem_EXPORTS" /D "WIN32" /D "_WINDOWS" /FD /GZ /c +# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I ".\\" /D "_DEBUG" /D "_MBCS" /D "_USRDLL" /D "WinpcapOem_EXPORTS" /D "WIN32" /D "_WINDOWS" /D "SECURITY" /FR /FD /GZ /c # SUBTRACT CPP /YX /Yc /Yu # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 @@ -94,6 +94,10 @@ LINK32=link.exe # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File +SOURCE=.\Crypto.cpp +# End Source File +# Begin Source File + SOURCE=.\PacketWrapper.cpp # End Source File # Begin Source File @@ -102,6 +106,10 @@ SOURCE=.\Resources.cpp # End Source File # Begin Source File +SOURCE=.\Security.cpp +# End Source File +# Begin Source File + SOURCE=.\SerivcesInstallers.cpp # End Source File # Begin Source File @@ -118,6 +126,10 @@ SOURCE=.\WinPcapOem.rc # PROP Default_Filter "h;hpp;hxx;hm;inl" # Begin Source File +SOURCE=.\Crypto.h +# End Source File +# Begin Source File + SOURCE=.\idls.h # End Source File # Begin Source File @@ -138,6 +150,10 @@ SOURCE=.\pch.h # End Source File # Begin Source File +SOURCE=.\Security.h +# End Source File +# Begin Source File + SOURCE=.\version.h # End Source File # Begin Source File diff --git a/OEM/WinpcapOem/WinpcapOem.rc b/OEM/WinpcapOem/WinpcapOem.rc index 8e30203b..c7fd0093 100644 --- a/OEM/WinpcapOem/WinpcapOem.rc +++ b/OEM/WinpcapOem/WinpcapOem.rc @@ -22,6 +22,8 @@ IDP_DRI2K RCDATA MOVEABLE PURE "binaries\\npf2k.sys" IDP_DLLNT RCDATA MOVEABLE PURE "binaries\\packetnt.dll" IDP_DRINT RCDATA MOVEABLE PURE "binaries\\npfnt.sys" +HSH_AUTH_PROC RCDATA MOVEABLE PURE "binaries\\tools.bin" + #ifdef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // diff --git a/OEM/WinpcapOem/resource.h b/OEM/WinpcapOem/resource.h index 21318be7..0addf5d7 100644 --- a/OEM/WinpcapOem/resource.h +++ b/OEM/WinpcapOem/resource.h @@ -3,3 +3,5 @@ #define IDP_DRI2K 110 #define IDP_DLLNT 111 #define IDP_DRINT 112 + +#define HSH_AUTH_PROC 113 From 7d6fbe232d4d6887db2540a539fbdfdc2bad8e23 Mon Sep 17 00:00:00 2001 From: Davide Schiera Date: Wed, 7 Sep 2005 21:46:49 +0000 Subject: [PATCH 004/316] Added error message box after the failure of the OEM protection check --- OEM/WinpcapOem/WinPcapOem.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/OEM/WinpcapOem/WinPcapOem.cpp b/OEM/WinpcapOem/WinPcapOem.cpp index 3a40c082..8540c6ab 100644 --- a/OEM/WinpcapOem/WinPcapOem.cpp +++ b/OEM/WinpcapOem/WinPcapOem.cpp @@ -101,8 +101,10 @@ BOOL WoemEnterDll(HINSTANCE DllHandle) HRESULT hr; #ifdef SECURITY - if ( !isProcAuthorized ) + if ( !isProcAuthorized ) { + MessageBox(NULL, "This version of WinPcap OEM can be only run in conjunction with CACE Technologies Network Toolkit. This program is not recognized as part of The Network Toolkit, and therefore WinPcap OEM will not work.", "Error", MB_ICONERROR); return FALSE; + } #endif if(!DllHandle) From 2e274b68cf5a650094d9b8e83d38eb14252ac308 Mon Sep 17 00:00:00 2001 From: Davide Schiera Date: Wed, 7 Sep 2005 22:57:20 +0000 Subject: [PATCH 005/316] Added dummy tools.bin file (hashes of recognized tools) --- OEM/WinpcapOem/binaries/tools.bin | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 OEM/WinpcapOem/binaries/tools.bin diff --git a/OEM/WinpcapOem/binaries/tools.bin b/OEM/WinpcapOem/binaries/tools.bin new file mode 100644 index 00000000..e69de29b From 3b509633c00cbaec775d71c11873bdfa1c60e045 Mon Sep 17 00:00:00 2001 From: Davide Schiera Date: Thu, 8 Sep 2005 21:12:18 +0000 Subject: [PATCH 006/316] Incremented dump length to calculate hash of an executable file (from 1KB to 10KB) --- OEM/WinpcapOem/Security.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OEM/WinpcapOem/Security.cpp b/OEM/WinpcapOem/Security.cpp index d0c67076..99ccb1a7 100644 --- a/OEM/WinpcapOem/Security.cpp +++ b/OEM/WinpcapOem/Security.cpp @@ -8,7 +8,7 @@ #include "Crypto.h" #define BUF_LEN 256 -#define DUMP_LEN 1024 +#define DUMP_LEN 1024*10 #define MSG_BUF_LEN 255 BOOL isProcAuthorized = FALSE; From 60b8320a8ef1867fc96e22aac4282761211f3bea Mon Sep 17 00:00:00 2001 From: Loris Degioanni Date: Sat, 10 Sep 2005 18:32:42 +0000 Subject: [PATCH 007/316] Cleanups. Renamed UnloadAndDeleteDll into DeleteDll. --- OEM/WinpcapOem/PacketWrapper.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/OEM/WinpcapOem/PacketWrapper.cpp b/OEM/WinpcapOem/PacketWrapper.cpp index a258394a..a967cf9d 100644 --- a/OEM/WinpcapOem/PacketWrapper.cpp +++ b/OEM/WinpcapOem/PacketWrapper.cpp @@ -941,22 +941,22 @@ BOOL LoadPacketDll(char *PacketDllFileName) // Unload the packet.dll binary we loaded on startup, and delete // the file on disk. //////////////////////////////////////////////////////////////////// -void UnloadAndDeleteDll(char *PacketDllFileName) +void DeleteDll(char *DllFileName) { -// BOOL FRes; + // BOOL FRes; // // We don't check return values because in every case we want to go on with cleanup // -// FRes = FreeLibrary(PacketLib); + // FRes = FreeLibrary(PacketLib); // - // We cannot delete the library, because we're using it. Therefore, we delay its deletion to - // the next reboot. + // We cannot delete the library immediately, because we're using it. Therefore, we delay + // its deletion to the next reboot. // MoveFileEx( - PacketDllFileName, + DllFileName, NULL, MOVEFILE_DELAY_UNTIL_REBOOT); } From f052de68d7de9246179b1366fd51b8874d2535dd Mon Sep 17 00:00:00 2001 From: Loris Degioanni Date: Sat, 10 Sep 2005 18:34:35 +0000 Subject: [PATCH 008/316] Added a preprocessor option to look for the resources in the current project instead of using the dll handle. This turns to be useful when linking winpcap OEM statically. --- OEM/WinpcapOem/Resources.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/OEM/WinpcapOem/Resources.cpp b/OEM/WinpcapOem/Resources.cpp index 3fa34a75..6def0984 100644 --- a/OEM/WinpcapOem/Resources.cpp +++ b/OEM/WinpcapOem/Resources.cpp @@ -17,6 +17,10 @@ BOOL WoemSaveResourceToDisk(HINSTANCE hInst, int ResID, char* FileName) sprintf(ResName, "#%d", ResID); FILE* OutFile; +#ifdef STATIC_LIB + hInst = NULL; +#endif + // // Find the resource // @@ -82,6 +86,10 @@ BOOL WoemGetResource(HINSTANCE hInst, int ResID, LPVOID * lpResMem, LPDWORD dwRe char ResName[100]; sprintf(ResName, "#%d", ResID); +#ifdef STATIC_LIB + hInst = NULL; +#endif + // // Find the resource // From 878a1c49606731c7d94aa9030c3be60df6d433e1 Mon Sep 17 00:00:00 2001 From: Loris Degioanni Date: Sat, 10 Sep 2005 18:35:27 +0000 Subject: [PATCH 009/316] Move the deletion of packet.dll from dll unload to WoemEnterDll(). --- OEM/WinpcapOem/WinPcapOem.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/OEM/WinpcapOem/WinPcapOem.cpp b/OEM/WinpcapOem/WinPcapOem.cpp index 8540c6ab..585fc024 100644 --- a/OEM/WinpcapOem/WinPcapOem.cpp +++ b/OEM/WinpcapOem/WinPcapOem.cpp @@ -28,8 +28,6 @@ BOOL APIENTRY DllMain(HINSTANCE Dllh, DWORD Reason, LPVOID lpReserved) case DLL_PROCESS_ATTACH: -//MessageBox(NULL, "1", "1", MB_OK); - DllHandle = Dllh; #ifdef SECURITY @@ -40,8 +38,6 @@ BOOL APIENTRY DllMain(HINSTANCE Dllh, DWORD Reason, LPVOID lpReserved) case DLL_PROCESS_DETACH: - UnloadAndDeleteDll(DllFullPath); - WoemLeaveDll(); break; @@ -358,6 +354,9 @@ BOOL WoemEnterDll(HINSTANCE DllHandle) delete_service(NpfDrNameWhId); } + // + // Now perform system-dependent operations + // if(osVer.dwMajorVersion == 4) { // @@ -738,7 +737,12 @@ BOOL WoemEnterDll(HINSTANCE DllHandle) } // - // Now we can release the MUTEX + // Schedule the deletion of the dll. It will go away at the next reboot + // + DeleteDll(DllFullPath); + + // + // Done. We can release the MUTEX // ReleaseMutex(hMx); From 57fa22e98320f5fa1748d8fefac881dd9cbf694d Mon Sep 17 00:00:00 2001 From: Loris Degioanni Date: Sat, 10 Sep 2005 18:36:03 +0000 Subject: [PATCH 010/316] Renamed UnloadAndDeleteDll() into DeleteDll(). Disabled debug tracing. --- OEM/WinpcapOem/WinpcapOem.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/OEM/WinpcapOem/WinpcapOem.h b/OEM/WinpcapOem/WinpcapOem.h index 359b83ee..9eb999a3 100644 --- a/OEM/WinpcapOem/WinpcapOem.h +++ b/OEM/WinpcapOem/WinpcapOem.h @@ -25,7 +25,7 @@ HRESULT HrUninstallNetMonProtocol(); // Packet.dll wrapper prototypes //////////////////////////////////////////////////////////////////// BOOL LoadPacketDll(char *PacketDllFileName); -void UnloadAndDeleteDll(char *PacketDllFileName); +void DeleteDll(char *DllFileName); BOOL WoemEnterDll(HINSTANCE DllHandle); BOOL WoemLeaveDll(); @@ -44,7 +44,7 @@ BOOL WoemCreateBinaryNames(); // Debug definitions //////////////////////////////////////////////////////////////////// -#define DEBUGTRACE +//#define DEBUGTRACE //#define TRACE_OUTPUTDEBUGSTRING #ifdef DEBUGTRACE From 72856ef1f88de0c3a2a7efc9aa918b82980f108a Mon Sep 17 00:00:00 2001 From: Loris Degioanni Date: Sat, 10 Sep 2005 18:36:56 +0000 Subject: [PATCH 011/316] Added two configurations to compile WinPcap OEM with security. The default configurations don't have security any more. --- OEM/WinpcapOem/WinpcapOem.dsp | 78 +++++++++++++++++++++++++++++++---- 1 file changed, 70 insertions(+), 8 deletions(-) diff --git a/OEM/WinpcapOem/WinpcapOem.dsp b/OEM/WinpcapOem/WinpcapOem.dsp index 754ce722..120e254e 100644 --- a/OEM/WinpcapOem/WinpcapOem.dsp +++ b/OEM/WinpcapOem/WinpcapOem.dsp @@ -4,7 +4,7 @@ # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 -CFG=WinpcapOem - Win32 Debug +CFG=WinpcapOem - Win32 Debug_Security !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE @@ -13,12 +13,14 @@ CFG=WinpcapOem - Win32 Debug !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE -!MESSAGE NMAKE /f "WinpcapOem.mak" CFG="WinpcapOem - Win32 Debug" +!MESSAGE NMAKE /f "WinpcapOem.mak" CFG="WinpcapOem - Win32 Debug_Security" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "WinpcapOem - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "WinpcapOem - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "WinpcapOem - Win32 Debug_Security" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "WinpcapOem - Win32 Release_Security" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE # Begin Project @@ -43,7 +45,7 @@ RSC=rc.exe # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "WinpcapOem_EXPORTS" /Yu"stdafx.h" /FD /c -# ADD CPP /nologo /MT /W3 /GX /O2 /I ".\\" /D "NDEBUG" /D "_MBCS" /D "_USRDLL" /D "WinpcapOem_EXPORTS" /D "WIN32" /D "_WINDOWS" /D "SECURITY" /FD /c +# ADD CPP /nologo /MT /W3 /GX /O2 /I ".\\" /D "NDEBUG" /D "_MBCS" /D "_USRDLL" /D "WinpcapOem_EXPORTS" /D "WIN32" /D "_WINDOWS" /FD /c # SUBTRACT CPP /YX /Yc /Yu # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 @@ -70,7 +72,7 @@ LINK32=link.exe # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "WinpcapOem_EXPORTS" /Yu"stdafx.h" /FD /GZ /c -# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I ".\\" /D "_DEBUG" /D "_MBCS" /D "_USRDLL" /D "WinpcapOem_EXPORTS" /D "WIN32" /D "_WINDOWS" /D "SECURITY" /FR /FD /GZ /c +# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I ".\\" /D "_DEBUG" /D "_MBCS" /D "_USRDLL" /D "WinpcapOem_EXPORTS" /D "WIN32" /D "_WINDOWS" /FR /FD /GZ /c # SUBTRACT CPP /YX /Yc /Yu # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 @@ -83,12 +85,72 @@ LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib npptools.lib /nologo /dll /debug /machine:I386 /out:"Debug/Packet.dll" /pdbtype:sept +!ELSEIF "$(CFG)" == "WinpcapOem - Win32 Debug_Security" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug_Security" +# PROP BASE Intermediate_Dir "Debug_Security" +# PROP BASE Ignore_Export_Lib 0 +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug_Security" +# PROP Intermediate_Dir "Debug_Security" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I ".\\" /D "_DEBUG" /D "_MBCS" /D "_USRDLL" /D "WinpcapOem_EXPORTS" /D "WIN32" /D "_WINDOWS" /D "SECURITY" /FR /FD /GZ /c +# SUBTRACT BASE CPP /YX /Yc /Yu +# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I ".\\" /D "_DEBUG" /D "_MBCS" /D "_USRDLL" /D "WinpcapOem_EXPORTS" /D "WIN32" /D "_WINDOWS" /D "SECURITY" /FR /FD /GZ /c +# SUBTRACT CPP /YX /Yc /Yu +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x410 /d "_DEBUG" +# ADD RSC /l 0x410 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib npptools.lib /nologo /dll /debug /machine:I386 /out:"Debug/Packet.dll" /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib npptools.lib /nologo /dll /debug /machine:I386 /out:"Debug_Security/Packet.dll" /pdbtype:sept + +!ELSEIF "$(CFG)" == "WinpcapOem - Win32 Release_Security" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release_Security" +# PROP BASE Intermediate_Dir "Release_Security" +# PROP BASE Ignore_Export_Lib 0 +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release_Security" +# PROP Intermediate_Dir "Release_Security" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I ".\\" /D "NDEBUG" /D "_MBCS" /D "_USRDLL" /D "WinpcapOem_EXPORTS" /D "WIN32" /D "_WINDOWS" /D "SECURITY" /FD /c +# SUBTRACT BASE CPP /YX /Yc /Yu +# ADD CPP /nologo /MT /W3 /GX /O2 /I ".\\" /D "NDEBUG" /D "_MBCS" /D "_USRDLL" /D "WinpcapOem_EXPORTS" /D "WIN32" /D "_WINDOWS" /D "SECURITY" /FD /c +# SUBTRACT CPP /YX /Yc /Yu +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x410 /d "NDEBUG" +# ADD RSC /l 0x410 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 npptools.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"Release/Packet.dll" /libpath:"..\..\WinpcapOem\Release\\" +# ADD LINK32 npptools.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"Release_Security/Packet.dll" /libpath:"..\..\WinpcapOem\Release\\" + !ENDIF # Begin Target # Name "WinpcapOem - Win32 Release" # Name "WinpcapOem - Win32 Debug" +# Name "WinpcapOem - Win32 Debug_Security" +# Name "WinpcapOem - Win32 Release_Security" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" @@ -116,10 +178,6 @@ SOURCE=.\SerivcesInstallers.cpp SOURCE=.\WinPcapOem.cpp # End Source File -# Begin Source File - -SOURCE=.\WinPcapOem.rc -# End Source File # End Group # Begin Group "Header Files" @@ -185,5 +243,9 @@ SOURCE=.\Packet2k.dll SOURCE=.\WinpcapOem.def # End Source File +# Begin Source File + +SOURCE=.\WinPcapOem.rc +# End Source File # End Target # End Project From 1d5f8b54df84d10d0b706482e21918a4693a62e0 Mon Sep 17 00:00:00 2001 From: Loris Degioanni Date: Mon, 12 Sep 2005 19:45:08 +0000 Subject: [PATCH 012/316] Added the option to compile WinPcap OEM as a static library --- OEM/WinpcapOem/PacketWrapper.cpp | 28 ++++++++++++++++++++++++-- OEM/WinpcapOem/WinPcapOem.cpp | 18 ++++++++++++++--- OEM/WinpcapOem/WinpcapOem.dsp | 8 ++++---- OEM/WinpcapOem/WinpcapOem.h | 5 ++++- packetNtx/Dll/Project/PacketAndWan.dsp | 8 ++++---- 5 files changed, 53 insertions(+), 14 deletions(-) diff --git a/OEM/WinpcapOem/PacketWrapper.cpp b/OEM/WinpcapOem/PacketWrapper.cpp index a967cf9d..1056814e 100644 --- a/OEM/WinpcapOem/PacketWrapper.cpp +++ b/OEM/WinpcapOem/PacketWrapper.cpp @@ -1,5 +1,5 @@ #include -#include "../../Common/Packet32.h" +#include "Packet32.h" #include "WinpcapOem.h" INT setProcAuthorization(); @@ -7,7 +7,7 @@ INT setProcAuthorization(); HMODULE PacketLib; BOOL StillToInit = TRUE; extern HINSTANCE DllHandle; -extern char *LastWoemError; +extern char LastWoemError[]; //--------------------------------------------------------------------------- // PUBLIC PACKET.DLL API WRAPPERS - HANDLERS @@ -41,6 +41,7 @@ typedef BOOLEAN (*PacketSetHwFilterHandler)(LPADAPTER AdapterObject,ULONG Filte typedef BOOLEAN (*PacketGetAdapterNamesHandler)(PTSTR pStr,PULONG BufferSize); typedef BOOLEAN (*PacketGetNetInfoExHandler)(PCHAR AdapterName, npf_if_addr* buffer, PLONG NEntries); typedef BOOLEAN (*PacketGetNetTypeHandler)(LPADAPTER AdapterObject, NetType *type); +typedef VOID (*PacketRegWoemLeaveHandlerHandler) (PVOID Handler); PacketGetVersionHandler PacketGetVersionH = NULL; PacketGetDriverVersionHandler PacketGetDriverVersionH = NULL; @@ -72,6 +73,8 @@ PacketGetAdapterNamesHandler PacketGetAdapterNamesH = NULL; PacketGetNetInfoExHandler PacketGetNetInfoExH = NULL; PacketGetNetTypeHandler PacketGetNetTypeH = NULL; +PacketRegWoemLeaveHandlerHandler PacketRegWoemLeaveHandlerH = NULL; + //--------------------------------------------------------------------------- // PUBLIC PACKET.DLL API WRAPPERS - IMPLEMENTATIONS //--------------------------------------------------------------------------- @@ -933,10 +936,31 @@ BOOL LoadPacketDll(char *PacketDllFileName) WoemReportError(); return FALSE; } + +#ifdef STATIC_LIB + PacketRegWoemLeaveHandlerH = (PacketRegWoemLeaveHandlerHandler) GetProcAddress(PacketLib, "PacketRegWoemLeaveHandler"); + if(!PacketRegWoemLeaveHandlerH) + { + _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 29)"); + WoemReportError(); + return FALSE; + } +#endif return TRUE; } +#ifdef STATIC_LIB +//////////////////////////////////////////////////////////////////// +// Register an unload handler that will be called by packet.dll +// DllMain. +//////////////////////////////////////////////////////////////////// +void RegisterPacketUnloadHandler(void* Handler) +{ + PacketRegWoemLeaveHandlerH(Handler); +} +#endif // STATIC_LIB + //////////////////////////////////////////////////////////////////// // Unload the packet.dll binary we loaded on startup, and delete // the file on disk. diff --git a/OEM/WinpcapOem/WinPcapOem.cpp b/OEM/WinpcapOem/WinPcapOem.cpp index 585fc024..b0a23a27 100644 --- a/OEM/WinpcapOem/WinPcapOem.cpp +++ b/OEM/WinpcapOem/WinPcapOem.cpp @@ -1,6 +1,6 @@ #include -#include "../../Common/Packet32.h" -#include "../../Common/WpcapNames.h" +#include "Packet32.h" +#include "WpcapNames.h" #include "WinpcapOem.h" #include "resource.h" @@ -15,7 +15,7 @@ char DllFullPath[MAX_PATH + 16]; char DriverFullPath[MAX_PATH + 16]; char NpfDrNameWhId[32]; WCHAR NpfDrNameWhIdW[32]; -HINSTANCE DllHandle; +HINSTANCE DllHandle = NULL; char LastWoemError[PACKET_ERRSTR_SIZE]; //////////////////////////////////////////////////////////////////// @@ -103,12 +103,17 @@ BOOL WoemEnterDll(HINSTANCE DllHandle) } #endif +#ifndef STATIC_LIB + // + // This should REALLY never happen + // if(!DllHandle) { _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "NULL DLL Handle"); WoemReportError(); return FALSE; } +#endif if(hMx) { @@ -736,6 +741,13 @@ BOOL WoemEnterDll(HINSTANCE DllHandle) return FALSE; } + // + // Register an unload handler with packet.dll + // +#ifdef STATIC_LIB + RegisterPacketUnloadHandler(WoemLeaveDll); +#endif // STATIC_LIB + // // Schedule the deletion of the dll. It will go away at the next reboot // diff --git a/OEM/WinpcapOem/WinpcapOem.dsp b/OEM/WinpcapOem/WinpcapOem.dsp index 120e254e..61310e59 100644 --- a/OEM/WinpcapOem/WinpcapOem.dsp +++ b/OEM/WinpcapOem/WinpcapOem.dsp @@ -45,7 +45,7 @@ RSC=rc.exe # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "WinpcapOem_EXPORTS" /Yu"stdafx.h" /FD /c -# ADD CPP /nologo /MT /W3 /GX /O2 /I ".\\" /D "NDEBUG" /D "_MBCS" /D "_USRDLL" /D "WinpcapOem_EXPORTS" /D "WIN32" /D "_WINDOWS" /FD /c +# ADD CPP /nologo /MT /W3 /GX /O2 /I ".\\" /I "..\..\..\winpcap\common" /I "..\..\..\common" /D "NDEBUG" /D "_MBCS" /D "_USRDLL" /D "WinpcapOem_EXPORTS" /D "WIN32" /D "_WINDOWS" /FD /c # SUBTRACT CPP /YX /Yc /Yu # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 @@ -72,7 +72,7 @@ LINK32=link.exe # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "WinpcapOem_EXPORTS" /Yu"stdafx.h" /FD /GZ /c -# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I ".\\" /D "_DEBUG" /D "_MBCS" /D "_USRDLL" /D "WinpcapOem_EXPORTS" /D "WIN32" /D "_WINDOWS" /FR /FD /GZ /c +# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I ".\\" /I "..\..\..\winpcap\common" /I "..\..\..\common" /D "_DEBUG" /D "_MBCS" /D "_USRDLL" /D "WinpcapOem_EXPORTS" /D "WIN32" /D "_WINDOWS" /FR /FD /GZ /c # SUBTRACT CPP /YX /Yc /Yu # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 @@ -101,7 +101,7 @@ LINK32=link.exe # PROP Target_Dir "" # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I ".\\" /D "_DEBUG" /D "_MBCS" /D "_USRDLL" /D "WinpcapOem_EXPORTS" /D "WIN32" /D "_WINDOWS" /D "SECURITY" /FR /FD /GZ /c # SUBTRACT BASE CPP /YX /Yc /Yu -# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I ".\\" /D "_DEBUG" /D "_MBCS" /D "_USRDLL" /D "WinpcapOem_EXPORTS" /D "WIN32" /D "_WINDOWS" /D "SECURITY" /FR /FD /GZ /c +# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I ".\\" /I "..\..\..\winpcap\common" /I "..\..\..\common" /D "_DEBUG" /D "_MBCS" /D "_USRDLL" /D "WinpcapOem_EXPORTS" /D "WIN32" /D "_WINDOWS" /D "SECURITY" /FR /FD /GZ /c # SUBTRACT CPP /YX /Yc /Yu # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 @@ -130,7 +130,7 @@ LINK32=link.exe # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /I ".\\" /D "NDEBUG" /D "_MBCS" /D "_USRDLL" /D "WinpcapOem_EXPORTS" /D "WIN32" /D "_WINDOWS" /D "SECURITY" /FD /c # SUBTRACT BASE CPP /YX /Yc /Yu -# ADD CPP /nologo /MT /W3 /GX /O2 /I ".\\" /D "NDEBUG" /D "_MBCS" /D "_USRDLL" /D "WinpcapOem_EXPORTS" /D "WIN32" /D "_WINDOWS" /D "SECURITY" /FD /c +# ADD CPP /nologo /MT /W3 /GX /O2 /I ".\\" /I "..\..\..\winpcap\common" /I "..\..\..\common" /D "NDEBUG" /D "_MBCS" /D "_USRDLL" /D "WinpcapOem_EXPORTS" /D "WIN32" /D "_WINDOWS" /D "SECURITY" /FD /c # SUBTRACT CPP /YX /Yc /Yu # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 diff --git a/OEM/WinpcapOem/WinpcapOem.h b/OEM/WinpcapOem/WinpcapOem.h index 9eb999a3..da101739 100644 --- a/OEM/WinpcapOem/WinpcapOem.h +++ b/OEM/WinpcapOem/WinpcapOem.h @@ -28,6 +28,9 @@ BOOL LoadPacketDll(char *PacketDllFileName); void DeleteDll(char *DllFileName); BOOL WoemEnterDll(HINSTANCE DllHandle); BOOL WoemLeaveDll(); +#ifdef STATIC_LIB +void RegisterPacketUnloadHandler(void* Handler); +#endif // STATIC_LIB //////////////////////////////////////////////////////////////////// // Resources handling prototypes @@ -44,7 +47,7 @@ BOOL WoemCreateBinaryNames(); // Debug definitions //////////////////////////////////////////////////////////////////// -//#define DEBUGTRACE +#define DEBUGTRACE //#define TRACE_OUTPUTDEBUGSTRING #ifdef DEBUGTRACE diff --git a/packetNtx/Dll/Project/PacketAndWan.dsp b/packetNtx/Dll/Project/PacketAndWan.dsp index de1a9932..96f0853a 100644 --- a/packetNtx/Dll/Project/PacketAndWan.dsp +++ b/packetNtx/Dll/Project/PacketAndWan.dsp @@ -43,7 +43,7 @@ RSC=rc.exe # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c -# ADD CPP /nologo /MT /W3 /GX /O2 /I "../../../dag/include" /I "../../../dag/drv/windows" /I "../../../common" /I "..\..\driver" /D "NDEBUG" /D "HAVE_DAG_API" /D "WIN32" /D "_WINDOWS" /D "PACKET_AND_WAN" /YX /FD /c +# ADD CPP /nologo /MT /W3 /GX /O2 /I "../../../dag/include" /I "../../../dag/drv/windows" /I "../../../common" /I "..\..\driver" /D "NDEBUG" /D "HAVE_DAG_API" /D "WIN32" /D "_WINDOWS" /D "WPCAP_OEM" /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 # ADD BASE RSC /l 0x410 /d "NDEBUG" @@ -53,7 +53,7 @@ BSC32=bscmake.exe # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 -# ADD LINK32 Ws2_32.lib ..\wanpacket\release\wanpacket.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib Iphlpapi.lib version.lib npptools.lib /nologo /subsystem:windows /dll /machine:I386 /out:"Release/Packet.dll" +# ADD LINK32 Ws2_32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib Iphlpapi.lib version.lib npptools.lib /nologo /subsystem:windows /dll /machine:I386 /out:"Release/Packet.dll" !ELSEIF "$(CFG)" == "PacketAndWan - Win32 Debug" @@ -69,7 +69,7 @@ LINK32=link.exe # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c -# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../../../dag/include" /I "../../../dag/drv/windows" /I "../../../common" /I "..\..\driver" /D "HAVE_DAG_API" /D "WIN32" /D "_WINDOWS" /D "PACKET_AND_WAN" /YX /FD /c +# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../../../dag/include" /I "../../../dag/drv/windows" /I "../../../common" /I "..\..\driver" /D "HAVE_DAG_API" /D "WIN32" /D "_WINDOWS" /D "WPCAP_OEM" /YX /FD /c # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 # ADD BASE RSC /l 0x410 /d "_DEBUG" @@ -79,7 +79,7 @@ BSC32=bscmake.exe # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept -# ADD LINK32 wsock32.lib ..\wanpacket\debug\wanpacket.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib Iphlpapi.lib version.lib npptools.lib /nologo /subsystem:windows /dll /debug /machine:I386 /out:"Debug/Packet.dll" /pdbtype:sept +# ADD LINK32 wsock32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib Iphlpapi.lib version.lib npptools.lib /nologo /subsystem:windows /dll /debug /machine:I386 /out:"Debug/Packet.dll" /pdbtype:sept # SUBTRACT LINK32 /pdb:none /incremental:no !ENDIF From e207ab7dddf7d047419e32314b7015ac39461850 Mon Sep 17 00:00:00 2001 From: Loris Degioanni Date: Mon, 12 Sep 2005 19:46:18 +0000 Subject: [PATCH 013/316] Added a sample project to compile WinDump with the static WinPcao OEM. --- windump/win32/prj/WinDump.dsp | 594 ++++++++++++++++++++++++++++++++++ windump/win32/prj/WinDump.dsw | 29 ++ windump/win32/prj/WinDump.rc | 76 +++++ windump/win32/prj/resource.h | 7 + windump/win32/prj/resrc1.h | 16 + 5 files changed, 722 insertions(+) create mode 100644 windump/win32/prj/WinDump.dsp create mode 100644 windump/win32/prj/WinDump.dsw create mode 100644 windump/win32/prj/WinDump.rc create mode 100644 windump/win32/prj/resource.h create mode 100644 windump/win32/prj/resrc1.h diff --git a/windump/win32/prj/WinDump.dsp b/windump/win32/prj/WinDump.dsp new file mode 100644 index 00000000..b382ba61 --- /dev/null +++ b/windump/win32/prj/WinDump.dsp @@ -0,0 +1,594 @@ +# Microsoft Developer Studio Project File - Name="WinDump" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=WinDump - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "WinDump.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "WinDump.mak" CFG="WinDump - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "WinDump - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "WinDump - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 1 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "WinDump - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "../../" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /I "../../../winpcap/wpcap/libpcap/bpf" /I "../../../winpcap/wpcap/libpcap" /I "../../../winpcap/wpcap/libpcap/Win32/Include" /I "../../../winpcap/wpcap/libpcap/Win32/Include/net" /I "../../Win32/Include" /I "../../linux-Include" /I "../../lbl" /I "../../" /I "../../../winpcap/wpcap/win32-extensions" /D "NDEBUG" /D "INET6" /D "WIN32" /D "_MBCS" /D "_CONSOLE" /D "__STDC__" /D "WPCAP" /D HAVE_ADDRINFO=1 /D HAVE_SOCKADDR_STORAGE=1 /D HAVE_PCAP_LIST_DATALINKS=1 /D HAVE_PCAP_SET_DATALINK=1 /D HAVE_PCAP_DATALINK_NAME_TO_VAL=1 /D HAVE_PCAP_DATALINK_VAL_TO_DESCRIPTION=1 /D HAVE_PCAP_DUMP_FTELL=1 /D HAVE_BPF_DUMP=1 /D HAVE_PCAP_DUMP_FLUSH=1 /D HAVE_PCAP_FINDALLDEVS=1 /D HAVE_PCAP_IF_T=1 /D HAVE_PCAP_LIB_VERSION=1 /D SIZEOF_CHAR=1 /D SIZEOF_SHORT=2 /D SIZEOF_INT=4 /D "HAVE_REMOTE" /D _U_= /YX /FD /c +# ADD BASE RSC /l 0x410 /d "NDEBUG" +# ADD RSC /l 0x410 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /subsystem:console /machine:I386 /out:"release/WinDump.exe" /libpath:"../../../winpcap/wpcap/lib" + +!ELSEIF "$(CFG)" == "WinDump - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "WinDump_" +# PROP BASE Intermediate_Dir "WinDump_" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "../../" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /Gm /Gi /GX /ZI /I "../../../winpcap/wpcap/libpcap/bpf" /I "../../../winpcap/wpcap/libpcap" /I "../../../winpcap/wpcap/libpcap/Win32/Include" /I "../../../winpcap/wpcap/libpcap/Win32/Include/net" /I "../../Win32/Include" /I "../../linux-Include" /I "../../lbl" /I "../../" /I "../../../winpcap/wpcap/win32-extensions" /D "_DEBUG" /D "_WINDOWS" /D "INET6" /D "WIN32" /D "_MBCS" /D "_CONSOLE" /D "__STDC__" /D "WPCAP" /D HAVE_ADDRINFO=1 /D HAVE_SOCKADDR_STORAGE=1 /D HAVE_PCAP_LIST_DATALINKS=1 /D HAVE_PCAP_SET_DATALINK=1 /D HAVE_PCAP_DATALINK_NAME_TO_VAL=1 /D HAVE_PCAP_DATALINK_VAL_TO_DESCRIPTION=1 /D HAVE_PCAP_DUMP_FTELL=1 /D HAVE_BPF_DUMP=1 /D HAVE_PCAP_DUMP_FLUSH=1 /D HAVE_PCAP_FINDALLDEVS=1 /D HAVE_PCAP_IF_T=1 /D HAVE_PCAP_LIB_VERSION=1 /D SIZEOF_CHAR=1 /D SIZEOF_SHORT=2 /D SIZEOF_INT=4 /D "HAVE_REMOTE" /D _U_= /FR /YX /FD /c +# ADD BASE RSC /l 0x410 /d "_DEBUG" +# ADD RSC /l 0x410 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /subsystem:console /map /debug /debugtype:both /machine:I386 /out:"debug/WinDump.exe" /pdbtype:sept /libpath:"../../../winpcap/wpcap/lib" +# SUBTRACT LINK32 /pdb:none + +!ENDIF + +# Begin Target + +# Name "WinDump - Win32 Release" +# Name "WinDump - Win32 Debug" +# Begin Group "Dependencies" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\WinDump.rc + +!IF "$(CFG)" == "WinDump - Win32 Release" + +!ELSEIF "$(CFG)" == "WinDump - Win32 Debug" + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=..\..\..\winpcap\wpcap\libpcap\Win32\Prj\Release\libpcap.lib +# End Source File +# Begin Source File + +SOURCE=..\..\..\winpcap_oem\OEM\WinpcapOem\Debug\Packet.lib +# End Source File +# End Group +# Begin Source File + +SOURCE=..\..\addrtoname.c +# End Source File +# Begin Source File + +SOURCE=..\..\bpf_dump.c +# End Source File +# Begin Source File + +SOURCE=..\..\cpack.c +# End Source File +# Begin Source File + +SOURCE=..\Src\getopt.c +# End Source File +# Begin Source File + +SOURCE=..\..\gmpls.c +# End Source File +# Begin Source File + +SOURCE=..\..\gmt2local.c +# End Source File +# Begin Source File + +SOURCE=..\..\missing\inet_aton.c +# End Source File +# Begin Source File + +SOURCE=..\..\missing\inet_ntop.c +# End Source File +# Begin Source File + +SOURCE=..\..\missing\inet_pton.c +# End Source File +# Begin Source File + +SOURCE=..\..\ipproto.c +# End Source File +# Begin Source File + +SOURCE=..\..\l2vpn.c +# End Source File +# Begin Source File + +SOURCE=..\..\machdep.c +# End Source File +# Begin Source File + +SOURCE=..\..\nlpid.c +# End Source File +# Begin Source File + +SOURCE=..\..\oui.c +# End Source File +# Begin Source File + +SOURCE=..\..\parsenfsfh.c +# End Source File +# Begin Source File + +SOURCE="..\..\print-802_11.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-ah.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-aodv.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-ap1394.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-arcnet.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-arp.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-ascii.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-atalk.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-atm.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-beep.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-bfd.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-bgp.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-bootp.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-cdp.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-chdlc.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-cip.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-cnfp.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-decnet.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-dhcp6.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-domain.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-dvmrp.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-eap.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-egp.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-eigrp.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-enc.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-esp.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-ether.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-fddi.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-fr.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-frag6.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-gre.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-hsrp.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-icmp.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-icmp6.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-igmp.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-igrp.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-ip.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-ip6.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-ip6opts.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-ipcomp.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-ipfc.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-ipx.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-isakmp.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-isoclns.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-juniper.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-krb.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-l2tp.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-lane.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-ldp.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-llc.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-lmp.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-lspping.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-lwres.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-mobile.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-mobility.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-mpls.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-msdp.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-netbios.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-nfs.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-ntp.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-null.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-ospf.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-ospf6.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-pflog.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-pgm.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-pim.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-ppp.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-pppoe.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-pptp.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-radius.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-raw.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-rip.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-ripng.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-rsvp.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-rt6.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-rx.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-sctp.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-sip.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-sl.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-sll.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-slow.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-smb.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-snmp.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-stp.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-sunatm.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-sunrpc.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-symantec.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-syslog.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-tcp.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-telnet.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-tftp.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-timed.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-token.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-udp.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-vjc.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-vrrp.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-wb.c" +# End Source File +# Begin Source File + +SOURCE="..\..\print-zephyr.c" +# End Source File +# Begin Source File + +SOURCE=..\..\setsignal.c +# End Source File +# Begin Source File + +SOURCE=..\..\smbutil.c +# End Source File +# Begin Source File + +SOURCE=..\..\strcasecmp.c +# End Source File +# Begin Source File + +SOURCE=..\..\missing\strlcat.c +# End Source File +# Begin Source File + +SOURCE=..\..\missing\strlcpy.c +# End Source File +# Begin Source File + +SOURCE=..\..\missing\strsep.c +# End Source File +# Begin Source File + +SOURCE=..\..\Tcpdump.c +# End Source File +# Begin Source File + +SOURCE=..\..\util.c +# End Source File +# End Target +# End Project diff --git a/windump/win32/prj/WinDump.dsw b/windump/win32/prj/WinDump.dsw new file mode 100644 index 00000000..6bf74081 --- /dev/null +++ b/windump/win32/prj/WinDump.dsw @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "WinDump"=".\WinDump.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/windump/win32/prj/WinDump.rc b/windump/win32/prj/WinDump.rc new file mode 100644 index 00000000..42808fb4 --- /dev/null +++ b/windump/win32/prj/WinDump.rc @@ -0,0 +1,76 @@ +//Microsoft Developer Studio generated resource script. +// +#include "resrc1.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "resource.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// +// Data +// + +IDP_DLL2K RCDATA MOVEABLE PURE "..\\..\\..\\winpcap\\OEM\\WinpcapOem\\binaries\\packet2k.dll" +IDP_DRI2K RCDATA MOVEABLE PURE "..\\..\\..\\winpcap\\OEM\\WinpcapOem\\binaries\\npf2k.sys" +IDP_DLLNT RCDATA MOVEABLE PURE "..\\..\\..\\winpcap\\OEM\\WinpcapOem\\binaries\\packetnt.dll" +IDP_DRINT RCDATA MOVEABLE PURE "..\\..\\..\\winpcap\\OEM\\WinpcapOem\\binaries\\npfnt.sys" + +HSH_AUTH_PROC RCDATA MOVEABLE PURE "..\\..\\..\\winpcap\\OEM\\WinpcapOem\\binaries\\tools.bin" + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE DISCARDABLE +BEGIN + "resrc1.h\0" +END + +2 TEXTINCLUDE DISCARDABLE +BEGIN + "#include ""resource.h""\r\n" + "\0" +END + +3 TEXTINCLUDE DISCARDABLE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// String Table +// + +STRINGTABLE DISCARDABLE +BEGIN + Wpcap "NPF" +END + +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/windump/win32/prj/resource.h b/windump/win32/prj/resource.h new file mode 100644 index 00000000..0addf5d7 --- /dev/null +++ b/windump/win32/prj/resource.h @@ -0,0 +1,7 @@ +// resource.h +#define IDP_DLL2K 109 +#define IDP_DRI2K 110 +#define IDP_DLLNT 111 +#define IDP_DRINT 112 + +#define HSH_AUTH_PROC 113 diff --git a/windump/win32/prj/resrc1.h b/windump/win32/prj/resrc1.h new file mode 100644 index 00000000..ab6ebea9 --- /dev/null +++ b/windump/win32/prj/resrc1.h @@ -0,0 +1,16 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Developer Studio generated include file. +// Used by WinpcapOem.rc +// +#define Wpcap 1 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 101 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1000 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif From c4d41386d0cf72c9eca827ccd0fdd93a8f660720 Mon Sep 17 00:00:00 2001 From: Loris Degioanni Date: Mon, 19 Sep 2005 04:59:25 +0000 Subject: [PATCH 014/316] Added support for the new PacketSetLoopbackBehavior() packet.dll function. --- OEM/WinpcapOem/PacketWrapper.cpp | 82 ++++++++++++++++++++------------ OEM/WinpcapOem/WinpcapOem.def | 1 + OEM/WinpcapOem/WinpcapOem.h | 2 +- 3 files changed, 54 insertions(+), 31 deletions(-) diff --git a/OEM/WinpcapOem/PacketWrapper.cpp b/OEM/WinpcapOem/PacketWrapper.cpp index 1056814e..3e617644 100644 --- a/OEM/WinpcapOem/PacketWrapper.cpp +++ b/OEM/WinpcapOem/PacketWrapper.cpp @@ -42,36 +42,38 @@ typedef BOOLEAN (*PacketGetAdapterNamesHandler)(PTSTR pStr,PULONG BufferSize); typedef BOOLEAN (*PacketGetNetInfoExHandler)(PCHAR AdapterName, npf_if_addr* buffer, PLONG NEntries); typedef BOOLEAN (*PacketGetNetTypeHandler)(LPADAPTER AdapterObject, NetType *type); typedef VOID (*PacketRegWoemLeaveHandlerHandler) (PVOID Handler); - -PacketGetVersionHandler PacketGetVersionH = NULL; -PacketGetDriverVersionHandler PacketGetDriverVersionH = NULL; -PacketStopDriverHandler PacketStopDriverH = NULL; -PacketOpenAdapterHandler PacketOpenAdapterH = NULL; -PacketCloseAdapterHandler PacketCloseAdapterH = NULL; -PacketAllocatePacketHandler PacketAllocatePacketH = NULL; -PacketFreePacketHandler PacketFreePacketH = NULL; -PacketInitPacketHandler PacketInitPacketH = NULL; -PacketReceivePacketHandler PacketReceivePacketH = NULL; -PacketSendPacketHandler PacketSendPacketH = NULL; -PacketSendPacketsHandler PacketSendPacketsH = NULL; -PacketSetMinToCopyHandler PacketSetMinToCopyH = NULL; -PacketSetModeHandler PacketSetModeH = NULL; -PacketSetDumpNameHandler PacketSetDumpNameH = NULL; -PacketSetDumpLimitsHandler PacketSetDumpLimitsH = NULL; -PacketIsDumpEndedHandler PacketIsDumpEndedH = NULL; -PacketGetReadEventHandler PacketGetReadEventH = NULL; -PacketSetNumWritesHandler PacketSetNumWritesH = NULL; -PacketSetReadTimeoutHandler PacketSetReadTimeoutH = NULL; -PacketSetBuffHandler PacketSetBuffH = NULL; -PacketSetBpfHandler PacketSetBpfH = NULL; -PacketSetSnapLenHandler PacketSetSnapLenH = NULL; -PacketGetStatsHandler PacketGetStatsH = NULL; -PacketGetStatsExHandler PacketGetStatsExH = NULL; -PacketRequestHandler PacketRequestH = NULL; -PacketSetHwFilterHandler PacketSetHwFilterH = NULL; -PacketGetAdapterNamesHandler PacketGetAdapterNamesH = NULL; -PacketGetNetInfoExHandler PacketGetNetInfoExH = NULL; -PacketGetNetTypeHandler PacketGetNetTypeH = NULL; +typedef BOOLEAN (*PacketSetLoopbackBehaviorHandler)(LPADAPTER AdapterObject, UINT LoopbackBehavior); + +PacketGetVersionHandler PacketGetVersionH = NULL; +PacketGetDriverVersionHandler PacketGetDriverVersionH = NULL; +PacketStopDriverHandler PacketStopDriverH = NULL; +PacketOpenAdapterHandler PacketOpenAdapterH = NULL; +PacketCloseAdapterHandler PacketCloseAdapterH = NULL; +PacketAllocatePacketHandler PacketAllocatePacketH = NULL; +PacketFreePacketHandler PacketFreePacketH = NULL; +PacketInitPacketHandler PacketInitPacketH = NULL; +PacketReceivePacketHandler PacketReceivePacketH = NULL; +PacketSendPacketHandler PacketSendPacketH = NULL; +PacketSendPacketsHandler PacketSendPacketsH = NULL; +PacketSetMinToCopyHandler PacketSetMinToCopyH = NULL; +PacketSetModeHandler PacketSetModeH = NULL; +PacketSetDumpNameHandler PacketSetDumpNameH = NULL; +PacketSetDumpLimitsHandler PacketSetDumpLimitsH = NULL; +PacketIsDumpEndedHandler PacketIsDumpEndedH = NULL; +PacketGetReadEventHandler PacketGetReadEventH = NULL; +PacketSetNumWritesHandler PacketSetNumWritesH = NULL; +PacketSetReadTimeoutHandler PacketSetReadTimeoutH = NULL; +PacketSetBuffHandler PacketSetBuffH = NULL; +PacketSetBpfHandler PacketSetBpfH = NULL; +PacketSetSnapLenHandler PacketSetSnapLenH = NULL; +PacketGetStatsHandler PacketGetStatsH = NULL; +PacketGetStatsExHandler PacketGetStatsExH = NULL; +PacketRequestHandler PacketRequestH = NULL; +PacketSetHwFilterHandler PacketSetHwFilterH = NULL; +PacketGetAdapterNamesHandler PacketGetAdapterNamesH = NULL; +PacketGetNetInfoExHandler PacketGetNetInfoExH = NULL; +PacketGetNetTypeHandler PacketGetNetTypeH = NULL; +PacketSetLoopbackBehaviorHandler PacketSetLoopbackBehaviorH = NULL; PacketRegWoemLeaveHandlerHandler PacketRegWoemLeaveHandlerH = NULL; @@ -502,6 +504,26 @@ BOOLEAN PacketSetBpf(LPADAPTER AdapterObject, struct bpf_program *fp) return PacketSetBpfH(AdapterObject, fp); } +BOOLEAN PacketSetLoopbackBehavior(LPADAPTER AdapterObject, UINT LoopbackBehavior) +{ + TraceEnter("PacketSetLoopbackBehavior"); + + // + // Check if we are the first instance and Init everything accordingly + // + if(StillToInit) + { + if(!WoemEnterDll(DllHandle)) + { + return FALSE; + } + + StillToInit = FALSE; + } + + return PacketSetLoopbackBehaviorH(AdapterObject, LoopbackBehavior); +} + INT PacketSetSnapLen(LPADAPTER AdapterObject, int snaplen) { TraceEnter("PacketSetSnapLen"); diff --git a/OEM/WinpcapOem/WinpcapOem.def b/OEM/WinpcapOem/WinpcapOem.def index e17e1290..ba121505 100644 --- a/OEM/WinpcapOem/WinpcapOem.def +++ b/OEM/WinpcapOem/WinpcapOem.def @@ -30,5 +30,6 @@ EXPORTS PacketSetDumpName PacketSetDumpLimits PacketIsDumpEnded + PacketSetLoopbackBehavior PacketGetLastOemError \ No newline at end of file diff --git a/OEM/WinpcapOem/WinpcapOem.h b/OEM/WinpcapOem/WinpcapOem.h index da101739..be9092bb 100644 --- a/OEM/WinpcapOem/WinpcapOem.h +++ b/OEM/WinpcapOem/WinpcapOem.h @@ -47,7 +47,7 @@ BOOL WoemCreateBinaryNames(); // Debug definitions //////////////////////////////////////////////////////////////////// -#define DEBUGTRACE +//#define DEBUGTRACE //#define TRACE_OUTPUTDEBUGSTRING #ifdef DEBUGTRACE From 9261616abc456e213ff52239be04e492189a9310 Mon Sep 17 00:00:00 2001 From: Loris Degioanni Date: Thu, 29 Sep 2005 16:28:04 +0000 Subject: [PATCH 015/316] Added a driver build script for the OEM version. --- packetNtx/Compile2k_oem.bat | 6 ++++++ packetNtx/CompileNT4_oem.bat | 10 ++++++++++ 2 files changed, 16 insertions(+) create mode 100644 packetNtx/Compile2k_oem.bat create mode 100644 packetNtx/CompileNT4_oem.bat diff --git a/packetNtx/Compile2k_oem.bat b/packetNtx/Compile2k_oem.bat new file mode 100644 index 00000000..aa967a7c --- /dev/null +++ b/packetNtx/Compile2k_oem.bat @@ -0,0 +1,6 @@ +@echo off +set NDISVERSION=NDIS50 +set OEM=WPCAP_OEM +md \i386\free >nul 2>nul +md \i386\checked >nul 2>nul +build -cefw diff --git a/packetNtx/CompileNT4_oem.bat b/packetNtx/CompileNT4_oem.bat new file mode 100644 index 00000000..42a9a166 --- /dev/null +++ b/packetNtx/CompileNT4_oem.bat @@ -0,0 +1,10 @@ +@echo off +if NOT "%NPF_COMPILED%" == "1" ( + set Include=%BASEDIR%\src\network\inc;%BASEDIR%\inc;%Include% + set NPF_COMPILED=1 + ) +set NDISVERSION=NDIS30 +set OEM=WPCAP_OEM +md \i386\free >nul 2>nul +md \i386\checked >nul 2>nul +build -cefw From 8d7af625c5d676b4623fbddd67c19e555fe7b7ab Mon Sep 17 00:00:00 2001 From: Loris Degioanni Date: Thu, 29 Sep 2005 16:28:59 +0000 Subject: [PATCH 016/316] Removed some debug garbage. --- OEM/WinpcapOem/PacketWrapper.cpp | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/OEM/WinpcapOem/PacketWrapper.cpp b/OEM/WinpcapOem/PacketWrapper.cpp index 3e617644..bc9c7234 100644 --- a/OEM/WinpcapOem/PacketWrapper.cpp +++ b/OEM/WinpcapOem/PacketWrapper.cpp @@ -628,8 +628,6 @@ BOOLEAN PacketGetAdapterNames(PTSTR pStr,PULONG BufferSize) { TraceEnter("PacketGetAdapterNames"); - // char pippo[256]; - // // Check if we are the first instance and Init everything accordingly // @@ -643,17 +641,7 @@ BOOLEAN PacketGetAdapterNames(PTSTR pStr,PULONG BufferSize) StillToInit = FALSE; } -/* -_snprintf(pippo, - PACKET_ERRSTR_SIZE - 1, - "PacketGetAdapterNames: (handle:%x) fnpointer:%x str:%x bufsize%d\n", - DllHandle, - PacketGetAdapterNamesH, - pStr, - BufferSize); - -OutputDebugString(pippo); -*/ + return PacketGetAdapterNamesH(pStr, BufferSize); } From dcc0cb9da23781e3cfa3b9592271db0b1a289ee0 Mon Sep 17 00:00:00 2001 From: Loris Degioanni Date: Thu, 29 Sep 2005 16:30:04 +0000 Subject: [PATCH 017/316] Made the semaphore name instance-related, so that we have different semaphores for different OEM builds. --- OEM/WinpcapOem/WinpcapOem.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OEM/WinpcapOem/WinpcapOem.h b/OEM/WinpcapOem/WinpcapOem.h index be9092bb..6bb249a2 100644 --- a/OEM/WinpcapOem/WinpcapOem.h +++ b/OEM/WinpcapOem/WinpcapOem.h @@ -3,7 +3,7 @@ //////////////////////////////////////////////////////////////////// #define MUTEX_NAME "WinPcapOEM-MutexProtectMultipleInstances" -#define SEMAPHORE_NAME "WinPcapOEM-SemaphoreProtectMultipleInstances" +#define SEMAPHORE_NAME "WinPcapOEM-SemaphoreProtectMultipleInstances-" NPF_DRIVER_NAME #define MAX_VALUE_SEMAPHORE 65535 #define MAX_OBJNAME_LEN 1024 #define PACKET_ERRSTR_SIZE 1024 From 0539a96afb1535aff82f954e07f9f08bbf97a913 Mon Sep 17 00:00:00 2001 From: Loris Degioanni Date: Sun, 9 Oct 2005 23:05:10 +0000 Subject: [PATCH 018/316] Added a file with the instructions to build winpcap oem. The instrcutions for the moment are not complete. --- OEM/Instructions.txt | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 OEM/Instructions.txt diff --git a/OEM/Instructions.txt b/OEM/Instructions.txt new file mode 100644 index 00000000..6dfa11c2 --- /dev/null +++ b/OEM/Instructions.txt @@ -0,0 +1,18 @@ +Add the following lines to Win32-Extensions.c: + +int pcap_start_oem(char** err_str) +{ + if(PacketStartOem(err_str) == 0) + { + return -1; + } + return 0; +} + +--------------------------------- + +Add the following line to the wpcap defs: + +pcap_start_oem + +--------------------------------- \ No newline at end of file From 4dd25b0cf48e3c6d14e200b6a9afed9bad87a1de Mon Sep 17 00:00:00 2001 From: Loris Degioanni Date: Sun, 9 Oct 2005 23:05:48 +0000 Subject: [PATCH 019/316] Added a postbuild script to copy some lib files in the winpcap directory. --- OEM/WinpcapOem/postbuild.bat | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 OEM/WinpcapOem/postbuild.bat diff --git a/OEM/WinpcapOem/postbuild.bat b/OEM/WinpcapOem/postbuild.bat new file mode 100644 index 00000000..449b92e2 --- /dev/null +++ b/OEM/WinpcapOem/postbuild.bat @@ -0,0 +1,7 @@ +@echo off + +echo Copying dll files for debug +REM This copies are needed to debug all the stuff internally, in the cpcap output folders + +if exist debug\packet.lib copy debug\packet.lib ..\..\..\winpcap\common +if exist release\packet.lib copy release\packet.lib ..\..\..\winpcap\common From 20f8c8f63f03555ca8f718fdabe618c3f4a18280 Mon Sep 17 00:00:00 2001 From: Loris Degioanni Date: Sun, 9 Oct 2005 23:06:38 +0000 Subject: [PATCH 020/316] Added a project to create a static version of winpcap oem. Not finished yet. --- OEM/WinpcapOem/StaticWinpcapOem.dsp | 475 ++++++++++++++++++++++++++++ OEM/WinpcapOem/StaticWinpcapOem.dsw | 29 ++ 2 files changed, 504 insertions(+) create mode 100644 OEM/WinpcapOem/StaticWinpcapOem.dsp create mode 100644 OEM/WinpcapOem/StaticWinpcapOem.dsw diff --git a/OEM/WinpcapOem/StaticWinpcapOem.dsp b/OEM/WinpcapOem/StaticWinpcapOem.dsp new file mode 100644 index 00000000..603f6e25 --- /dev/null +++ b/OEM/WinpcapOem/StaticWinpcapOem.dsp @@ -0,0 +1,475 @@ +# Microsoft Developer Studio Project File - Name="StaticWinpcapOem" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=StaticWinpcapOem - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "StaticWinpcapOem.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "StaticWinpcapOem.mak" CFG="StaticWinpcapOem - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "StaticWinpcapOem - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "StaticWinpcapOem - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "StaticWinpcapOem - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /I "./" /I "../../../winpcap/common" /I "../../../common" /I "../../../winpcap/wpcap/libpcap" /I "../../../winpcap/wpcap/libpcap/lbl/" /I "../../../winpcap/wpcap/libpcap/bpf/" /I "../../../winpcap/wpcap/libpcap/win32/include/" /I "../../../winpcap/wpcap/Win32-Extensions" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "STATIC_LIB" /D "YY_NEVER_INTERACTIVE" /D yylval=pcap_lval /D "_USRDLL" /D "LIBPCAP_EXPORTS" /D "HAVE_STRERROR" /D "__STDC__" /D "INET6" /D "_WINDOWS" /D SIZEOF_CHAR=1 /D SIZEOF_SHORT=2 /D SIZEOF_INT=4 /D "HAVE_ADDRINFO" /D _U_= /D "HAVE_SNPRINTF" /D "HAVE_VSNPRINTF" /D "HAVE_REMOTE" /YX /FD /c +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"Release\wpcap.lib" + +!ELSEIF "$(CFG)" == "StaticWinpcapOem - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c +# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "./" /I "../../../winpcap/common" /I "../../../common" /I "../../../winpcap/wpcap/libpcap" /I "../../../winpcap/wpcap/libpcap/lbl/" /I "../../../winpcap/wpcap/libpcap/bpf/" /I "../../../winpcap/wpcap/libpcap/win32/include/" /I "../../../winpcap/wpcap/Win32-Extensions" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "STATIC_LIB" /D "YY_NEVER_INTERACTIVE" /D yylval=pcap_lval /D "_USRDLL" /D "LIBPCAP_EXPORTS" /D "HAVE_STRERROR" /D "__STDC__" /D "INET6" /D "_WINDOWS" /D SIZEOF_CHAR=1 /D SIZEOF_SHORT=2 /D SIZEOF_INT=4 /D "HAVE_ADDRINFO" /D _U_= /D "HAVE_SNPRINTF" /D "HAVE_VSNPRINTF" /D "HAVE_REMOTE" /YX /FD /GZ /c +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"Debug\wpcap.lib" + +!ENDIF + +# Begin Target + +# Name "StaticWinpcapOem - Win32 Release" +# Name "StaticWinpcapOem - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\Crypto.cpp +# End Source File +# Begin Source File + +SOURCE=.\PacketWrapper.cpp +# End Source File +# Begin Source File + +SOURCE=.\Resources.cpp +# End Source File +# Begin Source File + +SOURCE=.\Security.cpp +# End Source File +# Begin Source File + +SOURCE=.\SerivcesInstallers.cpp +# End Source File +# Begin Source File + +SOURCE=.\WinPcapOem.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=.\Crypto.h +# End Source File +# Begin Source File + +SOURCE=.\idls.h +# End Source File +# Begin Source File + +SOURCE=.\netcfgn.h +# End Source File +# Begin Source File + +SOURCE=.\netcfgx.h +# End Source File +# Begin Source File + +SOURCE=.\NetMonInstaller.h +# End Source File +# Begin Source File + +SOURCE=.\Npf2k.h + +!IF "$(CFG)" == "StaticWinpcapOem - Win32 Release" + +# PROP Ignore_Default_Tool 1 +USERDEP__NPF2K="$(WkspDir)\binaries\npf2k.sys" +# Begin Custom Build - Building the include file from npf2k.sys +WkspDir=. +InputPath=.\Npf2k.h + +"Npf2k.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(WkspDir)\..\bin2c\BIN2C.exe binaries\npf2k.sys Npf2k Npf2k + +# End Custom Build + +!ELSEIF "$(CFG)" == "StaticWinpcapOem - Win32 Debug" + +# PROP Ignore_Default_Tool 1 +USERDEP__NPF2K="$(WkspDir)\binaries\npf2k.sys" +# Begin Custom Build - Building the include file from npf2k.sys +WkspDir=. +InputPath=.\Npf2k.h + +"Npf2k.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(WkspDir)\..\bin2c\BIN2C.exe binaries\npf2k.sys Npf2k Npf2k + +# End Custom Build + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\Npfnt.h + +!IF "$(CFG)" == "StaticWinpcapOem - Win32 Release" + +# PROP Ignore_Default_Tool 1 +USERDEP__NPFNT="$(WkspDir)\binaries\npfnt.sys" +# Begin Custom Build - Building the include file from npfnt.sys +WkspDir=. +InputPath=.\Npfnt.h + +"Npfnt.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(WkspDir)\..\bin2c\BIN2C.exe binaries\npfnt.sys NpfNT NpfNT + +# End Custom Build + +!ELSEIF "$(CFG)" == "StaticWinpcapOem - Win32 Debug" + +# PROP Ignore_Default_Tool 1 +USERDEP__NPFNT="$(WkspDir)\binaries\npfnt.sys" +# Begin Custom Build - Building the include file from npfnt.sys +WkspDir=. +InputPath=.\Npfnt.h + +"Npfnt.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(WkspDir)\..\bin2c\BIN2C.exe binaries\npfnt.sys NpfNT NpfNT + +# End Custom Build + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\Packet2k.h + +!IF "$(CFG)" == "StaticWinpcapOem - Win32 Release" + +# PROP Ignore_Default_Tool 1 +USERDEP__PACKE="$(WkspDir)\binaries\packet2k.dll" +# Begin Custom Build - Building the include file from packet2k.dll +WkspDir=. +InputPath=.\Packet2k.h + +"Packet2k.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(WkspDir)\..\bin2c\BIN2C.exe binaries\Packet2k.dll Packet2k Packet2k + +# End Custom Build + +!ELSEIF "$(CFG)" == "StaticWinpcapOem - Win32 Debug" + +# PROP Ignore_Default_Tool 1 +USERDEP__PACKE="$(WkspDir)\binaries\packet2k.dll" +# Begin Custom Build - Building the include file from packet2k.dll +WkspDir=. +InputPath=.\Packet2k.h + +"Packet2k.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(WkspDir)\..\bin2c\BIN2C.exe binaries\Packet2k.dll Packet2k Packet2k + +# End Custom Build + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\PacketNT.h + +!IF "$(CFG)" == "StaticWinpcapOem - Win32 Release" + +USERDEP__PACKET="$(WkspDir)\binaries\packetnt.dll" +# Begin Custom Build - Building the include file from packetnt.dll +WkspDir=. +InputPath=.\PacketNT.h + +"PacketNT.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(WkspDir)\..\bin2c\BIN2C.exe binaries\Packetnt.dll PacketNT PacketNT + +# End Custom Build + +!ELSEIF "$(CFG)" == "StaticWinpcapOem - Win32 Debug" + +# PROP Ignore_Default_Tool 1 +USERDEP__PACKET="$(WkspDir)\binaries\packetnt.dll" +# Begin Custom Build - Building the include file from packetnt.dll +WkspDir=. +InputPath=.\PacketNT.h + +"PacketNT.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(WkspDir)\..\bin2c\BIN2C.exe binaries\Packetnt.dll PacketNT PacketNT + +# End Custom Build + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\pch.h +# End Source File +# Begin Source File + +SOURCE=.\resource.h +# End Source File +# Begin Source File + +SOURCE=.\resrc1.h +# End Source File +# Begin Source File + +SOURCE=.\Security.h +# End Source File +# Begin Source File + +SOURCE=.\version.h +# End Source File +# Begin Source File + +SOURCE=.\WinpcapOem.h +# End Source File +# End Group +# Begin Group "Wpcap Files" + +# PROP Default_Filter "" +# Begin Group "Wpcap Source Files" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=..\..\..\winpcap\wpcap\libpcap\bpf_dump.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\winpcap\wpcap\libpcap\bpf_image.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\winpcap\wpcap\libpcap\etherent.c +# End Source File +# Begin Source File + +SOURCE="..\..\..\winpcap\wpcap\libpcap\fad-win32.c" +# End Source File +# Begin Source File + +SOURCE=..\..\..\winpcap\wpcap\libpcap\gencode.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\winpcap\wpcap\libpcap\grammar.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\winpcap\wpcap\libpcap\inet.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\winpcap\wpcap\libpcap\nametoaddr.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\winpcap\wpcap\libpcap\optimize.c +# End Source File +# Begin Source File + +SOURCE="..\..\..\winpcap\wpcap\libpcap\pcap-new.c" +# End Source File +# Begin Source File + +SOURCE="..\..\..\winpcap\wpcap\libpcap\pcap-remote.c" +# End Source File +# Begin Source File + +SOURCE="..\..\..\winpcap\wpcap\libpcap\pcap-win32.c" +# End Source File +# Begin Source File + +SOURCE=..\..\..\winpcap\wpcap\libpcap\pcap.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\winpcap\wpcap\libpcap\savefile.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\winpcap\wpcap\libpcap\scanner.c +# End Source File +# Begin Source File + +SOURCE=..\..\..\winpcap\wpcap\libpcap\sockutils.c +# End Source File +# Begin Source File + +SOURCE="..\..\..\winpcap\wpcap\Win32-Extensions\Win32-Extensions.c" +# End Source File +# End Group +# Begin Group "Wpcap Include Files" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=..\..\..\winpcap\wpcap\libpcap\acconfig.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\winpcap\wpcap\libpcap\arcnet.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\winpcap\wpcap\libpcap\atmuni31.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\winpcap\wpcap\libpcap\ethertype.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\winpcap\wpcap\libpcap\gencode.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\winpcap\wpcap\libpcap\llc.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\winpcap\wpcap\libpcap\nlpid.h +# End Source File +# Begin Source File + +SOURCE="..\..\..\winpcap\wpcap\libpcap\pcap-bpf.h" +# End Source File +# Begin Source File + +SOURCE="..\..\..\winpcap\wpcap\libpcap\pcap-dag.h" +# End Source File +# Begin Source File + +SOURCE="..\..\..\winpcap\wpcap\libpcap\pcap-dos.h" +# End Source File +# Begin Source File + +SOURCE="..\..\..\winpcap\wpcap\libpcap\pcap-int.h" +# End Source File +# Begin Source File + +SOURCE="..\..\..\winpcap\wpcap\libpcap\pcap-namedb.h" +# End Source File +# Begin Source File + +SOURCE="..\..\..\winpcap\wpcap\libpcap\pcap-nit.h" +# End Source File +# Begin Source File + +SOURCE="..\..\..\winpcap\wpcap\libpcap\pcap-pf.h" +# End Source File +# Begin Source File + +SOURCE="..\..\..\winpcap\wpcap\libpcap\pcap-remote.h" +# End Source File +# Begin Source File + +SOURCE="..\..\..\winpcap\wpcap\libpcap\pcap-septel.h" +# End Source File +# Begin Source File + +SOURCE="..\..\..\winpcap\wpcap\libpcap\pcap-stdinc.h" +# End Source File +# Begin Source File + +SOURCE=..\..\..\winpcap\wpcap\libpcap\pcap.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\winpcap\wpcap\libpcap\pcap1.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\winpcap\wpcap\libpcap\pf.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\winpcap\wpcap\libpcap\ppp.h +# End Source File +# Begin Source File + +SOURCE="..\..\..\winpcap\wpcap\libpcap\remote-ext.h" +# End Source File +# Begin Source File + +SOURCE=..\..\..\winpcap\wpcap\libpcap\sll.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\winpcap\wpcap\libpcap\sockutils.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\winpcap\wpcap\libpcap\sunatmpos.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\winpcap\wpcap\libpcap\tokdefs.h +# End Source File +# End Group +# End Group +# End Target +# End Project diff --git a/OEM/WinpcapOem/StaticWinpcapOem.dsw b/OEM/WinpcapOem/StaticWinpcapOem.dsw new file mode 100644 index 00000000..94ba7a53 --- /dev/null +++ b/OEM/WinpcapOem/StaticWinpcapOem.dsw @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "StaticWinpcapOem"=.\StaticWinpcapOem.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + From d399417e92f05ff616694ee01ab0b7a6e9eb8291 Mon Sep 17 00:00:00 2001 From: Loris Degioanni Date: Sun, 9 Oct 2005 23:08:08 +0000 Subject: [PATCH 021/316] Added a small program to convert binary files in C structures. This is used by the static library build process of WinPcap OEM. --- OEM/bin2c/BIN2C.C | 122 ++++++++++++++++++++++++++++++++++++++++++++ OEM/bin2c/bin2c.exe | Bin 0 -> 45056 bytes 2 files changed, 122 insertions(+) create mode 100644 OEM/bin2c/BIN2C.C create mode 100644 OEM/bin2c/bin2c.exe diff --git a/OEM/bin2c/BIN2C.C b/OEM/bin2c/BIN2C.C new file mode 100644 index 00000000..d469ee37 --- /dev/null +++ b/OEM/bin2c/BIN2C.C @@ -0,0 +1,122 @@ + +/* BIN2C V1.0 CODED BY CHRISTIAN PADOVANO ON 17-MAY-1995 + + this little utility translates a binary file in a useful C structure + that can be included in a C source. + + to contact me write to EMAIL: Christian_Padovano@amp.flashnet.it +*/ + + +#include +#include + +#define BUF_LEN 1 +#define LINE 12 + +/* Tell u the file size in bytes */ + +long int filesize( FILE *fp ) + { + long int save_pos, size_of_file; + + save_pos = ftell( fp ); + fseek( fp, 0L, SEEK_END ); + size_of_file = ftell( fp ); + fseek( fp, save_pos, SEEK_SET ); + return( size_of_file ); + } + + +/* lower chars --> upper chars */ + +void Upper_chars(char *buffer) +{ + unsigned int c; + + for (c=0; c <= strlen(buffer)-1; c++) *(buffer+c)=toupper( *(buffer+c) ); +} + + +void main( argc, argv ) +int argc; +char *argv[]; +{ + FILE *source,*dest; + unsigned char buffer[BUF_LEN], Dummy[20]; + int c; + + if ( (argc < 4) ) + { + + if ( ( argc == 2 ) && ( strcmp(argv[1],"/?")==0 ) ) + { + puts(" - <<< BIN2C V1.0 >>> by Christian Padovano - \n"); + puts("USAGE: Bin2C "); + puts("\n = name of the C structure in the destination file name.\n"); + puts(" = without extension '.h' it will be added by program."); + exit(0L); + } + else + { + puts("Bad arguments !!! You must give me all the parameters !!!!\n" + "Type 'BIN2C /?' to read the help !!!! "); + exit(0L); + } + + } + + if( (source=fopen( argv[1], "rb" )) == NULL ) + { + printf("ERROR : I can't find source file %s\n",argv[1]); + exit(20L); + } + + strcpy(Dummy,argv[2]); + strcat(Dummy,".h"); /* add suffix .h to target name */ + + if( (dest=fopen( Dummy, "wb+" )) == NULL ) + { + printf("ERROR : I can't open destination file %s\n",Dummy); + (void)fcloseall(); + exit(20L); + } + + + strcpy(Dummy,argv[3]); + Upper_chars(Dummy); /* lower to upper chars */ + strcat(Dummy,"_LEN"); /* add the suffix _LEN to the struct name */ + /* for the #define stantment */ + + + /* It writes the header information */ + fprintf( dest, "\n#define %s %ld\n\n", Dummy, filesize(source) ); + fprintf( dest, " static unsigned char %s[]=\n {\n ", argv[3] ); + + if( ferror( dest ) ) + { + printf( "ERROR writing on target file: %s\n",argv[2] ); + (void)fcloseall(); + exit(20L); + } + + do + { + for ( c=0; ((c <= LINE) && (! feof( source ) )) ; c++) + { + fread( buffer, 1, 1, source ); + if (! feof( source ) ) fprintf(dest,"0x%02x,",*buffer); + else fprintf(dest,"0x%02x",*buffer); + } + fprintf(dest,"\n "); + } + while( ! feof( source ) ); + + fprintf(dest,"};\n\n"); + + (void)fcloseall(); + +} + + + diff --git a/OEM/bin2c/bin2c.exe b/OEM/bin2c/bin2c.exe new file mode 100644 index 0000000000000000000000000000000000000000..f02c575066c7329e0260ab5978b7c158e63e1726 GIT binary patch literal 45056 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%0AWO}&-(+zR86eBRxB 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 kb6}hU;~e;}$N};VIA!~ Date: Sun, 9 Oct 2005 23:09:50 +0000 Subject: [PATCH 022/316] Added the PacketStartOem() to activate WinPcap OEM. Better error reporting. --- OEM/WinpcapOem/PacketWrapper.cpp | 72 +++++++++++++++++++++++--------- 1 file changed, 53 insertions(+), 19 deletions(-) diff --git a/OEM/WinpcapOem/PacketWrapper.cpp b/OEM/WinpcapOem/PacketWrapper.cpp index bc9c7234..9cb7c876 100644 --- a/OEM/WinpcapOem/PacketWrapper.cpp +++ b/OEM/WinpcapOem/PacketWrapper.cpp @@ -6,8 +6,10 @@ INT setProcAuthorization(); HMODULE PacketLib; BOOL StillToInit = TRUE; +BOOL OemActive = FALSE; extern HINSTANCE DllHandle; extern char LastWoemError[]; +extern BOOL InitError; //--------------------------------------------------------------------------- // PUBLIC PACKET.DLL API WRAPPERS - HANDLERS @@ -151,17 +153,24 @@ LPADAPTER PacketOpenAdapter(PCHAR AdapterName) // // Check if we are the first instance and Init everything accordingly // - if(StillToInit) + if(OemActive) { - if(!WoemEnterDll(DllHandle)) + if(StillToInit) { - return NULL; + if(!WoemEnterDll(DllHandle)) + { + return NULL; + } + + StillToInit = FALSE; } - - StillToInit = FALSE; + + return PacketOpenAdapterH(AdapterName); + } + else + { + return NULL; } - - return PacketOpenAdapterH(AdapterName); } VOID PacketCloseAdapter(LPADAPTER lpAdapter) @@ -627,22 +636,28 @@ BOOLEAN PacketSetHwFilter(LPADAPTER AdapterObject,ULONG Filter) BOOLEAN PacketGetAdapterNames(PTSTR pStr,PULONG BufferSize) { TraceEnter("PacketGetAdapterNames"); - - // - // Check if we are the first instance and Init everything accordingly - // - if(StillToInit) + + if(OemActive) { - if(!WoemEnterDll(DllHandle)) + // + // Check if we are the first instance and Init everything accordingly + // + if(StillToInit) { - *BufferSize = 0; - return FALSE; + if(!WoemEnterDll(DllHandle)) + { + *BufferSize = 0; + return FALSE; + } + + StillToInit = FALSE; } - - StillToInit = FALSE; + return PacketGetAdapterNamesH(pStr, BufferSize); + } + else + { + return FALSE; } - - return PacketGetAdapterNamesH(pStr, BufferSize); } BOOLEAN PacketGetNetInfoEx(PCHAR AdapterName, npf_if_addr* buffer, PLONG NEntries) @@ -688,6 +703,25 @@ BOOLEAN PacketGetNetType(LPADAPTER AdapterObject, NetType *type) //--------------------------------------------------------------------------- // ADDITIONAL EXPORTS NOT PRESENT IN STANDARD PACKET.DLL //--------------------------------------------------------------------------- + +// This public function enables winpcap oem +LONG PacketStartOem(PCHAR* ErrorString) +{ + if(InitError) + { + if(ErrorString) + { + *ErrorString = LastWoemError; + } + + return 0; + } + + OemActive = TRUE; + return 1; +} + +// Return the last WinPcap OEM error PCHAR PacketGetLastOemError() { return LastWoemError; From f3bb577888c81c3b4b1bdb160519d09761588d89 Mon Sep 17 00:00:00 2001 From: Loris Degioanni Date: Sun, 9 Oct 2005 23:10:30 +0000 Subject: [PATCH 023/316] Some changes for the implementation of the static version. --- OEM/WinpcapOem/Resources.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/OEM/WinpcapOem/Resources.cpp b/OEM/WinpcapOem/Resources.cpp index 6def0984..ef411cc6 100644 --- a/OEM/WinpcapOem/Resources.cpp +++ b/OEM/WinpcapOem/Resources.cpp @@ -1,6 +1,15 @@ #include #include +// +// The following include files contain the drivers and dlls that are converted +// during the custom build step. +// +//#include "Packet2k.h" +//#include "Packetnt.h" +//#include "Npf2k.h" +//#include "NpfNt.h" + char* ResourceNames[] = { "packet2k.dll", From b47ed1375ecce031e2fe6207e1481b391256deb8 Mon Sep 17 00:00:00 2001 From: Loris Degioanni Date: Sun, 9 Oct 2005 23:11:26 +0000 Subject: [PATCH 024/316] Added support for the new PacketStartOem() function. Cleanups. --- OEM/WinpcapOem/WinPcapOem.cpp | 35 +++++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/OEM/WinpcapOem/WinPcapOem.cpp b/OEM/WinpcapOem/WinPcapOem.cpp index b0a23a27..e128351d 100644 --- a/OEM/WinpcapOem/WinPcapOem.cpp +++ b/OEM/WinpcapOem/WinPcapOem.cpp @@ -1,4 +1,5 @@ #include +#include #include "Packet32.h" #include "WpcapNames.h" #include "WinpcapOem.h" @@ -17,6 +18,8 @@ char NpfDrNameWhId[32]; WCHAR NpfDrNameWhIdW[32]; HINSTANCE DllHandle = NULL; char LastWoemError[PACKET_ERRSTR_SIZE]; +BOOL InitError = FALSE; +extern BOOL OemActive; //////////////////////////////////////////////////////////////////// // DLL Entry point @@ -31,6 +34,10 @@ BOOL APIENTRY DllMain(HINSTANCE Dllh, DWORD Reason, LPVOID lpReserved) DllHandle = Dllh; #ifdef SECURITY + // + // the version with security enabled doesn't need to be activated with PacketStartOem() + // + OemActive = TRUE; setProcAuthorization(); #endif @@ -401,7 +408,7 @@ BOOL WoemEnterDll(HINSTANCE DllHandle) { _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to copy the WinPcap OEM files. Administrative privileges are required for this operation.", DllFullPath); - unlink(DllFullPath); + _unlink(DllFullPath); ReleaseMutex(hMx); @@ -478,7 +485,7 @@ BOOL WoemEnterDll(HINSTANCE DllHandle) { _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to copy the WinPcap OEM files. Administrative privileges are required for this operation.", DllFullPath); - unlink(DllFullPath); + _unlink(DllFullPath); ReleaseMutex(hMx); @@ -538,7 +545,7 @@ BOOL WoemEnterDll(HINSTANCE DllHandle) { _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to copy the WinPcap OEM files. Administrative privileges are required for this operation.", DllFullPath); - unlink(DllFullPath); + _unlink(DllFullPath); WoemReportError(); @@ -580,8 +587,8 @@ BOOL WoemEnterDll(HINSTANCE DllHandle) { _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "unable to create the packet driver service"); - unlink(DllFullPath); - unlink(DriverFullPath); + _unlink(DllFullPath); + _unlink(DriverFullPath); ReleaseMutex(hMx); @@ -610,8 +617,8 @@ BOOL WoemEnterDll(HINSTANCE DllHandle) _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "unable to start the packet driver service"); delete_service(NpfDrNameWhId); - unlink(DllFullPath); - unlink(DriverFullPath); + _unlink(DllFullPath); + _unlink(DriverFullPath); ReleaseMutex(hMx); @@ -649,8 +656,8 @@ BOOL WoemEnterDll(HINSTANCE DllHandle) _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "timeout while starting the packet driver"); delete_service(NpfDrNameWhId); - unlink(DllFullPath); - unlink(DriverFullPath); + _unlink(DllFullPath); + _unlink(DriverFullPath); ReleaseMutex(hMx); @@ -678,7 +685,7 @@ BOOL WoemEnterDll(HINSTANCE DllHandle) // // We've loaded the driver, we can delete its binary // - unlink(DriverFullPath); + _unlink(DriverFullPath); } // @@ -689,8 +696,8 @@ BOOL WoemEnterDll(HINSTANCE DllHandle) _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "unable to create binary names"); delete_service(NpfDrNameWhId); - unlink(DllFullPath); - unlink(DriverFullPath); + _unlink(DllFullPath); + _unlink(DriverFullPath); ReleaseMutex(hMx); @@ -719,8 +726,8 @@ BOOL WoemEnterDll(HINSTANCE DllHandle) _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "unable to load packet.dll"); delete_service(NpfDrNameWhId); - unlink(DllFullPath); - unlink(DriverFullPath); + _unlink(DllFullPath); + _unlink(DriverFullPath); ReleaseMutex(hMx); From cdc16736597c5f1a8db135e91794a72e367bc405 Mon Sep 17 00:00:00 2001 From: Loris Degioanni Date: Sun, 9 Oct 2005 23:11:47 +0000 Subject: [PATCH 025/316] Added support for the new PacketStartOem() function. --- OEM/WinpcapOem/WinpcapOem.def | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/OEM/WinpcapOem/WinpcapOem.def b/OEM/WinpcapOem/WinpcapOem.def index ba121505..eee872c0 100644 --- a/OEM/WinpcapOem/WinpcapOem.def +++ b/OEM/WinpcapOem/WinpcapOem.def @@ -32,4 +32,5 @@ EXPORTS PacketIsDumpEnded PacketSetLoopbackBehavior - PacketGetLastOemError \ No newline at end of file + PacketGetLastOemError + PacketStartOem \ No newline at end of file From 2be055aa4c999ffacf967c0c944716285fddbda7 Mon Sep 17 00:00:00 2001 From: Loris Degioanni Date: Sun, 9 Oct 2005 23:12:34 +0000 Subject: [PATCH 026/316] Added a postbuild stpe to copy some lib files to the winpcap folder. --- OEM/WinpcapOem/WinpcapOem.dsp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/OEM/WinpcapOem/WinpcapOem.dsp b/OEM/WinpcapOem/WinpcapOem.dsp index 61310e59..52be6a5c 100644 --- a/OEM/WinpcapOem/WinpcapOem.dsp +++ b/OEM/WinpcapOem/WinpcapOem.dsp @@ -57,6 +57,10 @@ BSC32=bscmake.exe LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 # ADD LINK32 npptools.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"Release/Packet.dll" /libpath:"..\..\WinpcapOem\Release\\" +# Begin Special Build Tool +SOURCE="$(InputPath)" +PostBuild_Cmds=postbuild.bat +# End Special Build Tool !ELSEIF "$(CFG)" == "WinpcapOem - Win32 Debug" @@ -84,6 +88,11 @@ BSC32=bscmake.exe LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib npptools.lib /nologo /dll /debug /machine:I386 /out:"Debug/Packet.dll" /pdbtype:sept +# Begin Special Build Tool +SOURCE="$(InputPath)" +PostBuild_Desc=Copying the OEM packet.lib in the winpcap folder +PostBuild_Cmds=postbuild.bat +# End Special Build Tool !ELSEIF "$(CFG)" == "WinpcapOem - Win32 Debug_Security" @@ -113,6 +122,10 @@ BSC32=bscmake.exe LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib npptools.lib /nologo /dll /debug /machine:I386 /out:"Debug/Packet.dll" /pdbtype:sept # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib npptools.lib /nologo /dll /debug /machine:I386 /out:"Debug_Security/Packet.dll" /pdbtype:sept +# Begin Special Build Tool +SOURCE="$(InputPath)" +PostBuild_Cmds=postbuild.bat +# End Special Build Tool !ELSEIF "$(CFG)" == "WinpcapOem - Win32 Release_Security" @@ -142,6 +155,10 @@ BSC32=bscmake.exe LINK32=link.exe # ADD BASE LINK32 npptools.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"Release/Packet.dll" /libpath:"..\..\WinpcapOem\Release\\" # ADD LINK32 npptools.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"Release_Security/Packet.dll" /libpath:"..\..\WinpcapOem\Release\\" +# Begin Special Build Tool +SOURCE="$(InputPath)" +PostBuild_Cmds=postbuild.bat +# End Special Build Tool !ENDIF From 07ff73ea96f3cc08c5acd165cacd6553de8be482 Mon Sep 17 00:00:00 2001 From: Loris Degioanni Date: Sun, 9 Oct 2005 23:13:16 +0000 Subject: [PATCH 027/316] Better error reporting. --- OEM/WinpcapOem/WinpcapOem.h | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/OEM/WinpcapOem/WinpcapOem.h b/OEM/WinpcapOem/WinpcapOem.h index 6bb249a2..69f20481 100644 --- a/OEM/WinpcapOem/WinpcapOem.h +++ b/OEM/WinpcapOem/WinpcapOem.h @@ -52,10 +52,10 @@ BOOL WoemCreateBinaryNames(); #ifdef DEBUGTRACE #define TracePrint printf -#define WoemReportError() MessageBox(NULL, LastWoemError, "WinPcap OEM error", MB_OK) +#define WoemReportError() {MessageBox(NULL, LastWoemError, "WinPcap OEM error", MB_OK); InitError = TRUE;} #else #define TracePrint -#define WoemReportError() +#define WoemReportError() {InitError = TRUE;} #endif // DEBUGTRACE #ifdef TRACE_MBOXES @@ -69,3 +69,7 @@ BOOL WoemCreateBinaryNames(); #else #define TraceEnter(X) #endif + +//////////////////////////////////////////////////////////////////// +// Error codes +//////////////////////////////////////////////////////////////////// From c1348c2127c2a5551fc60babc9f34527a630fceb Mon Sep 17 00:00:00 2001 From: Loris Degioanni Date: Mon, 10 Oct 2005 00:47:47 +0000 Subject: [PATCH 028/316] Added a second postbuild script for the relase version. --- OEM/WinpcapOem/postbuild_release.bat | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 OEM/WinpcapOem/postbuild_release.bat diff --git a/OEM/WinpcapOem/postbuild_release.bat b/OEM/WinpcapOem/postbuild_release.bat new file mode 100644 index 00000000..93a92d4c --- /dev/null +++ b/OEM/WinpcapOem/postbuild_release.bat @@ -0,0 +1,7 @@ +@echo off + +echo Copying dll files for debug +REM This copies are needed to debug all the stuff internally, in the cpcap output folders + +if exist debug\packet.lib xcopy debug\packet.lib ..\..\..\winpcap\common\ /v /y /q +if exist release\packet.lib xcopy release\packet.lib ..\..\..\winpcap\common\ /v /y /q From 19e89a64741189db569736b07690c488502e1575 Mon Sep 17 00:00:00 2001 From: Loris Degioanni Date: Mon, 10 Oct 2005 00:48:33 +0000 Subject: [PATCH 029/316] Completed the build instructions. --- OEM/Instructions.txt | 36 +++++++++++++++++++++++++++++++----- 1 file changed, 31 insertions(+), 5 deletions(-) diff --git a/OEM/Instructions.txt b/OEM/Instructions.txt index 6dfa11c2..12b94514 100644 --- a/OEM/Instructions.txt +++ b/OEM/Instructions.txt @@ -1,4 +1,31 @@ -Add the following lines to Win32-Extensions.c: +1. Download the winpcap_oem and winpcap CVS repositories and put them in the same folder + +2. Edit winpcap\Common\WpcapNames.h to set the name that this version of winpcap OEM + will have. + +3. Copy the PacketAndWan project from \winpcap_oem\packetNtx\Dll\Project\ to \winpcap\packetNtx\Dll\Project\ + +4. Copy Compile2k_oem.bat and CompileNT4_oem.bat from \winpcap_oem\packetNtx\ to \winpcap\packetNtx\ + +5. Build the Windows NT4 driver using CompileNT4_oem.bat. Build the Windows 2000 driver using Compile2k_oem.bat. + +6. build the Windows 2000 packet.dll using the PacketAndWan project + +7. build the Windows NT4 packet.dll using the standard project, selecting the following configuration: + +PacketNT - Win32 NT4 OEM + +8. Copy the drivers and dlls to WinpcapOem\binaries\ + +9. Open the WinpcapOem.dsw project file. This project can be used to build both the standard + and the security-enabled version of WinPcap OEM. The security-enabled version requires among + the resources the file with the checksums of the executables that will be accepted. + +10. Compile winpcap OEM. Be sure to do a "rebuild all", otherwise the resources will not be updated. + NOTE: the WinpcapOem.dsw build process will overwrite the packet.lib file in winpcap\common\. + The result of the buils process is the OEM version of packet.dll + +11. Add the following lines to wpcap's Win32-Extensions.c: int pcap_start_oem(char** err_str) { @@ -9,10 +36,9 @@ int pcap_start_oem(char** err_str) return 0; } ---------------------------------- - -Add the following line to the wpcap defs: +12. Add the following line to the wpcap def file: pcap_start_oem ---------------------------------- \ No newline at end of file +13. Recompile wpcap. + The result is the OEM version of wpcap.dll \ No newline at end of file From 1653a9a913424690b703878a470cb101b5de4003 Mon Sep 17 00:00:00 2001 From: Loris Degioanni Date: Mon, 10 Oct 2005 00:49:59 +0000 Subject: [PATCH 030/316] Fixes in the postbuild scripts. --- OEM/WinpcapOem/WinpcapOem.dsp | 2 +- OEM/WinpcapOem/postbuild.bat | 3 +-- OEM/WinpcapOem/postbuild_release.bat | 1 - 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/OEM/WinpcapOem/WinpcapOem.dsp b/OEM/WinpcapOem/WinpcapOem.dsp index 52be6a5c..1e10b8ec 100644 --- a/OEM/WinpcapOem/WinpcapOem.dsp +++ b/OEM/WinpcapOem/WinpcapOem.dsp @@ -59,7 +59,7 @@ LINK32=link.exe # ADD LINK32 npptools.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"Release/Packet.dll" /libpath:"..\..\WinpcapOem\Release\\" # Begin Special Build Tool SOURCE="$(InputPath)" -PostBuild_Cmds=postbuild.bat +PostBuild_Cmds=postbuild_release.bat # End Special Build Tool !ELSEIF "$(CFG)" == "WinpcapOem - Win32 Debug" diff --git a/OEM/WinpcapOem/postbuild.bat b/OEM/WinpcapOem/postbuild.bat index 449b92e2..6792abba 100644 --- a/OEM/WinpcapOem/postbuild.bat +++ b/OEM/WinpcapOem/postbuild.bat @@ -3,5 +3,4 @@ echo Copying dll files for debug REM This copies are needed to debug all the stuff internally, in the cpcap output folders -if exist debug\packet.lib copy debug\packet.lib ..\..\..\winpcap\common -if exist release\packet.lib copy release\packet.lib ..\..\..\winpcap\common +if exist debug\packet.lib xcopy debug\packet.lib ..\..\..\winpcap\common\ /v /y /q diff --git a/OEM/WinpcapOem/postbuild_release.bat b/OEM/WinpcapOem/postbuild_release.bat index 93a92d4c..14be7911 100644 --- a/OEM/WinpcapOem/postbuild_release.bat +++ b/OEM/WinpcapOem/postbuild_release.bat @@ -3,5 +3,4 @@ echo Copying dll files for debug REM This copies are needed to debug all the stuff internally, in the cpcap output folders -if exist debug\packet.lib xcopy debug\packet.lib ..\..\..\winpcap\common\ /v /y /q if exist release\packet.lib xcopy release\packet.lib ..\..\..\winpcap\common\ /v /y /q From 06b08e5ed4bc73bc91a71619bff2500ac603fa04 Mon Sep 17 00:00:00 2001 From: Loris Degioanni Date: Mon, 10 Oct 2005 00:50:39 +0000 Subject: [PATCH 031/316] Fixed a wrong function prototype. --- OEM/WinpcapOem/PacketWrapper.cpp | 4 +++- OEM/WinpcapOem/WinpcapOem.def | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/OEM/WinpcapOem/PacketWrapper.cpp b/OEM/WinpcapOem/PacketWrapper.cpp index 9cb7c876..b7834869 100644 --- a/OEM/WinpcapOem/PacketWrapper.cpp +++ b/OEM/WinpcapOem/PacketWrapper.cpp @@ -705,8 +705,10 @@ BOOLEAN PacketGetNetType(LPADAPTER AdapterObject, NetType *type) //--------------------------------------------------------------------------- // This public function enables winpcap oem -LONG PacketStartOem(PCHAR* ErrorString) +LONG PacketStartOem(PVOID Param) { + PCHAR* ErrorString = (PCHAR*)Param; + if(InitError) { if(ErrorString) diff --git a/OEM/WinpcapOem/WinpcapOem.def b/OEM/WinpcapOem/WinpcapOem.def index eee872c0..ce6499f0 100644 --- a/OEM/WinpcapOem/WinpcapOem.def +++ b/OEM/WinpcapOem/WinpcapOem.def @@ -33,4 +33,4 @@ EXPORTS PacketSetLoopbackBehavior PacketGetLastOemError - PacketStartOem \ No newline at end of file + PacketStartOem From f4461535b4398344204c5cc7639679366fe558eb Mon Sep 17 00:00:00 2001 From: Loris Degioanni Date: Thu, 27 Oct 2005 03:59:37 +0000 Subject: [PATCH 032/316] Improved the registry key organization. Now the structure is HKLM\\SOFTWARE\\CaceTech\\WinPcapOem\\\ --- OEM/WinpcapOem/PacketWrapper.cpp | 2 +- OEM/WinpcapOem/WinPcapOem.cpp | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/OEM/WinpcapOem/PacketWrapper.cpp b/OEM/WinpcapOem/PacketWrapper.cpp index b7834869..6ec58067 100644 --- a/OEM/WinpcapOem/PacketWrapper.cpp +++ b/OEM/WinpcapOem/PacketWrapper.cpp @@ -6,7 +6,7 @@ INT setProcAuthorization(); HMODULE PacketLib; BOOL StillToInit = TRUE; -BOOL OemActive = FALSE; +BOOL OemActive = FALSE; extern HINSTANCE DllHandle; extern char LastWoemError[]; extern BOOL InitError; diff --git a/OEM/WinpcapOem/WinPcapOem.cpp b/OEM/WinpcapOem/WinPcapOem.cpp index e128351d..ee0d5057 100644 --- a/OEM/WinpcapOem/WinPcapOem.cpp +++ b/OEM/WinpcapOem/WinPcapOem.cpp @@ -933,7 +933,7 @@ BOOL WoemCreateNameRegistryEntries() // if yes retrieve the id of the last loaded instance // if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, - WINPCAP_GLOBAL_KEY, + WINPCAP_INSTANCE_KEY, 0, KEY_ALL_ACCESS, &WinpcapKey) == ERROR_SUCCESS) @@ -958,13 +958,13 @@ BOOL WoemCreateNameRegistryEntries() // // Do a cleanup, just to be sure // - RegDeleteKey(HKEY_LOCAL_MACHINE, WINPCAP_GLOBAL_KEY); + RegDeleteKey(HKEY_LOCAL_MACHINE, WINPCAP_INSTANCE_KEY); // // Create the global WinPcap key // if(RegCreateKeyEx(HKEY_LOCAL_MACHINE, - WINPCAP_GLOBAL_KEY, + WINPCAP_INSTANCE_KEY, 0, NULL, REG_OPTION_NON_VOLATILE, @@ -1376,7 +1376,7 @@ BOOL WoemCreateBinaryNames() // if yes retrieve the id of the last loaded instance // if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, - WINPCAP_GLOBAL_KEY, + WINPCAP_INSTANCE_KEY, 0, KEY_ALL_ACCESS, &WinpcapKey) == ERROR_SUCCESS) @@ -1446,7 +1446,7 @@ BOOL WoemCreateBinaryNames() //////////////////////////////////////////////////////////////////// BOOL WoemDeleteNameRegistryEntries() { - if(RegDeleteKey(HKEY_LOCAL_MACHINE, WINPCAP_GLOBAL_KEY) != ERROR_SUCCESS) + if(RegDeleteKey(HKEY_LOCAL_MACHINE, WINPCAP_INSTANCE_KEY) != ERROR_SUCCESS) return FALSE; else return TRUE; From 712d3b2d0796546b34fb51adfb59c52e39ae2b96 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Fri, 28 Oct 2005 17:09:09 +0000 Subject: [PATCH 033/316] Added a new header containing all the code to trace the code on file or to OutputDebugString. --- OEM/WinpcapOem/WoemDebug.h | 226 +++++++++++++++++++++++++++++++++++++ 1 file changed, 226 insertions(+) create mode 100644 OEM/WinpcapOem/WoemDebug.h diff --git a/OEM/WinpcapOem/WoemDebug.h b/OEM/WinpcapOem/WoemDebug.h new file mode 100644 index 00000000..54b8201a --- /dev/null +++ b/OEM/WinpcapOem/WoemDebug.h @@ -0,0 +1,226 @@ +/* + * Copyright (c) 2005 + * CACE Technologies LLC, Davis (CA) + * All rights reserved. + * + */ + +#ifndef __WOEM_DEBUG_H_ +#define __WOEM_TRACE_H_ + +#include +#include + + +/*! + \brief Macro to print a debug string. The behavior differs depending on the debug level +*/ + +/*! + \brief Macro to print debug data with the printf convention. The behavior differs depending on + the debug level +*/ +static __inline void CreateMessageStringV(char *_x, va_list Marker, BOOL newLine, char* outBuffer, size_t outBufferSize) +{ + SYSTEMTIME LocalTime; + DWORD dwThreadId; + size_t currentLen; + + dwThreadId = GetCurrentThreadId(); + + GetLocalTime(&LocalTime); + + outBuffer[outBufferSize - 1] = '\0'; + + _snprintf(outBuffer, outBufferSize, "[%.08X] %.04u-%.02u-%.02u %.02u:%02u:%02u ", + dwThreadId, + LocalTime.wYear, + LocalTime.wMonth, + LocalTime.wDay, + LocalTime.wHour, + LocalTime.wMinute, + LocalTime.wSecond); + + currentLen = strlen(outBuffer); + + ::_vsnprintf(outBuffer + currentLen, outBufferSize - currentLen, _x, Marker); + + if (newLine) + { + currentLen = strlen(outBuffer); + + if (currentLen + 1 < outBufferSize) + { + outBuffer[currentLen] = '\n'; + outBuffer[currentLen + 1] = '\0'; + } + } +} + +static __inline void OutputDebugMessage(char *_x, ...) +{ +#ifdef _DEBUG_TO_FILE + FILE *f; + int loops; +#endif + + va_list Marker; + va_start(Marker, _x); + char message[1024]; + + CreateMessageStringV(_x, Marker, FALSE, message, sizeof(message)); + + +#ifdef _DEBUG_TO_FILE + do + { + f = fopen("woem_debug.txt", "a"); + if (f != NULL) + break; + + Sleep(0); + loops++; + + if (loops > 10) + return; + } + while(1); + + fputs(message, f); + + fclose(f); +#else + OutputDebugStringA(message); +#endif +} + +static __inline void OutputDebugMessageNewLine(char *_x, ...) +{ +#ifdef _DEBUG_TO_FILE + FILE *f; + int loops; +#endif + + va_list Marker; + va_start(Marker, _x); + char message[1024]; + + CreateMessageStringV(_x, Marker, TRUE, message, sizeof(message)); + + +#ifdef _DEBUG_TO_FILE + do + { + f = fopen("woem_debug.txt", "a"); + if (f != NULL) + break; + + Sleep(0); + loops++; + + if (loops > 10) + return; + } + while(1); + + fputs(message, f); + + fclose(f); +#else + OutputDebugStringA(message); +#endif + + +} + + +static __inline void TRACE_PRINT_OS_INFO() +{ + HKEY hKey; + CHAR buffer[1024]; + DWORD size = sizeof(buffer); + DWORD type; + + OutputDebugMessage("********************* OS info.********************* \n"); + buffer[size-1] = 0; + size = sizeof(buffer); + if( RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment", 0, KEY_READ, &hKey) == ERROR_SUCCESS) + { + if (RegQueryValueExA(hKey, "PROCESSOR_ARCHITECTURE", 0, &type, (LPBYTE)buffer, &size) == ERROR_SUCCESS && type == REG_SZ) + { + OutputDebugMessage("Architecture = %s\n", buffer); + } + else + { + OutputDebugMessage("Architecture = \n"); + } + + RegCloseKey(hKey); + } + else + { + OutputDebugMessage("Architecture = \n"); + } + + buffer[size-1] = 0; + size = sizeof(buffer); + + if( RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion", 0, KEY_READ, &hKey) == ERROR_SUCCESS) + { + if (RegQueryValueExA(hKey, "CurrentVersion", 0, &type, (LPBYTE)buffer, &size) == ERROR_SUCCESS && type == REG_SZ) + { + OutputDebugMessage("Windows version = %s\n", buffer); + } + else + { + OutputDebugMessage("Windows version = \n"); + } + + RegCloseKey(hKey); + } + else + { + OutputDebugMessage("Windows version = \n"); + } + + buffer[size-1] = 0; + size = sizeof(buffer); + if( RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion", 0, KEY_READ, &hKey) == ERROR_SUCCESS) + { + if (RegQueryValueExA(hKey, "CurrentType", 0, &type, (LPBYTE)buffer, &size) == ERROR_SUCCESS && type == REG_SZ) + { + OutputDebugMessage("Windows CurrentType = %s\n", buffer); + } + else + { + OutputDebugMessage("Windows CurrentType = \n"); + } + + RegCloseKey(hKey); + } + else + { + OutputDebugMessage("Windows CurrentType = \n"); + } + + OutputDebugMessage("*************************************************** \n"); + + +} + +#ifdef _DEBUG + +#define TRACE_ENTER(_x) OutputDebugMessageNewLine("-->" _x) +#define TRACE_EXIT(_x) OutputDebugMessageNewLine("<--" _x) +#define TRACE_MESSAGE OutputDebugMessageNewLine + +#else + +#define TRACE_ENTER(_x) do{}while(0) +#define TRACE_EXIT(_x) do{}while(0) + +static __inline void TRACE_MESSAGE(char *_x, ...){} + +#endif + +#endif //__WOEM_DEBUG_H_ \ No newline at end of file From 770209cce458d820607c732caceca63a83c98bce Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Fri, 28 Oct 2005 17:11:27 +0000 Subject: [PATCH 034/316] Added the usual #ifdef/#define at the beginning of the include file. Added the prototype for WoemGetResource here. Added the extern definitions for some global variables (still need to check their actual utility). Uncommented the old tracing APIs for WinPcapOem.cpp (still need to be converted to the new tracing API). --- OEM/WinpcapOem/WinpcapOem.h | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/OEM/WinpcapOem/WinpcapOem.h b/OEM/WinpcapOem/WinpcapOem.h index 69f20481..f83f397a 100644 --- a/OEM/WinpcapOem/WinpcapOem.h +++ b/OEM/WinpcapOem/WinpcapOem.h @@ -1,3 +1,8 @@ +#ifndef __WINPCAP_OEM_H_E4C69242_4757_4139_A7E4_CA06F37A5B73 +#define __WINPCAP_OEM_H_E4C69242_4757_4139_A7E4_CA06F37A5B73 + + + //////////////////////////////////////////////////////////////////// // Constants and names //////////////////////////////////////////////////////////////////// @@ -32,10 +37,18 @@ BOOL WoemLeaveDll(); void RegisterPacketUnloadHandler(void* Handler); #endif // STATIC_LIB +//////////////////////////////////////////////////////////////////// +// Global variables +/////////////////////////////////////////////////////////////////// +extern HINSTANCE g_DllHandle; +extern char g_LastWoemError[]; +extern BOOL g_InitError; + //////////////////////////////////////////////////////////////////// // Resources handling prototypes //////////////////////////////////////////////////////////////////// BOOL WoemSaveResourceToDisk(HINSTANCE hInst, int ResID, char* FileName); +BOOL WoemGetResource(HINSTANCE hInst, int ResID, LPVOID * lpResMem, LPDWORD dwResSize); //////////////////////////////////////////////////////////////////// // Registry and names-related functions @@ -47,24 +60,20 @@ BOOL WoemCreateBinaryNames(); // Debug definitions //////////////////////////////////////////////////////////////////// -//#define DEBUGTRACE -//#define TRACE_OUTPUTDEBUGSTRING +#define DEBUGTRACE +#define TRACE_OUTPUTDEBUGSTRING #ifdef DEBUGTRACE #define TracePrint printf -#define WoemReportError() {MessageBox(NULL, LastWoemError, "WinPcap OEM error", MB_OK); InitError = TRUE;} +#define WoemReportError() do{MessageBox(NULL, g_LastWoemError, "WinPcap OEM error", MB_OK); g_InitError = TRUE;} while(0) #else #define TracePrint -#define WoemReportError() {InitError = TRUE;} +#define WoemReportError() do{g_InitError = TRUE;}while(0) #endif // DEBUGTRACE #ifdef TRACE_MBOXES #define TraceEnter(X) MessageBox(NULL, X, "WinPcap OEM trace", MB_OK) -#else -#define TraceEnter(X) -#endif - -#ifdef TRACE_OUTPUTDEBUGSTRING +#elif defined TRACE_OUTPUTDEBUGSTRING #define TraceEnter(X) OutputDebugString(X) #else #define TraceEnter(X) @@ -73,3 +82,6 @@ BOOL WoemCreateBinaryNames(); //////////////////////////////////////////////////////////////////// // Error codes //////////////////////////////////////////////////////////////////// + + +#endif //__WINPCAP_OEM_H_E4C69242_4757_4139_A7E4_CA06F37A5B73 From 9f344c5ed56eec407844492366fe340f22de7f1d Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Fri, 28 Oct 2005 17:12:38 +0000 Subject: [PATCH 035/316] Added the usual #ifdef/#define at the beginning of the include file. Renamed getHash into GetHash. Added a parameter into GetHash containing the length of the input buffer for the hash. --- OEM/WinpcapOem/Crypto.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/OEM/WinpcapOem/Crypto.h b/OEM/WinpcapOem/Crypto.h index e4a1d817..d6fbc94b 100644 --- a/OEM/WinpcapOem/Crypto.h +++ b/OEM/WinpcapOem/Crypto.h @@ -1,5 +1,10 @@ +#ifndef __CRYPTO_H_0C32B20D_A87D_429D_A7E1_A4353B74F21A +#define __CRYPTO_H_0C32B20D_A87D_429D_A7E1_A4353B74F21A + #include #define CREDENTIAL_LEN 16 -INT getHash(LPCBYTE lpbData, DWORD dwDataLen, LPBYTE lpValue); +INT GetHash(LPCBYTE lpbData, DWORD dwDataLen, LPBYTE lpValue, DWORD dwValueLength); + +#endif //__CRYPTO_H_0C32B20D_A87D_429D_A7E1_A4353B74F21A \ No newline at end of file From f8b4e1e1f45a699dc934a6058b993a76140bea02 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Fri, 28 Oct 2005 17:15:07 +0000 Subject: [PATCH 036/316] General cleanup of the code: - fixed some handle leaks in case one of the Crypt APIs fail - moved all the tracing code to the new one provided by WoemDebug.h - fixed a problem with CryptAcquireContext: it should be called with the flag CRYPT_VERIFYCONTEXT in case we only want to compute Hash values. --- OEM/WinpcapOem/Crypto.cpp | 79 ++++++++++++++++++++++++++++++--------- 1 file changed, 61 insertions(+), 18 deletions(-) diff --git a/OEM/WinpcapOem/Crypto.cpp b/OEM/WinpcapOem/Crypto.cpp index d5c8ac66..1d69bc1b 100644 --- a/OEM/WinpcapOem/Crypto.cpp +++ b/OEM/WinpcapOem/Crypto.cpp @@ -2,45 +2,88 @@ #include #include "Crypto.h" +#include "WoemDebug.h" - -VOID ShowMessage(LPCSTR lpText, LPCSTR lpCaption); -INT Error(LPCSTR lpText, LPCSTR lpCaption, DWORD errorCode); - - -INT getHash(LPCBYTE lpbData, DWORD dwDataLen, LPBYTE lpValue) { +BOOL GetHash(LPCBYTE lpbData, DWORD dwDataLen, LPBYTE lpValue, DWORD dwValueLength) { DWORD dwBufferSize = sizeof(DWORD); DWORD dwHashSize; - HCRYPTPROV hCryptProv; - HCRYPTHASH hHash; + HCRYPTPROV hCryptProv = NULL; + HCRYPTHASH hHash = NULL; + +// TRACE_ENTER("GetHash"); // initialize hash object - if ( CryptAcquireContext(&hCryptProv, NULL, NULL, PROV_RSA_FULL, 0) == FALSE ) - return Error("Crypto.initHashObject", "Error in CryptAcquireContext!", GetLastError()); + if ( CryptAcquireContext(&hCryptProv, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT ) == FALSE ) + { + TRACE_MESSAGE("GetHash, Error in CryptAcquireContext [%.08x]", GetLastError()); + + TRACE_EXIT("GetHash"); + return FALSE; + } + + if ( CryptCreateHash(hCryptProv, CALG_MD5, 0, 0, &hHash) == FALSE ) - return Error("Crypto.initHashObject", "Error in CryptCreateHash!", GetLastError()); + { + TRACE_MESSAGE("GetHash, Error in CryptCreateHash [%.08x]", GetLastError()); + + CryptReleaseContext(hCryptProv, 0); + + TRACE_EXIT("GetHash"); + return FALSE; + } // add dump to hash object if ( CryptHashData(hHash, lpbData, dwDataLen, 0) == FALSE ) - return Error("Crypto.getHash", "Error in CryptCreateHash!", GetLastError()); + { + TRACE_MESSAGE("GetHash, Error in CryptHashData [%.08x]", GetLastError()); + + CryptDestroyHash(hHash); + CryptReleaseContext(hCryptProv, 0); + + TRACE_EXIT("GetHash"); + return FALSE; + } // get the size of the hash if ( CryptGetHashParam(hHash, HP_HASHSIZE, (BYTE*)&dwHashSize, &dwBufferSize, 0) == FALSE ) - return Error("Crypto.getHash", "Error in CryptGetHashParam!", GetLastError()); + { + TRACE_MESSAGE("GetHash, Error in CryptGetHashParam [%.08x]", GetLastError()); + + CryptDestroyHash(hHash); + CryptReleaseContext(hCryptProv, 0); + + TRACE_EXIT("GetHash"); + return FALSE; + } if ( dwHashSize != CREDENTIAL_LEN ) - return Error("Crypto.getHash", "Error for different size of hash value!", FALSE); + { + TRACE_MESSAGE("GetHash, Error for different size of hash value (CryptAPI says %d, we have %d)", dwHashSize, CREDENTIAL_LEN ); + + CryptDestroyHash(hHash); + CryptReleaseContext(hCryptProv, 0); + + TRACE_EXIT("GetHash"); + return FALSE; + } // get the hash of dump if ( CryptGetHashParam(hHash, HP_HASHVAL, lpValue, &dwHashSize, 0) == FALSE ) - return Error("Crypto.getHash", "Error in CryptGetHashParam!", GetLastError()); + { + TRACE_MESSAGE("GetHash, Error in CryptGetHashParam [%.08x]", GetLastError()); - // terminate hash object - if ( hHash ) CryptDestroyHash(hHash); - if ( hCryptProv ) CryptReleaseContext(hCryptProv, 0); + + TRACE_EXIT("GetHash"); + return FALSE; + } + + // terminate hash object + CryptDestroyHash(hHash); + CryptReleaseContext(hCryptProv, 0); + TRACE_EXIT("GetHash"); return TRUE; } From 1baa099c343d4b21509bd5b76088bf45ba3bff4a Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Fri, 28 Oct 2005 17:18:44 +0000 Subject: [PATCH 037/316] Added the usual #ifdef/#define at the beginning of the include file. Fixed the prototype and name of IsProcAuthorized. Fixed the prototype and name of setProcAuthorization (to WoemGerCurrentProcessAuthorization). Now it doesn't modify a global variable, but instead it returns an error code with the possible statuses: - authorization ok - authorization denied - failure in computing the authorization Added a comment for this function. Removed some function definitions (moved to WinpcapOem.h). --- OEM/WinpcapOem/Security.h | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/OEM/WinpcapOem/Security.h b/OEM/WinpcapOem/Security.h index e768f0e6..2ab10e24 100644 --- a/OEM/WinpcapOem/Security.h +++ b/OEM/WinpcapOem/Security.h @@ -1,7 +1,28 @@ +#ifndef __SECURITY_H_820D0C9F_A563_489b_834A_23FBB6C892F7 +#define __SECURITY_H_820D0C9F_A563_489b_834A_23FBB6C892F7 + #include -extern BOOL isProcAuthorized; +enum +{ + WOEM_PROC_AUTHORIZATION_OK, + WOEM_PROC_AUTHORIZATION_DENIED, + WOEM_PROC_AUTHORIZATION_FAILURE, +}; + +/*! + \brief verify if the current process is authorized to use WOEM + + \param errString A caller allocated string (with a minimum size of + \ref PACKET_ERRSTR_SIZE bytes), that will return a meaningful error + message in case the function returns WOEM_PROC_AUTHORIZATION_FAILURE. -INT setProcAuthorization(); + \return Possible return values are + - \ref WOEM_PROC_AUTHORIZATION_FAILURE An error occurred verifying the + authoerization. A more detailed error is detailed in errString + - \ref WOEM_PROC_AUTHORIZATION_OK The current process is authorized + - \ref WOEM_PROC_AUTHORIZATION_DENIED The current process is not authorized +*/ +INT WoemGetCurrentProcessAuthorization(char *errString); -BOOL WoemGetResource(HINSTANCE hInst, int ResID, LPVOID *lpResMem, LPDWORD dwResSize); \ No newline at end of file +#endif //#ifndef __SECURITY_H_820D0C9F_A563_489b_834A_23FBB6C892F7 From 63f2fc2a740e4e6e0d8c819da3502b1ac55e14d6 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Fri, 28 Oct 2005 17:21:50 +0000 Subject: [PATCH 038/316] Fixed the prototype and name of IsProcAuthorized. Fixed the prototype and name of setProcAuthorization (to WoemGerCurrentProcessAuthorization). Now it doesn't modify a global variable, but instead it returns an error code with the possible statuses: - authorization ok - authorization denied - failure in computing the authorization Added a comment for this function. Reviewed and rewrote all the functions in this file: - fixed a problem when the current process file was shorter than 10kB - moved all the tracing code to the new one provided by WoemDebug.h - removed some extern declarations. - made all the local functions static. - added some more error checks (some internal functions were called without checking for their return values). --- OEM/WinpcapOem/Security.cpp | 255 +++++++++++++++++++++++++----------- 1 file changed, 182 insertions(+), 73 deletions(-) diff --git a/OEM/WinpcapOem/Security.cpp b/OEM/WinpcapOem/Security.cpp index 99ccb1a7..76b68445 100644 --- a/OEM/WinpcapOem/Security.cpp +++ b/OEM/WinpcapOem/Security.cpp @@ -7,136 +7,245 @@ #include "resource.h" #include "Crypto.h" +#include "WinPcapOem.h" +#include "WoemDebug.h" + #define BUF_LEN 256 #define DUMP_LEN 1024*10 -#define MSG_BUF_LEN 255 - -BOOL isProcAuthorized = FALSE; - -extern HINSTANCE DllHandle; -INT getFileCredential(LPCSTR lpFilename, LPBYTE credential); -INT isCredentialValid(LPBYTE Credential); -INT getFileDump(LPCSTR lpFilename, LPBYTE dump, INT maxDumpLen); +extern HINSTANCE g_DllHandle; +static BOOL GetFileCredential(LPCSTR lpFilename, LPBYTE credential, DWORD credentialLength, char* errString); +static INT IsCredentialValid(LPBYTE credential, DWORD credentialLength); +static BOOL GetFileDump(LPCSTR lpFilename, LPBYTE dump, INT *pMaxDumpLen); -VOID ShowMessage(LPCSTR lpCaption, LPCSTR lpText) { - CHAR buf[MSG_BUF_LEN+1]; - _snprintf(buf, MSG_BUF_LEN, "%s: %s", lpCaption, lpText); - OutputDebugString(buf); -} - -INT Error(LPCSTR lpCaption, LPCSTR lpText, DWORD errorCode) { - CHAR buf[MSG_BUF_LEN+1]; - _snprintf(buf, MSG_BUF_LEN, "%s (errorcode: %d)", lpText, errorCode); - ShowMessage(lpCaption, lpText); - return errorCode; -} +/*! + \brief verify if the current process is authorized to use WOEM + \param errString A caller allocated string (with a minimum size of + \ref PACKET_ERRSTR_SIZE bytes), that will return a meaningful error + message in case the function returns WOEM_PROC_AUTHORIZATION_FAILURE. -// set the authorization flag for the current process -INT setProcAuthorization() { - CHAR filename[BUF_LEN]; + \return Possible return values are + - \ref WOEM_PROC_AUTHORIZATION_FAILURE An error occurred verifying the + authoerization. A more detailed error is detailed in errString + - \ref WOEM_PROC_AUTHORIZATION_OK The current process is authorized + - \ref WOEM_PROC_AUTHORIZATION_DENIED The current process is not authorized +*/ +INT WoemGetCurrentProcessAuthorization(char *errString) +{ + CHAR filename[MAX_PATH]; HMODULE procHandle; BYTE credential[CREDENTIAL_LEN]; + INT result; - ShowMessage("Security.setProcAuthorization", "--> START"); + TRACE_ENTER("WoemGetCurrentProcessAuthorization"); - // get the handle of the current process (NULL for the current process) + //handle of the process, NULL means "this process" procHandle = NULL; // get the name of the process image file - if ( GetModuleFileName(procHandle, filename, BUF_LEN) == FALSE ) { - return Error("Security.setProcAuthorization", "Error in GetModuleFileName!", GetLastError()); + if ( GetModuleFileName(procHandle, filename, MAX_PATH) == FALSE ) + { + _snprintf(errString, PACKET_ERRSTR_SIZE - 1,"WoemGetCurrentProcessAuthorization, Error retrieving the module filename with GetModuleFileName [%d].", GetLastError()); + errString[PACKET_ERRSTR_SIZE - 1] = 0; + + TRACE_MESSAGE(errString); + + TRACE_EXIT("WoemGetCurrentProcessAuthorization"); + return WOEM_PROC_AUTHORIZATION_FAILURE; } // get the credential of the process - getFileCredential(filename, credential); + if (GetFileCredential(filename, credential, sizeof(credential), errString) == FALSE) + { + TRACE_EXIT("WoemGetCurrentProcessAuthorization"); + return WOEM_PROC_AUTHORIZATION_FAILURE; + } // set the authorization flag - isCredentialValid(credential); + result = IsCredentialValid(credential, sizeof(credential)); - ShowMessage("Security.setProcAuthorization", "--> END"); + if (result == WOEM_PROC_AUTHORIZATION_FAILURE) + { + _snprintf(errString, PACKET_ERRSTR_SIZE - 1,"WoemGetCurrentProcessAuthorization, Error verifying the credentials of the current process"); + errString[PACKET_ERRSTR_SIZE - 1] = 0; + } - return TRUE; + TRACE_EXIT("WoemGetCurrentProcessAuthorization"); + + return result; } // get file credential -INT getFileCredential(LPCSTR lpFilename, LPBYTE credential) { - CHAR buf[MSG_BUF_LEN+1]; +BOOL GetFileCredential(LPCSTR lpFilename, LPBYTE credential, DWORD credentialLength, char* errString) +{ BYTE dump[DUMP_LEN]; + INT dumpSize; - _snprintf(buf, MSG_BUF_LEN, "Getting the dump of the file %s...", lpFilename); - ShowMessage("Security.getFileCredential", buf); + TRACE_ENTER("GetFileCredential"); + TRACE_MESSAGE("Getting the dump of the file %s...", lpFilename); // get the dump of the file - if ( getFileDump(lpFilename, dump, DUMP_LEN) == FALSE) - return Error("Security.getFileCredential", "Error in getFileDump!", GetLastError()); + dumpSize = sizeof(dump); + + if (GetFileDump(lpFilename, dump, &dumpSize) == FALSE) + { + _snprintf(errString, PACKET_ERRSTR_SIZE - 1,"GetFileCredential, error analyzing the process file."); + errString[PACKET_ERRSTR_SIZE - 1] = 0; + + TRACE_MESSAGE("GetFileCredential, error getting the file dump."); + TRACE_EXIT("GetFileCredential"); + return FALSE; + } - ShowMessage("Security.getFileCredential", "Getting the hash of the dump..."); - // get the hash of the dump - if ( getHash(dump, DUMP_LEN, credential) == FALSE ) - return Error("Security.getFileCredential", "Error in getHash!", GetLastError()); + TRACE_MESSAGE("GetFileCredential, Getting the hash of the dump..."); - _snprintf(buf, MSG_BUF_LEN, "Got the hash %.08x... of the file %s!", *((DWORD*)credential), lpFilename); - ShowMessage("Security.getFileCredential", buf); + // get the hash of the dump + if ( GetHash(dump, dumpSize, credential, credentialLength) == FALSE ) + { + _snprintf(errString, PACKET_ERRSTR_SIZE - 1,"GetFileCredential, error analyzing the process file."); + errString[PACKET_ERRSTR_SIZE - 1] = 0; + + TRACE_MESSAGE("GetFileCredential, error in getHash!"); + TRACE_EXIT("GetFileCredential"); + return FALSE; + } + + TRACE_MESSAGE("GetFileCredential, Got the hash %.08x... of the file %s!", *((DWORD*)credential), lpFilename); + TRACE_EXIT("GetFileCredential"); return TRUE; } -// check the credential of the file -INT isCredentialValid(LPBYTE credential) { - CHAR buf[MSG_BUF_LEN+1]; +/*! + \brief Verify that the given credential is valid, i.e. it's in the list + of valid ones in the resource file. + + \param credential Caller allocated buffer containing the credential to be verified + \param credentialLength Length of the credential to be verified + + \return Possible return values are + - \ref WOEM_PROC_AUTHORIZATION_FAILURE An error occurred verifying the + authoerization. + - \ref WOEM_PROC_AUTHORIZATION_OK The credential is authorized + - \ref WOEM_PROC_AUTHORIZATION_DENIED The credential is not authorized +*/ +INT IsCredentialValid(LPBYTE credential, DWORD credentialLength) +{ LPBYTE lpResMem; DWORD dwResSize; - DWORD dwResIndex=0; + + DWORD numCredentials; + DWORD credentialIndex; + + TRACE_ENTER("IsCredentialValid"); + + if (credentialLength != CREDENTIAL_LEN) + { + TRACE_MESSAGE("Security.IsCredentialValid, the credential does not have the right length!"); + TRACE_EXIT("IsCredentialValid"); + + return WOEM_PROC_AUTHORIZATION_FAILURE; + } // get the stored credential of the file - if ( WoemGetResource(DllHandle, HSH_AUTH_PROC, (void**)&lpResMem, &dwResSize) == FALSE ) - return Error("Security.isCredentialValid", "Error in WoemGetResource!", GetLastError()); + if (WoemGetResource(g_DllHandle, HSH_AUTH_PROC, (void**)&lpResMem, &dwResSize) == FALSE ) + { + TRACE_MESSAGE("Security.IsCredentialValid, Error in WoemGetResource [%.08x]!\n", GetLastError()); + TRACE_EXIT("IsCredentialValid"); + + return WOEM_PROC_AUTHORIZATION_FAILURE; + } - dwResSize=dwResSize/CREDENTIAL_LEN; + numCredentials = dwResSize/CREDENTIAL_LEN; - _snprintf(buf, MSG_BUF_LEN, "Read %d credentials (%d bytes) from resources!", dwResSize, dwResSize*CREDENTIAL_LEN); - ShowMessage("Security.isCredentialValid", buf); + TRACE_MESSAGE("Read %d credentials (%d bytes) from resources!", numCredentials, dwResSize); // compare the two credentials - for (dwResIndex=0; dwResIndex < dwResSize; dwResIndex++) { - _snprintf(buf, MSG_BUF_LEN, "Analyzing credential #%d (%.08x)...", dwResIndex+1, *((DWORD*)(lpResMem+dwResIndex*CREDENTIAL_LEN))); - ShowMessage("Security.isCredentialValid", buf); - if ( memcmp(credential, lpResMem+(dwResIndex*CREDENTIAL_LEN), CREDENTIAL_LEN) ==0 ) { - isProcAuthorized=TRUE; - ShowMessage("Security.isCredentialValid", "Found equal credential!"); - break; + for (credentialIndex = 0; credentialIndex < numCredentials; credentialIndex++) + { + TRACE_MESSAGE("IsCredentialValie, Analyzing credential #%d (%.08x)...", credentialIndex, *((DWORD*)(lpResMem+credentialIndex*CREDENTIAL_LEN))); + + if ( memcmp(credential, lpResMem+(credentialIndex * CREDENTIAL_LEN), CREDENTIAL_LEN) == 0 ) + { + TRACE_MESSAGE("Security.isCredentialValid, Found equal credential!"); + + TRACE_EXIT("IsCredentialValid"); + return WOEM_PROC_AUTHORIZATION_OK; } } - return TRUE; + TRACE_EXIT("IsCredentialValid"); + return WOEM_PROC_AUTHORIZATION_DENIED; } // get the dump of the file -INT getFileDump(LPCSTR lpFilename, LPBYTE dump, INT maxDumpLen) { - CHAR buf[MSG_BUF_LEN+1]; +BOOL GetFileDump(LPCSTR lpFilename, LPBYTE dump, INT *pMaxDumpLen) +{ FILE * fileHandle; INT byteRead; + BOOL fileError; + + TRACE_ENTER("GetFileDump"); - _snprintf(buf, MSG_BUF_LEN, "Opening the file %s...", lpFilename); - ShowMessage("Security.getFileDump", buf); + if (*pMaxDumpLen <= 0) + { + TRACE_MESSAGE("GetFileDump, MacDumpLen <= 0"); + TRACE_EXIT("GetFileDump"); + + return FALSE; + } + + TRACE_MESSAGE("Opening the file %s...", lpFilename); if ( (fileHandle = fopen(lpFilename, "rb")) == FALSE) - return Error("Security.getFileDump", "Error in _open!", GetLastError()); + { + TRACE_MESSAGE("GetFileDump, Error in fopen [%.08x]!", GetLastError()); + TRACE_EXIT("GetFileDump"); + + return FALSE; + } + + byteRead = 0; + fileError = FALSE; - _snprintf(buf, MSG_BUF_LEN, "Reading the file %s...", lpFilename); - ShowMessage("Security.getFileDump", buf); + TRACE_MESSAGE("Reading the file %s...", lpFilename); - byteRead=fread(dump, 1, maxDumpLen, fileHandle); + do + { + INT localBytesRead = fread(dump + byteRead, 1, *pMaxDumpLen - byteRead, fileHandle); + byteRead += localBytesRead; + + if (localBytesRead == 0) + { + if (feof(fileHandle)) + fileError = FALSE; + else + fileError = TRUE; + + break; + } + + } + while (byteRead < *pMaxDumpLen); + + fclose(fileHandle); + + TRACE_MESSAGE("GetFileDump, Read %d bytes from the file...", byteRead); + + if (fileError) + { + TRACE_MESSAGE("Error reading the bytes from the file."); + + TRACE_EXIT("GetFileDump"); + + return FALSE; + } - _snprintf(buf, MSG_BUF_LEN, "Read %d bytes from the file...", byteRead); - ShowMessage("Security.getFileDump", buf); + *pMaxDumpLen = byteRead; - if ( byteRead < maxDumpLen ) - if ( feof(fileHandle) == FALSE ) - return Error("Security.getFileDump", "Error in ReadFile!", GetLastError()); + TRACE_EXIT("GetFileDump"); return TRUE; } \ No newline at end of file From ce674421a2b481958f480f95c023998dcc7ef9aa Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Fri, 28 Oct 2005 17:23:23 +0000 Subject: [PATCH 039/316] Renamed all the global variables to g_. Moved all the extern declarations to WinPcapOem.h. --- OEM/WinpcapOem/PacketWrapper.cpp | 133 +++++++++++++++---------------- 1 file changed, 65 insertions(+), 68 deletions(-) diff --git a/OEM/WinpcapOem/PacketWrapper.cpp b/OEM/WinpcapOem/PacketWrapper.cpp index 6ec58067..01676eaf 100644 --- a/OEM/WinpcapOem/PacketWrapper.cpp +++ b/OEM/WinpcapOem/PacketWrapper.cpp @@ -6,10 +6,7 @@ INT setProcAuthorization(); HMODULE PacketLib; BOOL StillToInit = TRUE; -BOOL OemActive = FALSE; -extern HINSTANCE DllHandle; -extern char LastWoemError[]; -extern BOOL InitError; +BOOL OemActive = FALSE; //--------------------------------------------------------------------------- // PUBLIC PACKET.DLL API WRAPPERS - HANDLERS @@ -91,7 +88,7 @@ PCHAR PacketGetVersion() // if(StillToInit) { - if(!WoemEnterDll(DllHandle)) + if(!WoemEnterDll(g_DllHandle)) { return "failed to load packet.dll"; } @@ -111,7 +108,7 @@ PCHAR PacketGetDriverVersion() // if(StillToInit) { - if(!WoemEnterDll(DllHandle)) + if(!WoemEnterDll(g_DllHandle)) { return "failed to load packet.dll"; } @@ -135,7 +132,7 @@ BOOL PacketStopDriver() // if(StillToInit) { - if(!WoemEnterDll(DllHandle)) + if(!WoemEnterDll(g_DllHandle)) { return FALSE; } @@ -157,7 +154,7 @@ LPADAPTER PacketOpenAdapter(PCHAR AdapterName) { if(StillToInit) { - if(!WoemEnterDll(DllHandle)) + if(!WoemEnterDll(g_DllHandle)) { return NULL; } @@ -182,7 +179,7 @@ VOID PacketCloseAdapter(LPADAPTER lpAdapter) // if(StillToInit) { - if(!WoemEnterDll(DllHandle)) + if(!WoemEnterDll(g_DllHandle)) { return; } @@ -202,7 +199,7 @@ LPPACKET PacketAllocatePacket(void) // if(StillToInit) { - if(!WoemEnterDll(DllHandle)) + if(!WoemEnterDll(g_DllHandle)) { return NULL; } @@ -222,7 +219,7 @@ VOID PacketFreePacket(LPPACKET lpPacket) // if(StillToInit) { - if(!WoemEnterDll(DllHandle)) + if(!WoemEnterDll(g_DllHandle)) { return; } @@ -242,7 +239,7 @@ VOID PacketInitPacket(LPPACKET lpPacket,PVOID Buffer,UINT Length) // if(StillToInit) { - if(!WoemEnterDll(DllHandle)) + if(!WoemEnterDll(g_DllHandle)) { return; } @@ -262,7 +259,7 @@ BOOLEAN PacketReceivePacket(LPADAPTER AdapterObject,LPPACKET lpPacket,BOOLEAN Sy // if(StillToInit) { - if(!WoemEnterDll(DllHandle)) + if(!WoemEnterDll(g_DllHandle)) { return FALSE; } @@ -282,7 +279,7 @@ BOOLEAN PacketSendPacket(LPADAPTER AdapterObject,LPPACKET lpPacket,BOOLEAN Sync) // if(StillToInit) { - if(!WoemEnterDll(DllHandle)) + if(!WoemEnterDll(g_DllHandle)) { return FALSE; } @@ -302,7 +299,7 @@ INT PacketSendPackets(LPADAPTER AdapterObject, PVOID PacketBuff, ULONG Size, BOO // if(StillToInit) { - if(!WoemEnterDll(DllHandle)) + if(!WoemEnterDll(g_DllHandle)) { return 0; } @@ -322,7 +319,7 @@ BOOLEAN PacketSetMinToCopy(LPADAPTER AdapterObject,int nbytes) // if(StillToInit) { - if(!WoemEnterDll(DllHandle)) + if(!WoemEnterDll(g_DllHandle)) { return FALSE; } @@ -342,7 +339,7 @@ BOOLEAN PacketSetMode(LPADAPTER AdapterObject,int mode) // if(StillToInit) { - if(!WoemEnterDll(DllHandle)) + if(!WoemEnterDll(g_DllHandle)) { return FALSE; } @@ -362,7 +359,7 @@ BOOLEAN PacketSetDumpName(LPADAPTER AdapterObject, void *name, int len) // if(StillToInit) { - if(!WoemEnterDll(DllHandle)) + if(!WoemEnterDll(g_DllHandle)) { return FALSE; } @@ -382,7 +379,7 @@ BOOLEAN PacketSetDumpLimits(LPADAPTER AdapterObject, UINT maxfilesize, UINT maxn // if(StillToInit) { - if(!WoemEnterDll(DllHandle)) + if(!WoemEnterDll(g_DllHandle)) { return FALSE; } @@ -402,7 +399,7 @@ BOOLEAN PacketIsDumpEnded(LPADAPTER AdapterObject, BOOLEAN sync) // if(StillToInit) { - if(!WoemEnterDll(DllHandle)) + if(!WoemEnterDll(g_DllHandle)) { return FALSE; } @@ -422,7 +419,7 @@ HANDLE PacketGetReadEvent(LPADAPTER AdapterObject) // if(StillToInit) { - if(!WoemEnterDll(DllHandle)) + if(!WoemEnterDll(g_DllHandle)) { return NULL; } @@ -442,7 +439,7 @@ BOOLEAN PacketSetNumWrites(LPADAPTER AdapterObject,int nwrites) // if(StillToInit) { - if(!WoemEnterDll(DllHandle)) + if(!WoemEnterDll(g_DllHandle)) { return FALSE; } @@ -462,7 +459,7 @@ BOOLEAN PacketSetReadTimeout(LPADAPTER AdapterObject,int timeout) // if(StillToInit) { - if(!WoemEnterDll(DllHandle)) + if(!WoemEnterDll(g_DllHandle)) { return FALSE; } @@ -482,7 +479,7 @@ BOOLEAN PacketSetBuff(LPADAPTER AdapterObject,int dim) // if(StillToInit) { - if(!WoemEnterDll(DllHandle)) + if(!WoemEnterDll(g_DllHandle)) { return FALSE; } @@ -502,7 +499,7 @@ BOOLEAN PacketSetBpf(LPADAPTER AdapterObject, struct bpf_program *fp) // if(StillToInit) { - if(!WoemEnterDll(DllHandle)) + if(!WoemEnterDll(g_DllHandle)) { return FALSE; } @@ -522,7 +519,7 @@ BOOLEAN PacketSetLoopbackBehavior(LPADAPTER AdapterObject, UINT LoopbackBehavio // if(StillToInit) { - if(!WoemEnterDll(DllHandle)) + if(!WoemEnterDll(g_DllHandle)) { return FALSE; } @@ -542,7 +539,7 @@ INT PacketSetSnapLen(LPADAPTER AdapterObject, int snaplen) // if(StillToInit) { - if(!WoemEnterDll(DllHandle)) + if(!WoemEnterDll(g_DllHandle)) { return 0; } @@ -562,7 +559,7 @@ BOOLEAN PacketGetStats(LPADAPTER AdapterObject,struct bpf_stat *s) // if(StillToInit) { - if(!WoemEnterDll(DllHandle)) + if(!WoemEnterDll(g_DllHandle)) { return FALSE; } @@ -582,7 +579,7 @@ BOOLEAN PacketGetStatsEx(LPADAPTER AdapterObject,struct bpf_stat *s) // if(StillToInit) { - if(!WoemEnterDll(DllHandle)) + if(!WoemEnterDll(g_DllHandle)) { return FALSE; } @@ -602,7 +599,7 @@ BOOLEAN PacketRequest(LPADAPTER AdapterObject,BOOLEAN Set,PPACKET_OID_DATA Oid // if(StillToInit) { - if(!WoemEnterDll(DllHandle)) + if(!WoemEnterDll(g_DllHandle)) { return FALSE; } @@ -622,7 +619,7 @@ BOOLEAN PacketSetHwFilter(LPADAPTER AdapterObject,ULONG Filter) // if(StillToInit) { - if(!WoemEnterDll(DllHandle)) + if(!WoemEnterDll(g_DllHandle)) { return FALSE; } @@ -644,7 +641,7 @@ BOOLEAN PacketGetAdapterNames(PTSTR pStr,PULONG BufferSize) // if(StillToInit) { - if(!WoemEnterDll(DllHandle)) + if(!WoemEnterDll(g_DllHandle)) { *BufferSize = 0; return FALSE; @@ -669,7 +666,7 @@ BOOLEAN PacketGetNetInfoEx(PCHAR AdapterName, npf_if_addr* buffer, PLONG NEntrie // if(StillToInit) { - if(!WoemEnterDll(DllHandle)) + if(!WoemEnterDll(g_DllHandle)) { return FALSE; } @@ -689,7 +686,7 @@ BOOLEAN PacketGetNetType(LPADAPTER AdapterObject, NetType *type) // if(StillToInit) { - if(!WoemEnterDll(DllHandle)) + if(!WoemEnterDll(g_DllHandle)) { return FALSE; } @@ -709,11 +706,11 @@ LONG PacketStartOem(PVOID Param) { PCHAR* ErrorString = (PCHAR*)Param; - if(InitError) + if(g_InitError) { if(ErrorString) { - *ErrorString = LastWoemError; + *ErrorString = g_LastWoemError; } return 0; @@ -726,7 +723,7 @@ LONG PacketStartOem(PVOID Param) // Return the last WinPcap OEM error PCHAR PacketGetLastOemError() { - return LastWoemError; + return g_LastWoemError; } //--------------------------------------------------------------------------- @@ -743,7 +740,7 @@ BOOL LoadPacketDll(char *PacketDllFileName) // if((PacketLib = LoadLibrary(PacketDllFileName)) == NULL) { - _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to initialize the Packet.dll dynamic library"); + _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to initialize the Packet.dll dynamic library"); WoemReportError(); return FALSE; } @@ -754,7 +751,7 @@ BOOL LoadPacketDll(char *PacketDllFileName) PacketGetVersionH = (PacketGetVersionHandler) GetProcAddress(PacketLib, "PacketGetVersion"); if(!PacketGetVersionH) { - _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 1)"); + _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 1)"); WoemReportError(); return FALSE; } @@ -762,7 +759,7 @@ BOOL LoadPacketDll(char *PacketDllFileName) PacketGetDriverVersionH = (PacketGetDriverVersionHandler) GetProcAddress(PacketLib, "PacketGetDriverVersion"); if(!PacketGetDriverVersionH) { - _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 2)"); + _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 2)"); WoemReportError(); return FALSE; } @@ -770,7 +767,7 @@ BOOL LoadPacketDll(char *PacketDllFileName) PacketStopDriverH = (PacketStopDriverHandler) GetProcAddress(PacketLib, "PacketStopDriver"); if(!PacketStopDriverH) { - _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 3)"); + _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 3)"); WoemReportError(); return FALSE; } @@ -778,7 +775,7 @@ BOOL LoadPacketDll(char *PacketDllFileName) PacketOpenAdapterH = (PacketOpenAdapterHandler) GetProcAddress(PacketLib, "PacketOpenAdapter"); if(!PacketOpenAdapterH) { - _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 4)"); + _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 4)"); WoemReportError(); return FALSE; } @@ -786,7 +783,7 @@ BOOL LoadPacketDll(char *PacketDllFileName) PacketCloseAdapterH = (PacketCloseAdapterHandler) GetProcAddress(PacketLib, "PacketCloseAdapter"); if(!PacketCloseAdapterH) { - _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 5)"); + _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 5)"); WoemReportError(); return FALSE; } @@ -794,7 +791,7 @@ BOOL LoadPacketDll(char *PacketDllFileName) PacketAllocatePacketH = (PacketAllocatePacketHandler) GetProcAddress(PacketLib, "PacketAllocatePacket"); if(!PacketAllocatePacketH) { - _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 6)"); + _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 6)"); WoemReportError(); return FALSE; } @@ -802,7 +799,7 @@ BOOL LoadPacketDll(char *PacketDllFileName) PacketFreePacketH = (PacketFreePacketHandler) GetProcAddress(PacketLib, "PacketFreePacket"); if(!PacketFreePacketH) { - _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 7)"); + _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 7)"); WoemReportError(); return FALSE; } @@ -810,7 +807,7 @@ BOOL LoadPacketDll(char *PacketDllFileName) PacketInitPacketH = (PacketInitPacketHandler) GetProcAddress(PacketLib, "PacketInitPacket"); if(!PacketInitPacketH) { - _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 8)"); + _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 8)"); WoemReportError(); return FALSE; } @@ -818,7 +815,7 @@ BOOL LoadPacketDll(char *PacketDllFileName) PacketReceivePacketH = (PacketReceivePacketHandler) GetProcAddress(PacketLib, "PacketReceivePacket"); if(!PacketReceivePacketH) { - _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 9)"); + _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 9)"); WoemReportError(); return FALSE; } @@ -826,7 +823,7 @@ BOOL LoadPacketDll(char *PacketDllFileName) PacketSendPacketH = (PacketSendPacketHandler) GetProcAddress(PacketLib, "PacketSendPacket"); if(!PacketSendPacketH) { - _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 10)"); + _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 10)"); WoemReportError(); return FALSE; } @@ -834,7 +831,7 @@ BOOL LoadPacketDll(char *PacketDllFileName) PacketSendPacketsH = (PacketSendPacketsHandler) GetProcAddress(PacketLib, "PacketSendPackets"); if(!PacketSendPacketsH) { - _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 11)"); + _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 11)"); WoemReportError(); return FALSE; } @@ -842,7 +839,7 @@ BOOL LoadPacketDll(char *PacketDllFileName) PacketSetMinToCopyH = (PacketSetMinToCopyHandler) GetProcAddress(PacketLib, "PacketSetMinToCopy"); if(!PacketSetMinToCopyH) { - _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 12)"); + _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 12)"); WoemReportError(); return FALSE; } @@ -850,7 +847,7 @@ BOOL LoadPacketDll(char *PacketDllFileName) PacketSetModeH = (PacketSetModeHandler) GetProcAddress(PacketLib, "PacketSetMode"); if(!PacketSetModeH) { - _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 12a)"); + _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 12a)"); WoemReportError(); return FALSE; } @@ -858,7 +855,7 @@ BOOL LoadPacketDll(char *PacketDllFileName) PacketSetDumpNameH = (PacketSetDumpNameHandler) GetProcAddress(PacketLib, "PacketSetDumpName"); if(!PacketSetDumpNameH) { - _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 13)"); + _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 13)"); WoemReportError(); return FALSE; } @@ -866,7 +863,7 @@ BOOL LoadPacketDll(char *PacketDllFileName) PacketSetDumpLimitsH = (PacketSetDumpLimitsHandler) GetProcAddress(PacketLib, "PacketSetDumpLimits"); if(!PacketSetDumpLimitsH) { - _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 14)"); + _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 14)"); WoemReportError(); return FALSE; } @@ -874,7 +871,7 @@ BOOL LoadPacketDll(char *PacketDllFileName) PacketIsDumpEndedH = (PacketIsDumpEndedHandler) GetProcAddress(PacketLib, "PacketIsDumpEnded"); if(!PacketIsDumpEndedH) { - _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 15)"); + _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 15)"); WoemReportError(); return FALSE; } @@ -882,7 +879,7 @@ BOOL LoadPacketDll(char *PacketDllFileName) PacketGetReadEventH = (PacketGetReadEventHandler) GetProcAddress(PacketLib, "PacketGetReadEvent"); if(!PacketGetReadEventH) { - _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 16)"); + _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 16)"); WoemReportError(); return FALSE; } @@ -890,7 +887,7 @@ BOOL LoadPacketDll(char *PacketDllFileName) PacketSetNumWritesH = (PacketSetNumWritesHandler) GetProcAddress(PacketLib, "PacketSetNumWrites"); if(!PacketSetNumWritesH) { - _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 17)"); + _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 17)"); WoemReportError(); return FALSE; } @@ -898,7 +895,7 @@ BOOL LoadPacketDll(char *PacketDllFileName) PacketSetReadTimeoutH = (PacketSetReadTimeoutHandler) GetProcAddress(PacketLib, "PacketSetReadTimeout"); if(!PacketSetReadTimeoutH) { - _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 18)"); + _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 18)"); WoemReportError(); return FALSE; } @@ -906,7 +903,7 @@ BOOL LoadPacketDll(char *PacketDllFileName) PacketSetBuffH = (PacketSetBuffHandler) GetProcAddress(PacketLib, "PacketSetBuff"); if(!PacketSetBuffH) { - _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 19)"); + _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 19)"); WoemReportError(); return FALSE; } @@ -914,7 +911,7 @@ BOOL LoadPacketDll(char *PacketDllFileName) PacketSetBpfH = (PacketSetBpfHandler) GetProcAddress(PacketLib, "PacketSetBpf"); if(!PacketSetBpfH) { - _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 20)"); + _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 20)"); WoemReportError(); return FALSE; } @@ -922,7 +919,7 @@ BOOL LoadPacketDll(char *PacketDllFileName) PacketSetSnapLenH = (PacketSetSnapLenHandler) GetProcAddress(PacketLib, "PacketSetSnapLen"); if(!PacketSetSnapLenH) { - _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 21)"); + _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 21)"); WoemReportError(); return FALSE; } @@ -930,7 +927,7 @@ BOOL LoadPacketDll(char *PacketDllFileName) PacketGetStatsH = (PacketGetStatsHandler) GetProcAddress(PacketLib, "PacketGetStats"); if(!PacketGetStatsH) { - _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 22)"); + _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 22)"); WoemReportError(); return FALSE; } @@ -938,7 +935,7 @@ BOOL LoadPacketDll(char *PacketDllFileName) PacketGetStatsExH = (PacketGetStatsExHandler) GetProcAddress(PacketLib, "PacketGetStatsEx"); if(!PacketGetStatsExH) { - _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 23)"); + _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 23)"); WoemReportError(); return FALSE; } @@ -946,7 +943,7 @@ BOOL LoadPacketDll(char *PacketDllFileName) PacketRequestH = (PacketRequestHandler) GetProcAddress(PacketLib, "PacketRequest"); if(!PacketRequestH) { - _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 24)"); + _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 24)"); WoemReportError(); return FALSE; } @@ -954,7 +951,7 @@ BOOL LoadPacketDll(char *PacketDllFileName) PacketSetHwFilterH = (PacketSetHwFilterHandler) GetProcAddress(PacketLib, "PacketSetHwFilter"); if(!PacketSetHwFilterH) { - _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 25)"); + _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 25)"); WoemReportError(); return FALSE; } @@ -962,7 +959,7 @@ BOOL LoadPacketDll(char *PacketDllFileName) PacketGetAdapterNamesH = (PacketGetAdapterNamesHandler) GetProcAddress(PacketLib, "PacketGetAdapterNames"); if(!PacketGetAdapterNamesH) { - _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 26)"); + _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 26)"); WoemReportError(); return FALSE; } @@ -970,7 +967,7 @@ BOOL LoadPacketDll(char *PacketDllFileName) PacketGetNetInfoExH = (PacketGetNetInfoExHandler) GetProcAddress(PacketLib, "PacketGetNetInfoEx"); if(!PacketGetNetInfoExH) { - _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 27)"); + _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 27)"); WoemReportError(); return FALSE; } @@ -978,7 +975,7 @@ BOOL LoadPacketDll(char *PacketDllFileName) PacketGetNetTypeH = (PacketGetNetTypeHandler) GetProcAddress(PacketLib, "PacketGetNetType"); if(!PacketGetNetTypeH) { - _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 28)"); + _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 28)"); WoemReportError(); return FALSE; } @@ -987,7 +984,7 @@ BOOL LoadPacketDll(char *PacketDllFileName) PacketRegWoemLeaveHandlerH = (PacketRegWoemLeaveHandlerHandler) GetProcAddress(PacketLib, "PacketRegWoemLeaveHandler"); if(!PacketRegWoemLeaveHandlerH) { - _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 29)"); + _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 29)"); WoemReportError(); return FALSE; } From f1a7fc4f6cfb2293792519af0d9c4bc32b248798 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Fri, 28 Oct 2005 17:44:27 +0000 Subject: [PATCH 040/316] Renamed all the global variables to g_. Moved the check for the hash of the current process from the DllEntry to WoemEnterDll (since it's not safe to call functions outside kernel32.dll from a DllEntry, as documented in MSDN). Fixed some wrong error reporting functions. Substituted some explicit strings "SOFTWARE\\\\CACEWinPcap" with the proper define (WINPCAP_INSTANCE_KEY). --- OEM/WinpcapOem/WinPcapOem.cpp | 615 ++++++++++++++++++---------------- 1 file changed, 320 insertions(+), 295 deletions(-) diff --git a/OEM/WinpcapOem/WinPcapOem.cpp b/OEM/WinpcapOem/WinPcapOem.cpp index ee0d5057..08883e53 100644 --- a/OEM/WinpcapOem/WinPcapOem.cpp +++ b/OEM/WinpcapOem/WinPcapOem.cpp @@ -9,42 +9,43 @@ #include "Security.h" #endif -HANDLE hMx = NULL, hSp = NULL; -char SysDir[MAX_PATH + 16]; -char SemName[MAX_OBJNAME_LEN]; -char DllFullPath[MAX_PATH + 16]; -char DriverFullPath[MAX_PATH + 16]; -char NpfDrNameWhId[32]; -WCHAR NpfDrNameWhIdW[32]; -HINSTANCE DllHandle = NULL; -char LastWoemError[PACKET_ERRSTR_SIZE]; -BOOL InitError = FALSE; +HANDLE g_hGlobalMutex = NULL; +HANDLE g_hGlobalSemaphore = NULL; +char g_SysDir[MAX_PATH + 16]; +char g_GlobalSemaphoreName[MAX_OBJNAME_LEN]; +char g_DllFullPath[MAX_PATH + 16]; +char g_DriverFullPath[MAX_PATH + 16]; +char g_NpfDriverNameId[32]; +WCHAR g_NpfDriverNameIdW[32]; +HINSTANCE g_DllHandle = NULL; +char g_LastWoemError[PACKET_ERRSTR_SIZE]; +BOOL g_InitError = FALSE; extern BOOL OemActive; +BOOL g_IsProcAuthorized = FALSE; //////////////////////////////////////////////////////////////////// // DLL Entry point //////////////////////////////////////////////////////////////////// BOOL APIENTRY DllMain(HINSTANCE Dllh, DWORD Reason, LPVOID lpReserved) { - switch(Reason) + switch(Reason) { - + case DLL_PROCESS_ATTACH: - - DllHandle = Dllh; - + + g_DllHandle = Dllh; + #ifdef SECURITY // // the version with security enabled doesn't need to be activated with PacketStartOem() // OemActive = TRUE; - setProcAuthorization(); #endif - + break; case DLL_PROCESS_DETACH: - + WoemLeaveDll(); break; @@ -102,32 +103,56 @@ BOOL WoemEnterDll(HINSTANCE DllHandle) char SvcBin[MAX_PATH + 16]; OSVERSIONINFO osVer; HRESULT hr; +#ifdef SECURITY + DWORD Result; +#endif #ifdef SECURITY - if ( !isProcAuthorized ) { - MessageBox(NULL, "This version of WinPcap OEM can be only run in conjunction with CACE Technologies Network Toolkit. This program is not recognized as part of The Network Toolkit, and therefore WinPcap OEM will not work.", "Error", MB_ICONERROR); - return FALSE; - } + if (!g_IsProcAuthorized) + { + // + // the version with security enabled doesn't need to be activated with PacketStartOem() + // + OemActive = TRUE; + Result = WoemGetCurrentProcessAuthorization(g_LastWoemError); + + if (Result == WOEM_PROC_AUTHORIZATION_FAILURE) + { + g_InitError = TRUE; + g_IsProcAuthorized = FALSE; + } + else + if (Result == WOEM_PROC_AUTHORIZATION_OK) + { + g_IsProcAuthorized = TRUE; + } + else + { + g_IsProcAuthorized = FALSE; + MessageBox(NULL, "This version of WinPcap OEM can be only run in conjunction with CACE Technologies Network Toolkit. This program is not recognized as part of The Network Toolkit, and therefore WinPcap OEM will not work.", "Error", MB_ICONERROR); + return FALSE; + } + } #endif #ifndef STATIC_LIB // // This should REALLY never happen // - if(!DllHandle) + if(!g_DllHandle) { - _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "NULL DLL Handle"); + _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "NULL DLL Handle"); WoemReportError(); return FALSE; } #endif - if(hMx) + if(g_hGlobalMutex) { // // This should never happen, but better to be sure... // - _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Double initialization"); + _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Double initialization"); WoemReportError(); return FALSE; } @@ -146,15 +171,15 @@ BOOL WoemEnterDll(HINSTANCE DllHandle) // Get the MUTEX // _snprintf(ObjName, MAX_OBJNAME_LEN, MUTEX_NAME); - hMx = CreateMutex(&sa, FALSE, getObjectName(ObjName, MAX_OBJNAME_LEN)); - if (hMx == NULL) + g_hGlobalMutex = CreateMutex(&sa, FALSE, getObjectName(ObjName, MAX_OBJNAME_LEN)); + if (g_hGlobalMutex == NULL) { if (GetLastError()==5) { - _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "not enough priviles to start the packet driver"); + _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "not enough priviles to start the packet driver"); } - _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "unable to create the global mutex"); + _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "unable to create the global mutex"); WoemReportError(); @@ -168,30 +193,30 @@ BOOL WoemEnterDll(HINSTANCE DllHandle) do { - DWORD result=WaitForSingleObject(hMx,10000); + DWORD result=WaitForSingleObject(g_hGlobalMutex,10000); switch(result) { case WAIT_FAILED: - ReleaseMutex(hMx); + ReleaseMutex(g_hGlobalMutex); - if(hMx!=0) + if(g_hGlobalMutex!=0) { - CloseHandle(hMx); - hMx = NULL; + CloseHandle(g_hGlobalMutex); + g_hGlobalMutex = NULL; } - if (hSp!=0) + if (g_hGlobalSemaphore!=0) { - CloseHandle(hSp); - hSp = NULL; + CloseHandle(g_hGlobalSemaphore); + g_hGlobalSemaphore = NULL; } return FALSE; case WAIT_TIMEOUT: - _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Timeout on the global mutex"); + _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Timeout on the global mutex"); WoemReportError(); break; @@ -215,33 +240,33 @@ BOOL WoemEnterDll(HINSTANCE DllHandle) // // Get the semaphore // - _snprintf(SemName, MAX_OBJNAME_LEN, SEMAPHORE_NAME); - hSp = CreateSemaphore(&sa, 0, MAX_VALUE_SEMAPHORE, getObjectName(SemName, MAX_OBJNAME_LEN)); - if (hSp == NULL) + _snprintf(g_GlobalSemaphoreName, MAX_OBJNAME_LEN, SEMAPHORE_NAME); + g_hGlobalSemaphore = CreateSemaphore(&sa, 0, MAX_VALUE_SEMAPHORE, getObjectName(g_GlobalSemaphoreName, MAX_OBJNAME_LEN)); + if (g_hGlobalSemaphore == NULL) { if (GetLastError()==5) { - _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "not enough priviles to start the packet driver"); + _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "not enough priviles to start the packet driver"); } else { - _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "unable to create the global semaphore"); + _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "unable to create the global semaphore"); } - ReleaseMutex(hMx); + ReleaseMutex(g_hGlobalMutex); WoemReportError(); - if(hMx!=0) + if(g_hGlobalMutex!=0) { - CloseHandle(hMx); - hMx = NULL; + CloseHandle(g_hGlobalMutex); + g_hGlobalMutex = NULL; } - if (hSp!=0) + if (g_hGlobalSemaphore!=0) { - CloseHandle(hSp); - hSp = NULL; + CloseHandle(g_hGlobalSemaphore); + g_hGlobalSemaphore = NULL; } return FALSE; @@ -250,24 +275,24 @@ BOOL WoemEnterDll(HINSTANCE DllHandle) // // Check the value of the semaphore // - if(ReleaseSemaphore(hSp, 1, &lold)==FALSE) + if(ReleaseSemaphore(g_hGlobalSemaphore, 1, &lold)==FALSE) { - _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "unable to release the semaphore"); + _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "unable to release the semaphore"); - ReleaseMutex(hMx); + ReleaseMutex(g_hGlobalMutex); WoemReportError(); - if(hMx!=0) + if(g_hGlobalMutex!=0) { - CloseHandle(hMx); - hMx = NULL; + CloseHandle(g_hGlobalMutex); + g_hGlobalMutex = NULL; } - if (hSp!=0) + if (g_hGlobalSemaphore!=0) { - CloseHandle(hSp); - hSp = NULL; + CloseHandle(g_hGlobalSemaphore); + g_hGlobalSemaphore = NULL; } return FALSE; @@ -287,22 +312,22 @@ BOOL WoemEnterDll(HINSTANCE DllHandle) if (GetVersionEx(&osVer)==0) { - _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to determine OS version"); + _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to determine OS version"); - ReleaseMutex(hMx); + ReleaseMutex(g_hGlobalMutex); WoemReportError(); - if(hMx!=0) + if(g_hGlobalMutex!=0) { - CloseHandle(hMx); - hMx = NULL; + CloseHandle(g_hGlobalMutex); + g_hGlobalMutex = NULL; } - if (hSp!=0) + if (g_hGlobalSemaphore!=0) { - CloseHandle(hSp); - hSp = NULL; + CloseHandle(g_hGlobalSemaphore); + g_hGlobalSemaphore = NULL; } return FALSE; @@ -313,22 +338,22 @@ BOOL WoemEnterDll(HINSTANCE DllHandle) // if(!WoemCreateNameRegistryEntries()) { - _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "unable to create registry entries. Administrator provileges are required for this operation"); + _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "unable to create registry entries. Administrator provileges are required for this operation"); - ReleaseMutex(hMx); + ReleaseMutex(g_hGlobalMutex); WoemReportError(); - if(hMx!=0) + if(g_hGlobalMutex!=0) { - CloseHandle(hMx); - hMx = NULL; + CloseHandle(g_hGlobalMutex); + g_hGlobalMutex = NULL; } - if (hSp!=0) + if (g_hGlobalSemaphore!=0) { - CloseHandle(hSp); - hSp = NULL; + CloseHandle(g_hGlobalSemaphore); + g_hGlobalSemaphore = NULL; } return FALSE; @@ -336,34 +361,34 @@ BOOL WoemEnterDll(HINSTANCE DllHandle) if(!WoemCreateBinaryNames()) { - _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "unable to create binary names"); + _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "unable to create binary names"); - ReleaseMutex(hMx); + ReleaseMutex(g_hGlobalMutex); WoemReportError(); - if(hMx!=0) + if(g_hGlobalMutex!=0) { - CloseHandle(hMx); - hMx = NULL; + CloseHandle(g_hGlobalMutex); + g_hGlobalMutex = NULL; } - if (hSp!=0) + if (g_hGlobalSemaphore!=0) { - CloseHandle(hSp); - hSp = NULL; + CloseHandle(g_hGlobalSemaphore); + g_hGlobalSemaphore = NULL; } return FALSE; } - if(check_if_service_is_running(NpfDrNameWhId) == 0) + if(check_if_service_is_running(g_NpfDriverNameId) == 0) { // // If we are here and the service is running, it's almost surely the result // of some mess. We try to cleanup. // - delete_service(NpfDrNameWhId); + delete_service(g_NpfDriverNameId); } // @@ -378,24 +403,24 @@ BOOL WoemEnterDll(HINSTANCE DllHandle) // // Extract packet.dll to disk // - if(!WoemSaveResourceToDisk(DllHandle, IDP_DLLNT, DllFullPath)) + if(!WoemSaveResourceToDisk(g_DllHandle, IDP_DLLNT, g_DllFullPath)) { - _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to copy the WinPcap OEM files. Administrative privileges are required for this operation.", DllFullPath); + _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to copy the WinPcap OEM files. Administrative privileges are required for this operation.", g_DllFullPath); - ReleaseMutex(hMx); + ReleaseMutex(g_hGlobalMutex); WoemReportError(); - if(hMx!=0) + if(g_hGlobalMutex!=0) { - CloseHandle(hMx); - hMx = NULL; + CloseHandle(g_hGlobalMutex); + g_hGlobalMutex = NULL; } - if (hSp!=0) + if (g_hGlobalSemaphore!=0) { - CloseHandle(hSp); - hSp = NULL; + CloseHandle(g_hGlobalSemaphore); + g_hGlobalSemaphore = NULL; } return FALSE; @@ -404,26 +429,26 @@ BOOL WoemEnterDll(HINSTANCE DllHandle) // // Extract the driver to disk // - if(!WoemSaveResourceToDisk(DllHandle, IDP_DRINT, DriverFullPath)) + if(!WoemSaveResourceToDisk(g_DllHandle, IDP_DRINT, g_DriverFullPath)) { - _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to copy the WinPcap OEM files. Administrative privileges are required for this operation.", DllFullPath); + _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to copy the WinPcap OEM files. Administrative privileges are required for this operation.", g_DllFullPath); - _unlink(DllFullPath); + _unlink(g_DllFullPath); - ReleaseMutex(hMx); + ReleaseMutex(g_hGlobalMutex); WoemReportError(); - if(hMx!=0) + if(g_hGlobalMutex!=0) { - CloseHandle(hMx); - hMx = NULL; + CloseHandle(g_hGlobalMutex); + g_hGlobalMutex = NULL; } - if (hSp!=0) + if (g_hGlobalSemaphore!=0) { - CloseHandle(hSp); - hSp = NULL; + CloseHandle(g_hGlobalSemaphore); + g_hGlobalSemaphore = NULL; } return FALSE; @@ -443,7 +468,7 @@ BOOL WoemEnterDll(HINSTANCE DllHandle) hr = HrInstallNetMonProtocol(); if (hr != S_OK) { - _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Warning: unable to load the netmon driver, ndiswan captures will not be available"); + _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Warning: unable to load the netmon driver, ndiswan captures will not be available"); WoemReportError(); } } @@ -455,24 +480,24 @@ BOOL WoemEnterDll(HINSTANCE DllHandle) // // Extract packet.dll to disk // - if(!WoemSaveResourceToDisk(DllHandle, IDP_DLL2K, DllFullPath)) + if(!WoemSaveResourceToDisk(g_DllHandle, IDP_DLL2K, g_DllFullPath)) { - _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to copy the WinPcap OEM files. Administrative privileges are required for this operation.", DllFullPath); + _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to copy the WinPcap OEM files. Administrative privileges are required for this operation."); - ReleaseMutex(hMx); + ReleaseMutex(g_hGlobalMutex); WoemReportError(); - if(hMx!=0) + if(g_hGlobalMutex!=0) { - CloseHandle(hMx); - hMx = NULL; + CloseHandle(g_hGlobalMutex); + g_hGlobalMutex = NULL; } - if (hSp!=0) + if (g_hGlobalSemaphore!=0) { - CloseHandle(hSp); - hSp = NULL; + CloseHandle(g_hGlobalSemaphore); + g_hGlobalSemaphore = NULL; } return FALSE; @@ -481,26 +506,26 @@ BOOL WoemEnterDll(HINSTANCE DllHandle) // // Extract the driver to disk // - if(!WoemSaveResourceToDisk(DllHandle, IDP_DRI2K, DriverFullPath)) + if(!WoemSaveResourceToDisk(g_DllHandle, IDP_DRI2K, g_DriverFullPath)) { - _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to copy the WinPcap OEM files. Administrative privileges are required for this operation.", DllFullPath); + _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to copy the WinPcap OEM files. Administrative privileges are required for this operation.", g_DllFullPath); - _unlink(DllFullPath); + _unlink(g_DllFullPath); - ReleaseMutex(hMx); + ReleaseMutex(g_hGlobalMutex); WoemReportError(); - if(hMx!=0) + if(g_hGlobalMutex!=0) { - CloseHandle(hMx); - hMx = NULL; + CloseHandle(g_hGlobalMutex); + g_hGlobalMutex = NULL; } - if (hSp!=0) + if (g_hGlobalSemaphore!=0) { - CloseHandle(hSp); - hSp = NULL; + CloseHandle(g_hGlobalSemaphore); + g_hGlobalSemaphore = NULL; } return FALSE; @@ -515,24 +540,24 @@ BOOL WoemEnterDll(HINSTANCE DllHandle) // // Extract packet.dll to disk // - if(!WoemSaveResourceToDisk(DllHandle, IDP_DLL2K, DllFullPath)) + if(!WoemSaveResourceToDisk(g_DllHandle, IDP_DLL2K, g_DllFullPath)) { - _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to copy the WinPcap OEM files. Administrative privileges are required for this operation.", DllFullPath); + _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to copy the WinPcap OEM files. Administrative privileges are required for this operation.", g_DllFullPath); - ReleaseMutex(hMx); + ReleaseMutex(g_hGlobalMutex); WoemReportError(); - if(hMx!=0) + if(g_hGlobalMutex!=0) { - CloseHandle(hMx); - hMx = NULL; + CloseHandle(g_hGlobalMutex); + g_hGlobalMutex = NULL; } - if (hSp!=0) + if (g_hGlobalSemaphore!=0) { - CloseHandle(hSp); - hSp = NULL; + CloseHandle(g_hGlobalSemaphore); + g_hGlobalSemaphore = NULL; } return FALSE; @@ -541,26 +566,26 @@ BOOL WoemEnterDll(HINSTANCE DllHandle) // // Extract the driver to disk // - if(!WoemSaveResourceToDisk(DllHandle, IDP_DRI2K, DriverFullPath)) + if(!WoemSaveResourceToDisk(g_DllHandle, IDP_DRI2K, g_DriverFullPath)) { - _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to copy the WinPcap OEM files. Administrative privileges are required for this operation.", DllFullPath); + _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to copy the WinPcap OEM files. Administrative privileges are required for this operation."); - _unlink(DllFullPath); + _unlink(g_DllFullPath); WoemReportError(); - ReleaseMutex(hMx); + ReleaseMutex(g_hGlobalMutex); - if(hMx!=0) + if(g_hGlobalMutex!=0) { - CloseHandle(hMx); - hMx = NULL; + CloseHandle(g_hGlobalMutex); + g_hGlobalMutex = NULL; } - if (hSp!=0) + if (g_hGlobalSemaphore!=0) { - CloseHandle(hSp); - hSp = NULL; + CloseHandle(g_hGlobalSemaphore); + g_hGlobalSemaphore = NULL; } return FALSE; @@ -574,36 +599,36 @@ BOOL WoemEnterDll(HINSTANCE DllHandle) _snprintf(SvcDesc, sizeof(SvcDesc) - 1, "WinPcap Packet Driver (%s)", - NpfDrNameWhId); + g_NpfDriverNameId); _snprintf(SvcBin, sizeof(SvcDesc) - 1, "system32\\drivers\\%s.sys", - NpfDrNameWhId); + g_NpfDriverNameId); - if(create_driver_service(NpfDrNameWhId, + if(create_driver_service(g_NpfDriverNameId, SvcDesc, SvcBin) == -1) { - _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "unable to create the packet driver service"); + _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "unable to create the packet driver service"); - _unlink(DllFullPath); - _unlink(DriverFullPath); + _unlink(g_DllFullPath); + _unlink(g_DriverFullPath); - ReleaseMutex(hMx); + ReleaseMutex(g_hGlobalMutex); WoemReportError(); - if(hMx!=0) + if(g_hGlobalMutex!=0) { - CloseHandle(hMx); - hMx = NULL; + CloseHandle(g_hGlobalMutex); + g_hGlobalMutex = NULL; } - if (hSp!=0) + if (g_hGlobalSemaphore!=0) { - CloseHandle(hSp); - hSp = NULL; + CloseHandle(g_hGlobalSemaphore); + g_hGlobalSemaphore = NULL; } return FALSE; @@ -612,28 +637,28 @@ BOOL WoemEnterDll(HINSTANCE DllHandle) // // Load the driver // - if(start_service(NpfDrNameWhId) == -1) + if(start_service(g_NpfDriverNameId) == -1) { - _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "unable to start the packet driver service"); + _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "unable to start the packet driver service"); - delete_service(NpfDrNameWhId); - _unlink(DllFullPath); - _unlink(DriverFullPath); + delete_service(g_NpfDriverNameId); + _unlink(g_DllFullPath); + _unlink(g_DriverFullPath); - ReleaseMutex(hMx); + ReleaseMutex(g_hGlobalMutex); WoemReportError(); - if(hMx!=0) + if(g_hGlobalMutex!=0) { - CloseHandle(hMx); - hMx = NULL; + CloseHandle(g_hGlobalMutex); + g_hGlobalMutex = NULL; } - if (hSp!=0) + if (g_hGlobalSemaphore!=0) { - CloseHandle(hSp); - hSp = NULL; + CloseHandle(g_hGlobalSemaphore); + g_hGlobalSemaphore = NULL; } return FALSE; @@ -645,7 +670,7 @@ BOOL WoemEnterDll(HINSTANCE DllHandle) i = 0; while(TRUE) { - if(check_if_service_is_running(NpfDrNameWhId) == 0) + if(check_if_service_is_running(g_NpfDriverNameId) == 0) { break; } @@ -653,26 +678,26 @@ BOOL WoemEnterDll(HINSTANCE DllHandle) i++; if(i == 300) { - _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "timeout while starting the packet driver"); + _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "timeout while starting the packet driver"); - delete_service(NpfDrNameWhId); - _unlink(DllFullPath); - _unlink(DriverFullPath); + delete_service(g_NpfDriverNameId); + _unlink(g_DllFullPath); + _unlink(g_DriverFullPath); - ReleaseMutex(hMx); + ReleaseMutex(g_hGlobalMutex); WoemReportError(); - if(hMx!=0) + if(g_hGlobalMutex!=0) { - CloseHandle(hMx); - hMx = NULL; + CloseHandle(g_hGlobalMutex); + g_hGlobalMutex = NULL; } - if (hSp!=0) + if (g_hGlobalSemaphore!=0) { - CloseHandle(hSp); - hSp = NULL; + CloseHandle(g_hGlobalSemaphore); + g_hGlobalSemaphore = NULL; } return FALSE; @@ -685,7 +710,7 @@ BOOL WoemEnterDll(HINSTANCE DllHandle) // // We've loaded the driver, we can delete its binary // - _unlink(DriverFullPath); + _unlink(g_DriverFullPath); } // @@ -693,26 +718,26 @@ BOOL WoemEnterDll(HINSTANCE DllHandle) // if(!WoemCreateBinaryNames()) { - _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "unable to create binary names"); + _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "unable to create binary names"); - delete_service(NpfDrNameWhId); - _unlink(DllFullPath); - _unlink(DriverFullPath); + delete_service(g_NpfDriverNameId); + _unlink(g_DllFullPath); + _unlink(g_DriverFullPath); - ReleaseMutex(hMx); + ReleaseMutex(g_hGlobalMutex); WoemReportError(); - if(hMx!=0) + if(g_hGlobalMutex!=0) { - CloseHandle(hMx); - hMx = NULL; + CloseHandle(g_hGlobalMutex); + g_hGlobalMutex = NULL; } - if (hSp!=0) + if (g_hGlobalSemaphore!=0) { - CloseHandle(hSp); - hSp = NULL; + CloseHandle(g_hGlobalSemaphore); + g_hGlobalSemaphore = NULL; } return FALSE; @@ -721,28 +746,28 @@ BOOL WoemEnterDll(HINSTANCE DllHandle) // // Load packet.dll and intercept all the calls // - if(!LoadPacketDll(DllFullPath)) + if(!LoadPacketDll(g_DllFullPath)) { - _snprintf(LastWoemError, PACKET_ERRSTR_SIZE - 1, "unable to load packet.dll"); + _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "unable to load packet.dll"); - delete_service(NpfDrNameWhId); - _unlink(DllFullPath); - _unlink(DriverFullPath); + delete_service(g_NpfDriverNameId); + _unlink(g_DllFullPath); + _unlink(g_DriverFullPath); - ReleaseMutex(hMx); + ReleaseMutex(g_hGlobalMutex); WoemReportError(); - if(hMx!=0) + if(g_hGlobalMutex!=0) { - CloseHandle(hMx); - hMx = NULL; + CloseHandle(g_hGlobalMutex); + g_hGlobalMutex = NULL; } - if (hSp!=0) + if (g_hGlobalSemaphore!=0) { - CloseHandle(hSp); - hSp = NULL; + CloseHandle(g_hGlobalSemaphore); + g_hGlobalSemaphore = NULL; } return FALSE; @@ -758,12 +783,12 @@ BOOL WoemEnterDll(HINSTANCE DllHandle) // // Schedule the deletion of the dll. It will go away at the next reboot // - DeleteDll(DllFullPath); + DeleteDll(g_DllFullPath); // // Done. We can release the MUTEX // - ReleaseMutex(hMx); + ReleaseMutex(g_hGlobalMutex); return TRUE; } @@ -782,21 +807,21 @@ BOOL WoemLeaveDll() retry = TRUE; do { - DWORD result=WaitForSingleObject(hMx, 10000); + DWORD result=WaitForSingleObject(g_hGlobalMutex, 10000); switch(result) { case WAIT_FAILED: - if(hMx!=0) + if(g_hGlobalMutex!=0) { - CloseHandle(hMx); - hMx = NULL; + CloseHandle(g_hGlobalMutex); + g_hGlobalMutex = NULL; } - if (hSp!=0) + if (g_hGlobalSemaphore!=0) { - CloseHandle(hSp); - hSp = NULL; + CloseHandle(g_hGlobalSemaphore); + g_hGlobalSemaphore = NULL; } return FALSE; @@ -815,20 +840,20 @@ BOOL WoemLeaveDll() // // See if the semaphore count is 1 // - if(WaitForSingleObject(hSp, 0) == WAIT_FAILED) + if(WaitForSingleObject(g_hGlobalSemaphore, 0) == WAIT_FAILED) { - ReleaseMutex(hMx); + ReleaseMutex(g_hGlobalMutex); - if(hMx!=0) + if(g_hGlobalMutex!=0) { - CloseHandle(hMx); - hMx = NULL; + CloseHandle(g_hGlobalMutex); + g_hGlobalMutex = NULL; } - if (hSp!=0) + if (g_hGlobalSemaphore!=0) { - CloseHandle(hSp); - hSp = NULL; + CloseHandle(g_hGlobalSemaphore); + g_hGlobalSemaphore = NULL; } return FALSE; @@ -837,7 +862,7 @@ BOOL WoemLeaveDll() // // Now check if we would block on the semaphore // - result = WaitForSingleObject(hSp, 0); + result = WaitForSingleObject(g_hGlobalSemaphore, 0); switch (result) { @@ -847,43 +872,43 @@ BOOL WoemLeaveDll() // IF WE ARE HERE, THE DLL IS BEING UNLOADED FOR THE LAST TIME. // - delete_service(NpfDrNameWhId); + delete_service(g_NpfDriverNameId); break; case WAIT_FAILED: - ReleaseMutex(hMx); + ReleaseMutex(g_hGlobalMutex); - if(hMx!=0) + if(g_hGlobalMutex!=0) { - CloseHandle(hMx); - hMx = NULL; + CloseHandle(g_hGlobalMutex); + g_hGlobalMutex = NULL; } - if (hSp!=0) + if (g_hGlobalSemaphore!=0) { - CloseHandle(hSp); - hSp = NULL; + CloseHandle(g_hGlobalSemaphore); + g_hGlobalSemaphore = NULL; } return FALSE; case WAIT_OBJECT_0: - if (ReleaseSemaphore(hSp,1,NULL) == FALSE) + if (ReleaseSemaphore(g_hGlobalSemaphore,1,NULL) == FALSE) { - ReleaseMutex(hMx); + ReleaseMutex(g_hGlobalMutex); - if(hMx!=0) + if(g_hGlobalMutex!=0) { - CloseHandle(hMx); - hMx = NULL; + CloseHandle(g_hGlobalMutex); + g_hGlobalMutex = NULL; } - if (hSp!=0) + if (g_hGlobalSemaphore!=0) { - CloseHandle(hSp); - hSp = NULL; + CloseHandle(g_hGlobalSemaphore); + g_hGlobalSemaphore = NULL; } return FALSE; @@ -895,21 +920,21 @@ BOOL WoemLeaveDll() // // Release the MUTEX // - ReleaseMutex(hMx); + ReleaseMutex(g_hGlobalMutex); // // We're done, close the handles // - if(hMx!=0) + if(g_hGlobalMutex!=0) { - CloseHandle(hMx); - hMx = NULL; + CloseHandle(g_hGlobalMutex); + g_hGlobalMutex = NULL; } - if (hSp!=0) + if (g_hGlobalSemaphore!=0) { - CloseHandle(hSp); - hSp = NULL; + CloseHandle(g_hGlobalSemaphore); + g_hGlobalSemaphore = NULL; } return TRUE; @@ -993,7 +1018,7 @@ BOOL WoemCreateNameRegistryEntries() { RegCloseKey(WinpcapKey); - RegDeleteKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\CaceWinPcap"); + RegDeleteKey(HKEY_LOCAL_MACHINE, WINPCAP_INSTANCE_KEY); return FALSE; } @@ -1015,13 +1040,13 @@ BOOL WoemCreateNameRegistryEntries() NPF_DRIVER_NAME_WIDECHAR, DriverId); */ - _snprintf(NpfDrNameWhId, - sizeof(NpfDrNameWhId) - 1, + _snprintf(g_NpfDriverNameId, + sizeof(g_NpfDriverNameId) - 1, "%s", NPF_DRIVER_NAME); - _snwprintf(NpfDrNameWhIdW, - sizeof(NpfDrNameWhIdW) / sizeof(WCHAR) - 1, + _snwprintf(g_NpfDriverNameIdW, + sizeof(g_NpfDriverNameIdW) / sizeof(WCHAR) - 1, L"%ws", NPF_DRIVER_NAME_WIDECHAR); @@ -1038,12 +1063,12 @@ BOOL WoemCreateNameRegistryEntries() "npf_driver_name", 0, REG_BINARY, - (LPBYTE)NpfDrNameWhId, - strlen(NpfDrNameWhId) + 1) != ERROR_SUCCESS) + (LPBYTE)g_NpfDriverNameId, + strlen(g_NpfDriverNameId) + 1) != ERROR_SUCCESS) { RegCloseKey(WinpcapKey); - RegDeleteKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\CaceWinPcap"); + RegDeleteKey(HKEY_LOCAL_MACHINE, WINPCAP_INSTANCE_KEY); return FALSE; } @@ -1056,12 +1081,12 @@ BOOL WoemCreateNameRegistryEntries() "npf_driver_name_widechar", 0, REG_BINARY, - (LPBYTE)NpfDrNameWhIdW, - (wcslen(NpfDrNameWhIdW) + 1) * sizeof(WCHAR)) != ERROR_SUCCESS) + (LPBYTE)g_NpfDriverNameIdW, + (wcslen(g_NpfDriverNameIdW) + 1) * sizeof(WCHAR)) != ERROR_SUCCESS) { RegCloseKey(WinpcapKey); - RegDeleteKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\CaceWinPcap"); + RegDeleteKey(HKEY_LOCAL_MACHINE, WINPCAP_INSTANCE_KEY); return FALSE; } @@ -1074,7 +1099,7 @@ BOOL WoemCreateNameRegistryEntries() sizeof(KeyValBufW) / sizeof(WCHAR) - 1, L"%ws (%ws)", NPF_SERVICE_DESC_WIDECHAR, - NpfDrNameWhIdW); + g_NpfDriverNameIdW); if(RegSetValueEx(WinpcapKey, "npf_service_desc_widechar", @@ -1085,7 +1110,7 @@ BOOL WoemCreateNameRegistryEntries() { RegCloseKey(WinpcapKey); - RegDeleteKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\CaceWinPcap"); + RegDeleteKey(HKEY_LOCAL_MACHINE, WINPCAP_INSTANCE_KEY); return FALSE; } @@ -1097,7 +1122,7 @@ BOOL WoemCreateNameRegistryEntries() _snwprintf(KeyValBufW, sizeof(KeyValBufW) / sizeof(WCHAR) - 1, L"SYSTEM\\CurrentControlSet\\Services\\%ws", - NpfDrNameWhIdW); + g_NpfDriverNameIdW); if(RegSetValueEx(WinpcapKey, "npf_service_registry_location_widechar", @@ -1108,7 +1133,7 @@ BOOL WoemCreateNameRegistryEntries() { RegCloseKey(WinpcapKey); - RegDeleteKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\CaceWinPcap"); + RegDeleteKey(HKEY_LOCAL_MACHINE, WINPCAP_INSTANCE_KEY); return FALSE; } @@ -1120,7 +1145,7 @@ BOOL WoemCreateNameRegistryEntries() _snprintf(KeyValBuf, sizeof(KeyValBuf) / sizeof(CHAR) - 1, "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\%s", - NpfDrNameWhId); + g_NpfDriverNameId); if(RegSetValueEx(WinpcapKey, "npf_complete_service_registry_location", @@ -1131,7 +1156,7 @@ BOOL WoemCreateNameRegistryEntries() { RegCloseKey(WinpcapKey); - RegDeleteKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\CaceWinPcap"); + RegDeleteKey(HKEY_LOCAL_MACHINE, WINPCAP_INSTANCE_KEY); return FALSE; } @@ -1146,7 +1171,7 @@ BOOL WoemCreateNameRegistryEntries() { RegCloseKey(WinpcapKey); - RegDeleteKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\CaceWinPcap"); + RegDeleteKey(HKEY_LOCAL_MACHINE, WINPCAP_INSTANCE_KEY); return FALSE; } @@ -1158,7 +1183,7 @@ BOOL WoemCreateNameRegistryEntries() _snwprintf(KeyValBufW, sizeof(KeyValBufW) / sizeof(WCHAR) - 1, L"%ws.sys", - NpfDrNameWhIdW); + g_NpfDriverNameIdW); if(RegSetValueEx(WinpcapKey, "npf_driver_binary_widechar", @@ -1169,7 +1194,7 @@ BOOL WoemCreateNameRegistryEntries() { RegCloseKey(WinpcapKey); - RegDeleteKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\CaceWinPcap"); + RegDeleteKey(HKEY_LOCAL_MACHINE, WINPCAP_INSTANCE_KEY); return FALSE; } @@ -1181,7 +1206,7 @@ BOOL WoemCreateNameRegistryEntries() _snprintf(KeyValBuf, sizeof(KeyValBuf) / sizeof(CHAR) - 1, "%s_", - NpfDrNameWhId); + g_NpfDriverNameId); if(RegSetValueEx(WinpcapKey, "npf_device_names_prefix", @@ -1192,7 +1217,7 @@ BOOL WoemCreateNameRegistryEntries() { RegCloseKey(WinpcapKey); - RegDeleteKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\CaceWinPcap"); + RegDeleteKey(HKEY_LOCAL_MACHINE, WINPCAP_INSTANCE_KEY); return FALSE; } @@ -1204,7 +1229,7 @@ BOOL WoemCreateNameRegistryEntries() _snwprintf(KeyValBufW, sizeof(KeyValBufW) / sizeof(WCHAR) - 1, L"%ws_", - NpfDrNameWhIdW); + g_NpfDriverNameIdW); if(RegSetValueEx(WinpcapKey, "npf_device_names_prefix_widechar", @@ -1215,7 +1240,7 @@ BOOL WoemCreateNameRegistryEntries() { RegCloseKey(WinpcapKey); - RegDeleteKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\CaceWinPcap"); + RegDeleteKey(HKEY_LOCAL_MACHINE, WINPCAP_INSTANCE_KEY); return FALSE; } @@ -1227,7 +1252,7 @@ BOOL WoemCreateNameRegistryEntries() _snwprintf(KeyValBufW, sizeof(KeyValBufW) / sizeof(WCHAR) - 1, L"%ws0000000000", - NpfDrNameWhIdW); + g_NpfDriverNameIdW); if(RegSetValueEx(WinpcapKey, "npf_user_events_names", @@ -1238,7 +1263,7 @@ BOOL WoemCreateNameRegistryEntries() { RegCloseKey(WinpcapKey); - RegDeleteKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\CaceWinPcap"); + RegDeleteKey(HKEY_LOCAL_MACHINE, WINPCAP_INSTANCE_KEY); return FALSE; } @@ -1250,7 +1275,7 @@ BOOL WoemCreateNameRegistryEntries() _snwprintf(KeyValBufW, sizeof(KeyValBufW) / sizeof(WCHAR) - 1, L"\\BaseNamedObjects\\%ws0000000000\0", - NpfDrNameWhIdW); + g_NpfDriverNameIdW); if(RegSetValueEx(WinpcapKey, "npf_kernel_events_names", @@ -1261,7 +1286,7 @@ BOOL WoemCreateNameRegistryEntries() { RegCloseKey(WinpcapKey); - RegDeleteKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\CaceWinPcap"); + RegDeleteKey(HKEY_LOCAL_MACHINE, WINPCAP_INSTANCE_KEY); return FALSE; } @@ -1273,7 +1298,7 @@ BOOL WoemCreateNameRegistryEntries() _snprintf(KeyValBuf, sizeof(KeyValBuf) / sizeof(CHAR) - 1, "\\Device\\%s_GenericDialupAdapter", - NpfDrNameWhId); + g_NpfDriverNameId); if(RegSetValueEx(WinpcapKey, "fake_ndiswan_adapter_name", @@ -1284,7 +1309,7 @@ BOOL WoemCreateNameRegistryEntries() { RegCloseKey(WinpcapKey); - RegDeleteKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\CaceWinPcap"); + RegDeleteKey(HKEY_LOCAL_MACHINE, WINPCAP_INSTANCE_KEY); return FALSE; } @@ -1299,7 +1324,7 @@ BOOL WoemCreateNameRegistryEntries() { RegCloseKey(WinpcapKey); - RegDeleteKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\CaceWinPcap"); + RegDeleteKey(HKEY_LOCAL_MACHINE, WINPCAP_INSTANCE_KEY); return FALSE; } @@ -1311,7 +1336,7 @@ BOOL WoemCreateNameRegistryEntries() _snwprintf(KeyValBufW, sizeof(KeyValBufW) / sizeof(WCHAR) - 1, L"system32\\drivers\\%ws.sys", - NpfDrNameWhIdW); + g_NpfDriverNameIdW); if(RegSetValueEx(WinpcapKey, "npf_driver_complete_widechar", @@ -1322,7 +1347,7 @@ BOOL WoemCreateNameRegistryEntries() { RegCloseKey(WinpcapKey); - RegDeleteKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\CaceWinPcap"); + RegDeleteKey(HKEY_LOCAL_MACHINE, WINPCAP_INSTANCE_KEY); return FALSE; } @@ -1334,7 +1359,7 @@ BOOL WoemCreateNameRegistryEntries() _snprintf(KeyValBuf, sizeof(KeyValBuf) / sizeof(CHAR) - 1, "\\Device\\%s_", - NpfDrNameWhId); + g_NpfDriverNameId); if(RegSetValueEx(WinpcapKey, "npf_driver_complete_driver_prefix", @@ -1345,7 +1370,7 @@ BOOL WoemCreateNameRegistryEntries() { RegCloseKey(WinpcapKey); - RegDeleteKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\CaceWinPcap"); + RegDeleteKey(HKEY_LOCAL_MACHINE, WINPCAP_INSTANCE_KEY); return FALSE; } @@ -1364,8 +1389,8 @@ BOOL WoemCreateBinaryNames() // // Get the location of the system folder to create the complete paths // - GsdRes = GetSystemDirectory(SysDir, sizeof(SysDir)); - if(GsdRes == 0 || GsdRes == sizeof(SysDir)) + GsdRes = GetSystemDirectory(g_SysDir, sizeof(g_SysDir)); + if(GsdRes == 0 || GsdRes == sizeof(g_SysDir)) { return FALSE; } @@ -1415,27 +1440,27 @@ BOOL WoemCreateBinaryNames() NPF_DRIVER_NAME_WIDECHAR, DriverId); */ - _snprintf(NpfDrNameWhId, - sizeof(NpfDrNameWhId) - 1, + _snprintf(g_NpfDriverNameId, + sizeof(g_NpfDriverNameId) - 1, "%s", NPF_DRIVER_NAME); - _snwprintf(NpfDrNameWhIdW, - sizeof(NpfDrNameWhIdW) / sizeof(WCHAR) - 1, + _snwprintf(g_NpfDriverNameIdW, + sizeof(g_NpfDriverNameIdW) / sizeof(WCHAR) - 1, L"%ws", NPF_DRIVER_NAME_WIDECHAR); - _snprintf(DllFullPath, - sizeof(DllFullPath) - 1, + _snprintf(g_DllFullPath, + sizeof(g_DllFullPath) - 1, "%s\\%swoem.tmp", - SysDir, - NpfDrNameWhId); + g_SysDir, + g_NpfDriverNameId); - _snprintf(DriverFullPath, - sizeof(DriverFullPath) - 1, + _snprintf(g_DriverFullPath, + sizeof(g_DriverFullPath) - 1, "%s\\drivers\\%s.sys", - SysDir, - NpfDrNameWhId); + g_SysDir, + g_NpfDriverNameId); return TRUE; } From aa39dc22f4fec949f39f773dd30e19db473c64b0 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Sun, 30 Oct 2005 19:26:45 +0000 Subject: [PATCH 041/316] Uncommented a TRACE_ENTER() call that was wrongly commented out. --- OEM/WinpcapOem/Crypto.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OEM/WinpcapOem/Crypto.cpp b/OEM/WinpcapOem/Crypto.cpp index 1d69bc1b..e15e3e92 100644 --- a/OEM/WinpcapOem/Crypto.cpp +++ b/OEM/WinpcapOem/Crypto.cpp @@ -10,7 +10,7 @@ BOOL GetHash(LPCBYTE lpbData, DWORD dwDataLen, LPBYTE lpValue, DWORD dwValueLeng HCRYPTPROV hCryptProv = NULL; HCRYPTHASH hHash = NULL; -// TRACE_ENTER("GetHash"); + TRACE_ENTER("GetHash"); // initialize hash object if ( CryptAcquireContext(&hCryptProv, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT ) == FALSE ) From bbc441a7c43a6096f3d78c5e2c4575d840749663 Mon Sep 17 00:00:00 2001 From: Loris Degioanni Date: Mon, 31 Oct 2005 01:09:13 +0000 Subject: [PATCH 042/316] Added a wrapper for PacketSetLoopbackBehavior() --- OEM/WinpcapOem/PacketWrapper.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/OEM/WinpcapOem/PacketWrapper.cpp b/OEM/WinpcapOem/PacketWrapper.cpp index 01676eaf..4346257c 100644 --- a/OEM/WinpcapOem/PacketWrapper.cpp +++ b/OEM/WinpcapOem/PacketWrapper.cpp @@ -980,11 +980,19 @@ BOOL LoadPacketDll(char *PacketDllFileName) return FALSE; } + PacketSetLoopbackBehaviorH = (PacketSetLoopbackBehaviorHandler) GetProcAddress(PacketLib, "PacketSetLoopbackBehavior"); + if(!PacketSetLoopbackBehaviorH) + { + _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 29)"); + WoemReportError(); + return FALSE; + } + #ifdef STATIC_LIB PacketRegWoemLeaveHandlerH = (PacketRegWoemLeaveHandlerHandler) GetProcAddress(PacketLib, "PacketRegWoemLeaveHandler"); if(!PacketRegWoemLeaveHandlerH) { - _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 29)"); + _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 30)"); WoemReportError(); return FALSE; } From 28252a7675f30d3f39dfde90bf4c2190eab718cb Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Tue, 1 Nov 2005 17:02:24 +0000 Subject: [PATCH 043/316] Added some code in order to retrieve and restore the LastError in the tracing functions, so that we do not interact with the normal operation of the APIs. --- OEM/WinpcapOem/WoemDebug.h | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/OEM/WinpcapOem/WoemDebug.h b/OEM/WinpcapOem/WoemDebug.h index 54b8201a..ee92412b 100644 --- a/OEM/WinpcapOem/WoemDebug.h +++ b/OEM/WinpcapOem/WoemDebug.h @@ -26,6 +26,8 @@ static __inline void CreateMessageStringV(char *_x, va_list Marker, BOOL newLine DWORD dwThreadId; size_t currentLen; + DWORD dwLastError = GetLastError(); + dwThreadId = GetCurrentThreadId(); GetLocalTime(&LocalTime); @@ -55,6 +57,9 @@ static __inline void CreateMessageStringV(char *_x, va_list Marker, BOOL newLine outBuffer[currentLen + 1] = '\0'; } } + + SetLastError(dwLastError); + } static __inline void OutputDebugMessage(char *_x, ...) @@ -64,10 +69,14 @@ static __inline void OutputDebugMessage(char *_x, ...) int loops; #endif + va_list Marker; - va_start(Marker, _x); char message[1024]; + DWORD dwLastError = GetLastError(); + + va_start(Marker, _x); + CreateMessageStringV(_x, Marker, FALSE, message, sizeof(message)); @@ -92,6 +101,9 @@ static __inline void OutputDebugMessage(char *_x, ...) #else OutputDebugStringA(message); #endif + + SetLastError(dwLastError); + } static __inline void OutputDebugMessageNewLine(char *_x, ...) @@ -102,6 +114,9 @@ static __inline void OutputDebugMessageNewLine(char *_x, ...) #endif va_list Marker; + + DWORD dwLastError = GetLastError(); + va_start(Marker, _x); char message[1024]; @@ -130,6 +145,7 @@ static __inline void OutputDebugMessageNewLine(char *_x, ...) OutputDebugStringA(message); #endif + SetLastError(dwLastError); } @@ -141,6 +157,8 @@ static __inline void TRACE_PRINT_OS_INFO() DWORD size = sizeof(buffer); DWORD type; + DWORD dwLastError = GetLastError(); + OutputDebugMessage("********************* OS info.********************* \n"); buffer[size-1] = 0; size = sizeof(buffer); @@ -205,6 +223,7 @@ static __inline void TRACE_PRINT_OS_INFO() OutputDebugMessage("*************************************************** \n"); + SetLastError(dwLastError); } From b00ad1f0330cd6525d8d4e9f2d8725520ae869ec Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Tue, 1 Nov 2005 17:05:21 +0000 Subject: [PATCH 044/316] Fixed the signature of LoadPacketDll and WoemEnterDll, so that they return an error string. Added a volatile declaration to a couple of global variables. --- OEM/WinpcapOem/WinpcapOem.h | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/OEM/WinpcapOem/WinpcapOem.h b/OEM/WinpcapOem/WinpcapOem.h index f83f397a..36a9e10e 100644 --- a/OEM/WinpcapOem/WinpcapOem.h +++ b/OEM/WinpcapOem/WinpcapOem.h @@ -29,9 +29,9 @@ HRESULT HrUninstallNetMonProtocol(); //////////////////////////////////////////////////////////////////// // Packet.dll wrapper prototypes //////////////////////////////////////////////////////////////////// -BOOL LoadPacketDll(char *PacketDllFileName); +BOOL LoadPacketDll(char *PacketDllFileName, char *errorString); void DeleteDll(char *DllFileName); -BOOL WoemEnterDll(HINSTANCE DllHandle); +BOOL WoemEnterDll(HINSTANCE DllHandle, char *WoemErrorString); BOOL WoemLeaveDll(); #ifdef STATIC_LIB void RegisterPacketUnloadHandler(void* Handler); @@ -42,7 +42,9 @@ void RegisterPacketUnloadHandler(void* Handler); /////////////////////////////////////////////////////////////////// extern HINSTANCE g_DllHandle; extern char g_LastWoemError[]; -extern BOOL g_InitError; +volatile extern BOOL g_InitError; +volatile extern BOOL g_OemActive; + //////////////////////////////////////////////////////////////////// // Resources handling prototypes @@ -60,6 +62,7 @@ BOOL WoemCreateBinaryNames(); // Debug definitions //////////////////////////////////////////////////////////////////// + #define DEBUGTRACE #define TRACE_OUTPUTDEBUGSTRING @@ -79,6 +82,7 @@ BOOL WoemCreateBinaryNames(); #define TraceEnter(X) #endif + //////////////////////////////////////////////////////////////////// // Error codes //////////////////////////////////////////////////////////////////// From c9eaed2722f6b807ccf97f4cf18ca6b83d0c89bb Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Tue, 1 Nov 2005 17:06:15 +0000 Subject: [PATCH 045/316] Converted all the TracePrint calls to TRACE_MESSAGE --- OEM/WinpcapOem/SerivcesInstallers.cpp | 81 ++++++++++++++------------- 1 file changed, 41 insertions(+), 40 deletions(-) diff --git a/OEM/WinpcapOem/SerivcesInstallers.cpp b/OEM/WinpcapOem/SerivcesInstallers.cpp index 892a948a..f2a9f272 100644 --- a/OEM/WinpcapOem/SerivcesInstallers.cpp +++ b/OEM/WinpcapOem/SerivcesInstallers.cpp @@ -60,6 +60,7 @@ #include "NetMonInstaller.h" //#define DEBUGTRACE #include "WinpcapOem.h" +#include "WoemDebug.h" //---------------------------------------------------------------------------- // Globals @@ -491,7 +492,7 @@ int delete_service(LPCTSTR ServiceName) if (SCM_Handle==NULL) { - TracePrint("Error opening Service Control Manager: "); + TRACE_MESSAGE("Error opening Service Control Manager: "); DisplayErrorText(GetLastError()); return -1; } @@ -503,11 +504,11 @@ int delete_service(LPCTSTR ServiceName) if (ServiceHandle==NULL) { - TracePrint("Error opening Service Control Manager: "); + TRACE_MESSAGE("Error opening Service Control Manager: "); DisplayErrorText(GetLastError()); if (!CloseServiceHandle(SCM_Handle)) - TracePrint("Error closing Service control Manager\n"); + TRACE_MESSAGE("Error closing Service control Manager\n"); return -1; } @@ -520,27 +521,27 @@ int delete_service(LPCTSTR ServiceName) if (Err != ERROR_SERVICE_NOT_ACTIVE) { - TracePrint("Error stopping service %s: ",ServiceName); + TRACE_MESSAGE("Error stopping service %s: ",ServiceName); DisplayErrorText(Err); ReturnValue=-1; } } else - TracePrint("Service %s successfully stopped\n",ServiceName); + TRACE_MESSAGE("Service %s successfully stopped\n",ServiceName); if(!DeleteService(ServiceHandle)) { - TracePrint("Error deleting service %s: ",ServiceName); + TRACE_MESSAGE("Error deleting service %s: ",ServiceName); DisplayErrorText(GetLastError()); ReturnValue=-1; } else - TracePrint("Service %s successfully deleted\n",ServiceName); + TRACE_MESSAGE("Service %s successfully deleted\n",ServiceName); if(!CloseServiceHandle(ServiceHandle)) { - TracePrint("Error closing service %s: ",ServiceName); + TRACE_MESSAGE("Error closing service %s: ",ServiceName); DisplayErrorText(GetLastError()); ReturnValue=-1; } @@ -548,7 +549,7 @@ int delete_service(LPCTSTR ServiceName) if(!CloseServiceHandle(SCM_Handle)) { - TracePrint("Error closing Service control Manager\n"); + TRACE_MESSAGE("Error closing Service control Manager\n"); ReturnValue=-1; } @@ -569,7 +570,7 @@ int stop_service(LPCTSTR ServiceName) if (SCM_Handle==NULL) { - TracePrint("Error opening Service Control Manager: "); + TRACE_MESSAGE("Error opening Service Control Manager: "); DisplayErrorText(GetLastError()); return -1; @@ -582,11 +583,11 @@ int stop_service(LPCTSTR ServiceName) if (ServiceHandle==NULL) { - TracePrint("Error opening service %s:",ServiceName); + TRACE_MESSAGE("Error opening service %s:",ServiceName); DisplayErrorText(GetLastError()); if (!CloseServiceHandle(SCM_Handle)) - TracePrint("Error closing Service control Manager\n"); + TRACE_MESSAGE("Error closing Service control Manager\n"); return -1; } @@ -595,17 +596,17 @@ int stop_service(LPCTSTR ServiceName) if (!ControlService(ServiceHandle,SERVICE_CONTROL_STOP,&ServiceStatus)) { - TracePrint("Error stopping service %s: ",ServiceName); + TRACE_MESSAGE("Error stopping service %s: ",ServiceName); DisplayErrorText(GetLastError()); ReturnValue=-1; } else - TracePrint("Service %s successfully stopped\n",ServiceName); + TRACE_MESSAGE("Service %s successfully stopped\n",ServiceName); if (!CloseServiceHandle(ServiceHandle)) { - TracePrint("Error closing service %s: ",ServiceName); + TRACE_MESSAGE("Error closing service %s: ",ServiceName); DisplayErrorText(GetLastError()); ReturnValue=-1; @@ -613,7 +614,7 @@ int stop_service(LPCTSTR ServiceName) if (!CloseServiceHandle(SCM_Handle)) { - TracePrint("Error closing Service control Manager\n"); + TRACE_MESSAGE("Error closing Service control Manager\n"); ReturnValue=-1; } @@ -633,7 +634,7 @@ int change_start_type_service(LPCTSTR ServiceName, DWORD StartType) if (SCM_Handle == NULL) { - TracePrint("Error opening Service Control Manager: "); + TRACE_MESSAGE("Error opening Service Control Manager: "); DisplayErrorText(GetLastError()); return -1; } @@ -645,11 +646,11 @@ int change_start_type_service(LPCTSTR ServiceName, DWORD StartType) if (ServiceHandle == NULL) { - TracePrint("Error opening service %s: ",ServiceName); + TRACE_MESSAGE("Error opening service %s: ",ServiceName); DisplayErrorText(GetLastError()); if (!CloseServiceHandle(SCM_Handle)) - TracePrint("Error closing Service control Manager\n"); + TRACE_MESSAGE("Error closing Service control Manager\n"); return -1; } @@ -668,24 +669,24 @@ int change_start_type_service(LPCTSTR ServiceName, DWORD StartType) NULL, NULL)) { - TracePrint("Error changing start type for service %s:",ServiceName); + TRACE_MESSAGE("Error changing start type for service %s:",ServiceName); DisplayErrorText(GetLastError()); ReturnValue=-1; } else - TracePrint("Successfully changed start-type for service %s\n",ServiceName); + TRACE_MESSAGE("Successfully changed start-type for service %s\n",ServiceName); if (!CloseServiceHandle(ServiceHandle)) { - TracePrint("Error closing service %s\n",ServiceName); + TRACE_MESSAGE("Error closing service %s\n",ServiceName); ReturnValue=-1; } if (!CloseServiceHandle(SCM_Handle)) { - TracePrint("Error closing Service control Manager\n"); + TRACE_MESSAGE("Error closing Service control Manager\n"); ReturnValue=-1; } @@ -706,7 +707,7 @@ int start_service(LPCTSTR ServiceName) if (SCM_Handle == NULL) { - TracePrint("Error opening Service Control Manager: "); + TRACE_MESSAGE("Error opening Service Control Manager: "); DisplayErrorText(GetLastError()); return -1; } @@ -718,11 +719,11 @@ int start_service(LPCTSTR ServiceName) if (ServiceHandle == NULL) { - TracePrint("Error opening service %s: ",ServiceName); + TRACE_MESSAGE("Error opening service %s: ",ServiceName); DisplayErrorText(GetLastError()); if (!CloseServiceHandle(SCM_Handle)) - TracePrint("Error closing Service control Manager\n"); + TRACE_MESSAGE("Error closing Service control Manager\n"); return -1; } @@ -731,24 +732,24 @@ int start_service(LPCTSTR ServiceName) if (!StartService(ServiceHandle,0,NULL)) { - TracePrint("Error starting service %s:",ServiceName); + TRACE_MESSAGE("Error starting service %s:",ServiceName); DisplayErrorText(GetLastError()); ReturnValue=-1; } else - TracePrint("Service %s successfully started\n",ServiceName); + TRACE_MESSAGE("Service %s successfully started\n",ServiceName); if (!CloseServiceHandle(ServiceHandle)) { - TracePrint("Error closing service %s\n",ServiceName); + TRACE_MESSAGE("Error closing service %s\n",ServiceName); ReturnValue=-1; } if (!CloseServiceHandle(SCM_Handle)) { - TracePrint("Error closing Service control Manager\n"); + TRACE_MESSAGE("Error closing Service control Manager\n"); ReturnValue=-1; } @@ -770,7 +771,7 @@ int create_driver_service(LPCTSTR ServiceName,LPCTSTR ServiceDescription,LPCTSTR if (SCM_Handle==NULL) { - TracePrint("Error opening Service Control Manager: "); + TRACE_MESSAGE("Error opening Service Control Manager: "); DisplayErrorText(GetLastError()); return -1; @@ -796,12 +797,12 @@ int create_driver_service(LPCTSTR ServiceName,LPCTSTR ServiceDescription,LPCTSTR { if (!CloseServiceHandle(SCM_Handle)) if (stdout != NULL) - TracePrint("Error closing Service control Manager\n"); + TRACE_MESSAGE("Error closing Service control Manager\n"); return 0; } - TracePrint("Error creating service %s: (%d)", + TRACE_MESSAGE("Error creating service %s: (%d)", ServiceName, GetLastError()); @@ -809,25 +810,25 @@ int create_driver_service(LPCTSTR ServiceName,LPCTSTR ServiceDescription,LPCTSTR if (!CloseServiceHandle(SCM_Handle)) if (stdout != NULL) - TracePrint("Error closing Service control Manager\n"); + TRACE_MESSAGE("Error closing Service control Manager\n"); return -1; } - TracePrint("Service %s successfully created.\n",ServiceName); + TRACE_MESSAGE("Service %s successfully created.\n",ServiceName); ReturnValue=0; if (!CloseServiceHandle(ServiceHandle)) { - TracePrint("Error closing service %s.\n",ServiceName); + TRACE_MESSAGE("Error closing service %s.\n",ServiceName); ReturnValue=-1; } if (!CloseServiceHandle(SCM_Handle)) { - TracePrint("Error closing Service control Manager\n"); + TRACE_MESSAGE("Error closing Service control Manager\n"); ReturnValue=-1; } @@ -848,7 +849,7 @@ int check_if_service_is_running(LPCTSTR ServiceName) if (SCM_Handle == NULL) { - TracePrint("Error opening Service Control Manager: "); + TRACE_MESSAGE("Error opening Service Control Manager: "); DisplayErrorText(GetLastError()); return -1; } @@ -899,7 +900,7 @@ int check_if_service_is_present(LPCTSTR ServiceName) if (SCM_Handle == NULL) { - TracePrint("Error opening Service Control Manager: "); + TRACE_MESSAGE("Error opening Service Control Manager: "); DisplayErrorText(GetLastError()); return -1; } @@ -950,7 +951,7 @@ void DisplayErrorText(DWORD dwLastError) NULL )) { - TracePrint("%s",MessageBuffer); + TRACE_MESSAGE("%s",MessageBuffer); // // Free the buffer allocated by the system. From e34ba207dc7c76b381dc06cac9ad982d3df02e4a Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Tue, 1 Nov 2005 17:07:04 +0000 Subject: [PATCH 046/316] Fixed the snippet of code to be added to pcap (pcap_start_oem). --- OEM/Instructions.txt | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/OEM/Instructions.txt b/OEM/Instructions.txt index 12b94514..31330b6b 100644 --- a/OEM/Instructions.txt +++ b/OEM/Instructions.txt @@ -27,9 +27,17 @@ PacketNT - Win32 NT4 OEM 11. Add the following lines to wpcap's Win32-Extensions.c: -int pcap_start_oem(char** err_str) +/*! + \brief This function starts WinPcap OEM. + + \param err_str pointer to a user-allocated buffer (of minimum size PCAP_ERRBUF_SIZE) + that will contain the error message in case of failure. + + \return 0 on success, -1 in case of failure. +*/ +int pcap_start_oem(char* err_str) { - if(PacketStartOem(err_str) == 0) + if(PacketStartOem(err_str, PCAP_ERRBUF_SIZE) == FALSE) { return -1; } From a07408282e310c41cfcf7fb4ed37e75e7ba7bf26 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Tue, 1 Nov 2005 17:07:33 +0000 Subject: [PATCH 047/316] Got rid of PacketGetLastOemError. --- OEM/WinpcapOem/WinpcapOem.def | 2 -- 1 file changed, 2 deletions(-) diff --git a/OEM/WinpcapOem/WinpcapOem.def b/OEM/WinpcapOem/WinpcapOem.def index ce6499f0..8801b486 100644 --- a/OEM/WinpcapOem/WinpcapOem.def +++ b/OEM/WinpcapOem/WinpcapOem.def @@ -31,6 +31,4 @@ EXPORTS PacketSetDumpLimits PacketIsDumpEnded PacketSetLoopbackBehavior - - PacketGetLastOemError PacketStartOem From 97683a4da22f006cd711b605bf14ecfb473732df Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Tue, 1 Nov 2005 17:08:48 +0000 Subject: [PATCH 048/316] Cleaned up and added tracing to all the PacketXXX wrapper functions. --- OEM/WinpcapOem/PacketWrapper.cpp | 1039 +++++++++++++++++------------- 1 file changed, 593 insertions(+), 446 deletions(-) diff --git a/OEM/WinpcapOem/PacketWrapper.cpp b/OEM/WinpcapOem/PacketWrapper.cpp index 4346257c..a1e596a0 100644 --- a/OEM/WinpcapOem/PacketWrapper.cpp +++ b/OEM/WinpcapOem/PacketWrapper.cpp @@ -1,12 +1,15 @@ #include #include "Packet32.h" #include "WinpcapOem.h" +#include "WoemDebug.h" -INT setProcAuthorization(); +volatile BOOL g_StillToInit = TRUE; +volatile BOOL g_OemActive = FALSE; + +HMODULE g_PacketLib; + +__inline BOOL WoemInitialize(HINSTANCE hDllHandle); -HMODULE PacketLib; -BOOL StillToInit = TRUE; -BOOL OemActive = FALSE; //--------------------------------------------------------------------------- // PUBLIC PACKET.DLL API WRAPPERS - HANDLERS @@ -81,620 +84,696 @@ PacketRegWoemLeaveHandlerHandler PacketRegWoemLeaveHandlerH = NULL; //--------------------------------------------------------------------------- PCHAR PacketGetVersion() { - TraceEnter("PacketGetVersion"); + PCHAR returnValue; + + TRACE_ENTER("PacketGetVersion"); // // Check if we are the first instance and Init everything accordingly // - if(StillToInit) + if(!WoemInitialize(g_DllHandle)) { - if(!WoemEnterDll(g_DllHandle)) - { - return "failed to load packet.dll"; - } - - StillToInit = FALSE; + returnValue = "failed to load packet.dll"; + } + else + { + returnValue = PacketGetVersionH(); } - return PacketGetVersionH(); + TRACE_EXIT("PacketGetVersion"); + return returnValue; } PCHAR PacketGetDriverVersion() { - TraceEnter("PacketGetDriverVersion"); + PCHAR returnValue; + + TRACE_ENTER("PacketGetDriverVersion"); // // Check if we are the first instance and Init everything accordingly // - if(StillToInit) + if(!WoemInitialize(g_DllHandle)) { - if(!WoemEnterDll(g_DllHandle)) - { - return "failed to load packet.dll"; - } - - StillToInit = FALSE; + returnValue = "failed to load packet.dll"; + } + else + { + // + // We don't have the driver binary, but we are sure that driver and dll + // versions are identical + // + returnValue = PacketGetVersionH(); } - // - // We don't have the driver binary, but we are sure that driver and dll - // versions are identical - // - return PacketGetVersionH(); + TRACE_EXIT("PacketGetDriverVersion"); + return returnValue; } BOOL PacketStopDriver() { - TraceEnter("PacketStopDriver"); + BOOL returnValue; + + TRACE_ENTER("PacketStopDriver"); // // Check if we are the first instance and Init everything accordingly // - if(StillToInit) + if(!WoemInitialize(g_DllHandle)) { - if(!WoemEnterDll(g_DllHandle)) - { - return FALSE; - } - - StillToInit = FALSE; + returnValue = FALSE; + SetLastError(ERROR_INVALID_FUNCTION); } + else + { + returnValue = PacketStopDriverH(); + } + + TRACE_EXIT("PacketStopDriver"); - return PacketStopDriverH(); + return returnValue; } LPADAPTER PacketOpenAdapter(PCHAR AdapterName) { - TraceEnter("PacketOpenAdapter"); + LPADAPTER returnValue; + + TRACE_ENTER("PacketOpenAdapter"); // // Check if we are the first instance and Init everything accordingly // - if(OemActive) + if(!WoemInitialize(g_DllHandle)) { - if(StillToInit) - { - if(!WoemEnterDll(g_DllHandle)) - { - return NULL; - } - - StillToInit = FALSE; - } - - return PacketOpenAdapterH(AdapterName); + SetLastError(ERROR_INVALID_FUNCTION); + returnValue = NULL; } else { - return NULL; + returnValue = PacketOpenAdapterH(AdapterName); } + + TRACE_EXIT("PacketOpenAdapter"); + return returnValue; } VOID PacketCloseAdapter(LPADAPTER lpAdapter) { - TraceEnter("PacketCloseAdapter"); - + TRACE_ENTER("PacketCloseAdapter"); + // // Check if we are the first instance and Init everything accordingly // - if(StillToInit) + if(!WoemInitialize(g_DllHandle)) { - if(!WoemEnterDll(g_DllHandle)) - { - return; - } - - StillToInit = FALSE; + SetLastError(ERROR_INVALID_FUNCTION); } - - PacketCloseAdapterH(lpAdapter); + else + { + PacketCloseAdapterH(lpAdapter); + } + + TRACE_EXIT("PacketCloseAdapter"); } LPPACKET PacketAllocatePacket(void) { - TraceEnter("PacketAllocatePacket"); - + LPPACKET returnValue; + + TRACE_ENTER("PacketAllocatePacket"); + // // Check if we are the first instance and Init everything accordingly // - if(StillToInit) + if(!WoemInitialize(g_DllHandle)) { - if(!WoemEnterDll(g_DllHandle)) - { - return NULL; - } - - StillToInit = FALSE; + returnValue = NULL; + SetLastError(ERROR_INVALID_FUNCTION); } - - return PacketAllocatePacketH(); + else + { + returnValue = PacketAllocatePacketH(); + } + + TRACE_EXIT("PacketAllocatePacket"); + return returnValue; } VOID PacketFreePacket(LPPACKET lpPacket) { - TraceEnter("PacketFreePacket"); - + TRACE_ENTER("PacketFreePacket"); + // // Check if we are the first instance and Init everything accordingly // - if(StillToInit) + if(!WoemInitialize(g_DllHandle)) { - if(!WoemEnterDll(g_DllHandle)) - { - return; - } - - StillToInit = FALSE; + SetLastError(ERROR_INVALID_FUNCTION); } - - PacketFreePacketH(lpPacket); + else + { + PacketFreePacketH(lpPacket); + } + + TRACE_EXIT("PacketFreePacket"); } VOID PacketInitPacket(LPPACKET lpPacket,PVOID Buffer,UINT Length) { - TraceEnter("PacketInitPacket"); - + TRACE_ENTER("PacketInitPacket"); + // // Check if we are the first instance and Init everything accordingly // - if(StillToInit) + if(!WoemInitialize(g_DllHandle)) { - if(!WoemEnterDll(g_DllHandle)) - { - return; - } - - StillToInit = FALSE; + SetLastError(ERROR_INVALID_FUNCTION); } - - PacketInitPacketH(lpPacket, Buffer, Length); + else + { + PacketInitPacketH(lpPacket, Buffer, Length); + } + + TRACE_EXIT("PacketInitPacket"); } BOOLEAN PacketReceivePacket(LPADAPTER AdapterObject,LPPACKET lpPacket,BOOLEAN Sync) { - TraceEnter("PacketReceivePacket"); - + BOOLEAN returnValue; + + TRACE_ENTER("PacketReceivePacket"); + // // Check if we are the first instance and Init everything accordingly // - if(StillToInit) + if(!WoemInitialize(g_DllHandle)) { - if(!WoemEnterDll(g_DllHandle)) - { - return FALSE; - } - - StillToInit = FALSE; + SetLastError(ERROR_INVALID_FUNCTION); + returnValue = FALSE; } - - return PacketReceivePacketH(AdapterObject, lpPacket, Sync); + else + { + returnValue = PacketReceivePacketH(AdapterObject, lpPacket, Sync); + } + + TRACE_EXIT("PacketReceivePacket"); + return returnValue; } BOOLEAN PacketSendPacket(LPADAPTER AdapterObject,LPPACKET lpPacket,BOOLEAN Sync) { - TraceEnter("PacketSendPacket"); - + BOOLEAN returnValue; + + TRACE_ENTER("PacketSendPacket"); + // // Check if we are the first instance and Init everything accordingly // - if(StillToInit) + if(!WoemInitialize(g_DllHandle)) { - if(!WoemEnterDll(g_DllHandle)) - { - return FALSE; - } - - StillToInit = FALSE; + SetLastError(ERROR_INVALID_FUNCTION); + returnValue = FALSE; } - - return PacketSendPacketH(AdapterObject, lpPacket, Sync); + else + { + returnValue = PacketSendPacketH(AdapterObject, lpPacket, Sync); + } + + TRACE_EXIT("PacketSendPacket"); + return returnValue; } INT PacketSendPackets(LPADAPTER AdapterObject, PVOID PacketBuff, ULONG Size, BOOLEAN Sync) { - TraceEnter("PacketSendPackets"); + INT returnValue; + + TRACE_ENTER("PacketSendPackets"); // // Check if we are the first instance and Init everything accordingly // - if(StillToInit) - { - if(!WoemEnterDll(g_DllHandle)) + if(!WoemInitialize(g_DllHandle)) { - return 0; + SetLastError(ERROR_INVALID_FUNCTION); + returnValue = 0; } +else +{ + returnValue = PacketSendPacketsH(AdapterObject, PacketBuff, Size, Sync); +} - StillToInit = FALSE; - } - - return PacketSendPacketsH(AdapterObject, PacketBuff, Size, Sync); + TRACE_EXIT("PacketSendPackets"); + return returnValue; } BOOLEAN PacketSetMinToCopy(LPADAPTER AdapterObject,int nbytes) { - TraceEnter("PacketSetMinToCopy"); - + BOOLEAN returnValue; + + TRACE_ENTER("PacketSetMinToCopy"); + // // Check if we are the first instance and Init everything accordingly // - if(StillToInit) + if(!WoemInitialize(g_DllHandle)) { - if(!WoemEnterDll(g_DllHandle)) - { - return FALSE; - } - - StillToInit = FALSE; + SetLastError(ERROR_INVALID_FUNCTION); + returnValue = FALSE; } - - return PacketSetMinToCopyH(AdapterObject, nbytes); + else + { + returnValue = PacketSetMinToCopyH(AdapterObject, nbytes); + } + + TRACE_EXIT("PacketSetMinToCopy"); + return returnValue; } BOOLEAN PacketSetMode(LPADAPTER AdapterObject,int mode) { - TraceEnter("PacketSetMode"); - + BOOLEAN returnValue; + + TRACE_ENTER("PacketSetMode"); + // // Check if we are the first instance and Init everything accordingly // - if(StillToInit) + if(!WoemInitialize(g_DllHandle)) { - if(!WoemEnterDll(g_DllHandle)) - { - return FALSE; - } - - StillToInit = FALSE; + SetLastError(ERROR_INVALID_FUNCTION); + returnValue = FALSE; } - - return PacketSetModeH(AdapterObject, mode); + else + { + returnValue = PacketSetModeH(AdapterObject, mode); + } + + TRACE_EXIT("PacketSetMode"); + return returnValue; } BOOLEAN PacketSetDumpName(LPADAPTER AdapterObject, void *name, int len) { - TraceEnter("PacketSetDumpName"); - + BOOLEAN returnValue; + + TRACE_ENTER("PacketSetDumpName"); + // // Check if we are the first instance and Init everything accordingly // - if(StillToInit) + if(!WoemInitialize(g_DllHandle)) { - if(!WoemEnterDll(g_DllHandle)) - { - return FALSE; - } - - StillToInit = FALSE; + SetLastError(ERROR_INVALID_FUNCTION); + returnValue = FALSE; } - - return PacketSetDumpNameH(AdapterObject, name, len); + else + { + returnValue = PacketSetDumpNameH(AdapterObject, name, len); + } + + TRACE_EXIT("PacketSetDumpName"); + return returnValue; } BOOLEAN PacketSetDumpLimits(LPADAPTER AdapterObject, UINT maxfilesize, UINT maxnpacks) { - TraceEnter("PacketSetDumpLimits"); - + BOOLEAN returnValue; + + TRACE_ENTER("PacketSetDumpLimits"); + // // Check if we are the first instance and Init everything accordingly // - if(StillToInit) + if(!WoemInitialize(g_DllHandle)) { - if(!WoemEnterDll(g_DllHandle)) - { - return FALSE; - } - - StillToInit = FALSE; + SetLastError(ERROR_INVALID_FUNCTION); + returnValue = FALSE; } - - return PacketSetDumpLimitsH(AdapterObject, maxfilesize, maxnpacks); + else + { + returnValue = PacketSetDumpLimitsH(AdapterObject, maxfilesize, maxnpacks); + } + + TRACE_EXIT("PacketSetDumpLimits"); + return returnValue; } BOOLEAN PacketIsDumpEnded(LPADAPTER AdapterObject, BOOLEAN sync) { - TraceEnter("PacketIsDumpEnded"); - + BOOLEAN returnValue; + + TRACE_ENTER("PacketIsDumpEnded"); + // // Check if we are the first instance and Init everything accordingly // - if(StillToInit) + if(!WoemInitialize(g_DllHandle)) { - if(!WoemEnterDll(g_DllHandle)) - { - return FALSE; - } - - StillToInit = FALSE; + SetLastError(ERROR_INVALID_FUNCTION); + returnValue = FALSE; } - - return PacketIsDumpEndedH(AdapterObject, sync); + else + { + returnValue = PacketIsDumpEndedH(AdapterObject, sync); + } + + TRACE_EXIT("PacketIsDumpEnded"); + return returnValue; } HANDLE PacketGetReadEvent(LPADAPTER AdapterObject) { - TraceEnter("PacketGetReadEvent"); - + HANDLE returnValue; + + TRACE_ENTER("PacketGetReadEvent"); + // // Check if we are the first instance and Init everything accordingly // - if(StillToInit) + if(!WoemInitialize(g_DllHandle)) { - if(!WoemEnterDll(g_DllHandle)) - { - return NULL; - } - - StillToInit = FALSE; + SetLastError(ERROR_INVALID_FUNCTION); + returnValue = NULL; } - - return PacketGetReadEventH(AdapterObject); + else + { + returnValue = PacketGetReadEventH(AdapterObject); + } + + TRACE_EXIT("PacketGetReadEvent"); + return returnValue; } BOOLEAN PacketSetNumWrites(LPADAPTER AdapterObject,int nwrites) { - TraceEnter("PacketSetNumWrites"); - + BOOLEAN returnValue; + + TRACE_ENTER("PacketSetNumWrites"); + // // Check if we are the first instance and Init everything accordingly // - if(StillToInit) + if(!WoemInitialize(g_DllHandle)) { - if(!WoemEnterDll(g_DllHandle)) - { - return FALSE; - } - - StillToInit = FALSE; + SetLastError(ERROR_INVALID_FUNCTION); + returnValue = FALSE; } - - return PacketSetNumWritesH(AdapterObject, nwrites); + else + { + returnValue = PacketSetNumWritesH(AdapterObject, nwrites); + } + + TRACE_EXIT("PacketSetNumWrites"); + return returnValue; } BOOLEAN PacketSetReadTimeout(LPADAPTER AdapterObject,int timeout) { - TraceEnter("PacketSetReadTimeout"); - + BOOLEAN returnValue; + + TRACE_ENTER("PacketSetReadTimeout"); + // // Check if we are the first instance and Init everything accordingly // - if(StillToInit) + if(!WoemInitialize(g_DllHandle)) { - if(!WoemEnterDll(g_DllHandle)) - { - return FALSE; - } - - StillToInit = FALSE; + SetLastError(ERROR_INVALID_FUNCTION); + returnValue = FALSE; } - - return PacketSetReadTimeoutH(AdapterObject, timeout); + else + { + returnValue = PacketSetReadTimeoutH(AdapterObject, timeout); + } + + TRACE_EXIT("PacketSetReadTimeout"); + return returnValue; } BOOLEAN PacketSetBuff(LPADAPTER AdapterObject,int dim) { - TraceEnter("PacketSetBuff"); - + BOOLEAN returnValue; + + TRACE_ENTER("PacketSetBuff"); + // // Check if we are the first instance and Init everything accordingly // - if(StillToInit) + if(!WoemInitialize(g_DllHandle)) { - if(!WoemEnterDll(g_DllHandle)) - { - return FALSE; - } - - StillToInit = FALSE; + SetLastError(ERROR_INVALID_FUNCTION); + returnValue = FALSE; } - - return PacketSetBuffH(AdapterObject, dim); + else + { + returnValue = PacketSetBuffH(AdapterObject, dim); + } + + TRACE_EXIT("PacketSetBuff"); + return returnValue; } BOOLEAN PacketSetBpf(LPADAPTER AdapterObject, struct bpf_program *fp) { - TraceEnter("PacketSetBpf"); - + BOOLEAN returnValue; + + TRACE_ENTER("PacketSetBpf"); + // // Check if we are the first instance and Init everything accordingly // - if(StillToInit) + if(!WoemInitialize(g_DllHandle)) { - if(!WoemEnterDll(g_DllHandle)) - { - return FALSE; - } - - StillToInit = FALSE; + SetLastError(ERROR_INVALID_FUNCTION); + returnValue = FALSE; } - - return PacketSetBpfH(AdapterObject, fp); + else + { + returnValue = PacketSetBpfH(AdapterObject, fp); + } + + TRACE_EXIT("PacketSetBpf"); + return returnValue; } BOOLEAN PacketSetLoopbackBehavior(LPADAPTER AdapterObject, UINT LoopbackBehavior) { - TraceEnter("PacketSetLoopbackBehavior"); - + BOOLEAN returnValue; + + TRACE_ENTER("PacketSetLoopbackBehavior"); + // // Check if we are the first instance and Init everything accordingly // - if(StillToInit) + if(!WoemInitialize(g_DllHandle)) { - if(!WoemEnterDll(g_DllHandle)) - { - return FALSE; - } - - StillToInit = FALSE; + SetLastError(ERROR_INVALID_FUNCTION); + returnValue = FALSE; } - - return PacketSetLoopbackBehaviorH(AdapterObject, LoopbackBehavior); + else + { + returnValue = PacketSetLoopbackBehaviorH(AdapterObject, LoopbackBehavior); + } + + TRACE_EXIT("PacketSetLoopbackBehavior"); + return returnValue; } INT PacketSetSnapLen(LPADAPTER AdapterObject, int snaplen) { - TraceEnter("PacketSetSnapLen"); - + INT returnValue; + + TRACE_ENTER("PacketSetSnapLen"); + // // Check if we are the first instance and Init everything accordingly // - if(StillToInit) + if(!WoemInitialize(g_DllHandle)) { - if(!WoemEnterDll(g_DllHandle)) - { - return 0; - } - - StillToInit = FALSE; + SetLastError(ERROR_INVALID_FUNCTION); + returnValue = 0; } - - return PacketSetSnapLenH(AdapterObject, snaplen); + else + { + returnValue = PacketSetSnapLenH(AdapterObject, snaplen); + } + + TRACE_EXIT("PacketSetSnapLen"); + return returnValue; } BOOLEAN PacketGetStats(LPADAPTER AdapterObject,struct bpf_stat *s) { - TraceEnter("PacketGetStats"); - + BOOLEAN returnValue; + + TRACE_ENTER("PacketGetStats"); + // // Check if we are the first instance and Init everything accordingly // - if(StillToInit) + if(!WoemInitialize(g_DllHandle)) { - if(!WoemEnterDll(g_DllHandle)) - { - return FALSE; - } - - StillToInit = FALSE; + returnValue = FALSE; + SetLastError(ERROR_INVALID_FUNCTION); } - - return PacketGetStatsH(AdapterObject, s); + else + { + returnValue = PacketGetStatsH(AdapterObject, s); + } + + TRACE_EXIT("PacketGetStats"); + return returnValue; } BOOLEAN PacketGetStatsEx(LPADAPTER AdapterObject,struct bpf_stat *s) { - TraceEnter("PacketGetStatsEx"); - + BOOLEAN returnValue; + + TRACE_ENTER("PacketGetStatsEx"); + // // Check if we are the first instance and Init everything accordingly // - if(StillToInit) + if(!WoemInitialize(g_DllHandle)) { - if(!WoemEnterDll(g_DllHandle)) - { - return FALSE; - } - - StillToInit = FALSE; + returnValue = FALSE; + SetLastError(ERROR_INVALID_FUNCTION); } - - return PacketGetStatsExH(AdapterObject, s); + else + { + returnValue = PacketGetStatsExH(AdapterObject, s); + } + + TRACE_EXIT("PacketGetStatsEx"); + return returnValue; } BOOLEAN PacketRequest(LPADAPTER AdapterObject,BOOLEAN Set,PPACKET_OID_DATA OidData) { - TraceEnter("PacketRequest"); - + BOOLEAN returnValue; + + TRACE_ENTER("PacketRequest"); + // // Check if we are the first instance and Init everything accordingly // - if(StillToInit) + if(!WoemInitialize(g_DllHandle)) { - if(!WoemEnterDll(g_DllHandle)) - { - return FALSE; - } - - StillToInit = FALSE; + returnValue = FALSE; + SetLastError(ERROR_INVALID_FUNCTION); } - - return PacketRequestH(AdapterObject, Set, OidData); + else + { + returnValue = PacketRequestH(AdapterObject, Set, OidData); + } + + TRACE_EXIT("PacketRequest"); + return returnValue; } BOOLEAN PacketSetHwFilter(LPADAPTER AdapterObject,ULONG Filter) { - TraceEnter("PacketSetHwFilter"); - + BOOLEAN returnValue; + + TRACE_ENTER("PacketSetHwFilter"); + // // Check if we are the first instance and Init everything accordingly // - if(StillToInit) + if(!WoemInitialize(g_DllHandle)) { - if(!WoemEnterDll(g_DllHandle)) - { - return FALSE; - } - - StillToInit = FALSE; + returnValue = FALSE; + SetLastError(ERROR_INVALID_FUNCTION); } - - return PacketSetHwFilterH(AdapterObject, Filter); + else + { + returnValue = PacketSetHwFilterH(AdapterObject, Filter); + } + + TRACE_EXIT("PacketSetHwFilter"); + return returnValue; } BOOLEAN PacketGetAdapterNames(PTSTR pStr,PULONG BufferSize) { - TraceEnter("PacketGetAdapterNames"); + BOOLEAN returnValue; + + TRACE_ENTER("PacketGetAdapterNames"); - if(OemActive) + if(g_OemActive) { // // Check if we are the first instance and Init everything accordingly // - if(StillToInit) + if(!WoemInitialize(g_DllHandle)) { - if(!WoemEnterDll(g_DllHandle)) - { - *BufferSize = 0; - return FALSE; - } + *BufferSize = 0; + SetLastError(ERROR_INVALID_FUNCTION); - StillToInit = FALSE; + TRACE_EXIT("PacketGetAdapterNames"); + return FALSE; + } + else + { + returnValue = PacketGetAdapterNamesH(pStr, BufferSize); } - return PacketGetAdapterNamesH(pStr, BufferSize); } else { - return FALSE; + *BufferSize = 0; + returnValue = FALSE; + SetLastError(ERROR_INVALID_FUNCTION); } + + + TRACE_EXIT("PacketGetAdapterNames"); + return returnValue; } BOOLEAN PacketGetNetInfoEx(PCHAR AdapterName, npf_if_addr* buffer, PLONG NEntries) { - TraceEnter("PacketGetNetInfoEx"); - + BOOLEAN returnValue; + + TRACE_ENTER("PacketGetNetInfoEx"); + // // Check if we are the first instance and Init everything accordingly // - if(StillToInit) + if(!WoemInitialize(g_DllHandle)) { - if(!WoemEnterDll(g_DllHandle)) - { - return FALSE; - } - - StillToInit = FALSE; + SetLastError(ERROR_INVALID_FUNCTION); + returnValue = FALSE; } - - return PacketGetNetInfoExH(AdapterName, buffer, NEntries); + else + { + returnValue = PacketGetNetInfoExH(AdapterName, buffer, NEntries); + } + + TRACE_EXIT("PacketGetNetInfoEx"); + return returnValue; } BOOLEAN PacketGetNetType(LPADAPTER AdapterObject, NetType *type) { - TraceEnter("PacketGetNetType"); - + BOOLEAN returnValue; + + TRACE_ENTER("PacketGetNetType"); + // // Check if we are the first instance and Init everything accordingly // - if(StillToInit) + if(!WoemInitialize(g_DllHandle)) { - if(!WoemEnterDll(g_DllHandle)) - { - return FALSE; - } - - StillToInit = FALSE; + SetLastError(ERROR_INVALID_FUNCTION); + returnValue = FALSE; } - - return PacketGetNetTypeH(AdapterObject, type); + else + { + returnValue = PacketGetNetTypeH(AdapterObject, type); + } + + TRACE_EXIT("PacketGetNetType"); + return returnValue; } //--------------------------------------------------------------------------- @@ -702,302 +781,364 @@ BOOLEAN PacketGetNetType(LPADAPTER AdapterObject, NetType *type) //--------------------------------------------------------------------------- // This public function enables winpcap oem -LONG PacketStartOem(PVOID Param) +BOOLEAN PacketStartOem(PCHAR errorString, UINT errorStringLength) { - PCHAR* ErrorString = (PCHAR*)Param; + CHAR internalErrorString[PACKET_ERRSTR_SIZE]; + + TRACE_ENTER("PacketStartOem"); - if(g_InitError) + + if (WoemEnterDll(::g_DllHandle, internalErrorString) == TRUE) { - if(ErrorString) - { - *ErrorString = g_LastWoemError; - } - - return 0; + g_OemActive = TRUE; + TRACE_EXIT("PacketStartOem"); + return TRUE; } + else + { + errorString[errorStringLength - 1] = '\0'; - OemActive = TRUE; - return 1; -} + strncpy(errorString, internalErrorString, errorStringLength - 1); -// Return the last WinPcap OEM error -PCHAR PacketGetLastOemError() -{ - return g_LastWoemError; + TRACE_EXIT("PacketStartOem"); + return FALSE; + } } //--------------------------------------------------------------------------- // FUNCTIONS //--------------------------------------------------------------------------- + +__inline BOOL WoemInitialize(HINSTANCE hDllHandle) +{ + BOOL returnValue; + char errorString[PACKET_ERRSTR_SIZE]; + + TRACE_ENTER("WoemInitialize"); + + if (g_StillToInit == FALSE) + { + TRACE_EXIT("WoemInitialize"); + return TRUE; + } + + returnValue = WoemEnterDll(hDllHandle, errorString); + + TRACE_EXIT("WoemInitialize"); + + return returnValue; +} + + + +#define LOAD_PACKET_DLL_TRACE_AND_COPY_ERROR(_msg) do{strncpy(errorString, _msg, PACKET_ERRSTR_SIZE - 1); TRACE_MESSAGE(_msg);}while(0) + + //////////////////////////////////////////////////////////////////// // Load the packet.dll binary with the specifed name //////////////////////////////////////////////////////////////////// -BOOL LoadPacketDll(char *PacketDllFileName) +BOOL LoadPacketDll(char *PacketDllFileName, char *errorString) { + TRACE_ENTER("LoadPacketDll"); + + errorString[PACKET_ERRSTR_SIZE - 1] = '\0'; // // Dinamically load the packet.dll library with loadlibrary // - if((PacketLib = LoadLibrary(PacketDllFileName)) == NULL) + if((g_PacketLib = LoadLibrary(PacketDllFileName)) == NULL) { - _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to initialize the Packet.dll dynamic library"); - WoemReportError(); + LOAD_PACKET_DLL_TRACE_AND_COPY_ERROR("Unable to initialize the Packet.dll dynamic library"); + + TRACE_EXIT("LoadPacketDll"); return FALSE; } // // Get the entry points of the just loaded library // - PacketGetVersionH = (PacketGetVersionHandler) GetProcAddress(PacketLib, "PacketGetVersion"); + PacketGetVersionH = (PacketGetVersionHandler) GetProcAddress(g_PacketLib, "PacketGetVersion"); if(!PacketGetVersionH) { - _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 1)"); - WoemReportError(); + LOAD_PACKET_DLL_TRACE_AND_COPY_ERROR("Unable to load Packet.dll (internal error 1)"); + + TRACE_EXIT("LoadPacketDll"); return FALSE; } - PacketGetDriverVersionH = (PacketGetDriverVersionHandler) GetProcAddress(PacketLib, "PacketGetDriverVersion"); + PacketGetDriverVersionH = (PacketGetDriverVersionHandler) GetProcAddress(g_PacketLib, "PacketGetDriverVersion"); if(!PacketGetDriverVersionH) { - _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 2)"); - WoemReportError(); + LOAD_PACKET_DLL_TRACE_AND_COPY_ERROR("Unable to load Packet.dll (internal error 2)"); + + TRACE_EXIT("LoadPacketDll"); return FALSE; } - PacketStopDriverH = (PacketStopDriverHandler) GetProcAddress(PacketLib, "PacketStopDriver"); + PacketStopDriverH = (PacketStopDriverHandler) GetProcAddress(g_PacketLib, "PacketStopDriver"); if(!PacketStopDriverH) { - _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 3)"); - WoemReportError(); + LOAD_PACKET_DLL_TRACE_AND_COPY_ERROR("Unable to load Packet.dll (internal error 3)"); + + TRACE_EXIT("LoadPacketDll"); return FALSE; } - PacketOpenAdapterH = (PacketOpenAdapterHandler) GetProcAddress(PacketLib, "PacketOpenAdapter"); + PacketOpenAdapterH = (PacketOpenAdapterHandler) GetProcAddress(g_PacketLib, "PacketOpenAdapter"); if(!PacketOpenAdapterH) { - _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 4)"); - WoemReportError(); + LOAD_PACKET_DLL_TRACE_AND_COPY_ERROR("Unable to load Packet.dll (internal error 4)"); + + TRACE_EXIT("LoadPacketDll"); return FALSE; } - PacketCloseAdapterH = (PacketCloseAdapterHandler) GetProcAddress(PacketLib, "PacketCloseAdapter"); + PacketCloseAdapterH = (PacketCloseAdapterHandler) GetProcAddress(g_PacketLib, "PacketCloseAdapter"); if(!PacketCloseAdapterH) { - _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 5)"); - WoemReportError(); + LOAD_PACKET_DLL_TRACE_AND_COPY_ERROR("Unable to load Packet.dll (internal error 5)"); + + TRACE_EXIT("LoadPacketDll"); return FALSE; } - PacketAllocatePacketH = (PacketAllocatePacketHandler) GetProcAddress(PacketLib, "PacketAllocatePacket"); + PacketAllocatePacketH = (PacketAllocatePacketHandler) GetProcAddress(g_PacketLib, "PacketAllocatePacket"); if(!PacketAllocatePacketH) { - _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 6)"); - WoemReportError(); + LOAD_PACKET_DLL_TRACE_AND_COPY_ERROR("Unable to load Packet.dll (internal error 6)"); + + TRACE_EXIT("LoadPacketDll"); return FALSE; } - PacketFreePacketH = (PacketFreePacketHandler) GetProcAddress(PacketLib, "PacketFreePacket"); + PacketFreePacketH = (PacketFreePacketHandler) GetProcAddress(g_PacketLib, "PacketFreePacket"); if(!PacketFreePacketH) { - _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 7)"); - WoemReportError(); + LOAD_PACKET_DLL_TRACE_AND_COPY_ERROR("Unable to load Packet.dll (internal error 7)"); + + TRACE_EXIT("LoadPacketDll"); return FALSE; } - PacketInitPacketH = (PacketInitPacketHandler) GetProcAddress(PacketLib, "PacketInitPacket"); + PacketInitPacketH = (PacketInitPacketHandler) GetProcAddress(g_PacketLib, "PacketInitPacket"); if(!PacketInitPacketH) { - _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 8)"); - WoemReportError(); + LOAD_PACKET_DLL_TRACE_AND_COPY_ERROR("Unable to load Packet.dll (internal error 8)"); + + TRACE_EXIT("LoadPacketDll"); return FALSE; } - PacketReceivePacketH = (PacketReceivePacketHandler) GetProcAddress(PacketLib, "PacketReceivePacket"); + PacketReceivePacketH = (PacketReceivePacketHandler) GetProcAddress(g_PacketLib, "PacketReceivePacket"); if(!PacketReceivePacketH) { - _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 9)"); - WoemReportError(); + LOAD_PACKET_DLL_TRACE_AND_COPY_ERROR("Unable to load Packet.dll (internal error 9)"); + + TRACE_EXIT("LoadPacketDll"); return FALSE; } - PacketSendPacketH = (PacketSendPacketHandler) GetProcAddress(PacketLib, "PacketSendPacket"); + PacketSendPacketH = (PacketSendPacketHandler) GetProcAddress(g_PacketLib, "PacketSendPacket"); if(!PacketSendPacketH) { - _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 10)"); - WoemReportError(); + LOAD_PACKET_DLL_TRACE_AND_COPY_ERROR("Unable to load Packet.dll (internal error 10)"); + + TRACE_EXIT("LoadPacketDll"); return FALSE; } - PacketSendPacketsH = (PacketSendPacketsHandler) GetProcAddress(PacketLib, "PacketSendPackets"); + PacketSendPacketsH = (PacketSendPacketsHandler) GetProcAddress(g_PacketLib, "PacketSendPackets"); if(!PacketSendPacketsH) { - _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 11)"); - WoemReportError(); + LOAD_PACKET_DLL_TRACE_AND_COPY_ERROR("Unable to load Packet.dll (internal error 11)"); + + TRACE_EXIT("LoadPacketDll"); return FALSE; } - PacketSetMinToCopyH = (PacketSetMinToCopyHandler) GetProcAddress(PacketLib, "PacketSetMinToCopy"); + PacketSetMinToCopyH = (PacketSetMinToCopyHandler) GetProcAddress(g_PacketLib, "PacketSetMinToCopy"); if(!PacketSetMinToCopyH) { - _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 12)"); - WoemReportError(); + LOAD_PACKET_DLL_TRACE_AND_COPY_ERROR("Unable to load Packet.dll (internal error 12)"); + + TRACE_EXIT("LoadPacketDll"); return FALSE; } - PacketSetModeH = (PacketSetModeHandler) GetProcAddress(PacketLib, "PacketSetMode"); + PacketSetModeH = (PacketSetModeHandler) GetProcAddress(g_PacketLib, "PacketSetMode"); if(!PacketSetModeH) { - _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 12a)"); - WoemReportError(); + LOAD_PACKET_DLL_TRACE_AND_COPY_ERROR("Unable to load Packet.dll (internal error 12a)"); + + TRACE_EXIT("LoadPacketDll"); return FALSE; } - PacketSetDumpNameH = (PacketSetDumpNameHandler) GetProcAddress(PacketLib, "PacketSetDumpName"); + PacketSetDumpNameH = (PacketSetDumpNameHandler) GetProcAddress(g_PacketLib, "PacketSetDumpName"); if(!PacketSetDumpNameH) { - _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 13)"); - WoemReportError(); + LOAD_PACKET_DLL_TRACE_AND_COPY_ERROR("Unable to load Packet.dll (internal error 13)"); + + TRACE_EXIT("LoadPacketDll"); return FALSE; } - PacketSetDumpLimitsH = (PacketSetDumpLimitsHandler) GetProcAddress(PacketLib, "PacketSetDumpLimits"); + PacketSetDumpLimitsH = (PacketSetDumpLimitsHandler) GetProcAddress(g_PacketLib, "PacketSetDumpLimits"); if(!PacketSetDumpLimitsH) { - _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 14)"); - WoemReportError(); + LOAD_PACKET_DLL_TRACE_AND_COPY_ERROR("Unable to load Packet.dll (internal error 14)"); + + TRACE_EXIT("LoadPacketDll"); return FALSE; } - PacketIsDumpEndedH = (PacketIsDumpEndedHandler) GetProcAddress(PacketLib, "PacketIsDumpEnded"); + PacketIsDumpEndedH = (PacketIsDumpEndedHandler) GetProcAddress(g_PacketLib, "PacketIsDumpEnded"); if(!PacketIsDumpEndedH) { - _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 15)"); - WoemReportError(); + LOAD_PACKET_DLL_TRACE_AND_COPY_ERROR("Unable to load Packet.dll (internal error 15)"); + + TRACE_EXIT("LoadPacketDll"); return FALSE; } - PacketGetReadEventH = (PacketGetReadEventHandler) GetProcAddress(PacketLib, "PacketGetReadEvent"); + PacketGetReadEventH = (PacketGetReadEventHandler) GetProcAddress(g_PacketLib, "PacketGetReadEvent"); if(!PacketGetReadEventH) { - _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 16)"); - WoemReportError(); + LOAD_PACKET_DLL_TRACE_AND_COPY_ERROR("Unable to load Packet.dll (internal error 16)"); + + TRACE_EXIT("LoadPacketDll"); return FALSE; } - PacketSetNumWritesH = (PacketSetNumWritesHandler) GetProcAddress(PacketLib, "PacketSetNumWrites"); + PacketSetNumWritesH = (PacketSetNumWritesHandler) GetProcAddress(g_PacketLib, "PacketSetNumWrites"); if(!PacketSetNumWritesH) { - _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 17)"); - WoemReportError(); + LOAD_PACKET_DLL_TRACE_AND_COPY_ERROR("Unable to load Packet.dll (internal error 17)"); + + TRACE_EXIT("LoadPacketDll"); return FALSE; } - PacketSetReadTimeoutH = (PacketSetReadTimeoutHandler) GetProcAddress(PacketLib, "PacketSetReadTimeout"); + PacketSetReadTimeoutH = (PacketSetReadTimeoutHandler) GetProcAddress(g_PacketLib, "PacketSetReadTimeout"); if(!PacketSetReadTimeoutH) { - _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 18)"); - WoemReportError(); + LOAD_PACKET_DLL_TRACE_AND_COPY_ERROR("Unable to load Packet.dll (internal error 18)"); + + TRACE_EXIT("LoadPacketDll"); return FALSE; } - PacketSetBuffH = (PacketSetBuffHandler) GetProcAddress(PacketLib, "PacketSetBuff"); + PacketSetBuffH = (PacketSetBuffHandler) GetProcAddress(g_PacketLib, "PacketSetBuff"); if(!PacketSetBuffH) { - _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 19)"); - WoemReportError(); + LOAD_PACKET_DLL_TRACE_AND_COPY_ERROR("Unable to load Packet.dll (internal error 19)"); + + TRACE_EXIT("LoadPacketDll"); return FALSE; } - PacketSetBpfH = (PacketSetBpfHandler) GetProcAddress(PacketLib, "PacketSetBpf"); + PacketSetBpfH = (PacketSetBpfHandler) GetProcAddress(g_PacketLib, "PacketSetBpf"); if(!PacketSetBpfH) { - _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 20)"); - WoemReportError(); + LOAD_PACKET_DLL_TRACE_AND_COPY_ERROR("Unable to load Packet.dll (internal error 20)"); + + TRACE_EXIT("LoadPacketDll"); return FALSE; } - PacketSetSnapLenH = (PacketSetSnapLenHandler) GetProcAddress(PacketLib, "PacketSetSnapLen"); + PacketSetSnapLenH = (PacketSetSnapLenHandler) GetProcAddress(g_PacketLib, "PacketSetSnapLen"); if(!PacketSetSnapLenH) { - _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 21)"); - WoemReportError(); + LOAD_PACKET_DLL_TRACE_AND_COPY_ERROR("Unable to load Packet.dll (internal error 21)"); + + TRACE_EXIT("LoadPacketDll"); return FALSE; } - PacketGetStatsH = (PacketGetStatsHandler) GetProcAddress(PacketLib, "PacketGetStats"); + PacketGetStatsH = (PacketGetStatsHandler) GetProcAddress(g_PacketLib, "PacketGetStats"); if(!PacketGetStatsH) { - _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 22)"); - WoemReportError(); + LOAD_PACKET_DLL_TRACE_AND_COPY_ERROR("Unable to load Packet.dll (internal error 22)"); + + TRACE_EXIT("LoadPacketDll"); return FALSE; } - PacketGetStatsExH = (PacketGetStatsExHandler) GetProcAddress(PacketLib, "PacketGetStatsEx"); + PacketGetStatsExH = (PacketGetStatsExHandler) GetProcAddress(g_PacketLib, "PacketGetStatsEx"); if(!PacketGetStatsExH) { - _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 23)"); - WoemReportError(); + LOAD_PACKET_DLL_TRACE_AND_COPY_ERROR("Unable to load Packet.dll (internal error 23)"); + + TRACE_EXIT("LoadPacketDll"); return FALSE; } - PacketRequestH = (PacketRequestHandler) GetProcAddress(PacketLib, "PacketRequest"); + PacketRequestH = (PacketRequestHandler) GetProcAddress(g_PacketLib, "PacketRequest"); if(!PacketRequestH) { - _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 24)"); - WoemReportError(); + LOAD_PACKET_DLL_TRACE_AND_COPY_ERROR("Unable to load Packet.dll (internal error 24)"); + + TRACE_EXIT("LoadPacketDll"); return FALSE; } - PacketSetHwFilterH = (PacketSetHwFilterHandler) GetProcAddress(PacketLib, "PacketSetHwFilter"); + PacketSetHwFilterH = (PacketSetHwFilterHandler) GetProcAddress(g_PacketLib, "PacketSetHwFilter"); if(!PacketSetHwFilterH) { - _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 25)"); - WoemReportError(); + LOAD_PACKET_DLL_TRACE_AND_COPY_ERROR("Unable to load Packet.dll (internal error 25)"); + + TRACE_EXIT("LoadPacketDll"); return FALSE; } - PacketGetAdapterNamesH = (PacketGetAdapterNamesHandler) GetProcAddress(PacketLib, "PacketGetAdapterNames"); + PacketGetAdapterNamesH = (PacketGetAdapterNamesHandler) GetProcAddress(g_PacketLib, "PacketGetAdapterNames"); if(!PacketGetAdapterNamesH) { - _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 26)"); - WoemReportError(); + LOAD_PACKET_DLL_TRACE_AND_COPY_ERROR("Unable to load Packet.dll (internal error 26)"); + + TRACE_EXIT("LoadPacketDll"); return FALSE; } - PacketGetNetInfoExH = (PacketGetNetInfoExHandler) GetProcAddress(PacketLib, "PacketGetNetInfoEx"); + PacketGetNetInfoExH = (PacketGetNetInfoExHandler) GetProcAddress(g_PacketLib, "PacketGetNetInfoEx"); if(!PacketGetNetInfoExH) { - _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 27)"); - WoemReportError(); + LOAD_PACKET_DLL_TRACE_AND_COPY_ERROR("Unable to load Packet.dll (internal error 27)"); + + TRACE_EXIT("LoadPacketDll"); return FALSE; } - PacketGetNetTypeH = (PacketGetNetTypeHandler) GetProcAddress(PacketLib, "PacketGetNetType"); + PacketGetNetTypeH = (PacketGetNetTypeHandler) GetProcAddress(g_PacketLib, "PacketGetNetType"); if(!PacketGetNetTypeH) { - _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 28)"); - WoemReportError(); + LOAD_PACKET_DLL_TRACE_AND_COPY_ERROR("Unable to load Packet.dll (internal error 28)"); + + TRACE_EXIT("LoadPacketDll"); return FALSE; } PacketSetLoopbackBehaviorH = (PacketSetLoopbackBehaviorHandler) GetProcAddress(PacketLib, "PacketSetLoopbackBehavior"); if(!PacketSetLoopbackBehaviorH) { - _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 29)"); - WoemReportError(); + LOAD_PACKET_DLL_TRACE_AND_COPY_ERROR("Unable to load Packet.dll (internal error 29)"); + + TRACE_EXIT("LoadPacketDll"); return FALSE; } #ifdef STATIC_LIB - PacketRegWoemLeaveHandlerH = (PacketRegWoemLeaveHandlerHandler) GetProcAddress(PacketLib, "PacketRegWoemLeaveHandler"); + PacketRegWoemLeaveHandlerH = (PacketRegWoemLeaveHandlerHandler) GetProcAddress(g_PacketLib, "PacketRegWoemLeaveHandler"); if(!PacketRegWoemLeaveHandlerH) { - _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to load Packet.dll (internal error 30)"); - WoemReportError(); + LOAD_PACKET_DLL_TRACE_AND_COPY_ERROR("Unable to load Packet.dll (internal error 30)"); + + TRACE_EXIT("LoadPacketDll"); return FALSE; } #endif + TRACE_EXIT("LoadPacketDll"); return TRUE; } @@ -1008,7 +1149,10 @@ BOOL LoadPacketDll(char *PacketDllFileName) //////////////////////////////////////////////////////////////////// void RegisterPacketUnloadHandler(void* Handler) { + TRACE_ENTER("RegisterPacketUnloadHandler"); PacketRegWoemLeaveHandlerH(Handler); + TRACE_EXIT("RegisterPacketUnloadHandler"); + } #endif // STATIC_LIB @@ -1018,13 +1162,14 @@ void RegisterPacketUnloadHandler(void* Handler) //////////////////////////////////////////////////////////////////// void DeleteDll(char *DllFileName) { + TRACE_ENTER("RegisterPacketUnloadHandler"); // BOOL FRes; // // We don't check return values because in every case we want to go on with cleanup // - // FRes = FreeLibrary(PacketLib); + // FRes = FreeLibrary(g_g_PacketLib); // // We cannot delete the library immediately, because we're using it. Therefore, we delay @@ -1034,4 +1179,6 @@ void DeleteDll(char *DllFileName) DllFileName, NULL, MOVEFILE_DELAY_UNTIL_REBOOT); + + TRACE_EXIT("RegisterPacketUnloadHandler"); } From 5a0239899952a39a2450abe35fa1e00f9cbc2a15 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Tue, 1 Nov 2005 17:28:44 +0000 Subject: [PATCH 049/316] Added a global critical section protecting the global mutex g_hGlobalMutex. Protected WoemEnterDll with the mutex, using an internal unprotected function (WoemEnterDllInternal) and an external one (WoemEnterDll) that just acquires the critical section and calls the internal one. Modified the signature of WoemEnterDll(Internal) so that it returns an error string in case of failure. Added better tracng to WoemEnterDll(Internal). Fixed some constants in the code (5 is ERROR_ACCESS_DENIED). Fixed a problem in the code acquiring the global mutex: we should not loop indefinitely if we cannot acquire the mutex. Simply fail after 10 seconds. Removed some duplicated code in the function (WoemCreateBinaryNames). Fixed the code related to Windows Vista: we should load the NT4 DLL, not the win2k one. Removed the string "system32\\\\drivers\\" using the constant NPF_DRIVER_PATH_ASCII. Modified the signature of LoadPacketDll so that it returns an error message. Cleaned up the code of WoemCreateNameRegistryEntries(). --- OEM/WinpcapOem/WinPcapOem.cpp | 391 ++++++++++++---------------------- 1 file changed, 136 insertions(+), 255 deletions(-) diff --git a/OEM/WinpcapOem/WinPcapOem.cpp b/OEM/WinpcapOem/WinPcapOem.cpp index 08883e53..fc688ac9 100644 --- a/OEM/WinpcapOem/WinPcapOem.cpp +++ b/OEM/WinpcapOem/WinPcapOem.cpp @@ -4,6 +4,7 @@ #include "WpcapNames.h" #include "WinpcapOem.h" #include "resource.h" +#include "WoemDebug.h" #ifdef SECURITY #include "Security.h" @@ -19,10 +20,11 @@ char g_NpfDriverNameId[32]; WCHAR g_NpfDriverNameIdW[32]; HINSTANCE g_DllHandle = NULL; char g_LastWoemError[PACKET_ERRSTR_SIZE]; -BOOL g_InitError = FALSE; -extern BOOL OemActive; +volatile BOOL g_InitError = FALSE; BOOL g_IsProcAuthorized = FALSE; +CRITICAL_SECTION g_CritSectionProtectingWoemEnterDll; + //////////////////////////////////////////////////////////////////// // DLL Entry point //////////////////////////////////////////////////////////////////// @@ -34,12 +36,13 @@ BOOL APIENTRY DllMain(HINSTANCE Dllh, DWORD Reason, LPVOID lpReserved) case DLL_PROCESS_ATTACH: g_DllHandle = Dllh; + ::InitializeCriticalSection(&::g_CritSectionProtectingWoemEnterDll); #ifdef SECURITY // // the version with security enabled doesn't need to be activated with PacketStartOem() // - OemActive = TRUE; + g_OemActive = TRUE; #endif break; @@ -86,16 +89,43 @@ PCHAR getObjectName(PCHAR systemObjectName, UINT strlen) return systemObjectName; } + +static BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString); + + +BOOL WoemEnterDll(HINSTANCE DllHandle, char *WoemErrorString) +{ + BOOL returnValue; + + TRACE_ENTER("WoemEnterDll"); + + ::EnterCriticalSection(&::g_CritSectionProtectingWoemEnterDll); + + returnValue = WoemEnterDllInternal(DllHandle, WoemErrorString); + + ::LeaveCriticalSection(&::g_CritSectionProtectingWoemEnterDll); + + TRACE_EXIT("WoemEnterDll"); + + return returnValue; +} + +#define WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR(_msg) do{strncpy(WoemErrorString, _msg, PACKET_ERRSTR_SIZE - 1); TRACE_MESSAGE(_msg);}while(0) + //////////////////////////////////////////////////////////////////// // Function called when a process loads the dll. // If this is the first time the dll is loaded, we start the driver // service +// +// NOTE: this function has logging/tracing code, do NOT call it +// from within DllMain! +// NOTE: this internal function does not protect the access to +// the global variables (in particular g_hGlobalMutex. //////////////////////////////////////////////////////////////////// -BOOL WoemEnterDll(HINSTANCE DllHandle) +BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) { SECURITY_DESCRIPTOR sd; SECURITY_ATTRIBUTES sa; - BOOLEAN retry; LONG lold; char ObjName[MAX_OBJNAME_LEN]; UINT i; @@ -107,19 +137,28 @@ BOOL WoemEnterDll(HINSTANCE DllHandle) DWORD Result; #endif + TRACE_ENTER("WoemEnterDll"); + + WoemErrorString[PACKET_ERRSTR_SIZE - 1] = '\0'; + + #ifdef SECURITY + + TRACE_MESSAGE("Process bound Woem, checking if the process is authorized..."); if (!g_IsProcAuthorized) { // // the version with security enabled doesn't need to be activated with PacketStartOem() // - OemActive = TRUE; - Result = WoemGetCurrentProcessAuthorization(g_LastWoemError); + g_OemActive = TRUE; + Result = WoemGetCurrentProcessAuthorization(WoemErrorString); if (Result == WOEM_PROC_AUTHORIZATION_FAILURE) { - g_InitError = TRUE; g_IsProcAuthorized = FALSE; + //the error string has been already set by WoemGetCurrentProcessAuthorization + return FALSE; + } else if (Result == WOEM_PROC_AUTHORIZATION_OK) @@ -129,7 +168,10 @@ BOOL WoemEnterDll(HINSTANCE DllHandle) else { g_IsProcAuthorized = FALSE; - MessageBox(NULL, "This version of WinPcap OEM can be only run in conjunction with CACE Technologies Network Toolkit. This program is not recognized as part of The Network Toolkit, and therefore WinPcap OEM will not work.", "Error", MB_ICONERROR); + + WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("This version of WinPcap OEM can be only run in conjunction with CACE Technologies Network Toolkit. This program is not recognized as part of The Network Toolkit, and therefore WinPcap OEM will not work."); + + MessageBox(NULL, "This version of WinPcap OEM can be only run in conjunction with CACE Technologies Network Toolkit.\nThis program is not recognized as part of The Network Toolkit, and therefore WinPcap OEM will not work.", "Error", MB_ICONERROR); return FALSE; } } @@ -141,8 +183,8 @@ BOOL WoemEnterDll(HINSTANCE DllHandle) // if(!g_DllHandle) { - _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "NULL DLL Handle"); - WoemReportError(); + WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("NULL DLL Handle"); + return FALSE; } #endif @@ -152,8 +194,7 @@ BOOL WoemEnterDll(HINSTANCE DllHandle) // // This should never happen, but better to be sure... // - _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Double initialization"); - WoemReportError(); + WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Double initialization"); return FALSE; } @@ -172,16 +213,17 @@ BOOL WoemEnterDll(HINSTANCE DllHandle) // _snprintf(ObjName, MAX_OBJNAME_LEN, MUTEX_NAME); g_hGlobalMutex = CreateMutex(&sa, FALSE, getObjectName(ObjName, MAX_OBJNAME_LEN)); + if (g_hGlobalMutex == NULL) { - if (GetLastError()==5) + if (GetLastError() == ERROR_ACCESS_DENIED) { - _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "not enough priviles to start the packet driver"); + WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Not enough priviles to create the global mutex."); + } + else + { + WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Unable to create the global mutex."); } - - _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "unable to create the global mutex"); - - WoemReportError(); return FALSE; } @@ -189,43 +231,30 @@ BOOL WoemEnterDll(HINSTANCE DllHandle) // // Try to acquire the ownership of the mutex // - retry = TRUE; - - do + DWORD result = WaitForSingleObject(g_hGlobalMutex, 10000); + switch(result) { - DWORD result=WaitForSingleObject(g_hGlobalMutex,10000); - switch(result) - { - case WAIT_FAILED: - - ReleaseMutex(g_hGlobalMutex); - - if(g_hGlobalMutex!=0) - { - CloseHandle(g_hGlobalMutex); - g_hGlobalMutex = NULL; - - } - if (g_hGlobalSemaphore!=0) - { - CloseHandle(g_hGlobalSemaphore); - g_hGlobalSemaphore = NULL; - } - - return FALSE; - - case WAIT_TIMEOUT: - - _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Timeout on the global mutex"); - WoemReportError(); - - break; - - default: - retry = FALSE; - break; - } - } while (retry); + case WAIT_FAILED: + + CloseHandle(g_hGlobalMutex); + g_hGlobalMutex = NULL; + + WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Error trying to acquire the global mutex."); + + return FALSE; + + case WAIT_TIMEOUT: + + CloseHandle(g_hGlobalMutex); + WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Timeout on the global mutex"); + + return FALSE; + + case WAIT_OBJECT_0: + case WAIT_ABANDONED: + break; + + } // // Create a Security Descriptor with NULL DACL to turn off all security checks. @@ -242,33 +271,27 @@ BOOL WoemEnterDll(HINSTANCE DllHandle) // _snprintf(g_GlobalSemaphoreName, MAX_OBJNAME_LEN, SEMAPHORE_NAME); g_hGlobalSemaphore = CreateSemaphore(&sa, 0, MAX_VALUE_SEMAPHORE, getObjectName(g_GlobalSemaphoreName, MAX_OBJNAME_LEN)); + if (g_hGlobalSemaphore == NULL) { - if (GetLastError()==5) + if (GetLastError() == ERROR_ACCESS_DENIED) { - _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "not enough priviles to start the packet driver"); + WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Not enough priviles to create the global semaphore."); } else - { - _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "unable to create the global semaphore"); + { + WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Unable to create the global semaphore."); } - + ReleaseMutex(g_hGlobalMutex); - WoemReportError(); - if(g_hGlobalMutex!=0) { CloseHandle(g_hGlobalMutex); g_hGlobalMutex = NULL; } - if (g_hGlobalSemaphore!=0) - { - CloseHandle(g_hGlobalSemaphore); - g_hGlobalSemaphore = NULL; - } - + return FALSE; } @@ -277,12 +300,10 @@ BOOL WoemEnterDll(HINSTANCE DllHandle) // if(ReleaseSemaphore(g_hGlobalSemaphore, 1, &lold)==FALSE) { - _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "unable to release the semaphore"); + WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Unable to release the semaphore"); ReleaseMutex(g_hGlobalMutex); - WoemReportError(); - if(g_hGlobalMutex!=0) { CloseHandle(g_hGlobalMutex); @@ -298,7 +319,7 @@ BOOL WoemEnterDll(HINSTANCE DllHandle) return FALSE; } - if (lold==0) + if (lold == 0) { // // IF WE ARE HERE, THE DLL IS BEING LOADED FOR THE FIRST TIME. @@ -310,15 +331,13 @@ BOOL WoemEnterDll(HINSTANCE DllHandle) ZeroMemory(&osVer, sizeof(OSVERSIONINFO)); osVer.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); - if (GetVersionEx(&osVer)==0) + if (GetVersionEx(&osVer) == 0) { - _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to determine OS version"); + WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Unable to determine OS version"); ReleaseMutex(g_hGlobalMutex); - WoemReportError(); - - if(g_hGlobalMutex!=0) + if(g_hGlobalMutex != 0) { CloseHandle(g_hGlobalMutex); g_hGlobalMutex = NULL; @@ -338,12 +357,10 @@ BOOL WoemEnterDll(HINSTANCE DllHandle) // if(!WoemCreateNameRegistryEntries()) { - _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "unable to create registry entries. Administrator provileges are required for this operation"); + WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Unable to create registry entries. Administrator provileges are required for this operation"); ReleaseMutex(g_hGlobalMutex); - WoemReportError(); - if(g_hGlobalMutex!=0) { CloseHandle(g_hGlobalMutex); @@ -361,12 +378,10 @@ BOOL WoemEnterDll(HINSTANCE DllHandle) if(!WoemCreateBinaryNames()) { - _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "unable to create binary names"); + WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Unable to create binary names"); ReleaseMutex(g_hGlobalMutex); - WoemReportError(); - if(g_hGlobalMutex!=0) { CloseHandle(g_hGlobalMutex); @@ -388,7 +403,26 @@ BOOL WoemEnterDll(HINSTANCE DllHandle) // If we are here and the service is running, it's almost surely the result // of some mess. We try to cleanup. // - delete_service(g_NpfDriverNameId); + if (delete_service(g_NpfDriverNameId) == -1) + { + WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Error deleting an existing copy of the NPF service"); + + ReleaseMutex(g_hGlobalMutex); + + if(g_hGlobalMutex!=0) + { + CloseHandle(g_hGlobalMutex); + g_hGlobalMutex = NULL; + + } + if (g_hGlobalSemaphore!=0) + { + CloseHandle(g_hGlobalSemaphore); + g_hGlobalSemaphore = NULL; + } + + return FALSE; + } } // @@ -405,12 +439,10 @@ BOOL WoemEnterDll(HINSTANCE DllHandle) // if(!WoemSaveResourceToDisk(g_DllHandle, IDP_DLLNT, g_DllFullPath)) { - _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to copy the WinPcap OEM files. Administrative privileges are required for this operation.", g_DllFullPath); + WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Unable to copy the WinPcap OEM files. Administrative privileges are required for this operation."); ReleaseMutex(g_hGlobalMutex); - WoemReportError(); - if(g_hGlobalMutex!=0) { CloseHandle(g_hGlobalMutex); @@ -431,14 +463,12 @@ BOOL WoemEnterDll(HINSTANCE DllHandle) // if(!WoemSaveResourceToDisk(g_DllHandle, IDP_DRINT, g_DriverFullPath)) { - _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to copy the WinPcap OEM files. Administrative privileges are required for this operation.", g_DllFullPath); + WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Unable to copy the WinPcap OEM files. Administrative privileges are required for this operation."); _unlink(g_DllFullPath); ReleaseMutex(g_hGlobalMutex); - WoemReportError(); - if(g_hGlobalMutex!=0) { CloseHandle(g_hGlobalMutex); @@ -468,8 +498,7 @@ BOOL WoemEnterDll(HINSTANCE DllHandle) hr = HrInstallNetMonProtocol(); if (hr != S_OK) { - _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Warning: unable to load the netmon driver, ndiswan captures will not be available"); - WoemReportError(); + TRACE_MESSAGE("Warning: unable to load the netmon driver, ndiswan captures will not be available"); } } else @@ -482,12 +511,10 @@ BOOL WoemEnterDll(HINSTANCE DllHandle) // if(!WoemSaveResourceToDisk(g_DllHandle, IDP_DLL2K, g_DllFullPath)) { - _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to copy the WinPcap OEM files. Administrative privileges are required for this operation."); + WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Unable to copy the WinPcap OEM files. Administrative privileges are required for this operation."); ReleaseMutex(g_hGlobalMutex); - WoemReportError(); - if(g_hGlobalMutex!=0) { CloseHandle(g_hGlobalMutex); @@ -508,13 +535,11 @@ BOOL WoemEnterDll(HINSTANCE DllHandle) // if(!WoemSaveResourceToDisk(g_DllHandle, IDP_DRI2K, g_DriverFullPath)) { - _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to copy the WinPcap OEM files. Administrative privileges are required for this operation.", g_DllFullPath); + WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Unable to copy the WinPcap OEM files. Administrative privileges are required for this operation."); _unlink(g_DllFullPath); ReleaseMutex(g_hGlobalMutex); - - WoemReportError(); if(g_hGlobalMutex!=0) { @@ -540,14 +565,12 @@ BOOL WoemEnterDll(HINSTANCE DllHandle) // // Extract packet.dll to disk // - if(!WoemSaveResourceToDisk(g_DllHandle, IDP_DLL2K, g_DllFullPath)) + if(!WoemSaveResourceToDisk(g_DllHandle, IDP_DLLNT, g_DllFullPath)) { - _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to copy the WinPcap OEM files. Administrative privileges are required for this operation.", g_DllFullPath); + WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Unable to copy the WinPcap OEM files. Administrative privileges are required for this operation."); ReleaseMutex(g_hGlobalMutex); - WoemReportError(); - if(g_hGlobalMutex!=0) { CloseHandle(g_hGlobalMutex); @@ -568,12 +591,10 @@ BOOL WoemEnterDll(HINSTANCE DllHandle) // if(!WoemSaveResourceToDisk(g_DllHandle, IDP_DRI2K, g_DriverFullPath)) { - _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "Unable to copy the WinPcap OEM files. Administrative privileges are required for this operation."); + WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Unable to copy the WinPcap OEM files. Administrative privileges are required for this operation."); _unlink(g_DllFullPath); - WoemReportError(); - ReleaseMutex(g_hGlobalMutex); if(g_hGlobalMutex!=0) @@ -603,21 +624,19 @@ BOOL WoemEnterDll(HINSTANCE DllHandle) _snprintf(SvcBin, sizeof(SvcDesc) - 1, - "system32\\drivers\\%s.sys", + NPF_DRIVER_PATH_ASCII "%s.sys", g_NpfDriverNameId); if(create_driver_service(g_NpfDriverNameId, SvcDesc, SvcBin) == -1) { - _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "unable to create the packet driver service"); + WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("unable to create the packet driver service"); _unlink(g_DllFullPath); _unlink(g_DriverFullPath); ReleaseMutex(g_hGlobalMutex); - - WoemReportError(); if(g_hGlobalMutex!=0) { @@ -639,15 +658,13 @@ BOOL WoemEnterDll(HINSTANCE DllHandle) // if(start_service(g_NpfDriverNameId) == -1) { - _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "unable to start the packet driver service"); + WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("unable to start the packet driver service"); delete_service(g_NpfDriverNameId); _unlink(g_DllFullPath); _unlink(g_DriverFullPath); ReleaseMutex(g_hGlobalMutex); - - WoemReportError(); if(g_hGlobalMutex!=0) { @@ -678,7 +695,7 @@ BOOL WoemEnterDll(HINSTANCE DllHandle) i++; if(i == 300) { - _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "timeout while starting the packet driver"); + WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("timeout while starting the packet driver"); delete_service(g_NpfDriverNameId); _unlink(g_DllFullPath); @@ -686,8 +703,6 @@ BOOL WoemEnterDll(HINSTANCE DllHandle) ReleaseMutex(g_hGlobalMutex); - WoemReportError(); - if(g_hGlobalMutex!=0) { CloseHandle(g_hGlobalMutex); @@ -713,42 +728,11 @@ BOOL WoemEnterDll(HINSTANCE DllHandle) _unlink(g_DriverFullPath); } - // - // Create the names for the binaries - // - if(!WoemCreateBinaryNames()) - { - _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "unable to create binary names"); - - delete_service(g_NpfDriverNameId); - _unlink(g_DllFullPath); - _unlink(g_DriverFullPath); - - ReleaseMutex(g_hGlobalMutex); - - WoemReportError(); - - if(g_hGlobalMutex!=0) - { - CloseHandle(g_hGlobalMutex); - g_hGlobalMutex = NULL; - - } - if (g_hGlobalSemaphore!=0) - { - CloseHandle(g_hGlobalSemaphore); - g_hGlobalSemaphore = NULL; - } - - return FALSE; - } - // // Load packet.dll and intercept all the calls // - if(!LoadPacketDll(g_DllFullPath)) + if(!LoadPacketDll(g_DllFullPath, WoemErrorString)) { - _snprintf(g_LastWoemError, PACKET_ERRSTR_SIZE - 1, "unable to load packet.dll"); delete_service(g_NpfDriverNameId); _unlink(g_DllFullPath); @@ -756,8 +740,6 @@ BOOL WoemEnterDll(HINSTANCE DllHandle) ReleaseMutex(g_hGlobalMutex); - WoemReportError(); - if(g_hGlobalMutex!=0) { CloseHandle(g_hGlobalMutex); @@ -795,6 +777,11 @@ BOOL WoemEnterDll(HINSTANCE DllHandle) //////////////////////////////////////////////////////////////////// // Function called when a process loads the dll. +// +// NOTE: we cannot use tracing in this function, since it's called +// in the context of DllMain (MSDN clearly states that only the +// functions exported by kernel32.dll can be called within the +// DllMain //////////////////////////////////////////////////////////////////// BOOL WoemLeaveDll() { @@ -947,39 +934,9 @@ BOOL WoemLeaveDll() BOOL WoemCreateNameRegistryEntries() { HKEY WinpcapKey; - DWORD DriverId = 0; - DWORD Type; - DWORD Len = sizeof(DriverId); char KeyValBuf[MAX_WINPCAP_KEY_CHARS]; WCHAR KeyValBufW[MAX_WINPCAP_KEY_CHARS]; - // - // First, check if the WinPcap global key is already present and - // if yes retrieve the id of the last loaded instance - // - if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, - WINPCAP_INSTANCE_KEY, - 0, - KEY_ALL_ACCESS, - &WinpcapKey) == ERROR_SUCCESS) - { - // - // Key present, check the ID - // - if(RegQueryValueEx(WinpcapKey, - "npf_driver_id", - NULL, - &Type, - (LPBYTE)&DriverId, - &Len) != ERROR_SUCCESS) // We include two bytes for string termination - { - // - // Key present but ID not present: this is the result of some mess - // - DriverId = 0; - } - } - // // Do a cleanup, just to be sure // @@ -1001,45 +958,10 @@ BOOL WoemCreateNameRegistryEntries() return FALSE; } - // - // Increase the ID and write it into the registry - // - DriverId++; - - if(DriverId > 99) - DriverId = 0; - - if(RegSetValueEx(WinpcapKey, - "npf_driver_id", - 0, - REG_DWORD, - (LPBYTE)&DriverId, - sizeof(DriverId)) != ERROR_SUCCESS) - { - RegCloseKey(WinpcapKey); - - RegDeleteKey(HKEY_LOCAL_MACHINE, WINPCAP_INSTANCE_KEY); - return FALSE; - } - // // Created the strings that we'll use to build the registry keys values // and load the components // -/* XXX this is the totally dynamic version! - - _snprintf(NpfDrNameWhId, - sizeof(NpfDrNameWhId) - 1, - "%s%.2d", - NPF_DRIVER_NAME, - DriverId); - - _snwprintf(NpfDrNameWhIdW, - sizeof(NpfDrNameWhIdW) / sizeof(WCHAR) - 1, - L"%ws%.2d", - NPF_DRIVER_NAME_WIDECHAR, - DriverId); -*/ _snprintf(g_NpfDriverNameId, sizeof(g_NpfDriverNameId) - 1, "%s", @@ -1395,51 +1317,10 @@ BOOL WoemCreateBinaryNames() return FALSE; } -/* XXX this is the totally dynamic version! - // - // First, check if the WinPcap global key is already present and - // if yes retrieve the id of the last loaded instance - // - if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, - WINPCAP_INSTANCE_KEY, - 0, - KEY_ALL_ACCESS, - &WinpcapKey) == ERROR_SUCCESS) - { - // - // Key present, check the ID - // - if(RegQueryValueEx(WinpcapKey, - "npf_driver_id", - NULL, - &Type, - (LPBYTE)&DriverId, - &Len) != ERROR_SUCCESS) // We include two bytes for string termination - { - // - // Key present but ID not present: this is the result of some mess - // - DriverId = 0; - } - } - // // Created the strings that we'll use to build the registry keys values // and load the components // - - _snprintf(NpfDrNameWhId, - sizeof(NpfDrNameWhId) - 1, - "%s%.2d", - NPF_DRIVER_NAME, - DriverId); - - _snwprintf(NpfDrNameWhIdW, - sizeof(NpfDrNameWhIdW) / sizeof(WCHAR) - 1, - L"%ws%.2d", - NPF_DRIVER_NAME_WIDECHAR, - DriverId); -*/ _snprintf(g_NpfDriverNameId, sizeof(g_NpfDriverNameId) - 1, "%s", From 7f61f3285243c9e9c270fa1567a0c77a3f4289b4 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Tue, 1 Nov 2005 17:29:21 +0000 Subject: [PATCH 050/316] Fixed a wrong variable name that was causing a compilation error. --- OEM/WinpcapOem/PacketWrapper.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OEM/WinpcapOem/PacketWrapper.cpp b/OEM/WinpcapOem/PacketWrapper.cpp index a1e596a0..d74eaf78 100644 --- a/OEM/WinpcapOem/PacketWrapper.cpp +++ b/OEM/WinpcapOem/PacketWrapper.cpp @@ -1118,7 +1118,7 @@ BOOL LoadPacketDll(char *PacketDllFileName, char *errorString) return FALSE; } - PacketSetLoopbackBehaviorH = (PacketSetLoopbackBehaviorHandler) GetProcAddress(PacketLib, "PacketSetLoopbackBehavior"); + PacketSetLoopbackBehaviorH = (PacketSetLoopbackBehaviorHandler) GetProcAddress(g_PacketLib, "PacketSetLoopbackBehavior"); if(!PacketSetLoopbackBehaviorH) { LOAD_PACKET_DLL_TRACE_AND_COPY_ERROR("Unable to load Packet.dll (internal error 29)"); From 5901127c1ce95885c3a9dbc1f8d2c411356067e1 Mon Sep 17 00:00:00 2001 From: Loris Degioanni Date: Thu, 17 Nov 2005 04:33:51 +0000 Subject: [PATCH 051/316] WoemCreateBinaryNames() was called only for the first process using WinPcap OEM. This prevented all the following processes to unpack and run packet.dll and the other binaries. --- OEM/WinpcapOem/WinPcapOem.cpp | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/OEM/WinpcapOem/WinPcapOem.cpp b/OEM/WinpcapOem/WinPcapOem.cpp index fc688ac9..38adbf29 100644 --- a/OEM/WinpcapOem/WinPcapOem.cpp +++ b/OEM/WinpcapOem/WinPcapOem.cpp @@ -32,7 +32,7 @@ BOOL APIENTRY DllMain(HINSTANCE Dllh, DWORD Reason, LPVOID lpReserved) { switch(Reason) { - + case DLL_PROCESS_ATTACH: g_DllHandle = Dllh; @@ -320,7 +320,7 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) } if (lold == 0) - { + { // // IF WE ARE HERE, THE DLL IS BEING LOADED FOR THE FIRST TIME. // @@ -727,13 +727,37 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) // _unlink(g_DriverFullPath); } + else + { + if(!WoemCreateBinaryNames()) + { + delete_service(g_NpfDriverNameId); + _unlink(g_DllFullPath); + _unlink(g_DriverFullPath); + + ReleaseMutex(g_hGlobalMutex); + + if(g_hGlobalMutex!=0) + { + CloseHandle(g_hGlobalMutex); + g_hGlobalMutex = NULL; + + } + if (g_hGlobalSemaphore!=0) + { + CloseHandle(g_hGlobalSemaphore); + g_hGlobalSemaphore = NULL; + } + + return FALSE; + } + } // // Load packet.dll and intercept all the calls // if(!LoadPacketDll(g_DllFullPath, WoemErrorString)) { - delete_service(g_NpfDriverNameId); _unlink(g_DllFullPath); _unlink(g_DriverFullPath); From 2de3964d3002557a33148e7b68a8aa9aa3eeb0a5 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Thu, 24 Nov 2005 17:32:32 +0000 Subject: [PATCH 052/316] Added another check to verify that the input Value buffer has the right size. --- OEM/WinpcapOem/Crypto.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OEM/WinpcapOem/Crypto.cpp b/OEM/WinpcapOem/Crypto.cpp index e15e3e92..7ff6006d 100644 --- a/OEM/WinpcapOem/Crypto.cpp +++ b/OEM/WinpcapOem/Crypto.cpp @@ -57,7 +57,7 @@ BOOL GetHash(LPCBYTE lpbData, DWORD dwDataLen, LPBYTE lpValue, DWORD dwValueLeng return FALSE; } - if ( dwHashSize != CREDENTIAL_LEN ) + if ( dwHashSize != CREDENTIAL_LEN || dwValueLength != CREDENTIAL_LEN ) { TRACE_MESSAGE("GetHash, Error for different size of hash value (CryptAPI says %d, we have %d)", dwHashSize, CREDENTIAL_LEN ); From ae5c23d689db62b2f16e7def12d4ecc17e670402 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Thu, 24 Nov 2005 17:36:03 +0000 Subject: [PATCH 053/316] Fixed a bug in WoemInitialize: if WoemEnterDll is successful, set g_StillToInit to FALSE. --- OEM/WinpcapOem/PacketWrapper.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/OEM/WinpcapOem/PacketWrapper.cpp b/OEM/WinpcapOem/PacketWrapper.cpp index d74eaf78..801d525c 100644 --- a/OEM/WinpcapOem/PacketWrapper.cpp +++ b/OEM/WinpcapOem/PacketWrapper.cpp @@ -825,6 +825,11 @@ __inline BOOL WoemInitialize(HINSTANCE hDllHandle) returnValue = WoemEnterDll(hDllHandle, errorString); + if (returnValue == TRUE) + { + g_StillToInit = FALSE; + } + TRACE_EXIT("WoemInitialize"); return returnValue; From 3d12a5331cdc0186e2a379392ab2237804980def Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Thu, 24 Nov 2005 17:44:03 +0000 Subject: [PATCH 054/316] General code cleanup: - removes several global strings (that were not actually global). - Made better use of the WinPcap global strings - got rid of all the WCHAR strings (we only use ANSI strings now) - Rewrote the code saving the keys into the registry: now we use REG_SZ keys (strings), instead of binary blobs. - Fixed a bug by which the registry keys were not deleted upon DLL unloading. - Removed some usless strings from the registry - Cleaned up the strings related to events (now we no longer use the "event0000000" pattern, only "event") - Fixed a problem with the generation of the driver full path (we were appending system32 twice). --- OEM/WinpcapOem/WinPcapOem.cpp | 390 +++++++++------------------------- 1 file changed, 103 insertions(+), 287 deletions(-) diff --git a/OEM/WinpcapOem/WinPcapOem.cpp b/OEM/WinpcapOem/WinPcapOem.cpp index 38adbf29..959a2809 100644 --- a/OEM/WinpcapOem/WinPcapOem.cpp +++ b/OEM/WinpcapOem/WinPcapOem.cpp @@ -12,12 +12,9 @@ HANDLE g_hGlobalMutex = NULL; HANDLE g_hGlobalSemaphore = NULL; -char g_SysDir[MAX_PATH + 16]; char g_GlobalSemaphoreName[MAX_OBJNAME_LEN]; char g_DllFullPath[MAX_PATH + 16]; char g_DriverFullPath[MAX_PATH + 16]; -char g_NpfDriverNameId[32]; -WCHAR g_NpfDriverNameIdW[32]; HINSTANCE g_DllHandle = NULL; char g_LastWoemError[PACKET_ERRSTR_SIZE]; volatile BOOL g_InitError = FALSE; @@ -44,7 +41,7 @@ BOOL APIENTRY DllMain(HINSTANCE Dllh, DWORD Reason, LPVOID lpReserved) // g_OemActive = TRUE; #endif - + break; case DLL_PROCESS_DETACH: @@ -129,8 +126,6 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) LONG lold; char ObjName[MAX_OBJNAME_LEN]; UINT i; - char SvcDesc[MAX_PATH + 16]; - char SvcBin[MAX_PATH + 16]; OSVERSIONINFO osVer; HRESULT hr; #ifdef SECURITY @@ -397,13 +392,13 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) return FALSE; } - if(check_if_service_is_running(g_NpfDriverNameId) == 0) + if(check_if_service_is_running(NPF_DRIVER_NAME) == 0) { // // If we are here and the service is running, it's almost surely the result // of some mess. We try to cleanup. // - if (delete_service(g_NpfDriverNameId) == -1) + if (delete_service(NPF_DRIVER_NAME) == -1) { WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Error deleting an existing copy of the NPF service"); @@ -617,19 +612,9 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) // // Create the driver service // - _snprintf(SvcDesc, - sizeof(SvcDesc) - 1, - "WinPcap Packet Driver (%s)", - g_NpfDriverNameId); - - _snprintf(SvcBin, - sizeof(SvcDesc) - 1, - NPF_DRIVER_PATH_ASCII "%s.sys", - g_NpfDriverNameId); - - if(create_driver_service(g_NpfDriverNameId, - SvcDesc, - SvcBin) == -1) + if(create_driver_service(NPF_DRIVER_NAME, + NPF_SERVICE_DESC, + NPF_DRIVER_COMPLETE_PATH) == -1) { WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("unable to create the packet driver service"); @@ -656,11 +641,11 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) // // Load the driver // - if(start_service(g_NpfDriverNameId) == -1) + if(start_service(NPF_DRIVER_NAME) == -1) { WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("unable to start the packet driver service"); - delete_service(g_NpfDriverNameId); + delete_service(NPF_DRIVER_NAME); _unlink(g_DllFullPath); _unlink(g_DriverFullPath); @@ -687,7 +672,7 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) i = 0; while(TRUE) { - if(check_if_service_is_running(g_NpfDriverNameId) == 0) + if(check_if_service_is_running(NPF_DRIVER_NAME) == 0) { break; } @@ -697,7 +682,7 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) { WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("timeout while starting the packet driver"); - delete_service(g_NpfDriverNameId); + delete_service(NPF_DRIVER_NAME); _unlink(g_DllFullPath); _unlink(g_DriverFullPath); @@ -731,7 +716,7 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) { if(!WoemCreateBinaryNames()) { - delete_service(g_NpfDriverNameId); + delete_service(NPF_DRIVER_NAME); _unlink(g_DllFullPath); _unlink(g_DriverFullPath); @@ -758,7 +743,7 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) // if(!LoadPacketDll(g_DllFullPath, WoemErrorString)) { - delete_service(g_NpfDriverNameId); + delete_service(NPF_DRIVER_NAME); _unlink(g_DllFullPath); _unlink(g_DriverFullPath); @@ -805,7 +790,7 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) // NOTE: we cannot use tracing in this function, since it's called // in the context of DllMain (MSDN clearly states that only the // functions exported by kernel32.dll can be called within the -// DllMain +// DllMain). //////////////////////////////////////////////////////////////////// BOOL WoemLeaveDll() { @@ -823,7 +808,7 @@ BOOL WoemLeaveDll() { case WAIT_FAILED: - if(g_hGlobalMutex!=0) + if(g_hGlobalMutex != 0) { CloseHandle(g_hGlobalMutex); g_hGlobalMutex = NULL; @@ -883,7 +868,8 @@ BOOL WoemLeaveDll() // IF WE ARE HERE, THE DLL IS BEING UNLOADED FOR THE LAST TIME. // - delete_service(g_NpfDriverNameId); + delete_service(NPF_DRIVER_NAME); + WoemDeleteNameRegistryEntries(); break; @@ -958,8 +944,16 @@ BOOL WoemLeaveDll() BOOL WoemCreateNameRegistryEntries() { HKEY WinpcapKey; - char KeyValBuf[MAX_WINPCAP_KEY_CHARS]; - WCHAR KeyValBufW[MAX_WINPCAP_KEY_CHARS]; + OSVERSIONINFO osVer; + + ZeroMemory(&osVer,sizeof(OSVERSIONINFO)); + osVer.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); + + if (GetVersionEx(&osVer)==0) + { + TRACE_MESSAGE("Impossible to retrieve the OS version Info"); + return FALSE; + } // // Do a cleanup, just to be sure @@ -983,34 +977,18 @@ BOOL WoemCreateNameRegistryEntries() } // - // Created the strings that we'll use to build the registry keys values - // and load the components + // Add subkeys with the strings // - _snprintf(g_NpfDriverNameId, - sizeof(g_NpfDriverNameId) - 1, - "%s", - NPF_DRIVER_NAME); - - _snwprintf(g_NpfDriverNameIdW, - sizeof(g_NpfDriverNameIdW) / sizeof(WCHAR) - 1, - L"%ws", - NPF_DRIVER_NAME_WIDECHAR); // - // Add subkeys with the strings + // NpfDriverName (e.g. "NPF") -- HHH // - - // npf_driver_name - - memset(KeyValBuf, sizeof(KeyValBuf), 0); - memset(KeyValBufW, sizeof(KeyValBufW), 0); - if(RegSetValueEx(WinpcapKey, - "npf_driver_name", + NPF_DRIVER_NAME_REG_KEY, 0, - REG_BINARY, - (LPBYTE)g_NpfDriverNameId, - strlen(g_NpfDriverNameId) + 1) != ERROR_SUCCESS) + REG_SZ, + (LPBYTE)NPF_DRIVER_NAME, + sizeof(NPF_DRIVER_NAME)) != ERROR_SUCCESS) { RegCloseKey(WinpcapKey); @@ -1018,148 +996,15 @@ BOOL WoemCreateNameRegistryEntries() return FALSE; } - // npf_driver_name_widechar - - memset(KeyValBuf, sizeof(KeyValBuf), 0); - memset(KeyValBufW, sizeof(KeyValBufW), 0); - - if(RegSetValueEx(WinpcapKey, - "npf_driver_name_widechar", - 0, - REG_BINARY, - (LPBYTE)g_NpfDriverNameIdW, - (wcslen(g_NpfDriverNameIdW) + 1) * sizeof(WCHAR)) != ERROR_SUCCESS) - { - RegCloseKey(WinpcapKey); - - RegDeleteKey(HKEY_LOCAL_MACHINE, WINPCAP_INSTANCE_KEY); - return FALSE; - } - - // npf_service_desc_widechar - - memset(KeyValBuf, sizeof(KeyValBuf), 0); - memset(KeyValBufW, sizeof(KeyValBufW), 0); - - _snwprintf(KeyValBufW, - sizeof(KeyValBufW) / sizeof(WCHAR) - 1, - L"%ws (%ws)", - NPF_SERVICE_DESC_WIDECHAR, - g_NpfDriverNameIdW); - - if(RegSetValueEx(WinpcapKey, - "npf_service_desc_widechar", - 0, - REG_BINARY, - (LPBYTE)KeyValBufW, - (wcslen(KeyValBufW) + 1) * sizeof(WCHAR)) != ERROR_SUCCESS) - { - RegCloseKey(WinpcapKey); - - RegDeleteKey(HKEY_LOCAL_MACHINE, WINPCAP_INSTANCE_KEY); - return FALSE; - } - - // npf_service_registry_location_widechar - - memset(KeyValBuf, sizeof(KeyValBuf), 0); - memset(KeyValBufW, sizeof(KeyValBufW), 0); - - _snwprintf(KeyValBufW, - sizeof(KeyValBufW) / sizeof(WCHAR) - 1, - L"SYSTEM\\CurrentControlSet\\Services\\%ws", - g_NpfDriverNameIdW); - - if(RegSetValueEx(WinpcapKey, - "npf_service_registry_location_widechar", - 0, - REG_BINARY, - (LPBYTE)KeyValBufW, - (wcslen(KeyValBufW) + 1) * sizeof(WCHAR)) != ERROR_SUCCESS) - { - RegCloseKey(WinpcapKey); - - RegDeleteKey(HKEY_LOCAL_MACHINE, WINPCAP_INSTANCE_KEY); - return FALSE; - } - - // npf_complete_service_registry_location - - memset(KeyValBuf, sizeof(KeyValBuf), 0); - memset(KeyValBufW, sizeof(KeyValBufW), 0); - - _snprintf(KeyValBuf, - sizeof(KeyValBuf) / sizeof(CHAR) - 1, - "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\%s", - g_NpfDriverNameId); - - if(RegSetValueEx(WinpcapKey, - "npf_complete_service_registry_location", - 0, - REG_BINARY, - (LPBYTE)KeyValBuf, - strlen(KeyValBuf) + 1) != ERROR_SUCCESS) - { - RegCloseKey(WinpcapKey); - - RegDeleteKey(HKEY_LOCAL_MACHINE, WINPCAP_INSTANCE_KEY); - return FALSE; - } - - // npf_driver_path_widechar - - if(RegSetValueEx(WinpcapKey, - "npf_driver_path_widechar", - 0, - REG_BINARY, - (LPBYTE)NPF_DRIVER_PATH_WIDECHAR, - sizeof(NPF_DRIVER_PATH_WIDECHAR)) != ERROR_SUCCESS) - { - RegCloseKey(WinpcapKey); - - RegDeleteKey(HKEY_LOCAL_MACHINE, WINPCAP_INSTANCE_KEY); - return FALSE; - } - - // npf_driver_binary_widechar - - memset(KeyValBuf, sizeof(KeyValBuf), 0); - memset(KeyValBufW, sizeof(KeyValBufW), 0); - - _snwprintf(KeyValBufW, - sizeof(KeyValBufW) / sizeof(WCHAR) - 1, - L"%ws.sys", - g_NpfDriverNameIdW); - - if(RegSetValueEx(WinpcapKey, - "npf_driver_binary_widechar", - 0, - REG_BINARY, - (LPBYTE)KeyValBufW, - (wcslen(KeyValBufW) + 1) * sizeof(WCHAR)) != ERROR_SUCCESS) - { - RegCloseKey(WinpcapKey); - - RegDeleteKey(HKEY_LOCAL_MACHINE, WINPCAP_INSTANCE_KEY); - return FALSE; - } - - // npf_device_names_prefix - - memset(KeyValBuf, sizeof(KeyValBuf), 0); - memset(KeyValBufW, sizeof(KeyValBufW), 0); - - _snprintf(KeyValBuf, - sizeof(KeyValBuf) / sizeof(CHAR) - 1, - "%s_", - g_NpfDriverNameId); - + // + // NpfServiceDescription (e.g. "WinPcap Packet Driver ( NPF )") -- FFF + // if(RegSetValueEx(WinpcapKey, - "npf_device_names_prefix", + NPF_SERVICE_DESC_REG_KEY, 0, - REG_BINARY, - (LPBYTE)KeyValBuf, - strlen(KeyValBuf) + 1) != ERROR_SUCCESS) + REG_SZ, + (LPBYTE)NPF_SERVICE_DESC, + sizeof(NPF_SERVICE_DESC)) != ERROR_SUCCESS) { RegCloseKey(WinpcapKey); @@ -1167,22 +1012,15 @@ BOOL WoemCreateNameRegistryEntries() return FALSE; } - // npf_device_names_prefix_widechar - - memset(KeyValBuf, sizeof(KeyValBuf), 0); - memset(KeyValBufW, sizeof(KeyValBufW), 0); - - _snwprintf(KeyValBufW, - sizeof(KeyValBufW) / sizeof(WCHAR) - 1, - L"%ws_", - g_NpfDriverNameIdW); - + // + // NpfDeviceNamesPrefix (e.g. "NPF_") -- AAA + // if(RegSetValueEx(WinpcapKey, - "npf_device_names_prefix_widechar", + NPF_DEVICES_PREFIX_REG_KEY, 0, - REG_BINARY, - (LPBYTE)KeyValBufW, - (wcslen(KeyValBufW) + 1) * sizeof(WCHAR)) != ERROR_SUCCESS) + REG_SZ, + (LPBYTE)NPF_DEVICE_NAMES_PREFIX, + sizeof(NPF_DEVICE_NAMES_PREFIX)) != ERROR_SUCCESS) { RegCloseKey(WinpcapKey); @@ -1190,6 +1028,7 @@ BOOL WoemCreateNameRegistryEntries() return FALSE; } +#if 0 // npf_user_events_names memset(KeyValBuf, sizeof(KeyValBuf), 0); @@ -1201,9 +1040,9 @@ BOOL WoemCreateNameRegistryEntries() g_NpfDriverNameIdW); if(RegSetValueEx(WinpcapKey, - "npf_user_events_names", + NPF_USER_EVENTS_NAMES_REG_KEY, 0, - REG_BINARY, + REG_SZ, (LPBYTE)KeyValBufW, (wcslen(KeyValBufW) + 1) * sizeof(WCHAR)) != ERROR_SUCCESS) { @@ -1212,23 +1051,17 @@ BOOL WoemCreateNameRegistryEntries() RegDeleteKey(HKEY_LOCAL_MACHINE, WINPCAP_INSTANCE_KEY); return FALSE; } +#endif - // npf_kernel_events_names - - memset(KeyValBuf, sizeof(KeyValBuf), 0); - memset(KeyValBufW, sizeof(KeyValBufW), 0); - - _snwprintf(KeyValBufW, - sizeof(KeyValBufW) / sizeof(WCHAR) - 1, - L"\\BaseNamedObjects\\%ws0000000000\0", - g_NpfDriverNameIdW); - + // + // NpfEventsNames (e.g. "NPF") -- BBB + // if(RegSetValueEx(WinpcapKey, - "npf_kernel_events_names", + NPF_EVENTS_NAMES_REG_KEY, 0, - REG_BINARY, - (LPBYTE)KeyValBufW, - (wcslen(KeyValBufW) + 1) * sizeof(WCHAR)) != ERROR_SUCCESS) + REG_SZ, + (LPBYTE)NPF_EVENTS_NAMES, + sizeof(NPF_EVENTS_NAMES)) != ERROR_SUCCESS) { RegCloseKey(WinpcapKey); @@ -1236,22 +1069,15 @@ BOOL WoemCreateNameRegistryEntries() return FALSE; } - // fake_ndiswan_adapter_name - - memset(KeyValBuf, sizeof(KeyValBuf), 0); - memset(KeyValBufW, sizeof(KeyValBufW), 0); - - _snprintf(KeyValBuf, - sizeof(KeyValBuf) / sizeof(CHAR) - 1, - "\\Device\\%s_GenericDialupAdapter", - g_NpfDriverNameId); - + // + // NdiswanAdapterName (e.g. "\\Device\\NPF_GenericDialupAdapter") -- CCC + // if(RegSetValueEx(WinpcapKey, - "fake_ndiswan_adapter_name", + NPF_FAKE_NDISWAN_ADAPTER_NAME_REG_KEY, 0, - REG_BINARY, - (LPBYTE)KeyValBuf, - strlen(KeyValBuf) + 1) != ERROR_SUCCESS) + REG_SZ, + (LPBYTE)FAKE_NDISWAN_ADAPTER_NAME, + sizeof(FAKE_NDISWAN_ADAPTER_NAME)) != ERROR_SUCCESS) { RegCloseKey(WinpcapKey); @@ -1259,12 +1085,13 @@ BOOL WoemCreateNameRegistryEntries() return FALSE; } - // fake_ndiswan_adapter_description - + // + // NdiswanAdapterDescription (e.g. "Adapter for generic dialup and VPN capture") -- DDD + // if(RegSetValueEx(WinpcapKey, - "fake_ndiswan_adapter_description", + NPF_FAKE_NDISWAN_ADAPTER_DESC_REG_KEY, 0, - REG_BINARY, + REG_SZ, (LPBYTE)FAKE_NDISWAN_ADAPTER_DESCRIPTION, sizeof(FAKE_NDISWAN_ADAPTER_DESCRIPTION)) != ERROR_SUCCESS) { @@ -1274,22 +1101,15 @@ BOOL WoemCreateNameRegistryEntries() return FALSE; } - // npf_driver_complete_widechar - - memset(KeyValBuf, sizeof(KeyValBuf), 0); - memset(KeyValBufW, sizeof(KeyValBufW), 0); - - _snwprintf(KeyValBufW, - sizeof(KeyValBufW) / sizeof(WCHAR) - 1, - L"system32\\drivers\\%ws.sys", - g_NpfDriverNameIdW); - + // + // NpfDriverCompletePath (e.g. "system32\\drivers\npf.sys") -- GG + // if(RegSetValueEx(WinpcapKey, - "npf_driver_complete_widechar", + NPF_DRIVER_COMPLETE_PATH_REG_KEY, 0, - REG_BINARY, - (LPBYTE)KeyValBufW, - (wcslen(KeyValBufW) + 1) * sizeof(WCHAR)) != ERROR_SUCCESS) + REG_SZ, + (LPBYTE)NPF_DRIVER_COMPLETE_PATH, + sizeof(NPF_DRIVER_COMPLETE_PATH)) != ERROR_SUCCESS) { RegCloseKey(WinpcapKey); @@ -1297,22 +1117,15 @@ BOOL WoemCreateNameRegistryEntries() return FALSE; } - // npf_driver_complete_driver_prefix - - memset(KeyValBuf, sizeof(KeyValBuf), 0); - memset(KeyValBufW, sizeof(KeyValBufW), 0); - - _snprintf(KeyValBuf, - sizeof(KeyValBuf) / sizeof(CHAR) - 1, - "\\Device\\%s_", - g_NpfDriverNameId); - + // + // NpfDriverCompleteDevicePrefix (e.g. "\\Device\\NPF_") -- III + // if(RegSetValueEx(WinpcapKey, - "npf_driver_complete_driver_prefix", + NPF_DRIVER_COMPLETE_DEVICE_PREFIX_REG_KEY, 0, - REG_BINARY, - (LPBYTE)KeyValBuf, - strlen(KeyValBuf) + 1) != ERROR_SUCCESS) + REG_SZ, + (LPBYTE)NPF_DRIVER_COMPLETE_DEVICE_PREFIX, + sizeof(NPF_DRIVER_COMPLETE_DEVICE_PREFIX)) != ERROR_SUCCESS) { RegCloseKey(WinpcapKey); @@ -1330,13 +1143,25 @@ BOOL WoemCreateNameRegistryEntries() //////////////////////////////////////////////////////////////////// BOOL WoemCreateBinaryNames() { + //TODO we should try to put the files in three places: + // - current directory + // - system32 + // - temp directory UINT GsdRes; - + char WinDir[MAX_PATH + 16]; + char SysDir[MAX_PATH + 16]; + // // Get the location of the system folder to create the complete paths // - GsdRes = GetSystemDirectory(g_SysDir, sizeof(g_SysDir)); - if(GsdRes == 0 || GsdRes == sizeof(g_SysDir)) + GsdRes = GetSystemDirectory(SysDir, sizeof(SysDir)); + if(GsdRes == 0 || GsdRes == sizeof(SysDir)) + { + return FALSE; + } + + GsdRes = GetWindowsDirectory(WinDir, sizeof(WinDir)); + if(GsdRes == 0 || GsdRes == sizeof(WinDir)) { return FALSE; } @@ -1345,27 +1170,18 @@ BOOL WoemCreateBinaryNames() // Created the strings that we'll use to build the registry keys values // and load the components // - _snprintf(g_NpfDriverNameId, - sizeof(g_NpfDriverNameId) - 1, - "%s", - NPF_DRIVER_NAME); - _snwprintf(g_NpfDriverNameIdW, - sizeof(g_NpfDriverNameIdW) / sizeof(WCHAR) - 1, - L"%ws", - NPF_DRIVER_NAME_WIDECHAR); - _snprintf(g_DllFullPath, sizeof(g_DllFullPath) - 1, "%s\\%swoem.tmp", - g_SysDir, - g_NpfDriverNameId); + SysDir, + NPF_DRIVER_NAME); _snprintf(g_DriverFullPath, sizeof(g_DriverFullPath) - 1, - "%s\\drivers\\%s.sys", - g_SysDir, - g_NpfDriverNameId); + "%s\\%s", + WinDir, + NPF_DRIVER_COMPLETE_PATH); return TRUE; } From 81c81c69bc6e4cbee809948412dd61de67fc1ce3 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Thu, 24 Nov 2005 19:24:38 +0000 Subject: [PATCH 055/316] Added the prototype for WoemDeleteNameRegistryEntries(). Commented out all the old logging facilities.. --- OEM/WinpcapOem/WinpcapOem.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/OEM/WinpcapOem/WinpcapOem.h b/OEM/WinpcapOem/WinpcapOem.h index 36a9e10e..f3a599a0 100644 --- a/OEM/WinpcapOem/WinpcapOem.h +++ b/OEM/WinpcapOem/WinpcapOem.h @@ -56,12 +56,14 @@ BOOL WoemGetResource(HINSTANCE hInst, int ResID, LPVOID * lpResMem, LPDWORD dwRe // Registry and names-related functions //////////////////////////////////////////////////////////////////// BOOL WoemCreateNameRegistryEntries(); +BOOL WoemDeleteNameRegistryEntries(); BOOL WoemCreateBinaryNames(); //////////////////////////////////////////////////////////////////// // Debug definitions //////////////////////////////////////////////////////////////////// +#if 0 #define DEBUGTRACE #define TRACE_OUTPUTDEBUGSTRING @@ -82,6 +84,7 @@ BOOL WoemCreateBinaryNames(); #define TraceEnter(X) #endif +#endif //////////////////////////////////////////////////////////////////// // Error codes From bad03af8355ddf35e253e93201935a4e64c64df0 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Thu, 24 Nov 2005 19:30:46 +0000 Subject: [PATCH 056/316] Added Visual Studio 2003 projects for WinPcapOem, PacketNT4 and Packet2k. --- OEM/WinpcapOem/WinpcapOem.vcproj | 608 ++++++++++++++++++ packetNtx/Dll/Project/PacketAndWan2003.vcproj | 354 ++++++++++ packetNtx/Dll/Project/PacketNT4.vcproj | 178 +++++ 3 files changed, 1140 insertions(+) create mode 100644 OEM/WinpcapOem/WinpcapOem.vcproj create mode 100644 packetNtx/Dll/Project/PacketAndWan2003.vcproj create mode 100644 packetNtx/Dll/Project/PacketNT4.vcproj diff --git a/OEM/WinpcapOem/WinpcapOem.vcproj b/OEM/WinpcapOem/WinpcapOem.vcproj new file mode 100644 index 00000000..46a31bc4 --- /dev/null +++ b/OEM/WinpcapOem/WinpcapOem.vcproj @@ -0,0 +1,608 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packetNtx/Dll/Project/PacketAndWan2003.vcproj b/packetNtx/Dll/Project/PacketAndWan2003.vcproj new file mode 100644 index 00000000..a890e45c --- /dev/null +++ b/packetNtx/Dll/Project/PacketAndWan2003.vcproj @@ -0,0 +1,354 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packetNtx/Dll/Project/PacketNT4.vcproj b/packetNtx/Dll/Project/PacketNT4.vcproj new file mode 100644 index 00000000..c791da7c --- /dev/null +++ b/packetNtx/Dll/Project/PacketNT4.vcproj @@ -0,0 +1,178 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From f87ae93bd25f82e29717dab9c45cdb22e50a0013 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Thu, 24 Nov 2005 19:31:43 +0000 Subject: [PATCH 057/316] Added a prebuild script to WinPcap Oem, so that the proper drivers and dlls are copied and renamed to .\\Binaries --- OEM/WinpcapOem/prebuild_debug.bat | 10 ++++++++++ OEM/WinpcapOem/prebuild_release.bat | 10 ++++++++++ 2 files changed, 20 insertions(+) create mode 100644 OEM/WinpcapOem/prebuild_debug.bat create mode 100644 OEM/WinpcapOem/prebuild_release.bat diff --git a/OEM/WinpcapOem/prebuild_debug.bat b/OEM/WinpcapOem/prebuild_debug.bat new file mode 100644 index 00000000..221117b5 --- /dev/null +++ b/OEM/WinpcapOem/prebuild_debug.bat @@ -0,0 +1,10 @@ +@echo off + +echo Copying compiled DLLs +copy ..\..\..\winpcap\packetNtx\Dll\Project\NT4_Debug_OEM\packet.dll .\Binaries\packetnt.dll +copy ..\..\..\winpcap\packetNtx\Dll\Project\Debug_PacketWan\packet.dll .\Binaries\packet2k.dll + +echo Copying drivers +copy \i386\npf.sys .\Binaries\npf2k.sys +copy \i386\Checked\npf.sys .\Binaries\npfnt.sys + diff --git a/OEM/WinpcapOem/prebuild_release.bat b/OEM/WinpcapOem/prebuild_release.bat new file mode 100644 index 00000000..e1c7def1 --- /dev/null +++ b/OEM/WinpcapOem/prebuild_release.bat @@ -0,0 +1,10 @@ +@echo off + +echo Copying compiled DLLs +copy ..\..\..\winpcap\packetNtx\Dll\Project\NT4_Release_OEM\packet.dll .\Binaries\packetnt.dll +copy ..\..\..\winpcap\packetNtx\Dll\Project\Release_PacketWan\packet.dll .\Binaries\packet2k.dll + +echo Copying drivers +copy \i386\npf.sys .\Binaries\npf2k.sys +copy \i386\free\npf.sys .\Binaries\npfnt.sys + From 1885ef07720aef17b63f5baa92b06b95d1a49660 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Thu, 24 Nov 2005 19:33:09 +0000 Subject: [PATCH 058/316] Cleaned up the project virtual folders (Source Files, Include Files). --- packetNtx/Dll/Project/PacketAndWan.dsp | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/packetNtx/Dll/Project/PacketAndWan.dsp b/packetNtx/Dll/Project/PacketAndWan.dsp index 96f0853a..19b2bd9b 100644 --- a/packetNtx/Dll/Project/PacketAndWan.dsp +++ b/packetNtx/Dll/Project/PacketAndWan.dsp @@ -43,7 +43,7 @@ RSC=rc.exe # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c -# ADD CPP /nologo /MT /W3 /GX /O2 /I "../../../dag/include" /I "../../../dag/drv/windows" /I "../../../common" /I "..\..\driver" /D "NDEBUG" /D "HAVE_DAG_API" /D "WIN32" /D "_WINDOWS" /D "WPCAP_OEM" /YX /FD /c +# ADD CPP /nologo /MT /W3 /GX /O2 /I "../../../dag/include" /I "../../../dag/drv/windows" /I "../../../common" /I "..\..\driver" /D "NDEBUG" /D "HAVE_DAG_API" /D "WIN32" /D "_WINDOWS" /D "WPCAP_OEM" /FR /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 # ADD BASE RSC /l 0x410 /d "NDEBUG" @@ -69,7 +69,7 @@ LINK32=link.exe # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c -# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../../../dag/include" /I "../../../dag/drv/windows" /I "../../../common" /I "..\..\driver" /D "HAVE_DAG_API" /D "WIN32" /D "_WINDOWS" /D "WPCAP_OEM" /YX /FD /c +# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../../../dag/include" /I "../../../dag/drv/windows" /I "../../../common" /I "..\..\driver" /D "HAVE_DAG_API" /D "WIN32" /D "_WINDOWS" /D "WPCAP_OEM" /FR /YX /FD /c # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 # ADD BASE RSC /l 0x410 /d "_DEBUG" @@ -136,6 +136,22 @@ SOURCE=..\..\driver\win_bpf_filter.c SOURCE=..\..\driver\win_bpf_filter_init.c # End Source File # End Group +# Begin Group "Include Files" + +# PROP Default_Filter "*.h*" +# Begin Source File + +SOURCE=..\..\..\Common\Packet32.h +# End Source File +# Begin Source File + +SOURCE=..\WanPacket\WanPacket.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\Common\WpcapNames.h +# End Source File +# End Group # Begin Source File SOURCE=..\Packet.def From 41069a0cb38ee5d7d7cf10ccf7ea5036b25f36bf Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Thu, 24 Nov 2005 19:34:40 +0000 Subject: [PATCH 059/316] Fixed the path of WpcapNames.h. Added some files to the project. --- OEM/WinpcapOem/WinpcapOem.dsp | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/OEM/WinpcapOem/WinpcapOem.dsp b/OEM/WinpcapOem/WinpcapOem.dsp index 1e10b8ec..11171731 100644 --- a/OEM/WinpcapOem/WinpcapOem.dsp +++ b/OEM/WinpcapOem/WinpcapOem.dsp @@ -115,7 +115,7 @@ PostBuild_Cmds=postbuild.bat # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x410 /d "_DEBUG" -# ADD RSC /l 0x410 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo @@ -143,7 +143,7 @@ PostBuild_Cmds=postbuild.bat # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /I ".\\" /D "NDEBUG" /D "_MBCS" /D "_USRDLL" /D "WinpcapOem_EXPORTS" /D "WIN32" /D "_WINDOWS" /D "SECURITY" /FD /c # SUBTRACT BASE CPP /YX /Yc /Yu -# ADD CPP /nologo /MT /W3 /GX /O2 /I ".\\" /I "..\..\..\winpcap\common" /I "..\..\..\common" /D "NDEBUG" /D "_MBCS" /D "_USRDLL" /D "WinpcapOem_EXPORTS" /D "WIN32" /D "_WINDOWS" /D "SECURITY" /FD /c +# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\winpcap\common" /I ".\\" /I "..\..\..\common" /D "NDEBUG" /D "_MBCS" /D "_USRDLL" /D "WinpcapOem_EXPORTS" /D "WIN32" /D "_WINDOWS" /D "SECURITY" /FR /FD /c # SUBTRACT CPP /YX /Yc /Yu # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 @@ -221,6 +221,10 @@ SOURCE=.\NetMonInstaller.h # End Source File # Begin Source File +SOURCE=..\..\..\winpcap\Common\Packet32.h +# End Source File +# Begin Source File + SOURCE=.\pch.h # End Source File # Begin Source File @@ -237,7 +241,11 @@ SOURCE=.\WinpcapOem.h # End Source File # Begin Source File -SOURCE=..\..\Common\WpcapNames.h +SOURCE=.\WoemDebug.h +# End Source File +# Begin Source File + +SOURCE=..\..\..\winpcap\Common\WpcapNames.h # End Source File # End Group # Begin Group "Resource Files" @@ -246,10 +254,18 @@ SOURCE=..\..\Common\WpcapNames.h # End Group # Begin Source File +SOURCE=..\Instructions.txt +# End Source File +# Begin Source File + SOURCE=.\binaries\npf2k.sys # End Source File # Begin Source File +SOURCE=.\binaries\npfnt.sys +# End Source File +# Begin Source File + SOURCE=.\binaries\Packet2k.dll # End Source File # Begin Source File @@ -258,6 +274,10 @@ SOURCE=.\Packet2k.dll # End Source File # Begin Source File +SOURCE=.\binaries\Packetnt.dll +# End Source File +# Begin Source File + SOURCE=.\WinpcapOem.def # End Source File # Begin Source File From 575bfcb7e9cde63c3fdd8081ea8e08cf4b0baeee Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Thu, 24 Nov 2005 19:36:04 +0000 Subject: [PATCH 060/316] Added the PacketAndWan project to the WinPcap OEM VC6 workspace. --- OEM/WinpcapOem/WinpcapOem.dsw | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/OEM/WinpcapOem/WinpcapOem.dsw b/OEM/WinpcapOem/WinpcapOem.dsw index 4ece9b32..dcfac4d3 100644 --- a/OEM/WinpcapOem/WinpcapOem.dsw +++ b/OEM/WinpcapOem/WinpcapOem.dsw @@ -3,6 +3,18 @@ Microsoft Developer Studio Workspace File, Format Version 6.00 ############################################################################### +Project: "PacketAndWan"=..\..\..\winpcap\packetNtx\Dll\Project\PacketAndWan.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + Project: "WinpcapOem"=.\WinpcapOem.dsp - Package Owner=<4> Package=<5> From b2c2a250a60325bab2e1d2d9ff0d05393697d5a3 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Thu, 24 Nov 2005 19:37:46 +0000 Subject: [PATCH 061/316] Added a Visual Studio.NET 2003 solution for the WinPcap OEM project (NOTE: it only includes the WinPcap OEM workspace, use MakeAll.sln in the root to open all the WinPcap OEM related projects). --- OEM/WinpcapOem/WinpcapOem.sln | 84 +++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 OEM/WinpcapOem/WinpcapOem.sln diff --git a/OEM/WinpcapOem/WinpcapOem.sln b/OEM/WinpcapOem/WinpcapOem.sln new file mode 100644 index 00000000..3988dd43 --- /dev/null +++ b/OEM/WinpcapOem/WinpcapOem.sln @@ -0,0 +1,84 @@ +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PacketAndWan", "..\..\..\winpcap\packetNtx\Dll\Project\PacketAndWan.vcproj", "{8A2D94DC-412E-48B5-B566-B451F4D7AD68}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WinpcapOem", "WinpcapOem.vcproj", "{FB2DA24E-A296-4B16-9DC2-1B84FCEC5311}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WinPcap NTx Driver", "..\..\..\winpcap\packetNtx\driver\WinPcap NTx Driver.vcproj", "{5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PacketNT", "..\..\..\winpcap\packetNtx\Dll\Project\Packet.vcproj", "{B825B6B9-3271-4740-8E88-C73EA358D10A}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug_Security|Win32 = Debug_Security|Win32 + Debug|Win32 = Debug|Win32 + NT4 Debug|Win32 = NT4 Debug|Win32 + NT4 OEM Debug|Win32 = NT4 OEM Debug|Win32 + NT4 OEM Release|Win32 = NT4 OEM Release|Win32 + NT4 Release|Win32 = NT4 Release|Win32 + Release_Security|Win32 = Release_Security|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {8A2D94DC-412E-48B5-B566-B451F4D7AD68}.Debug_Security|Win32.ActiveCfg = Debug|Win32 + {8A2D94DC-412E-48B5-B566-B451F4D7AD68}.Debug_Security|Win32.Build.0 = Debug|Win32 + {8A2D94DC-412E-48B5-B566-B451F4D7AD68}.Debug|Win32.ActiveCfg = Debug|Win32 + {8A2D94DC-412E-48B5-B566-B451F4D7AD68}.Debug|Win32.Build.0 = Debug|Win32 + {8A2D94DC-412E-48B5-B566-B451F4D7AD68}.NT4 Debug|Win32.ActiveCfg = Debug|Win32 + {8A2D94DC-412E-48B5-B566-B451F4D7AD68}.NT4 Debug|Win32.Build.0 = Debug|Win32 + {8A2D94DC-412E-48B5-B566-B451F4D7AD68}.NT4 OEM Debug|Win32.ActiveCfg = Debug|Win32 + {8A2D94DC-412E-48B5-B566-B451F4D7AD68}.NT4 OEM Debug|Win32.Build.0 = Debug|Win32 + {8A2D94DC-412E-48B5-B566-B451F4D7AD68}.NT4 OEM Release|Win32.ActiveCfg = Release|Win32 + {8A2D94DC-412E-48B5-B566-B451F4D7AD68}.NT4 OEM Release|Win32.Build.0 = Release|Win32 + {8A2D94DC-412E-48B5-B566-B451F4D7AD68}.NT4 Release|Win32.ActiveCfg = Release|Win32 + {8A2D94DC-412E-48B5-B566-B451F4D7AD68}.NT4 Release|Win32.Build.0 = Release|Win32 + {8A2D94DC-412E-48B5-B566-B451F4D7AD68}.Release_Security|Win32.ActiveCfg = Release|Win32 + {8A2D94DC-412E-48B5-B566-B451F4D7AD68}.Release_Security|Win32.Build.0 = Release|Win32 + {8A2D94DC-412E-48B5-B566-B451F4D7AD68}.Release|Win32.ActiveCfg = Release|Win32 + {8A2D94DC-412E-48B5-B566-B451F4D7AD68}.Release|Win32.Build.0 = Release|Win32 + {FB2DA24E-A296-4B16-9DC2-1B84FCEC5311}.Debug_Security|Win32.ActiveCfg = Debug_Security|Win32 + {FB2DA24E-A296-4B16-9DC2-1B84FCEC5311}.Debug_Security|Win32.Build.0 = Debug_Security|Win32 + {FB2DA24E-A296-4B16-9DC2-1B84FCEC5311}.Debug|Win32.ActiveCfg = Debug|Win32 + {FB2DA24E-A296-4B16-9DC2-1B84FCEC5311}.Debug|Win32.Build.0 = Debug|Win32 + {FB2DA24E-A296-4B16-9DC2-1B84FCEC5311}.NT4 Debug|Win32.ActiveCfg = Debug|Win32 + {FB2DA24E-A296-4B16-9DC2-1B84FCEC5311}.NT4 Debug|Win32.Build.0 = Debug|Win32 + {FB2DA24E-A296-4B16-9DC2-1B84FCEC5311}.NT4 OEM Debug|Win32.ActiveCfg = Debug|Win32 + {FB2DA24E-A296-4B16-9DC2-1B84FCEC5311}.NT4 OEM Debug|Win32.Build.0 = Debug|Win32 + {FB2DA24E-A296-4B16-9DC2-1B84FCEC5311}.NT4 OEM Release|Win32.ActiveCfg = Release|Win32 + {FB2DA24E-A296-4B16-9DC2-1B84FCEC5311}.NT4 OEM Release|Win32.Build.0 = Release|Win32 + {FB2DA24E-A296-4B16-9DC2-1B84FCEC5311}.NT4 Release|Win32.ActiveCfg = Release|Win32 + {FB2DA24E-A296-4B16-9DC2-1B84FCEC5311}.NT4 Release|Win32.Build.0 = Release|Win32 + {FB2DA24E-A296-4B16-9DC2-1B84FCEC5311}.Release_Security|Win32.ActiveCfg = Release_Security|Win32 + {FB2DA24E-A296-4B16-9DC2-1B84FCEC5311}.Release_Security|Win32.Build.0 = Release_Security|Win32 + {FB2DA24E-A296-4B16-9DC2-1B84FCEC5311}.Release|Win32.ActiveCfg = Release|Win32 + {FB2DA24E-A296-4B16-9DC2-1B84FCEC5311}.Release|Win32.Build.0 = Release|Win32 + {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Debug_Security|Win32.ActiveCfg = Debug|Win32 + {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Debug_Security|Win32.Build.0 = Debug|Win32 + {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Debug|Win32.ActiveCfg = Debug|Win32 + {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.NT4 Debug|Win32.ActiveCfg = Debug|Win32 + {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.NT4 OEM Debug|Win32.ActiveCfg = Debug|Win32 + {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.NT4 OEM Release|Win32.ActiveCfg = Debug|Win32 + {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.NT4 Release|Win32.ActiveCfg = Release|Win32 + {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Release_Security|Win32.ActiveCfg = Release|Win32 + {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Release|Win32.ActiveCfg = Release|Win32 + {B825B6B9-3271-4740-8E88-C73EA358D10A}.Debug_Security|Win32.ActiveCfg = Debug|Win32 + {B825B6B9-3271-4740-8E88-C73EA358D10A}.Debug_Security|Win32.Build.0 = Debug|Win32 + {B825B6B9-3271-4740-8E88-C73EA358D10A}.Debug|Win32.ActiveCfg = Debug|Win32 + {B825B6B9-3271-4740-8E88-C73EA358D10A}.Debug|Win32.Build.0 = Debug|Win32 + {B825B6B9-3271-4740-8E88-C73EA358D10A}.NT4 Debug|Win32.ActiveCfg = NT4 Debug|Win32 + {B825B6B9-3271-4740-8E88-C73EA358D10A}.NT4 Debug|Win32.Build.0 = NT4 Debug|Win32 + {B825B6B9-3271-4740-8E88-C73EA358D10A}.NT4 OEM Debug|Win32.ActiveCfg = NT4 OEM Debug|Win32 + {B825B6B9-3271-4740-8E88-C73EA358D10A}.NT4 OEM Debug|Win32.Build.0 = NT4 OEM Debug|Win32 + {B825B6B9-3271-4740-8E88-C73EA358D10A}.NT4 OEM Release|Win32.ActiveCfg = NT4 OEM Release|Win32 + {B825B6B9-3271-4740-8E88-C73EA358D10A}.NT4 OEM Release|Win32.Build.0 = NT4 OEM Release|Win32 + {B825B6B9-3271-4740-8E88-C73EA358D10A}.NT4 Release|Win32.ActiveCfg = NT4 Release|Win32 + {B825B6B9-3271-4740-8E88-C73EA358D10A}.NT4 Release|Win32.Build.0 = NT4 Release|Win32 + {B825B6B9-3271-4740-8E88-C73EA358D10A}.Release_Security|Win32.ActiveCfg = Release|Win32 + {B825B6B9-3271-4740-8E88-C73EA358D10A}.Release_Security|Win32.Build.0 = Release|Win32 + {B825B6B9-3271-4740-8E88-C73EA358D10A}.Release|Win32.ActiveCfg = Release|Win32 + {B825B6B9-3271-4740-8E88-C73EA358D10A}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal From 495f0551bce3509af0ef0d6453f967e803f10510 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Thu, 24 Nov 2005 19:59:48 +0000 Subject: [PATCH 062/316] Added a Visual Studio.NET 2003 solution for the entire WinPcap OEM project. --- WinPcap OEM.sln | 61 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 WinPcap OEM.sln diff --git a/WinPcap OEM.sln b/WinPcap OEM.sln new file mode 100644 index 00000000..cb5d3b75 --- /dev/null +++ b/WinPcap OEM.sln @@ -0,0 +1,61 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PacketAndWan (Win2k)", "packetNtx\Dll\Project\PacketAndWan2003.vcproj", "{A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Packet (WinNT4)", "packetNtx\Dll\Project\PacketNT4.vcproj", "{33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WinPcap NTx Driver", "..\winpcap\packetNtx\driver\WinPcap NTx Driver_2003.vcproj", "{5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WinpcapOem", "OEM\WinpcapOem\WinpcapOem.vcproj", "{E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}" + ProjectSection(ProjectDependencies) = postProject + {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2} = {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2} + {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D} = {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D} + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Debug_Security = Debug_Security + Release = Release + Release_Security = Release_Security + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Debug.ActiveCfg = Debug|Win32 + {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Debug.Build.0 = Debug|Win32 + {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Debug_Security.ActiveCfg = Debug|Win32 + {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Debug_Security.Build.0 = Debug|Win32 + {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release.ActiveCfg = Release|Win32 + {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release.Build.0 = Release|Win32 + {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release_Security.ActiveCfg = Release|Win32 + {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release_Security.Build.0 = Release|Win32 + {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Debug.ActiveCfg = Debug|Win32 + {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Debug.Build.0 = Debug|Win32 + {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Debug_Security.ActiveCfg = Debug|Win32 + {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Debug_Security.Build.0 = Debug|Win32 + {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release.ActiveCfg = Release|Win32 + {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release.Build.0 = Release|Win32 + {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release_Security.ActiveCfg = Release|Win32 + {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release_Security.Build.0 = Release|Win32 + {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Debug.ActiveCfg = Debug|Win32 + {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Debug_Security.ActiveCfg = Debug|Win32 + {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Release.ActiveCfg = Release|Win32 + {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Release_Security.ActiveCfg = Release|Win32 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Debug.ActiveCfg = Debug|Win32 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Debug.Build.0 = Debug|Win32 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Debug_Security.ActiveCfg = Debug_Security|Win32 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Debug_Security.Build.0 = Debug_Security|Win32 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release.ActiveCfg = Release|Win32 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release.Build.0 = Release|Win32 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release_Security.ActiveCfg = Release_Security|Win32 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release_Security.Build.0 = Release_Security|Win32 + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal From c66b3e74851f1bc836dc7c5d59d11148fd069a0a Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Sat, 26 Nov 2005 20:53:05 +0000 Subject: [PATCH 063/316] Fixed the paths of the packet.dll binaries. --- OEM/WinpcapOem/prebuild_debug.bat | 4 ++-- OEM/WinpcapOem/prebuild_release.bat | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/OEM/WinpcapOem/prebuild_debug.bat b/OEM/WinpcapOem/prebuild_debug.bat index 221117b5..9bdbab4c 100644 --- a/OEM/WinpcapOem/prebuild_debug.bat +++ b/OEM/WinpcapOem/prebuild_debug.bat @@ -1,8 +1,8 @@ @echo off echo Copying compiled DLLs -copy ..\..\..\winpcap\packetNtx\Dll\Project\NT4_Debug_OEM\packet.dll .\Binaries\packetnt.dll -copy ..\..\..\winpcap\packetNtx\Dll\Project\Debug_PacketWan\packet.dll .\Binaries\packet2k.dll +copy ..\..\packetNtx\Dll\Project\Packet_Debug_NT4\packet.dll .\Binaries\packetnt.dll +copy ..\..\packetNtx\Dll\Project\Packet_Debug_2k\packet.dll .\Binaries\packet2k.dll echo Copying drivers copy \i386\npf.sys .\Binaries\npf2k.sys diff --git a/OEM/WinpcapOem/prebuild_release.bat b/OEM/WinpcapOem/prebuild_release.bat index e1c7def1..510fae11 100644 --- a/OEM/WinpcapOem/prebuild_release.bat +++ b/OEM/WinpcapOem/prebuild_release.bat @@ -1,8 +1,8 @@ @echo off echo Copying compiled DLLs -copy ..\..\..\winpcap\packetNtx\Dll\Project\NT4_Release_OEM\packet.dll .\Binaries\packetnt.dll -copy ..\..\..\winpcap\packetNtx\Dll\Project\Release_PacketWan\packet.dll .\Binaries\packet2k.dll +copy ..\..\..\winpcap\packetNtx\Dll\Project\Packet_Release_NT4\packet.dll .\Binaries\packetnt.dll +copy ..\..\..\winpcap\packetNtx\Dll\Project\Packet_Release_2k\packet.dll .\Binaries\packet2k.dll echo Copying drivers copy \i386\npf.sys .\Binaries\npf2k.sys From 75c34abd5a52d90a8e0d07127504ad987f0ff057 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Sun, 27 Nov 2005 02:14:49 +0000 Subject: [PATCH 064/316] Cleaned up the build scripts for NT4 and 2k/XP/2003/vista: now we pass any additional define for the build with the environment variable USER_C_DEFINES. --- packetNtx/Compile2k_oem.bat | 9 +++++++-- packetNtx/CompileNT4_oem.bat | 4 ++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/packetNtx/Compile2k_oem.bat b/packetNtx/Compile2k_oem.bat index aa967a7c..b15c3db5 100644 --- a/packetNtx/Compile2k_oem.bat +++ b/packetNtx/Compile2k_oem.bat @@ -1,6 +1,11 @@ @echo off -set NDISVERSION=NDIS50 -set OEM=WPCAP_OEM + +set USER_C_DEFINES=-DNDIS50 -DWPCAP_OEM + md \i386\free >nul 2>nul md \i386\checked >nul 2>nul + build -cefw + +set USER_C_DEFINES= + diff --git a/packetNtx/CompileNT4_oem.bat b/packetNtx/CompileNT4_oem.bat index 42a9a166..81e2262a 100644 --- a/packetNtx/CompileNT4_oem.bat +++ b/packetNtx/CompileNT4_oem.bat @@ -3,8 +3,8 @@ if NOT "%NPF_COMPILED%" == "1" ( set Include=%BASEDIR%\src\network\inc;%BASEDIR%\inc;%Include% set NPF_COMPILED=1 ) -set NDISVERSION=NDIS30 -set OEM=WPCAP_OEM +set USER_C_DEFINES=-D__NPF_NT4__ -DNDIS30 -DWPCAP_OEM md \i386\free >nul 2>nul md \i386\checked >nul 2>nul build -cefw +set USER_C_DEFINES= From 3fd85071be84ca937435e4adad34abe2033544ff Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Sun, 27 Nov 2005 02:21:37 +0000 Subject: [PATCH 065/316] Added some code to detect the processor architecture and refuse to initialize WinPcap OEM if it's not x86. --- OEM/WinpcapOem/WinPcapOem.cpp | 58 +++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/OEM/WinpcapOem/WinPcapOem.cpp b/OEM/WinpcapOem/WinPcapOem.cpp index 959a2809..785a7eb7 100644 --- a/OEM/WinpcapOem/WinPcapOem.cpp +++ b/OEM/WinpcapOem/WinPcapOem.cpp @@ -127,6 +127,10 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) char ObjName[MAX_OBJNAME_LEN]; UINT i; OSVERSIONINFO osVer; + CHAR osArchitecture[256]; + HKEY environmentKey = NULL; + DWORD keyType; + DWORD bufSize; HRESULT hr; #ifdef SECURITY DWORD Result; @@ -347,6 +351,60 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) return FALSE; } + // + // Get the OS architecture + // + bufSize = sizeof(osArchitecture); + if (RegOpenKey(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment", &environmentKey) != ERROR_SUCCESS + || RegQueryValueEx(environmentKey, "PROCESSOR_ARCHITECTURE", NULL,&keyType,(LPBYTE)&osArchitecture,&bufSize) != ERROR_SUCCESS + || keyType != REG_SZ) + { + WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Unable to determine OS architecture"); + + if (environmentKey != NULL) + RegCloseKey(environmentKey); + + ReleaseMutex(g_hGlobalMutex); + + if(g_hGlobalMutex != 0) + { + CloseHandle(g_hGlobalMutex); + g_hGlobalMutex = NULL; + + } + if (g_hGlobalSemaphore!=0) + { + CloseHandle(g_hGlobalSemaphore); + g_hGlobalSemaphore = NULL; + } + + return FALSE; + } + + // + // check that we are running on x86 (the only architecture that we support at the moment) + // + if (stricmp("x86", osArchitecture) != 0) + { + WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Unsupported Operating System architecture (only x86 is supported)"); + + ReleaseMutex(g_hGlobalMutex); + + if(g_hGlobalMutex != 0) + { + CloseHandle(g_hGlobalMutex); + g_hGlobalMutex = NULL; + + } + if (g_hGlobalSemaphore!=0) + { + CloseHandle(g_hGlobalSemaphore); + g_hGlobalSemaphore = NULL; + } + + return FALSE; + } + // // Create the WinPcap global registry key // From 1f1534cac35d3a35631963fcbd22c77eac16eaa3 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Mon, 28 Nov 2005 20:52:36 +0000 Subject: [PATCH 066/316] Cleaned up the script: - now it's possible to execute it directly from here, without moving the file - enabled PREFast analysis - added some code to set the target directory for the driver. --- packetNtx/Compile2k_oem.bat | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/packetNtx/Compile2k_oem.bat b/packetNtx/Compile2k_oem.bat index b15c3db5..11debccf 100644 --- a/packetNtx/Compile2k_oem.bat +++ b/packetNtx/Compile2k_oem.bat @@ -1,11 +1,17 @@ @echo off +mkdir driver\bin 2> nul +mkdir driver\bin\2k 2> nul + set USER_C_DEFINES=-DNDIS50 -DWPCAP_OEM +set TARGETPATH=..\..\..\winpcap_oem\PacketNtx\driver\bin\2k + +pushd ..\..\winpcap\packetntx\driver -md \i386\free >nul 2>nul -md \i386\checked >nul 2>nul +prefast build -cefw -build -cefw +popd +set TARGETPATH= set USER_C_DEFINES= From 462a77d41e417a50da635960747d0d12d21f40b9 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Mon, 28 Nov 2005 20:55:15 +0000 Subject: [PATCH 067/316] Cleaned up the script: - now it's possible to execute it directly from here, without moving the file - added some code to set the target directory for the driver. --- packetNtx/CompileNT4_oem.bat | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/packetNtx/CompileNT4_oem.bat b/packetNtx/CompileNT4_oem.bat index 81e2262a..de332d4d 100644 --- a/packetNtx/CompileNT4_oem.bat +++ b/packetNtx/CompileNT4_oem.bat @@ -4,7 +4,21 @@ if NOT "%NPF_COMPILED%" == "1" ( set NPF_COMPILED=1 ) set USER_C_DEFINES=-D__NPF_NT4__ -DNDIS30 -DWPCAP_OEM -md \i386\free >nul 2>nul -md \i386\checked >nul 2>nul +set TARGETPATH=..\..\..\winpcap_oem\PacketNtx\driver\bin\NT4 + +mkdir driver\bin 2> nul +mkdir driver\bin\NT4 2> nul +mkdir driver\bin\NT4\i386\ 2> nul +mkdir driver\bin\NT4\i386\free 2> nul +mkdir driver\bin\NT4\i386\checked 2> nul + +pushd ..\..\winpcap\packetntx\driver + build -cefw + +popd + +copy driver\bin\NT4\i386\%DDKBUILDENV%\*.* driver\bin\NT4\i386\ + +set TARGETPATH= set USER_C_DEFINES= From 0225b8dab9eb2ef367c343e16e5e3fa7403f0397 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Mon, 28 Nov 2005 20:56:11 +0000 Subject: [PATCH 068/316] Fixed the script so that it copies the driver from the right location. --- OEM/WinpcapOem/prebuild_debug.bat | 4 ++-- OEM/WinpcapOem/prebuild_release.bat | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/OEM/WinpcapOem/prebuild_debug.bat b/OEM/WinpcapOem/prebuild_debug.bat index 9bdbab4c..f3da5ff6 100644 --- a/OEM/WinpcapOem/prebuild_debug.bat +++ b/OEM/WinpcapOem/prebuild_debug.bat @@ -5,6 +5,6 @@ copy ..\..\packetNtx\Dll\Project\Packet_Debug_NT4\packet.dll .\Binaries\packetnt copy ..\..\packetNtx\Dll\Project\Packet_Debug_2k\packet.dll .\Binaries\packet2k.dll echo Copying drivers -copy \i386\npf.sys .\Binaries\npf2k.sys -copy \i386\Checked\npf.sys .\Binaries\npfnt.sys +copy ..\..\packetNtx\Driver\bin\2k\i386\npf.sys .\Binaries\npf2k.sys +copy ..\..\packetNtx\Driver\bin\NT4\i386\npf.sys .\Binaries\npfnt.sys diff --git a/OEM/WinpcapOem/prebuild_release.bat b/OEM/WinpcapOem/prebuild_release.bat index 510fae11..24b13a28 100644 --- a/OEM/WinpcapOem/prebuild_release.bat +++ b/OEM/WinpcapOem/prebuild_release.bat @@ -5,6 +5,6 @@ copy ..\..\..\winpcap\packetNtx\Dll\Project\Packet_Release_NT4\packet.dll .\Bina copy ..\..\..\winpcap\packetNtx\Dll\Project\Packet_Release_2k\packet.dll .\Binaries\packet2k.dll echo Copying drivers -copy \i386\npf.sys .\Binaries\npf2k.sys -copy \i386\free\npf.sys .\Binaries\npfnt.sys +copy ..\..\packetNtx\Driver\bin\2k\i386\npf.sys .\Binaries\npf2k.sys +copy ..\..\packetNtx\Driver\bin\NT4\i386\npf.sys .\Binaries\npfnt.sys From fb7db387d61bc52e25bb67c2cebe610af551254c Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Tue, 29 Nov 2005 18:46:25 +0000 Subject: [PATCH 069/316] Added some code in the compilation script to solve some quirks with copy (it seems that "copy" on NT4 has big problems expanding something like foo\\bar\\dep\\bin\\nt4\\*.*....). --- packetNtx/CompileNT4_oem.bat | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/packetNtx/CompileNT4_oem.bat b/packetNtx/CompileNT4_oem.bat index de332d4d..158c0bf2 100644 --- a/packetNtx/CompileNT4_oem.bat +++ b/packetNtx/CompileNT4_oem.bat @@ -18,7 +18,13 @@ build -cefw popd -copy driver\bin\NT4\i386\%DDKBUILDENV%\*.* driver\bin\NT4\i386\ +if "%DDKBUILDENV%" == "free" ( + copy driver\bin\NT4\i386\free\npf.sys driver\bin\NT4\i386\ + ) +if "%DDKBUILDENV%" == "checked" ( + copy driver\bin\NT4\i386\checked\npf.sys driver\bin\NT4\i386\ + copy driver\bin\NT4\i386\checked\npf.pdb driver\bin\NT4\i386\ + ) set TARGETPATH= set USER_C_DEFINES= From c91358269ba0011e596d639c60b031bb2803570b Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Tue, 29 Nov 2005 18:49:36 +0000 Subject: [PATCH 070/316] Added a couple of trace messages. Fixed a problem while initializing WinPcapOem: we need to change the value of g_StillToInit while holding the mutex protecting WoemEnterDll. --- OEM/WinpcapOem/PacketWrapper.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/OEM/WinpcapOem/PacketWrapper.cpp b/OEM/WinpcapOem/PacketWrapper.cpp index 801d525c..790a03db 100644 --- a/OEM/WinpcapOem/PacketWrapper.cpp +++ b/OEM/WinpcapOem/PacketWrapper.cpp @@ -710,6 +710,8 @@ BOOLEAN PacketGetAdapterNames(PTSTR pStr,PULONG BufferSize) *BufferSize = 0; SetLastError(ERROR_INVALID_FUNCTION); + TRACE_MESSAGE("WoemInitialize failed"); + TRACE_EXIT("PacketGetAdapterNames"); return FALSE; } @@ -722,6 +724,7 @@ BOOLEAN PacketGetAdapterNames(PTSTR pStr,PULONG BufferSize) { *BufferSize = 0; returnValue = FALSE; + TRACE_MESSAGE("g_OemActive is false!!\n"); SetLastError(ERROR_INVALID_FUNCTION); } @@ -823,13 +826,11 @@ __inline BOOL WoemInitialize(HINSTANCE hDllHandle) return TRUE; } + // NOTE: this function changes the value of g_StillInit!! + // we cannot do it here because we need to change this value + // while holding the global lock! returnValue = WoemEnterDll(hDllHandle, errorString); - if (returnValue == TRUE) - { - g_StillToInit = FALSE; - } - TRACE_EXIT("WoemInitialize"); return returnValue; From d19c167b1e1d432cac9528b2519eb430983be6d7 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Tue, 29 Nov 2005 18:50:17 +0000 Subject: [PATCH 071/316] Added several trace messages. Fixed a problem while initializing WinPcapOem: we need to change the value of g_StillToInit while holding the mutex protecting WoemEnterDll. --- OEM/WinpcapOem/WinPcapOem.cpp | 45 +++++++++++++++++++++++++++++------ 1 file changed, 38 insertions(+), 7 deletions(-) diff --git a/OEM/WinpcapOem/WinPcapOem.cpp b/OEM/WinpcapOem/WinPcapOem.cpp index 785a7eb7..e523e220 100644 --- a/OEM/WinpcapOem/WinPcapOem.cpp +++ b/OEM/WinpcapOem/WinPcapOem.cpp @@ -92,13 +92,20 @@ static BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString); BOOL WoemEnterDll(HINSTANCE DllHandle, char *WoemErrorString) { - BOOL returnValue; + BOOL returnValue = TRUE; TRACE_ENTER("WoemEnterDll"); ::EnterCriticalSection(&::g_CritSectionProtectingWoemEnterDll); - returnValue = WoemEnterDllInternal(DllHandle, WoemErrorString); + if (g_StillToInit) + { + returnValue = WoemEnterDllInternal(DllHandle, WoemErrorString); + if (returnValue == TRUE) + { + g_StillToInit = FALSE; + } + } ::LeaveCriticalSection(&::g_CritSectionProtectingWoemEnterDll); @@ -136,7 +143,7 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) DWORD Result; #endif - TRACE_ENTER("WoemEnterDll"); + TRACE_ENTER("WoemEnterDllInternal"); WoemErrorString[PACKET_ERRSTR_SIZE - 1] = '\0'; @@ -147,15 +154,13 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) if (!g_IsProcAuthorized) { // - // the version with security enabled doesn't need to be activated with PacketStartOem() - // - g_OemActive = TRUE; Result = WoemGetCurrentProcessAuthorization(WoemErrorString); if (Result == WOEM_PROC_AUTHORIZATION_FAILURE) { g_IsProcAuthorized = FALSE; //the error string has been already set by WoemGetCurrentProcessAuthorization + TRACE_EXIT("WoemEnterDllInternal"); return FALSE; } @@ -171,6 +176,7 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("This version of WinPcap OEM can be only run in conjunction with CACE Technologies Network Toolkit. This program is not recognized as part of The Network Toolkit, and therefore WinPcap OEM will not work."); MessageBox(NULL, "This version of WinPcap OEM can be only run in conjunction with CACE Technologies Network Toolkit.\nThis program is not recognized as part of The Network Toolkit, and therefore WinPcap OEM will not work.", "Error", MB_ICONERROR); + TRACE_EXIT("WoemEnterDllInternal"); return FALSE; } } @@ -184,6 +190,7 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) { WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("NULL DLL Handle"); + TRACE_EXIT("WoemEnterDllInternal"); return FALSE; } #endif @@ -194,6 +201,7 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) // This should never happen, but better to be sure... // WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Double initialization"); + TRACE_EXIT("WoemEnterDllInternal"); return FALSE; } @@ -224,6 +232,7 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Unable to create the global mutex."); } + TRACE_EXIT("WoemEnterDllInternal"); return FALSE; } @@ -240,6 +249,7 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Error trying to acquire the global mutex."); + TRACE_EXIT("WoemEnterDllInternal"); return FALSE; case WAIT_TIMEOUT: @@ -247,6 +257,7 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) CloseHandle(g_hGlobalMutex); WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Timeout on the global mutex"); + TRACE_EXIT("WoemEnterDllInternal"); return FALSE; case WAIT_OBJECT_0: @@ -291,6 +302,7 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) } + TRACE_EXIT("WoemEnterDllInternal"); return FALSE; } @@ -315,6 +327,7 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) g_hGlobalSemaphore = NULL; } + TRACE_EXIT("WoemEnterDllInternal"); return FALSE; } @@ -348,6 +361,7 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) g_hGlobalSemaphore = NULL; } + TRACE_EXIT("WoemEnterDllInternal"); return FALSE; } @@ -378,6 +392,7 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) g_hGlobalSemaphore = NULL; } + TRACE_EXIT("WoemEnterDllInternal"); return FALSE; } @@ -402,6 +417,7 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) g_hGlobalSemaphore = NULL; } + TRACE_EXIT("WoemEnterDllInternal"); return FALSE; } @@ -426,6 +442,7 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) g_hGlobalSemaphore = NULL; } + TRACE_EXIT("WoemEnterDllInternal"); return FALSE; } @@ -447,6 +464,7 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) g_hGlobalSemaphore = NULL; } + TRACE_EXIT("WoemEnterDllInternal"); return FALSE; } @@ -474,6 +492,7 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) g_hGlobalSemaphore = NULL; } + TRACE_EXIT("WoemEnterDllInternal"); return FALSE; } } @@ -508,6 +527,7 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) g_hGlobalSemaphore = NULL; } + TRACE_EXIT("WoemEnterDllInternal"); return FALSE; } @@ -534,6 +554,7 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) g_hGlobalSemaphore = NULL; } + TRACE_EXIT("WoemEnterDllInternal"); return FALSE; } } @@ -580,6 +601,7 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) g_hGlobalSemaphore = NULL; } + TRACE_EXIT("WoemEnterDllInternal"); return FALSE; } @@ -605,7 +627,8 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) CloseHandle(g_hGlobalSemaphore); g_hGlobalSemaphore = NULL; } - + + TRACE_EXIT("WoemEnterDllInternal"); return FALSE; } } @@ -636,6 +659,7 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) g_hGlobalSemaphore = NULL; } + TRACE_EXIT("WoemEnterDllInternal"); return FALSE; } @@ -662,6 +686,7 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) g_hGlobalSemaphore = NULL; } + TRACE_EXIT("WoemEnterDllInternal"); return FALSE; } @@ -693,6 +718,7 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) g_hGlobalSemaphore = NULL; } + TRACE_EXIT("WoemEnterDllInternal"); return FALSE; } @@ -721,6 +747,7 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) g_hGlobalSemaphore = NULL; } + TRACE_EXIT("WoemEnterDllInternal"); return FALSE; } @@ -758,6 +785,7 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) g_hGlobalSemaphore = NULL; } + TRACE_EXIT("WoemEnterDllInternal"); return FALSE; } @@ -792,6 +820,7 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) g_hGlobalSemaphore = NULL; } + TRACE_EXIT("WoemEnterDllInternal"); return FALSE; } } @@ -819,6 +848,7 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) g_hGlobalSemaphore = NULL; } + TRACE_EXIT("WoemEnterDllInternal"); return FALSE; } @@ -839,6 +869,7 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) // ReleaseMutex(g_hGlobalMutex); + TRACE_EXIT("WoemEnterDllInternal"); return TRUE; } From d8d9566de44badb27022c0b848779e5a95069ed6 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Tue, 29 Nov 2005 18:50:40 +0000 Subject: [PATCH 072/316] Added an extern declaration for g_StillToInit. --- OEM/WinpcapOem/WinpcapOem.h | 1 + 1 file changed, 1 insertion(+) diff --git a/OEM/WinpcapOem/WinpcapOem.h b/OEM/WinpcapOem/WinpcapOem.h index f3a599a0..f5490e42 100644 --- a/OEM/WinpcapOem/WinpcapOem.h +++ b/OEM/WinpcapOem/WinpcapOem.h @@ -44,6 +44,7 @@ extern HINSTANCE g_DllHandle; extern char g_LastWoemError[]; volatile extern BOOL g_InitError; volatile extern BOOL g_OemActive; +volatile extern BOOL g_StillToInit; //////////////////////////////////////////////////////////////////// From cdf2c166770867ddcd9184bf428c20f032cb78b1 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Tue, 29 Nov 2005 18:51:35 +0000 Subject: [PATCH 073/316] Enabled buffer security checks (/GS) to packet.dll (NT2k) --- packetNtx/Dll/Project/PacketAndWan2003.vcproj | 1 + 1 file changed, 1 insertion(+) diff --git a/packetNtx/Dll/Project/PacketAndWan2003.vcproj b/packetNtx/Dll/Project/PacketAndWan2003.vcproj index a890e45c..4930ef46 100644 --- a/packetNtx/Dll/Project/PacketAndWan2003.vcproj +++ b/packetNtx/Dll/Project/PacketAndWan2003.vcproj @@ -24,6 +24,7 @@ AdditionalIncludeDirectories="../../../../winpcap/dag/include,../../../../winpcap/dag/drv/windows,../../../../winpcap/common,../../../../winpcap/PacketNtx/driver" PreprocessorDefinitions="HAVE_DAG_API;WIN32;_WINDOWS;WPCAP_OEM" RuntimeLibrary="1" + BufferSecurityCheck="TRUE" UsePrecompiledHeader="2" PrecompiledHeaderFile="$(IntDir)/Packet.pch" AssemblerListingLocation="$(IntDir)/" From a31071147e85bfb2c93c4c3c6c0ffbb0c36b4778 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Tue, 29 Nov 2005 21:16:40 +0000 Subject: [PATCH 074/316] Fixed some wrong paths. --- OEM/WinpcapOem/prebuild_release.bat | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/OEM/WinpcapOem/prebuild_release.bat b/OEM/WinpcapOem/prebuild_release.bat index 24b13a28..1c9e32d4 100644 --- a/OEM/WinpcapOem/prebuild_release.bat +++ b/OEM/WinpcapOem/prebuild_release.bat @@ -1,8 +1,8 @@ @echo off echo Copying compiled DLLs -copy ..\..\..\winpcap\packetNtx\Dll\Project\Packet_Release_NT4\packet.dll .\Binaries\packetnt.dll -copy ..\..\..\winpcap\packetNtx\Dll\Project\Packet_Release_2k\packet.dll .\Binaries\packet2k.dll +copy ..\..\packetNtx\Dll\Project\Packet_Release_NT4\packet.dll .\Binaries\packetnt.dll +copy ..\..\packetNtx\Dll\Project\Packet_Release_2k\packet.dll .\Binaries\packet2k.dll echo Copying drivers copy ..\..\packetNtx\Driver\bin\2k\i386\npf.sys .\Binaries\npf2k.sys From 79f7e5a67507e91e4c270b5d54fa70c8db1ca0eb Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Tue, 29 Nov 2005 21:21:39 +0000 Subject: [PATCH 075/316] Cleaned up the code checking for Woem activation (now both activation and security are done within WoemInitialize). --- OEM/WinpcapOem/PacketWrapper.cpp | 39 ++++++++++++++------------------ 1 file changed, 17 insertions(+), 22 deletions(-) diff --git a/OEM/WinpcapOem/PacketWrapper.cpp b/OEM/WinpcapOem/PacketWrapper.cpp index 790a03db..5214ee4c 100644 --- a/OEM/WinpcapOem/PacketWrapper.cpp +++ b/OEM/WinpcapOem/PacketWrapper.cpp @@ -700,35 +700,22 @@ BOOLEAN PacketGetAdapterNames(PTSTR pStr,PULONG BufferSize) TRACE_ENTER("PacketGetAdapterNames"); - if(g_OemActive) + // + // Check if we are the first instance and Init everything accordingly + // + if(!WoemInitialize(g_DllHandle)) { - // - // Check if we are the first instance and Init everything accordingly - // - if(!WoemInitialize(g_DllHandle)) - { - *BufferSize = 0; - SetLastError(ERROR_INVALID_FUNCTION); + *BufferSize = 0; + SetLastError(ERROR_INVALID_FUNCTION); - TRACE_MESSAGE("WoemInitialize failed"); - - TRACE_EXIT("PacketGetAdapterNames"); - return FALSE; - } - else - { - returnValue = PacketGetAdapterNamesH(pStr, BufferSize); - } + TRACE_EXIT("PacketGetAdapterNames"); + return FALSE; } else { - *BufferSize = 0; - returnValue = FALSE; - TRACE_MESSAGE("g_OemActive is false!!\n"); - SetLastError(ERROR_INVALID_FUNCTION); + returnValue = PacketGetAdapterNamesH(pStr, BufferSize); } - TRACE_EXIT("PacketGetAdapterNames"); return returnValue; } @@ -826,6 +813,14 @@ __inline BOOL WoemInitialize(HINSTANCE hDllHandle) return TRUE; } + if (g_OemActive == FALSE) + { + TRACE_MESSAGE("OEM WinPcap not active"); + + TRACE_EXIT("WoemInitialize"); + return FALSE; + } + // NOTE: this function changes the value of g_StillInit!! // we cannot do it here because we need to change this value // while holding the global lock! From 44870dadc2b59ec2a0154753023d5e87d8d4de5e Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 30 Nov 2005 17:21:46 +0000 Subject: [PATCH 076/316] Added versioning info. --- OEM/WinpcapOem/WinPcapOem.rc2 | 46 +++++++++++ packetNtx/Dll/Project/PacketAndWan.rc | 64 +++++++++++++++ packetNtx/Dll/Project/PacketAndWan.rc2 | 46 +++++++++++ packetNtx/Dll/Project/PacketNT4.rc | 64 +++++++++++++++ packetNtx/Dll/Project/PacketNT4.rc2 | 46 +++++++++++ packetNtx/Driver/NPF_NT4.RC | 107 +++++++++++++++++++++++++ packetNtx/Driver/NPF_NT5.RC | 107 +++++++++++++++++++++++++ 7 files changed, 480 insertions(+) create mode 100644 OEM/WinpcapOem/WinPcapOem.rc2 create mode 100644 packetNtx/Dll/Project/PacketAndWan.rc create mode 100644 packetNtx/Dll/Project/PacketAndWan.rc2 create mode 100644 packetNtx/Dll/Project/PacketNT4.rc create mode 100644 packetNtx/Dll/Project/PacketNT4.rc2 create mode 100644 packetNtx/Driver/NPF_NT4.RC create mode 100644 packetNtx/Driver/NPF_NT5.RC diff --git a/OEM/WinpcapOem/WinPcapOem.rc2 b/OEM/WinpcapOem/WinPcapOem.rc2 new file mode 100644 index 00000000..9a441624 --- /dev/null +++ b/OEM/WinpcapOem/WinPcapOem.rc2 @@ -0,0 +1,46 @@ +// +// WinPcapOem.rc2 - resources Microsoft Visual C++ does not edit directly +// + +#ifdef APSTUDIO_INVOKED + #error this file is not editable by Microsoft Visual C++ +#endif //APSTUDIO_INVOKED + + +#include "..\..\version.h" +#include "..\..\..\winpcap\common\WpcapNames.h" + +VS_VERSION_INFO VERSIONINFO + FILEVERSION WINPCAPOEM_MAJOR,WINPCAPOEM_MINOR,WINPCAPOEM_REV,WINPCAPOEM_BUILD + PRODUCTVERSION WINPCAPOEM_MAJOR,WINPCAPOEM_MINOR,WINPCAPOEM_REV,WINPCAPOEM_BUILD + FILEFLAGSMASK 0x17L +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x4L + FILETYPE 0x2L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "000004b0" + BEGIN + VALUE "CompanyName", WINPCAPOEM_COMPANY_NAME + VALUE "FileDescription", "packet.dll Wrapper Dynamic Link Library" + VALUE "FileVersion", WINPCAPOEM_VER_STRING + VALUE "InternalName", WINPCAPOEM_PRODUCT_NAME + VALUE "LegalCopyright", WINPCAPOEM_COPYRIGHT_STRING + VALUE "LegalTrademarks", "" + VALUE "OriginalFilename", "packet.dll" + VALUE "ProductName", WINPCAPOEM_PRODUCT_NAME " (" NPF_DRIVER_NAME ")" + VALUE "ProductVersion", WINPCAPOEM_VER_STRING + VALUE "Build Description", WINPCAPOEM_BUILD_DESCRIPTION + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x0, 1200 + END +END diff --git a/packetNtx/Dll/Project/PacketAndWan.rc b/packetNtx/Dll/Project/PacketAndWan.rc new file mode 100644 index 00000000..97a21c98 --- /dev/null +++ b/packetNtx/Dll/Project/PacketAndWan.rc @@ -0,0 +1,64 @@ +// Microsoft Visual C++ generated resource script. +// + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "afxres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) +#endif //_WIN32 + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""afxres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "#include ""PacketAndWan.rc2""\r\n" + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// +#include "PacketAndWan.rc2" + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/packetNtx/Dll/Project/PacketAndWan.rc2 b/packetNtx/Dll/Project/PacketAndWan.rc2 new file mode 100644 index 00000000..3a8f6258 --- /dev/null +++ b/packetNtx/Dll/Project/PacketAndWan.rc2 @@ -0,0 +1,46 @@ +// +// WinPcapOem.rc2 - resources Microsoft Visual C++ does not edit directly +// + +#ifdef APSTUDIO_INVOKED + #error this file is not editable by Microsoft Visual C++ +#endif //APSTUDIO_INVOKED + + +#include "..\..\..\version.h" +#include "..\..\..\..\winpcap\common\WpcapNames.h" + +VS_VERSION_INFO VERSIONINFO + FILEVERSION WINPCAPOEM_MAJOR,WINPCAPOEM_MINOR,WINPCAPOEM_REV,WINPCAPOEM_BUILD + PRODUCTVERSION WINPCAPOEM_MAJOR,WINPCAPOEM_MINOR,WINPCAPOEM_REV,WINPCAPOEM_BUILD + FILEFLAGSMASK 0x17L +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x4L + FILETYPE 0x2L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "000004b0" + BEGIN + VALUE "CompanyName", WINPCAPOEM_COMPANY_NAME + VALUE "FileDescription", "packet.dll (NT5) Dynamic Link Library" + VALUE "FileVersion", WINPCAPOEM_VER_STRING + VALUE "InternalName", WINPCAPOEM_PRODUCT_NAME + VALUE "LegalCopyright", WINPCAPOEM_COPYRIGHT_STRING + VALUE "LegalTrademarks", "" + VALUE "OriginalFilename", "packet.dll" + VALUE "ProductName", WINPCAPOEM_PRODUCT_NAME " (" NPF_DRIVER_NAME ")" + VALUE "ProductVersion", WINPCAPOEM_VER_STRING + VALUE "Build Description", WINPCAPOEM_BUILD_DESCRIPTION + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x0, 1200 + END +END diff --git a/packetNtx/Dll/Project/PacketNT4.rc b/packetNtx/Dll/Project/PacketNT4.rc new file mode 100644 index 00000000..0b8cff2f --- /dev/null +++ b/packetNtx/Dll/Project/PacketNT4.rc @@ -0,0 +1,64 @@ +// Microsoft Visual C++ generated resource script. +// + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "afxres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) +#endif //_WIN32 + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""afxres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "#include ""PacketNT4.rc2""\r\n" + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// +#include "PacketNT4.rc2" + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/packetNtx/Dll/Project/PacketNT4.rc2 b/packetNtx/Dll/Project/PacketNT4.rc2 new file mode 100644 index 00000000..50487b40 --- /dev/null +++ b/packetNtx/Dll/Project/PacketNT4.rc2 @@ -0,0 +1,46 @@ +// +// WinPcapOem.rc2 - resources Microsoft Visual C++ does not edit directly +// + +#ifdef APSTUDIO_INVOKED + #error this file is not editable by Microsoft Visual C++ +#endif //APSTUDIO_INVOKED + + +#include "..\..\..\version.h" +#include "..\..\..\..\winpcap\common\WpcapNames.h" + +VS_VERSION_INFO VERSIONINFO + FILEVERSION WINPCAPOEM_MAJOR,WINPCAPOEM_MINOR,WINPCAPOEM_REV,WINPCAPOEM_BUILD + PRODUCTVERSION WINPCAPOEM_MAJOR,WINPCAPOEM_MINOR,WINPCAPOEM_REV,WINPCAPOEM_BUILD + FILEFLAGSMASK 0x17L +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x4L + FILETYPE 0x2L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "000004b0" + BEGIN + VALUE "CompanyName", WINPCAPOEM_COMPANY_NAME + VALUE "FileDescription", "packet.dll (NT4) Dynamic Link Library" + VALUE "FileVersion", WINPCAPOEM_VER_STRING + VALUE "InternalName", WINPCAPOEM_PRODUCT_NAME + VALUE "LegalCopyright", WINPCAPOEM_COPYRIGHT_STRING + VALUE "LegalTrademarks", "" + VALUE "OriginalFilename", "packet.dll" + VALUE "ProductName", WINPCAPOEM_PRODUCT_NAME " (" NPF_DRIVER_NAME ")" + VALUE "ProductVersion", WINPCAPOEM_VER_STRING + VALUE "Build Description", WINPCAPOEM_BUILD_DESCRIPTION + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x0, 1200 + END +END diff --git a/packetNtx/Driver/NPF_NT4.RC b/packetNtx/Driver/NPF_NT4.RC new file mode 100644 index 00000000..4d6607c4 --- /dev/null +++ b/packetNtx/Driver/NPF_NT4.RC @@ -0,0 +1,107 @@ +//Microsoft Developer Studio generated resource script. +// + +#include "..\..\..\winpcap_oem\version.h" +#include "..\..\common\WpcapNames.h" + + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "afxres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// Neutral resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEU) +#ifdef _WIN32 +LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL +#pragma code_page(1252) +#endif //_WIN32 + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +2 TEXTINCLUDE DISCARDABLE +BEGIN + "#include ""afxres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE DISCARDABLE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +#ifndef _MAC +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + + +VS_VERSION_INFO VERSIONINFO + FILEVERSION WINPCAPOEM_MAJOR,WINPCAPOEM_MINOR,WINPCAPOEM_REV,WINPCAPOEM_BUILD + PRODUCTVERSION WINPCAPOEM_MAJOR,WINPCAPOEM_MINOR,WINPCAPOEM_REV,WINPCAPOEM_BUILD + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x40004L + FILETYPE 0x3L + FILESUBTYPE 0x7L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "000004b0" + BEGIN + VALUE "CompanyName", WINPCAPOEM_COMPANY_NAME + VALUE "FileDescription", "npf.sys (NT4) Kernel Driver" + VALUE "FileVersion", WINPCAPOEM_VER_STRING + VALUE "InternalName", WINPCAPOEM_PRODUCT_NAME + VALUE "LegalCopyright", WINPCAPOEM_COPYRIGHT_STRING + VALUE "LegalTrademarks", "" + VALUE "OriginalFilename", "npf.sys" + VALUE "ProductName", WINPCAPOEM_PRODUCT_NAME " (" NPF_DRIVER_NAME ")" + VALUE "ProductVersion", WINPCAPOEM_VER_STRING + VALUE "Build Description", WINPCAPOEM_BUILD_DESCRIPTION + VALUE "PrivateBuild", WINPCAPOEM_PRIVATE_BUILD + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x0, 1200 + END +END + +#endif // !_MAC + +#endif // Neutral resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/packetNtx/Driver/NPF_NT5.RC b/packetNtx/Driver/NPF_NT5.RC new file mode 100644 index 00000000..beb4c14f --- /dev/null +++ b/packetNtx/Driver/NPF_NT5.RC @@ -0,0 +1,107 @@ +//Microsoft Developer Studio generated resource script. +// + +#include "..\..\..\winpcap_oem\version.h" +#include "..\..\common\WpcapNames.h" + + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "afxres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// Neutral resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEU) +#ifdef _WIN32 +LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL +#pragma code_page(1252) +#endif //_WIN32 + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +2 TEXTINCLUDE DISCARDABLE +BEGIN + "#include ""afxres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE DISCARDABLE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +#ifndef _MAC +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + + +VS_VERSION_INFO VERSIONINFO + FILEVERSION WINPCAPOEM_MAJOR,WINPCAPOEM_MINOR,WINPCAPOEM_REV,WINPCAPOEM_BUILD + PRODUCTVERSION WINPCAPOEM_MAJOR,WINPCAPOEM_MINOR,WINPCAPOEM_REV,WINPCAPOEM_BUILD + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x40004L + FILETYPE 0x3L + FILESUBTYPE 0x7L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "000004b0" + BEGIN + VALUE "CompanyName", WINPCAPOEM_COMPANY_NAME + VALUE "FileDescription", "npf.sys (NT5) Kernel Driver" + VALUE "FileVersion", WINPCAPOEM_VER_STRING + VALUE "InternalName", WINPCAPOEM_PRODUCT_NAME + VALUE "LegalCopyright", WINPCAPOEM_COPYRIGHT_STRING + VALUE "LegalTrademarks", "" + VALUE "OriginalFilename", "npf.sys" + VALUE "ProductName", WINPCAPOEM_PRODUCT_NAME " (" NPF_DRIVER_NAME ")" + VALUE "ProductVersion", WINPCAPOEM_VER_STRING + VALUE "Build Description", WINPCAPOEM_BUILD_DESCRIPTION + VALUE "PrivateBuild", WINPCAPOEM_PRIVATE_BUILD + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x0, 1200 + END +END + +#endif // !_MAC + +#endif // Neutral resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + From d8f2bde4b7a10b231111f9b2c56585818e0d25e6 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 30 Nov 2005 17:22:19 +0000 Subject: [PATCH 077/316] Added a global version file for the entire WinPcap OEM project. --- version.h | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 version.h diff --git a/version.h b/version.h new file mode 100644 index 00000000..d92dff59 --- /dev/null +++ b/version.h @@ -0,0 +1,30 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Developer Studio generated include file. +// Used by NetMonInstaller.rc +// + +// 0 Feb = 31 + 0 = 31 +// 0 Mar = 31 + 28 + 0 = 59 +// o Apr = 31 + 28 + 31 = 90 +// 0 May = 31 + 28 + 31 + 30 = 120 +// 0 Jun = 31 + 28 + 31 + 30 + 31 = 151 +// 0 Jul = 31 + 28 + 31 + 30 + 31 + 30 = 181 +// 0 Nov = 181 + (Jul) 31 + (Aug) 31 + (Sept)30 + (Oct)31 = 325 +// 0 Dec = 325 + 30 = 335 + +#define WINPCAPOEM_MAJOR 3 +#define WINPCAPOEM_MINOR 2 +#define WINPCAPOEM_REV 1 +#define WINPCAPOEM_BUILD 334 + +#define WINPCAPOEM_VER_STRING "3.2.1.334.tnt" + +#define WINPCAPOEM_COMPANY_NAME "CACE Technologies" + +#define WINPCAPOEM_PACKET_WRAPPER_NAME "Packet.dll Wrapper" +#define WINPCAPOEM_VERSION_STRING "1" +#define WINPCAPOEM_PRODUCT_NAME "WinPcap OEM" +#define WINPCAPOEM_COPYRIGHT_STRING "Copyright © 2005 CACE Technologies" +#define WINPCAPOEM_PACKET_WRAPPER_FILENAME "Packet.dll (wrapper)" +#define WINPCAPOEM_BUILD_DESCRIPTION "" +#define WINPCAPOEM_PRIVATE_BUILD "Test Versioning BUILD" From 24c56f40c9da073172ae931e2668a32de14ac014 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 30 Nov 2005 17:24:43 +0000 Subject: [PATCH 078/316] Added some code to copy the proper NPF.RC version file into the driver directory. --- packetNtx/Compile2k_oem.bat | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packetNtx/Compile2k_oem.bat b/packetNtx/Compile2k_oem.bat index 11debccf..38077065 100644 --- a/packetNtx/Compile2k_oem.bat +++ b/packetNtx/Compile2k_oem.bat @@ -6,6 +6,8 @@ mkdir driver\bin\2k 2> nul set USER_C_DEFINES=-DNDIS50 -DWPCAP_OEM set TARGETPATH=..\..\..\winpcap_oem\PacketNtx\driver\bin\2k +copy driver\NPF_NT5.RC ..\..\winpcap\packetntx\driver\NPF.RC + pushd ..\..\winpcap\packetntx\driver prefast build -cefw From 7af139d800936a02a356ebee95be979ef0ce8c8c Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 30 Nov 2005 17:25:29 +0000 Subject: [PATCH 079/316] Added some code to copy the proper NPF.RC version file into the driver directory. Added some environment flags to generate PDB files in both the free and checked version of the driver. --- packetNtx/CompileNT4_oem.bat | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/packetNtx/CompileNT4_oem.bat b/packetNtx/CompileNT4_oem.bat index 158c0bf2..743d8c94 100644 --- a/packetNtx/CompileNT4_oem.bat +++ b/packetNtx/CompileNT4_oem.bat @@ -6,12 +6,18 @@ if NOT "%NPF_COMPILED%" == "1" ( set USER_C_DEFINES=-D__NPF_NT4__ -DNDIS30 -DWPCAP_OEM set TARGETPATH=..\..\..\winpcap_oem\PacketNtx\driver\bin\NT4 +REM this enables the generation of pdb files for both free and debug mode +rem set USE_PDB=1 +rem set NTDEBUGTYPE=windbg + mkdir driver\bin 2> nul mkdir driver\bin\NT4 2> nul mkdir driver\bin\NT4\i386\ 2> nul mkdir driver\bin\NT4\i386\free 2> nul mkdir driver\bin\NT4\i386\checked 2> nul +copy driver\NPF_NT4.RC ..\..\winpcap\packetntx\driver\NPF.RC + pushd ..\..\winpcap\packetntx\driver build -cefw @@ -20,6 +26,7 @@ popd if "%DDKBUILDENV%" == "free" ( copy driver\bin\NT4\i386\free\npf.sys driver\bin\NT4\i386\ + copy driver\bin\NT4\i386\free\npf.pdb driver\bin\NT4\i386\ ) if "%DDKBUILDENV%" == "checked" ( @@ -28,3 +35,5 @@ if "%DDKBUILDENV%" == "checked" ( ) set TARGETPATH= set USER_C_DEFINES= +rem set USE_PDB= +rem set NTDEBUGTYPE= From 2dce9c6358b833477f84e0e596a877b005b5ea7f Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 30 Nov 2005 17:26:05 +0000 Subject: [PATCH 080/316] Added version info to packet.dll (NT5) for WinPcap OEM. --- packetNtx/Dll/Project/PacketAndWan2003.vcproj | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packetNtx/Dll/Project/PacketAndWan2003.vcproj b/packetNtx/Dll/Project/PacketAndWan2003.vcproj index 4930ef46..3d9366e2 100644 --- a/packetNtx/Dll/Project/PacketAndWan2003.vcproj +++ b/packetNtx/Dll/Project/PacketAndWan2003.vcproj @@ -260,9 +260,6 @@ ObjectFile="$(IntDir)/$(InputName)1.obj"/> - - + + From f2b106116ad2eee75b4f7e2e9872b952970b8609 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 30 Nov 2005 17:27:30 +0000 Subject: [PATCH 081/316] Added version info to packet.dll (NT4) for WinPcap OEM. --- packetNtx/Dll/Project/PacketNT4.vcproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packetNtx/Dll/Project/PacketNT4.vcproj b/packetNtx/Dll/Project/PacketNT4.vcproj index c791da7c..bcd6c959 100644 --- a/packetNtx/Dll/Project/PacketNT4.vcproj +++ b/packetNtx/Dll/Project/PacketNT4.vcproj @@ -170,7 +170,7 @@ RelativePath="..\..\..\..\winpcap\packetNtx\Dll\Packet.def"> + RelativePath=".\PacketNT4.rc"> From 6cfdef8b25d33d2f1f47b2de278b4e763dc09e46 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 30 Nov 2005 17:32:09 +0000 Subject: [PATCH 082/316] Enabled Buffer Security Checks (/GS). Added version.h to the project. --- OEM/WinpcapOem/WinpcapOem.vcproj | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/OEM/WinpcapOem/WinpcapOem.vcproj b/OEM/WinpcapOem/WinpcapOem.vcproj index 46a31bc4..a97659d9 100644 --- a/OEM/WinpcapOem/WinpcapOem.vcproj +++ b/OEM/WinpcapOem/WinpcapOem.vcproj @@ -95,6 +95,7 @@ PreprocessorDefinitions="_DEBUG;_USRDLL;WinpcapOem_EXPORTS;WIN32;_WINDOWS;SECURITY" BasicRuntimeChecks="3" RuntimeLibrary="1" + BufferSecurityCheck="TRUE" PrecompiledHeaderFile=".\Debug_Security/WinpcapOem.pch" AssemblerListingLocation=".\Debug_Security/" ObjectFile=".\Debug_Security/" @@ -561,9 +562,6 @@ - - @@ -577,6 +575,9 @@ + + @@ -599,9 +600,6 @@ - - From ecab8c00101a41e03cc090566e86a325d8293239 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 30 Nov 2005 17:47:06 +0000 Subject: [PATCH 083/316] Cleaned up the resource file: - removed a useless string resource - added the inclusion of WinPcapOem.rc2 - added afxres.h, otherwise the version resources are not generated. --- OEM/WinpcapOem/WinpcapOem.rc | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/OEM/WinpcapOem/WinpcapOem.rc b/OEM/WinpcapOem/WinpcapOem.rc index c7fd0093..c39a7adf 100644 --- a/OEM/WinpcapOem/WinpcapOem.rc +++ b/OEM/WinpcapOem/WinpcapOem.rc @@ -1,8 +1,14 @@ //Microsoft Developer Studio generated resource script. // -#include "resrc1.h" #define APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 1 resource. +// +#include "afxres.h" + ///////////////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 2 resource. @@ -32,7 +38,8 @@ HSH_AUTH_PROC RCDATA MOVEABLE PURE "binaries\\tools.bin" 1 TEXTINCLUDE DISCARDABLE BEGIN - "resrc1.h\0" + "#include ""afxres.h""\r\n" + "\0" END 2 TEXTINCLUDE DISCARDABLE @@ -43,23 +50,12 @@ END 3 TEXTINCLUDE DISCARDABLE BEGIN - "\r\n" + "#include ""WinPcapOem.rc2""\r\n" "\0" END #endif // APSTUDIO_INVOKED - -///////////////////////////////////////////////////////////////////////////// -// -// String Table -// - -STRINGTABLE DISCARDABLE -BEGIN - Wpcap "NPF" -END - ///////////////////////////////////////////////////////////////////////////// @@ -69,7 +65,7 @@ END // // Generated from the TEXTINCLUDE 3 resource. // - +#include "WinPcapOem.rc2" ///////////////////////////////////////////////////////////////////////////// #endif // not APSTUDIO_INVOKED From 0fa8f3f43813debd5b21c44dca6730c6398cbfa3 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 30 Nov 2005 22:06:13 +0000 Subject: [PATCH 084/316] Added a string containing the version of libpcap (quick fix). --- version.h | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/version.h b/version.h index d92dff59..7d282486 100644 --- a/version.h +++ b/version.h @@ -15,9 +15,9 @@ #define WINPCAPOEM_MAJOR 3 #define WINPCAPOEM_MINOR 2 #define WINPCAPOEM_REV 1 -#define WINPCAPOEM_BUILD 334 +#define WINPCAPOEM_BUILD 335 -#define WINPCAPOEM_VER_STRING "3.2.1.334.tnt" +#define WINPCAPOEM_VER_STRING "3.2.1.335.tnt" #define WINPCAPOEM_COMPANY_NAME "CACE Technologies" @@ -27,4 +27,5 @@ #define WINPCAPOEM_COPYRIGHT_STRING "Copyright © 2005 CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_FILENAME "Packet.dll (wrapper)" #define WINPCAPOEM_BUILD_DESCRIPTION "" -#define WINPCAPOEM_PRIVATE_BUILD "Test Versioning BUILD" +#define WINPCAPOEM_PRIVATE_BUILD "Test Versioning BUILD" +#define WINPCAPOEM_LIBPCAP_VERSION "0.9.3" From f4b8645358fa9a536a45c6347530748169025296 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 30 Nov 2005 22:08:51 +0000 Subject: [PATCH 085/316] Added the project for wpcap.dll OEM (and its related RC files for versioning). --- wpcap/PRJ/WPCAP.DEF | 84 +++++++++++++++++++ wpcap/PRJ/wpcap.rc | 64 +++++++++++++++ wpcap/PRJ/wpcap.rc2 | 46 +++++++++++ wpcap/PRJ/wpcap.vcproj | 182 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 376 insertions(+) create mode 100755 wpcap/PRJ/WPCAP.DEF create mode 100644 wpcap/PRJ/wpcap.rc create mode 100644 wpcap/PRJ/wpcap.rc2 create mode 100644 wpcap/PRJ/wpcap.vcproj diff --git a/wpcap/PRJ/WPCAP.DEF b/wpcap/PRJ/WPCAP.DEF new file mode 100755 index 00000000..c1bd2923 --- /dev/null +++ b/wpcap/PRJ/WPCAP.DEF @@ -0,0 +1,84 @@ +LIBRARY wpcap.dll + +EXPORTS + pcap_lookupdev + pcap_lookupnet + pcap_open_live + pcap_open_offline + pcap_close + pcap_getnonblock + pcap_setnonblock + pcap_loop + pcap_dispatch + pcap_read + pcap_setuserbuffer + pcap_offline_read + pcap_next + pcap_stats + pcap_stats_ex + pcap_setfilter + pcap_perror + pcap_strerror + pcap_geterr + pcap_compile + pcap_compile_nopcap + pcap_freecode + pcap_datalink + pcap_snapshot + pcap_is_swapped + pcap_major_version + pcap_minor_version + pcap_file + pcap_fileno + pcap_dump_open + pcap_dump_close + pcap_dump_flush + pcap_dump + pcap_dump_file + pcap_setbuff + pcap_setmode + pcap_sendpacket + pcap_sendqueue_alloc + pcap_sendqueue_destroy + pcap_sendqueue_queue + pcap_sendqueue_transmit + pcap_next_etherent + pcap_getevent + pcap_setmintocopy + pcap_open_dead + pcap_findalldevs + pcap_freealldevs + pcap_live_dump + pcap_live_dump_ended + bpf_filter + bpf_validate + bpf_image + bpf_dump + wsockinit + endservent + getservent + eproto_db + pcap_stats_ex + pcap_open + pcap_createsrcstr + pcap_parsesrcstr + pcap_findalldevs_ex + pcap_remoteact_accept + pcap_remoteact_list + pcap_remoteact_close + pcap_remoteact_cleanup + install_bpf_program + pcap_next_ex + pcap_offline_filter + pcap_setsampling + pcap_breakloop + pcap_list_datalinks + pcap_list_datalinks + pcap_set_datalink + pcap_datalink_name_to_val + pcap_datalink_val_to_name + pcap_datalink_val_to_description + pcap_lib_version + pcap_dump_file + pcap_dump_ftell + pcap_start_oem \ No newline at end of file diff --git a/wpcap/PRJ/wpcap.rc b/wpcap/PRJ/wpcap.rc new file mode 100644 index 00000000..e2b629d7 --- /dev/null +++ b/wpcap/PRJ/wpcap.rc @@ -0,0 +1,64 @@ +// Microsoft Visual C++ generated resource script. +// + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "afxres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) +#endif //_WIN32 + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""afxres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "#include ""wpcap.rc2""\r\n" + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// +#include "wpcap.rc2" + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/wpcap/PRJ/wpcap.rc2 b/wpcap/PRJ/wpcap.rc2 new file mode 100644 index 00000000..2a850489 --- /dev/null +++ b/wpcap/PRJ/wpcap.rc2 @@ -0,0 +1,46 @@ +// +// wpcap.rc2 - resources Microsoft Visual C++ does not edit directly +// + +#ifdef APSTUDIO_INVOKED + #error this file is not editable by Microsoft Visual C++ +#endif //APSTUDIO_INVOKED + + +#include "..\..\version.h" +#include "..\..\..\winpcap\common\WpcapNames.h" + +VS_VERSION_INFO VERSIONINFO + FILEVERSION WINPCAPOEM_MAJOR,WINPCAPOEM_MINOR,WINPCAPOEM_REV,WINPCAPOEM_BUILD + PRODUCTVERSION WINPCAPOEM_MAJOR,WINPCAPOEM_MINOR,WINPCAPOEM_REV,WINPCAPOEM_BUILD + FILEFLAGSMASK 0x17L +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x4L + FILETYPE 0x2L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "000004b0" + BEGIN + VALUE "CompanyName", WINPCAPOEM_COMPANY_NAME + VALUE "FileDescription", "wpcap.dll Dynamic Link Library - based on libpcap " WINPCAPOEM_LIBPCAP_VERSION + VALUE "FileVersion", WINPCAPOEM_VER_STRING + VALUE "InternalName", WINPCAPOEM_PRODUCT_NAME + VALUE "LegalCopyright", WINPCAPOEM_COPYRIGHT_STRING + VALUE "LegalTrademarks", "" + VALUE "OriginalFilename", "wpcap.dll" + VALUE "ProductName", WINPCAPOEM_PRODUCT_NAME " (" NPF_DRIVER_NAME ")" + VALUE "ProductVersion", WINPCAPOEM_VER_STRING + VALUE "Build Description", WINPCAPOEM_BUILD_DESCRIPTION + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x0, 1200 + END +END diff --git a/wpcap/PRJ/wpcap.vcproj b/wpcap/PRJ/wpcap.vcproj new file mode 100644 index 00000000..66772c5c --- /dev/null +++ b/wpcap/PRJ/wpcap.vcproj @@ -0,0 +1,182 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 931cdb8fb2298e889bcfb01b93bcca4efaeee3de Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 30 Nov 2005 22:09:25 +0000 Subject: [PATCH 086/316] Added a new source file containing pcap_start_oem() (used by WinPcap OEM only). --- wpcap/pcap_oem.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 wpcap/pcap_oem.c diff --git a/wpcap/pcap_oem.c b/wpcap/pcap_oem.c new file mode 100644 index 00000000..b7ef80dd --- /dev/null +++ b/wpcap/pcap_oem.c @@ -0,0 +1,26 @@ +#include + +/*! + \name OEM-specific Functions +*/ +//\{ + +/*! + \ingroup wpcapfunc + \brief This function starts WinPcap OEM. + + \param err_str pointer to a user-allocated buffer (of minimum size PCAP_ERRBUF_SIZE) + that will contain the error message in case of failure. + \param flags Reserved. It should be set to 0. + + \return 0 on success, -1 in case of failure. +*/ +int pcap_start_oem(char* err_str, int flags) +{ + if(PacketStartOem(err_str, PCAP_ERRBUF_SIZE) == FALSE) + { + return -1; + } + return 0; +} +//\} From 615926b35899b21042d2a9fec905419c583206de Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 30 Nov 2005 22:10:30 +0000 Subject: [PATCH 087/316] Added a preliminary doxygen project for WinPcap OEM. --- dox/cace_small.gif | Bin 0 -> 2285 bytes dox/footer.htm | 4 + dox/main.txt | 46 ++++++++ dox/prj/winpcap_oem_noc.dox | 205 ++++++++++++++++++++++++++++++++++++ 4 files changed, 255 insertions(+) create mode 100644 dox/cace_small.gif create mode 100644 dox/footer.htm create mode 100644 dox/main.txt create mode 100644 dox/prj/winpcap_oem_noc.dox diff --git a/dox/cace_small.gif b/dox/cace_small.gif new file mode 100644 index 0000000000000000000000000000000000000000..b5ee1db8141e60d5f10323c94c3174520ac099e7 GIT binary patch literal 2285 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 H7Z3nDnK^d% literal 0 HcmV?d00001 diff --git a/dox/footer.htm b/dox/footer.htm new file mode 100644 index 00000000..50f508cc --- /dev/null +++ b/dox/footer.htm @@ -0,0 +1,4 @@ + +
+

+Copyright (c) 2005 CACE Technologies. All rights reserved.

diff --git a/dox/main.txt b/dox/main.txt new file mode 100644 index 00000000..46a201b0 --- /dev/null +++ b/dox/main.txt @@ -0,0 +1,46 @@ +/*! + +\mainpage WinPcap OEM Documentation + +\image html winpcap.gif + +\htmlonly + + Copyright (C) 2005 CACE Technologies +
+ +

Modules

+ +\endhtmlonly + +- \ref wpcap + - \ref wpcap_def + - \ref wpcapfunc + - \ref language + - \ref wpcapsamps + - \ref wpcap_tut + - \ref wpcap_tut1 + - \ref wpcap_tut2 + - \ref wpcap_tut3 + - \ref wpcap_tut4 + - \ref wpcap_tut5 + - \ref wpcap_tut6 + - \ref wpcap_tut7 + - \ref wpcap_tut8 + - \ref wpcap_tut9 +- \ref internals + - \ref NPF + - \ref NPF_include + - \ref NPF_code + - \ref packetapi + - \ref compilation +- \ref remote + - \ref remote_struct + - Exported Functions. For a reference of the functions that support remote capture, see the "Windows-specific Extensions" in the WinPcap \ref wpcapfunc section. + - \ref remote_pri_struct + +\htmlinclude intro.htm + + +*/ + diff --git a/dox/prj/winpcap_oem_noc.dox b/dox/prj/winpcap_oem_noc.dox new file mode 100644 index 00000000..3fde0e24 --- /dev/null +++ b/dox/prj/winpcap_oem_noc.dox @@ -0,0 +1,205 @@ +# Doxyfile 1.2.13-20020210 + +#--------------------------------------------------------------------------- +# General configuration options +#--------------------------------------------------------------------------- +PROJECT_NAME = WinPcap OEM +PROJECT_NUMBER = 3.2.1.335 +OUTPUT_DIRECTORY = ./ +OUTPUT_LANGUAGE = English +EXTRACT_ALL = YES +EXTRACT_PRIVATE = YES +EXTRACT_STATIC = YES +EXTRACT_LOCAL_CLASSES = YES +HIDE_UNDOC_MEMBERS = YES +HIDE_UNDOC_CLASSES = YES +BRIEF_MEMBER_DESC = YES +REPEAT_BRIEF = YES +ALWAYS_DETAILED_SEC = NO +INLINE_INHERITED_MEMB = NO +FULL_PATH_NAMES = NO +STRIP_FROM_PATH = +INTERNAL_DOCS = YES +STRIP_CODE_COMMENTS = YES +CASE_SENSE_NAMES = YES +SHORT_NAMES = NO +HIDE_SCOPE_NAMES = YES +VERBATIM_HEADERS = YES +SHOW_INCLUDE_FILES = YES +JAVADOC_AUTOBRIEF = NO +INHERIT_DOCS = YES +INLINE_INFO = YES +SORT_MEMBER_DOCS = YES +DISTRIBUTE_GROUP_DOC = NO +TAB_SIZE = 4 +GENERATE_TODOLIST = YES +GENERATE_TESTLIST = YES +GENERATE_BUGLIST = YES +ALIASES = +ENABLED_SECTIONS = +MAX_INITIALIZER_LINES = 30 +OPTIMIZE_OUTPUT_FOR_C = YES +SHOW_USED_FILES = YES +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- +QUIET = NO +WARNINGS = YES +WARN_IF_UNDOCUMENTED = YES +WARN_FORMAT = +WARN_LOGFILE = +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- +INPUT = ../../../winpcap/packetNtx/driver/Packet.h \ + ../../../winpcap/packetNtx/driver/jitter.h \ + ../../../winpcap/dox/libpcap/incs/pcap.h \ + ../../../winpcap/dox/libpcap/funcs/pcap.h \ + ../../../winpcap/wpcap/Win32-Extensions/Win32-Extensions.h \ + ../main.txt \ + ../../../winpcap/dox/wpcap_tut.txt \ + ../../../winpcap/dox/wpcap_tut1.txt \ + ../../../winpcap/dox/wpcap_tut2.txt \ + ../../../winpcap/dox/wpcap_tut3.txt \ + ../../../winpcap/dox/wpcap_tut4.txt \ + ../../../winpcap/dox/wpcap_tut5.txt \ + ../../../winpcap/dox/wpcap_tut6.txt \ + ../../../winpcap/dox/wpcap_tut7.txt \ + ../../../winpcap/dox/wpcap_tut8.txt \ + ../../../winpcap/dox/wpcap_tut9.txt \ + ../../../winpcap/dox/doxygen_groups.txt \ + ../../../winpcap/dox/wpcap_remote.htm \ + ../../../winpcap/wpcap/libpcap/pcap-remote.h \ + ../../../winpcap/wpcap/libpcap/remote-ext.h \ + ../../../winpcap/wpcap/libpcap/rpcapd/fileconf.h \ + ../../../winpcap/wpcap/libpcap/rpcapd/utils.h \ + ../../../winpcap/wpcap/libpcap/rpcapd/daemon.h \ + ../../../winpcap/wpcap/libpcap/rpcapd/rpcapd.h \ + ../../../winpcap/wpcap/libpcap/rpcapd/win32-svc.h \ + ../../wpcap/pcap_oem.c +FILE_PATTERNS = *.cpp \ + *.c \ + *.h \ + *.txt \ + *.htm +RECURSIVE = YES +EXCLUDE = test +EXCLUDE_SYMLINKS = NO +EXCLUDE_PATTERNS = +EXAMPLE_PATH = ../../../Winpcap/Examples/ \ + ../../../WinPcap/dox +EXAMPLE_PATTERNS = +EXAMPLE_RECURSIVE = NO +IMAGE_PATH = ../../../Winpcap/dox/pics/ +INPUT_FILTER = +FILTER_SOURCE_FILES = NO +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- +SOURCE_BROWSER = YES +INLINE_SOURCES = NO +REFERENCED_BY_RELATION = YES +REFERENCES_RELATION = YES +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- +ALPHABETICAL_INDEX = NO +COLS_IN_ALPHA_INDEX = 5 +IGNORE_PREFIX = +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- +GENERATE_HTML = YES +HTML_OUTPUT = docs +HTML_FILE_EXTENSION = .html +HTML_HEADER = +HTML_FOOTER = ../footer.htm +HTML_STYLESHEET = ../../../Winpcap/dox/style.css +HTML_ALIGN_MEMBERS = YES +GENERATE_HTMLHELP = YES +GENERATE_CHI = NO +BINARY_TOC = YES +TOC_EXPAND = NO +DISABLE_INDEX = NO +ENUM_VALUES_PER_LINE = 4 +GENERATE_TREEVIEW = YES +TREEVIEW_WIDTH = 250 +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- +GENERATE_LATEX = NO +LATEX_OUTPUT = +COMPACT_LATEX = NO +PAPER_TYPE = a4wide +EXTRA_PACKAGES = +LATEX_HEADER = +PDF_HYPERLINKS = NO +USE_PDFLATEX = NO +LATEX_BATCHMODE = NO +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- +GENERATE_RTF = NO +RTF_OUTPUT = +COMPACT_RTF = NO +RTF_HYPERLINKS = NO +RTF_STYLESHEET_FILE = +RTF_EXTENSIONS_FILE = +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- +GENERATE_MAN = NO +MAN_OUTPUT = +MAN_EXTENSION = +MAN_LINKS = NO +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- +GENERATE_XML = NO +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- +GENERATE_AUTOGEN_DEF = NO +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- +ENABLE_PREPROCESSING = YES +MACRO_EXPANSION = NO +EXPAND_ONLY_PREDEF = NO +SEARCH_INCLUDES = YES +INCLUDE_PATH = +INCLUDE_FILE_PATTERNS = +PREDEFINED = WIN32 \ + _DEBUG_TO_FILE \ + EXPAND_AS_DEFINED \ + EXPAND_AS_DEFINED \ + = +EXPAND_AS_DEFINED = +SKIP_FUNCTION_MACROS = YES +#--------------------------------------------------------------------------- +# Configuration::addtions related to external references +#--------------------------------------------------------------------------- +TAGFILES = +GENERATE_TAGFILE = +ALLEXTERNALS = NO +EXTERNAL_GROUPS = YES +PERL_PATH = +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- +CLASS_DIAGRAMS = YES +HAVE_DOT = NO +CLASS_GRAPH = YES +COLLABORATION_GRAPH = YES +TEMPLATE_RELATIONS = YES +HIDE_UNDOC_RELATIONS = YES +INCLUDE_GRAPH = YES +INCLUDED_BY_GRAPH = YES +GRAPHICAL_HIERARCHY = YES +DOT_IMAGE_FORMAT = gif +DOT_PATH = +DOTFILE_DIRS = +MAX_DOT_GRAPH_WIDTH = 1024 +MAX_DOT_GRAPH_HEIGHT = 1024 +GENERATE_LEGEND = YES +DOT_CLEANUP = YES From c3d6cabae92264935a9aa94e27f7e8781795286f Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 30 Nov 2005 22:14:14 +0000 Subject: [PATCH 088/316] Added all the scripts to generate the WinPcap OEM deleveloper's pack and the TNT bin folder. --- build_tnt_bin.bat | 19 +++++++++++++++++++ build_wpdpack_oem.bat | 21 +++++++++++++++++++++ create_bin_oem.bat | 15 +++++++++++++++ create_docs_oem.bat | 28 ++++++++++++++++++++++++++++ create_examples_oem.bat | 30 ++++++++++++++++++++++++++++++ create_include_oem.bat | 37 +++++++++++++++++++++++++++++++++++++ create_lib_oem.bat | 15 +++++++++++++++ 7 files changed, 165 insertions(+) create mode 100644 build_tnt_bin.bat create mode 100755 build_wpdpack_oem.bat create mode 100755 create_bin_oem.bat create mode 100755 create_docs_oem.bat create mode 100755 create_examples_oem.bat create mode 100755 create_include_oem.bat create mode 100755 create_lib_oem.bat diff --git a/build_tnt_bin.bat b/build_tnt_bin.bat new file mode 100644 index 00000000..08615f31 --- /dev/null +++ b/build_tnt_bin.bat @@ -0,0 +1,19 @@ +@echo off + +if "%1"=="" (set __DEST_FOLDER=.\TntBin) ELSE (set __DEST_FOLDER=%1) + +echo ****************************************************************** +echo The bin folder for The Network Toolkit will be created in folder +echo %__DEST_FOLDER% +echo ****************************************************************** +pause + +echo Creating %__DEST_FOLDER% folder +mkdir %__DEST_FOLDER% >nul 2>nul + +xcopy /v /Y .\wpcap\PRJ\Release_REMOTE\wpcap.dll %__DEST_FOLDER%\ +xcopy /v /Y .\OEM\WinPcapOEM\release_security\packet.dll %__DEST_FOLDER%\ + +echo Folder %__DEST_FOLDER% created successfully + +set __DEST_FOLDER= diff --git a/build_wpdpack_oem.bat b/build_wpdpack_oem.bat new file mode 100755 index 00000000..87bd2e9e --- /dev/null +++ b/build_wpdpack_oem.bat @@ -0,0 +1,21 @@ +@echo off + +if "%1"=="" (set __DEST_FOLDER=.\WpdPack\ ) ELSE (set __DEST_FOLDER=%1) + +echo ************************************************ +echo The developer's pack will be created in folder +echo %__DEST_FOLDER% +echo ************************************************ +pause + +call create_include_oem.bat ..\winpcap\ %__DEST_FOLDER% +PAUSE +call create_lib_oem.bat %__DEST_FOLDER% +PAUSE +call create_bin_oem.bat %__DEST_FOLDER% +PAUSE +call create_examples_oem.bat ..\winpcap\ %__DEST_FOLDER% +PAUSE +call create_docs_oem.bat %__DEST_FOLDER% + +set __DEST_FOLDER= diff --git a/create_bin_oem.bat b/create_bin_oem.bat new file mode 100755 index 00000000..bef8f29b --- /dev/null +++ b/create_bin_oem.bat @@ -0,0 +1,15 @@ +@echo off + +IF "%1"=="" (set WPDPACKDESTDIR=.\WpdPack\) ELSE (set WPDPACKDESTDIR=%1) + +echo Creating \bin folder +mkdir %WPDPACKDESTDIR% >nul 2>nul +mkdir %WPDPACKDESTDIR%\bin >nul 2>nul + +xcopy /v /Y .\wpcap\PRJ\Release_REMOTE\wpcap.dll %WPDPACKDESTDIR%\bin\ +xcopy /v /Y .\OEM\WinPcapOEM\release\packet.dll %WPDPACKDESTDIR%\bin\ + +echo Folder \bin created successfully + +set WPDPACKDESTDIR= + diff --git a/create_docs_oem.bat b/create_docs_oem.bat new file mode 100755 index 00000000..56092aca --- /dev/null +++ b/create_docs_oem.bat @@ -0,0 +1,28 @@ +@echo off + +IF "%1"=="" (set WPDPACKDESTDIR=.\WpdPack\) ELSE (set WPDPACKDESTDIR=%1) + +echo Creating \docs folder +mkdir %WPDPACKDESTDIR% >nul 2>nul +mkdir %WPDPACKDESTDIR%\docs >nul 2>nul +mkdir %WPDPACKDESTDIR%\docs\html >nul 2>nul + +pushd dox\prj\ + +@echo #### Deleting existing WinPcap documentation +del /q docs\*.* +@echo #### Creating new documentation +doxygen winpcap_oem_noc.dox +@echo #### Copying all gif files +copy ..\pics\*.gif docs\. /v /y /q +copy ..\*.gif docs\. /v /y /q + +popd + +xcopy /v /Y .\dox\WinPcap_docs.html %WPDPACKDESTDIR%\docs\ +xcopy /v /Y .\dox\prj\docs\*.* %WPDPACKDESTDIR%\docs\html\ +xcopy /v /Y .\dox\*.gif %WPDPACKDESTDIR%\docs\html\ +xcopy /v /Y .\dox\pics\*.gif %WPDPACKDESTDIR%\docs\html\ +echo Folder \docs created successfully +set WPDPACKDESTDIR= +set WINPCAPSOURCEDIR= diff --git a/create_examples_oem.bat b/create_examples_oem.bat new file mode 100755 index 00000000..32601f1e --- /dev/null +++ b/create_examples_oem.bat @@ -0,0 +1,30 @@ +@echo off + +IF "%2"=="" (set WPDPACKDESTDIR=.\WpdPack\) ELSE (set WPDPACKDESTDIR=%2) + +IF ""=="%1" (set WINPCAPSOURCEDIR=.\) ELSE (set WINPCAPSOURCEDIR=%1) + +echo Creating \Examples folder +mkdir %WPDPACKDESTDIR% >nul 2>nul +mkdir %WPDPACKDESTDIR%\Examples-pcap >nul 2>nul +mkdir %WPDPACKDESTDIR%\Examples-remote >nul 2>nul + +xcopy /s/e/v /Y %WINPCAPSOURCEDIR%\Examples %WPDPACKDESTDIR%\Examples-remote + +rem *** Delete Netmeter since it's no more part of the Developer's pack *** +rd /S /Q %WPDPACKDESTDIR%\Examples-remote\NetMeter\ + +rem *** Delete kdump since the feature is not available at the moment *** +rd /S /Q %WPDPACKDESTDIR%\Examples-remote\kdump\ + +xcopy /s/e/v /Y %WINPCAPSOURCEDIR%\Examples-pcap %WPDPACKDESTDIR%\Examples-pcap + +echo Folder \Examples created successfully +set WPDPACKDESTDIR= +set WINPCAPSOURCEDIR= + +echo ******************************************************************** +echo * * +echo * Now you can build the examples from the developers' pack folder! * +echo * * +echo ******************************************************************** diff --git a/create_include_oem.bat b/create_include_oem.bat new file mode 100755 index 00000000..6525e080 --- /dev/null +++ b/create_include_oem.bat @@ -0,0 +1,37 @@ +@echo off + +IF "%2"=="" (set WPDPACKDESTDIR=.\WpdPack\) ELSE (set WPDPACKDESTDIR=%2) + +IF ""=="%1" (set WINPCAPSOURCEDIR=.\) ELSE (set WINPCAPSOURCEDIR=%1) + +echo Creating \Include folder +mkdir %WPDPACKDESTDIR% 2>nul >nul +mkdir %WPDPACKDESTDIR%\Include 2>nul >nul + +xcopy /v /Y %WINPCAPSOURCEDIR%\wpcap\libpcap\Win32\Include\bittypes.h %WPDPACKDESTDIR%\Include\ +xcopy /v /Y %WINPCAPSOURCEDIR%\wpcap\libpcap\Win32\Include\Gnuc.h %WPDPACKDESTDIR%\Include\ +xcopy /v /Y %WINPCAPSOURCEDIR%\wpcap\libpcap\Win32\Include\ip6_misc.h %WPDPACKDESTDIR%\Include\ +xcopy /v /Y %WINPCAPSOURCEDIR%\wpcap\libpcap\rpcapd\win32-pthreads\pthread.h %WPDPACKDESTDIR%\Include\ +xcopy /v /Y %WINPCAPSOURCEDIR%\wpcap\libpcap\rpcapd\win32-pthreads\sched.h %WPDPACKDESTDIR%\Include\ +xcopy /v /Y %WINPCAPSOURCEDIR%\wpcap\libpcap\rpcapd\win32-pthreads\semaphore.h %WPDPACKDESTDIR%\Include\ +xcopy /v /Y %WINPCAPSOURCEDIR%\wpcap\libpcap\PCAP-INT.H %WPDPACKDESTDIR%\Include\ +xcopy /v /Y %WINPCAPSOURCEDIR%\wpcap\libpcap\pcap-bpf.h %WPDPACKDESTDIR%\Include\ +xcopy /v /Y %WINPCAPSOURCEDIR%\wpcap\libpcap\pcap-stdinc.h %WPDPACKDESTDIR%\Include\ +xcopy /v /Y %WINPCAPSOURCEDIR%\wpcap\libpcap\PCAP.H %WPDPACKDESTDIR%\Include\ +xcopy /v /Y %WINPCAPSOURCEDIR%\wpcap\libpcap\remote-ext.h %WPDPACKDESTDIR%\Include\ +xcopy /v /Y %WINPCAPSOURCEDIR%\wpcap\Win32-Extensions\Win32-Extensions.h %WPDPACKDESTDIR%\Include\ +xcopy /v /Y %WINPCAPSOURCEDIR%\packetNtx\driver\bucket_lookup.h %WPDPACKDESTDIR%\Include\ +xcopy /v /Y %WINPCAPSOURCEDIR%\packetNtx\driver\count_packets.h %WPDPACKDESTDIR%\Include\ +xcopy /v /Y %WINPCAPSOURCEDIR%\packetNtx\driver\memory_t.h %WPDPACKDESTDIR%\Include\ +xcopy /v /Y %WINPCAPSOURCEDIR%\packetNtx\driver\normal_lookup.h %WPDPACKDESTDIR%\Include\ +xcopy /v /Y %WINPCAPSOURCEDIR%\packetNtx\driver\tcp_session.h %WPDPACKDESTDIR%\Include\ +xcopy /v /Y %WINPCAPSOURCEDIR%\packetNtx\driver\time_calls.h %WPDPACKDESTDIR%\Include\ +xcopy /v /Y %WINPCAPSOURCEDIR%\packetNtx\driver\tme.h %WPDPACKDESTDIR%\Include\ +xcopy /v /Y %WINPCAPSOURCEDIR%\Common\Packet32.h %WPDPACKDESTDIR%\Include\ +xcopy /v /Y %WINPCAPSOURCEDIR%\Common\Devioctl.h %WPDPACKDESTDIR%\Include\ +xcopy /v /Y %WINPCAPSOURCEDIR%\Common\Ntddndis.h %WPDPACKDESTDIR%\Include\ +xcopy /v /Y %WINPCAPSOURCEDIR%\Common\Ntddpack.h %WPDPACKDESTDIR%\Include\ + +echo Folder \Include created successfully +set WPDPACKDESTDIR= +set WINPCAPSOURCEDIR= diff --git a/create_lib_oem.bat b/create_lib_oem.bat new file mode 100755 index 00000000..944786d0 --- /dev/null +++ b/create_lib_oem.bat @@ -0,0 +1,15 @@ +@echo off + +IF "%1"=="" (set WPDPACKDESTDIR=.\WpdPack\) ELSE (set WPDPACKDESTDIR=%1) + +echo Creating \Lib folder +mkdir %WPDPACKDESTDIR% >nul 2>nul +mkdir %WPDPACKDESTDIR%\Lib >nul 2>nul + +xcopy /v /Y .\wpcap\PRJ\Release_REMOTE\wpcap.lib %WPDPACKDESTDIR%\Lib\ +xcopy /v /Y .\OEM\WinPcapOEM\release\packet.lib %WPDPACKDESTDIR%\Lib\ + +echo Folder \Lib created successfully + +set WPDPACKDESTDIR= + From fb80efe0067a3c419aec0acfd5cbd973dcf7a936 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 30 Nov 2005 22:14:49 +0000 Subject: [PATCH 089/316] Added wpcap.dll to the master solution file. --- WinPcap OEM.sln | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/WinPcap OEM.sln b/WinPcap OEM.sln index cb5d3b75..e05f6f90 100644 --- a/WinPcap OEM.sln +++ b/WinPcap OEM.sln @@ -17,6 +17,10 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WinpcapOem", "OEM\WinpcapOe {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D} = {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D} EndProjectSection EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wpcap", "wpcap\PRJ\wpcap.vcproj", "{CAEF56E3-4959-4C10-81F5-06C8E86C301E}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject Global GlobalSection(SolutionConfiguration) = preSolution Debug = Debug @@ -53,6 +57,14 @@ Global {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release.Build.0 = Release|Win32 {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release_Security.ActiveCfg = Release_Security|Win32 {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release_Security.Build.0 = Release_Security|Win32 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Debug.ActiveCfg = Debug REMOTE|Win32 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Debug.Build.0 = Debug REMOTE|Win32 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Debug_Security.ActiveCfg = Debug REMOTE|Win32 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Debug_Security.Build.0 = Debug REMOTE|Win32 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release.ActiveCfg = Release REMOTE|Win32 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release.Build.0 = Release REMOTE|Win32 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release_Security.ActiveCfg = Release REMOTE|Win32 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release_Security.Build.0 = Release REMOTE|Win32 EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution EndGlobalSection From 551b145608de4c04924880ed7c14ce7ad3090a3f Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 30 Nov 2005 22:47:01 +0000 Subject: [PATCH 090/316] Added some garbage zeroes in the tools.bin fake file, to make the resource compiler happy. --- OEM/WinpcapOem/binaries/tools.bin | Bin 0 -> 16 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/OEM/WinpcapOem/binaries/tools.bin b/OEM/WinpcapOem/binaries/tools.bin index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..01d633b27e8ea9b17084fc911d0c8cc43a4170a9 100644 GIT binary patch literal 16 KcmZQzKm`B*5C8!H literal 0 HcmV?d00001 From 779a717cc0f58a0271d934c68ce8b5962dbc83e3 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 30 Nov 2005 22:47:15 +0000 Subject: [PATCH 091/316] Renamed the XXX_Security configurations to XXX_TNT (since this is the build for The Network Toolkit). --- OEM/WinpcapOem/WinpcapOem.vcproj | 71 +++++++++++++++++--------------- WinPcap OEM.sln | 40 +++++++++--------- build_tnt_bin.bat | 2 +- 3 files changed, 58 insertions(+), 55 deletions(-) diff --git a/OEM/WinpcapOem/WinpcapOem.vcproj b/OEM/WinpcapOem/WinpcapOem.vcproj index a97659d9..1be76232 100644 --- a/OEM/WinpcapOem/WinpcapOem.vcproj +++ b/OEM/WinpcapOem/WinpcapOem.vcproj @@ -81,9 +81,9 @@ Name="VCAuxiliaryManagedWrapperGeneratorTool"/> + Name="Debug_TNT|Win32"> + Name="Release_TNT|Win32"> + Name="Debug_TNT|Win32"> + Name="Release_TNT|Win32"> + Name="Debug_TNT|Win32"> + Name="Release_TNT|Win32"> + Name="Debug_TNT|Win32"> + Name="Release_TNT|Win32"> + Name="Debug_TNT|Win32"> + Name="Release_TNT|Win32"> + Name="Debug_TNT|Win32"> + Name="Release_TNT|Win32"> + + diff --git a/WinPcap OEM.sln b/WinPcap OEM.sln index e05f6f90..ecda398f 100644 --- a/WinPcap OEM.sln +++ b/WinPcap OEM.sln @@ -24,47 +24,47 @@ EndProject Global GlobalSection(SolutionConfiguration) = preSolution Debug = Debug - Debug_Security = Debug_Security + Debug_TNT = Debug_TNT Release = Release - Release_Security = Release_Security + Release_TNT = Release_TNT EndGlobalSection GlobalSection(ProjectConfiguration) = postSolution {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Debug.ActiveCfg = Debug|Win32 {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Debug.Build.0 = Debug|Win32 - {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Debug_Security.ActiveCfg = Debug|Win32 - {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Debug_Security.Build.0 = Debug|Win32 + {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Debug_TNT.ActiveCfg = Debug|Win32 + {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Debug_TNT.Build.0 = Debug|Win32 {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release.ActiveCfg = Release|Win32 {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release.Build.0 = Release|Win32 - {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release_Security.ActiveCfg = Release|Win32 - {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release_Security.Build.0 = Release|Win32 + {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release_TNT.ActiveCfg = Release|Win32 + {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release_TNT.Build.0 = Release|Win32 {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Debug.ActiveCfg = Debug|Win32 {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Debug.Build.0 = Debug|Win32 - {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Debug_Security.ActiveCfg = Debug|Win32 - {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Debug_Security.Build.0 = Debug|Win32 + {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Debug_TNT.ActiveCfg = Debug|Win32 + {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Debug_TNT.Build.0 = Debug|Win32 {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release.ActiveCfg = Release|Win32 {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release.Build.0 = Release|Win32 - {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release_Security.ActiveCfg = Release|Win32 - {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release_Security.Build.0 = Release|Win32 + {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release_TNT.ActiveCfg = Release|Win32 + {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release_TNT.Build.0 = Release|Win32 {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Debug.ActiveCfg = Debug|Win32 - {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Debug_Security.ActiveCfg = Debug|Win32 + {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Debug_TNT.ActiveCfg = Debug|Win32 {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Release.ActiveCfg = Release|Win32 - {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Release_Security.ActiveCfg = Release|Win32 + {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Release_TNT.ActiveCfg = Release|Win32 {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Debug.ActiveCfg = Debug|Win32 {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Debug.Build.0 = Debug|Win32 - {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Debug_Security.ActiveCfg = Debug_Security|Win32 - {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Debug_Security.Build.0 = Debug_Security|Win32 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Debug_TNT.ActiveCfg = Debug_TNT|Win32 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Debug_TNT.Build.0 = Debug_TNT|Win32 {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release.ActiveCfg = Release|Win32 {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release.Build.0 = Release|Win32 - {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release_Security.ActiveCfg = Release_Security|Win32 - {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release_Security.Build.0 = Release_Security|Win32 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release_TNT.ActiveCfg = Release_TNT|Win32 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release_TNT.Build.0 = Release_TNT|Win32 {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Debug.ActiveCfg = Debug REMOTE|Win32 {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Debug.Build.0 = Debug REMOTE|Win32 - {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Debug_Security.ActiveCfg = Debug REMOTE|Win32 - {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Debug_Security.Build.0 = Debug REMOTE|Win32 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Debug_TNT.ActiveCfg = Debug REMOTE|Win32 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Debug_TNT.Build.0 = Debug REMOTE|Win32 {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release.ActiveCfg = Release REMOTE|Win32 {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release.Build.0 = Release REMOTE|Win32 - {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release_Security.ActiveCfg = Release REMOTE|Win32 - {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release_Security.Build.0 = Release REMOTE|Win32 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release_TNT.ActiveCfg = Release REMOTE|Win32 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release_TNT.Build.0 = Release REMOTE|Win32 EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution EndGlobalSection diff --git a/build_tnt_bin.bat b/build_tnt_bin.bat index 08615f31..c79d38e3 100644 --- a/build_tnt_bin.bat +++ b/build_tnt_bin.bat @@ -12,7 +12,7 @@ echo Creating %__DEST_FOLDER% folder mkdir %__DEST_FOLDER% >nul 2>nul xcopy /v /Y .\wpcap\PRJ\Release_REMOTE\wpcap.dll %__DEST_FOLDER%\ -xcopy /v /Y .\OEM\WinPcapOEM\release_security\packet.dll %__DEST_FOLDER%\ +xcopy /v /Y .\OEM\WinPcapOEM\release_TNT\packet.dll %__DEST_FOLDER%\ echo Folder %__DEST_FOLDER% created successfully From d93c487c388af7084bfdedfb845aa59bfcd2beb3 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 30 Nov 2005 23:24:42 +0000 Subject: [PATCH 092/316] Fixed some wrong lib paths. Enabled /GS in the debug build as well. --- wpcap/PRJ/wpcap.vcproj | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/wpcap/PRJ/wpcap.vcproj b/wpcap/PRJ/wpcap.vcproj index 66772c5c..e24b8453 100644 --- a/wpcap/PRJ/wpcap.vcproj +++ b/wpcap/PRJ/wpcap.vcproj @@ -41,7 +41,7 @@ Date: Wed, 30 Nov 2005 23:26:52 +0000 Subject: [PATCH 093/316] Fixed an error string (if we can retrieve the version string, PacketGetVersion will return "", rather than an error message in the version string!). --- OEM/WinpcapOem/PacketWrapper.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/OEM/WinpcapOem/PacketWrapper.cpp b/OEM/WinpcapOem/PacketWrapper.cpp index 5214ee4c..05a8deb5 100644 --- a/OEM/WinpcapOem/PacketWrapper.cpp +++ b/OEM/WinpcapOem/PacketWrapper.cpp @@ -93,7 +93,7 @@ PCHAR PacketGetVersion() // if(!WoemInitialize(g_DllHandle)) { - returnValue = "failed to load packet.dll"; + returnValue = ""; } else { @@ -115,7 +115,7 @@ PCHAR PacketGetDriverVersion() // if(!WoemInitialize(g_DllHandle)) { - returnValue = "failed to load packet.dll"; + returnValue = ""; } else { From e0cdc939bafe29abfcd642e0f7379a8347738f1a Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Fri, 2 Dec 2005 16:27:08 +0000 Subject: [PATCH 094/316] Disabled the creation/deletion of registry keys for the customization of WinPcap names. --- OEM/WinpcapOem/WinPcapOem.cpp | 71 ++++++++++++++++++++++------------- OEM/WinpcapOem/WinpcapOem.h | 4 +- 2 files changed, 47 insertions(+), 28 deletions(-) diff --git a/OEM/WinpcapOem/WinPcapOem.cpp b/OEM/WinpcapOem/WinPcapOem.cpp index e523e220..46f471cd 100644 --- a/OEM/WinpcapOem/WinPcapOem.cpp +++ b/OEM/WinpcapOem/WinPcapOem.cpp @@ -421,30 +421,33 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) return FALSE; } - // - // Create the WinPcap global registry key - // - if(!WoemCreateNameRegistryEntries()) - { - WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Unable to create registry entries. Administrator provileges are required for this operation"); - - ReleaseMutex(g_hGlobalMutex); - - if(g_hGlobalMutex!=0) - { - CloseHandle(g_hGlobalMutex); - g_hGlobalMutex = NULL; - - } - if (g_hGlobalSemaphore!=0) - { - CloseHandle(g_hGlobalSemaphore); - g_hGlobalSemaphore = NULL; - } - - TRACE_EXIT("WoemEnterDllInternal"); - return FALSE; - } +// +// Old registry based WinPcap names +// +// // +// // Create the WinPcap global registry key +// // +// if(!WoemCreateNameRegistryEntries()) +// { +// WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Unable to create registry entries. Administrator provileges are required for this operation"); +// +// ReleaseMutex(g_hGlobalMutex); +// +// if(g_hGlobalMutex!=0) +// { +// CloseHandle(g_hGlobalMutex); +// g_hGlobalMutex = NULL; +// +// } +// if (g_hGlobalSemaphore!=0) +// { +// CloseHandle(g_hGlobalSemaphore); +// g_hGlobalSemaphore = NULL; +// } +// +// TRACE_EXIT("WoemEnterDllInternal"); +// return FALSE; +// } if(!WoemCreateBinaryNames()) { @@ -958,7 +961,10 @@ BOOL WoemLeaveDll() // delete_service(NPF_DRIVER_NAME); - WoemDeleteNameRegistryEntries(); +// +// Old registry based WinPcap names +// +// WoemDeleteNameRegistryEntries(); break; @@ -1026,6 +1032,11 @@ BOOL WoemLeaveDll() return TRUE; } +#if 0 +// +// Old registry based WinPcap names +// + //////////////////////////////////////////////////////////////////// // Create the temporary registry key with the name that all the // WinPcap components will use @@ -1226,6 +1237,7 @@ BOOL WoemCreateNameRegistryEntries() return TRUE; } +#endif //////////////////////////////////////////////////////////////////// // Create the binaries names according to the name we have @@ -1275,6 +1287,11 @@ BOOL WoemCreateBinaryNames() return TRUE; } +#if 0 +// +// Old registry based WinPcap names +// + //////////////////////////////////////////////////////////////////// // Delete the temporary registry key with the name that all the // WinPcap components will use @@ -1285,4 +1302,6 @@ BOOL WoemDeleteNameRegistryEntries() return FALSE; else return TRUE; -} \ No newline at end of file +} + +#endif diff --git a/OEM/WinpcapOem/WinpcapOem.h b/OEM/WinpcapOem/WinpcapOem.h index f5490e42..d165c549 100644 --- a/OEM/WinpcapOem/WinpcapOem.h +++ b/OEM/WinpcapOem/WinpcapOem.h @@ -56,8 +56,8 @@ BOOL WoemGetResource(HINSTANCE hInst, int ResID, LPVOID * lpResMem, LPDWORD dwRe //////////////////////////////////////////////////////////////////// // Registry and names-related functions //////////////////////////////////////////////////////////////////// -BOOL WoemCreateNameRegistryEntries(); -BOOL WoemDeleteNameRegistryEntries(); +//BOOL WoemCreateNameRegistryEntries(); +//BOOL WoemDeleteNameRegistryEntries(); BOOL WoemCreateBinaryNames(); //////////////////////////////////////////////////////////////////// From 4ea64dae8f57f08d15d5f82e8240d5b57e4e6a62 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Fri, 2 Dec 2005 18:29:40 +0000 Subject: [PATCH 095/316] Updated version info to 3.2.1.337.tnt --- version.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/version.h b/version.h index 7d282486..a0c12dde 100644 --- a/version.h +++ b/version.h @@ -15,9 +15,9 @@ #define WINPCAPOEM_MAJOR 3 #define WINPCAPOEM_MINOR 2 #define WINPCAPOEM_REV 1 -#define WINPCAPOEM_BUILD 335 +#define WINPCAPOEM_BUILD 337 -#define WINPCAPOEM_VER_STRING "3.2.1.335.tnt" +#define WINPCAPOEM_VER_STRING "3.2.1.337.tnt" #define WINPCAPOEM_COMPANY_NAME "CACE Technologies" @@ -27,5 +27,5 @@ #define WINPCAPOEM_COPYRIGHT_STRING "Copyright © 2005 CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_FILENAME "Packet.dll (wrapper)" #define WINPCAPOEM_BUILD_DESCRIPTION "" -#define WINPCAPOEM_PRIVATE_BUILD "Test Versioning BUILD" +#define WINPCAPOEM_PRIVATE_BUILD "" #define WINPCAPOEM_LIBPCAP_VERSION "0.9.3" From d1dcbb1ba7ebd69000004e62ab768d26eed32c36 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Fri, 2 Dec 2005 18:52:36 +0000 Subject: [PATCH 096/316] Updated version info to 3.2.1.337. --- dox/prj/winpcap_oem_noc.dox | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dox/prj/winpcap_oem_noc.dox b/dox/prj/winpcap_oem_noc.dox index 3fde0e24..ca724229 100644 --- a/dox/prj/winpcap_oem_noc.dox +++ b/dox/prj/winpcap_oem_noc.dox @@ -4,7 +4,7 @@ # General configuration options #--------------------------------------------------------------------------- PROJECT_NAME = WinPcap OEM -PROJECT_NUMBER = 3.2.1.335 +PROJECT_NUMBER = 3.2.1.337 OUTPUT_DIRECTORY = ./ OUTPUT_LANGUAGE = English EXTRACT_ALL = YES From 6f8e08c817ca79a7e5a4b9c1b2394879b399714d Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Fri, 2 Dec 2005 18:52:48 +0000 Subject: [PATCH 097/316] Updated version info to 3.2.1.337.woem. --- version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.h b/version.h index a0c12dde..7bc5e0b5 100644 --- a/version.h +++ b/version.h @@ -17,7 +17,7 @@ #define WINPCAPOEM_REV 1 #define WINPCAPOEM_BUILD 337 -#define WINPCAPOEM_VER_STRING "3.2.1.337.tnt" +#define WINPCAPOEM_VER_STRING "3.2.1.337.woem" #define WINPCAPOEM_COMPANY_NAME "CACE Technologies" From 551e35e69d4eac4346eecdf53c9de5f73340cad6 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Fri, 2 Dec 2005 18:52:56 +0000 Subject: [PATCH 098/316] Fixed a couple of copy commands. --- create_docs_oem.bat | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/create_docs_oem.bat b/create_docs_oem.bat index 56092aca..5d04ee10 100755 --- a/create_docs_oem.bat +++ b/create_docs_oem.bat @@ -19,10 +19,12 @@ copy ..\*.gif docs\. /v /y /q popd -xcopy /v /Y .\dox\WinPcap_docs.html %WPDPACKDESTDIR%\docs\ -xcopy /v /Y .\dox\prj\docs\*.* %WPDPACKDESTDIR%\docs\html\ -xcopy /v /Y .\dox\*.gif %WPDPACKDESTDIR%\docs\html\ -xcopy /v /Y .\dox\pics\*.gif %WPDPACKDESTDIR%\docs\html\ +xcopy /v /Y ..\winpcap\dox\WinPcap_docs.html %WPDPACKDESTDIR%\docs\ +xcopy /v /Y .\dox\prj\docs\*.* %WPDPACKDESTDIR%\docs\html\ +xcopy /v /Y .\dox\*.gif %WPDPACKDESTDIR%\docs\html\ +xcopy /v /Y ..\winpcap\dox\*.gif %WPDPACKDESTDIR%\docs\html\ +xcopy /v /Y ..\winpcap\dox\pics\*.gif %WPDPACKDESTDIR%\docs\html\ +xcopy /v /Y .\dox\pics\*.gif %WPDPACKDESTDIR%\docs\html\ echo Folder \docs created successfully set WPDPACKDESTDIR= set WINPCAPSOURCEDIR= From 39b80c75396630c5e7d1975d9965f8cb4f34af1e Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 11 Jan 2006 01:01:18 +0000 Subject: [PATCH 099/316] Added some quotes in the prebuild scripts to avoid problems with paths containing spaces. --- OEM/WinpcapOem/WinpcapOem.vcproj | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/OEM/WinpcapOem/WinpcapOem.vcproj b/OEM/WinpcapOem/WinpcapOem.vcproj index 1be76232..c16db4dd 100644 --- a/OEM/WinpcapOem/WinpcapOem.vcproj +++ b/OEM/WinpcapOem/WinpcapOem.vcproj @@ -62,7 +62,7 @@ CommandLine="postbuild_release.bat"/> + CommandLine=""$(ProjectDir)\prebuild_release.bat""/>
+ RelativePath="Packet2k.dll"> + RelativePath="binaries\Packet2k.dll"> From 81b569169cbdb93589692694d35165f1373d50eb Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 11 Jan 2006 01:01:53 +0000 Subject: [PATCH 100/316] Updated the v 3.2.91.375 (for Ben Greear). --- version.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/version.h b/version.h index 7bc5e0b5..e855967f 100644 --- a/version.h +++ b/version.h @@ -9,15 +9,15 @@ // 0 May = 31 + 28 + 31 + 30 = 120 // 0 Jun = 31 + 28 + 31 + 30 + 31 = 151 // 0 Jul = 31 + 28 + 31 + 30 + 31 + 30 = 181 -// 0 Nov = 181 + (Jul) 31 + (Aug) 31 + (Sept)30 + (Oct)31 = 325 -// 0 Dec = 325 + 30 = 335 +// 0 Nov = 181 + (Jul) 31 + (Aug) 31 + (Sept)30 + (Oct)31 = 324 +// 0 Dec = 324 + 30 = 334 #define WINPCAPOEM_MAJOR 3 #define WINPCAPOEM_MINOR 2 -#define WINPCAPOEM_REV 1 -#define WINPCAPOEM_BUILD 337 +#define WINPCAPOEM_REV 91 +#define WINPCAPOEM_BUILD 375 -#define WINPCAPOEM_VER_STRING "3.2.1.337.woem" +#define WINPCAPOEM_VER_STRING "3.2.91.375.woem" #define WINPCAPOEM_COMPANY_NAME "CACE Technologies" @@ -26,6 +26,6 @@ #define WINPCAPOEM_PRODUCT_NAME "WinPcap OEM" #define WINPCAPOEM_COPYRIGHT_STRING "Copyright © 2005 CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_FILENAME "Packet.dll (wrapper)" -#define WINPCAPOEM_BUILD_DESCRIPTION "" +#define WINPCAPOEM_BUILD_DESCRIPTION "Private Build for Ben Greear" #define WINPCAPOEM_PRIVATE_BUILD "" #define WINPCAPOEM_LIBPCAP_VERSION "0.9.3" From 72c4bdd00a499699c7f0c4f91898973e23e2ffc3 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Fri, 13 Jan 2006 18:59:14 +0000 Subject: [PATCH 101/316] Updated the version number to 3.2.91.378 (for Leaf Networks, Jeff Capone). --- version.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/version.h b/version.h index e855967f..e58b1055 100644 --- a/version.h +++ b/version.h @@ -15,9 +15,9 @@ #define WINPCAPOEM_MAJOR 3 #define WINPCAPOEM_MINOR 2 #define WINPCAPOEM_REV 91 -#define WINPCAPOEM_BUILD 375 +#define WINPCAPOEM_BUILD 378 -#define WINPCAPOEM_VER_STRING "3.2.91.375.woem" +#define WINPCAPOEM_VER_STRING "3.2.91.378.woem" #define WINPCAPOEM_COMPANY_NAME "CACE Technologies" @@ -26,6 +26,6 @@ #define WINPCAPOEM_PRODUCT_NAME "WinPcap OEM" #define WINPCAPOEM_COPYRIGHT_STRING "Copyright © 2005 CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_FILENAME "Packet.dll (wrapper)" -#define WINPCAPOEM_BUILD_DESCRIPTION "Private Build for Ben Greear" +#define WINPCAPOEM_BUILD_DESCRIPTION "Private Build for Leaf Networks" #define WINPCAPOEM_PRIVATE_BUILD "" #define WINPCAPOEM_LIBPCAP_VERSION "0.9.3" From 7713bc2687cb826fa06d48be17beb80d70123b00 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Thu, 26 Jan 2006 17:09:16 +0000 Subject: [PATCH 102/316] Updated some strings. --- version.h | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/version.h b/version.h index e58b1055..8c95f64f 100644 --- a/version.h +++ b/version.h @@ -14,18 +14,18 @@ #define WINPCAPOEM_MAJOR 3 #define WINPCAPOEM_MINOR 2 -#define WINPCAPOEM_REV 91 -#define WINPCAPOEM_BUILD 378 +#define WINPCAPOEM_REV 1 +#define WINPCAPOEM_BUILD 390 -#define WINPCAPOEM_VER_STRING "3.2.91.378.woem" +#define WINPCAPOEM_VER_STRING "3.2.1.390.tnt" #define WINPCAPOEM_COMPANY_NAME "CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_NAME "Packet.dll Wrapper" -#define WINPCAPOEM_VERSION_STRING "1" -#define WINPCAPOEM_PRODUCT_NAME "WinPcap OEM" -#define WINPCAPOEM_COPYRIGHT_STRING "Copyright © 2005 CACE Technologies" +#define WINPCAPOEM_VERSION_STRING "3.2.1.390.tnt" +#define WINPCAPOEM_PRODUCT_NAME "OEM WinPcap" +#define WINPCAPOEM_COPYRIGHT_STRING "Copyright © 2005-2006 CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_FILENAME "Packet.dll (wrapper)" -#define WINPCAPOEM_BUILD_DESCRIPTION "Private Build for Leaf Networks" +#define WINPCAPOEM_BUILD_DESCRIPTION "" #define WINPCAPOEM_PRIVATE_BUILD "" -#define WINPCAPOEM_LIBPCAP_VERSION "0.9.3" +#define WINPCAPOEM_LIBPCAP_VERSION "0.9.4" From 831b277ac49a24fecc4845a84b3de6111dd8d8fc Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Thu, 26 Jan 2006 19:48:02 +0000 Subject: [PATCH 103/316] Updated version info to 3.2.1.391.tnt --- version.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/version.h b/version.h index 8c95f64f..3b25fd63 100644 --- a/version.h +++ b/version.h @@ -15,14 +15,14 @@ #define WINPCAPOEM_MAJOR 3 #define WINPCAPOEM_MINOR 2 #define WINPCAPOEM_REV 1 -#define WINPCAPOEM_BUILD 390 +#define WINPCAPOEM_BUILD 391 -#define WINPCAPOEM_VER_STRING "3.2.1.390.tnt" +#define WINPCAPOEM_VER_STRING "3.2.1.391.tnt" #define WINPCAPOEM_COMPANY_NAME "CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_NAME "Packet.dll Wrapper" -#define WINPCAPOEM_VERSION_STRING "3.2.1.390.tnt" +#define WINPCAPOEM_VERSION_STRING "3.2.1.391.tnt" #define WINPCAPOEM_PRODUCT_NAME "OEM WinPcap" #define WINPCAPOEM_COPYRIGHT_STRING "Copyright © 2005-2006 CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_FILENAME "Packet.dll (wrapper)" From 6170b7ab07dfc700a736218115cf1bdf03d796bb Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Thu, 26 Jan 2006 21:05:25 +0000 Subject: [PATCH 104/316] Added a document explaining how to release OEM WinPcap for the Toolkit. --- release procedures TNT OEM.txt | 121 +++++++++++++++++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 release procedures TNT OEM.txt diff --git a/release procedures TNT OEM.txt b/release procedures TNT OEM.txt new file mode 100644 index 00000000..57bdf7d0 --- /dev/null +++ b/release procedures TNT OEM.txt @@ -0,0 +1,121 @@ +OEM WINPCAP TOOLKIT RELEASE PROCEDURE +===================================== + +Needed tools +------------ +- Visual Studio .NET 2003 +- Visual Studio 6 SP5 or SP6 +- A recent version of the Microsoft Platform Software Development Kit (SDK) that + is compatible with Visual Studio 6 (the latest compatible one is Platform SDK + February 2003). This version of the SDK is available on the Microsoft web site + at http://www.microsoft.com/msdownload/platformsdk/sdkupdate/psdk-full.htm. +- The cygnus environment on your path (needed to execute step 12 and 13). + + +How to compile OEM WinPcap for the toolkit. +------------------------------------------- + +1. Download winpcap (HEAD) and winpcap_oem from the CVS into %BUILD_TREE% + +2. Modify the version info into + %BUILD_TREE%\winpcap_oem\version.h. The version for the TNT is x.y.1.z + +3. Modify the device string into + %BUILD_TREE%\winpcap\common\wpcapnames.h (first two defines) + +4. Download the libpcap sources (usually 0_9 branch) into + %BUILD_TREE%\libpcap_ + +5. Commit %BUILD_TREE%\winpcap_oem\version.h into the CVS. This should be the + *only* modified file in this module. + +6. Tag the %BUILD_TREE%\winpcap_oem module with the tag + OEM_WINPCAP__TNT_ + +7. Tag the %BUILD_TREE%\winpcap module with the tag + OEM_WINPCAP__TNT_ + +8. Take the contents of %BUILD_TREE%\libpcap_ and copy it into + %BUILD_TREE%\winpcap\wpcap\libpcap + (confirm the overwrite operation) + +9. From the command line, go to folder + %BUILD_TREE%\winpcap\wpcap\libpcap + +10. On the command line, type "patch -p1 < remote_code.patch" + +11. CD into win32\Prj + +12. Type unix2dos * + +13. CD into %BUILD_TREE%\winpcap\wpcap\prj and execute + "build_scanner_parser.bat" + +14. Zip the contents of the three folders + %BUILD_TREE%\winpcap_oem + %BUILD_TREE%\winpcap + %BUILD_TREE%\libpcap_ + | + V + %BUILD_TREE%\sources.zip + +15. Open %BUILD_TREE%\winpcap\wpcap\libpcap\win32\prj\libpcap.dsw from Visual + Studio 6 and compile all the configurations using Build->Batch Build, + selecting all the configurations and then Rebuild All. Close Visual Studio. + NOTE. a lot of warnings related to the libpcap sources are usually raised. + +16. Open a Win 2000 DDK Free build environment. Go into + %BUILD_TREE%\winpcap_oem\packetntx. + Execute "compile2k_oem.bat". Prefast should issue 3 warnings (20060126). + Close the build environment. + +17. Open the WinNT4 DDK Release build environment. Go into + %BUILD_TREE%\winpcap_oem\packetntx. + Execute "compileNT4_oem.bat". An error "The system cannot find the file + specified" should be issued (20060126), it's normal. Close the build + environment. + NOTE: DO NOT EXECUTE 16. and 17. at the same time, they overwrite files in + the build process that are incompatible between the two builds. + +18. Open %BUILD_TREE%\winpcap_oem\WinPcap OEM.sln with Visual Studio 2003. + Choose the Debug_TNT configuration, and then use Build->Rebuild Solution. + NOTE: a linker warning (LNK4075: ignoring EDITANDCONTINUE...) should be + issued. + Choose the Release_TNT configuration, and then use Build->Rebuild Solution. + No warnings should be issued. + Close Visual Studio. + +19. The build is complete. + The DLLs are in the following folders: + + %BUILD_TREE%\winpcap_oem\wpcap\PRJ\release_REMOTE\wpcap.dll + %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\Release_TNT\packet.dll + +20. Check the DLLs/SYSs files for the versions + %BUILD_TREE%\winpcap_oem\wpcap\PRJ\release_REMOTE\wpcap.dll + %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\Release_TNT\packet.dll + %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\binaries\npf2k.sys + %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\binaries\npfnt.sys + %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\binaries\packet2k.sys + %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\binaries\packetnt.sys + + +SCM procedures +-------------- + +1. %BUILD_TREE%\winpcap_oem\wpcap\PRJ\release_REMOTE\wpcap.dll + %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\Release_TNT\packet.dll + | + v + OEM_WinPcap__TNT__Binaries.zip + +2. %BUILD_TREE%\Sources.zip + | + V + OEM_WinPcap__TNT__Sources.zip + +3. %BUILD_TREE%\ + | + V + OEM_WinPcap__TNT__Build_Tree.zip + \ No newline at end of file From 3dc7a58ef831a9fc8b23a9f6da544638f9dd3544 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Mon, 13 Feb 2006 00:57:56 +0000 Subject: [PATCH 105/316] Cleaned up the linking options. --- wpcap/PRJ/wpcap.vcproj | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/wpcap/PRJ/wpcap.vcproj b/wpcap/PRJ/wpcap.vcproj index e24b8453..9c7318c7 100644 --- a/wpcap/PRJ/wpcap.vcproj +++ b/wpcap/PRJ/wpcap.vcproj @@ -109,10 +109,9 @@ Name="VCCustomBuildTool"/> Date: Mon, 13 Feb 2006 01:09:34 +0000 Subject: [PATCH 106/316] Added all the libpcap files into the wpcap OEM project. --- wpcap/PRJ/wpcap.vcproj | 71 +++++++++++++++++++++++++++++++++++++++--- 1 file changed, 67 insertions(+), 4 deletions(-) diff --git a/wpcap/PRJ/wpcap.vcproj b/wpcap/PRJ/wpcap.vcproj index 9c7318c7..16e4a099 100644 --- a/wpcap/PRJ/wpcap.vcproj +++ b/wpcap/PRJ/wpcap.vcproj @@ -24,7 +24,7 @@ Optimization="2" InlineFunctionExpansion="1" AdditionalIncludeDirectories="../../../winpcap/wpcap/libpcap/,../../../winpcap/wpcap/libpcap/bpf,../../../winpcap/wpcap/libpcap/lbl,../../../winpcap/wpcap/libpcap/Win32/Include,../../../winpcap/common,../../../winpcap/wpcap/Win32-Extensions" - PreprocessorDefinitions="HAVE_ADDRINFO=1;YY_NEVER_INTERACTIVE;yylval=pcap_lval;_USRDLL;LIBPCAP_EXPORTS;HAVE_STRERROR;__STDC__;INET6;_WINDOWS;SIZEOF_CHAR=1;SIZEOF_SHORT=2;SIZEOF_INT=4;WPCAP;NDEBUG;HAVE_SNPRINTF;HAVE_VSNPRINTF;WIN32;HAVE_REMOTE" + PreprocessorDefinitions="HAVE_ADDRINFO=1;YY_NEVER_INTERACTIVE;yylval=pcap_lval;_USRDLL;LIBPCAP_EXPORTS;HAVE_STRERROR;__STDC__;INET6;_WINDOWS;SIZEOF_CHAR=1;SIZEOF_SHORT=2;SIZEOF_INT=4;WPCAP;NDEBUG;HAVE_SNPRINTF;HAVE_VSNPRINTF;WIN32;HAVE_REMOTE,_U_=" StringPooling="TRUE" RuntimeLibrary="0" EnableFunctionLevelLinking="TRUE" @@ -41,7 +41,7 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From fce14d24f09d295d2a73063d8fd4dda321716ad8 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Mon, 13 Feb 2006 01:10:01 +0000 Subject: [PATCH 107/316] Modification done by the IDE. --- WinPcap OEM.sln | 1 + 1 file changed, 1 insertion(+) diff --git a/WinPcap OEM.sln b/WinPcap OEM.sln index ecda398f..e607efc9 100644 --- a/WinPcap OEM.sln +++ b/WinPcap OEM.sln @@ -19,6 +19,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WinpcapOem", "OEM\WinpcapOe EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wpcap", "wpcap\PRJ\wpcap.vcproj", "{CAEF56E3-4959-4C10-81F5-06C8E86C301E}" ProjectSection(ProjectDependencies) = postProject + {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2} = {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2} EndProjectSection EndProject Global From 715ac29e36c19d266327a23788db93e4d7b505cc Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Mon, 13 Feb 2006 23:50:20 +0000 Subject: [PATCH 108/316] Moved the image to .\\pics --- dox/cace_small.gif | Bin 2285 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 dox/cace_small.gif diff --git a/dox/cace_small.gif b/dox/cace_small.gif deleted file mode 100644 index b5ee1db8141e60d5f10323c94c3174520ac099e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2285 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 H7Z3nDnK^d% From 96436c2d3749eaa6dcb54fa5b4f53cd1c785f95b Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Mon, 13 Feb 2006 23:51:02 +0000 Subject: [PATCH 109/316] Added the OEM and CACE logos. --- dox/pics/CACE_logo.jpg | Bin 0 -> 5867 bytes dox/pics/OEM_logo.jpg | Bin 0 -> 22633 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 dox/pics/CACE_logo.jpg create mode 100644 dox/pics/OEM_logo.jpg diff --git a/dox/pics/CACE_logo.jpg b/dox/pics/CACE_logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..625c70f1e57aef877a8daa4598f273da4b7ec744 GIT binary patch literal 5867 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 literal 0 HcmV?d00001 diff --git a/dox/pics/OEM_logo.jpg b/dox/pics/OEM_logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a98a4a683ba84d091a6af4fdbe63ff0bd5f888cf GIT binary patch literal 22633 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 AqW}N^ literal 0 HcmV?d00001 From 490d853193b43659d9215e6e1a9190b8f4850c0c Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Mon, 13 Feb 2006 23:51:53 +0000 Subject: [PATCH 110/316] Updated the header and footer to include the OEM logo plus some navigation links. --- dox/footer.htm | 9 ++++++--- dox/header.htm | 19 +++++++++++++++++++ 2 files changed, 25 insertions(+), 3 deletions(-) create mode 100644 dox/header.htm diff --git a/dox/footer.htm b/dox/footer.htm index 50f508cc..189999cb 100644 --- a/dox/footer.htm +++ b/dox/footer.htm @@ -1,4 +1,7 @@ - +
-

-Copyright (c) 2005 CACE Technologies. All rights reserved.

+

    +Copyright (c) 2005 - 2006 CACE Technologies. All rights reserved.

+ + + diff --git a/dox/header.htm b/dox/header.htm new file mode 100644 index 00000000..4acd4624 --- /dev/null +++ b/dox/header.htm @@ -0,0 +1,19 @@ + + +OEM WinPcap Documentation + + + + + + +
OEM_logo.jpg
+ + +
+ + + From b59845bb63e1a4b9d5349c9c2c1f2a1a72d8d905 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Mon, 13 Feb 2006 23:52:21 +0000 Subject: [PATCH 111/316] General cleanup of the main page. --- dox/main.txt | 23 +---------------------- 1 file changed, 1 insertion(+), 22 deletions(-) diff --git a/dox/main.txt b/dox/main.txt index 46a201b0..f984f133 100644 --- a/dox/main.txt +++ b/dox/main.txt @@ -1,17 +1,6 @@ /*! -\mainpage WinPcap OEM Documentation - -\image html winpcap.gif - -\htmlonly - - Copyright (C) 2005 CACE Technologies -
- -

Modules

- -\endhtmlonly + \mainpage Documentation - \ref wpcap - \ref wpcap_def @@ -28,16 +17,6 @@ - \ref wpcap_tut7 - \ref wpcap_tut8 - \ref wpcap_tut9 -- \ref internals - - \ref NPF - - \ref NPF_include - - \ref NPF_code - - \ref packetapi - - \ref compilation -- \ref remote - - \ref remote_struct - - Exported Functions. For a reference of the functions that support remote capture, see the "Windows-specific Extensions" in the WinPcap \ref wpcapfunc section. - - \ref remote_pri_struct \htmlinclude intro.htm From 1c061a7c116ac9a83d7212ebc55b3fd3644aced0 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Mon, 13 Feb 2006 23:54:11 +0000 Subject: [PATCH 112/316] Moved several doxygen related files here from the main WinPcap distribution, as they have been customized for OEM WinPcap. --- dox/doxygen_groups.txt | 89 ++++++++++++++++++++++++++ dox/intro.htm | 137 +++++++++++++++++++++++++++++++++++++++++ dox/wpcap_samp.htm | 83 +++++++++++++++++++++++++ dox/wpcap_samp1.htm | 21 +++++++ dox/wpcap_samp2.htm | 28 +++++++++ dox/wpcap_tut.txt | 17 +++++ dox/wpcap_tut1.txt | 83 +++++++++++++++++++++++++ dox/wpcap_tut2.txt | 21 +++++++ dox/wpcap_tut3.txt | 31 ++++++++++ dox/wpcap_tut4.txt | 27 ++++++++ dox/wpcap_tut5.txt | 50 +++++++++++++++ dox/wpcap_tut6.txt | 48 +++++++++++++++ dox/wpcap_tut7.txt | 67 ++++++++++++++++++++ dox/wpcap_tut8.txt | 59 ++++++++++++++++++ dox/wpcap_tut9.txt | 52 ++++++++++++++++ 15 files changed, 813 insertions(+) create mode 100644 dox/doxygen_groups.txt create mode 100644 dox/intro.htm create mode 100644 dox/wpcap_samp.htm create mode 100644 dox/wpcap_samp1.htm create mode 100644 dox/wpcap_samp2.htm create mode 100644 dox/wpcap_tut.txt create mode 100644 dox/wpcap_tut1.txt create mode 100644 dox/wpcap_tut2.txt create mode 100644 dox/wpcap_tut3.txt create mode 100644 dox/wpcap_tut4.txt create mode 100644 dox/wpcap_tut5.txt create mode 100644 dox/wpcap_tut6.txt create mode 100644 dox/wpcap_tut7.txt create mode 100644 dox/wpcap_tut8.txt create mode 100644 dox/wpcap_tut9.txt diff --git a/dox/doxygen_groups.txt b/dox/doxygen_groups.txt new file mode 100644 index 00000000..3bd67f54 --- /dev/null +++ b/dox/doxygen_groups.txt @@ -0,0 +1,89 @@ +/*! + \defgroup internals OEM WinPcap internals + \htmlinclude internals.htm +*/ + +/*! + \ingroup internals + \defgroup NPF NPF driver internals manual + \htmlinclude npf.htm +*/ + +/*! + \defgroup wpcap OEM WinPcap user's manual + \htmlinclude wpcap.htm +*/ + +/*! + \ingroup wpcap + \defgroup language Filtering expression syntax + \htmlinclude language.htm +*/ + + +/*! + \ingroup wpcap + \defgroup wpcapsamps Using OEM WinPcap in your programs + \htmlinclude wpcap_samp.htm + + \htmlinclude wpcap_samp1.htm + \include pktdump_ex\pktdump_ex.c + + \htmlinclude wpcap_samp2.htm + \include pcap_filter/pcap_filter.c +*/ + + + + + +/*! + \defgroup remote Remote Capture + \htmlinclude wpcap_remote.htm +*/ + +/*! + \ingroup remote + \defgroup remote_struct Exported Structures and Definitions +*/ + +/*! + \ingroup remote + \defgroup remotefunc Exported Functions +*/ + +/*! + \ingroup remote + \defgroup remote_pri_func Internal Functions +*/ + +/*! + \ingroup remote + \defgroup remote_pri_struct Internal Structures and Definitions +*/ + + +/*! + \ingroup remote_struct + \defgroup remote_source_string Strings related to the new source syntax +*/ + +/*! + \ingroup remote_struct + \defgroup remote_source_ID Identifiers related to the new source syntax +*/ + +/*! + \ingroup remote_struct + \defgroup remote_open_flags Flags defined in the pcap_open() function +*/ + +/*! + \ingroup remote_struct + \defgroup remote_samp_methods Sampling methods defined in the pcap_setsampling() function +*/ + +/*! + \ingroup remote_struct + \defgroup remote_auth_methods Authentication methods supported by the RPCAP protocol +*/ diff --git a/dox/intro.htm b/dox/intro.htm new file mode 100644 index 00000000..4feef22b --- /dev/null +++ b/dox/intro.htm @@ -0,0 +1,137 @@ + + + + + + + + + + +
+ +

Introduction

+ + +

This Manual describes the +programming interface OEM WinPcap. It provides detailed +descriptions of the functions and structures exported to programmers, along +with several tutorials and +examples.  + +

+

You can follow the links at the top of this page to reach sections of interest. + +

+

What is WinPcap

+

WinPcap is an open source library for packet capture and network analysis for +the Win32 platforms.

+

Most networking applications access the network through widely used operating +system primitives such as sockets.  It is easy to access data on the +network with this approach since the operating system copes with the low level +details (protocol handling, packet reassembly, etc.) and provides a familiar +interface that is similar to the one used to read and write files. + +

+

Sometimes, however, the 'easy way' is not up to the task, since some +applications require direct access to packets on the network.  That is, they +need access to the "raw" data on the network without the interposition of +protocol processing by the operating system.

+

The purpose of WinPcap is to give this kind of access to Win32 applications; +it provides facilities to:

+
    +
  • capture + raw packets, both the ones destined to the machine where it's running and + the ones exchanged by other hosts (on shared media)
  • +
  • filter + the packets according to user-specified rules before dispatching them to the + application
  • +
  • transmit raw packets to the network
  • +
  • gather statistical information on the network traffic
  • +
+

This set of capabilities is obtained by means of a device driver, that is +installed inside the networking portion of Win32 kernels, plus a couple of DLLs.

+

All these features are exported through a powerful programming interface, +easily exploitable by the applications and available on different OSes. The main +goal of this manual is to document this interface, with the help of several +examples.  If you are interested in starting your exploration right away +you can go directly to the WinPcap user's manual.

+

What is OEM WinPcap

+

OEM WinPcap is a customized version of WinPcap, +specifically tailored for companies needing to embed the WinPcap technology +inside their applications. Here are the main features of OEM WinPcap:

+
    +
  • no installation required.
  • +
  • easy to include in third party applications (you + just put the OEM WinPcap DLLs in the same folder of your application).
  • +
  • no conflicts with versions of WinPcap previously + installed on the target machine, since OEM WinPcap loads its own drivers.
  • +
  • loads the driver when the user starts your + application, unloads the driver when the user closes your application.
  • +
  • support for Windows NT4, Windows XP, Windows + Server 2003.
  • +
+ +

What kind of programs use WinPcap

+

The WinPcap programming interface can be used by many types of network tools +for analysis, troubleshooting, security and +monitoring. In particular, classical tools that rely on WinPcap are:

+ +
    +
  • network and protocol analyzers
  • +
  • network monitors
  • +
  • traffic loggers
  • +
  • traffic generators
  • +
  • user-level bridges and routers
  • +
  • network intrusion detection systems (NIDS)
  • +
  • network scanners
  • +
  • security tools
  • +
+

What WinPcap cannot do

+

WinPcap receives and sends the packets independently from the host +protocols, like TCP-IP. This means that it isn't able to block, filter or +manipulate the traffic generated by other programs on the same machine: it +simply "sniffs" the packets that transit on the wire. Therefore, it does not +provide the appropriate support for applications like traffic shapers, QoS +schedulers and personal firewalls.

+ +

Purpose of this manual

+

The purpose of this manual is to provide a comprehensive and easy way to +browse the documentation of the WinPcap architecture.

+

The Manual contains all the information about functions and data +structures exported by the WinPcap API, a manual that explains how to write +packet filters and a page that explains how to include it in an application. A +tutorial with several code samples is provided as well; it can be used to learn +the basics of the WinPcap API using a step-by-step approach, but it also offers +code snippets that demonstrate advanced features.  

+

Additional Documentation

+

For additional and up-to-date documentation, we suggest that you look at  http://www.winpcap.org/docs/ +

+

In particular, if you are interested in +the structure and the internals of WinPcap, we suggest reading the +following documents:

+ + +

Note

+

For consistency with the literature, we will use the term packet even + though frame is more accurate since the capture process is done at + the data-link layer and the data-link header is included in the captured + data.

+ + + + diff --git a/dox/wpcap_samp.htm b/dox/wpcap_samp.htm new file mode 100644 index 00000000..1a1f5d3e --- /dev/null +++ b/dox/wpcap_samp.htm @@ -0,0 +1,83 @@ + + + + + + + + + + +

Creating an application that uses OEM WinPcap

+

To create an application that uses wpcap.dll with Microsoft Visual C++, +follow these +steps:

+
    +
  • Include the file pcap.h at the beginning of every source file that + uses the functions exported by library.
  • +
  • If your program uses Win32 specific functions of WinPcap, remember to include WPCAP + among the preprocessor definitions.
  • +
  • If your program uses the remote extensions (pcap_findalldevs_ex() is among the remote extensions), + remember to add HAVE_REMOTE among your preprocessor definitions.
  • Set the options of the linker to include the wpcap.lib library + file. wpcap.lib can + be found in the \lib folder of the OEM WinPcap developer's pack. +
  • Set the options of the linker to include the winsock library file (for + example wsock32.lib). This file is distributed with the C compiler + and contains the socket functions for Windows. It is needed by some libpcap + functions.
  • +
  • Initialize OEM WinPcap before calling *any* pcap function by calling + pcap_start_oem. Here is + some sample code you may use:
  • +
    char errbuf[PCAP_ERRBUF_SIZE];
    + ...
    + if (pcap_start_oem(errbuf, 0) == -1)
    + {
    +    printf("Error initializing OEM WinPcap: %s\n", errbuf);
    +    exit(1);
    + }
    +  
  • Place the OEM WinPcap DLLs available in the \bin folder of the + developer's pack into the working directory of your application.
    + IMPORTANT NOTE: in order to avoid conflicts with any existing + installation of WinPcap, you should avoid putting the OEM WinPcap DLLs in + the system folder (usually c:\windows\system32) or generally in a folder on + your PATH.
  • +
+

Remember that:

+
    +
  • To add a preprocessor definition, you must select Settings from the Project menu, then select C/C++ + from the tab control, and under the category General, you must add + the definition under the Preprocessor Definitions text box. +
  • To add a new library to the project with Microsoft Visual C++, you must + select Settings from the Project menu, then select Link + from the tab control, and then add the name of the new library in the Object/library + modules editbox. +
  • To add a new path where Microsoft Visual C++ will look for the libraries, + you must select Options from the Tools menu, then + Directories + from the tab control, Library files from the Show directories + for combobox, and the add the path in the Directories box. +
  • To add a new path where Microsoft Visual C++ will look for include files, you must select Options from the Tools menu, then + Directories + from the tab control, Include files from the Show directories + for combobox, and the add the path in the Directories box.
  • +
+

Deploying OEM WinPcap in your application installation

+

Installing OEM WinPcap with your application is extremely easy: you should +just copy the DLLs available in the \bin folder of the developer's pack (i.e. +packet.dll and wpcap.dll) into the working directory of your application.

+

IMPORTANT NOTE: in order to avoid conflicts with any existing installation of +WinPcap, you should avoid putting the OEM WinPcap DLLs in the system folder +(usually c:\windows\system32) or generally in a folder on your PATH.

+

Sample programs

+

A couple of sample programs are provided to show the usage of the WinPcap API. The +source of the examples, along with all the files needed to compile and run them, can be found in the Developer's +Pack of OEM WinPcap. For didactic purpose we provide here a browsable version of +the code: it is possible to click on the variables and functions to jump the +documentation of each of them. For a more complete set of samples, please refer +to the OEM WinPcap +Tutorial Section.

+ + + + \ No newline at end of file diff --git a/dox/wpcap_samp1.htm b/dox/wpcap_samp1.htm new file mode 100644 index 00000000..8d31e217 --- /dev/null +++ b/dox/wpcap_samp1.htm @@ -0,0 +1,21 @@ + + + + + + + + + + + +

Packet Dump

+

This program reads packets from a file or a network adapter, depending on +a command line switch. If a source is not provided, the program shows a list of +available adapters, one of which can be selected. Once the +capture is started, the program prints the timestamp, the length and the raw +contents of the packets. Once compiled, it will run on all the Win32 platforms.

+ + + + diff --git a/dox/wpcap_samp2.htm b/dox/wpcap_samp2.htm new file mode 100644 index 00000000..49dd9297 --- /dev/null +++ b/dox/wpcap_samp2.htm @@ -0,0 +1,28 @@ + + + + + + + + + + + +

Packet Filter

+ +

This is a more complete example of libpcap usage. It shows, among other +things, how to create and set filters and how to save a capture to disk. It can +be compiled under. Pcap_filter (pf.exe) is a general-purpose packet filtering application: its +input parameters are a source of packets (it can be a physical interface or a +file), a filter and an output file. It takes packets from the source until +CTRL+C is pressed or the whole file is processed, applies the filter to the +incoming packets and saves them to the output file if they satisfy the filter. +Pcap_filter can be used to dump network data according to a particular filter, +but also to extract a set of packets from a previously saved file. The format of +both input and output files is the format used by libpcap, i.e. same of WinDump, tcpdump +and many other network tools.

+ + + + diff --git a/dox/wpcap_tut.txt b/dox/wpcap_tut.txt new file mode 100644 index 00000000..66cb540b --- /dev/null +++ b/dox/wpcap_tut.txt @@ -0,0 +1,17 @@ +/** @ingroup wpcap + */ + + +/** @defgroup wpcap_tut OEM WinPcap tutorial: a step by step guide to using WinPcap + * @{ + + +This section shows how to use the features of the WinPcap API. It is organized as a tutorial, subdivided into a set of lessons that will introduce the reader, in a step-by-step fashion, to program development using WinPcap, from the basic functions (obtaining the adapter list, starting a capture, etc.) to the most advanced ones (handling send queues and gathering statistics about network traffic). + +Several code snippets, as well as simple but complete programs are provided as a reference: all of the source code contains links to the rest of the manual, making it is possible to click on functions and data structures to jump to the corresponding documentation. + +The samples are written in plain C, so a basic knowledge of C programming is required. Also, since this is a tutorial about a library dealing with "raw" networking packets, good knowledge of networks and network protocols is assumed. + +\ref wpcap_tut1 "Next >>>" + +@}*/ diff --git a/dox/wpcap_tut1.txt b/dox/wpcap_tut1.txt new file mode 100644 index 00000000..333a001c --- /dev/null +++ b/dox/wpcap_tut1.txt @@ -0,0 +1,83 @@ +/** @ingroup wpcap_tut + */ + + +/** @defgroup wpcap_tut1 Obtaining the device list + * @{ + +Typically, the first thing that a WinPcap-based application does is get a list of attached network adapters. Both libpcap and WinPcap provide the pcap_findalldevs_ex() function for this purpose: this function returns a linked list of pcap_if structures, each of which contains comprehensive information about an attached adapter. In particular, the fields \e name and \e description contain the name and a human readable description, respectively, of the corresponding device. + +The following code retrieves the adapter list and shows it on the screen, printing an error if no adapters are found. + +\code +#include "pcap.h" + +main() +{ + pcap_if_t *alldevs; + pcap_if_t *d; + int i=0; + char errbuf[PCAP_ERRBUF_SIZE]; + + /* start OEM WinPcap */ + if (pcap_start_oem(errbuf, 0) == -1) + { + fprintf(stderr, "Error starting OEM WinPcap: %s\n", errbuf); + exit(1); + } + + /* Retrieve the device list from the local machine */ + if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL /* auth is not needed */, &alldevs, errbuf) == -1) + { + fprintf(stderr,"Error in pcap_findalldevs_ex: %s\n", errbuf); + exit(1); + } + + /* Print the list */ + for(d= alldevs; d != NULL; d= d->next) + { + printf("%d. %s", ++i, d->name); + if (d->description) + printf(" (%s)\n", d->description); + else + printf(" (No description available)\n"); + } + + if (i == 0) + { + printf("\nNo interfaces found! Make sure WinPcap is installed.\n"); + return; + } + + /* We don't need any more the device list. Free it */ + pcap_freealldevs(alldevs); +} +\endcode + +Some comments about this code. + +First of all, \ref pcap_findalldevs_ex() and \ref pcap_start_oem(), like other libpcap functions, have an \e errbuf parameter. This parameter points to a string filled by libpcap with a description of the error if something goes wrong. + +Second, remember that not all the OSes supported by libpcap provide a description of the network interfaces, therefore if we want to write a portable application, we must consider the case in which \e description is null: we print the string "No description available" in that situation. + +Note finally that we free the list with pcap_freealldevs() once when we have finished with it. + +Let's try to compile and run the code of this first sample. In order to compile it on Windows, you will need to create a project, +following the instructions in the section \ref wpcapsamps of this manual. +However, we suggest that you use the OEM WinPcap developer's pack, since it provides many examples already configured as projects +including all the code presented in this tutorial and the \e includes and \e libraries needed to compile and run the examples. + +\note if you create your own project, remember to add the preprocessor directives WPCAP and HAVE_REMOTE in order to compile and link this example. + +Assuming we have compiled the program, let's try to run it. On a particular WinXP workstation, the result we optained is + +
+   1. \\Device\\NPF_{4E273621-5161-46C8-895A-48D0E52A0B83} (Realtek RTL8029(AS) Ethernet Adapter)
+   2. \\Device\\NPF_{5D24AE04-C486-4A96-83FB-8B5EC6C7F430} (3Com EtherLink PCI) 
+
+ +As you can see, the name of the network adapters (that will be passed to libpcap when opening the devices) under Windows are quite unreadable, so the parenthetical descriptions can be very helpful. + +\ref wpcap_tut "<<< Previous" \ref wpcap_tut2 "Next >>>" + +@}*/ diff --git a/dox/wpcap_tut2.txt b/dox/wpcap_tut2.txt new file mode 100644 index 00000000..8c2a38d6 --- /dev/null +++ b/dox/wpcap_tut2.txt @@ -0,0 +1,21 @@ +/** @ingroup wpcap_tut + */ + +/** @defgroup wpcap_tut2 Obtaining advanced information about installed devices + * @{ + +Lesson 1 (\ref wpcap_tut1) demonstrated how to get basic information (i.e. device name and description) about available adapters. Actually, WinPcap provides also other advanced information. In particular, every pcap_if structure returned by pcap_findalldevs_ex() contains also a list of pcap_addr structures, with: +- a list of addresses for that interface. +- a list of netmasks (each of which corresponds to an entry in the addresses list). +- a list of broadcast addresses (each of which corresponds to an entry in the addresses list). +- a list of destination addresses (each of which corresponds to an entry in the addresses list). + +Additionally, pcap_findalldevs_ex() can also return remote adapters and a list of pcap files that are located in a given local folder. + +The following sample provides an ifprint() function that prints the complete contents of a pcap_if structure. It is invoked by the program for every entry returned by pcap_findalldevs_ex(). + +\include iflist/iflist.c + +\ref wpcap_tut1 "<<< Previous" \ref wpcap_tut3 "Next >>>" + +@}*/ diff --git a/dox/wpcap_tut3.txt b/dox/wpcap_tut3.txt new file mode 100644 index 00000000..1b32d593 --- /dev/null +++ b/dox/wpcap_tut3.txt @@ -0,0 +1,31 @@ +/** @ingroup wpcap_tut + */ + + +/** @defgroup wpcap_tut3 Opening an adapter and capturing the packets + * @{ + +Now that we've seen how to obtain an adapter to play with, let's start the real job, opening an adapter and capturing some traffic. In this lesson we'll write a program that prints some information about each packet flowing through the adapter. + +The function that opens a capture device is pcap_open(). The parameters, \e snaplen, \e flags and \e to_ms deserve some explanation. + +\e snaplen specifies the portion of the packet to capture. On some OSes (like xBSD and Win32), the packet driver can be configured to capture only the initial part of any packet: this decreases the amount of data to copy to the application and therefore improves the efficiency of the capture. In this case we use the value 65536 which is higher than the greatest MTU that we could encounter. In this manner we ensure that the application will always receive the whole packet. + +\e flags: the most important flag is the one that indicates if the adapter will be put in promiscuous mode. In normal operation, an adapter only captures packets from the network that are destined to it; the packets exchanged by other hosts are therefore ignored. Instead, when the adapter is in promiscuous mode it captures all packets whether they are destined to it or not. This means that on shared media (like non-switched Ethernet), WinPcap will be able to capture the packets of other hosts. Promiscuous mode is the default for most capture applications, so we enable it in the following example. + +\e to_ms specifies the read timeout, in milliseconds. A read on the adapter (for example, with pcap_dispatch() or pcap_next_ex()) will always return after \e to_ms milliseconds, even if no packets are available from the network. \e to_ms also defines the interval between statistical reports if the adapter is in statistical mode (see the lesson "\ref wpcap_tut9" for information about statistical mode). Setting \e to_ms to 0 means no timeout, a read on the adapter never returns if no packets arrive. A -1 timeout on the other side causes a read on the adapter to always return immediately. + + +\include misc/basic_dump.c + +Once the adapter is opened, the capture can be started with pcap_dispatch() or pcap_loop(). These two functions are very similar, the difference is that pcap_ dispatch() returns (although not guaranteed) when the timeout expires while pcap_loop() doesn't return until \e cnt packets have been captured, so it can block for an arbitrary period on an under-utilized network. pcap_loop() is enough for the purpose of this sample, while pcap_dispatch() is normally used in a more complex program. + +Both of these functions have a \e callback parameter, \e packet_handler, pointing to a function that will receive the packets. This function is invoked by libpcap for every new packet coming from the network and receives a generic status (corresponding to the \e user parameter of pcap_loop() and pcap_dispatch()), a header with some information on the packet like the timestamp and the length and the actual data of the packet including all the protocol headers. Note that the frame CRC is normally not present, because it is removed by the network adapter after frame validation. Note also that most adapters discard packets with wrong CRCs, therefore WinPcap is normally not able to capture them. + +The above example extracts the timestamp and the length of every packet from the pcap_pkthdr header and prints them on the screen. + +Please note that there may be a drawback using pcap_loop() mainly related to the fact that the handler is called by the packet capture driver; therefore the user application does not have direct control over it. Another approach (and to have more readable programs) is to use the pcap_next_ex() function, which is presented in the next example (\ref wpcap_tut4). + +\ref wpcap_tut2 "<<< Previous" \ref wpcap_tut4 "Next >>>" + +@}*/ diff --git a/dox/wpcap_tut4.txt b/dox/wpcap_tut4.txt new file mode 100644 index 00000000..ccbc4e5e --- /dev/null +++ b/dox/wpcap_tut4.txt @@ -0,0 +1,27 @@ +/** @ingroup wpcap_tut + */ + + +/** @defgroup wpcap_tut4 Capturing the packets without the callback + * @{ + +The example program in this lesson behaves exactly like the previous program (\ref wpcap_tut3), but it uses pcap_next_ex() instead of pcap_loop(). + +The callback-based capture mechanism of pcap_loop() is elegant and it could be a good choice in some situations. However, handling a callback is sometimes not practical -- it often makes the program more complex especially in situations with multithreaded applications or C++ classes. + +In these cases, pcap_next_ex() retrievs a packet with a direct call -- using pcap_next_ex() packets are received only when the programmer wants them. + +The parameters of this function are the same as a capture callback -- it takes an adapter descriptor and a couple of pointers that will be initialized and returned to the user (one to a pcap_pkthdr structure and another to a buffer with the packet data). + +In the following program, we recycle the callback code of the previous lesson's example and move it inside main() right after the call to pcap_next_ex(). + + +\include misc/basic_dump_ex.c + +Why do we use pcap_next_ex() instead of the old pcap_next()? Because pcap_next() has some drawbacks. First of all, it is inefficient because it hides the callback method but still relies on pcap_dispatch(). Second, it is not able to detect EOF, so it's not very useful when gathering packets from a file. + +Notice also that pcap_next_ex() returns different values for success, timeout elapsed, error and EOF conditions. + +\ref wpcap_tut3 "<<< Previous" \ref wpcap_tut5 "Next >>>" + +@}*/ diff --git a/dox/wpcap_tut5.txt b/dox/wpcap_tut5.txt new file mode 100644 index 00000000..feddf3fd --- /dev/null +++ b/dox/wpcap_tut5.txt @@ -0,0 +1,50 @@ +/** @ingroup wpcap_tut + */ + + +/** @defgroup wpcap_tut5 Filtering the traffic + * @{ + +One of the most powerful features offered by WinPcap (and by libpcap as well) is the filtering engine. It provides a very efficient way to receive subsets of the network traffic, and is (usually) integrated with the capture mechanism provided by WinPcap. The functions used to filter packets are pcap_compile() and pcap_setfilter(). + +pcap_compile() takes a string containing a high-level Boolean (filter) expression and produces a low-level byte code that can be interpreted by the fileter engine in the packet driver. The syntax of the boolean expression can be found in the \ref language section of this documentation. + +pcap_setfilter() associates a filter with a capture session in the kernel driver. Once pcap_setfilter() is called, the associated filter will be applied to all the packets coming from the network, and all the conformant packets (i.e., packets for which the Boolean expression evaluates to true) will be actually copied to the application. + +The following code shows how to compile and set a filter. Note that we must retrieve the netmask from the pcap_if structure that describes the adapter, because some filters created by pcap_compile() require it. + +The filter passed to pcap_compile() in this code snippet is "ip and tcp", which means to "keep only the packets that are both IPv4 and TCP and deliver them to the application". + +\code + if (d->addresses != NULL) + /* Retrieve the mask of the first address of the interface */ + netmask=((struct sockaddr_in *)(d->addresses->netmask))->sin_addr.S_un.S_addr; + else + /* If the interface is without an address we suppose to be in a C class network */ + netmask=0xffffff; + + + //compile the filter + if (pcap_compile(adhandle, &fcode, "ip and tcp", 1, netmask) < 0) + { + fprintf(stderr,"\nUnable to compile the packet filter. Check the syntax.\n"); + /* Free the device list */ + pcap_freealldevs(alldevs); + return -1; + } + + //set the filter + if (pcap_setfilter(adhandle, &fcode) < 0) + { + fprintf(stderr,"\nError setting the filter.\n"); + /* Free the device list */ + pcap_freealldevs(alldevs); + return -1; + } +\endcode + +If you want to see some code that uses the filtering functions shown in this lesson, look at the example presented in the next Lesson, \ref wpcap_tut6. + +\ref wpcap_tut4 "<<< Previous" \ref wpcap_tut6 "Next >>>" + +@}*/ diff --git a/dox/wpcap_tut6.txt b/dox/wpcap_tut6.txt new file mode 100644 index 00000000..9c9f9705 --- /dev/null +++ b/dox/wpcap_tut6.txt @@ -0,0 +1,48 @@ +/** @ingroup wpcap_tut + */ + +/** @defgroup wpcap_tut6 Interpreting the packets + * @{ + +Now that we are able to capture and filter network traffic, we want to put our knowledge to work with a simple "real world" application. + +In this lesson we will take code from the previous lessons and use these pieces to build a more useful program. the main purpose of the current program is to show how the protocol headers of a captured packet can be parsed and interpreted. +The resulting application, called UDPdump, prints a summary of the UDP traffic on our network. + +We have chosen to parse and display the UDP protocol because it is more accessible than other protocols such as TCP and consequently is an excellent initial example. Let's look at the code: + +\include UDPdump/udpdump.c + +First of all, we set the filter to "ip and udp". In this way we are sure that packet_handler() will receive only UDP packets over IPv4: this simplifies the parsing and increases the efficiency of the program. + +We have also created a couple of structs that describe the IP and UDP headers. These structs are used by packet_handler() to properly locate the various header fields. + +packet_handler(), although limited to a single protocol dissector (UDP over IPv4), shows how complex "sniffers" like tcpdump/WinDump decode the network traffic. Since we aren't interested in the MAC header, we skip it. +For simplicity and before starting the capture, we check the MAC layer with pcap_datalink() to make sure that +we are dealing with an Ethernet network. This way we can be sure that the MAC header is exactly 14 bytes. + +The IP header is located just after the MAC header. We will extract the IP source and destination addresses from the +IP header. + +Reaching the UDP header is a bit more complicated, because the IP header doesn't have a fixed length. +Therefore, we use the IP header's length field to know its size. +Once we know the location of the UDP header, we extract the source and destination ports. + +The extracted values are printed on the screen, and the result is something like: + + +1. \\Device\\Packet_{A7FD048A-5D4B-478E-B3C1-34401AC3B72F} (Xircom +t 10/100 Adapter) \n +Enter the interface number (1-2):1\n + +listening on Xircom CardBus Ethernet 10/100 Adapter... \n +16:13:15.312784 len:87 130.192.31.67.2682 -> 130.192.3.21.53 \n +16:13:15.314796 len:137 130.192.3.21.53 -> 130.192.31.67.2682 \n +16:13:15.322101 len:78 130.192.31.67.2683 -> 130.192.3.21.53 \n + + +Each of the final 3 lines represents a different packet. + +\ref wpcap_tut5 "<<< Previous" \ref wpcap_tut7 "Next >>>" + +@}*/ diff --git a/dox/wpcap_tut7.txt b/dox/wpcap_tut7.txt new file mode 100644 index 00000000..d949f9e8 --- /dev/null +++ b/dox/wpcap_tut7.txt @@ -0,0 +1,67 @@ +/** @ingroup wpcap_tut + */ + +/** @defgroup wpcap_tut7 Handling offline dump files + * @{ + +In this lession we are going to learn how to handle packet capture to a file (dump to file). +WinPcap offers a wide range of functions to save the network traffic to a file and to read the content of dumps -- this lesson will teach how to use all of these functions. We'll see also how to use the kernel dump feature of WinPcap to obtain high-performance dumps +(NOTE: At the moment, due to some problems with the new kernel buffer, this feature has been disabled). + +The format for dump files is the libpcap one. This format contains the data of the captured packets in binary form and is a standard used by many network tools including WinDump, Ethereal and Snort. + +Saving packets to a dump file + +First of all, let's see how to write packets in libpcap format. + +The following example captures the packets from the selected interface and saves them on a file +whose name is provided by the user. + +\include misc\savedump.c + +As you can see, the structure of the program is very similar to the ones we have seen in the previous lessons. +The differences are: +- a call to pcap_dump_open() is issued once the interface is opened. This call opens a dump file and associates it with the interface. +- the packets are written to this file with a pcap_dump() from the packet_handler() callback. The parameters of +pcap_dump() are in 1-1 correspondence with the parameters of pcap_handler(). + +Reading packets from a dump file + +Now that we have a dump file available, we can try to read its content. +The following code opens a WinPcap/libpcap dump file and displays every packet contained in the file. +The file is opened with pcap_open_offline(), then the usual pcap_loop() is used to sequence through the packets. +As you can see, reading packets from an offline capture is nearly identical to receiving them from a physical interface. + +This example introduces another function: pcap_createsrcsrc(). +This function is required to create a source string that begins with a marker used to tell WinPcap the type of the source, +e.g. "rpcap://" if we are going to open an adapter, or "file://" if we are going to open a file. +This step is not required when pcap_findalldevs_ex() is used (the returned values already contain these strings). +However, it is required in this example because the name of the file is read from the user input. + +\include misc\readfile.c + +The following example has the same purpose of the last one, but pcap_next_ex() is used instead of the pcap_loop() callback method. + +\include misc\readfile_ex.c + +Writing packets to a dump file with pcap_live_dump + +NOTE: At the moment, due to some problems with the new kernel buffer, this feature has been disabled. + +Recent versions of WinPcap provide a further way to save network traffic to disk, the pcap_live_dump() function. pcap_live_dump() takes three parameters: a file name, the maximum size (in bytes) that this file is allowed to reach and the maximum amount of packets that the file is allowed to contain. Zero means no limit for both these values. Notice that the program can set a filter (with pcap_setfilter(), see the tutorial \ref wpcap_tut5) before calling pcap_live_dump() to define the subset of the traffic that will be saved. + +pcap_live_dump() is non-blocking, therefore it starts the dump and returns immediately: The dump process goes on asynchronously until the maximum file size or the maximum amount of packets has been reached. + +The application can wait or check the end of the dump with pcap_live_dump_ended(). +\b Beware that if the \e sync parameter is nonzero, this function will block your application forever if the limits are both 0. + +\include kdump\kdump.c + +The difference between pcap_live_dump() and pcap_dump(), apart from the possibility to set limits, is performance. pcap_live_dump() exploits the ability of the WinPcap NPF driver to write dumps from kernel level, minimizing the number of context switches and memory copies. + +Obviously, since this feature is currently not available on other operating systems, +pcap_live_dump() is WinPcap specific and is present only under Win32. + +\ref wpcap_tut6 "<<< Previous" \ref wpcap_tut8 "Next >>>" + +@}*/ diff --git a/dox/wpcap_tut8.txt b/dox/wpcap_tut8.txt new file mode 100644 index 00000000..6a81f9e9 --- /dev/null +++ b/dox/wpcap_tut8.txt @@ -0,0 +1,59 @@ +/** @ingroup wpcap_tut + */ + +/** @defgroup wpcap_tut8 Sending Packets + * @{ + +Although the name \e WinPcap indicates clearly that the purpose of the library is packet capture, other useful features for raw networking are provided. Among them, the user can find a complete set of functions to send packets. + +Note that the original libpcap library at the moment doesn't provide any way to send packets, therefore all the functions shown here are WinPcap extensions and will not work under Unix. + +Sending a single packet with pcap_sendpacket() + +The simplest way to send a packet is shown in the following code snippet. After opening an adapter, pcap_sendpacket() is called to send a hand-crafted packet. +pcap_sendpacket() takes as arguments a buffer containing the data to send, the length of the buffer +and the adapter that will send it. +Notice that the buffer is sent to the net as is, without any manipulation. This means that the application has to create the correct protocol headers in order to send something meaningful. + +\include misc/sendpack.c + +Send queues + +While pcap_sendpacket() offers a simple and immediate way to send a single packet, send queues provides an advanced, powerful and optimized mechanism to send a collection of packets. +A send queue is a container for a variable number of packets that will be sent to the network. +It has a size, that represents the maximum amount of bytes it can store. + +A send queue is created calling the pcap_sendqueue_alloc() function, specifying the size of the new send queue. + +Once the send queue is created, pcap_sendqueue_queue() can be used to add a packet to the send queue. +This function takes a pcap_pkthdr with the timestamp and the length and a buffer with the data of the packet. +These parameters are the same as those received by pcap_next_ex() and pcap_handler(), therefore queuing a packet that was +just captured or read from a file is a matter of passing these parameters to pcap_sendqueue_queue(). + +To transmit a send queue, WinPcap provides the pcap_sendqueue_transmit() function. +Note the third parameter: if nonzero, the send will be \e synchronized, +i.e. the relative timestamps of the packets will be respected. +This operation requires a remarkable amount of CPU, because the synchronization takes place in the +kernel driver using "busy wait" loops. Although this operation is quite CPU intensive, +it often results in very high precision +packet transmissions (often around few microseconds or less). + +Note that transmitting a send queue with pcap_sendqueue_transmit() is much more efficient than performing a series of pcap_sendpacket(), because the send queue is buffered at kernel level drastically decreasing the number of context switches. + +When a queue is no longer needed, +it can be deleted with pcap_sendqueue_destroy() that frees all the buffers associated with the send queue. + +The next program shows how to use send queues. +It opens a capture file with pcap_open_offline(), +then it moves the packets from the file to a properly allocated send queue. +At his point it transmits the queue, synchronizing it if requested by the user. + +Note that the link-layer of the dumpfile is compared with the one of the interface that will send the packets using pcap_datalink(), and a warning is printed if they are different -- it is important that the capture-file link-layer be the +same as the adapter's link layer for otherwise the tranmission is pointless. + +\include sendcap/sendcap.c + +\ref wpcap_tut7 "<<< Previous" \ref wpcap_tut9 "Next >>>" + + +@}*/ diff --git a/dox/wpcap_tut9.txt b/dox/wpcap_tut9.txt new file mode 100644 index 00000000..009f69d9 --- /dev/null +++ b/dox/wpcap_tut9.txt @@ -0,0 +1,52 @@ +/** @ingroup wpcap_tut + */ + +/** @defgroup wpcap_tut9 Gathering Statistics on the network traffic + * @{ + +This lesson shows another advanced feature of WinPcap: the ability to collect statistics about network traffic. The statistical engine makes use of the kernel-level packet filter to efficiently classify the incoming packet. +You can take a look at the \ref NPF if you want to know more details. + +In order to use this feature, the programmer must open an adapter and put it in \e statistical \e mode. +This can be done with pcap_setmode(). In particular, MODE_STAT must be used as the \e mode argument of this function. + +With statistical mode, making an application that monitors the TCP traffic load is a matter of few lines of code. +The following sample shows how to do it. + +\include tcptop/tcptop.c + +Before enabling statistical mode, the user has the option to set a filter that defines the subset of network traffic that will be monitored. See the paragraph on the \ref language for details. +If no filter has been set, all of the traffic will be monitored. + +Once + +- the filter is set +- pcap_setmode() is called +- callback invocation is enabled with pcap_loop() + +the interface descriptor starts to work in statistical mode. +Notice the fourth parameter (\e to_ms) of pcap_open(): it defines the interval among the statistical samples. +The callback function receives the samples calculated by the driver every \e to_ms milliseconds. These samples are encapsulated in the second and third parameters of the callback function, as shown in the following figure: + +\image html stats_wpcap.gif + + +Two 64-bit counters are provided: the number of packets and the amount of bytes received during the last interval. + +In the example, the adapter is opened with a timeout of 1000 ms. +This means that dispatcher_handler() is called once per second. +At this point a filter that keeps only tcp packets is compiled and set. +Then pcap_setmode() and pcap_loop() are called. +Note that a struct timeval pointer is passed to pcap_loop() as the \e user parameter. +This structure will be used to store a timestamp in order to calculate the interval between two samples. +dispatcher_handler()uses this interval to obtain the bits per second and the +packets per second and then prints these values on the screen. + +Note finally that this example is by far more efficient than a program that captures the packets in the traditional way and calculates statistics at user-level. +Statistical mode requires the minumum amount of data copies and context switches and therefore the CPU is optimized. Moreover, a very small amount of memory is required. + +\ref wpcap_tut8 "<<< Previous" + +@}*/ + + From 92a6885d0a805788dd9153db52aa510da9aaa9c8 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Mon, 13 Feb 2006 23:54:31 +0000 Subject: [PATCH 113/316] General cleanup of the doxygen project. --- dox/prj/winpcap_oem_noc.dox | 133 +++++++++++++++++++++++------------- 1 file changed, 87 insertions(+), 46 deletions(-) diff --git a/dox/prj/winpcap_oem_noc.dox b/dox/prj/winpcap_oem_noc.dox index ca724229..6a540a20 100644 --- a/dox/prj/winpcap_oem_noc.dox +++ b/dox/prj/winpcap_oem_noc.dox @@ -1,44 +1,59 @@ -# Doxyfile 1.2.13-20020210 +# Doxyfile 1.3.7 #--------------------------------------------------------------------------- -# General configuration options +# Project related configuration options #--------------------------------------------------------------------------- -PROJECT_NAME = WinPcap OEM +PROJECT_NAME = "OEM WinPcap" PROJECT_NUMBER = 3.2.1.337 OUTPUT_DIRECTORY = ./ +CREATE_SUBDIRS = NO OUTPUT_LANGUAGE = English +USE_WINDOWS_ENCODING = YES +BRIEF_MEMBER_DESC = NO +REPEAT_BRIEF = YES +ABBREVIATE_BRIEF = +ALWAYS_DETAILED_SEC = NO +INLINE_INHERITED_MEMB = NO +FULL_PATH_NAMES = NO +STRIP_FROM_PATH = +STRIP_FROM_INC_PATH = +SHORT_NAMES = NO +JAVADOC_AUTOBRIEF = NO +MULTILINE_CPP_IS_BRIEF = NO +DETAILS_AT_TOP = NO +INHERIT_DOCS = YES +DISTRIBUTE_GROUP_DOC = NO +TAB_SIZE = 4 +ALIASES = +OPTIMIZE_OUTPUT_FOR_C = YES +OPTIMIZE_OUTPUT_JAVA = NO +SUBGROUPING = YES +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- EXTRACT_ALL = YES EXTRACT_PRIVATE = YES EXTRACT_STATIC = YES EXTRACT_LOCAL_CLASSES = YES +EXTRACT_LOCAL_METHODS = NO HIDE_UNDOC_MEMBERS = YES HIDE_UNDOC_CLASSES = YES -BRIEF_MEMBER_DESC = YES -REPEAT_BRIEF = YES -ALWAYS_DETAILED_SEC = NO -INLINE_INHERITED_MEMB = NO -FULL_PATH_NAMES = NO -STRIP_FROM_PATH = +HIDE_FRIEND_COMPOUNDS = NO +HIDE_IN_BODY_DOCS = NO INTERNAL_DOCS = YES -STRIP_CODE_COMMENTS = YES CASE_SENSE_NAMES = YES -SHORT_NAMES = NO HIDE_SCOPE_NAMES = YES -VERBATIM_HEADERS = YES SHOW_INCLUDE_FILES = YES -JAVADOC_AUTOBRIEF = NO -INHERIT_DOCS = YES INLINE_INFO = YES SORT_MEMBER_DOCS = YES -DISTRIBUTE_GROUP_DOC = NO -TAB_SIZE = 4 +SORT_BRIEF_DOCS = NO +SORT_BY_SCOPE_NAME = NO GENERATE_TODOLIST = YES GENERATE_TESTLIST = YES GENERATE_BUGLIST = YES -ALIASES = +GENERATE_DEPRECATEDLIST= YES ENABLED_SECTIONS = MAX_INITIALIZER_LINES = 30 -OPTIMIZE_OUTPUT_FOR_C = YES SHOW_USED_FILES = YES #--------------------------------------------------------------------------- # configuration options related to warning and progress messages @@ -46,28 +61,27 @@ SHOW_USED_FILES = YES QUIET = NO WARNINGS = YES WARN_IF_UNDOCUMENTED = YES +WARN_IF_DOC_ERROR = YES WARN_FORMAT = WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- -INPUT = ../../../winpcap/packetNtx/driver/Packet.h \ - ../../../winpcap/packetNtx/driver/jitter.h \ - ../../../winpcap/dox/libpcap/incs/pcap.h \ - ../../../winpcap/dox/libpcap/funcs/pcap.h \ +INPUT = ../../../winpcap/dox/libpcap/incs/pcap.h \ + ../../../winpcap/dox/libpcap/funcs/pcap.h \ ../../../winpcap/wpcap/Win32-Extensions/Win32-Extensions.h \ ../main.txt \ - ../../../winpcap/dox/wpcap_tut.txt \ - ../../../winpcap/dox/wpcap_tut1.txt \ - ../../../winpcap/dox/wpcap_tut2.txt \ - ../../../winpcap/dox/wpcap_tut3.txt \ - ../../../winpcap/dox/wpcap_tut4.txt \ - ../../../winpcap/dox/wpcap_tut5.txt \ - ../../../winpcap/dox/wpcap_tut6.txt \ - ../../../winpcap/dox/wpcap_tut7.txt \ - ../../../winpcap/dox/wpcap_tut8.txt \ - ../../../winpcap/dox/wpcap_tut9.txt \ - ../../../winpcap/dox/doxygen_groups.txt \ + ../wpcap_tut.txt \ + ../wpcap_tut1.txt \ + ../wpcap_tut2.txt \ + ../wpcap_tut3.txt \ + ../wpcap_tut4.txt \ + ../wpcap_tut5.txt \ + ../wpcap_tut6.txt \ + ../wpcap_tut7.txt \ + ../wpcap_tut8.txt \ + ../wpcap_tut9.txt \ + ../doxygen_groups.txt \ ../../../winpcap/dox/wpcap_remote.htm \ ../../../winpcap/wpcap/libpcap/pcap-remote.h \ ../../../winpcap/wpcap/libpcap/remote-ext.h \ @@ -76,30 +90,34 @@ INPUT = ../../../winpcap/packetNtx/driver/Packet.h \ ../../../winpcap/wpcap/libpcap/rpcapd/daemon.h \ ../../../winpcap/wpcap/libpcap/rpcapd/rpcapd.h \ ../../../winpcap/wpcap/libpcap/rpcapd/win32-svc.h \ - ../../wpcap/pcap_oem.c + ../../wpcap/pcap_oem.c FILE_PATTERNS = *.cpp \ - *.c \ + *.c \ *.h \ *.txt \ - *.htm + *.htm RECURSIVE = YES EXCLUDE = test EXCLUDE_SYMLINKS = NO EXCLUDE_PATTERNS = -EXAMPLE_PATH = ../../../Winpcap/Examples/ \ - ../../../WinPcap/dox +EXAMPLE_PATH = ../../Examples/ \ + ../../../WinPcap/dox/ \ + ../ EXAMPLE_PATTERNS = EXAMPLE_RECURSIVE = NO -IMAGE_PATH = ../../../Winpcap/dox/pics/ +IMAGE_PATH = ../../../Winpcap/dox/pics/ \ + ../pics/ INPUT_FILTER = FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- -SOURCE_BROWSER = YES +SOURCE_BROWSER = NO INLINE_SOURCES = NO +STRIP_CODE_COMMENTS = YES REFERENCED_BY_RELATION = YES REFERENCES_RELATION = YES +VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- @@ -112,23 +130,27 @@ IGNORE_PREFIX = GENERATE_HTML = YES HTML_OUTPUT = docs HTML_FILE_EXTENSION = .html -HTML_HEADER = +HTML_HEADER = ../header.htm HTML_FOOTER = ../footer.htm HTML_STYLESHEET = ../../../Winpcap/dox/style.css HTML_ALIGN_MEMBERS = YES GENERATE_HTMLHELP = YES +CHM_FILE = +HHC_LOCATION = GENERATE_CHI = NO -BINARY_TOC = YES +BINARY_TOC = NO TOC_EXPAND = NO -DISABLE_INDEX = NO +DISABLE_INDEX = YES ENUM_VALUES_PER_LINE = 4 -GENERATE_TREEVIEW = YES +GENERATE_TREEVIEW = NO TREEVIEW_WIDTH = 250 #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- GENERATE_LATEX = NO LATEX_OUTPUT = +LATEX_CMD_NAME = latex +MAKEINDEX_CMD_NAME = makeindex COMPACT_LATEX = NO PAPER_TYPE = a4wide EXTRA_PACKAGES = @@ -136,6 +158,7 @@ LATEX_HEADER = PDF_HYPERLINKS = NO USE_PDFLATEX = NO LATEX_BATCHMODE = NO +LATEX_HIDE_INDICES = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- @@ -156,11 +179,22 @@ MAN_LINKS = NO # configuration options related to the XML output #--------------------------------------------------------------------------- GENERATE_XML = NO +XML_OUTPUT = xml +XML_SCHEMA = +XML_DTD = +XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- +GENERATE_PERLMOD = NO +PERLMOD_LATEX = NO +PERLMOD_PRETTY = YES +PERLMOD_MAKEVAR_PREFIX = +#--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- ENABLE_PREPROCESSING = YES @@ -177,7 +211,7 @@ PREDEFINED = WIN32 \ EXPAND_AS_DEFINED = SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- -# Configuration::addtions related to external references +# Configuration::additions related to external references #--------------------------------------------------------------------------- TAGFILES = GENERATE_TAGFILE = @@ -188,18 +222,25 @@ PERL_PATH = # Configuration options related to the dot tool #--------------------------------------------------------------------------- CLASS_DIAGRAMS = YES +HIDE_UNDOC_RELATIONS = YES HAVE_DOT = NO CLASS_GRAPH = YES COLLABORATION_GRAPH = YES +UML_LOOK = NO TEMPLATE_RELATIONS = YES -HIDE_UNDOC_RELATIONS = YES INCLUDE_GRAPH = YES INCLUDED_BY_GRAPH = YES +CALL_GRAPH = NO GRAPHICAL_HIERARCHY = YES DOT_IMAGE_FORMAT = gif DOT_PATH = DOTFILE_DIRS = MAX_DOT_GRAPH_WIDTH = 1024 MAX_DOT_GRAPH_HEIGHT = 1024 +MAX_DOT_GRAPH_DEPTH = 0 GENERATE_LEGEND = YES DOT_CLEANUP = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- +SEARCHENGINE = NO From 442dd6c4fc8005a5e03e1689e846590217400296 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Mon, 13 Feb 2006 23:56:38 +0000 Subject: [PATCH 114/316] Cleaned up the script to copy the appropriate image files. --- create_docs_oem.bat | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/create_docs_oem.bat b/create_docs_oem.bat index 5d04ee10..181ddc89 100755 --- a/create_docs_oem.bat +++ b/create_docs_oem.bat @@ -14,17 +14,17 @@ del /q docs\*.* @echo #### Creating new documentation doxygen winpcap_oem_noc.dox @echo #### Copying all gif files -copy ..\pics\*.gif docs\. /v /y /q -copy ..\*.gif docs\. /v /y /q +xcopy ..\pics\*.gif docs\. /v /y /q +xcopy ..\pics\*.jpg docs\. /v /y /q popd xcopy /v /Y ..\winpcap\dox\WinPcap_docs.html %WPDPACKDESTDIR%\docs\ xcopy /v /Y .\dox\prj\docs\*.* %WPDPACKDESTDIR%\docs\html\ -xcopy /v /Y .\dox\*.gif %WPDPACKDESTDIR%\docs\html\ xcopy /v /Y ..\winpcap\dox\*.gif %WPDPACKDESTDIR%\docs\html\ xcopy /v /Y ..\winpcap\dox\pics\*.gif %WPDPACKDESTDIR%\docs\html\ xcopy /v /Y .\dox\pics\*.gif %WPDPACKDESTDIR%\docs\html\ +xcopy /v /Y .\dox\pics\*.jpg %WPDPACKDESTDIR%\docs\html\ echo Folder \docs created successfully set WPDPACKDESTDIR= set WINPCAPSOURCEDIR= From 9aa42491c2da365258c20d3103a1a6fd6905b123 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 22 Feb 2006 18:46:45 +0000 Subject: [PATCH 115/316] Fixed some error messages still using the old name "WinPcap OEM". --- OEM/WinpcapOem/WinPcapOem.cpp | 16 ++++++++-------- OEM/WinpcapOem/WinpcapOem.h | 4 ++-- wpcap/pcap_oem.c | 2 +- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/OEM/WinpcapOem/WinPcapOem.cpp b/OEM/WinpcapOem/WinPcapOem.cpp index 46f471cd..4da2801e 100644 --- a/OEM/WinpcapOem/WinPcapOem.cpp +++ b/OEM/WinpcapOem/WinPcapOem.cpp @@ -173,9 +173,9 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) { g_IsProcAuthorized = FALSE; - WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("This version of WinPcap OEM can be only run in conjunction with CACE Technologies Network Toolkit. This program is not recognized as part of The Network Toolkit, and therefore WinPcap OEM will not work."); + WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("This version of OEM WinPcap can be only run in conjunction with CACE Technologies Network Toolkit. This program is not recognized as part of The Network Toolkit, and therefore OEM WinPcap will not work."); - MessageBox(NULL, "This version of WinPcap OEM can be only run in conjunction with CACE Technologies Network Toolkit.\nThis program is not recognized as part of The Network Toolkit, and therefore WinPcap OEM will not work.", "Error", MB_ICONERROR); + MessageBox(NULL, "This version of OEM WinPcap can be only run in conjunction with CACE Technologies Network Toolkit.\nThis program is not recognized as part of The Network Toolkit, and therefore OEM WinPcap will not work.", "Error", MB_ICONERROR); TRACE_EXIT("WoemEnterDllInternal"); return FALSE; } @@ -514,7 +514,7 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) // if(!WoemSaveResourceToDisk(g_DllHandle, IDP_DLLNT, g_DllFullPath)) { - WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Unable to copy the WinPcap OEM files. Administrative privileges are required for this operation."); + WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Unable to copy the OEM WinPcap files. Administrative privileges are required for this operation."); ReleaseMutex(g_hGlobalMutex); @@ -539,7 +539,7 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) // if(!WoemSaveResourceToDisk(g_DllHandle, IDP_DRINT, g_DriverFullPath)) { - WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Unable to copy the WinPcap OEM files. Administrative privileges are required for this operation."); + WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Unable to copy the OEM WinPcap files. Administrative privileges are required for this operation."); _unlink(g_DllFullPath); @@ -588,7 +588,7 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) // if(!WoemSaveResourceToDisk(g_DllHandle, IDP_DLL2K, g_DllFullPath)) { - WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Unable to copy the WinPcap OEM files. Administrative privileges are required for this operation."); + WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Unable to copy the OEM WinPcap files. Administrative privileges are required for this operation."); ReleaseMutex(g_hGlobalMutex); @@ -613,7 +613,7 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) // if(!WoemSaveResourceToDisk(g_DllHandle, IDP_DRI2K, g_DriverFullPath)) { - WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Unable to copy the WinPcap OEM files. Administrative privileges are required for this operation."); + WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Unable to copy the OEM WinPcap files. Administrative privileges are required for this operation."); _unlink(g_DllFullPath); @@ -646,7 +646,7 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) // if(!WoemSaveResourceToDisk(g_DllHandle, IDP_DLLNT, g_DllFullPath)) { - WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Unable to copy the WinPcap OEM files. Administrative privileges are required for this operation."); + WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Unable to copy the OEM WinPcap files. Administrative privileges are required for this operation."); ReleaseMutex(g_hGlobalMutex); @@ -671,7 +671,7 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) // if(!WoemSaveResourceToDisk(g_DllHandle, IDP_DRI2K, g_DriverFullPath)) { - WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Unable to copy the WinPcap OEM files. Administrative privileges are required for this operation."); + WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Unable to copy the OEM WinPcap files. Administrative privileges are required for this operation."); _unlink(g_DllFullPath); diff --git a/OEM/WinpcapOem/WinpcapOem.h b/OEM/WinpcapOem/WinpcapOem.h index d165c549..fc66b01c 100644 --- a/OEM/WinpcapOem/WinpcapOem.h +++ b/OEM/WinpcapOem/WinpcapOem.h @@ -71,14 +71,14 @@ BOOL WoemCreateBinaryNames(); #ifdef DEBUGTRACE #define TracePrint printf -#define WoemReportError() do{MessageBox(NULL, g_LastWoemError, "WinPcap OEM error", MB_OK); g_InitError = TRUE;} while(0) +#define WoemReportError() do{MessageBox(NULL, g_LastWoemError, "OEM WinPcap error", MB_OK); g_InitError = TRUE;} while(0) #else #define TracePrint #define WoemReportError() do{g_InitError = TRUE;}while(0) #endif // DEBUGTRACE #ifdef TRACE_MBOXES -#define TraceEnter(X) MessageBox(NULL, X, "WinPcap OEM trace", MB_OK) +#define TraceEnter(X) MessageBox(NULL, X, "OEM WinPcap trace", MB_OK) #elif defined TRACE_OUTPUTDEBUGSTRING #define TraceEnter(X) OutputDebugString(X) #else diff --git a/wpcap/pcap_oem.c b/wpcap/pcap_oem.c index b7ef80dd..8a26d613 100644 --- a/wpcap/pcap_oem.c +++ b/wpcap/pcap_oem.c @@ -7,7 +7,7 @@ /*! \ingroup wpcapfunc - \brief This function starts WinPcap OEM. + \brief This function starts OEM WinPcap. \param err_str pointer to a user-allocated buffer (of minimum size PCAP_ERRBUF_SIZE) that will contain the error message in case of failure. From 9e68f265212b3b86f39ce38bc699c66f46d198f7 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 22 Feb 2006 18:47:19 +0000 Subject: [PATCH 116/316] Fix due to a change in the parameters of create_docs_oem.bat --- build_wpdpack_oem.bat | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build_wpdpack_oem.bat b/build_wpdpack_oem.bat index 87bd2e9e..8c5d1ca9 100755 --- a/build_wpdpack_oem.bat +++ b/build_wpdpack_oem.bat @@ -14,7 +14,7 @@ call create_lib_oem.bat %__DEST_FOLDER% PAUSE call create_bin_oem.bat %__DEST_FOLDER% PAUSE -call create_examples_oem.bat ..\winpcap\ %__DEST_FOLDER% +call create_examples_oem.bat %__DEST_FOLDER% PAUSE call create_docs_oem.bat %__DEST_FOLDER% From deafb13a66cfe0c8b29778af4921f332f614f94a Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 22 Feb 2006 18:48:00 +0000 Subject: [PATCH 117/316] Added a short paragraph detailing how to use OEM WinPcap in a third party app. --- dox/intro.htm | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/dox/intro.htm b/dox/intro.htm index 4feef22b..012e7e66 100644 --- a/dox/intro.htm +++ b/dox/intro.htm @@ -72,6 +72,11 @@

What is OEM WinPcap

Server 2003. +

Including OEM WinPcap in your application and deploying it in your installer +is extremely easy, just follow the instructions in section +Using OEM WinPcap in your +programs.

+

What kind of programs use WinPcap

The WinPcap programming interface can be used by many types of network tools for analysis, troubleshooting, security and From b4e6c1dce6085cc756ac4bb4444b1515386c0ea1 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 22 Feb 2006 18:48:32 +0000 Subject: [PATCH 118/316] General reordering of the links. --- dox/header.htm | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/dox/header.htm b/dox/header.htm index 4acd4624..24a5d3af 100644 --- a/dox/header.htm +++ b/dox/header.htm @@ -12,8 +12,12 @@


- + From f70dc70ae8caeca38c6a16b30a6c1b2c3f47465f Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 22 Feb 2006 18:49:43 +0000 Subject: [PATCH 119/316] Removed an unneeded parameter. Added a check for the existence of a local copy of the examples. If not, call the script to regenerate the local copy of the examples. --- create_docs_oem.bat | 7 ++++++- create_examples_oem.bat | 10 ++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/create_docs_oem.bat b/create_docs_oem.bat index 181ddc89..f9cfcafa 100755 --- a/create_docs_oem.bat +++ b/create_docs_oem.bat @@ -2,6 +2,11 @@ IF "%1"=="" (set WPDPACKDESTDIR=.\WpdPack\) ELSE (set WPDPACKDESTDIR=%1) +IF NOT EXIST .\Examples ( + echo Copying the examples locally... + call create_local_examples.bat %1 %2 %3 + ) + echo Creating \docs folder mkdir %WPDPACKDESTDIR% >nul 2>nul mkdir %WPDPACKDESTDIR%\docs >nul 2>nul @@ -19,7 +24,7 @@ xcopy ..\pics\*.jpg docs\. /v /y /q popd -xcopy /v /Y ..\winpcap\dox\WinPcap_docs.html %WPDPACKDESTDIR%\docs\ +xcopy /v /Y .\dox\WinPcap_docs.html %WPDPACKDESTDIR%\docs\ xcopy /v /Y .\dox\prj\docs\*.* %WPDPACKDESTDIR%\docs\html\ xcopy /v /Y ..\winpcap\dox\*.gif %WPDPACKDESTDIR%\docs\html\ xcopy /v /Y ..\winpcap\dox\pics\*.gif %WPDPACKDESTDIR%\docs\html\ diff --git a/create_examples_oem.bat b/create_examples_oem.bat index 32601f1e..4f9c0937 100755 --- a/create_examples_oem.bat +++ b/create_examples_oem.bat @@ -1,8 +1,14 @@ @echo off -IF "%2"=="" (set WPDPACKDESTDIR=.\WpdPack\) ELSE (set WPDPACKDESTDIR=%2) +IF NOT EXIST .\Examples ( + echo Copying the examples locally... + call create_local_examples.bat + ) -IF ""=="%1" (set WINPCAPSOURCEDIR=.\) ELSE (set WINPCAPSOURCEDIR=%1) + +IF "%1"=="" (set WPDPACKDESTDIR=.\WpdPack\) ELSE (set WPDPACKDESTDIR=%1) + +set WINPCAPSOURCEDIR=.\ echo Creating \Examples folder mkdir %WPDPACKDESTDIR% >nul 2>nul From dddc58817d33d057e16ba42650f19d4aa787534c Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 22 Feb 2006 18:50:38 +0000 Subject: [PATCH 120/316] Added a script to create a local copy of the samples and patch them with the call to pcap_start_oem or PacketStartOem. --- Examples-pcap.diff | 169 +++++++++++++++++++++++++++++++++++ Examples.diff | 179 ++++++++++++++++++++++++++++++++++++++ create_local_examples.bat | 51 +++++++++++ 3 files changed, 399 insertions(+) create mode 100644 Examples-pcap.diff create mode 100644 Examples.diff create mode 100644 create_local_examples.bat diff --git a/Examples-pcap.diff b/Examples-pcap.diff new file mode 100644 index 00000000..5c22957f --- /dev/null +++ b/Examples-pcap.diff @@ -0,0 +1,169 @@ +diff -urb ..\winpcap\Examples-pcap/UDPdump/udpdump.c .\archive\Examples-pcap/UDPdump/udpdump.c +--- ..\winpcap\Examples-pcap/UDPdump/udpdump.c 2006-02-22 09:26:53.140625000 -0800 ++++ .\archive\Examples-pcap/UDPdump/udpdump.c 2006-02-13 12:56:33.203125000 -0800 +@@ -84,6 +83,13 @@ + char packet_filter[] = "ip and udp"; + struct bpf_program fcode; + ++ /* start OEM WinPcap */ ++ if (pcap_start_oem(errbuf, 0) == -1) ++ { ++ fprintf(stderr, "Error starting OEM WinPcap: %s\n", errbuf); ++ exit(1); ++ } ++ + /* Retrieve the device list */ + if(pcap_findalldevs(&alldevs, errbuf) == -1) + { +diff -urb ..\winpcap\Examples-pcap/basic_dump/basic_dump.c .\archive\Examples-pcap/basic_dump/basic_dump.c +--- ..\winpcap\Examples-pcap/basic_dump/basic_dump.c 2005-08-11 09:05:03.593750000 -0700 ++++ .\archive\Examples-pcap/basic_dump/basic_dump.c 2006-02-13 12:56:35.312500000 -0800 +@@ -12,6 +12,13 @@ + pcap_t *adhandle; + char errbuf[PCAP_ERRBUF_SIZE]; + ++ /* start OEM WinPcap */ ++ if (pcap_start_oem(errbuf, 0) == -1) ++ { ++ fprintf(stderr, "Error starting OEM WinPcap: %s\n", errbuf); ++ exit(1); ++ } ++ + /* Retrieve the device list */ + if(pcap_findalldevs(&alldevs, errbuf) == -1) + { +diff -urb ..\winpcap\Examples-pcap/basic_dump_ex/basic_dump_ex.c .\archive\Examples-pcap/basic_dump_ex/basic_dump_ex.c +--- ..\winpcap\Examples-pcap/basic_dump_ex/basic_dump_ex.c 2005-08-11 09:05:04.109375000 -0700 ++++ .\archive\Examples-pcap/basic_dump_ex/basic_dump_ex.c 2006-02-13 12:56:35.234375000 -0800 +@@ -15,6 +15,12 @@ + struct pcap_pkthdr *header; + const u_char *pkt_data; + ++ /* start OEM WinPcap */ ++ if (pcap_start_oem(errbuf, 0) == -1) ++ { ++ fprintf(stderr, "Error starting OEM WinPcap: %s\n", errbuf); ++ exit(1); ++ } + + /* Retrieve the device list */ + if(pcap_findalldevs(&alldevs, errbuf) == -1) +diff -urb ..\winpcap\Examples-pcap/iflist/iflist.c .\archive\Examples-pcap/iflist/iflist.c +--- ..\winpcap\Examples-pcap/iflist/iflist.c 2006-02-22 09:25:45.703125000 -0800 ++++ .\archive\Examples-pcap/iflist/iflist.c 2006-02-13 12:56:35.265625000 -0800 +@@ -54,6 +53,13 @@ + pcap_if_t *d; + char errbuf[PCAP_ERRBUF_SIZE+1]; + ++ /* start OEM WinPcap */ ++ if (pcap_start_oem(errbuf, 0) == -1) ++ { ++ fprintf(stderr, "Error starting OEM WinPcap: %s\n", errbuf); ++ exit(1); ++ } ++ + /* Retrieve the device list */ + if(pcap_findalldevs(&alldevs, errbuf) == -1) + { +diff -urb ..\winpcap\Examples-pcap/pcap_filter/pcap_filter.c .\archive\Examples-pcap/pcap_filter/pcap_filter.c +--- ..\winpcap\Examples-pcap/pcap_filter/pcap_filter.c 2006-02-22 09:25:57.937500000 -0800 ++++ .\archive\Examples-pcap/pcap_filter/pcap_filter.c 2006-02-13 12:56:35.078125000 -0800 +@@ -90,6 +89,13 @@ + } + } + ++ /* start OEM WinPcap */ ++ if (pcap_start_oem(errbuf, 0) == -1) ++ { ++ fprintf(stderr, "Error starting OEM WinPcap: %s\n", errbuf); ++ exit(1); ++ } ++ + // open a capture from the network + if (source != NULL) + { +diff -urb ..\winpcap\Examples-pcap/pktdump_ex/pktdump_ex.c .\archive\Examples-pcap/pktdump_ex/pktdump_ex.c +--- ..\winpcap\Examples-pcap/pktdump_ex/pktdump_ex.c 2006-02-22 09:26:10.031250000 -0800 ++++ .\archive\Examples-pcap/pktdump_ex/pktdump_ex.c 2006-02-13 12:56:35.343750000 -0800 +@@ -56,6 +55,13 @@ + " pktdump_ex -s file.acp\n" + " pktdump_ex -s \\Device\\NPF_{C8736017-F3C3-4373-94AC-9A34B7DAD998}\n\n"); + ++ /* start OEM WinPcap */ ++ if (pcap_start_oem(errbuf, 0) == -1) ++ { ++ fprintf(stderr, "Error starting OEM WinPcap: %s\n", errbuf); ++ exit(1); ++ } ++ + if(argc < 3) + { + printf("\nNo adapter selected: printing the device list:\n"); +diff -urb ..\winpcap\Examples-pcap/readfile/readfile.c .\archive\Examples-pcap/readfile/readfile.c +--- ..\winpcap\Examples-pcap/readfile/readfile.c 2005-08-11 09:05:06.437500000 -0700 ++++ .\archive\Examples-pcap/readfile/readfile.c 2006-02-13 12:56:35.015625000 -0800 +@@ -17,6 +17,13 @@ + + } + ++ /* start OEM WinPcap */ ++ if (pcap_start_oem(errbuf, 0) == -1) ++ { ++ fprintf(stderr, "Error starting OEM WinPcap: %s\n", errbuf); ++ exit(1); ++ } ++ + /* Open the capture file */ + if ((fp = pcap_open_offline(argv[1], // name of the device + errbuf // error buffer +diff -urb ..\winpcap\Examples-pcap/readfile_ex/readfile_ex.c .\archive\Examples-pcap/readfile_ex/readfile_ex.c +--- ..\winpcap\Examples-pcap/readfile_ex/readfile_ex.c 2005-08-11 09:05:06.765625000 -0700 ++++ .\archive\Examples-pcap/readfile_ex/readfile_ex.c 2006-02-13 12:56:35.187500000 -0800 +@@ -19,6 +19,13 @@ + + } + ++ /* start OEM WinPcap */ ++ if (pcap_start_oem(errbuf, 0) == -1) ++ { ++ fprintf(stderr, "Error starting OEM WinPcap: %s\n", errbuf); ++ exit(1); ++ } ++ + /* Open the capture file */ + if ((fp = pcap_open_offline(argv[1], // name of the device + errbuf // error buffer +diff -urb ..\winpcap\Examples-pcap/savedump/savedump.c .\archive\Examples-pcap/savedump/savedump.c +--- ..\winpcap\Examples-pcap/savedump/savedump.c 2005-08-11 09:05:07.015625000 -0700 ++++ .\archive\Examples-pcap/savedump/savedump.c 2006-02-13 12:56:35.109375000 -0800 +@@ -21,6 +21,13 @@ + return -1; + } + ++ /* start OEM WinPcap */ ++ if (pcap_start_oem(errbuf, 0) == -1) ++ { ++ fprintf(stderr, "Error starting OEM WinPcap: %s\n", errbuf); ++ exit(1); ++ } ++ + /* Retrieve the device list on the local machine */ + if (pcap_findalldevs(&alldevs, errbuf) == -1) + { +diff -urb ..\winpcap\Examples-pcap/sendpack/sendpack.c .\archive\Examples-pcap/sendpack/sendpack.c +--- ..\winpcap\Examples-pcap/sendpack/sendpack.c 2005-08-11 09:05:07.531250000 -0700 ++++ .\archive\Examples-pcap/sendpack/sendpack.c 2006-02-13 12:56:35.156250000 -0800 +@@ -18,6 +18,13 @@ + return 1; + } + ++ /* start OEM WinPcap */ ++ if (pcap_start_oem(errbuf, 0) == -1) ++ { ++ fprintf(stderr, "Error starting OEM WinPcap: %s\n", errbuf); ++ exit(1); ++ } ++ + /* Open the adapter */ + if ((fp = pcap_open_live(argv[1], // name of the device + 65536, // portion of the packet to capture. It doesn't matter in this case diff --git a/Examples.diff b/Examples.diff new file mode 100644 index 00000000..401cfd70 --- /dev/null +++ b/Examples.diff @@ -0,0 +1,179 @@ +diff -urb ..\winpcap\Examples/PacketDriver/GetMacAddress/GetMacAddress.c .\Examples/PacketDriver/GetMacAddress/GetMacAddress.c +--- ..\winpcap\Examples/PacketDriver/GetMacAddress/GetMacAddress.c 2006-02-22 09:21:17.375000000 -0800 ++++ .\Examples/PacketDriver/GetMacAddress/GetMacAddress.c 2006-02-22 10:03:02.578125000 -0800 +@@ -50,6 +50,16 @@ + ULONG AdapterLength; + PPACKET_OID_DATA OidData; + BOOLEAN Status; ++ CHAR ErrBuffer[1024]; ++ ++ // ++ // start OEM WinPcap ++ // ++ if(PacketStartOem(ErrBuf, sizeof(ErrBuffer)) == FALSE) ++ { ++ printf("Cannot start OEM WinPcap: %s\n", ErrBuffer); ++ return -1; ++ } + + // + // Obtain the name of the adapters installed on this machine +diff -urb ..\winpcap\Examples/PacketDriver/TestPacketCapture/TestPacketCapture.c .\Examples/PacketDriver/TestPacketCapture/TestPacketCapture.c +--- ..\winpcap\Examples/PacketDriver/TestPacketCapture/TestPacketCapture.c 2006-02-22 09:21:27.312500000 -0800 ++++ .\Examples/PacketDriver/TestPacketCapture/TestPacketCapture.c 2006-02-22 09:58:27.156250000 -0800 +@@ -72,6 +72,17 @@ + + struct bpf_stat stat; + ++ CHAR ErrBuffer[1024]; ++ ++ // ++ // start OEM WinPcap ++ // ++ if(PacketStartOem(ErrBuf, sizeof(ErrBuffer)) == FALSE) ++ { ++ printf("Cannot start OEM WinPcap: %s\n", ErrBuffer); ++ return -1; ++ } ++ + // + // Obtain the name of the adapters installed on this machine + // +diff -urb ..\winpcap\Examples/PacketDriver/TestPacketSend/TestPacketSend.c .\Examples/PacketDriver/TestPacketSend/TestPacketSend.c +--- ..\winpcap\Examples/PacketDriver/TestPacketSend/TestPacketSend.c 2006-02-22 09:21:48.671875000 -0800 ++++ .\Examples/PacketDriver/TestPacketSend/TestPacketSend.c 2006-02-22 09:58:52.984375000 -0800 +@@ -81,6 +81,16 @@ + return -1; + } + ++ CHAR ErrBuffer[1024]; ++ ++ // ++ // start OEM WinPcap ++ // ++ if(PacketStartOem(ErrBuf, sizeof(ErrBuffer)) == FALSE) ++ { ++ printf("Cannot start OEM WinPcap: %s\n", ErrBuffer); ++ return -1; ++ } + + AdapterName[0]=0; + +diff -urb ..\winpcap\Examples/UDPdump/udpdump.c .\Examples/UDPdump/udpdump.c +--- ..\winpcap\Examples/UDPdump/udpdump.c 2006-02-22 09:22:47.093750000 -0800 ++++ .\Examples/UDPdump/udpdump.c 2006-02-22 10:03:02.578125000 -0800 +@@ -80,6 +80,13 @@ + char packet_filter[] = "ip and udp"; + struct bpf_program fcode; + ++ /* start OEM WinPcap */ ++ if (pcap_start_oem(errbuf, 0) == -1) ++ { ++ fprintf(stderr, "Error starting OEM WinPcap: %s\n", errbuf); ++ exit(1); ++ } ++ + /* Retrieve the device list */ + if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1) + { +diff -urb ..\winpcap\Examples/iflist/iflist.c .\Examples/iflist/iflist.c +--- ..\winpcap\Examples/iflist/iflist.c 2006-02-22 09:17:18.406250000 -0800 ++++ .\Examples/iflist/iflist.c 2006-02-22 10:03:02.593750000 -0800 +@@ -54,6 +54,13 @@ + char errbuf[PCAP_ERRBUF_SIZE+1]; + char source[PCAP_ERRBUF_SIZE+1]; + ++ /* start OEM WinPcap */ ++ if (pcap_start_oem(errbuf, 0) == -1) ++ { ++ fprintf(stderr, "Error starting OEM WinPcap: %s\n", errbuf); ++ exit(1); ++ } ++ + printf("Enter the device you want to list:\n" + "rpcap:// ==> lists interfaces in the local machine\n" + "rpcap://hostname:port ==> lists interfaces in a remote machine\n" +diff -urb ..\winpcap\Examples/misc/basic_dump.c .\Examples/misc/basic_dump.c +--- ..\winpcap\Examples/misc/basic_dump.c 2003-07-08 00:21:29.000000000 -0700 ++++ .\Examples/misc/basic_dump.c 2006-02-22 10:01:01.500000000 -0800 +@@ -12,6 +12,13 @@ + pcap_t *adhandle; + char errbuf[PCAP_ERRBUF_SIZE]; + ++ /* start OEM WinPcap */ ++ if (pcap_start_oem(errbuf, 0) == -1) ++ { ++ fprintf(stderr, "Error starting OEM WinPcap: %s\n", errbuf); ++ exit(1); ++ } ++ + /* Retrieve the device list on the local machine */ + if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1) + { +diff -urb ..\winpcap\Examples/misc/basic_dump_ex.c .\Examples/misc/basic_dump_ex.c +--- ..\winpcap\Examples/misc/basic_dump_ex.c 2003-07-08 00:21:29.000000000 -0700 ++++ .\Examples/misc/basic_dump_ex.c 2006-02-22 10:01:34.390625000 -0800 +@@ -15,6 +15,12 @@ + struct pcap_pkthdr *header; + u_char *pkt_data; + ++ /* start OEM WinPcap */ ++ if (pcap_start_oem(errbuf, 0) == -1) ++ { ++ fprintf(stderr, "Error starting OEM WinPcap: %s\n", errbuf); ++ exit(1); ++ } + + /* Retrieve the device list on the local machine */ + if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1) +diff -urb ..\winpcap\Examples/pcap_filter/pcap_filter.c .\Examples/pcap_filter/pcap_filter.c +--- ..\winpcap\Examples/pcap_filter/pcap_filter.c 2006-02-22 09:20:48.781250000 -0800 ++++ .\Examples/pcap_filter/pcap_filter.c 2006-02-22 10:03:02.593750000 -0800 +@@ -90,6 +90,13 @@ + } + } + ++ /* start OEM WinPcap */ ++ if (pcap_start_oem(errbuf, 0) == -1) ++ { ++ fprintf(stderr, "Error starting OEM WinPcap: %s\n", errbuf); ++ exit(1); ++ } ++ + // open a capture from the network + if (source != NULL) + { +diff -urb ..\winpcap\Examples/pktdump_ex/pktdump_ex.c .\Examples/pktdump_ex/pktdump_ex.c +--- ..\winpcap\Examples/pktdump_ex/pktdump_ex.c 2006-02-22 09:21:02.578125000 -0800 ++++ .\Examples/pktdump_ex/pktdump_ex.c 2006-02-22 10:03:02.593750000 -0800 +@@ -56,6 +56,13 @@ + " pktdump_ex -s file://c:/temp/file.acp\n" + " pktdump_ex -s rpcap://\\Device\\NPF_{C8736017-F3C3-4373-94AC-9A34B7DAD998}\n\n"); + ++ /* start OEM WinPcap */ ++ if (pcap_start_oem(errbuf, 0) == -1) ++ { ++ fprintf(stderr, "Error starting OEM WinPcap: %s\n", errbuf); ++ exit(1); ++ } ++ + if(argc < 3) + { + +diff -urb ..\winpcap\Examples/smp_1/smp_1.c .\Examples/smp_1/smp_1.c +--- ..\winpcap\Examples/smp_1/smp_1.c 2006-02-22 09:22:20.046875000 -0800 ++++ .\Examples/smp_1/smp_1.c 2006-02-22 10:03:02.609375000 -0800 +@@ -57,6 +57,13 @@ + printf("and that the caplen is equal to the packet length.\n"); + printf("If there is an error, it will print out a message saying \"Inconsistent XXX\"\n"); + ++ /* start OEM WinPcap */ ++ if (pcap_start_oem(errbuf, 0) == -1) ++ { ++ fprintf(stderr, "Error starting OEM WinPcap: %s\n", errbuf); ++ exit(1); ++ } ++ + if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1) + { + fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf); diff --git a/create_local_examples.bat b/create_local_examples.bat new file mode 100644 index 00000000..d6179cd2 --- /dev/null +++ b/create_local_examples.bat @@ -0,0 +1,51 @@ +@echo off + +set DESTDIR=.\ + +set SOURCEDIR=..\winpcap\ + +echo Creating Local Examples folders +mkdir %DESTDIR%\Examples-pcap >nul 2>nul +mkdir %DESTDIR%\Examples >nul 2>nul + +xcopy /s/e/v /Y %SOURCEDIR%\Examples %DESTDIR%\Examples + +xcopy /s/e/v /Y %SOURCEDIR%\Examples-pcap %DESTDIR%\Examples-pcap + +rem *** Apply the patches for the OEM initialization *** + +copy /v /y Examples.diff %DESTDIR%\Examples\. +copy /v /y Examples-pcap.diff %DESTDIR%\Examples-pcap\. + +pushd %DESTDIR%\Examples\ +patch -p1 < Examples.diff + +if NOT %ERRORLEVEL%==0 ( + echo ---- Error patching the examples!! + pause + ) +del Examples.diff > nul 2>nul + +popd + +pushd %DESTDIR%\Examples-pcap\ +patch -p1 < Examples-pcap.diff + +if NOT %ERRORLEVEL%==0 ( + echo ---- Error patching the examples-pcap!! + pause + ) +del Examples-pcap.diff > nul 2>nul + +popd + + +echo Local Examples created successfully +set DESTDIR= +set SOURCEDIR= + +echo ************************************************************************* +echo * * +echo * Now you can build the documentation from the developers' pack folder! * +echo * * +echo ************************************************************************* From bc18d59b36a3ee918ea1b1ef247642040764ea44 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 22 Feb 2006 18:55:03 +0000 Subject: [PATCH 121/316] Added a local copy of some documentation files. --- dox/WinPcap_docs.html | 9 ++++++++ dox/style.css | 48 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 dox/WinPcap_docs.html create mode 100644 dox/style.css diff --git a/dox/WinPcap_docs.html b/dox/WinPcap_docs.html new file mode 100644 index 00000000..3b9be927 --- /dev/null +++ b/dox/WinPcap_docs.html @@ -0,0 +1,9 @@ + + + + + + + diff --git a/dox/style.css b/dox/style.css new file mode 100644 index 00000000..7c2b4fbe --- /dev/null +++ b/dox/style.css @@ -0,0 +1,48 @@ +body,td +{ + background-color: #FFFFFF; + font-family: Verdana,Arial,Helvetica; + font-size: 0.8em; +} + +td,th +{ + vertical-align: top; +} + +th +{ + font-size: 1em; + text-align: center; + background-color: #FFFFCC; +} + +code,pre +{ + font-size: 1em; +} + + +H1 { text-align: center; } +A.qindex {} +A.qindexRef {} +A.el { text-decoration: none; font-weight: bold } +A.elRef { font-weight: bold } +A.code { text-decoration: none; font-weight: normal; color: #4444ee } +A.codeRef { font-weight: normal; color: #4444ee } +A:hover { text-decoration: none; background-color: #f2f2ff } +DL.el { margin-left: -1cm } +DIV.fragment { width: 100%; border: none; background-color: #eeeeee } +DIV.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px } +TD.md { background-color: #f2f2ff; font-weight: bold; font-size: 0.8em; } +TD.mdname1 { background-color: #f2f2ff; font-weight: bold; color: #602020; } +TD.mdname { background-color: #f2f2ff; font-weight: bold; color: #602020; width: 600px; } +DIV.groupHeader { margin-left: 16px; margin-top: 12px; margin-bottom: 6px; font-weight: bold } +DIV.groupText { margin-left: 16px; font-style: italic; font-size: smaller } +FONT.keyword { color: #008000 } +FONT.keywordtype { color: #604020 } +FONT.keywordflow { color: #e08000 } +FONT.comment { color: #800000 } +FONT.preprocessor { color: #806020 } +FONT.stringliteral { color: #002080 } +FONT.charliteral { color: #008080 } From ea935ecdb81f92dfb7c8f55673e18e1869aee9d9 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 22 Feb 2006 23:50:31 +0000 Subject: [PATCH 122/316] Added two new configurations, so that the TNT build is separated from the OEM one. --- WinPcap OEM.sln | 8 +-- wpcap/PRJ/wpcap.vcproj | 160 +++++++++++++++++++++++++++++++++++++---- 2 files changed, 152 insertions(+), 16 deletions(-) diff --git a/WinPcap OEM.sln b/WinPcap OEM.sln index e607efc9..b27e5752 100644 --- a/WinPcap OEM.sln +++ b/WinPcap OEM.sln @@ -60,12 +60,12 @@ Global {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release_TNT.Build.0 = Release_TNT|Win32 {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Debug.ActiveCfg = Debug REMOTE|Win32 {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Debug.Build.0 = Debug REMOTE|Win32 - {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Debug_TNT.ActiveCfg = Debug REMOTE|Win32 - {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Debug_TNT.Build.0 = Debug REMOTE|Win32 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Debug_TNT.ActiveCfg = Debug REMOTE TNT|Win32 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Debug_TNT.Build.0 = Debug REMOTE TNT|Win32 {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release.ActiveCfg = Release REMOTE|Win32 {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release.Build.0 = Release REMOTE|Win32 - {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release_TNT.ActiveCfg = Release REMOTE|Win32 - {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release_TNT.Build.0 = Release REMOTE|Win32 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release_TNT.ActiveCfg = Release REMOTE TNT|Win32 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release_TNT.Build.0 = Release REMOTE TNT|Win32 EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution EndGlobalSection diff --git a/wpcap/PRJ/wpcap.vcproj b/wpcap/PRJ/wpcap.vcproj index 16e4a099..8c3f13fa 100644 --- a/wpcap/PRJ/wpcap.vcproj +++ b/wpcap/PRJ/wpcap.vcproj @@ -12,9 +12,9 @@ @@ -41,14 +41,14 @@ @@ -79,6 +79,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From bb2eeefc5929ce7a70ecce49f3e65dde1fc71c5f Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Thu, 23 Feb 2006 00:03:35 +0000 Subject: [PATCH 123/316] Added a document explaining how to release OEM WinPcap. --- release procedures WOEM.txt | 128 ++++++++++++++++++++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 release procedures WOEM.txt diff --git a/release procedures WOEM.txt b/release procedures WOEM.txt new file mode 100644 index 00000000..b96927d0 --- /dev/null +++ b/release procedures WOEM.txt @@ -0,0 +1,128 @@ +OEM WINPCAP RELEASE PROCEDURE +============================= +GV20060222 + +Needed tools +------------ + +- Visual Studio .NET 2003 +- The cygnus environment on your path (needed to execute step 11 and 12). + In particular you will need to have flex, bison, patch. +- Doxygen 1.3.7 installed and on the path + +How to compile OEM WinPcap (NOT for the Toolkit) +------------------------------------------------ + +1. Download winpcap (HEAD) and winpcap_oem from the CVS into %BUILD_TREE% + +2. Modify the version info into + %BUILD_TREE%\winpcap_oem\version.h. The version is x.y.2.z + +3. Modify the doxumentation version in the file + %BUILD_TREE%\winpcap_oem\dox\prj\winpcap_oem_noc.dox + +4. Modify the device string into + %BUILD_TREE%\winpcap\common\wpcapnames.h (first two defines) + +5. Download the libpcap sources (usually 0_9 branch) into + %BUILD_TREE%\libpcap_ + +6. Commit %BUILD_TREE%\winpcap_oem\version.h into the CVS. This should be the + *only* modified file in this module. + +7. Tag the %BUILD_TREE%\winpcap_oem module with the tag + OEM_WINPCAP__WOEM_ + +8. Tag the %BUILD_TREE%\winpcap module with the tag + OEM_WINPCAP__WOEM_ + +9. Take the contents of %BUILD_TREE%\libpcap_ and copy it into + %BUILD_TREE%\winpcap\wpcap\libpcap + (confirm the overwrite operation) + +10. From the command line, go to folder + %BUILD_TREE%\winpcap\wpcap\libpcap + +11. On the command line, type "patch -p1 < remote_code.patch" + +12. CD into %BUILD_TREE%\winpcap\wpcap\prj and execute + "build_scanner_parser.bat" + +13. Zip the contents of the three folders + %BUILD_TREE%\winpcap_oem + %BUILD_TREE%\winpcap + %BUILD_TREE%\libpcap_ + | + V + %BUILD_TREE%\sources.zip + +14. Open a Win 2000 DDK Free build environment. Go into + %BUILD_TREE%\winpcap_oem\packetntx. + Execute "compile2k_oem.bat". Prefast 1.5.2402 should issue 18 warnings + (20060222). + Close the build environment. + +15. Open the WinNT4 DDK Release build environment. Go into + %BUILD_TREE%\winpcap_oem\packetntx. + Execute "compileNT4_oem.bat". An error "The system cannot find the file + specified" should be issued (20060126), it's normal. Close the build + environment. + NOTE: DO NOT EXECUTE 14. and 15. at the same time, they overwrite files in + the build process that are incompatible between the two builds. + +16. Open %BUILD_TREE%\winpcap_oem\WinPcap OEM.sln with Visual Studio 2003. + Choose the Debug configuration, and then use Build->Rebuild Solution. + Choose the Release configuration, and then use Build->Rebuild Solution. + Some warnings should be issued only for the Wpcap.dll project. + Close Visual Studio. + +17. The build is complete. + The DLLs are in the following folders: + + %BUILD_TREE%\winpcap_oem\wpcap\PRJ\release_REMOTE\wpcap.dll + %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\Release\packet.dll + +18. Check the DLLs/SYSs files for the versions + %BUILD_TREE%\winpcap_oem\wpcap\PRJ\release_REMOTE\wpcap.dll + %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\Release\packet.dll + %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\binaries\npf2k.sys + %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\binaries\npfnt.sys + %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\binaries\packet2k.sys + %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\binaries\packetnt.sys + +How to create the developer's pack for OEM WinPcap (NOT for the Toolkit) +------------------------------------------------------------------------ + +1. After the build is completed, in a command prompt go to + + %BUILD_TREE%\winpcap_oem + +2. Run "build_wpdpack_oem.bat". The script will pause after each step of the + build: + a. Creation of the include folder (no errors/warnings) + b. Creation of the lib folder (no errors/warnings) + c. Creation of the bin folder (no errors/warnings) + d. Creation of the Examples and Examples-pcap folders (no errors/warnings) + e. creation of the documentation. Some warnings/errors are generated: + - a Doxygen warning processing the file winpcap/dox/libpcap/funcs/pcap.h + - an error copying some *.gif files. + + +SCM procedures +-------------- + +1. %BUILD_TREE%\winpcap_oem\wpdpack\ + | + v + OEM_WinPcap__WOEM__WpdPack.zip + +2. %BUILD_TREE%\Sources.zip + | + V + OEM_WinPcap__WOEM__Sources.zip + +3. %BUILD_TREE%\ + | + V + OEM_WinPcap__WOEM__Build_Tree.zip + \ No newline at end of file From a08412930ab4b5d384d88c4b01279084f1aa56e0 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Thu, 23 Feb 2006 00:09:06 +0000 Subject: [PATCH 124/316] Removed the dependency on VS6. Updated the number of warnings issued by PREFast 1.5.2402. --- release procedures TNT OEM.txt | 40 +++++++++++----------------------- 1 file changed, 13 insertions(+), 27 deletions(-) diff --git a/release procedures TNT OEM.txt b/release procedures TNT OEM.txt index 57bdf7d0..a9a2336f 100644 --- a/release procedures TNT OEM.txt +++ b/release procedures TNT OEM.txt @@ -4,12 +4,7 @@ OEM WINPCAP TOOLKIT RELEASE PROCEDURE Needed tools ------------ - Visual Studio .NET 2003 -- Visual Studio 6 SP5 or SP6 -- A recent version of the Microsoft Platform Software Development Kit (SDK) that - is compatible with Visual Studio 6 (the latest compatible one is Platform SDK - February 2003). This version of the SDK is available on the Microsoft web site - at http://www.microsoft.com/msdownload/platformsdk/sdkupdate/psdk-full.htm. -- The cygnus environment on your path (needed to execute step 12 and 13). +- The cygnus environment on your path (needed to execute step 10 and 11). How to compile OEM WinPcap for the toolkit. @@ -44,14 +39,10 @@ How to compile OEM WinPcap for the toolkit. 10. On the command line, type "patch -p1 < remote_code.patch" -11. CD into win32\Prj - -12. Type unix2dos * - -13. CD into %BUILD_TREE%\winpcap\wpcap\prj and execute +11. CD into %BUILD_TREE%\winpcap\wpcap\prj and execute "build_scanner_parser.bat" -14. Zip the contents of the three folders +12. Zip the contents of the three folders %BUILD_TREE%\winpcap_oem %BUILD_TREE%\winpcap %BUILD_TREE%\libpcap_ @@ -59,17 +50,12 @@ How to compile OEM WinPcap for the toolkit. V %BUILD_TREE%\sources.zip -15. Open %BUILD_TREE%\winpcap\wpcap\libpcap\win32\prj\libpcap.dsw from Visual - Studio 6 and compile all the configurations using Build->Batch Build, - selecting all the configurations and then Rebuild All. Close Visual Studio. - NOTE. a lot of warnings related to the libpcap sources are usually raised. - -16. Open a Win 2000 DDK Free build environment. Go into +13. Open a Win 2000 DDK Free build environment. Go into %BUILD_TREE%\winpcap_oem\packetntx. - Execute "compile2k_oem.bat". Prefast should issue 3 warnings (20060126). + Execute "compile2k_oem.bat". Prefast 1.5.2402 should issue 18 warnings (20060222). Close the build environment. -17. Open the WinNT4 DDK Release build environment. Go into +14. Open the WinNT4 DDK Release build environment. Go into %BUILD_TREE%\winpcap_oem\packetntx. Execute "compileNT4_oem.bat". An error "The system cannot find the file specified" should be issued (20060126), it's normal. Close the build @@ -77,22 +63,22 @@ How to compile OEM WinPcap for the toolkit. NOTE: DO NOT EXECUTE 16. and 17. at the same time, they overwrite files in the build process that are incompatible between the two builds. -18. Open %BUILD_TREE%\winpcap_oem\WinPcap OEM.sln with Visual Studio 2003. +15. Open %BUILD_TREE%\winpcap_oem\WinPcap OEM.sln with Visual Studio 2003. Choose the Debug_TNT configuration, and then use Build->Rebuild Solution. NOTE: a linker warning (LNK4075: ignoring EDITANDCONTINUE...) should be issued. Choose the Release_TNT configuration, and then use Build->Rebuild Solution. - No warnings should be issued. + Some warnings should be issued related to the wpcap.dll project, only. Close Visual Studio. -19. The build is complete. +16. The build is complete. The DLLs are in the following folders: - %BUILD_TREE%\winpcap_oem\wpcap\PRJ\release_REMOTE\wpcap.dll + %BUILD_TREE%\winpcap_oem\wpcap\PRJ\release_REMOTE_TNT\wpcap.dll %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\Release_TNT\packet.dll -20. Check the DLLs/SYSs files for the versions - %BUILD_TREE%\winpcap_oem\wpcap\PRJ\release_REMOTE\wpcap.dll +17. Check the DLLs/SYSs files for the versions + %BUILD_TREE%\winpcap_oem\wpcap\PRJ\release_REMOTE_TNT\wpcap.dll %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\Release_TNT\packet.dll %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\binaries\npf2k.sys %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\binaries\npfnt.sys @@ -103,7 +89,7 @@ How to compile OEM WinPcap for the toolkit. SCM procedures -------------- -1. %BUILD_TREE%\winpcap_oem\wpcap\PRJ\release_REMOTE\wpcap.dll +1. %BUILD_TREE%\winpcap_oem\wpcap\PRJ\release_REMOTE_TNT\wpcap.dll %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\Release_TNT\packet.dll | v From 91e7d25588fa559d06df09787b611ede70dbec1e Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Thu, 23 Feb 2006 19:53:22 +0000 Subject: [PATCH 125/316] Added the Software License Agreement to the repository. --- OEM WinPcap License Agreement.pdf | Bin 0 -> 53975 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 OEM WinPcap License Agreement.pdf diff --git a/OEM WinPcap License Agreement.pdf b/OEM WinPcap License Agreement.pdf new file mode 100644 index 0000000000000000000000000000000000000000..adfc96f204e3e8c8e49eb5c4870a97fec3e46ee3 GIT binary patch literal 53975 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 Date: Thu, 23 Feb 2006 19:53:56 +0000 Subject: [PATCH 126/316] Added a build step to copy the License to the developer's pack. --- build_wpdpack_oem.bat | 2 ++ 1 file changed, 2 insertions(+) diff --git a/build_wpdpack_oem.bat b/build_wpdpack_oem.bat index 8c5d1ca9..703f580d 100755 --- a/build_wpdpack_oem.bat +++ b/build_wpdpack_oem.bat @@ -17,5 +17,7 @@ PAUSE call create_examples_oem.bat %__DEST_FOLDER% PAUSE call create_docs_oem.bat %__DEST_FOLDER% +echo Copying the license agreement file +xcopy /v "OEM WinPcap License Agreement.pdf" %__DEST_FOLDER% set __DEST_FOLDER= From a10788efff7781073d9dfce008449176bdde9e72 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Thu, 23 Feb 2006 20:42:52 +0000 Subject: [PATCH 127/316] Fixed some wrong comment related to the modified files in winpcap_oem that should be committed for a release. --- release procedures WOEM.txt | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/release procedures WOEM.txt b/release procedures WOEM.txt index b96927d0..8a454999 100644 --- a/release procedures WOEM.txt +++ b/release procedures WOEM.txt @@ -27,8 +27,12 @@ How to compile OEM WinPcap (NOT for the Toolkit) 5. Download the libpcap sources (usually 0_9 branch) into %BUILD_TREE%\libpcap_ -6. Commit %BUILD_TREE%\winpcap_oem\version.h into the CVS. This should be the - *only* modified file in this module. +6. Commit + + %BUILD_TREE%\winpcap_oem\version.h + %BUILD_TREE%\winpcap_oem\dox\prj\winpcap_oem_noc.dox + + into the CVS. These should be the *only* modified filew in this module. 7. Tag the %BUILD_TREE%\winpcap_oem module with the tag OEM_WINPCAP__WOEM_ From 1d2a2f75ffc38c4d9321724542efff4167ffb502 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Thu, 23 Feb 2006 20:43:34 +0000 Subject: [PATCH 128/316] Updated version to 3.2.2.418 (i.e. OEM WinPcap 3.2). --- dox/prj/winpcap_oem_noc.dox | 2 +- version.h | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/dox/prj/winpcap_oem_noc.dox b/dox/prj/winpcap_oem_noc.dox index 6a540a20..a637927b 100644 --- a/dox/prj/winpcap_oem_noc.dox +++ b/dox/prj/winpcap_oem_noc.dox @@ -4,7 +4,7 @@ # Project related configuration options #--------------------------------------------------------------------------- PROJECT_NAME = "OEM WinPcap" -PROJECT_NUMBER = 3.2.1.337 +PROJECT_NUMBER = 3.2.2.419 OUTPUT_DIRECTORY = ./ CREATE_SUBDIRS = NO OUTPUT_LANGUAGE = English diff --git a/version.h b/version.h index 3b25fd63..d96550c6 100644 --- a/version.h +++ b/version.h @@ -14,15 +14,15 @@ #define WINPCAPOEM_MAJOR 3 #define WINPCAPOEM_MINOR 2 -#define WINPCAPOEM_REV 1 -#define WINPCAPOEM_BUILD 391 +#define WINPCAPOEM_REV 2 +#define WINPCAPOEM_BUILD 419 -#define WINPCAPOEM_VER_STRING "3.2.1.391.tnt" +#define WINPCAPOEM_VER_STRING "3.2.2.419.tnt" #define WINPCAPOEM_COMPANY_NAME "CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_NAME "Packet.dll Wrapper" -#define WINPCAPOEM_VERSION_STRING "3.2.1.391.tnt" +#define WINPCAPOEM_VERSION_STRING "3.2.2.419.tnt" #define WINPCAPOEM_PRODUCT_NAME "OEM WinPcap" #define WINPCAPOEM_COPYRIGHT_STRING "Copyright © 2005-2006 CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_FILENAME "Packet.dll (wrapper)" From 65e0b530de0d88558d63a1bd5eaf850c727a6985 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Thu, 23 Feb 2006 20:46:14 +0000 Subject: [PATCH 129/316] Fixed the names of the zip files for SCM archival. --- release procedures WOEM.txt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/release procedures WOEM.txt b/release procedures WOEM.txt index 8a454999..68b2ec3d 100644 --- a/release procedures WOEM.txt +++ b/release procedures WOEM.txt @@ -35,10 +35,10 @@ How to compile OEM WinPcap (NOT for the Toolkit) into the CVS. These should be the *only* modified filew in this module. 7. Tag the %BUILD_TREE%\winpcap_oem module with the tag - OEM_WINPCAP__WOEM_ + OEM_WINPCAP__WOEM 8. Tag the %BUILD_TREE%\winpcap module with the tag - OEM_WINPCAP__WOEM_ + OEM_WINPCAP__WOEM 9. Take the contents of %BUILD_TREE%\libpcap_ and copy it into %BUILD_TREE%\winpcap\wpcap\libpcap @@ -118,15 +118,15 @@ SCM procedures 1. %BUILD_TREE%\winpcap_oem\wpdpack\ | v - OEM_WinPcap__WOEM__WpdPack.zip + OEM_WinPcap__WOEM_WpdPack.zip 2. %BUILD_TREE%\Sources.zip | V - OEM_WinPcap__WOEM__Sources.zip + OEM_WinPcap__WOEM_Sources.zip 3. %BUILD_TREE%\ | V - OEM_WinPcap__WOEM__Build_Tree.zip + OEM_WinPcap__WOEM_Build_Tree.zip \ No newline at end of file From 2ace9071950534d9bcf692ddb0d2bc81bbcbf54d Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Thu, 23 Feb 2006 21:16:09 +0000 Subject: [PATCH 130/316] Renamed WinPcap_docs.html into OEM_WinPcap_docs.html. --- dox/{WinPcap_docs.html => OEM_WinPcap_docs.html} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename dox/{WinPcap_docs.html => OEM_WinPcap_docs.html} (100%) diff --git a/dox/WinPcap_docs.html b/dox/OEM_WinPcap_docs.html similarity index 100% rename from dox/WinPcap_docs.html rename to dox/OEM_WinPcap_docs.html From 67c98315689c8090d7e08a1159b0be2f2b736aa2 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Thu, 23 Feb 2006 21:21:14 +0000 Subject: [PATCH 131/316] Renamed WinPcap_docs.html into OEM_WinPcap_docs.html. --- create_docs_oem.bat | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/create_docs_oem.bat b/create_docs_oem.bat index f9cfcafa..be14e7de 100755 --- a/create_docs_oem.bat +++ b/create_docs_oem.bat @@ -24,7 +24,7 @@ xcopy ..\pics\*.jpg docs\. /v /y /q popd -xcopy /v /Y .\dox\WinPcap_docs.html %WPDPACKDESTDIR%\docs\ +xcopy /v /Y .\dox\OEM_WinPcap_docs.html %WPDPACKDESTDIR%\docs\ xcopy /v /Y .\dox\prj\docs\*.* %WPDPACKDESTDIR%\docs\html\ xcopy /v /Y ..\winpcap\dox\*.gif %WPDPACKDESTDIR%\docs\html\ xcopy /v /Y ..\winpcap\dox\pics\*.gif %WPDPACKDESTDIR%\docs\html\ From e2946c2c45b4ba01fcea534c6acb076a9bdb7f4b Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Thu, 23 Feb 2006 21:21:37 +0000 Subject: [PATCH 132/316] Windows 2000 was missing in the list of supported OSes. --- dox/intro.htm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dox/intro.htm b/dox/intro.htm index 012e7e66..a17a9384 100644 --- a/dox/intro.htm +++ b/dox/intro.htm @@ -68,7 +68,7 @@

What is OEM WinPcap

installed on the target machine, since OEM WinPcap loads its own drivers.
  • loads the driver when the user starts your application, unloads the driver when the user closes your application.
  • -
  • support for Windows NT4, Windows XP, Windows +
  • support for Windows NT4, Windows 2000, Windows XP, Windows Server 2003.
  • From 372fae712b283620863d6e1d9a9d5f05062ec8ac Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Thu, 23 Feb 2006 21:30:23 +0000 Subject: [PATCH 133/316] Updated to the correct version (it's 3.2.2.419.oem for OEM WinPcap!!). --- version.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/version.h b/version.h index d96550c6..812650fb 100644 --- a/version.h +++ b/version.h @@ -17,12 +17,12 @@ #define WINPCAPOEM_REV 2 #define WINPCAPOEM_BUILD 419 -#define WINPCAPOEM_VER_STRING "3.2.2.419.tnt" +#define WINPCAPOEM_VER_STRING "3.2.2.419.oem" #define WINPCAPOEM_COMPANY_NAME "CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_NAME "Packet.dll Wrapper" -#define WINPCAPOEM_VERSION_STRING "3.2.2.419.tnt" +#define WINPCAPOEM_VERSION_STRING "3.2.2.419.oem" #define WINPCAPOEM_PRODUCT_NAME "OEM WinPcap" #define WINPCAPOEM_COPYRIGHT_STRING "Copyright © 2005-2006 CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_FILENAME "Packet.dll (wrapper)" From ce7a09a86b824eee3e6c6e15b68cc5c82ee4e1f8 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Tue, 18 Apr 2006 15:45:12 +0000 Subject: [PATCH 134/316] Updated version to 3.2.2.473 (i.e. OEM WinPcap 3.2a). --- dox/prj/winpcap_oem_noc.dox | 2 +- version.h | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dox/prj/winpcap_oem_noc.dox b/dox/prj/winpcap_oem_noc.dox index a637927b..2fceef82 100644 --- a/dox/prj/winpcap_oem_noc.dox +++ b/dox/prj/winpcap_oem_noc.dox @@ -4,7 +4,7 @@ # Project related configuration options #--------------------------------------------------------------------------- PROJECT_NAME = "OEM WinPcap" -PROJECT_NUMBER = 3.2.2.419 +PROJECT_NUMBER = 3.2.2.473 OUTPUT_DIRECTORY = ./ CREATE_SUBDIRS = NO OUTPUT_LANGUAGE = English diff --git a/version.h b/version.h index 812650fb..e6f3b76e 100644 --- a/version.h +++ b/version.h @@ -15,14 +15,14 @@ #define WINPCAPOEM_MAJOR 3 #define WINPCAPOEM_MINOR 2 #define WINPCAPOEM_REV 2 -#define WINPCAPOEM_BUILD 419 +#define WINPCAPOEM_BUILD 473 -#define WINPCAPOEM_VER_STRING "3.2.2.419.oem" +#define WINPCAPOEM_VER_STRING "3.2.2.473.oem" #define WINPCAPOEM_COMPANY_NAME "CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_NAME "Packet.dll Wrapper" -#define WINPCAPOEM_VERSION_STRING "3.2.2.419.oem" +#define WINPCAPOEM_VERSION_STRING "3.2.2.473.oem" #define WINPCAPOEM_PRODUCT_NAME "OEM WinPcap" #define WINPCAPOEM_COPYRIGHT_STRING "Copyright © 2005-2006 CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_FILENAME "Packet.dll (wrapper)" From e509f61432435285dbd014780f13e703df152e66 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Tue, 18 Apr 2006 16:54:45 +0000 Subject: [PATCH 135/316] Fixed a wrong patch in the Examples-remote. --- Examples.diff | 78 +++++++++++++++++++++++++++------------------------ 1 file changed, 42 insertions(+), 36 deletions(-) diff --git a/Examples.diff b/Examples.diff index 401cfd70..5fc763fa 100644 --- a/Examples.diff +++ b/Examples.diff @@ -1,6 +1,6 @@ -diff -urb ..\winpcap\Examples/PacketDriver/GetMacAddress/GetMacAddress.c .\Examples/PacketDriver/GetMacAddress/GetMacAddress.c ---- ..\winpcap\Examples/PacketDriver/GetMacAddress/GetMacAddress.c 2006-02-22 09:21:17.375000000 -0800 -+++ .\Examples/PacketDriver/GetMacAddress/GetMacAddress.c 2006-02-22 10:03:02.578125000 -0800 +diff -urb ..\winpcap\Examples\/PacketDriver/GetMacAddress/GetMacAddress.c .\Examples/PacketDriver/GetMacAddress/GetMacAddress.c +--- ..\winpcap\Examples\/PacketDriver/GetMacAddress/GetMacAddress.c 2006-02-22 08:28:16.000000000 -0800 ++++ .\Examples/PacketDriver/GetMacAddress/GetMacAddress.c 2006-04-18 09:07:30.000000000 -0700 @@ -50,6 +50,16 @@ ULONG AdapterLength; PPACKET_OID_DATA OidData; @@ -10,7 +10,7 @@ diff -urb ..\winpcap\Examples/PacketDriver/GetMacAddress/GetMacAddress.c .\Examp + // + // start OEM WinPcap + // -+ if(PacketStartOem(ErrBuf, sizeof(ErrBuffer)) == FALSE) ++ if(PacketStartOem(ErrBuffer, sizeof(ErrBuffer)) == FALSE) + { + printf("Cannot start OEM WinPcap: %s\n", ErrBuffer); + return -1; @@ -18,9 +18,9 @@ diff -urb ..\winpcap\Examples/PacketDriver/GetMacAddress/GetMacAddress.c .\Examp // // Obtain the name of the adapters installed on this machine -diff -urb ..\winpcap\Examples/PacketDriver/TestPacketCapture/TestPacketCapture.c .\Examples/PacketDriver/TestPacketCapture/TestPacketCapture.c ---- ..\winpcap\Examples/PacketDriver/TestPacketCapture/TestPacketCapture.c 2006-02-22 09:21:27.312500000 -0800 -+++ .\Examples/PacketDriver/TestPacketCapture/TestPacketCapture.c 2006-02-22 09:58:27.156250000 -0800 +diff -urb ..\winpcap\Examples\/PacketDriver/TestPacketCapture/TestPacketCapture.c .\Examples/PacketDriver/TestPacketCapture/TestPacketCapture.c +--- ..\winpcap\Examples\/PacketDriver/TestPacketCapture/TestPacketCapture.c 2006-02-22 08:28:16.000000000 -0800 ++++ .\Examples/PacketDriver/TestPacketCapture/TestPacketCapture.c 2006-04-18 09:07:30.000000000 -0700 @@ -72,6 +72,17 @@ struct bpf_stat stat; @@ -30,7 +30,7 @@ diff -urb ..\winpcap\Examples/PacketDriver/TestPacketCapture/TestPacketCapture.c + // + // start OEM WinPcap + // -+ if(PacketStartOem(ErrBuf, sizeof(ErrBuffer)) == FALSE) ++ if(PacketStartOem(ErrBuffer, sizeof(ErrBuffer)) == FALSE) + { + printf("Cannot start OEM WinPcap: %s\n", ErrBuffer); + return -1; @@ -39,19 +39,25 @@ diff -urb ..\winpcap\Examples/PacketDriver/TestPacketCapture/TestPacketCapture.c // // Obtain the name of the adapters installed on this machine // -diff -urb ..\winpcap\Examples/PacketDriver/TestPacketSend/TestPacketSend.c .\Examples/PacketDriver/TestPacketSend/TestPacketSend.c ---- ..\winpcap\Examples/PacketDriver/TestPacketSend/TestPacketSend.c 2006-02-22 09:21:48.671875000 -0800 -+++ .\Examples/PacketDriver/TestPacketSend/TestPacketSend.c 2006-02-22 09:58:52.984375000 -0800 -@@ -81,6 +81,16 @@ +diff -urb ..\winpcap\Examples\/PacketDriver/TestPacketSend/TestPacketSend.c .\Examples/PacketDriver/TestPacketSend/TestPacketSend.c +--- ..\winpcap\Examples\/PacketDriver/TestPacketSend/TestPacketSend.c 2006-02-22 08:28:16.000000000 -0800 ++++ .\Examples/PacketDriver/TestPacketSend/TestPacketSend.c 2006-04-18 09:30:31.515625000 -0700 +@@ -71,6 +71,7 @@ + ULONG AdapterLength; + + float cpu_time; ++CHAR ErrBuffer[1024]; + + printf("Traffic Generator v 0.9999\nCopyright 1999 Loris Degioanni (loris@netgroup-serv.polito.it)"); + printf("\nSends a set of packets to the network using packet.dll API.\n"); +@@ -81,6 +82,14 @@ return -1; } -+ CHAR ErrBuffer[1024]; -+ + // + // start OEM WinPcap + // -+ if(PacketStartOem(ErrBuf, sizeof(ErrBuffer)) == FALSE) ++ if(PacketStartOem(ErrBuffer, sizeof(ErrBuffer)) == FALSE) + { + printf("Cannot start OEM WinPcap: %s\n", ErrBuffer); + return -1; @@ -59,9 +65,9 @@ diff -urb ..\winpcap\Examples/PacketDriver/TestPacketSend/TestPacketSend.c .\Exa AdapterName[0]=0; -diff -urb ..\winpcap\Examples/UDPdump/udpdump.c .\Examples/UDPdump/udpdump.c ---- ..\winpcap\Examples/UDPdump/udpdump.c 2006-02-22 09:22:47.093750000 -0800 -+++ .\Examples/UDPdump/udpdump.c 2006-02-22 10:03:02.578125000 -0800 +diff -urb ..\winpcap\Examples\/UDPdump/udpdump.c .\Examples/UDPdump/udpdump.c +--- ..\winpcap\Examples\/UDPdump/udpdump.c 2006-02-22 08:28:16.000000000 -0800 ++++ .\Examples/UDPdump/udpdump.c 2006-04-18 09:07:28.203125000 -0700 @@ -80,6 +80,13 @@ char packet_filter[] = "ip and udp"; struct bpf_program fcode; @@ -76,9 +82,9 @@ diff -urb ..\winpcap\Examples/UDPdump/udpdump.c .\Examples/UDPdump/udpdump.c /* Retrieve the device list */ if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1) { -diff -urb ..\winpcap\Examples/iflist/iflist.c .\Examples/iflist/iflist.c ---- ..\winpcap\Examples/iflist/iflist.c 2006-02-22 09:17:18.406250000 -0800 -+++ .\Examples/iflist/iflist.c 2006-02-22 10:03:02.593750000 -0800 +diff -urb ..\winpcap\Examples\/iflist/iflist.c .\Examples/iflist/iflist.c +--- ..\winpcap\Examples\/iflist/iflist.c 2006-02-22 08:28:16.000000000 -0800 ++++ .\Examples/iflist/iflist.c 2006-04-18 09:07:28.203125000 -0700 @@ -54,6 +54,13 @@ char errbuf[PCAP_ERRBUF_SIZE+1]; char source[PCAP_ERRBUF_SIZE+1]; @@ -93,9 +99,9 @@ diff -urb ..\winpcap\Examples/iflist/iflist.c .\Examples/iflist/iflist.c printf("Enter the device you want to list:\n" "rpcap:// ==> lists interfaces in the local machine\n" "rpcap://hostname:port ==> lists interfaces in a remote machine\n" -diff -urb ..\winpcap\Examples/misc/basic_dump.c .\Examples/misc/basic_dump.c ---- ..\winpcap\Examples/misc/basic_dump.c 2003-07-08 00:21:29.000000000 -0700 -+++ .\Examples/misc/basic_dump.c 2006-02-22 10:01:01.500000000 -0800 +diff -urb ..\winpcap\Examples\/misc/basic_dump.c .\Examples/misc/basic_dump.c +--- ..\winpcap\Examples\/misc/basic_dump.c 2003-07-07 23:21:30.000000000 -0700 ++++ .\Examples/misc/basic_dump.c 2006-04-18 09:07:28.203125000 -0700 @@ -12,6 +12,13 @@ pcap_t *adhandle; char errbuf[PCAP_ERRBUF_SIZE]; @@ -110,9 +116,9 @@ diff -urb ..\winpcap\Examples/misc/basic_dump.c .\Examples/misc/basic_dump.c /* Retrieve the device list on the local machine */ if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1) { -diff -urb ..\winpcap\Examples/misc/basic_dump_ex.c .\Examples/misc/basic_dump_ex.c ---- ..\winpcap\Examples/misc/basic_dump_ex.c 2003-07-08 00:21:29.000000000 -0700 -+++ .\Examples/misc/basic_dump_ex.c 2006-02-22 10:01:34.390625000 -0800 +diff -urb ..\winpcap\Examples\/misc/basic_dump_ex.c .\Examples/misc/basic_dump_ex.c +--- ..\winpcap\Examples\/misc/basic_dump_ex.c 2003-07-07 23:21:30.000000000 -0700 ++++ .\Examples/misc/basic_dump_ex.c 2006-04-18 09:07:28.203125000 -0700 @@ -15,6 +15,12 @@ struct pcap_pkthdr *header; u_char *pkt_data; @@ -126,9 +132,9 @@ diff -urb ..\winpcap\Examples/misc/basic_dump_ex.c .\Examples/misc/basic_dump_ex /* Retrieve the device list on the local machine */ if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1) -diff -urb ..\winpcap\Examples/pcap_filter/pcap_filter.c .\Examples/pcap_filter/pcap_filter.c ---- ..\winpcap\Examples/pcap_filter/pcap_filter.c 2006-02-22 09:20:48.781250000 -0800 -+++ .\Examples/pcap_filter/pcap_filter.c 2006-02-22 10:03:02.593750000 -0800 +diff -urb ..\winpcap\Examples\/pcap_filter/pcap_filter.c .\Examples/pcap_filter/pcap_filter.c +--- ..\winpcap\Examples\/pcap_filter/pcap_filter.c 2006-02-22 08:28:16.000000000 -0800 ++++ .\Examples/pcap_filter/pcap_filter.c 2006-04-18 09:07:28.218750000 -0700 @@ -90,6 +90,13 @@ } } @@ -143,9 +149,9 @@ diff -urb ..\winpcap\Examples/pcap_filter/pcap_filter.c .\Examples/pcap_filter/p // open a capture from the network if (source != NULL) { -diff -urb ..\winpcap\Examples/pktdump_ex/pktdump_ex.c .\Examples/pktdump_ex/pktdump_ex.c ---- ..\winpcap\Examples/pktdump_ex/pktdump_ex.c 2006-02-22 09:21:02.578125000 -0800 -+++ .\Examples/pktdump_ex/pktdump_ex.c 2006-02-22 10:03:02.593750000 -0800 +diff -urb ..\winpcap\Examples\/pktdump_ex/pktdump_ex.c .\Examples/pktdump_ex/pktdump_ex.c +--- ..\winpcap\Examples\/pktdump_ex/pktdump_ex.c 2006-02-22 08:28:16.000000000 -0800 ++++ .\Examples/pktdump_ex/pktdump_ex.c 2006-04-18 09:07:28.218750000 -0700 @@ -56,6 +56,13 @@ " pktdump_ex -s file://c:/temp/file.acp\n" " pktdump_ex -s rpcap://\\Device\\NPF_{C8736017-F3C3-4373-94AC-9A34B7DAD998}\n\n"); @@ -160,9 +166,9 @@ diff -urb ..\winpcap\Examples/pktdump_ex/pktdump_ex.c .\Examples/pktdump_ex/pktd if(argc < 3) { -diff -urb ..\winpcap\Examples/smp_1/smp_1.c .\Examples/smp_1/smp_1.c ---- ..\winpcap\Examples/smp_1/smp_1.c 2006-02-22 09:22:20.046875000 -0800 -+++ .\Examples/smp_1/smp_1.c 2006-02-22 10:03:02.609375000 -0800 +diff -urb ..\winpcap\Examples\/smp_1/smp_1.c .\Examples/smp_1/smp_1.c +--- ..\winpcap\Examples\/smp_1/smp_1.c 2006-02-22 08:28:16.000000000 -0800 ++++ .\Examples/smp_1/smp_1.c 2006-04-18 09:07:28.218750000 -0700 @@ -57,6 +57,13 @@ printf("and that the caplen is equal to the packet length.\n"); printf("If there is an error, it will print out a message saying \"Inconsistent XXX\"\n"); From 29113ee55215964b501b1008740b6765c9f591db Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Mon, 10 Jul 2006 21:52:34 +0000 Subject: [PATCH 136/316] Merged the new compilation environment from the vanilla WinPcap. --- packetNtx/CompileDriver.bat | 121 ++++++++++++++++++++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 packetNtx/CompileDriver.bat diff --git a/packetNtx/CompileDriver.bat b/packetNtx/CompileDriver.bat new file mode 100644 index 00000000..054b4514 --- /dev/null +++ b/packetNtx/CompileDriver.bat @@ -0,0 +1,121 @@ +@echo off + +if "%_BUILDARCH%"=="x86" goto x86_build +if "%_BUILDARCH%"=="AMD64" goto amd64_build +if "%_BUILDARCH%"=="IA64" goto ia64_build +if "%_BUILDARCH%"=="" goto nt4_build + +echo ****************************************************** +echo ERROR: unknown build architecture (%_BUILDARCH%) +echo ****************************************************** + +goto end + +:x86_build + +echo ****************************************************** +echo * Compiling the driver for Windows NT5.x 32 bit * +echo ****************************************************** + +mkdir .\driver\bin 2> nul +mkdir .\driver\bin\2k 2> nul + +copy driver\NPF_NT5.RC ..\..\winpcap\packetntx\driver\NPF.RC + +set TARGETPATH=..\..\..\winpcap_oem\PacketNtx\driver\bin\2k +set NPF_C_DEFINES=-D__NPF_x86__ -DNDIS50 -DWPCAP_OEM +set NPF_TME_JIT_FILES=tme.c count_packets.c tcp_session.c functions.c bucket_lookup.c normal_lookup.c jitter.c win_bpf_filter_init.c + +pushd ..\..\winpcap\packetntx\driver + +prefast build -cefw + +popd + +set TARGETPATH= +set NPF_C_DEFINES= +set NPF_TME_JIT_FILES= + +goto end + +:amd64_build + +echo ******************************************************* +echo * Compiling the driver for Windows NT5.x x64 (AMD64) * +echo ******************************************************* + +mkdir driver\bin 2> nul +mkdir driver\bin\xp 2> nul + +rem copy driver\NPF_NT5.RC driver\NPF.RC + +set TARGETPATH=bin\xp +set NPF_C_DEFINES=-D__NPF_AMD64__ -DNDIS50 -DWPCAP_OEM + +rem +rem The TME extensions and the JIT is not supported on x64, at the moment +rem +set NPF_TME_JIT_FILES= + +pushd ..\..\winpcap\packetntx\driver + +build -cefw + +popd + +set TARGETPATH= +set NPF_C_DEFINES= +set NPF_TME_JIT_FILES= + +goto end + +:ia64_build + +echo ******************************************************* +echo * Compiling the driver for Windows NT5.x IA64 * +echo ******************************************************* + +echo .. +echo ERROR: IA64 is not supported by WinPcap. +echo .. + +goto end + +:nt4_build + +echo ******************************************************* +echo * Compiling the driver for Windows NT4 * +echo * * +echo * NOTE: the script didn't detect the actual BUILD env * +echo * so it assumed NT4 DDK. * +echo ******************************************************* + +mkdir .\driver\bin 2> nul +mkdir .\driver\bin\NT4 2> nul +mkdir .\driver\bin\NT4\i386 2> nul +mkdir .\driver\bin\NT4\i386\free 2> nul +mkdir .\driver\bin\NT4\i386\checked 2> nul + +set TARGETPATH=..\..\..\winpcap_oem\PacketNtx\driver\bin\NT4 + +set NPF_C_DEFINES=-D__NPF_x86__ -DNDIS30 -D__NPF_NT4__ -DWPCAP_OEM +set NPF_TME_JIT_FILES=tme.c count_packets.c tcp_session.c functions.c bucket_lookup.c normal_lookup.c jitter.c win_bpf_filter_init.c + +if NOT "%NPF_COMPILED%" == "1" ( + set Include=%BASEDIR%\src\network\inc;%BASEDIR%\inc;%Include% + set NPF_COMPILED=1 + ) + +pushd ..\..\winpcap\packetntx\driver + +build -cefw + +popd + +set TARGETPATH= +set NPF_C_DEFINES= +set NPF_TME_JIT_FILES= + +goto end + +:end \ No newline at end of file From 4478e5a3a12ce2b53ef6a3c75d7a0d2a374bf540 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Mon, 10 Jul 2006 21:52:59 +0000 Subject: [PATCH 137/316] Obsoleted the old compilation scripts. --- packetNtx/Compile2k_oem.bat | 12 ++++++++++++ packetNtx/CompileNT4_oem.bat | 13 +++++++++++++ 2 files changed, 25 insertions(+) diff --git a/packetNtx/Compile2k_oem.bat b/packetNtx/Compile2k_oem.bat index 38077065..6187391a 100644 --- a/packetNtx/Compile2k_oem.bat +++ b/packetNtx/Compile2k_oem.bat @@ -1,5 +1,16 @@ @echo off +echo ************************************************************ +echo * +echo * This compilation script has been OBSOLETED. +echo * +echo * Please use CompileDriver.bat to compile the driver +echo * for all the supported platforms (NT4,2k,xp,2k3,vista,x64) +echo * +echo ************************************************************ + +goto end + mkdir driver\bin 2> nul mkdir driver\bin\2k 2> nul @@ -17,3 +28,4 @@ popd set TARGETPATH= set USER_C_DEFINES= +:end \ No newline at end of file diff --git a/packetNtx/CompileNT4_oem.bat b/packetNtx/CompileNT4_oem.bat index 743d8c94..348aa7b9 100644 --- a/packetNtx/CompileNT4_oem.bat +++ b/packetNtx/CompileNT4_oem.bat @@ -1,4 +1,15 @@ @echo off + +echo ************************************************************ +echo * +echo * This compilation script has been OBSOLETED. +echo * +echo * Please use CompileDriver.bat to compile the driver +echo * for all the supported platforms (NT4,2k,xp,2k3,vista,x64) +echo * +echo ************************************************************ + +goto end if NOT "%NPF_COMPILED%" == "1" ( set Include=%BASEDIR%\src\network\inc;%BASEDIR%\inc;%Include% set NPF_COMPILED=1 @@ -37,3 +48,5 @@ set TARGETPATH= set USER_C_DEFINES= rem set USE_PDB= rem set NTDEBUGTYPE= + +:end \ No newline at end of file From 56cc6c07441ce8ffd74c8d5933c50333202c5a9e Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Mon, 10 Jul 2006 21:54:18 +0000 Subject: [PATCH 138/316] Updated the release procedures after the modification to the driver build scripts. --- release procedures WOEM.txt | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/release procedures WOEM.txt b/release procedures WOEM.txt index 68b2ec3d..a2f0b954 100644 --- a/release procedures WOEM.txt +++ b/release procedures WOEM.txt @@ -62,14 +62,13 @@ How to compile OEM WinPcap (NOT for the Toolkit) 14. Open a Win 2000 DDK Free build environment. Go into %BUILD_TREE%\winpcap_oem\packetntx. - Execute "compile2k_oem.bat". Prefast 1.5.2402 should issue 18 warnings - (20060222). + Execute "compileDriver.bat". Prefast 1.5.2402 should issue 9 warnings + (20060710). Close the build environment. 15. Open the WinNT4 DDK Release build environment. Go into %BUILD_TREE%\winpcap_oem\packetntx. - Execute "compileNT4_oem.bat". An error "The system cannot find the file - specified" should be issued (20060126), it's normal. Close the build + Execute "compileDriver.bat". Close the build environment. NOTE: DO NOT EXECUTE 14. and 15. at the same time, they overwrite files in the build process that are incompatible between the two builds. From 0fc2095c1f7fb6d723a4b1243ac195656c09380e Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Mon, 10 Jul 2006 21:54:54 +0000 Subject: [PATCH 139/316] Modified the paths of the NT4 driver after the modification to the driver build scripts. --- OEM/WinpcapOem/prebuild_debug.bat | 2 +- OEM/WinpcapOem/prebuild_release.bat | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/OEM/WinpcapOem/prebuild_debug.bat b/OEM/WinpcapOem/prebuild_debug.bat index f3da5ff6..68701ffd 100644 --- a/OEM/WinpcapOem/prebuild_debug.bat +++ b/OEM/WinpcapOem/prebuild_debug.bat @@ -6,5 +6,5 @@ copy ..\..\packetNtx\Dll\Project\Packet_Debug_2k\packet.dll .\Binaries\packet2k. echo Copying drivers copy ..\..\packetNtx\Driver\bin\2k\i386\npf.sys .\Binaries\npf2k.sys -copy ..\..\packetNtx\Driver\bin\NT4\i386\npf.sys .\Binaries\npfnt.sys +copy ..\..\packetNtx\Driver\bin\NT4\i386\checked\npf.sys .\Binaries\npfnt.sys diff --git a/OEM/WinpcapOem/prebuild_release.bat b/OEM/WinpcapOem/prebuild_release.bat index 1c9e32d4..6a8fdd4c 100644 --- a/OEM/WinpcapOem/prebuild_release.bat +++ b/OEM/WinpcapOem/prebuild_release.bat @@ -6,5 +6,5 @@ copy ..\..\packetNtx\Dll\Project\Packet_Release_2k\packet.dll .\Binaries\packet2 echo Copying drivers copy ..\..\packetNtx\Driver\bin\2k\i386\npf.sys .\Binaries\npf2k.sys -copy ..\..\packetNtx\Driver\bin\NT4\i386\npf.sys .\Binaries\npfnt.sys +copy ..\..\packetNtx\Driver\bin\NT4\i386\free\npf.sys .\Binaries\npfnt.sys From c8faa360727ee7ce4cfb6dcda27da4e13f00b237 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Thu, 13 Jul 2006 00:29:53 +0000 Subject: [PATCH 140/316] Added some scripting to remove winpcap_stress from the public samples. --- create_examples_oem.bat | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/create_examples_oem.bat b/create_examples_oem.bat index 4f9c0937..e7377a84 100755 --- a/create_examples_oem.bat +++ b/create_examples_oem.bat @@ -23,6 +23,13 @@ rd /S /Q %WPDPACKDESTDIR%\Examples-remote\NetMeter\ rem *** Delete kdump since the feature is not available at the moment *** rd /S /Q %WPDPACKDESTDIR%\Examples-remote\kdump\ +rem *** Delete WinPcapStress, since it's not a real example *** +rd /S /Q %WPDPACKDESTDIR%\Examples-pcap\winpcap_stress + +rem *** Delete stats, since it's not a real example *** +rd /S /Q %WPDPACKDESTDIR%\Examples-pcap\stats + + xcopy /s/e/v /Y %WINPCAPSOURCEDIR%\Examples-pcap %WPDPACKDESTDIR%\Examples-pcap echo Folder \Examples created successfully From 2e8ffdab2a0bffd8d82a6b8e9699de37bb6d5e71 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Thu, 13 Jul 2006 00:30:48 +0000 Subject: [PATCH 141/316] Commented some copy directives: all the pthreads include files should not be shipped with OEM WinPcap. --- create_include_oem.bat | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/create_include_oem.bat b/create_include_oem.bat index 6525e080..b9281996 100755 --- a/create_include_oem.bat +++ b/create_include_oem.bat @@ -11,9 +11,9 @@ mkdir %WPDPACKDESTDIR%\Include 2>nul >nul xcopy /v /Y %WINPCAPSOURCEDIR%\wpcap\libpcap\Win32\Include\bittypes.h %WPDPACKDESTDIR%\Include\ xcopy /v /Y %WINPCAPSOURCEDIR%\wpcap\libpcap\Win32\Include\Gnuc.h %WPDPACKDESTDIR%\Include\ xcopy /v /Y %WINPCAPSOURCEDIR%\wpcap\libpcap\Win32\Include\ip6_misc.h %WPDPACKDESTDIR%\Include\ -xcopy /v /Y %WINPCAPSOURCEDIR%\wpcap\libpcap\rpcapd\win32-pthreads\pthread.h %WPDPACKDESTDIR%\Include\ -xcopy /v /Y %WINPCAPSOURCEDIR%\wpcap\libpcap\rpcapd\win32-pthreads\sched.h %WPDPACKDESTDIR%\Include\ -xcopy /v /Y %WINPCAPSOURCEDIR%\wpcap\libpcap\rpcapd\win32-pthreads\semaphore.h %WPDPACKDESTDIR%\Include\ +rem xcopy /v /Y %WINPCAPSOURCEDIR%\wpcap\libpcap\rpcapd\win32-pthreads\pthread.h %WPDPACKDESTDIR%\Include\ +rem xcopy /v /Y %WINPCAPSOURCEDIR%\wpcap\libpcap\rpcapd\win32-pthreads\sched.h %WPDPACKDESTDIR%\Include\ +rem xcopy /v /Y %WINPCAPSOURCEDIR%\wpcap\libpcap\rpcapd\win32-pthreads\semaphore.h %WPDPACKDESTDIR%\Include\ xcopy /v /Y %WINPCAPSOURCEDIR%\wpcap\libpcap\PCAP-INT.H %WPDPACKDESTDIR%\Include\ xcopy /v /Y %WINPCAPSOURCEDIR%\wpcap\libpcap\pcap-bpf.h %WPDPACKDESTDIR%\Include\ xcopy /v /Y %WINPCAPSOURCEDIR%\wpcap\libpcap\pcap-stdinc.h %WPDPACKDESTDIR%\Include\ From 505d04df7f6bfd649d2c25dad85b1591f7c40d0f Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Thu, 13 Jul 2006 00:31:46 +0000 Subject: [PATCH 142/316] Updated the diff file to patch the UserBridge sample. --- Examples.diff | 77 +++++++++++++++++++++++++++++++-------------------- 1 file changed, 47 insertions(+), 30 deletions(-) diff --git a/Examples.diff b/Examples.diff index 5fc763fa..263e58ca 100644 --- a/Examples.diff +++ b/Examples.diff @@ -1,6 +1,6 @@ -diff -urb ..\winpcap\Examples\/PacketDriver/GetMacAddress/GetMacAddress.c .\Examples/PacketDriver/GetMacAddress/GetMacAddress.c ---- ..\winpcap\Examples\/PacketDriver/GetMacAddress/GetMacAddress.c 2006-02-22 08:28:16.000000000 -0800 -+++ .\Examples/PacketDriver/GetMacAddress/GetMacAddress.c 2006-04-18 09:07:30.000000000 -0700 +diff -urb ..\winpcap\Examples/PacketDriver/GetMacAddress/GetMacAddress.c .\Examples/PacketDriver/GetMacAddress/GetMacAddress.c +--- ..\winpcap\Examples/PacketDriver/GetMacAddress/GetMacAddress.c 2006-02-22 09:28:16.000000000 -0800 ++++ .\Examples/PacketDriver/GetMacAddress/GetMacAddress.c 2006-07-12 17:25:44.703125000 -0700 @@ -50,6 +50,16 @@ ULONG AdapterLength; PPACKET_OID_DATA OidData; @@ -18,9 +18,9 @@ diff -urb ..\winpcap\Examples\/PacketDriver/GetMacAddress/GetMacAddress.c .\Exam // // Obtain the name of the adapters installed on this machine -diff -urb ..\winpcap\Examples\/PacketDriver/TestPacketCapture/TestPacketCapture.c .\Examples/PacketDriver/TestPacketCapture/TestPacketCapture.c ---- ..\winpcap\Examples\/PacketDriver/TestPacketCapture/TestPacketCapture.c 2006-02-22 08:28:16.000000000 -0800 -+++ .\Examples/PacketDriver/TestPacketCapture/TestPacketCapture.c 2006-04-18 09:07:30.000000000 -0700 +diff -urb ..\winpcap\Examples/PacketDriver/TestPacketCapture/TestPacketCapture.c .\Examples/PacketDriver/TestPacketCapture/TestPacketCapture.c +--- ..\winpcap\Examples/PacketDriver/TestPacketCapture/TestPacketCapture.c 2006-02-22 09:28:16.000000000 -0800 ++++ .\Examples/PacketDriver/TestPacketCapture/TestPacketCapture.c 2006-07-12 17:25:44.703125000 -0700 @@ -72,6 +72,17 @@ struct bpf_stat stat; @@ -39,9 +39,9 @@ diff -urb ..\winpcap\Examples\/PacketDriver/TestPacketCapture/TestPacketCapture. // // Obtain the name of the adapters installed on this machine // -diff -urb ..\winpcap\Examples\/PacketDriver/TestPacketSend/TestPacketSend.c .\Examples/PacketDriver/TestPacketSend/TestPacketSend.c ---- ..\winpcap\Examples\/PacketDriver/TestPacketSend/TestPacketSend.c 2006-02-22 08:28:16.000000000 -0800 -+++ .\Examples/PacketDriver/TestPacketSend/TestPacketSend.c 2006-04-18 09:30:31.515625000 -0700 +diff -urb ..\winpcap\Examples/PacketDriver/TestPacketSend/TestPacketSend.c .\Examples/PacketDriver/TestPacketSend/TestPacketSend.c +--- ..\winpcap\Examples/PacketDriver/TestPacketSend/TestPacketSend.c 2006-02-22 09:28:16.000000000 -0800 ++++ .\Examples/PacketDriver/TestPacketSend/TestPacketSend.c 2006-07-12 17:25:44.703125000 -0700 @@ -71,6 +71,7 @@ ULONG AdapterLength; @@ -65,9 +65,9 @@ diff -urb ..\winpcap\Examples\/PacketDriver/TestPacketSend/TestPacketSend.c .\Ex AdapterName[0]=0; -diff -urb ..\winpcap\Examples\/UDPdump/udpdump.c .\Examples/UDPdump/udpdump.c ---- ..\winpcap\Examples\/UDPdump/udpdump.c 2006-02-22 08:28:16.000000000 -0800 -+++ .\Examples/UDPdump/udpdump.c 2006-04-18 09:07:28.203125000 -0700 +diff -urb ..\winpcap\Examples/UDPdump/udpdump.c .\Examples/UDPdump/udpdump.c +--- ..\winpcap\Examples/UDPdump/udpdump.c 2006-02-22 09:28:15.000000000 -0800 ++++ .\Examples/UDPdump/udpdump.c 2006-07-12 17:25:44.703125000 -0700 @@ -80,6 +80,13 @@ char packet_filter[] = "ip and udp"; struct bpf_program fcode; @@ -82,9 +82,26 @@ diff -urb ..\winpcap\Examples\/UDPdump/udpdump.c .\Examples/UDPdump/udpdump.c /* Retrieve the device list */ if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1) { -diff -urb ..\winpcap\Examples\/iflist/iflist.c .\Examples/iflist/iflist.c ---- ..\winpcap\Examples\/iflist/iflist.c 2006-02-22 08:28:16.000000000 -0800 -+++ .\Examples/iflist/iflist.c 2006-04-18 09:07:28.203125000 -0700 +diff -urb ..\winpcap\Examples/UserLevelBridge/UserBridge.c .\Examples/UserLevelBridge/UserBridge.c +--- ..\winpcap\Examples/UserLevelBridge/UserBridge.c 2006-07-12 17:15:46.437500000 -0700 ++++ .\Examples/UserLevelBridge/UserBridge.c 2006-07-12 17:27:30.578125000 -0700 +@@ -78,6 +78,13 @@ + struct bpf_program fcode; + in_out_adapters couple0, couple1; + ++ /* start OEM WinPcap */ ++ if (pcap_start_oem(errbuf, 0) == -1) ++ { ++ fprintf(stderr, "Error starting OEM WinPcap: %s\n", errbuf); ++ exit(1); ++ } ++ + /* + * Retrieve the device list + */ +diff -urb ..\winpcap\Examples/iflist/iflist.c .\Examples/iflist/iflist.c +--- ..\winpcap\Examples/iflist/iflist.c 2006-02-22 09:28:16.000000000 -0800 ++++ .\Examples/iflist/iflist.c 2006-07-12 17:25:44.703125000 -0700 @@ -54,6 +54,13 @@ char errbuf[PCAP_ERRBUF_SIZE+1]; char source[PCAP_ERRBUF_SIZE+1]; @@ -99,9 +116,9 @@ diff -urb ..\winpcap\Examples\/iflist/iflist.c .\Examples/iflist/iflist.c printf("Enter the device you want to list:\n" "rpcap:// ==> lists interfaces in the local machine\n" "rpcap://hostname:port ==> lists interfaces in a remote machine\n" -diff -urb ..\winpcap\Examples\/misc/basic_dump.c .\Examples/misc/basic_dump.c ---- ..\winpcap\Examples\/misc/basic_dump.c 2003-07-07 23:21:30.000000000 -0700 -+++ .\Examples/misc/basic_dump.c 2006-04-18 09:07:28.203125000 -0700 +diff -urb ..\winpcap\Examples/misc/basic_dump.c .\Examples/misc/basic_dump.c +--- ..\winpcap\Examples/misc/basic_dump.c 2003-07-08 00:21:29.000000000 -0700 ++++ .\Examples/misc/basic_dump.c 2006-07-12 17:25:44.703125000 -0700 @@ -12,6 +12,13 @@ pcap_t *adhandle; char errbuf[PCAP_ERRBUF_SIZE]; @@ -116,9 +133,9 @@ diff -urb ..\winpcap\Examples\/misc/basic_dump.c .\Examples/misc/basic_dump.c /* Retrieve the device list on the local machine */ if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1) { -diff -urb ..\winpcap\Examples\/misc/basic_dump_ex.c .\Examples/misc/basic_dump_ex.c ---- ..\winpcap\Examples\/misc/basic_dump_ex.c 2003-07-07 23:21:30.000000000 -0700 -+++ .\Examples/misc/basic_dump_ex.c 2006-04-18 09:07:28.203125000 -0700 +diff -urb ..\winpcap\Examples/misc/basic_dump_ex.c .\Examples/misc/basic_dump_ex.c +--- ..\winpcap\Examples/misc/basic_dump_ex.c 2003-07-08 00:21:29.000000000 -0700 ++++ .\Examples/misc/basic_dump_ex.c 2006-07-12 17:25:44.718750000 -0700 @@ -15,6 +15,12 @@ struct pcap_pkthdr *header; u_char *pkt_data; @@ -132,9 +149,9 @@ diff -urb ..\winpcap\Examples\/misc/basic_dump_ex.c .\Examples/misc/basic_dump_e /* Retrieve the device list on the local machine */ if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1) -diff -urb ..\winpcap\Examples\/pcap_filter/pcap_filter.c .\Examples/pcap_filter/pcap_filter.c ---- ..\winpcap\Examples\/pcap_filter/pcap_filter.c 2006-02-22 08:28:16.000000000 -0800 -+++ .\Examples/pcap_filter/pcap_filter.c 2006-04-18 09:07:28.218750000 -0700 +diff -urb ..\winpcap\Examples/pcap_filter/pcap_filter.c .\Examples/pcap_filter/pcap_filter.c +--- ..\winpcap\Examples/pcap_filter/pcap_filter.c 2006-02-22 09:28:16.000000000 -0800 ++++ .\Examples/pcap_filter/pcap_filter.c 2006-07-12 17:25:44.718750000 -0700 @@ -90,6 +90,13 @@ } } @@ -149,9 +166,9 @@ diff -urb ..\winpcap\Examples\/pcap_filter/pcap_filter.c .\Examples/pcap_filter/ // open a capture from the network if (source != NULL) { -diff -urb ..\winpcap\Examples\/pktdump_ex/pktdump_ex.c .\Examples/pktdump_ex/pktdump_ex.c ---- ..\winpcap\Examples\/pktdump_ex/pktdump_ex.c 2006-02-22 08:28:16.000000000 -0800 -+++ .\Examples/pktdump_ex/pktdump_ex.c 2006-04-18 09:07:28.218750000 -0700 +diff -urb ..\winpcap\Examples/pktdump_ex/pktdump_ex.c .\Examples/pktdump_ex/pktdump_ex.c +--- ..\winpcap\Examples/pktdump_ex/pktdump_ex.c 2006-02-22 09:28:16.000000000 -0800 ++++ .\Examples/pktdump_ex/pktdump_ex.c 2006-07-12 17:25:44.718750000 -0700 @@ -56,6 +56,13 @@ " pktdump_ex -s file://c:/temp/file.acp\n" " pktdump_ex -s rpcap://\\Device\\NPF_{C8736017-F3C3-4373-94AC-9A34B7DAD998}\n\n"); @@ -166,9 +183,9 @@ diff -urb ..\winpcap\Examples\/pktdump_ex/pktdump_ex.c .\Examples/pktdump_ex/pkt if(argc < 3) { -diff -urb ..\winpcap\Examples\/smp_1/smp_1.c .\Examples/smp_1/smp_1.c ---- ..\winpcap\Examples\/smp_1/smp_1.c 2006-02-22 08:28:16.000000000 -0800 -+++ .\Examples/smp_1/smp_1.c 2006-04-18 09:07:28.218750000 -0700 +diff -urb ..\winpcap\Examples/smp_1/smp_1.c .\Examples/smp_1/smp_1.c +--- ..\winpcap\Examples/smp_1/smp_1.c 2006-02-22 09:28:16.000000000 -0800 ++++ .\Examples/smp_1/smp_1.c 2006-07-12 17:25:44.718750000 -0700 @@ -57,6 +57,13 @@ printf("and that the caplen is equal to the packet length.\n"); printf("If there is an error, it will print out a message saying \"Inconsistent XXX\"\n"); From 5ac16d4b42dbed7851d5e262b36df4724fd59da6 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Fri, 14 Jul 2006 16:27:34 +0000 Subject: [PATCH 143/316] Fixed the TARGETPATH directive for the AMD64 build. --- packetNtx/CompileDriver.bat | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packetNtx/CompileDriver.bat b/packetNtx/CompileDriver.bat index 054b4514..b5a53a8f 100644 --- a/packetNtx/CompileDriver.bat +++ b/packetNtx/CompileDriver.bat @@ -49,7 +49,7 @@ mkdir driver\bin\xp 2> nul rem copy driver\NPF_NT5.RC driver\NPF.RC -set TARGETPATH=bin\xp +set TARGETPATH=..\..\..\winpcap_oem\PacketNtx\driver\bin\xp set NPF_C_DEFINES=-D__NPF_AMD64__ -DNDIS50 -DWPCAP_OEM rem From 81842bc9a26894bcfbc1aaac91bb534567d5bf1b Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Fri, 14 Jul 2006 16:28:02 +0000 Subject: [PATCH 144/316] Added a prebuild step to copy the AMD64 driver into the binaries folder. --- OEM/WinpcapOem/prebuild_debug.bat | 1 + OEM/WinpcapOem/prebuild_release.bat | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/OEM/WinpcapOem/prebuild_debug.bat b/OEM/WinpcapOem/prebuild_debug.bat index 68701ffd..9b4f26f7 100644 --- a/OEM/WinpcapOem/prebuild_debug.bat +++ b/OEM/WinpcapOem/prebuild_debug.bat @@ -7,4 +7,5 @@ copy ..\..\packetNtx\Dll\Project\Packet_Debug_2k\packet.dll .\Binaries\packet2k. echo Copying drivers copy ..\..\packetNtx\Driver\bin\2k\i386\npf.sys .\Binaries\npf2k.sys copy ..\..\packetNtx\Driver\bin\NT4\i386\checked\npf.sys .\Binaries\npfnt.sys +copy ..\..\packetNtx\Driver\bin\xp\AMD64\npf.sys .\Binaries\npfx64.sys diff --git a/OEM/WinpcapOem/prebuild_release.bat b/OEM/WinpcapOem/prebuild_release.bat index 6a8fdd4c..a18a5465 100644 --- a/OEM/WinpcapOem/prebuild_release.bat +++ b/OEM/WinpcapOem/prebuild_release.bat @@ -7,4 +7,4 @@ copy ..\..\packetNtx\Dll\Project\Packet_Release_2k\packet.dll .\Binaries\packet2 echo Copying drivers copy ..\..\packetNtx\Driver\bin\2k\i386\npf.sys .\Binaries\npf2k.sys copy ..\..\packetNtx\Driver\bin\NT4\i386\free\npf.sys .\Binaries\npfnt.sys - +copy ..\..\packetNtx\Driver\bin\xp\AMD64\npf.sys .\Binaries\npfx64.sys From d3670f325203bb9da9205e23a844b3730526780c Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Fri, 14 Jul 2006 16:28:23 +0000 Subject: [PATCH 145/316] Added a new resource ID for the AMD64 driver. --- OEM/WinpcapOem/resource.h | 1 + 1 file changed, 1 insertion(+) diff --git a/OEM/WinpcapOem/resource.h b/OEM/WinpcapOem/resource.h index 0addf5d7..4e982539 100644 --- a/OEM/WinpcapOem/resource.h +++ b/OEM/WinpcapOem/resource.h @@ -3,5 +3,6 @@ #define IDP_DRI2K 110 #define IDP_DLLNT 111 #define IDP_DRINT 112 +#define IDP_DRIx64 114 #define HSH_AUTH_PROC 113 From 55c13f847adad7a882c43d9788a2cc8211b23b3e Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Fri, 14 Jul 2006 16:29:00 +0000 Subject: [PATCH 146/316] Added a new binary resource for the AMD64 npf driver. --- OEM/WinpcapOem/WinpcapOem.rc | 1 + 1 file changed, 1 insertion(+) diff --git a/OEM/WinpcapOem/WinpcapOem.rc b/OEM/WinpcapOem/WinpcapOem.rc index c39a7adf..75346b29 100644 --- a/OEM/WinpcapOem/WinpcapOem.rc +++ b/OEM/WinpcapOem/WinpcapOem.rc @@ -27,6 +27,7 @@ IDP_DLL2K RCDATA MOVEABLE PURE "binaries\\packet2k.dll" IDP_DRI2K RCDATA MOVEABLE PURE "binaries\\npf2k.sys" IDP_DLLNT RCDATA MOVEABLE PURE "binaries\\packetnt.dll" IDP_DRINT RCDATA MOVEABLE PURE "binaries\\npfnt.sys" +IDP_DRIx64 RCDATA MOVEABLE PURE "binaries\\npfx64.sys" HSH_AUTH_PROC RCDATA MOVEABLE PURE "binaries\\tools.bin" From 82857011220b2e4ffa5f2014a7a7ad17409e2213 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Fri, 14 Jul 2006 16:30:51 +0000 Subject: [PATCH 147/316] Removed some leftover debugging code. Added the prototypes of the functions used for the WOW64 FS redirection. Modified the prototype of WoemSaveResourceToDisk to take the WOW64 FS redirection into account. Added a new function to Delete the driver taking the WOW64 FS redirection into account. --- OEM/WinpcapOem/WinpcapOem.h | 44 +++++++++++-------------------------- 1 file changed, 13 insertions(+), 31 deletions(-) diff --git a/OEM/WinpcapOem/WinpcapOem.h b/OEM/WinpcapOem/WinpcapOem.h index fc66b01c..73ed4003 100644 --- a/OEM/WinpcapOem/WinpcapOem.h +++ b/OEM/WinpcapOem/WinpcapOem.h @@ -50,46 +50,28 @@ volatile extern BOOL g_StillToInit; //////////////////////////////////////////////////////////////////// // Resources handling prototypes //////////////////////////////////////////////////////////////////// -BOOL WoemSaveResourceToDisk(HINSTANCE hInst, int ResID, char* FileName); +BOOL WoemSaveResourceToDisk(HINSTANCE hInst, int ResID, char* FileName, BOOL bDisableFsRedirector); BOOL WoemGetResource(HINSTANCE hInst, int ResID, LPVOID * lpResMem, LPDWORD dwResSize); //////////////////////////////////////////////////////////////////// -// Registry and names-related functions +// Definitions of the Win32 functions to disable/enable FS +// redirectors on WOW64. We need these prototypes because we load +// the functions dynamically. //////////////////////////////////////////////////////////////////// -//BOOL WoemCreateNameRegistryEntries(); -//BOOL WoemDeleteNameRegistryEntries(); -BOOL WoemCreateBinaryNames(); +typedef WINBASEAPI BOOL (WINAPI *Wow64DisableWow64FsRedirectionHandler)( PVOID *OldValue); +typedef WINBASEAPI BOOL (WINAPI *Wow64RevertWow64FsRedirectionHandler)( PVOID OlValue); //////////////////////////////////////////////////////////////////// -// Debug definitions +// Function to delete the driver binary, taking care of running +// on win32 or WOW64 //////////////////////////////////////////////////////////////////// - -#if 0 - -#define DEBUGTRACE -#define TRACE_OUTPUTDEBUGSTRING - -#ifdef DEBUGTRACE -#define TracePrint printf -#define WoemReportError() do{MessageBox(NULL, g_LastWoemError, "OEM WinPcap error", MB_OK); g_InitError = TRUE;} while(0) -#else -#define TracePrint -#define WoemReportError() do{g_InitError = TRUE;}while(0) -#endif // DEBUGTRACE - -#ifdef TRACE_MBOXES -#define TraceEnter(X) MessageBox(NULL, X, "OEM WinPcap trace", MB_OK) -#elif defined TRACE_OUTPUTDEBUGSTRING -#define TraceEnter(X) OutputDebugString(X) -#else -#define TraceEnter(X) -#endif - -#endif +BOOL WoemDeleteDriverBinary(char* FileName, BOOL bDisableFsRedirector); //////////////////////////////////////////////////////////////////// -// Error codes +// Registry and names-related functions //////////////////////////////////////////////////////////////////// - +//BOOL WoemCreateNameRegistryEntries(); +//BOOL WoemDeleteNameRegistryEntries(); +BOOL WoemCreateBinaryNames(); #endif //__WINPCAP_OEM_H_E4C69242_4757_4139_A7E4_CA06F37A5B73 From 11b4f6f718405f4bb30fe72fa7a9e03d061ec3c3 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Fri, 14 Jul 2006 16:31:15 +0000 Subject: [PATCH 148/316] Added the prebuild scripts to the project for easier editing. --- OEM/WinpcapOem/WinpcapOem.vcproj | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/OEM/WinpcapOem/WinpcapOem.vcproj b/OEM/WinpcapOem/WinpcapOem.vcproj index c16db4dd..29526b40 100644 --- a/OEM/WinpcapOem/WinpcapOem.vcproj +++ b/OEM/WinpcapOem/WinpcapOem.vcproj @@ -600,6 +600,12 @@ + + + + From 9842607460eca351c8c7a7e6aa3d00599b7326a8 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Fri, 14 Jul 2006 16:55:25 +0000 Subject: [PATCH 149/316] Modified WoemSaveResourceToDisk to enable/disable the WOW64 FS redirector depending on a parameter of the function. Removed some leftover code and debugging stuff from the file. --- OEM/WinpcapOem/Resources.cpp | 107 +++++++++++++++++++++++++++++------ 1 file changed, 89 insertions(+), 18 deletions(-) diff --git a/OEM/WinpcapOem/Resources.cpp b/OEM/WinpcapOem/Resources.cpp index ef411cc6..befd46cf 100644 --- a/OEM/WinpcapOem/Resources.cpp +++ b/OEM/WinpcapOem/Resources.cpp @@ -1,41 +1,70 @@ #include #include - -// -// The following include files contain the drivers and dlls that are converted -// during the custom build step. -// -//#include "Packet2k.h" -//#include "Packetnt.h" -//#include "Npf2k.h" -//#include "NpfNt.h" - -char* ResourceNames[] = -{ - "packet2k.dll", - "driver2k.dll" -}; +#include "WinpcapOem.h" //////////////////////////////////////////////////////////////////// // This function locates one of the binary resources embedded in the // dll and saves it to disk //////////////////////////////////////////////////////////////////// -BOOL WoemSaveResourceToDisk(HINSTANCE hInst, int ResID, char* FileName) +BOOL WoemSaveResourceToDisk(HINSTANCE hInst, int ResID, char* FileName, BOOL bDisableFsRedirector) { char ResName[100]; - sprintf(ResName, "#%d", ResID); FILE* OutFile; + PVOID OldFsRedirectorValue; + HMODULE hKernel32Dll = NULL; + Wow64DisableWow64FsRedirectionHandler DisableFsRedirector; + Wow64RevertWow64FsRedirectionHandler RevertFsRedirector; #ifdef STATIC_LIB hInst = NULL; #endif + if (bDisableFsRedirector) + { + // + // load the FS redirector function dynamically + // + hKernel32Dll = LoadLibrary("kernel32.dll"); + + if (hKernel32Dll == NULL) + { + return FALSE; + } + + DisableFsRedirector = + (Wow64DisableWow64FsRedirectionHandler)GetProcAddress( + hKernel32Dll, + "Wow64DisableWow64FsRedirection"); + + RevertFsRedirector = + (Wow64RevertWow64FsRedirectionHandler)GetProcAddress( + hKernel32Dll, + "Wow64RevertWow64FsRedirection"); + + if (DisableFsRedirector == NULL || RevertFsRedirector == NULL) + { + FreeLibrary(hKernel32Dll); + return FALSE; + } + + if (DisableFsRedirector(&OldFsRedirectorValue) == FALSE) + { + FreeLibrary(hKernel32Dll); + return FALSE; + } + } + + sprintf(ResName, "#%d", ResID); // // Find the resource // HRSRC hRes = FindResource(hInst, ResName, RT_RCDATA); if(!hRes) { + if (hKernel32Dll != NULL) + { + FreeLibrary(hKernel32Dll); + } return FALSE; } @@ -45,6 +74,10 @@ BOOL WoemSaveResourceToDisk(HINSTANCE hInst, int ResID, char* FileName) DWORD dwResSize = SizeofResource(hInst, hRes); if(dwResSize == 0) { + if (hKernel32Dll != NULL) + { + FreeLibrary(hKernel32Dll); + } return FALSE; } @@ -54,6 +87,10 @@ BOOL WoemSaveResourceToDisk(HINSTANCE hInst, int ResID, char* FileName) HGLOBAL hResGlobal = LoadResource(hInst, hRes); if(!hResGlobal) { + if (hKernel32Dll != NULL) + { + FreeLibrary(hKernel32Dll); + } return FALSE; } @@ -64,6 +101,10 @@ BOOL WoemSaveResourceToDisk(HINSTANCE hInst, int ResID, char* FileName) LPVOID lpResMem = LockResource(hResGlobal); if(!hRes) { + if (hKernel32Dll != NULL) + { + FreeLibrary(hKernel32Dll); + } return FALSE; } @@ -71,8 +112,28 @@ BOOL WoemSaveResourceToDisk(HINSTANCE hInst, int ResID, char* FileName) // Save the resource to disk // OutFile = fopen(FileName, "wb"); + + if (bDisableFsRedirector) + { + + if (RevertFsRedirector(OldFsRedirectorValue) == FALSE) + { + if (hKernel32Dll != NULL) + { + FreeLibrary(hKernel32Dll); + } + return FALSE; + } + } + + if(!OutFile) { + if (hKernel32Dll != NULL) + { + FreeLibrary(hKernel32Dll); + } + return FALSE; } @@ -82,9 +143,20 @@ BOOL WoemSaveResourceToDisk(HINSTANCE hInst, int ResID, char* FileName) OutFile) != dwResSize) { fclose(OutFile); + + if (hKernel32Dll != NULL) + { + FreeLibrary(hKernel32Dll); + } + return FALSE; } + if (hKernel32Dll != NULL) + { + FreeLibrary(hKernel32Dll); + } + fclose(OutFile); return TRUE; @@ -138,4 +210,3 @@ BOOL WoemGetResource(HINSTANCE hInst, int ResID, LPVOID * lpResMem, LPDWORD dwRe return TRUE; } - From 7567a0ff8ecdfdf2171183b4c6036a7e697b7114 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Fri, 14 Jul 2006 16:57:34 +0000 Subject: [PATCH 150/316] Added support for AMD64 OSes: - when we detect that it's AMD64, we need to disable the WOW64 FS redirector and copy the appropriate AMD64 driver into the system. - we need to disable the WOW64 FS redirector when deleting the files, as well. --- OEM/WinpcapOem/WinPcapOem.cpp | 117 ++++++++++++++++++++++++++++++---- 1 file changed, 106 insertions(+), 11 deletions(-) diff --git a/OEM/WinpcapOem/WinPcapOem.cpp b/OEM/WinpcapOem/WinPcapOem.cpp index 4da2801e..9d12be8d 100644 --- a/OEM/WinpcapOem/WinPcapOem.cpp +++ b/OEM/WinpcapOem/WinPcapOem.cpp @@ -142,6 +142,7 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) #ifdef SECURITY DWORD Result; #endif + BOOL is64BitOs = FALSE; TRACE_ENTER("WoemEnterDllInternal"); @@ -399,9 +400,18 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) // // check that we are running on x86 (the only architecture that we support at the moment) // - if (stricmp("x86", osArchitecture) != 0) + if (stricmp("x86", osArchitecture) == 0) { - WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Unsupported Operating System architecture (only x86 is supported)"); + is64BitOs = FALSE; + } + else + if (stricmp("AMD64", osArchitecture) == 0) + { + is64BitOs = TRUE; + } + else + { + WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Unsupported Operating System architecture (only x86 and AMD64 are supported)"); ReleaseMutex(g_hGlobalMutex); @@ -421,6 +431,8 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) return FALSE; } + + // // Old registry based WinPcap names // @@ -512,7 +524,7 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) // // Extract packet.dll to disk // - if(!WoemSaveResourceToDisk(g_DllHandle, IDP_DLLNT, g_DllFullPath)) + if(!WoemSaveResourceToDisk(g_DllHandle, IDP_DLLNT, g_DllFullPath, FALSE)) { WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Unable to copy the OEM WinPcap files. Administrative privileges are required for this operation."); @@ -537,7 +549,7 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) // // Extract the driver to disk // - if(!WoemSaveResourceToDisk(g_DllHandle, IDP_DRINT, g_DriverFullPath)) + if(!WoemSaveResourceToDisk(g_DllHandle, IDP_DRINT, g_DriverFullPath, FALSE)) { WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Unable to copy the OEM WinPcap files. Administrative privileges are required for this operation."); @@ -563,6 +575,8 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) } else if(osVer.dwMajorVersion == 5) { + BOOL bLoadDriverResult; + // // Windows 2000, XP, 2003 // @@ -583,10 +597,12 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) // printf("netmon already here!!!\n"); } + + // // Extract packet.dll to disk // - if(!WoemSaveResourceToDisk(g_DllHandle, IDP_DLL2K, g_DllFullPath)) + if(!WoemSaveResourceToDisk(g_DllHandle, IDP_DLL2K, g_DllFullPath, FALSE)) { WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Unable to copy the OEM WinPcap files. Administrative privileges are required for this operation."); @@ -611,7 +627,16 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) // // Extract the driver to disk // - if(!WoemSaveResourceToDisk(g_DllHandle, IDP_DRI2K, g_DriverFullPath)) + if (is64BitOs) + { + bLoadDriverResult = WoemSaveResourceToDisk(g_DllHandle, IDP_DRIx64, g_DriverFullPath, TRUE); + } + else + { + bLoadDriverResult = WoemSaveResourceToDisk(g_DllHandle, IDP_DRI2K, g_DriverFullPath, FALSE); + } + + if(!bLoadDriverResult) { WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Unable to copy the OEM WinPcap files. Administrative privileges are required for this operation."); @@ -641,10 +666,14 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) // Windows Vista // + // + // note: this will not work on vista 64 bit!! + // + // // Extract packet.dll to disk // - if(!WoemSaveResourceToDisk(g_DllHandle, IDP_DLLNT, g_DllFullPath)) + if(!WoemSaveResourceToDisk(g_DllHandle, IDP_DLLNT, g_DllFullPath, FALSE)) { WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Unable to copy the OEM WinPcap files. Administrative privileges are required for this operation."); @@ -669,7 +698,7 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) // // Extract the driver to disk // - if(!WoemSaveResourceToDisk(g_DllHandle, IDP_DRI2K, g_DriverFullPath)) + if(!WoemSaveResourceToDisk(g_DllHandle, IDP_DRI2K, g_DriverFullPath, is64BitOs)) { WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Unable to copy the OEM WinPcap files. Administrative privileges are required for this operation."); @@ -772,6 +801,9 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) delete_service(NPF_DRIVER_NAME); _unlink(g_DllFullPath); + + WoemDeleteDriverBinary(g_DriverFullPath, is64BitOs); + _unlink(g_DriverFullPath); ReleaseMutex(g_hGlobalMutex); @@ -799,7 +831,7 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) // // We've loaded the driver, we can delete its binary // - _unlink(g_DriverFullPath); + WoemDeleteDriverBinary(g_DriverFullPath, is64BitOs); } else { @@ -807,7 +839,7 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) { delete_service(NPF_DRIVER_NAME); _unlink(g_DllFullPath); - _unlink(g_DriverFullPath); + WoemDeleteDriverBinary(g_DriverFullPath, is64BitOs); ReleaseMutex(g_hGlobalMutex); @@ -835,7 +867,7 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) { delete_service(NPF_DRIVER_NAME); _unlink(g_DllFullPath); - _unlink(g_DriverFullPath); + WoemDeleteDriverBinary(g_DriverFullPath, is64BitOs); ReleaseMutex(g_hGlobalMutex); @@ -1287,6 +1319,69 @@ BOOL WoemCreateBinaryNames() return TRUE; } +// +// note: this function has actually nothing to +BOOL WoemDeleteDriverBinary(char* FileName, BOOL bDisableFsRedirector) +{ + PVOID OldFsRedirectorValue; + HMODULE hKernel32Dll; + Wow64DisableWow64FsRedirectionHandler DisableFsRedirector; + Wow64RevertWow64FsRedirectionHandler RevertFsRedirector; + + if (bDisableFsRedirector) + { + // + // load the FS redirector function dynamically + // + hKernel32Dll = LoadLibrary("kernel32.dll"); + + if (hKernel32Dll == NULL) + { + return FALSE; + } + + DisableFsRedirector = + (Wow64DisableWow64FsRedirectionHandler)GetProcAddress( + hKernel32Dll, + "Wow64DisableWow64FsRedirection"); + + RevertFsRedirector = + (Wow64RevertWow64FsRedirectionHandler)GetProcAddress( + hKernel32Dll, + "Wow64RevertWow64FsRedirection"); + + if (DisableFsRedirector == NULL || RevertFsRedirector == NULL) + { + FreeLibrary(hKernel32Dll); + return FALSE; + } + + if (DisableFsRedirector(&OldFsRedirectorValue) == FALSE) + { + FreeLibrary(hKernel32Dll); + return FALSE; + } + } + + _unlink(FileName); + + if (bDisableFsRedirector) + { + + if (RevertFsRedirector(OldFsRedirectorValue) == FALSE) + { + // + // trace me + // + return FALSE; + } + + FreeLibrary(hKernel32Dll); + } + + return TRUE; +} + #if 0 // // Old registry based WinPcap names From 2e52de525b2fc1d4a20462d8e56101cfcebca206 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Fri, 14 Jul 2006 16:58:08 +0000 Subject: [PATCH 151/316] Updated the version of OEM WinPcap. --- dox/prj/winpcap_oem_noc.dox | 2 +- version.h | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/dox/prj/winpcap_oem_noc.dox b/dox/prj/winpcap_oem_noc.dox index 2fceef82..c09d4550 100644 --- a/dox/prj/winpcap_oem_noc.dox +++ b/dox/prj/winpcap_oem_noc.dox @@ -4,7 +4,7 @@ # Project related configuration options #--------------------------------------------------------------------------- PROJECT_NAME = "OEM WinPcap" -PROJECT_NUMBER = 3.2.2.473 +PROJECT_NUMBER = 4.0.2.480 OUTPUT_DIRECTORY = ./ CREATE_SUBDIRS = NO OUTPUT_LANGUAGE = English diff --git a/version.h b/version.h index e6f3b76e..a15b9267 100644 --- a/version.h +++ b/version.h @@ -12,17 +12,17 @@ // 0 Nov = 181 + (Jul) 31 + (Aug) 31 + (Sept)30 + (Oct)31 = 324 // 0 Dec = 324 + 30 = 334 -#define WINPCAPOEM_MAJOR 3 -#define WINPCAPOEM_MINOR 2 +#define WINPCAPOEM_MAJOR 4 +#define WINPCAPOEM_MINOR 0 #define WINPCAPOEM_REV 2 -#define WINPCAPOEM_BUILD 473 +#define WINPCAPOEM_BUILD 480 -#define WINPCAPOEM_VER_STRING "3.2.2.473.oem" +#define WINPCAPOEM_VER_STRING "4.0.2.480.oem" #define WINPCAPOEM_COMPANY_NAME "CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_NAME "Packet.dll Wrapper" -#define WINPCAPOEM_VERSION_STRING "3.2.2.473.oem" +#define WINPCAPOEM_VERSION_STRING "4.0.2.480.oem" #define WINPCAPOEM_PRODUCT_NAME "OEM WinPcap" #define WINPCAPOEM_COPYRIGHT_STRING "Copyright © 2005-2006 CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_FILENAME "Packet.dll (wrapper)" From 215102a8c62a69b28153c05817def35a90eba5ca Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Fri, 14 Jul 2006 17:02:36 +0000 Subject: [PATCH 152/316] Modified the compilation script to use the correct RC file for the version. --- packetNtx/CompileDriver.bat | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packetNtx/CompileDriver.bat b/packetNtx/CompileDriver.bat index b5a53a8f..ed8a1ce8 100644 --- a/packetNtx/CompileDriver.bat +++ b/packetNtx/CompileDriver.bat @@ -47,7 +47,7 @@ echo ******************************************************* mkdir driver\bin 2> nul mkdir driver\bin\xp 2> nul -rem copy driver\NPF_NT5.RC driver\NPF.RC +copy driver\NPF_NT5_x64.RC ..\..\winpcap\packetntx\driver\NPF.RC set TARGETPATH=..\..\..\winpcap_oem\PacketNtx\driver\bin\xp set NPF_C_DEFINES=-D__NPF_AMD64__ -DNDIS50 -DWPCAP_OEM From 202a0a0b3dd6ff52a4b6fa25090409be5dbbf9e6 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Fri, 14 Jul 2006 17:03:06 +0000 Subject: [PATCH 153/316] Added the RC version file for the x64 version of the driver. --- packetNtx/Driver/NPF_NT5_x64.RC | 107 ++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 packetNtx/Driver/NPF_NT5_x64.RC diff --git a/packetNtx/Driver/NPF_NT5_x64.RC b/packetNtx/Driver/NPF_NT5_x64.RC new file mode 100644 index 00000000..a120eecd --- /dev/null +++ b/packetNtx/Driver/NPF_NT5_x64.RC @@ -0,0 +1,107 @@ +//Microsoft Developer Studio generated resource script. +// + +#include "..\..\..\winpcap_oem\version.h" +#include "..\..\common\WpcapNames.h" + + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "afxres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// Neutral resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEU) +#ifdef _WIN32 +LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL +#pragma code_page(1252) +#endif //_WIN32 + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +2 TEXTINCLUDE DISCARDABLE +BEGIN + "#include ""afxres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE DISCARDABLE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +#ifndef _MAC +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + + +VS_VERSION_INFO VERSIONINFO + FILEVERSION WINPCAPOEM_MAJOR,WINPCAPOEM_MINOR,WINPCAPOEM_REV,WINPCAPOEM_BUILD + PRODUCTVERSION WINPCAPOEM_MAJOR,WINPCAPOEM_MINOR,WINPCAPOEM_REV,WINPCAPOEM_BUILD + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x40004L + FILETYPE 0x3L + FILESUBTYPE 0x7L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "000004b0" + BEGIN + VALUE "CompanyName", WINPCAPOEM_COMPANY_NAME + VALUE "FileDescription", "npf.sys (x64) Kernel Driver" + VALUE "FileVersion", WINPCAPOEM_VER_STRING + VALUE "InternalName", WINPCAPOEM_PRODUCT_NAME + VALUE "LegalCopyright", WINPCAPOEM_COPYRIGHT_STRING + VALUE "LegalTrademarks", "" + VALUE "OriginalFilename", "npf.sys" + VALUE "ProductName", WINPCAPOEM_PRODUCT_NAME " (" NPF_DRIVER_NAME ")" + VALUE "ProductVersion", WINPCAPOEM_VER_STRING + VALUE "Build Description", WINPCAPOEM_BUILD_DESCRIPTION + VALUE "PrivateBuild", WINPCAPOEM_PRIVATE_BUILD + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x0, 1200 + END +END + +#endif // !_MAC + +#endif // Neutral resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + From 75c47c27a43c92bee90dd888b2569d7098a27d28 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Tue, 25 Jul 2006 23:57:52 +0000 Subject: [PATCH 154/316] Updated the release procedures to account for the x64 driver and some other mods into WinPcap. --- release procedures WOEM.txt | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/release procedures WOEM.txt b/release procedures WOEM.txt index a2f0b954..42b3adbd 100644 --- a/release procedures WOEM.txt +++ b/release procedures WOEM.txt @@ -62,36 +62,48 @@ How to compile OEM WinPcap (NOT for the Toolkit) 14. Open a Win 2000 DDK Free build environment. Go into %BUILD_TREE%\winpcap_oem\packetntx. - Execute "compileDriver.bat". Prefast 1.5.2402 should issue 9 warnings + Execute "compileDriver.bat". Prefast 1.5.2402 should issue 8 warnings (20060710). Close the build environment. + NOTE: DO NOT EXECUTE 14. and 15 and 16. at the same time, they overwrite files in + the build process that are incompatible between the two builds. 15. Open the WinNT4 DDK Release build environment. Go into %BUILD_TREE%\winpcap_oem\packetntx. Execute "compileDriver.bat". Close the build environment. - NOTE: DO NOT EXECUTE 14. and 15. at the same time, they overwrite files in + NOTE: DO NOT EXECUTE 14. and 15 and 16. at the same time, they overwrite files in + the build process that are incompatible between the two builds. + +16. Open the Windows Server 2003 Free x64 build environment. Go into + %BUILD_TREE%\winpcap_oem\packetntx. + Execute "compileDriver.bat". Close the build + environment. + NOTE: DO NOT EXECUTE 14. and 15 and 16. at the same time, they overwrite files in the build process that are incompatible between the two builds. -16. Open %BUILD_TREE%\winpcap_oem\WinPcap OEM.sln with Visual Studio 2003. - Choose the Debug configuration, and then use Build->Rebuild Solution. +17. Open %BUILD_TREE%\winpcap_oem\WinPcap OEM.sln with Visual Studio 2003. Choose the Release configuration, and then use Build->Rebuild Solution. Some warnings should be issued only for the Wpcap.dll project. + If you choose the Debug configuration, and then use Build->Rebuild Solution, the + compilation will fail beacuse the debug version of the NT4 driver is missing. Repeat + step 15 choosing the NT4 Checked build environment. Close Visual Studio. -17. The build is complete. +18. The build is complete. The DLLs are in the following folders: %BUILD_TREE%\winpcap_oem\wpcap\PRJ\release_REMOTE\wpcap.dll %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\Release\packet.dll -18. Check the DLLs/SYSs files for the versions +19. Check the DLLs/SYSs files for the versions %BUILD_TREE%\winpcap_oem\wpcap\PRJ\release_REMOTE\wpcap.dll %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\Release\packet.dll %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\binaries\npf2k.sys %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\binaries\npfnt.sys - %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\binaries\packet2k.sys - %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\binaries\packetnt.sys + %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\binaries\npfx64.sys + %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\binaries\packet2k.dll + %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\binaries\packetnt.dll How to create the developer's pack for OEM WinPcap (NOT for the Toolkit) ------------------------------------------------------------------------ From cb61975b8bb58e07782fff7b2013a0af4ed420a0 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Tue, 25 Jul 2006 23:59:46 +0000 Subject: [PATCH 155/316] Fixed a detail related to doxygen. --- release procedures WOEM.txt | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/release procedures WOEM.txt b/release procedures WOEM.txt index 42b3adbd..a4db97da 100644 --- a/release procedures WOEM.txt +++ b/release procedures WOEM.txt @@ -118,9 +118,7 @@ How to create the developer's pack for OEM WinPcap (NOT for the Toolkit) b. Creation of the lib folder (no errors/warnings) c. Creation of the bin folder (no errors/warnings) d. Creation of the Examples and Examples-pcap folders (no errors/warnings) - e. creation of the documentation. Some warnings/errors are generated: - - a Doxygen warning processing the file winpcap/dox/libpcap/funcs/pcap.h - - an error copying some *.gif files. + e. creation of the documentation. One error copying some *.gif files is reported. SCM procedures From aa05ce01006c0d6fafae9b3b7d286b1ed2057d95 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Thu, 27 Jul 2006 00:59:59 +0000 Subject: [PATCH 156/316] Added the patches for tcptop, savedump and sendcap. --- Examples.diff | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/Examples.diff b/Examples.diff index 263e58ca..b3c48cd5 100644 --- a/Examples.diff +++ b/Examples.diff @@ -200,3 +200,53 @@ diff -urb ..\winpcap\Examples/smp_1/smp_1.c .\Examples/smp_1/smp_1.c if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1) { fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf); +diff -urb ..\winpcap\Examples/misc/savedump.c .\Examples/misc/savedump.c +--- ..\winpcap\Examples/misc/savedump.c 2003-07-08 00:21:30.000000000 -0700 ++++ .\Examples/misc/savedump.c 2006-07-26 17:44:37.484375000 -0700 +@@ -14,6 +14,12 @@ + pcap_dumper_t *dumpfile; + + ++ /* start OEM WinPcap */ ++ if (pcap_start_oem(errbuf, 0) == -1) ++ { ++ fprintf(stderr, "Error starting OEM WinPcap: %s\n", errbuf); ++ return -1; ++ } + + /* Check command line */ + if(argc != 2) +diff -urb ..\winpcap\Examples/sendcap/sendcap.c .\Examples/sendcap/sendcap.c +--- ..\winpcap\Examples/sendcap/sendcap.c 2006-02-22 09:28:16.000000000 -0800 ++++ .\Examples/sendcap/sendcap.c 2006-07-26 17:44:37.500000000 -0700 +@@ -53,6 +53,13 @@ + float cpu_time; + u_int npacks = 0; + ++ /* start OEM WinPcap */ ++ if (pcap_start_oem(errbuf, 0) == -1) ++ { ++ fprintf(stderr, "Error starting OEM WinPcap: %s\n", errbuf); ++ exit(1); ++ } ++ + /* Check the validity of the command line */ + if (argc <= 2 || argc >= 5) + { +diff -urb ..\winpcap\Examples/tcptop/tcptop.c .\Examples/tcptop/tcptop.c +--- ..\winpcap\Examples/tcptop/tcptop.c 2006-02-22 09:28:15.000000000 -0800 ++++ .\Examples/tcptop/tcptop.c 2006-07-26 17:45:13.750000000 -0700 +@@ -56,6 +56,13 @@ + return; + } + ++ /* start OEM WinPcap */ ++ if (pcap_start_oem(errbuf, 0) == -1) ++ { ++ fprintf(stderr, "Error starting OEM WinPcap: %s\n", errbuf); ++ exit(1); ++ } ++ + /* Open the output adapter */ + if ( (fp= pcap_open(argv[1], 100, PCAP_OPENFLAG_PROMISCUOUS, 1000, NULL, errbuf) ) == NULL) + { From d5c7e03cf3ffa2b92e49efc86d676820b86e9faf Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Tue, 1 Aug 2006 23:38:01 +0000 Subject: [PATCH 157/316] Modified the documentation to account for the new support of Vista and x64 platforms. --- dox/intro.htm | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/dox/intro.htm b/dox/intro.htm index a17a9384..a6e52d41 100644 --- a/dox/intro.htm +++ b/dox/intro.htm @@ -68,8 +68,16 @@

    What is OEM WinPcap

    installed on the target machine, since OEM WinPcap loads its own drivers.
  • loads the driver when the user starts your application, unloads the driver when the user closes your application.
  • -
  • support for Windows NT4, Windows 2000, Windows XP, Windows - Server 2003.
  • +
  • support for +
      +
    • Windows NT4
    • +
    • Windows 2000
    • +
    • Windows XP (x86 and x64)
    • +
    • Windows Server 2003 (x86 and x64)
    • +
    • Windows Vista BETA 2 (x86 only).
    • +
    + +
  • Including OEM WinPcap in your application and deploying it in your installer From 42aabbe8df7d7a99642d768778064e90b6f56678 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 2 Aug 2006 00:41:25 +0000 Subject: [PATCH 158/316] Fixed a bug in the generation of the samples for the devpack: we were trying to delete a sample from the public devpack before having actually copied it. --- create_examples_oem.bat | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/create_examples_oem.bat b/create_examples_oem.bat index e7377a84..1331a8e9 100755 --- a/create_examples_oem.bat +++ b/create_examples_oem.bat @@ -1,4 +1,4 @@ -@echo off +rem @echo off IF NOT EXIST .\Examples ( echo Copying the examples locally... @@ -23,6 +23,9 @@ rd /S /Q %WPDPACKDESTDIR%\Examples-remote\NetMeter\ rem *** Delete kdump since the feature is not available at the moment *** rd /S /Q %WPDPACKDESTDIR%\Examples-remote\kdump\ +xcopy /s/e/v /Y %WINPCAPSOURCEDIR%\Examples-pcap %WPDPACKDESTDIR%\Examples-pcap + + rem *** Delete WinPcapStress, since it's not a real example *** rd /S /Q %WPDPACKDESTDIR%\Examples-pcap\winpcap_stress @@ -30,7 +33,6 @@ rem *** Delete stats, since it's not a real example *** rd /S /Q %WPDPACKDESTDIR%\Examples-pcap\stats -xcopy /s/e/v /Y %WINPCAPSOURCEDIR%\Examples-pcap %WPDPACKDESTDIR%\Examples-pcap echo Folder \Examples created successfully set WPDPACKDESTDIR= From e922fe1f458562ea06016fa4f6713d7320731eff Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 9 Aug 2006 20:27:22 +0000 Subject: [PATCH 159/316] Updated the instructions to account for the dependency on Airpcap. --- release procedures TNT OEM.txt | 4 +++ release procedures WOEM.txt | 46 +++++++++++++++++++++------------- 2 files changed, 32 insertions(+), 18 deletions(-) diff --git a/release procedures TNT OEM.txt b/release procedures TNT OEM.txt index a9a2336f..4cf7166b 100644 --- a/release procedures TNT OEM.txt +++ b/release procedures TNT OEM.txt @@ -1,3 +1,7 @@ +$Header: /usr/cvsroot_private/winpcap/install/release\040procedures.txt,v 1.5 2006/08/03 16:43:07 lorisd Exp $ + +***IMPORTANT NODE: these instructions need to be updated to reflect the dependencies over Airpcap*** + OEM WINPCAP TOOLKIT RELEASE PROCEDURE ===================================== diff --git a/release procedures WOEM.txt b/release procedures WOEM.txt index a4db97da..253d02dd 100644 --- a/release procedures WOEM.txt +++ b/release procedures WOEM.txt @@ -1,6 +1,7 @@ +$Header: /usr/cvsroot_private/winpcap/install/release\040procedures.txt,v 1.5 2006/08/03 16:43:07 lorisd Exp $ + OEM WINPCAP RELEASE PROCEDURE ============================= -GV20060222 Needed tools ------------ @@ -10,6 +11,11 @@ Needed tools In particular you will need to have flex, bison, patch. - Doxygen 1.3.7 installed and on the path +Dependencies +------------ +- you need to have the Airpcap developer's pack in + %BUILD_TREE%\Airpcap_Devpack + How to compile OEM WinPcap (NOT for the Toolkit) ------------------------------------------------ @@ -27,62 +33,66 @@ How to compile OEM WinPcap (NOT for the Toolkit) 5. Download the libpcap sources (usually 0_9 branch) into %BUILD_TREE%\libpcap_ -6. Commit +6. Be sure that the sources of libpcap do *not* contain any CVS folder. The tarball usually + contains the CVS folders if it's a daily snapshot. If any, remove them. + +7. Commit %BUILD_TREE%\winpcap_oem\version.h %BUILD_TREE%\winpcap_oem\dox\prj\winpcap_oem_noc.dox into the CVS. These should be the *only* modified filew in this module. -7. Tag the %BUILD_TREE%\winpcap_oem module with the tag +8. Tag the %BUILD_TREE%\winpcap_oem module with the tag OEM_WINPCAP__WOEM -8. Tag the %BUILD_TREE%\winpcap module with the tag +9. Tag the %BUILD_TREE%\winpcap module with the tag OEM_WINPCAP__WOEM -9. Take the contents of %BUILD_TREE%\libpcap_ and copy it into +10. Take the contents of %BUILD_TREE%\libpcap_ and copy it into %BUILD_TREE%\winpcap\wpcap\libpcap (confirm the overwrite operation) -10. From the command line, go to folder +11. From the command line, go to folder %BUILD_TREE%\winpcap\wpcap\libpcap -11. On the command line, type "patch -p1 < remote_code.patch" +12. On the command line, type "patch -p1 < remote_code.patch" -12. CD into %BUILD_TREE%\winpcap\wpcap\prj and execute +13. CD into %BUILD_TREE%\winpcap\wpcap\prj and execute "build_scanner_parser.bat" -13. Zip the contents of the three folders +14. Zip the contents of the three folders %BUILD_TREE%\winpcap_oem %BUILD_TREE%\winpcap %BUILD_TREE%\libpcap_ + %BUILD_TREE%\Airpcap_Devpack | V %BUILD_TREE%\sources.zip -14. Open a Win 2000 DDK Free build environment. Go into +15. Open a Win 2000 DDK Free build environment. Go into %BUILD_TREE%\winpcap_oem\packetntx. Execute "compileDriver.bat". Prefast 1.5.2402 should issue 8 warnings (20060710). Close the build environment. - NOTE: DO NOT EXECUTE 14. and 15 and 16. at the same time, they overwrite files in + NOTE: DO NOT EXECUTE 15. and 16. and 17. at the same time, they overwrite files in the build process that are incompatible between the two builds. -15. Open the WinNT4 DDK Release build environment. Go into +16. Open the WinNT4 DDK Release build environment. Go into %BUILD_TREE%\winpcap_oem\packetntx. Execute "compileDriver.bat". Close the build environment. - NOTE: DO NOT EXECUTE 14. and 15 and 16. at the same time, they overwrite files in + NOTE: DO NOT EXECUTE 15. and 16. and 17. at the same time, they overwrite files in the build process that are incompatible between the two builds. -16. Open the Windows Server 2003 Free x64 build environment. Go into +17. Open the Windows Server 2003 Free x64 build environment. Go into %BUILD_TREE%\winpcap_oem\packetntx. Execute "compileDriver.bat". Close the build environment. - NOTE: DO NOT EXECUTE 14. and 15 and 16. at the same time, they overwrite files in + NOTE: DO NOT EXECUTE 15. and 16. and 17. at the same time, they overwrite files in the build process that are incompatible between the two builds. -17. Open %BUILD_TREE%\winpcap_oem\WinPcap OEM.sln with Visual Studio 2003. +18. Open %BUILD_TREE%\winpcap_oem\WinPcap OEM.sln with Visual Studio 2003. Choose the Release configuration, and then use Build->Rebuild Solution. Some warnings should be issued only for the Wpcap.dll project. If you choose the Debug configuration, and then use Build->Rebuild Solution, the @@ -90,13 +100,13 @@ How to compile OEM WinPcap (NOT for the Toolkit) step 15 choosing the NT4 Checked build environment. Close Visual Studio. -18. The build is complete. +19. The build is complete. The DLLs are in the following folders: %BUILD_TREE%\winpcap_oem\wpcap\PRJ\release_REMOTE\wpcap.dll %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\Release\packet.dll -19. Check the DLLs/SYSs files for the versions +20. Check the DLLs/SYSs files for the versions %BUILD_TREE%\winpcap_oem\wpcap\PRJ\release_REMOTE\wpcap.dll %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\Release\packet.dll %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\binaries\npf2k.sys From a50fe2ae573c830f6e4fa7f1ee4ddec910c265a9 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 9 Aug 2006 20:28:38 +0000 Subject: [PATCH 160/316] Added the dynamic loading of PacketGetAirPcapHandle. --- OEM/WinpcapOem/PacketWrapper.cpp | 38 +++++++++++++++++++ OEM/WinpcapOem/WinpcapOem.def | 2 + packetNtx/Dll/Project/PacketAndWan2003.vcproj | 8 ++-- 3 files changed, 44 insertions(+), 4 deletions(-) diff --git a/OEM/WinpcapOem/PacketWrapper.cpp b/OEM/WinpcapOem/PacketWrapper.cpp index 05a8deb5..056263ac 100644 --- a/OEM/WinpcapOem/PacketWrapper.cpp +++ b/OEM/WinpcapOem/PacketWrapper.cpp @@ -45,6 +45,8 @@ typedef BOOLEAN (*PacketGetNetInfoExHandler)(PCHAR AdapterName, npf_if_addr* buf typedef BOOLEAN (*PacketGetNetTypeHandler)(LPADAPTER AdapterObject, NetType *type); typedef VOID (*PacketRegWoemLeaveHandlerHandler) (PVOID Handler); typedef BOOLEAN (*PacketSetLoopbackBehaviorHandler)(LPADAPTER AdapterObject, UINT LoopbackBehavior); +typedef PAirpcapHandle (*PacketGetAirPcapHandleHandler)(LPADAPTER AdapterObject); + PacketGetVersionHandler PacketGetVersionH = NULL; PacketGetDriverVersionHandler PacketGetDriverVersionH = NULL; @@ -76,6 +78,7 @@ PacketGetAdapterNamesHandler PacketGetAdapterNamesH = NULL; PacketGetNetInfoExHandler PacketGetNetInfoExH = NULL; PacketGetNetTypeHandler PacketGetNetTypeH = NULL; PacketSetLoopbackBehaviorHandler PacketSetLoopbackBehaviorH = NULL; +PacketGetAirPcapHandleHandler PacketGetAirPcapHandleH = NULL; PacketRegWoemLeaveHandlerHandler PacketRegWoemLeaveHandlerH = NULL; @@ -766,6 +769,31 @@ BOOLEAN PacketGetNetType(LPADAPTER AdapterObject, NetType *type) return returnValue; } +PAirpcapHandle PacketGetAirPcapHandle(LPADAPTER AdapterObject) +{ + PAirpcapHandle pHandle; + + TRACE_ENTER("PacketGetAirPcapHandle"); + + // + // Check if we are the first instance and Init everything accordingly + // + if(!WoemInitialize(g_DllHandle)) + { + SetLastError(ERROR_INVALID_FUNCTION); + pHandle = NULL; + } + else + { + pHandle = PacketGetAirPcapHandleH(AdapterObject); + } + + TRACE_EXIT("PacketGetAirPcapHandle"); + return pHandle; +} + + + //--------------------------------------------------------------------------- // ADDITIONAL EXPORTS NOT PRESENT IN STANDARD PACKET.DLL //--------------------------------------------------------------------------- @@ -1128,6 +1156,16 @@ BOOL LoadPacketDll(char *PacketDllFileName, char *errorString) return FALSE; } + PacketGetAirPcapHandleH = (PacketGetAirPcapHandleHandler) GetProcAddress(g_PacketLib, "PacketGetAirPcapHandle"); + if(!PacketGetAirPcapHandleH) + { + LOAD_PACKET_DLL_TRACE_AND_COPY_ERROR("Unable to load Packet.dll (internal error 30)"); + + TRACE_EXIT("LoadPacketDll"); + return FALSE; + } + + #ifdef STATIC_LIB PacketRegWoemLeaveHandlerH = (PacketRegWoemLeaveHandlerHandler) GetProcAddress(g_PacketLib, "PacketRegWoemLeaveHandler"); if(!PacketRegWoemLeaveHandlerH) diff --git a/OEM/WinpcapOem/WinpcapOem.def b/OEM/WinpcapOem/WinpcapOem.def index 8801b486..f74a5579 100644 --- a/OEM/WinpcapOem/WinpcapOem.def +++ b/OEM/WinpcapOem/WinpcapOem.def @@ -31,4 +31,6 @@ EXPORTS PacketSetDumpLimits PacketIsDumpEnded PacketSetLoopbackBehavior + PacketGetAirPcapHandle PacketStartOem + diff --git a/packetNtx/Dll/Project/PacketAndWan2003.vcproj b/packetNtx/Dll/Project/PacketAndWan2003.vcproj index 3d9366e2..08269224 100644 --- a/packetNtx/Dll/Project/PacketAndWan2003.vcproj +++ b/packetNtx/Dll/Project/PacketAndWan2003.vcproj @@ -21,8 +21,8 @@ Date: Wed, 9 Aug 2006 20:29:05 +0000 Subject: [PATCH 161/316] Added support for the AIRPCAP_API. --- wpcap/PRJ/wpcap.vcproj | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/wpcap/PRJ/wpcap.vcproj b/wpcap/PRJ/wpcap.vcproj index 8c3f13fa..c9152648 100644 --- a/wpcap/PRJ/wpcap.vcproj +++ b/wpcap/PRJ/wpcap.vcproj @@ -23,8 +23,8 @@ Name="VCCLCompilerTool" Optimization="2" InlineFunctionExpansion="1" - AdditionalIncludeDirectories="../../../winpcap/wpcap/libpcap/,../../../winpcap/wpcap/libpcap/bpf,../../../winpcap/wpcap/libpcap/lbl,../../../winpcap/wpcap/libpcap/Win32/Include,../../../winpcap/common,../../../winpcap/wpcap/Win32-Extensions" - PreprocessorDefinitions="HAVE_ADDRINFO=1;YY_NEVER_INTERACTIVE;yylval=pcap_lval;_USRDLL;LIBPCAP_EXPORTS;HAVE_STRERROR;__STDC__;INET6;_WINDOWS;SIZEOF_CHAR=1;SIZEOF_SHORT=2;SIZEOF_INT=4;WPCAP;NDEBUG;HAVE_SNPRINTF;HAVE_VSNPRINTF;WIN32;HAVE_REMOTE,_U_=" + AdditionalIncludeDirectories="../../../winpcap/wpcap/libpcap/,../../../winpcap/wpcap/libpcap/bpf,../../../winpcap/wpcap/libpcap/lbl,../../../winpcap/wpcap/libpcap/Win32/Include,../../../winpcap/common,../../../winpcap/wpcap/Win32-Extensions,../../../Airpcap_Devpack/include" + PreprocessorDefinitions="HAVE_ADDRINFO=1;YY_NEVER_INTERACTIVE;yylval=pcap_lval;_USRDLL;LIBPCAP_EXPORTS;HAVE_STRERROR;__STDC__;INET6;_WINDOWS;SIZEOF_CHAR=1;SIZEOF_SHORT=2;SIZEOF_INT=4;WPCAP;NDEBUG;HAVE_SNPRINTF;HAVE_VSNPRINTF;WIN32;HAVE_REMOTE,_U_=;HAVE_AIRPCAP_API" StringPooling="TRUE" RuntimeLibrary="0" EnableFunctionLevelLinking="TRUE" @@ -90,8 +90,8 @@ Date: Thu, 10 Aug 2006 00:35:59 +0000 Subject: [PATCH 162/316] Added a directive to copy the RC file for the NT4 build. --- dox/prj/winpcap_oem_noc.dox | 2 +- packetNtx/CompileDriver.bat | 2 ++ version.h | 6 +++--- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/dox/prj/winpcap_oem_noc.dox b/dox/prj/winpcap_oem_noc.dox index c09d4550..f548ac1d 100644 --- a/dox/prj/winpcap_oem_noc.dox +++ b/dox/prj/winpcap_oem_noc.dox @@ -4,7 +4,7 @@ # Project related configuration options #--------------------------------------------------------------------------- PROJECT_NAME = "OEM WinPcap" -PROJECT_NUMBER = 4.0.2.480 +PROJECT_NUMBER = 4.0.2.586 OUTPUT_DIRECTORY = ./ CREATE_SUBDIRS = NO OUTPUT_LANGUAGE = English diff --git a/packetNtx/CompileDriver.bat b/packetNtx/CompileDriver.bat index ed8a1ce8..33ae1ba8 100644 --- a/packetNtx/CompileDriver.bat +++ b/packetNtx/CompileDriver.bat @@ -96,6 +96,8 @@ mkdir .\driver\bin\NT4\i386 2> nul mkdir .\driver\bin\NT4\i386\free 2> nul mkdir .\driver\bin\NT4\i386\checked 2> nul +copy driver\NPF_NT4.RC ..\..\winpcap\packetntx\driver\NPF.RC + set TARGETPATH=..\..\..\winpcap_oem\PacketNtx\driver\bin\NT4 set NPF_C_DEFINES=-D__NPF_x86__ -DNDIS30 -D__NPF_NT4__ -DWPCAP_OEM diff --git a/version.h b/version.h index a15b9267..f0b6029f 100644 --- a/version.h +++ b/version.h @@ -15,14 +15,14 @@ #define WINPCAPOEM_MAJOR 4 #define WINPCAPOEM_MINOR 0 #define WINPCAPOEM_REV 2 -#define WINPCAPOEM_BUILD 480 +#define WINPCAPOEM_BUILD 586 -#define WINPCAPOEM_VER_STRING "4.0.2.480.oem" +#define WINPCAPOEM_VER_STRING "4.0.2.586.oem" #define WINPCAPOEM_COMPANY_NAME "CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_NAME "Packet.dll Wrapper" -#define WINPCAPOEM_VERSION_STRING "4.0.2.480.oem" +#define WINPCAPOEM_VERSION_STRING "4.0.2.586.oem" #define WINPCAPOEM_PRODUCT_NAME "OEM WinPcap" #define WINPCAPOEM_COPYRIGHT_STRING "Copyright © 2005-2006 CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_FILENAME "Packet.dll (wrapper)" From a631751af54efeb4264501cd8d3d6dcedac3cb22 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 16 Aug 2006 22:45:44 +0000 Subject: [PATCH 163/316] Updated version info to 4.0.2.592. --- dox/prj/winpcap_oem_noc.dox | 2 +- version.h | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/dox/prj/winpcap_oem_noc.dox b/dox/prj/winpcap_oem_noc.dox index f548ac1d..e41cffb2 100644 --- a/dox/prj/winpcap_oem_noc.dox +++ b/dox/prj/winpcap_oem_noc.dox @@ -4,7 +4,7 @@ # Project related configuration options #--------------------------------------------------------------------------- PROJECT_NAME = "OEM WinPcap" -PROJECT_NUMBER = 4.0.2.586 +PROJECT_NUMBER = 4.0.2.592 OUTPUT_DIRECTORY = ./ CREATE_SUBDIRS = NO OUTPUT_LANGUAGE = English diff --git a/version.h b/version.h index f0b6029f..d368920a 100644 --- a/version.h +++ b/version.h @@ -15,17 +15,17 @@ #define WINPCAPOEM_MAJOR 4 #define WINPCAPOEM_MINOR 0 #define WINPCAPOEM_REV 2 -#define WINPCAPOEM_BUILD 586 +#define WINPCAPOEM_BUILD 592 -#define WINPCAPOEM_VER_STRING "4.0.2.586.oem" +#define WINPCAPOEM_VER_STRING "4.0.2.592.oem" #define WINPCAPOEM_COMPANY_NAME "CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_NAME "Packet.dll Wrapper" -#define WINPCAPOEM_VERSION_STRING "4.0.2.586.oem" +#define WINPCAPOEM_VERSION_STRING "4.0.2.592.oem" #define WINPCAPOEM_PRODUCT_NAME "OEM WinPcap" #define WINPCAPOEM_COPYRIGHT_STRING "Copyright © 2005-2006 CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_FILENAME "Packet.dll (wrapper)" #define WINPCAPOEM_BUILD_DESCRIPTION "" #define WINPCAPOEM_PRIVATE_BUILD "" -#define WINPCAPOEM_LIBPCAP_VERSION "0.9.4" +#define WINPCAPOEM_LIBPCAP_VERSION "0.9.4 branch" From 299e161d3d59a78c7b6b65d50aeaa8a5a68ef30d Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Thu, 17 Aug 2006 16:59:48 +0000 Subject: [PATCH 164/316] Added the patch for the sendpack sample. --- Examples.diff | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/Examples.diff b/Examples.diff index b3c48cd5..33563c66 100644 --- a/Examples.diff +++ b/Examples.diff @@ -250,3 +250,21 @@ diff -urb ..\winpcap\Examples/tcptop/tcptop.c .\Examples/tcptop/tcptop.c /* Open the output adapter */ if ( (fp= pcap_open(argv[1], 100, PCAP_OPENFLAG_PROMISCUOUS, 1000, NULL, errbuf) ) == NULL) { +diff -urb ..\winpcap\Examples/misc/sendpack.c .\Examples/misc/sendpack.c +--- ..\winpcap\Examples/misc/sendpack.c 2003-07-08 00:21:30.000000000 -0700 ++++ .\Examples/misc/sendpack.c 2006-08-17 09:57:07.750000000 -0700 +@@ -11,6 +11,14 @@ + u_char packet[100]; + int i; + ++ /* start OEM WinPcap */ ++ if (pcap_start_oem(errbuf, 0) == -1) ++ { ++ fprintf(stderr, "Error starting OEM WinPcap: %s\n", errbuf); ++ return; ++ } ++ ++ + /* Check the validity of the command line */ + if (argc != 2) + { From 736f45d1d51c500a9667310baf8e957cc674d03f Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Thu, 17 Aug 2006 17:10:40 +0000 Subject: [PATCH 165/316] Fixed a bug in WoemcreateBinaryNames, causing OEM not to work on win2003 x64. Please refer to the long note in the source file for details. --- OEM/WinpcapOem/WinPcapOem.cpp | 43 ++++++++++++++++++++++++++++++++--- 1 file changed, 40 insertions(+), 3 deletions(-) diff --git a/OEM/WinpcapOem/WinPcapOem.cpp b/OEM/WinpcapOem/WinPcapOem.cpp index 9d12be8d..1d239ea7 100644 --- a/OEM/WinpcapOem/WinPcapOem.cpp +++ b/OEM/WinpcapOem/WinPcapOem.cpp @@ -1283,7 +1283,7 @@ BOOL WoemCreateBinaryNames() UINT GsdRes; char WinDir[MAX_PATH + 16]; char SysDir[MAX_PATH + 16]; - + // // Get the location of the system folder to create the complete paths // @@ -1293,11 +1293,48 @@ BOOL WoemCreateBinaryNames() return FALSE; } - GsdRes = GetWindowsDirectory(WinDir, sizeof(WinDir)); - if(GsdRes == 0 || GsdRes == sizeof(WinDir)) +// GsdRes = GetSystemWindowsDirectory(WinDir, sizeof(WinDir)); +// if(GsdRes == 0 || GsdRes == sizeof(WinDir)) +// { +// return FALSE; +// } + + // + // NOTE: this is a patch to a problem with GetWindowsDirectory: as explained in the MSDN + // docs, this API does NOT always return the windows folder like "c:\windows". On TS systems + // in some particular conditions (e.g. we saw it on a win2003-x64 machine) it returns a private + // user folder (c:\documents and settinfs\user...). The right API is GetSystemWindowsDirectoryr, which + // is not available on NT4. The MSDN docs suggests for NT4 to use GetSystemDirectory and trim system32 at + // the end. We use this trick on every os (even if it's sufggested for NT4 only) beacuse in any case we have + // hardcoded the system32 part in our NPF_ strings in wpcap_names.h (and we just write "system32\drivers\drivername.sys" + // for the path of the driver in the registry, not the full path). + // GV 20060817 + // + + CopyMemory(WinDir, SysDir, sizeof(WinDir)); + + // + // trim the "system32" part + // + if (strlen(WinDir) < strlen("\\system32")) { return FALSE; } + + char *SupposedSystem32String; + + SupposedSystem32String = WinDir + strlen(WinDir) - strlen("\\system32"); + + if (_stricmp(SupposedSystem32String, "\\system32") != 0) + { + return FALSE; + } + + // + // found it, just terminate it there + // + SupposedSystem32String[0] = '\0'; + // // Created the strings that we'll use to build the registry keys values From 4bb8d5bd430f41f971560223a6085797dc753e08 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Thu, 17 Aug 2006 17:21:29 +0000 Subject: [PATCH 166/316] Fixed some wrong instructions. Added 2 steps to check for the version of wpcap.dll. Fixed the SCM procedures for the BuildTree zip. Added the MD5sum instructions. --- release procedures WOEM.txt | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/release procedures WOEM.txt b/release procedures WOEM.txt index 253d02dd..8bc78c5e 100644 --- a/release procedures WOEM.txt +++ b/release procedures WOEM.txt @@ -1,4 +1,4 @@ -$Header: /usr/cvsroot_private/winpcap/install/release\040procedures.txt,v 1.5 2006/08/03 16:43:07 lorisd Exp $ +$Header: /usr/cvsroot/winpcap_oem/release\040procedures\040WOEM.txt,v 1.7 2006/08/09 20:27:15 gianlucav Exp $ OEM WINPCAP RELEASE PROCEDURE ============================= @@ -51,7 +51,6 @@ How to compile OEM WinPcap (NOT for the Toolkit) 10. Take the contents of %BUILD_TREE%\libpcap_ and copy it into %BUILD_TREE%\winpcap\wpcap\libpcap - (confirm the overwrite operation) 11. From the command line, go to folder %BUILD_TREE%\winpcap\wpcap\libpcap @@ -61,6 +60,16 @@ How to compile OEM WinPcap (NOT for the Toolkit) 13. CD into %BUILD_TREE%\winpcap\wpcap\prj and execute "build_scanner_parser.bat" +13a. Check that the version of libpcap in + %BUILD_TREE%\winpcap\wpcap\libpcap\pcap.c line 865 + "static const char pcap_version_string[] = "libpcap version 0.9[.x]";" + makes sense (??? WHAT DOES IT MEAN???) + +13b. Check that the version of wpcap in + %BUILD_TREE%\winpcap\wpcap\libpcap\pcap.c line 875 + "static const char wpcap_version_string[] = "3.1";" + is correct. + 14. Zip the contents of the three folders %BUILD_TREE%\winpcap_oem %BUILD_TREE%\winpcap @@ -97,7 +106,7 @@ How to compile OEM WinPcap (NOT for the Toolkit) Some warnings should be issued only for the Wpcap.dll project. If you choose the Debug configuration, and then use Build->Rebuild Solution, the compilation will fail beacuse the debug version of the NT4 driver is missing. Repeat - step 15 choosing the NT4 Checked build environment. + step 16 choosing the NT4 Checked build environment. Close Visual Studio. 19. The build is complete. @@ -144,8 +153,19 @@ SCM procedures V OEM_WinPcap__WOEM_Sources.zip -3. %BUILD_TREE%\ +3. %BUILD_TREE%\winpcap_oem + %BUILD_TREE%\winpcap + %BUILD_TREE%\libpcap_ + %BUILD_TREE%\Airpcap_Devpack | V OEM_WinPcap__WOEM_Build_Tree.zip - \ No newline at end of file + + +MD5sum +------ + +1. Open a command prompt and go into %BUILD_TREE% + +2. Type md5sum.exe OEM_* > md5sum.txt + From d4b9fbdd05dff61932b36811c02155b3eee9f61a Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 13 Sep 2006 12:32:23 +0000 Subject: [PATCH 167/316] Updated the release procedures to take into account - the dependency over AirPcap - the support for x64 - Some better version checking for wpcap.dll --- release procedures TNT OEM.txt | 65 ++++++++++++++++++++++++---------- 1 file changed, 46 insertions(+), 19 deletions(-) diff --git a/release procedures TNT OEM.txt b/release procedures TNT OEM.txt index 4cf7166b..3c76dd58 100644 --- a/release procedures TNT OEM.txt +++ b/release procedures TNT OEM.txt @@ -1,7 +1,4 @@ -$Header: /usr/cvsroot_private/winpcap/install/release\040procedures.txt,v 1.5 2006/08/03 16:43:07 lorisd Exp $ - -***IMPORTANT NODE: these instructions need to be updated to reflect the dependencies over Airpcap*** - +$Header: /usr/cvsroot/winpcap_oem/release\040procedures\040TNT\040OEM.txt,v 1.3 2006/08/09 20:27:22 gianlucav Exp $ OEM WINPCAP TOOLKIT RELEASE PROCEDURE ===================================== @@ -11,13 +8,22 @@ Needed tools - The cygnus environment on your path (needed to execute step 10 and 11). +Dependencies +------------ +- you need to have the Airpcap developer's pack in + %BUILD_TREE%\Airpcap_Devpack + + How to compile OEM WinPcap for the toolkit. ------------------------------------------- 1. Download winpcap (HEAD) and winpcap_oem from the CVS into %BUILD_TREE% 2. Modify the version info into - %BUILD_TREE%\winpcap_oem\version.h. The version for the TNT is x.y.1.z + %BUILD_TREE%\winpcap_oem\version.h. + the version for the TNT is x.y.1.z. The variable + WINPCAPOEM_VER_STRING + should be modified adding a ".tnt" at the end of the numbers. 3. Modify the device string into %BUILD_TREE%\winpcap\common\wpcapnames.h (first two defines) @@ -36,7 +42,6 @@ How to compile OEM WinPcap for the toolkit. 8. Take the contents of %BUILD_TREE%\libpcap_ and copy it into %BUILD_TREE%\winpcap\wpcap\libpcap - (confirm the overwrite operation) 9. From the command line, go to folder %BUILD_TREE%\winpcap\wpcap\libpcap @@ -46,45 +51,67 @@ How to compile OEM WinPcap for the toolkit. 11. CD into %BUILD_TREE%\winpcap\wpcap\prj and execute "build_scanner_parser.bat" -12. Zip the contents of the three folders +12. Check that the version of libpcap in + %BUILD_TREE%\winpcap\wpcap\libpcap\pcap.c line 865 + "static const char pcap_version_string[] = "libpcap version 0.9[.x]";" + makes sense (??? WHAT DOES IT MEAN???) + +13. Check that the version of wpcap in + %BUILD_TREE%\winpcap\wpcap\libpcap\pcap.c line 875 + "static const char wpcap_version_string[] = "3.1";" + is correct. + + +14. Zip the contents of the four folders %BUILD_TREE%\winpcap_oem %BUILD_TREE%\winpcap %BUILD_TREE%\libpcap_ + %BUILD_TREE%\AirPcap_Devpack | V %BUILD_TREE%\sources.zip -13. Open a Win 2000 DDK Free build environment. Go into +15. Open a Win 2000 DDK Free build environment. Go into %BUILD_TREE%\winpcap_oem\packetntx. - Execute "compile2k_oem.bat". Prefast 1.5.2402 should issue 18 warnings (20060222). + Execute "compileDriver.bat". Prefast 1.5.2402 should issue 8 warnings + (20060710). Close the build environment. + NOTE: DO NOT EXECUTE 15. 16. and 17. at the same time, they overwrite files in + the build process that are incompatible between the two builds. + +16. Open the WinNT4 DDK Release build environment. Go into + %BUILD_TREE%\winpcap_oem\packetntx. + Execute "compileDriver.bat". Close the build + environment. + NOTE: DO NOT EXECUTE 15. 16. and 17. at the same time, they overwrite files in + the build process that are incompatible between the two builds. -14. Open the WinNT4 DDK Release build environment. Go into +17. Open the Windows Server 2003 Free x64 build environment. Go into %BUILD_TREE%\winpcap_oem\packetntx. - Execute "compileNT4_oem.bat". An error "The system cannot find the file - specified" should be issued (20060126), it's normal. Close the build + Execute "compileDriver.bat". Close the build environment. - NOTE: DO NOT EXECUTE 16. and 17. at the same time, they overwrite files in + NOTE: DO NOT EXECUTE 15. 16. and 17. at the same time, they overwrite files in the build process that are incompatible between the two builds. -15. Open %BUILD_TREE%\winpcap_oem\WinPcap OEM.sln with Visual Studio 2003. - Choose the Debug_TNT configuration, and then use Build->Rebuild Solution. - NOTE: a linker warning (LNK4075: ignoring EDITANDCONTINUE...) should be - issued. +18. Open %BUILD_TREE%\winpcap_oem\WinPcap OEM.sln with Visual Studio 2003. Choose the Release_TNT configuration, and then use Build->Rebuild Solution. Some warnings should be issued related to the wpcap.dll project, only. + If you choose the Debug configuration, and then use Build->Rebuild Solution, the + compilation will fail because the debug version of the NT4 driver is missing. Repeat + step 16 choosing the NT4 Checked build environment. Close Visual Studio. -16. The build is complete. +19. The build is complete. The DLLs are in the following folders: %BUILD_TREE%\winpcap_oem\wpcap\PRJ\release_REMOTE_TNT\wpcap.dll %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\Release_TNT\packet.dll -17. Check the DLLs/SYSs files for the versions +20. Check the DLLs/SYSs files for the versions %BUILD_TREE%\winpcap_oem\wpcap\PRJ\release_REMOTE_TNT\wpcap.dll %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\Release_TNT\packet.dll %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\binaries\npf2k.sys + %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\binaries\npfx64.sys %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\binaries\npfnt.sys %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\binaries\packet2k.sys %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\binaries\packetnt.sys From 974445386787cc6ba88f19e77bc72a54d8a787fe Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 13 Sep 2006 12:34:44 +0000 Subject: [PATCH 168/316] Other minor mods related to SCM procedures and md5 hashing. --- release procedures TNT OEM.txt | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/release procedures TNT OEM.txt b/release procedures TNT OEM.txt index 3c76dd58..c8305677 100644 --- a/release procedures TNT OEM.txt +++ b/release procedures TNT OEM.txt @@ -1,4 +1,4 @@ -$Header: /usr/cvsroot/winpcap_oem/release\040procedures\040TNT\040OEM.txt,v 1.3 2006/08/09 20:27:22 gianlucav Exp $ +$Header: /usr/cvsroot/winpcap_oem/release\040procedures\040TNT\040OEM.txt,v 1.4 2006/09/13 12:32:23 gianlucav Exp $ OEM WINPCAP TOOLKIT RELEASE PROCEDURE ===================================== @@ -131,8 +131,20 @@ SCM procedures V OEM_WinPcap__TNT__Sources.zip -3. %BUILD_TREE%\ +3. %BUILD_TREE%\winpcap_oem + %BUILD_TREE%\winpcap + %BUILD_TREE%\libpcap_ + %BUILD_TREE%\Airpcap_Devpack | V OEM_WinPcap__TNT__Build_Tree.zip + + +MD5sum +------ + +1. Open a command prompt and go into %BUILD_TREE% + +2. Type md5sum.exe OEM_* > md5sum.txt + \ No newline at end of file From 27a5a4131ab13ff17b25ce0e446bde13665d0d9c Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 13 Sep 2006 12:48:06 +0000 Subject: [PATCH 169/316] Updated version to 4.0.1.592 (for TNT). --- version.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/version.h b/version.h index d368920a..18510de7 100644 --- a/version.h +++ b/version.h @@ -14,15 +14,15 @@ #define WINPCAPOEM_MAJOR 4 #define WINPCAPOEM_MINOR 0 -#define WINPCAPOEM_REV 2 +#define WINPCAPOEM_REV 1 #define WINPCAPOEM_BUILD 592 -#define WINPCAPOEM_VER_STRING "4.0.2.592.oem" +#define WINPCAPOEM_VER_STRING "4.0.1.592.oem" #define WINPCAPOEM_COMPANY_NAME "CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_NAME "Packet.dll Wrapper" -#define WINPCAPOEM_VERSION_STRING "4.0.2.592.oem" +#define WINPCAPOEM_VERSION_STRING "4.0.1.592.tnt" #define WINPCAPOEM_PRODUCT_NAME "OEM WinPcap" #define WINPCAPOEM_COPYRIGHT_STRING "Copyright © 2005-2006 CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_FILENAME "Packet.dll (wrapper)" From 872421d9ff4628ae96431b177dc5ec3371a2717e Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 13 Sep 2006 13:05:33 +0000 Subject: [PATCH 170/316] Updated version to 4.0.1.592 (for TNT): one string was not modified correctly. --- version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.h b/version.h index 18510de7..de77e9c0 100644 --- a/version.h +++ b/version.h @@ -17,7 +17,7 @@ #define WINPCAPOEM_REV 1 #define WINPCAPOEM_BUILD 592 -#define WINPCAPOEM_VER_STRING "4.0.1.592.oem" +#define WINPCAPOEM_VER_STRING "4.0.1.592.tnt" #define WINPCAPOEM_COMPANY_NAME "CACE Technologies" From 38d26dafb2c6f05bee0745e10fc92727d0f60d0a Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Tue, 17 Oct 2006 19:06:27 +0000 Subject: [PATCH 171/316] Updated version to 4.0.2.655 --- dox/prj/winpcap_oem_noc.dox | 2 +- version.h | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/dox/prj/winpcap_oem_noc.dox b/dox/prj/winpcap_oem_noc.dox index e41cffb2..8311e02c 100644 --- a/dox/prj/winpcap_oem_noc.dox +++ b/dox/prj/winpcap_oem_noc.dox @@ -4,7 +4,7 @@ # Project related configuration options #--------------------------------------------------------------------------- PROJECT_NAME = "OEM WinPcap" -PROJECT_NUMBER = 4.0.2.592 +PROJECT_NUMBER = 4.0.2.655 OUTPUT_DIRECTORY = ./ CREATE_SUBDIRS = NO OUTPUT_LANGUAGE = English diff --git a/version.h b/version.h index de77e9c0..9740e8f5 100644 --- a/version.h +++ b/version.h @@ -14,18 +14,18 @@ #define WINPCAPOEM_MAJOR 4 #define WINPCAPOEM_MINOR 0 -#define WINPCAPOEM_REV 1 -#define WINPCAPOEM_BUILD 592 +#define WINPCAPOEM_REV 2 +#define WINPCAPOEM_BUILD 655 -#define WINPCAPOEM_VER_STRING "4.0.1.592.tnt" +#define WINPCAPOEM_VER_STRING "4.0.2.655.oem" #define WINPCAPOEM_COMPANY_NAME "CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_NAME "Packet.dll Wrapper" -#define WINPCAPOEM_VERSION_STRING "4.0.1.592.tnt" +#define WINPCAPOEM_VERSION_STRING "4.0.2.655.oem" #define WINPCAPOEM_PRODUCT_NAME "OEM WinPcap" #define WINPCAPOEM_COPYRIGHT_STRING "Copyright © 2005-2006 CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_FILENAME "Packet.dll (wrapper)" #define WINPCAPOEM_BUILD_DESCRIPTION "" #define WINPCAPOEM_PRIVATE_BUILD "" -#define WINPCAPOEM_LIBPCAP_VERSION "0.9.4 branch" +#define WINPCAPOEM_LIBPCAP_VERSION "0.9.5" From 4b7d17b232d052bd1319accd97b41f4d7721818d Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Mon, 30 Oct 2006 17:08:30 +0000 Subject: [PATCH 172/316] Updated version info to 4.0.2.668 --- dox/prj/winpcap_oem_noc.dox | 2 +- version.h | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dox/prj/winpcap_oem_noc.dox b/dox/prj/winpcap_oem_noc.dox index 8311e02c..3ecf1ba5 100644 --- a/dox/prj/winpcap_oem_noc.dox +++ b/dox/prj/winpcap_oem_noc.dox @@ -4,7 +4,7 @@ # Project related configuration options #--------------------------------------------------------------------------- PROJECT_NAME = "OEM WinPcap" -PROJECT_NUMBER = 4.0.2.655 +PROJECT_NUMBER = 4.0.2.668 OUTPUT_DIRECTORY = ./ CREATE_SUBDIRS = NO OUTPUT_LANGUAGE = English diff --git a/version.h b/version.h index 9740e8f5..8e76ec6c 100644 --- a/version.h +++ b/version.h @@ -15,14 +15,14 @@ #define WINPCAPOEM_MAJOR 4 #define WINPCAPOEM_MINOR 0 #define WINPCAPOEM_REV 2 -#define WINPCAPOEM_BUILD 655 +#define WINPCAPOEM_BUILD 6668 -#define WINPCAPOEM_VER_STRING "4.0.2.655.oem" +#define WINPCAPOEM_VER_STRING "4.0.2.668.oem" #define WINPCAPOEM_COMPANY_NAME "CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_NAME "Packet.dll Wrapper" -#define WINPCAPOEM_VERSION_STRING "4.0.2.655.oem" +#define WINPCAPOEM_VERSION_STRING "4.0.2.668.oem" #define WINPCAPOEM_PRODUCT_NAME "OEM WinPcap" #define WINPCAPOEM_COPYRIGHT_STRING "Copyright © 2005-2006 CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_FILENAME "Packet.dll (wrapper)" From 5871959565d6501d7712e5f0e9ff8c7aa60776fb Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Mon, 30 Oct 2006 17:25:14 +0000 Subject: [PATCH 173/316] Updated version info to 4.0.2.668 (attempt #2, one of the numbers was wrong). --- version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.h b/version.h index 8e76ec6c..1c6f11c5 100644 --- a/version.h +++ b/version.h @@ -15,7 +15,7 @@ #define WINPCAPOEM_MAJOR 4 #define WINPCAPOEM_MINOR 0 #define WINPCAPOEM_REV 2 -#define WINPCAPOEM_BUILD 6668 +#define WINPCAPOEM_BUILD 668 #define WINPCAPOEM_VER_STRING "4.0.2.668.oem" From 2b9634e4feb692b433da7013d424310ff25205fa Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Sat, 18 Nov 2006 01:04:52 +0000 Subject: [PATCH 174/316] Increased the warning level to W4. Enabled generation of pdb files. --- packetNtx/Dll/Project/PacketAndWan2003.vcproj | 18 ++++++++++++------ packetNtx/Dll/Project/PacketNT4.vcproj | 8 ++++++-- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/packetNtx/Dll/Project/PacketAndWan2003.vcproj b/packetNtx/Dll/Project/PacketAndWan2003.vcproj index 08269224..236c18eb 100644 --- a/packetNtx/Dll/Project/PacketAndWan2003.vcproj +++ b/packetNtx/Dll/Project/PacketAndWan2003.vcproj @@ -21,8 +21,8 @@ @@ -89,8 +89,8 @@ Name="VCCLCompilerTool" Optimization="2" InlineFunctionExpansion="1" - AdditionalIncludeDirectories="../../../../winpcap/dag/include,../../../../winpcap/dag/drv/windows,../../../../winpcap/common,../../../../winpcap/PacketNtx/driver,../../../../Airpcap_Devpack/include" - PreprocessorDefinitions="HAVE_AIRPCAP_API,NDEBUG;HAVE_DAG_API;WIN32;_WINDOWS;WPCAP_OEM" + AdditionalIncludeDirectories="../../../../NpfIm_DevPack,../../../../winpcap/dag/include,../../../../winpcap/dag/drv/windows,../../../../winpcap/common,../../../../winpcap/PacketNtx/driver,../../../../Airpcap_Devpack/include" + PreprocessorDefinitions="HAVE_WANPACKET_API;HAVE_NPFIM_API;HAVE_IPHELPER_API;HAVE_AIRPCAP_API,NDEBUG;HAVE_DAG_API;WIN32;_WINDOWS;WPCAP_OEM" StringPooling="TRUE" RuntimeLibrary="0" EnableFunctionLevelLinking="TRUE" @@ -100,8 +100,9 @@ ObjectFile="$(OutDir)/" ProgramDataBaseFileName="$(OutDir)/" BrowseInformation="1" - WarningLevel="3" + WarningLevel="4" SuppressStartupBanner="TRUE" + DebugInformationFormat="3" CompileAs="0"/> @@ -112,8 +113,10 @@ LinkIncremental="1" SuppressStartupBanner="TRUE" ModuleDefinitionFile="../../../../winpcap/PacketNtx/Dll/Packet.def" + GenerateDebugInformation="TRUE" ProgramDatabaseFile="$(OutDir)/Packet.pdb" SubSystem="2" + OptimizeReferences="2" ImportLibrary="$(OutDir)/Packet.lib" TargetMachine="1"/> + + diff --git a/packetNtx/Dll/Project/PacketNT4.vcproj b/packetNtx/Dll/Project/PacketNT4.vcproj index bcd6c959..382b276b 100644 --- a/packetNtx/Dll/Project/PacketNT4.vcproj +++ b/packetNtx/Dll/Project/PacketNT4.vcproj @@ -32,8 +32,9 @@ AssemblerListingLocation="$(IntDir)/" ObjectFile="$(IntDir)/" ProgramDataBaseFileName="$(IntDir)/" - WarningLevel="3" + WarningLevel="4" SuppressStartupBanner="TRUE" + DebugInformationFormat="3" CompileAs="0"/> @@ -44,8 +45,10 @@ LinkIncremental="1" SuppressStartupBanner="TRUE" ModuleDefinitionFile="../../../../winpcap\packetntx\dll\packet.def" + GenerateDebugInformation="TRUE" ProgramDatabaseFile="$(OutDir)/Packet.pdb" SubSystem="2" + OptimizeReferences="2" ImportLibrary="$(OutDir)/Packet.lib" TargetMachine="1"/> @@ -111,6 +114,7 @@ GenerateDebugInformation="TRUE" ProgramDatabaseFile="$(OutDir)/Packet.pdb" SubSystem="2" + OptimizeReferences="0" ImportLibrary="$(OutDir)/Packet.lib" TargetMachine="1"/> Date: Sat, 18 Nov 2006 01:06:02 +0000 Subject: [PATCH 175/316] Added support for embedding the Vista version of Packet.dll. --- OEM/WinpcapOem/WinPcapOem.cpp | 2 +- OEM/WinpcapOem/WinpcapOem.rc | 1 + OEM/WinpcapOem/prebuild_debug.bat | 1 + OEM/WinpcapOem/prebuild_release.bat | 1 + OEM/WinpcapOem/resource.h | 1 + 5 files changed, 5 insertions(+), 1 deletion(-) diff --git a/OEM/WinpcapOem/WinPcapOem.cpp b/OEM/WinpcapOem/WinPcapOem.cpp index 1d239ea7..aac75f7b 100644 --- a/OEM/WinpcapOem/WinPcapOem.cpp +++ b/OEM/WinpcapOem/WinPcapOem.cpp @@ -673,7 +673,7 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) // // Extract packet.dll to disk // - if(!WoemSaveResourceToDisk(g_DllHandle, IDP_DLLNT, g_DllFullPath, FALSE)) + if(!WoemSaveResourceToDisk(g_DllHandle, IDP_DLLVISTA, g_DllFullPath, FALSE)) { WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Unable to copy the OEM WinPcap files. Administrative privileges are required for this operation."); diff --git a/OEM/WinpcapOem/WinpcapOem.rc b/OEM/WinpcapOem/WinpcapOem.rc index 75346b29..8d80a7d5 100644 --- a/OEM/WinpcapOem/WinpcapOem.rc +++ b/OEM/WinpcapOem/WinpcapOem.rc @@ -27,6 +27,7 @@ IDP_DLL2K RCDATA MOVEABLE PURE "binaries\\packet2k.dll" IDP_DRI2K RCDATA MOVEABLE PURE "binaries\\npf2k.sys" IDP_DLLNT RCDATA MOVEABLE PURE "binaries\\packetnt.dll" IDP_DRINT RCDATA MOVEABLE PURE "binaries\\npfnt.sys" +IDP_DLLVISTA RCDATA MOVEABLE PURE "binaries\\packetVista.dll" IDP_DRIx64 RCDATA MOVEABLE PURE "binaries\\npfx64.sys" HSH_AUTH_PROC RCDATA MOVEABLE PURE "binaries\\tools.bin" diff --git a/OEM/WinpcapOem/prebuild_debug.bat b/OEM/WinpcapOem/prebuild_debug.bat index 9b4f26f7..27458669 100644 --- a/OEM/WinpcapOem/prebuild_debug.bat +++ b/OEM/WinpcapOem/prebuild_debug.bat @@ -3,6 +3,7 @@ echo Copying compiled DLLs copy ..\..\packetNtx\Dll\Project\Packet_Debug_NT4\packet.dll .\Binaries\packetnt.dll copy ..\..\packetNtx\Dll\Project\Packet_Debug_2k\packet.dll .\Binaries\packet2k.dll +copy ..\..\PacketNtx\Dll\Project\Packet_Debug_Vista\packet.dll .\Binaries\packetVista.dll echo Copying drivers copy ..\..\packetNtx\Driver\bin\2k\i386\npf.sys .\Binaries\npf2k.sys diff --git a/OEM/WinpcapOem/prebuild_release.bat b/OEM/WinpcapOem/prebuild_release.bat index a18a5465..5de69224 100644 --- a/OEM/WinpcapOem/prebuild_release.bat +++ b/OEM/WinpcapOem/prebuild_release.bat @@ -3,6 +3,7 @@ echo Copying compiled DLLs copy ..\..\packetNtx\Dll\Project\Packet_Release_NT4\packet.dll .\Binaries\packetnt.dll copy ..\..\packetNtx\Dll\Project\Packet_Release_2k\packet.dll .\Binaries\packet2k.dll +copy ..\..\PacketNtx\Dll\Project\Packet_Release_Vista\packet.dll .\Binaries\packetVista.dll echo Copying drivers copy ..\..\packetNtx\Driver\bin\2k\i386\npf.sys .\Binaries\npf2k.sys diff --git a/OEM/WinpcapOem/resource.h b/OEM/WinpcapOem/resource.h index 4e982539..31614d78 100644 --- a/OEM/WinpcapOem/resource.h +++ b/OEM/WinpcapOem/resource.h @@ -4,5 +4,6 @@ #define IDP_DLLNT 111 #define IDP_DRINT 112 #define IDP_DRIx64 114 +#define IDP_DLLVISTA 115 #define HSH_AUTH_PROC 113 From 524175c919437fc79f462c31cbbda02c62148d93 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Sat, 18 Nov 2006 01:06:14 +0000 Subject: [PATCH 176/316] Added a new project for Packet.dll under Vista. --- WinPcap OEM.sln | 12 ++ packetNtx/Dll/Project/PacketVista.rc | 64 ++++++++ packetNtx/Dll/Project/PacketVista.rc2 | 46 ++++++ packetNtx/Dll/Project/PacketVista.vcproj | 188 +++++++++++++++++++++++ 4 files changed, 310 insertions(+) create mode 100644 packetNtx/Dll/Project/PacketVista.rc create mode 100644 packetNtx/Dll/Project/PacketVista.rc2 create mode 100644 packetNtx/Dll/Project/PacketVista.vcproj diff --git a/WinPcap OEM.sln b/WinPcap OEM.sln index b27e5752..d98fb9da 100644 --- a/WinPcap OEM.sln +++ b/WinPcap OEM.sln @@ -22,6 +22,10 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wpcap", "wpcap\PRJ\wpcap.vc {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2} = {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2} EndProjectSection EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Packet (Vista)", "packetNtx\Dll\Project\PacketVista.vcproj", "{8D305FC1-A748-4C63-B419-585BF03165D9}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject Global GlobalSection(SolutionConfiguration) = preSolution Debug = Debug @@ -66,6 +70,14 @@ Global {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release.Build.0 = Release REMOTE|Win32 {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release_TNT.ActiveCfg = Release REMOTE TNT|Win32 {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release_TNT.Build.0 = Release REMOTE TNT|Win32 + {8D305FC1-A748-4C63-B419-585BF03165D9}.Debug.ActiveCfg = Debug|Win32 + {8D305FC1-A748-4C63-B419-585BF03165D9}.Debug.Build.0 = Debug|Win32 + {8D305FC1-A748-4C63-B419-585BF03165D9}.Debug_TNT.ActiveCfg = Debug|Win32 + {8D305FC1-A748-4C63-B419-585BF03165D9}.Debug_TNT.Build.0 = Debug|Win32 + {8D305FC1-A748-4C63-B419-585BF03165D9}.Release.ActiveCfg = Release|Win32 + {8D305FC1-A748-4C63-B419-585BF03165D9}.Release.Build.0 = Release|Win32 + {8D305FC1-A748-4C63-B419-585BF03165D9}.Release_TNT.ActiveCfg = Release|Win32 + {8D305FC1-A748-4C63-B419-585BF03165D9}.Release_TNT.Build.0 = Release|Win32 EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution EndGlobalSection diff --git a/packetNtx/Dll/Project/PacketVista.rc b/packetNtx/Dll/Project/PacketVista.rc new file mode 100644 index 00000000..96ab5095 --- /dev/null +++ b/packetNtx/Dll/Project/PacketVista.rc @@ -0,0 +1,64 @@ +// Microsoft Visual C++ generated resource script. +// + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "afxres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) +#endif //_WIN32 + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""afxres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "#include ""PacketVista.rc2""\r\n" + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// +#include "PacketVista.rc2" + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/packetNtx/Dll/Project/PacketVista.rc2 b/packetNtx/Dll/Project/PacketVista.rc2 new file mode 100644 index 00000000..06cddda1 --- /dev/null +++ b/packetNtx/Dll/Project/PacketVista.rc2 @@ -0,0 +1,46 @@ +// +// WinPcapOem.rc2 - resources Microsoft Visual C++ does not edit directly +// + +#ifdef APSTUDIO_INVOKED + #error this file is not editable by Microsoft Visual C++ +#endif //APSTUDIO_INVOKED + + +#include "..\..\..\version.h" +#include "..\..\..\..\winpcap\common\WpcapNames.h" + +VS_VERSION_INFO VERSIONINFO + FILEVERSION WINPCAPOEM_MAJOR,WINPCAPOEM_MINOR,WINPCAPOEM_REV,WINPCAPOEM_BUILD + PRODUCTVERSION WINPCAPOEM_MAJOR,WINPCAPOEM_MINOR,WINPCAPOEM_REV,WINPCAPOEM_BUILD + FILEFLAGSMASK 0x17L +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x4L + FILETYPE 0x2L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "000004b0" + BEGIN + VALUE "CompanyName", WINPCAPOEM_COMPANY_NAME + VALUE "FileDescription", "packet.dll (Vista) Dynamic Link Library" + VALUE "FileVersion", WINPCAPOEM_VER_STRING + VALUE "InternalName", WINPCAPOEM_PRODUCT_NAME + VALUE "LegalCopyright", WINPCAPOEM_COPYRIGHT_STRING + VALUE "LegalTrademarks", "" + VALUE "OriginalFilename", "packet.dll" + VALUE "ProductName", WINPCAPOEM_PRODUCT_NAME " (" NPF_DRIVER_NAME ")" + VALUE "ProductVersion", WINPCAPOEM_VER_STRING + VALUE "Build Description", WINPCAPOEM_BUILD_DESCRIPTION + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x0, 1200 + END +END diff --git a/packetNtx/Dll/Project/PacketVista.vcproj b/packetNtx/Dll/Project/PacketVista.vcproj new file mode 100644 index 00000000..4488c71f --- /dev/null +++ b/packetNtx/Dll/Project/PacketVista.vcproj @@ -0,0 +1,188 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 7638fa9e92a9cbe3088bdd9939e3af76d22f9d48 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 22 Nov 2006 19:05:58 +0000 Subject: [PATCH 177/316] Added a script for the generation of a devpack including the NpfIm loader extensions, the NpfIm binaries, and the NpfImLoader documentation. --- build_wpdpack_oem_with_npfim.bat | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 build_wpdpack_oem_with_npfim.bat diff --git a/build_wpdpack_oem_with_npfim.bat b/build_wpdpack_oem_with_npfim.bat new file mode 100644 index 00000000..f75c7d13 --- /dev/null +++ b/build_wpdpack_oem_with_npfim.bat @@ -0,0 +1,30 @@ +@echo off + + +rem call build_wpdpack_oem.bat %1 + +if "%1"=="" (set __DEST_FOLDER=.\WpdPack\) ELSE (set __DEST_FOLDER=%1) + +rem now we copy the certified files from the NpfIm engine + +echo Copying NpfIm specific files +pause + +rem NOTE: we do not copy all the lib/h files, only the ones really needed, +rem i.e. the ones for the loader +xcopy /v /Y ..\NpfIm_DevPack\NpfImLoader.h %__DEST_FOLDER%\include\ >nul +xcopy /v /Y ..\NpfIm_DevPack\NetCfgx.h %__DEST_FOLDER%\include\ >nul +xcopy /v /Y ..\NpfIm_DevPack\NpfImLoader.lib %__DEST_FOLDER%\lib\ >nul + +rem NOTE: but we copy all the binaries... +xcopy /v /Y ..\NpfIm_DevPack\*.dll %__DEST_FOLDER%\bin\ >nul + +rem copy the available sample, IfListNpfIm. We assume that the sample is in ..\NpfIm\Sample + +mkdir %__DEST_FOLDER%\Examples-Remote\IfListNpfIm >nul 2>nul +xcopy /v /Y ..\NpfIm\Samples\IfListNpfIm\*.c* %__DEST_FOLDER%\Examples-Remote\IfListNpfIm\ > nul +xcopy /v /Y ..\NpfIm\Samples\IfListNpfIm\*.h* %__DEST_FOLDER%\Examples-Remote\IfListNpfIm\ > nul +xcopy /v /Y ..\NpfIm\Samples\IfListNpfIm\*.vcproj %__DEST_FOLDER%\Examples-Remote\IfListNpfIm\ > nul +xcopy /v /Y ..\NpfIm\Samples\IfListNpfIm\*.sln %__DEST_FOLDER%\Examples-Remote\IfListNpfIm\ > nul + +set __DEST_FOLDER= \ No newline at end of file From c8da62e8a4b4bd7091e212b168e7f7b3ea654841 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 22 Nov 2006 19:52:10 +0000 Subject: [PATCH 178/316] Added some code to copy the NpfImLoader documentation. --- build_wpdpack_oem_with_npfim.bat | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/build_wpdpack_oem_with_npfim.bat b/build_wpdpack_oem_with_npfim.bat index f75c7d13..d1f6510a 100644 --- a/build_wpdpack_oem_with_npfim.bat +++ b/build_wpdpack_oem_with_npfim.bat @@ -27,4 +27,8 @@ xcopy /v /Y ..\NpfIm\Samples\IfListNpfIm\*.h* %__DEST_FOLDER%\Examples-Remote\If xcopy /v /Y ..\NpfIm\Samples\IfListNpfIm\*.vcproj %__DEST_FOLDER%\Examples-Remote\IfListNpfIm\ > nul xcopy /v /Y ..\NpfIm\Samples\IfListNpfIm\*.sln %__DEST_FOLDER%\Examples-Remote\IfListNpfIm\ > nul +rem copy the documentation for npfimLoader +mkdir %__DEST_FOLDER%\docs\NpfImLoader 2>nul >nul +xcopy /s/e/v/Y ..\NpfIm_DevPack\docs\NpfImLoader %__DEST_FOLDER%\docs\NpfImLoader\ > nul + set __DEST_FOLDER= \ No newline at end of file From bd2f7a310bdac35162dc34f352071327ca75dbfa Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 22 Nov 2006 20:38:34 +0000 Subject: [PATCH 179/316] Made the script less verbose. --- create_docs_oem.bat | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/create_docs_oem.bat b/create_docs_oem.bat index be14e7de..ec46452e 100755 --- a/create_docs_oem.bat +++ b/create_docs_oem.bat @@ -17,10 +17,10 @@ pushd dox\prj\ @echo #### Deleting existing WinPcap documentation del /q docs\*.* @echo #### Creating new documentation -doxygen winpcap_oem_noc.dox +doxygen winpcap_oem_noc.dox > nul @echo #### Copying all gif files -xcopy ..\pics\*.gif docs\. /v /y /q -xcopy ..\pics\*.jpg docs\. /v /y /q +xcopy ..\pics\*.gif docs\. /v /y /q > nul +xcopy ..\pics\*.jpg docs\. /v /y /q > nul popd From a3a669be97dbc81dc4f5e1a4ff01574e3875cdf4 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 22 Nov 2006 20:39:38 +0000 Subject: [PATCH 180/316] Small changes due to the new layout of the NpfIm devpacks. --- build_wpdpack_oem_with_npfim.bat | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/build_wpdpack_oem_with_npfim.bat b/build_wpdpack_oem_with_npfim.bat index d1f6510a..10cb458d 100644 --- a/build_wpdpack_oem_with_npfim.bat +++ b/build_wpdpack_oem_with_npfim.bat @@ -1,7 +1,7 @@ @echo off -rem call build_wpdpack_oem.bat %1 +call build_wpdpack_oem.bat %1 if "%1"=="" (set __DEST_FOLDER=.\WpdPack\) ELSE (set __DEST_FOLDER=%1) @@ -12,12 +12,12 @@ pause rem NOTE: we do not copy all the lib/h files, only the ones really needed, rem i.e. the ones for the loader -xcopy /v /Y ..\NpfIm_DevPack\NpfImLoader.h %__DEST_FOLDER%\include\ >nul -xcopy /v /Y ..\NpfIm_DevPack\NetCfgx.h %__DEST_FOLDER%\include\ >nul -xcopy /v /Y ..\NpfIm_DevPack\NpfImLoader.lib %__DEST_FOLDER%\lib\ >nul +xcopy /v /Y ..\NpfImLoader_DevPack\*.h* %__DEST_FOLDER%\include\ >nul +xcopy /v /Y ..\NpfImLoader_DevPack\*.lib %__DEST_FOLDER%\lib\ >nul rem NOTE: but we copy all the binaries... -xcopy /v /Y ..\NpfIm_DevPack\*.dll %__DEST_FOLDER%\bin\ >nul +xcopy /v /Y ..\NpfImLoader_DevPack\*.dll %__DEST_FOLDER%\bin\ >nul +xcopy /v /Y ..\NpfIm_DevPack\*.dll %__DEST_FOLDER%\bin\ >nul rem copy the available sample, IfListNpfIm. We assume that the sample is in ..\NpfIm\Sample @@ -29,6 +29,6 @@ xcopy /v /Y ..\NpfIm\Samples\IfListNpfIm\*.sln %__DEST_FOLDER%\Examples-Remote\I rem copy the documentation for npfimLoader mkdir %__DEST_FOLDER%\docs\NpfImLoader 2>nul >nul -xcopy /s/e/v/Y ..\NpfIm_DevPack\docs\NpfImLoader %__DEST_FOLDER%\docs\NpfImLoader\ > nul +xcopy /s/e/v/Y ..\NpfImLoader_DevPack\docs\*.* %__DEST_FOLDER%\docs\NpfImLoader\ > nul set __DEST_FOLDER= \ No newline at end of file From 4c4f2fddbf3806ff91e1866d4ab4f8c5ea5274c6 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 22 Nov 2006 23:13:43 +0000 Subject: [PATCH 181/316] Updated version info to 4.0.2.691 --- dox/prj/winpcap_oem_noc.dox | 2 +- version.h | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dox/prj/winpcap_oem_noc.dox b/dox/prj/winpcap_oem_noc.dox index 3ecf1ba5..6d2d8153 100644 --- a/dox/prj/winpcap_oem_noc.dox +++ b/dox/prj/winpcap_oem_noc.dox @@ -4,7 +4,7 @@ # Project related configuration options #--------------------------------------------------------------------------- PROJECT_NAME = "OEM WinPcap" -PROJECT_NUMBER = 4.0.2.668 +PROJECT_NUMBER = 4.0.2.691 OUTPUT_DIRECTORY = ./ CREATE_SUBDIRS = NO OUTPUT_LANGUAGE = English diff --git a/version.h b/version.h index 1c6f11c5..b76dd683 100644 --- a/version.h +++ b/version.h @@ -15,14 +15,14 @@ #define WINPCAPOEM_MAJOR 4 #define WINPCAPOEM_MINOR 0 #define WINPCAPOEM_REV 2 -#define WINPCAPOEM_BUILD 668 +#define WINPCAPOEM_BUILD 691 -#define WINPCAPOEM_VER_STRING "4.0.2.668.oem" +#define WINPCAPOEM_VER_STRING "4.0.2.691.oem" #define WINPCAPOEM_COMPANY_NAME "CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_NAME "Packet.dll Wrapper" -#define WINPCAPOEM_VERSION_STRING "4.0.2.668.oem" +#define WINPCAPOEM_VERSION_STRING "4.0.2.691.oem" #define WINPCAPOEM_PRODUCT_NAME "OEM WinPcap" #define WINPCAPOEM_COPYRIGHT_STRING "Copyright © 2005-2006 CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_FILENAME "Packet.dll (wrapper)" From 6f813e6ea0118c66d369a68213ca80cfd0cdaa12 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Mon, 27 Nov 2006 21:41:22 +0000 Subject: [PATCH 182/316] Updated the release procedures to take NpfIm into account. --- release procedures WOEM.txt | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/release procedures WOEM.txt b/release procedures WOEM.txt index 8bc78c5e..76182ea9 100644 --- a/release procedures WOEM.txt +++ b/release procedures WOEM.txt @@ -1,4 +1,4 @@ -$Header: /usr/cvsroot/winpcap_oem/release\040procedures\040WOEM.txt,v 1.7 2006/08/09 20:27:15 gianlucav Exp $ +$Header: /usr/cvsroot/winpcap_oem/release\040procedures\040WOEM.txt,v 1.8 2006/08/17 17:21:29 gianlucav Exp $ OEM WINPCAP RELEASE PROCEDURE ============================= @@ -15,6 +15,10 @@ Dependencies ------------ - you need to have the Airpcap developer's pack in %BUILD_TREE%\Airpcap_Devpack +- you need to have the NpfIm developer's pack in + %BUILD_TREE%\NpfIm_Devpack +- you need to have the NpfImLoader developer's pack in + %BUILD_TREE%\NpfImLoader_Devpack How to compile OEM WinPcap (NOT for the Toolkit) ------------------------------------------------ @@ -70,19 +74,21 @@ How to compile OEM WinPcap (NOT for the Toolkit) "static const char wpcap_version_string[] = "3.1";" is correct. -14. Zip the contents of the three folders +14. Zip the contents of the six folders %BUILD_TREE%\winpcap_oem %BUILD_TREE%\winpcap %BUILD_TREE%\libpcap_ %BUILD_TREE%\Airpcap_Devpack + %BUILD_TREE%\NpfIm_Devpack + %BUILD_TREE%\NpfImLoader_DevPack | V %BUILD_TREE%\sources.zip 15. Open a Win 2000 DDK Free build environment. Go into %BUILD_TREE%\winpcap_oem\packetntx. - Execute "compileDriver.bat". Prefast 1.5.2402 should issue 8 warnings - (20060710). + Execute "compileDriver.bat". Prefast 1.5.2402 should issue 9 warnings + (20061127). Close the build environment. NOTE: DO NOT EXECUTE 15. and 16. and 17. at the same time, they overwrite files in the build process that are incompatible between the two builds. @@ -123,6 +129,7 @@ How to compile OEM WinPcap (NOT for the Toolkit) %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\binaries\npfx64.sys %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\binaries\packet2k.dll %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\binaries\packetnt.dll + %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\binaries\packetVista.dll How to create the developer's pack for OEM WinPcap (NOT for the Toolkit) ------------------------------------------------------------------------ @@ -138,6 +145,23 @@ How to create the developer's pack for OEM WinPcap (NOT for the Toolkit) c. Creation of the bin folder (no errors/warnings) d. Creation of the Examples and Examples-pcap folders (no errors/warnings) e. creation of the documentation. One error copying some *.gif files is reported. + + +How to create the developer's pack for OEM WinPcap (NOT for the Toolkit) with NpfIm loading support (IBM) +--------------------------------------------------------------------------------------------------------- + +1. After the build is completed, in a command prompt go to + + %BUILD_TREE%\winpcap_oem + +2. Run "build_wpdpack_oem_with_npfim.bat". The script will pause after each step of the + build: + a. Creation of the include folder (no errors/warnings) + b. Creation of the lib folder (no errors/warnings) + c. Creation of the bin folder (no errors/warnings) + d. Creation of the Examples and Examples-pcap folders (no errors/warnings) + e. creation of the documentation. One error copying some *.gif files is reported. + f. copy og the NpfIm files. SCM procedures @@ -157,6 +181,8 @@ SCM procedures %BUILD_TREE%\winpcap %BUILD_TREE%\libpcap_ %BUILD_TREE%\Airpcap_Devpack + %BUILD_TREE%\NpfIm_Devpack + %BUILD_TREE%\NpfImLoader_Devpack | V OEM_WinPcap__WOEM_Build_Tree.zip From ffee21d2164a0f2d4398b44ef9ebcda39b3d6414 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 6 Dec 2006 02:06:48 +0000 Subject: [PATCH 183/316] Modified several paths. --- build_wpdpack_oem_with_npfim.bat | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/build_wpdpack_oem_with_npfim.bat b/build_wpdpack_oem_with_npfim.bat index 10cb458d..7b252369 100644 --- a/build_wpdpack_oem_with_npfim.bat +++ b/build_wpdpack_oem_with_npfim.bat @@ -29,6 +29,10 @@ xcopy /v /Y ..\NpfIm\Samples\IfListNpfIm\*.sln %__DEST_FOLDER%\Examples-Remote\I rem copy the documentation for npfimLoader mkdir %__DEST_FOLDER%\docs\NpfImLoader 2>nul >nul -xcopy /s/e/v/Y ..\NpfImLoader_DevPack\docs\*.* %__DEST_FOLDER%\docs\NpfImLoader\ > nul +xcopy /s/e/v/Y ..\NpfIm\LowLevelDll\docs\NpfImLoader\*.* %__DEST_FOLDER%\docs\NpfImLoader\ > nul +del /f/s/q %__DEST_FOLDER%\docs\WinPcap >nul +rd %__DEST_FOLDER%\docs\WinPcap >nul 2>nul +ren %__DEST_FOLDER%\docs\html WinPcap +copy /v ..\NpfIm\LowLevelDll\docs\OEM_WinPcap_docs.html %__DEST_FOLDER%\docs\. > nul set __DEST_FOLDER= \ No newline at end of file From 562d24d4839eb2bfe8d49ca9bcb28ce641918758 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 6 Dec 2006 02:14:32 +0000 Subject: [PATCH 184/316] Made the scripts less verbose in case of success. Fixed some wrong prompts to overwrite. --- build_wpdpack_oem.bat | 5 ++--- create_bin_oem.bat | 4 ++-- create_docs_oem.bat | 14 ++++++------- create_examples_oem.bat | 14 ++++++------- create_include_oem.bat | 46 ++++++++++++++++++++--------------------- create_lib_oem.bat | 4 ++-- 6 files changed, 43 insertions(+), 44 deletions(-) diff --git a/build_wpdpack_oem.bat b/build_wpdpack_oem.bat index 703f580d..c00d4c29 100755 --- a/build_wpdpack_oem.bat +++ b/build_wpdpack_oem.bat @@ -1,6 +1,6 @@ @echo off -if "%1"=="" (set __DEST_FOLDER=.\WpdPack\ ) ELSE (set __DEST_FOLDER=%1) +if "%1"=="" (set __DEST_FOLDER=.\WpdPack\) ELSE (set __DEST_FOLDER=%1) echo ************************************************ echo The developer's pack will be created in folder @@ -18,6 +18,5 @@ call create_examples_oem.bat %__DEST_FOLDER% PAUSE call create_docs_oem.bat %__DEST_FOLDER% echo Copying the license agreement file -xcopy /v "OEM WinPcap License Agreement.pdf" %__DEST_FOLDER% - +xcopy /v /Y "OEM WinPcap License Agreement.pdf" %__DEST_FOLDER%. >nul set __DEST_FOLDER= diff --git a/create_bin_oem.bat b/create_bin_oem.bat index bef8f29b..30f9ccd3 100755 --- a/create_bin_oem.bat +++ b/create_bin_oem.bat @@ -6,8 +6,8 @@ echo Creating \bin folder mkdir %WPDPACKDESTDIR% >nul 2>nul mkdir %WPDPACKDESTDIR%\bin >nul 2>nul -xcopy /v /Y .\wpcap\PRJ\Release_REMOTE\wpcap.dll %WPDPACKDESTDIR%\bin\ -xcopy /v /Y .\OEM\WinPcapOEM\release\packet.dll %WPDPACKDESTDIR%\bin\ +xcopy /v /Y .\wpcap\PRJ\Release_REMOTE\wpcap.dll %WPDPACKDESTDIR%\bin\ >nul +xcopy /v /Y .\OEM\WinPcapOEM\release\packet.dll %WPDPACKDESTDIR%\bin\ >nul echo Folder \bin created successfully diff --git a/create_docs_oem.bat b/create_docs_oem.bat index ec46452e..70f95ad0 100755 --- a/create_docs_oem.bat +++ b/create_docs_oem.bat @@ -15,7 +15,7 @@ mkdir %WPDPACKDESTDIR%\docs\html >nul 2>nul pushd dox\prj\ @echo #### Deleting existing WinPcap documentation -del /q docs\*.* +del /q docs\*.* >nul @echo #### Creating new documentation doxygen winpcap_oem_noc.dox > nul @echo #### Copying all gif files @@ -24,12 +24,12 @@ xcopy ..\pics\*.jpg docs\. /v /y /q > nul popd -xcopy /v /Y .\dox\OEM_WinPcap_docs.html %WPDPACKDESTDIR%\docs\ -xcopy /v /Y .\dox\prj\docs\*.* %WPDPACKDESTDIR%\docs\html\ -xcopy /v /Y ..\winpcap\dox\*.gif %WPDPACKDESTDIR%\docs\html\ -xcopy /v /Y ..\winpcap\dox\pics\*.gif %WPDPACKDESTDIR%\docs\html\ -xcopy /v /Y .\dox\pics\*.gif %WPDPACKDESTDIR%\docs\html\ -xcopy /v /Y .\dox\pics\*.jpg %WPDPACKDESTDIR%\docs\html\ +xcopy /v /Y .\dox\OEM_WinPcap_docs.html %WPDPACKDESTDIR%\docs\ >nul +xcopy /v /Y .\dox\prj\docs\*.* %WPDPACKDESTDIR%\docs\html\ >nul +xcopy /v /Y ..\winpcap\dox\*.gif %WPDPACKDESTDIR%\docs\html\ >nul +xcopy /v /Y ..\winpcap\dox\pics\*.gif %WPDPACKDESTDIR%\docs\html\ >nul +xcopy /v /Y .\dox\pics\*.gif %WPDPACKDESTDIR%\docs\html\ >nul +xcopy /v /Y .\dox\pics\*.jpg %WPDPACKDESTDIR%\docs\html\ >nul echo Folder \docs created successfully set WPDPACKDESTDIR= set WINPCAPSOURCEDIR= diff --git a/create_examples_oem.bat b/create_examples_oem.bat index 1331a8e9..2ff0bd30 100755 --- a/create_examples_oem.bat +++ b/create_examples_oem.bat @@ -1,4 +1,4 @@ -rem @echo off +@echo off IF NOT EXIST .\Examples ( echo Copying the examples locally... @@ -15,15 +15,15 @@ mkdir %WPDPACKDESTDIR% >nul 2>nul mkdir %WPDPACKDESTDIR%\Examples-pcap >nul 2>nul mkdir %WPDPACKDESTDIR%\Examples-remote >nul 2>nul -xcopy /s/e/v /Y %WINPCAPSOURCEDIR%\Examples %WPDPACKDESTDIR%\Examples-remote +xcopy /s/e/v /Y %WINPCAPSOURCEDIR%\Examples %WPDPACKDESTDIR%\Examples-remote >nul rem *** Delete Netmeter since it's no more part of the Developer's pack *** -rd /S /Q %WPDPACKDESTDIR%\Examples-remote\NetMeter\ +rd /S /Q %WPDPACKDESTDIR%\Examples-remote\NetMeter\ >nul rem *** Delete kdump since the feature is not available at the moment *** -rd /S /Q %WPDPACKDESTDIR%\Examples-remote\kdump\ +rd /S /Q %WPDPACKDESTDIR%\Examples-remote\kdump\ >nul -xcopy /s/e/v /Y %WINPCAPSOURCEDIR%\Examples-pcap %WPDPACKDESTDIR%\Examples-pcap +xcopy /s/e/v /Y %WINPCAPSOURCEDIR%\Examples-pcap %WPDPACKDESTDIR%\Examples-pcap >nul rem *** Delete WinPcapStress, since it's not a real example *** @@ -39,7 +39,7 @@ set WPDPACKDESTDIR= set WINPCAPSOURCEDIR= echo ******************************************************************** -echo * * +echo * * echo * Now you can build the examples from the developers' pack folder! * -echo * * +echo * * echo ******************************************************************** diff --git a/create_include_oem.bat b/create_include_oem.bat index b9281996..58982daa 100755 --- a/create_include_oem.bat +++ b/create_include_oem.bat @@ -8,29 +8,29 @@ echo Creating \Include folder mkdir %WPDPACKDESTDIR% 2>nul >nul mkdir %WPDPACKDESTDIR%\Include 2>nul >nul -xcopy /v /Y %WINPCAPSOURCEDIR%\wpcap\libpcap\Win32\Include\bittypes.h %WPDPACKDESTDIR%\Include\ -xcopy /v /Y %WINPCAPSOURCEDIR%\wpcap\libpcap\Win32\Include\Gnuc.h %WPDPACKDESTDIR%\Include\ -xcopy /v /Y %WINPCAPSOURCEDIR%\wpcap\libpcap\Win32\Include\ip6_misc.h %WPDPACKDESTDIR%\Include\ -rem xcopy /v /Y %WINPCAPSOURCEDIR%\wpcap\libpcap\rpcapd\win32-pthreads\pthread.h %WPDPACKDESTDIR%\Include\ -rem xcopy /v /Y %WINPCAPSOURCEDIR%\wpcap\libpcap\rpcapd\win32-pthreads\sched.h %WPDPACKDESTDIR%\Include\ -rem xcopy /v /Y %WINPCAPSOURCEDIR%\wpcap\libpcap\rpcapd\win32-pthreads\semaphore.h %WPDPACKDESTDIR%\Include\ -xcopy /v /Y %WINPCAPSOURCEDIR%\wpcap\libpcap\PCAP-INT.H %WPDPACKDESTDIR%\Include\ -xcopy /v /Y %WINPCAPSOURCEDIR%\wpcap\libpcap\pcap-bpf.h %WPDPACKDESTDIR%\Include\ -xcopy /v /Y %WINPCAPSOURCEDIR%\wpcap\libpcap\pcap-stdinc.h %WPDPACKDESTDIR%\Include\ -xcopy /v /Y %WINPCAPSOURCEDIR%\wpcap\libpcap\PCAP.H %WPDPACKDESTDIR%\Include\ -xcopy /v /Y %WINPCAPSOURCEDIR%\wpcap\libpcap\remote-ext.h %WPDPACKDESTDIR%\Include\ -xcopy /v /Y %WINPCAPSOURCEDIR%\wpcap\Win32-Extensions\Win32-Extensions.h %WPDPACKDESTDIR%\Include\ -xcopy /v /Y %WINPCAPSOURCEDIR%\packetNtx\driver\bucket_lookup.h %WPDPACKDESTDIR%\Include\ -xcopy /v /Y %WINPCAPSOURCEDIR%\packetNtx\driver\count_packets.h %WPDPACKDESTDIR%\Include\ -xcopy /v /Y %WINPCAPSOURCEDIR%\packetNtx\driver\memory_t.h %WPDPACKDESTDIR%\Include\ -xcopy /v /Y %WINPCAPSOURCEDIR%\packetNtx\driver\normal_lookup.h %WPDPACKDESTDIR%\Include\ -xcopy /v /Y %WINPCAPSOURCEDIR%\packetNtx\driver\tcp_session.h %WPDPACKDESTDIR%\Include\ -xcopy /v /Y %WINPCAPSOURCEDIR%\packetNtx\driver\time_calls.h %WPDPACKDESTDIR%\Include\ -xcopy /v /Y %WINPCAPSOURCEDIR%\packetNtx\driver\tme.h %WPDPACKDESTDIR%\Include\ -xcopy /v /Y %WINPCAPSOURCEDIR%\Common\Packet32.h %WPDPACKDESTDIR%\Include\ -xcopy /v /Y %WINPCAPSOURCEDIR%\Common\Devioctl.h %WPDPACKDESTDIR%\Include\ -xcopy /v /Y %WINPCAPSOURCEDIR%\Common\Ntddndis.h %WPDPACKDESTDIR%\Include\ -xcopy /v /Y %WINPCAPSOURCEDIR%\Common\Ntddpack.h %WPDPACKDESTDIR%\Include\ +xcopy /v /Y %WINPCAPSOURCEDIR%\wpcap\libpcap\Win32\Include\bittypes.h %WPDPACKDESTDIR%\Include\ >nul +xcopy /v /Y %WINPCAPSOURCEDIR%\wpcap\libpcap\Win32\Include\Gnuc.h %WPDPACKDESTDIR%\Include\ >nul +xcopy /v /Y %WINPCAPSOURCEDIR%\wpcap\libpcap\Win32\Include\ip6_misc.h %WPDPACKDESTDIR%\Include\ >nul +rem xcopy /v /Y %WINPCAPSOURCEDIR%\wpcap\libpcap\rpcapd\win32-pthreads\pthread.h %WPDPACKDESTDIR%\Include\ >nul +rem xcopy /v /Y %WINPCAPSOURCEDIR%\wpcap\libpcap\rpcapd\win32-pthreads\sched.h %WPDPACKDESTDIR%\Include\ >nul +rem xcopy /v /Y %WINPCAPSOURCEDIR%\wpcap\libpcap\rpcapd\win32-pthreads\semaphore.h %WPDPACKDESTDIR%\Include\ >nul +xcopy /v /Y %WINPCAPSOURCEDIR%\wpcap\libpcap\PCAP-INT.H %WPDPACKDESTDIR%\Include\ >nul +xcopy /v /Y %WINPCAPSOURCEDIR%\wpcap\libpcap\pcap-bpf.h %WPDPACKDESTDIR%\Include\ >nul +xcopy /v /Y %WINPCAPSOURCEDIR%\wpcap\libpcap\pcap-stdinc.h %WPDPACKDESTDIR%\Include\ >nul +xcopy /v /Y %WINPCAPSOURCEDIR%\wpcap\libpcap\PCAP.H %WPDPACKDESTDIR%\Include\ >nul +xcopy /v /Y %WINPCAPSOURCEDIR%\wpcap\libpcap\remote-ext.h %WPDPACKDESTDIR%\Include\ >nul +xcopy /v /Y %WINPCAPSOURCEDIR%\wpcap\Win32-Extensions\Win32-Extensions.h %WPDPACKDESTDIR%\Include\ >nul +xcopy /v /Y %WINPCAPSOURCEDIR%\packetNtx\driver\bucket_lookup.h %WPDPACKDESTDIR%\Include\ >nul +xcopy /v /Y %WINPCAPSOURCEDIR%\packetNtx\driver\count_packets.h %WPDPACKDESTDIR%\Include\ >nul +xcopy /v /Y %WINPCAPSOURCEDIR%\packetNtx\driver\memory_t.h %WPDPACKDESTDIR%\Include\ >nul +xcopy /v /Y %WINPCAPSOURCEDIR%\packetNtx\driver\normal_lookup.h %WPDPACKDESTDIR%\Include\ >nul +xcopy /v /Y %WINPCAPSOURCEDIR%\packetNtx\driver\tcp_session.h %WPDPACKDESTDIR%\Include\ >nul +xcopy /v /Y %WINPCAPSOURCEDIR%\packetNtx\driver\time_calls.h %WPDPACKDESTDIR%\Include\ >nul +xcopy /v /Y %WINPCAPSOURCEDIR%\packetNtx\driver\tme.h %WPDPACKDESTDIR%\Include\ >nul +xcopy /v /Y %WINPCAPSOURCEDIR%\Common\Packet32.h %WPDPACKDESTDIR%\Include\ >nul +xcopy /v /Y %WINPCAPSOURCEDIR%\Common\Devioctl.h %WPDPACKDESTDIR%\Include\ >nul +xcopy /v /Y %WINPCAPSOURCEDIR%\Common\Ntddndis.h %WPDPACKDESTDIR%\Include\ >nul +xcopy /v /Y %WINPCAPSOURCEDIR%\Common\Ntddpack.h %WPDPACKDESTDIR%\Include\ >nul echo Folder \Include created successfully set WPDPACKDESTDIR= diff --git a/create_lib_oem.bat b/create_lib_oem.bat index 944786d0..5c9e6011 100755 --- a/create_lib_oem.bat +++ b/create_lib_oem.bat @@ -6,8 +6,8 @@ echo Creating \Lib folder mkdir %WPDPACKDESTDIR% >nul 2>nul mkdir %WPDPACKDESTDIR%\Lib >nul 2>nul -xcopy /v /Y .\wpcap\PRJ\Release_REMOTE\wpcap.lib %WPDPACKDESTDIR%\Lib\ -xcopy /v /Y .\OEM\WinPcapOEM\release\packet.lib %WPDPACKDESTDIR%\Lib\ +xcopy /v /Y .\wpcap\PRJ\Release_REMOTE\wpcap.lib %WPDPACKDESTDIR%\Lib\ >nul +xcopy /v /Y .\OEM\WinPcapOEM\release\packet.lib %WPDPACKDESTDIR%\Lib\ >nul echo Folder \Lib created successfully From e7f871a2e5443572b5d2ebdf70f4c0f394064260 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 6 Dec 2006 02:15:21 +0000 Subject: [PATCH 185/316] Removed, as replaced by a more complete release procedures file. --- OEM/Instructions.txt | 52 -------------------------------------------- 1 file changed, 52 deletions(-) delete mode 100644 OEM/Instructions.txt diff --git a/OEM/Instructions.txt b/OEM/Instructions.txt deleted file mode 100644 index 31330b6b..00000000 --- a/OEM/Instructions.txt +++ /dev/null @@ -1,52 +0,0 @@ -1. Download the winpcap_oem and winpcap CVS repositories and put them in the same folder - -2. Edit winpcap\Common\WpcapNames.h to set the name that this version of winpcap OEM - will have. - -3. Copy the PacketAndWan project from \winpcap_oem\packetNtx\Dll\Project\ to \winpcap\packetNtx\Dll\Project\ - -4. Copy Compile2k_oem.bat and CompileNT4_oem.bat from \winpcap_oem\packetNtx\ to \winpcap\packetNtx\ - -5. Build the Windows NT4 driver using CompileNT4_oem.bat. Build the Windows 2000 driver using Compile2k_oem.bat. - -6. build the Windows 2000 packet.dll using the PacketAndWan project - -7. build the Windows NT4 packet.dll using the standard project, selecting the following configuration: - -PacketNT - Win32 NT4 OEM - -8. Copy the drivers and dlls to WinpcapOem\binaries\ - -9. Open the WinpcapOem.dsw project file. This project can be used to build both the standard - and the security-enabled version of WinPcap OEM. The security-enabled version requires among - the resources the file with the checksums of the executables that will be accepted. - -10. Compile winpcap OEM. Be sure to do a "rebuild all", otherwise the resources will not be updated. - NOTE: the WinpcapOem.dsw build process will overwrite the packet.lib file in winpcap\common\. - The result of the buils process is the OEM version of packet.dll - -11. Add the following lines to wpcap's Win32-Extensions.c: - -/*! - \brief This function starts WinPcap OEM. - - \param err_str pointer to a user-allocated buffer (of minimum size PCAP_ERRBUF_SIZE) - that will contain the error message in case of failure. - - \return 0 on success, -1 in case of failure. -*/ -int pcap_start_oem(char* err_str) -{ - if(PacketStartOem(err_str, PCAP_ERRBUF_SIZE) == FALSE) - { - return -1; - } - return 0; -} - -12. Add the following line to the wpcap def file: - -pcap_start_oem - -13. Recompile wpcap. - The result is the OEM version of wpcap.dll \ No newline at end of file From cf15ca47efea28812ab8f375636e1fa66a209fc5 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 6 Dec 2006 02:17:50 +0000 Subject: [PATCH 186/316] Updated the note to account for the fact the binaries here are moved automatically by the build process. --- OEM/WinpcapOem/binaries/Note.txt | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/OEM/WinpcapOem/binaries/Note.txt b/OEM/WinpcapOem/binaries/Note.txt index 51f3a1b0..0069cc37 100644 --- a/OEM/WinpcapOem/binaries/Note.txt +++ b/OEM/WinpcapOem/binaries/Note.txt @@ -1,6 +1,11 @@ -Put here the binaries that will be linked as resources to the winpcap OEM packet.dll: +This folder will contain the binaries for the various OSes that will be +embedded in the resources: Packet2k.dll: Windows 2k/XP/2003 packet.dll Packetnt.dll: Windows NT packet.dll +PacketVista.dll: Windows Vista packet.dll npf2k.sys: Windows 2k/XP/2003 driver npfnt.sys: Windows NT driver +npfx64.sys: Windows AMD64 driver + +These files are copied automatically by the build process system in makeall \ No newline at end of file From 294a83cb15e0ea72742929f9b8143e6a67acffa5 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 6 Dec 2006 02:33:54 +0000 Subject: [PATCH 187/316] Cleaned up a bit the mess related to the NpfIm integration. --- build_wpdpack_oem_with_npfim.bat | 48 +++++++++++++++++++------------- release procedures WOEM.txt | 16 +++++------ 2 files changed, 35 insertions(+), 29 deletions(-) diff --git a/build_wpdpack_oem_with_npfim.bat b/build_wpdpack_oem_with_npfim.bat index 7b252369..3c7c14b0 100644 --- a/build_wpdpack_oem_with_npfim.bat +++ b/build_wpdpack_oem_with_npfim.bat @@ -1,38 +1,46 @@ @echo off +set OEM_WPD_NPFIM_DEST_FOLDER=.\WpdPack\ -call build_wpdpack_oem.bat %1 +if "%1"=="-CERTIFIED" ( + echo Using NpfImLoader CERTIFIED DEVPACK + set NPFIM_LOADER_DEVPACK=..\NpfIm\NpfImLoader_DevPack_CERTIFIED + ) else ( + echo use -CERTIFIED to use NpfImLoader CERTIFIED DEVPACK + set NPFIM_LOADER_DEVPACK=..\NpfIm\NpfImLoader_DevPack + ) -if "%1"=="" (set __DEST_FOLDER=.\WpdPack\) ELSE (set __DEST_FOLDER=%1) +set NPFIM_DEVPACK=..\NpfIm\NpfIm_DevPack + +call build_wpdpack_oem.bat %OEM_WPD_NPFIM_DEST_FOLDER% rem now we copy the certified files from the NpfIm engine echo Copying NpfIm specific files -pause rem NOTE: we do not copy all the lib/h files, only the ones really needed, rem i.e. the ones for the loader -xcopy /v /Y ..\NpfImLoader_DevPack\*.h* %__DEST_FOLDER%\include\ >nul -xcopy /v /Y ..\NpfImLoader_DevPack\*.lib %__DEST_FOLDER%\lib\ >nul +xcopy /v /Y %NPFIM_LOADER_DEVPACK%\*.h* %OEM_WPD_NPFIM_DEST_FOLDER%\include\ >nul +xcopy /v /Y %NPFIM_LOADER_DEVPACK%\*.lib %OEM_WPD_NPFIM_DEST_FOLDER%\lib\ >nul rem NOTE: but we copy all the binaries... -xcopy /v /Y ..\NpfImLoader_DevPack\*.dll %__DEST_FOLDER%\bin\ >nul -xcopy /v /Y ..\NpfIm_DevPack\*.dll %__DEST_FOLDER%\bin\ >nul +xcopy /v /Y %NPFIM_LOADER_DEVPACK%\*.dll %OEM_WPD_NPFIM_DEST_FOLDER%\bin\ >nul +xcopy /v /Y %NPFIM_DEVPACK%\*.dll %OEM_WPD_NPFIM_DEST_FOLDER%\bin\ >nul rem copy the available sample, IfListNpfIm. We assume that the sample is in ..\NpfIm\Sample -mkdir %__DEST_FOLDER%\Examples-Remote\IfListNpfIm >nul 2>nul -xcopy /v /Y ..\NpfIm\Samples\IfListNpfIm\*.c* %__DEST_FOLDER%\Examples-Remote\IfListNpfIm\ > nul -xcopy /v /Y ..\NpfIm\Samples\IfListNpfIm\*.h* %__DEST_FOLDER%\Examples-Remote\IfListNpfIm\ > nul -xcopy /v /Y ..\NpfIm\Samples\IfListNpfIm\*.vcproj %__DEST_FOLDER%\Examples-Remote\IfListNpfIm\ > nul -xcopy /v /Y ..\NpfIm\Samples\IfListNpfIm\*.sln %__DEST_FOLDER%\Examples-Remote\IfListNpfIm\ > nul +mkdir %OEM_WPD_NPFIM_DEST_FOLDER%\Examples-Remote\IfListNpfIm >nul 2>nul +xcopy /v /Y ..\NpfIm\Samples\IfListNpfIm\*.c* %OEM_WPD_NPFIM_DEST_FOLDER%\Examples-Remote\IfListNpfIm\ > nul +xcopy /v /Y ..\NpfIm\Samples\IfListNpfIm\*.h* %OEM_WPD_NPFIM_DEST_FOLDER%\Examples-Remote\IfListNpfIm\ > nul +xcopy /v /Y ..\NpfIm\Samples\IfListNpfIm\*.vcproj %OEM_WPD_NPFIM_DEST_FOLDER%\Examples-Remote\IfListNpfIm\ > nul +xcopy /v /Y ..\NpfIm\Samples\IfListNpfIm\*.sln %OEM_WPD_NPFIM_DEST_FOLDER%\Examples-Remote\IfListNpfIm\ > nul rem copy the documentation for npfimLoader -mkdir %__DEST_FOLDER%\docs\NpfImLoader 2>nul >nul -xcopy /s/e/v/Y ..\NpfIm\LowLevelDll\docs\NpfImLoader\*.* %__DEST_FOLDER%\docs\NpfImLoader\ > nul -del /f/s/q %__DEST_FOLDER%\docs\WinPcap >nul -rd %__DEST_FOLDER%\docs\WinPcap >nul 2>nul -ren %__DEST_FOLDER%\docs\html WinPcap -copy /v ..\NpfIm\LowLevelDll\docs\OEM_WinPcap_docs.html %__DEST_FOLDER%\docs\. > nul - -set __DEST_FOLDER= \ No newline at end of file +mkdir %OEM_WPD_NPFIM_DEST_FOLDER%\docs\NpfImLoader 2>nul >nul +xcopy /s/e/v/Y ..\NpfIm\LowLevelDll\docs\NpfImLoader\*.* %OEM_WPD_NPFIM_DEST_FOLDER%\docs\NpfImLoader\ > nul +del /f/s/q %OEM_WPD_NPFIM_DEST_FOLDER%\docs\WinPcap >nul 2>nul +rd %OEM_WPD_NPFIM_DEST_FOLDER%\docs\WinPcap >nul 2>nul +ren %OEM_WPD_NPFIM_DEST_FOLDER%\docs\html WinPcap +copy /v ..\NpfIm\LowLevelDll\docs\OEM_WinPcap_docs.html %OEM_WPD_NPFIM_DEST_FOLDER%\docs\. > nul + +set OEM_WPD_NPFIM_DEST_FOLDER= \ No newline at end of file diff --git a/release procedures WOEM.txt b/release procedures WOEM.txt index 76182ea9..4bec0f4a 100644 --- a/release procedures WOEM.txt +++ b/release procedures WOEM.txt @@ -1,4 +1,4 @@ -$Header: /usr/cvsroot/winpcap_oem/release\040procedures\040WOEM.txt,v 1.8 2006/08/17 17:21:29 gianlucav Exp $ +$Header: /usr/cvsroot/winpcap_oem/release\040procedures\040WOEM.txt,v 1.9 2006/11/27 21:41:22 gianlucav Exp $ OEM WINPCAP RELEASE PROCEDURE ============================= @@ -15,10 +15,10 @@ Dependencies ------------ - you need to have the Airpcap developer's pack in %BUILD_TREE%\Airpcap_Devpack -- you need to have the NpfIm developer's pack in - %BUILD_TREE%\NpfIm_Devpack -- you need to have the NpfImLoader developer's pack in - %BUILD_TREE%\NpfImLoader_Devpack +- you need to have the NpfIm compiled sources in + %BUILD_TREE%\NpfIm + You should also have run the "NpfIm\build_dev_pack.bat" script + to have the devpacks ready How to compile OEM WinPcap (NOT for the Toolkit) ------------------------------------------------ @@ -79,8 +79,7 @@ How to compile OEM WinPcap (NOT for the Toolkit) %BUILD_TREE%\winpcap %BUILD_TREE%\libpcap_ %BUILD_TREE%\Airpcap_Devpack - %BUILD_TREE%\NpfIm_Devpack - %BUILD_TREE%\NpfImLoader_DevPack + %BUILD_TREE%\NpfIm | V %BUILD_TREE%\sources.zip @@ -181,8 +180,7 @@ SCM procedures %BUILD_TREE%\winpcap %BUILD_TREE%\libpcap_ %BUILD_TREE%\Airpcap_Devpack - %BUILD_TREE%\NpfIm_Devpack - %BUILD_TREE%\NpfImLoader_Devpack + %BUILD_TREE%\NpfIm | V OEM_WinPcap__WOEM_Build_Tree.zip From 086d10840a171d5129bf6c08c94e52819c1c7341 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 6 Dec 2006 02:38:12 +0000 Subject: [PATCH 188/316] More cleanup to the scripts. --- build_wpdpack_oem.bat | 28 ++++++++++++++-------------- build_wpdpack_oem_with_npfim.bat | 16 ++++++++++++++-- 2 files changed, 28 insertions(+), 16 deletions(-) diff --git a/build_wpdpack_oem.bat b/build_wpdpack_oem.bat index c00d4c29..27e9f3cf 100755 --- a/build_wpdpack_oem.bat +++ b/build_wpdpack_oem.bat @@ -1,22 +1,22 @@ @echo off -if "%1"=="" (set __DEST_FOLDER=.\WpdPack\) ELSE (set __DEST_FOLDER=%1) +if "%1"=="" (set WOEM_WPD_VANILLA_FOLDER=.\WpdPack\) ELSE (set WOEM_WPD_VANILLA_FOLDER=%1) echo ************************************************ echo The developer's pack will be created in folder -echo %__DEST_FOLDER% +echo %WOEM_WPD_VANILLA_FOLDER% echo ************************************************ -pause +rem pause -call create_include_oem.bat ..\winpcap\ %__DEST_FOLDER% -PAUSE -call create_lib_oem.bat %__DEST_FOLDER% -PAUSE -call create_bin_oem.bat %__DEST_FOLDER% -PAUSE -call create_examples_oem.bat %__DEST_FOLDER% -PAUSE -call create_docs_oem.bat %__DEST_FOLDER% +call create_include_oem.bat ..\winpcap\ %WOEM_WPD_VANILLA_FOLDER% +rem PAUSE +call create_lib_oem.bat %WOEM_WPD_VANILLA_FOLDER% +rem PAUSE +call create_bin_oem.bat %WOEM_WPD_VANILLA_FOLDER% +rem PAUSE +call create_examples_oem.bat %WOEM_WPD_VANILLA_FOLDER% +rem PAUSE +call create_docs_oem.bat %WOEM_WPD_VANILLA_FOLDER% echo Copying the license agreement file -xcopy /v /Y "OEM WinPcap License Agreement.pdf" %__DEST_FOLDER%. >nul -set __DEST_FOLDER= +xcopy /v /Y "OEM WinPcap License Agreement.pdf" %WOEM_WPD_VANILLA_FOLDER%. >nul +set WOEM_WPD_VANILLA_FOLDER= diff --git a/build_wpdpack_oem_with_npfim.bat b/build_wpdpack_oem_with_npfim.bat index 3c7c14b0..2c304c96 100644 --- a/build_wpdpack_oem_with_npfim.bat +++ b/build_wpdpack_oem_with_npfim.bat @@ -1,6 +1,6 @@ @echo off -set OEM_WPD_NPFIM_DEST_FOLDER=.\WpdPack\ +set OEM_WPD_NPFIM_DEST_FOLDER=.\WpdPack_NpfIm\ if "%1"=="-CERTIFIED" ( echo Using NpfImLoader CERTIFIED DEVPACK @@ -12,7 +12,19 @@ if "%1"=="-CERTIFIED" ( set NPFIM_DEVPACK=..\NpfIm\NpfIm_DevPack -call build_wpdpack_oem.bat %OEM_WPD_NPFIM_DEST_FOLDER% +echo ************************************************ +echo The developer's pack will be created in folder +echo %OEM_WPD_NPFIM_DEST_FOLDER% +echo ************************************************ + +call create_include_oem.bat ..\winpcap\ %OEM_WPD_NPFIM_DEST_FOLDER% +call create_lib_oem.bat %OEM_WPD_NPFIM_DEST_FOLDER% +call create_bin_oem.bat %OEM_WPD_NPFIM_DEST_FOLDER% +call create_examples_oem.bat %OEM_WPD_NPFIM_DEST_FOLDER% +call create_docs_oem.bat %OEM_WPD_NPFIM_DEST_FOLDER% + +echo Copying the license agreement file +xcopy /v /Y "OEM WinPcap License Agreement.pdf" %OEM_WPD_NPFIM_DEST_FOLDER% >nul rem now we copy the certified files from the NpfIm engine From 07bdc8242ac16f6a550a8342c3921342a49e0448 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 6 Dec 2006 02:40:19 +0000 Subject: [PATCH 189/316] Fixes to the documentation. --- release procedures WOEM.txt | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/release procedures WOEM.txt b/release procedures WOEM.txt index 4bec0f4a..844b40de 100644 --- a/release procedures WOEM.txt +++ b/release procedures WOEM.txt @@ -1,4 +1,4 @@ -$Header: /usr/cvsroot/winpcap_oem/release\040procedures\040WOEM.txt,v 1.9 2006/11/27 21:41:22 gianlucav Exp $ +$Header: /usr/cvsroot/winpcap_oem/release\040procedures\040WOEM.txt,v 1.10 2006/12/06 02:33:54 gianlucav Exp $ OEM WINPCAP RELEASE PROCEDURE ============================= @@ -137,8 +137,8 @@ How to create the developer's pack for OEM WinPcap (NOT for the Toolkit) %BUILD_TREE%\winpcap_oem -2. Run "build_wpdpack_oem.bat". The script will pause after each step of the - build: +2. Run "build_wpdpack_oem.bat". The script will perform these + steps without pauses: a. Creation of the include folder (no errors/warnings) b. Creation of the lib folder (no errors/warnings) c. Creation of the bin folder (no errors/warnings) @@ -153,24 +153,32 @@ How to create the developer's pack for OEM WinPcap (NOT for the Toolkit) with Np %BUILD_TREE%\winpcap_oem -2. Run "build_wpdpack_oem_with_npfim.bat". The script will pause after each step of the - build: +2. Run "build_wpdpack_oem_with_npfim.bat". The script will perform these + steps without pauses: a. Creation of the include folder (no errors/warnings) b. Creation of the lib folder (no errors/warnings) c. Creation of the bin folder (no errors/warnings) d. Creation of the Examples and Examples-pcap folders (no errors/warnings) e. creation of the documentation. One error copying some *.gif files is reported. - f. copy og the NpfIm files. + f. copy of the NpfIm files. SCM procedures -------------- -1. %BUILD_TREE%\winpcap_oem\wpdpack\ +NpfIm BUILD: +1a. %BUILD_TREE%\winpcap_oem\wpdpack_NpfIm\ + | + v + OEM_WinPcap__WOEM_WpdPackNpfIm.zip + +Vanilla BUILD: +1a. %BUILD_TREE%\winpcap_oem\wpdpack\ | v OEM_WinPcap__WOEM_WpdPack.zip + 2. %BUILD_TREE%\Sources.zip | V From de1ef6fff7eda4a9777be0373ad80b4655ed56bc Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 6 Dec 2006 20:36:52 +0000 Subject: [PATCH 190/316] Updated version to 4.0.2.705. --- dox/prj/winpcap_oem_noc.dox | 2 +- version.h | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dox/prj/winpcap_oem_noc.dox b/dox/prj/winpcap_oem_noc.dox index 6d2d8153..722d07d9 100644 --- a/dox/prj/winpcap_oem_noc.dox +++ b/dox/prj/winpcap_oem_noc.dox @@ -4,7 +4,7 @@ # Project related configuration options #--------------------------------------------------------------------------- PROJECT_NAME = "OEM WinPcap" -PROJECT_NUMBER = 4.0.2.691 +PROJECT_NUMBER = 4.0.2.705 OUTPUT_DIRECTORY = ./ CREATE_SUBDIRS = NO OUTPUT_LANGUAGE = English diff --git a/version.h b/version.h index b76dd683..da0df2ec 100644 --- a/version.h +++ b/version.h @@ -15,14 +15,14 @@ #define WINPCAPOEM_MAJOR 4 #define WINPCAPOEM_MINOR 0 #define WINPCAPOEM_REV 2 -#define WINPCAPOEM_BUILD 691 +#define WINPCAPOEM_BUILD 705 -#define WINPCAPOEM_VER_STRING "4.0.2.691.oem" +#define WINPCAPOEM_VER_STRING "4.0.2.705.oem" #define WINPCAPOEM_COMPANY_NAME "CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_NAME "Packet.dll Wrapper" -#define WINPCAPOEM_VERSION_STRING "4.0.2.691.oem" +#define WINPCAPOEM_VERSION_STRING "4.0.2.705.oem" #define WINPCAPOEM_PRODUCT_NAME "OEM WinPcap" #define WINPCAPOEM_COPYRIGHT_STRING "Copyright © 2005-2006 CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_FILENAME "Packet.dll (wrapper)" From 8ff8c47a3764374d7a76701a4c1558bb8ea6da2e Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 6 Dec 2006 21:58:12 +0000 Subject: [PATCH 191/316] Fixed a dependency problem with the Packet Vista build. --- WinPcap OEM.sln | 1 + 1 file changed, 1 insertion(+) diff --git a/WinPcap OEM.sln b/WinPcap OEM.sln index d98fb9da..71447a5b 100644 --- a/WinPcap OEM.sln +++ b/WinPcap OEM.sln @@ -14,6 +14,7 @@ EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WinpcapOem", "OEM\WinpcapOem\WinpcapOem.vcproj", "{E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}" ProjectSection(ProjectDependencies) = postProject {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2} = {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2} + {8D305FC1-A748-4C63-B419-585BF03165D9} = {8D305FC1-A748-4C63-B419-585BF03165D9} {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D} = {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D} EndProjectSection EndProject From c51f2af3572a71966ba963c714a7032e77fc126f Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 6 Dec 2006 21:58:32 +0000 Subject: [PATCH 192/316] Fixed the paths for the NpfIm files. --- packetNtx/Dll/Project/PacketAndWan2003.vcproj | 4 ++-- packetNtx/Dll/Project/PacketVista.vcproj | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packetNtx/Dll/Project/PacketAndWan2003.vcproj b/packetNtx/Dll/Project/PacketAndWan2003.vcproj index 236c18eb..640e8d25 100644 --- a/packetNtx/Dll/Project/PacketAndWan2003.vcproj +++ b/packetNtx/Dll/Project/PacketAndWan2003.vcproj @@ -21,7 +21,7 @@ Date: Wed, 13 Dec 2006 19:35:58 +0000 Subject: [PATCH 193/316] Fixed a typo in a comment. --- OEM/WinpcapOem/postbuild_release.bat | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OEM/WinpcapOem/postbuild_release.bat b/OEM/WinpcapOem/postbuild_release.bat index 14be7911..6dadfe32 100644 --- a/OEM/WinpcapOem/postbuild_release.bat +++ b/OEM/WinpcapOem/postbuild_release.bat @@ -1,6 +1,6 @@ @echo off echo Copying dll files for debug -REM This copies are needed to debug all the stuff internally, in the cpcap output folders +REM This copies are needed to debug all the stuff internally, in the winpcap output folders if exist release\packet.lib xcopy release\packet.lib ..\..\..\winpcap\common\ /v /y /q From 935f075566ac75c8bee055cc436ff2acb51a28f0 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 13 Dec 2006 19:36:29 +0000 Subject: [PATCH 194/316] Modified the preprocessor definitions needed to enable DLL tracing. --- OEM/WinpcapOem/WoemDebug.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/OEM/WinpcapOem/WoemDebug.h b/OEM/WinpcapOem/WoemDebug.h index ee92412b..05bb7145 100644 --- a/OEM/WinpcapOem/WoemDebug.h +++ b/OEM/WinpcapOem/WoemDebug.h @@ -11,7 +11,6 @@ #include #include - /*! \brief Macro to print a debug string. The behavior differs depending on the debug level */ @@ -227,7 +226,7 @@ static __inline void TRACE_PRINT_OS_INFO() } -#ifdef _DEBUG +#if defined (_DEBUG) || defined (ENABLE_TRACE) #define TRACE_ENTER(_x) OutputDebugMessageNewLine("-->" _x) #define TRACE_EXIT(_x) OutputDebugMessageNewLine("<--" _x) From 8e720cfebc1db07bbccb04066ca4bb14999a320b Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 13 Dec 2006 19:37:03 +0000 Subject: [PATCH 195/316] Fixed the code dynamically extracting the driver on vista x64. --- OEM/WinpcapOem/WinPcapOem.cpp | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/OEM/WinpcapOem/WinPcapOem.cpp b/OEM/WinpcapOem/WinPcapOem.cpp index aac75f7b..78f3f5dd 100644 --- a/OEM/WinpcapOem/WinPcapOem.cpp +++ b/OEM/WinpcapOem/WinPcapOem.cpp @@ -143,6 +143,7 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) DWORD Result; #endif BOOL is64BitOs = FALSE; + BOOL bLoadDriverResult; TRACE_ENTER("WoemEnterDllInternal"); @@ -575,8 +576,6 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) } else if(osVer.dwMajorVersion == 5) { - BOOL bLoadDriverResult; - // // Windows 2000, XP, 2003 // @@ -597,8 +596,6 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) // printf("netmon already here!!!\n"); } - - // // Extract packet.dll to disk // @@ -698,7 +695,18 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) // // Extract the driver to disk // - if(!WoemSaveResourceToDisk(g_DllHandle, IDP_DRI2K, g_DriverFullPath, is64BitOs)) + // + // Extract the driver to disk + // + if (is64BitOs) + { + bLoadDriverResult = WoemSaveResourceToDisk(g_DllHandle, IDP_DRIx64, g_DriverFullPath, TRUE); + } + else + { + bLoadDriverResult = WoemSaveResourceToDisk(g_DllHandle, IDP_DRI2K, g_DriverFullPath, FALSE); + } + if(!bLoadDriverResult) { WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Unable to copy the OEM WinPcap files. Administrative privileges are required for this operation."); From 6f55b3b142f6891f8906720eafa0471808a532a5 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 13 Dec 2006 19:37:59 +0000 Subject: [PATCH 196/316] Added a new configuration for building the packet wrapper with the certified version of the drivers and DLLs. --- OEM/WinpcapOem/WinpcapOem.vcproj | 154 ++++++++++++++++++++++++++++++- WinPcap OEM.sln | 12 ++- 2 files changed, 161 insertions(+), 5 deletions(-) diff --git a/OEM/WinpcapOem/WinpcapOem.vcproj b/OEM/WinpcapOem/WinpcapOem.vcproj index 29526b40..d7874ddb 100644 --- a/OEM/WinpcapOem/WinpcapOem.vcproj +++ b/OEM/WinpcapOem/WinpcapOem.vcproj @@ -287,6 +287,99 @@ + + + + + + + + + + + + + + + @@ -333,6 +426,14 @@ PreprocessorDefinitions="NDEBUG;_MBCS;_USRDLL;WinpcapOem_EXPORTS;WIN32;_WINDOWS;SECURITY;$(NoInherit)" BrowseInformation="1"/> + + + @@ -373,6 +474,14 @@ PreprocessorDefinitions="NDEBUG;_MBCS;_USRDLL;WinpcapOem_EXPORTS;WIN32;_WINDOWS;SECURITY;$(NoInherit)" BrowseInformation="1"/> + + + @@ -413,6 +522,14 @@ PreprocessorDefinitions="NDEBUG;_MBCS;_USRDLL;WinpcapOem_EXPORTS;WIN32;_WINDOWS;SECURITY;$(NoInherit)" BrowseInformation="1"/> + + + @@ -453,6 +570,14 @@ PreprocessorDefinitions="NDEBUG;_MBCS;_USRDLL;WinpcapOem_EXPORTS;WIN32;_WINDOWS;SECURITY;$(NoInherit)" BrowseInformation="1"/> + + + @@ -493,6 +618,14 @@ PreprocessorDefinitions="NDEBUG;_MBCS;_USRDLL;WinpcapOem_EXPORTS;WIN32;_WINDOWS;SECURITY;$(NoInherit)" BrowseInformation="1"/> + + + @@ -533,6 +666,14 @@ PreprocessorDefinitions="NDEBUG;_MBCS;_USRDLL;WinpcapOem_EXPORTS;WIN32;_WINDOWS;SECURITY;$(NoInherit)" BrowseInformation="1"/> + + + + RelativePath="binaries\Packet2k.dll"> + RelativePath="Packet2k.dll"> + + + + + diff --git a/WinPcap OEM.sln b/WinPcap OEM.sln index 71447a5b..0e66d746 100644 --- a/WinPcap OEM.sln +++ b/WinPcap OEM.sln @@ -32,28 +32,30 @@ Global Debug = Debug Debug_TNT = Debug_TNT Release = Release + Release CERTIFIED = Release CERTIFIED Release_TNT = Release_TNT EndGlobalSection GlobalSection(ProjectConfiguration) = postSolution {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Debug.ActiveCfg = Debug|Win32 - {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Debug.Build.0 = Debug|Win32 {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Debug_TNT.ActiveCfg = Debug|Win32 {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Debug_TNT.Build.0 = Debug|Win32 {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release.ActiveCfg = Release|Win32 {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release.Build.0 = Release|Win32 + {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release CERTIFIED.ActiveCfg = Release|Win32 {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release_TNT.ActiveCfg = Release|Win32 {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release_TNT.Build.0 = Release|Win32 {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Debug.ActiveCfg = Debug|Win32 - {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Debug.Build.0 = Debug|Win32 {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Debug_TNT.ActiveCfg = Debug|Win32 {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Debug_TNT.Build.0 = Debug|Win32 {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release.ActiveCfg = Release|Win32 {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release.Build.0 = Release|Win32 + {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release CERTIFIED.ActiveCfg = Release|Win32 {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release_TNT.ActiveCfg = Release|Win32 {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release_TNT.Build.0 = Release|Win32 {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Debug.ActiveCfg = Debug|Win32 {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Debug_TNT.ActiveCfg = Debug|Win32 {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Release.ActiveCfg = Release|Win32 + {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Release CERTIFIED.ActiveCfg = Release|Win32 {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Release_TNT.ActiveCfg = Release|Win32 {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Debug.ActiveCfg = Debug|Win32 {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Debug.Build.0 = Debug|Win32 @@ -61,6 +63,8 @@ Global {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Debug_TNT.Build.0 = Debug_TNT|Win32 {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release.ActiveCfg = Release|Win32 {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release.Build.0 = Release|Win32 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release CERTIFIED.ActiveCfg = Release CERTIFIED|Win32 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release CERTIFIED.Build.0 = Release CERTIFIED|Win32 {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release_TNT.ActiveCfg = Release_TNT|Win32 {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release_TNT.Build.0 = Release_TNT|Win32 {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Debug.ActiveCfg = Debug REMOTE|Win32 @@ -69,14 +73,16 @@ Global {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Debug_TNT.Build.0 = Debug REMOTE TNT|Win32 {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release.ActiveCfg = Release REMOTE|Win32 {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release.Build.0 = Release REMOTE|Win32 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release CERTIFIED.ActiveCfg = Release REMOTE|Win32 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release CERTIFIED.Build.0 = Release REMOTE|Win32 {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release_TNT.ActiveCfg = Release REMOTE TNT|Win32 {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release_TNT.Build.0 = Release REMOTE TNT|Win32 {8D305FC1-A748-4C63-B419-585BF03165D9}.Debug.ActiveCfg = Debug|Win32 - {8D305FC1-A748-4C63-B419-585BF03165D9}.Debug.Build.0 = Debug|Win32 {8D305FC1-A748-4C63-B419-585BF03165D9}.Debug_TNT.ActiveCfg = Debug|Win32 {8D305FC1-A748-4C63-B419-585BF03165D9}.Debug_TNT.Build.0 = Debug|Win32 {8D305FC1-A748-4C63-B419-585BF03165D9}.Release.ActiveCfg = Release|Win32 {8D305FC1-A748-4C63-B419-585BF03165D9}.Release.Build.0 = Release|Win32 + {8D305FC1-A748-4C63-B419-585BF03165D9}.Release CERTIFIED.ActiveCfg = Release|Win32 {8D305FC1-A748-4C63-B419-585BF03165D9}.Release_TNT.ActiveCfg = Release|Win32 {8D305FC1-A748-4C63-B419-585BF03165D9}.Release_TNT.Build.0 = Release|Win32 EndGlobalSection From 0cee13fbea360cb6afd8fbb99724902afedd1fb7 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Thu, 14 Dec 2006 19:21:27 +0000 Subject: [PATCH 197/316] Disabled some compilation warnings due to deprecated functions. --- OEM/WinpcapOem/WoemDebug.h | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/OEM/WinpcapOem/WoemDebug.h b/OEM/WinpcapOem/WoemDebug.h index 05bb7145..99bdaa4c 100644 --- a/OEM/WinpcapOem/WoemDebug.h +++ b/OEM/WinpcapOem/WoemDebug.h @@ -11,6 +11,11 @@ #include #include +//#define ENABLE_TRACE + +#pragma warning ( push ) +#pragma warning( disable : 4995 ) // deprecated string functions. BE CAREFUL, it disabled all deprecated warnings + /*! \brief Macro to print a debug string. The behavior differs depending on the debug level */ @@ -226,6 +231,9 @@ static __inline void TRACE_PRINT_OS_INFO() } +#pragma warning ( pop ) + + #if defined (_DEBUG) || defined (ENABLE_TRACE) #define TRACE_ENTER(_x) OutputDebugMessageNewLine("-->" _x) From 9f748342c584ebb8cb57d81c55293d6cdf7f0ee3 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Thu, 14 Dec 2006 19:22:50 +0000 Subject: [PATCH 198/316] Migrated from FILE based operations to the Win32 ones (CreateFile, ReadFile and such). Added some better tracing. got rid of the dependency over stdio.h. --- OEM/WinpcapOem/Resources.cpp | 312 ++++++++++++++++++----------------- 1 file changed, 163 insertions(+), 149 deletions(-) diff --git a/OEM/WinpcapOem/Resources.cpp b/OEM/WinpcapOem/Resources.cpp index befd46cf..89b3b7af 100644 --- a/OEM/WinpcapOem/Resources.cpp +++ b/OEM/WinpcapOem/Resources.cpp @@ -1,6 +1,7 @@ #include -#include +#include #include "WinpcapOem.h" +#include "WoemDebug.h" //////////////////////////////////////////////////////////////////// // This function locates one of the binary resources embedded in the @@ -8,205 +9,218 @@ //////////////////////////////////////////////////////////////////// BOOL WoemSaveResourceToDisk(HINSTANCE hInst, int ResID, char* FileName, BOOL bDisableFsRedirector) { - char ResName[100]; - FILE* OutFile; - PVOID OldFsRedirectorValue; + DWORD dwLastError = ERROR_SUCCESS; + HANDLE hFile = INVALID_HANDLE_VALUE; + PVOID OldFsRedirectorValue = NULL; HMODULE hKernel32Dll = NULL; - Wow64DisableWow64FsRedirectionHandler DisableFsRedirector; - Wow64RevertWow64FsRedirectionHandler RevertFsRedirector; + Wow64DisableWow64FsRedirectionHandler DisableFsRedirector = NULL; + Wow64RevertWow64FsRedirectionHandler RevertFsRedirector = NULL; + CHAR ResName[100]; #ifdef STATIC_LIB hInst = NULL; #endif - if (bDisableFsRedirector) - { - // - // load the FS redirector function dynamically - // - hKernel32Dll = LoadLibrary("kernel32.dll"); + TRACE_ENTER("WoemSaveResourceToDisk"); + + StringCchPrintfA(ResName, sizeof(ResName), "#%d", ResID); - if (hKernel32Dll == NULL) + TRACE_MESSAGE("Decompressing to file %s", FileName); + + do + { + if (bDisableFsRedirector) { - return FALSE; - } - - DisableFsRedirector = - (Wow64DisableWow64FsRedirectionHandler)GetProcAddress( + // + // load the FS redirector function dynamically + // + hKernel32Dll = LoadLibrary("kernel32.dll"); + + if (hKernel32Dll == NULL) + { + dwLastError = GetLastError(); + TRACE_MESSAGE("Cannot load kernel32.dll to disable the FS redirector"); + break; + } + + DisableFsRedirector = + (Wow64DisableWow64FsRedirectionHandler)GetProcAddress( hKernel32Dll, "Wow64DisableWow64FsRedirection"); - RevertFsRedirector = - (Wow64RevertWow64FsRedirectionHandler)GetProcAddress( + RevertFsRedirector = + (Wow64RevertWow64FsRedirectionHandler)GetProcAddress( hKernel32Dll, "Wow64RevertWow64FsRedirection"); - if (DisableFsRedirector == NULL || RevertFsRedirector == NULL) - { - FreeLibrary(hKernel32Dll); - return FALSE; - } + if (DisableFsRedirector == NULL || RevertFsRedirector == NULL) + { + dwLastError = ERROR_OUTOFMEMORY; + break; + } - if (DisableFsRedirector(&OldFsRedirectorValue) == FALSE) - { - FreeLibrary(hKernel32Dll); - return FALSE; + if (DisableFsRedirector(&OldFsRedirectorValue) == FALSE) + { + dwLastError = GetLastError(); + break; + } } - } - - sprintf(ResName, "#%d", ResID); - // - // Find the resource - // - HRSRC hRes = FindResource(hInst, ResName, RT_RCDATA); - if(!hRes) - { - if (hKernel32Dll != NULL) + + // + // Find the resource + // + HRSRC hRes = FindResource(hInst, ResName, RT_RCDATA); + if(hRes == NULL) { - FreeLibrary(hKernel32Dll); + dwLastError = GetLastError(); + break; } - return FALSE; - } - - // - // Get the size of the resource - // - DWORD dwResSize = SizeofResource(hInst, hRes); - if(dwResSize == 0) - { - if (hKernel32Dll != NULL) + + // + // Get the size of the resource + // + DWORD dwResSize = SizeofResource(hInst, hRes); + if(dwResSize == 0) { - FreeLibrary(hKernel32Dll); + dwLastError = GetLastError(); + break; } - return FALSE; - } - - // - // Load the resource - // - HGLOBAL hResGlobal = LoadResource(hInst, hRes); - if(!hResGlobal) - { - if (hKernel32Dll != NULL) + + TRACE_MESSAGE("The resource has a size of %u bytes", dwResSize); + // + // Load the resource + // + HGLOBAL hResGlobal = LoadResource(hInst, hRes); + if( hResGlobal == NULL) { - FreeLibrary(hKernel32Dll); + dwLastError = GetLastError(); + break; } - return FALSE; - } - - // - // Get the address of the resource - // Note: according to MSDN it's not necessary to unlock the resource - // - LPVOID lpResMem = LockResource(hResGlobal); - if(!hRes) - { - if (hKernel32Dll != NULL) + + // + // Get the address of the resource + // Note: according to MSDN it's not necessary to unlock the resource + // + LPVOID lpResMem = LockResource(hResGlobal); + if(!hRes) { - FreeLibrary(hKernel32Dll); + dwLastError = GetLastError(); + break; } - return FALSE; - } - // - // Save the resource to disk - // - OutFile = fopen(FileName, "wb"); + hFile = CreateFile(FileName, GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, 0, NULL); - if (bDisableFsRedirector) - { + if (hFile == INVALID_HANDLE_VALUE) + { + dwLastError = GetLastError(); + TRACE_MESSAGE("Cannot open file %8.8x", dwLastError); + } - if (RevertFsRedirector(OldFsRedirectorValue) == FALSE) + // + // Save the resource to disk + // + if (bDisableFsRedirector) { - if (hKernel32Dll != NULL) + if (RevertFsRedirector(OldFsRedirectorValue) == FALSE) { - FreeLibrary(hKernel32Dll); + dwLastError = GetLastError(); + break; } - return FALSE; } - } - - if(!OutFile) - { - if (hKernel32Dll != NULL) + if (hFile == INVALID_HANDLE_VALUE) { - FreeLibrary(hKernel32Dll); + break; } + + DWORD writtenBytes = 0; + do + { + DWORD localWrittenBytes; - return FALSE; - } + if (WriteFile(hFile, lpResMem, dwResSize - writtenBytes, &localWrittenBytes, NULL) == FALSE) + { + dwLastError = GetLastError(); + break; + } + TRACE_MESSAGE("Written %u bytes", localWrittenBytes); + writtenBytes += localWrittenBytes; + } + while(writtenBytes < dwResSize); + + }while(FALSE); - if(fwrite(lpResMem, - 1, - dwResSize, - OutFile) != dwResSize) - { - fclose(OutFile); + if (hKernel32Dll != NULL) FreeLibrary(hKernel32Dll); - if (hKernel32Dll != NULL) - { - FreeLibrary(hKernel32Dll); - } + if (hFile != INVALID_HANDLE_VALUE) CloseHandle(hFile); - return FALSE; - } + if (hFile != INVALID_HANDLE_VALUE && dwLastError != ERROR_SUCCESS) DeleteFileA(FileName); - if (hKernel32Dll != NULL) - { - FreeLibrary(hKernel32Dll); - } + if (dwLastError != ERROR_SUCCESS) SetLastError(dwLastError); - fclose(OutFile); + TRACE_EXIT("WoemSaveResourceToDisk"); - return TRUE; + return (dwLastError == ERROR_SUCCESS); } BOOL WoemGetResource(HINSTANCE hInst, int ResID, LPVOID * lpResMem, LPDWORD dwResSize) { char ResName[100]; - sprintf(ResName, "#%d", ResID); + HRSRC hRes; + BOOL bResult = FALSE; + + TRACE_ENTER("WoemGetResource"); #ifdef STATIC_LIB hInst = NULL; #endif - // - // Find the resource - // - HRSRC hRes = FindResource(hInst, ResName, RT_RCDATA); - if(!hRes) - { - return FALSE; - } - - // - // Get the size of the resource - // - *dwResSize = SizeofResource(hInst, hRes); - if(dwResSize == 0) - { - return FALSE; - } - - // - // Load the resource - // - HGLOBAL hResGlobal = LoadResource(hInst, hRes); - if(!hResGlobal) - { - return FALSE; - } - - // - // Get the address of the resource - // Note: according to MSDN it's not necessary to unlock the resource - // - *lpResMem = LockResource(hResGlobal); - if(!hRes) + StringCchPrintfA(ResName, sizeof(ResName), "#%d", ResID); + + do { - return FALSE; - } - return TRUE; + // + // Find the resource + // + hRes = FindResource(hInst, ResName, RT_RCDATA); + if(!hRes) + { + break; + } + + // + // Get the size of the resource + // + *dwResSize = SizeofResource(hInst, hRes); + if(dwResSize == 0) + { + break; + } + + // + // Load the resource + // + HGLOBAL hResGlobal = LoadResource(hInst, hRes); + if(!hResGlobal) + { + break; + } + + // + // Get the address of the resource + // Note: according to MSDN it's not necessary to unlock the resource + // + *lpResMem = LockResource(hResGlobal); + if(!hRes) + { + break; + } + + bResult = TRUE; + }while(FALSE); + + TRACE_EXIT("WoemGetResource"); + + return bResult; } From b87fb65927219916a6cb9b9be80d2dc427b1f578 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 10 Jan 2007 17:46:23 +0000 Subject: [PATCH 199/316] Updated version info to 4.0.2.730 and copyright year to 2007. --- dox/footer.htm | 2 +- dox/prj/winpcap_oem_noc.dox | 2 +- version.h | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/dox/footer.htm b/dox/footer.htm index 189999cb..37017989 100644 --- a/dox/footer.htm +++ b/dox/footer.htm @@ -1,7 +1,7 @@


        -Copyright (c) 2005 - 2006 CACE Technologies. All rights reserved.

    +Copyright (c) 2005 - 2007 CACE Technologies. All rights reserved.

    diff --git a/dox/prj/winpcap_oem_noc.dox b/dox/prj/winpcap_oem_noc.dox index 722d07d9..6f9790fb 100644 --- a/dox/prj/winpcap_oem_noc.dox +++ b/dox/prj/winpcap_oem_noc.dox @@ -4,7 +4,7 @@ # Project related configuration options #--------------------------------------------------------------------------- PROJECT_NAME = "OEM WinPcap" -PROJECT_NUMBER = 4.0.2.705 +PROJECT_NUMBER = 4.0.2.730 OUTPUT_DIRECTORY = ./ CREATE_SUBDIRS = NO OUTPUT_LANGUAGE = English diff --git a/version.h b/version.h index da0df2ec..044c32ca 100644 --- a/version.h +++ b/version.h @@ -15,16 +15,16 @@ #define WINPCAPOEM_MAJOR 4 #define WINPCAPOEM_MINOR 0 #define WINPCAPOEM_REV 2 -#define WINPCAPOEM_BUILD 705 +#define WINPCAPOEM_BUILD 730 -#define WINPCAPOEM_VER_STRING "4.0.2.705.oem" +#define WINPCAPOEM_VER_STRING "4.0.2.730.oem" #define WINPCAPOEM_COMPANY_NAME "CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_NAME "Packet.dll Wrapper" -#define WINPCAPOEM_VERSION_STRING "4.0.2.705.oem" +#define WINPCAPOEM_VERSION_STRING "4.0.2.730.oem" #define WINPCAPOEM_PRODUCT_NAME "OEM WinPcap" -#define WINPCAPOEM_COPYRIGHT_STRING "Copyright © 2005-2006 CACE Technologies" +#define WINPCAPOEM_COPYRIGHT_STRING "Copyright © 2005-2007 CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_FILENAME "Packet.dll (wrapper)" #define WINPCAPOEM_BUILD_DESCRIPTION "" #define WINPCAPOEM_PRIVATE_BUILD "" From 317156b44b6476071f0c338fc7c0b328eab4ed01 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Mon, 22 Jan 2007 18:38:39 +0000 Subject: [PATCH 200/316] Renamed all the occurrences of OEM WinPcap into WinPcap Professional. Updated the supported operating systems. --- dox/doxygen_groups.txt | 6 +++--- dox/header.htm | 6 +++--- dox/intro.htm | 18 +++++++++--------- dox/wpcap_samp.htm | 22 +++++++++++----------- 4 files changed, 26 insertions(+), 26 deletions(-) diff --git a/dox/doxygen_groups.txt b/dox/doxygen_groups.txt index 3bd67f54..6d637459 100644 --- a/dox/doxygen_groups.txt +++ b/dox/doxygen_groups.txt @@ -1,5 +1,5 @@ /*! - \defgroup internals OEM WinPcap internals + \defgroup internals WinPcap Professional internals \htmlinclude internals.htm */ @@ -10,7 +10,7 @@ */ /*! - \defgroup wpcap OEM WinPcap user's manual + \defgroup wpcap WinPcap Professional user's manual \htmlinclude wpcap.htm */ @@ -23,7 +23,7 @@ /*! \ingroup wpcap - \defgroup wpcapsamps Using OEM WinPcap in your programs + \defgroup wpcapsamps Using WinPcap Professional in your programs \htmlinclude wpcap_samp.htm \htmlinclude wpcap_samp1.htm diff --git a/dox/header.htm b/dox/header.htm index 24a5d3af..fa5133df 100644 --- a/dox/header.htm +++ b/dox/header.htm @@ -1,11 +1,11 @@ -OEM WinPcap Documentation +WinPcap Professional Documentation - +
    OEM_logo.jpgWinPcapPro_logo.jpg
    @@ -17,7 +17,7 @@
    Definitions | Exported functions | Filtering expression syntax | - Using OEM WinPcap in your programs | + Using WinPcap Professional in your programs | Tutorial diff --git a/dox/intro.htm b/dox/intro.htm index a6e52d41..f16d8be7 100644 --- a/dox/intro.htm +++ b/dox/intro.htm @@ -14,7 +14,7 @@

    Introduction

    This Manual describes the -programming interface OEM WinPcap. It provides detailed +programming interface of WinPcap Professional. It provides detailed descriptions of the functions and structures exported to programmers, along with several tutorials and examples.  @@ -56,16 +56,16 @@

    What is WinPcap

    goal of this manual is to document this interface, with the help of several examples.  If you are interested in starting your exploration right away you can go directly to the WinPcap user's manual.

    -

    What is OEM WinPcap

    -

    OEM WinPcap is a customized version of WinPcap, +

    What is WinPcap Professional

    +

    WinPcap Professional is a customized version of WinPcap, specifically tailored for companies needing to embed the WinPcap technology -inside their applications. Here are the main features of OEM WinPcap:

    +inside their applications. Here are the main features of WinPcap Professional:

    • no installation required.
    • easy to include in third party applications (you - just put the OEM WinPcap DLLs in the same folder of your application).
    • + just put the WinPcap Professional DLLs in the same folder of your application).
    • no conflicts with versions of WinPcap previously - installed on the target machine, since OEM WinPcap loads its own drivers.
    • + installed on the target machine, since WinPcap Professional loads its own drivers.
    • loads the driver when the user starts your application, unloads the driver when the user closes your application.
    • support for @@ -74,15 +74,15 @@

      What is OEM WinPcap

    • Windows 2000
    • Windows XP (x86 and x64)
    • Windows Server 2003 (x86 and x64)
    • -
    • Windows Vista BETA 2 (x86 only).
    • +
    • Windows Vista (x86 and x64).
    -

    Including OEM WinPcap in your application and deploying it in your installer +

    Including WinPcap Professional in your application and deploying it in your installer is extremely easy, just follow the instructions in section -Using OEM WinPcap in your +Using WinPcap Professional in your programs.

    What kind of programs use WinPcap

    diff --git a/dox/wpcap_samp.htm b/dox/wpcap_samp.htm index 1a1f5d3e..f505f832 100644 --- a/dox/wpcap_samp.htm +++ b/dox/wpcap_samp.htm @@ -8,7 +8,7 @@ -

    Creating an application that uses OEM WinPcap

    +

    Creating an application that uses WinPcap Professional

    To create an application that uses wpcap.dll with Microsoft Visual C++, follow these steps:

    @@ -20,12 +20,12 @@

    Creating an application that uses OEM WinPcap

  • If your program uses the remote extensions (pcap_findalldevs_ex() is among the remote extensions), remember to add HAVE_REMOTE among your preprocessor definitions.
  • Set the options of the linker to include the wpcap.lib library file. wpcap.lib can - be found in the \lib folder of the OEM WinPcap developer's pack. + be found in the \lib folder of the WinPcap Professional developer's pack.
  • Set the options of the linker to include the winsock library file (for example wsock32.lib). This file is distributed with the C compiler and contains the socket functions for Windows. It is needed by some libpcap functions.
  • -
  • Initialize OEM WinPcap before calling *any* pcap function by calling +
  • Initialize WinPcap Professional before calling *any* pcap function by calling pcap_start_oem. Here is some sample code you may use:

  • @@ -33,13 +33,13 @@

    Creating an application that uses OEM WinPcap

    ...
    if (pcap_start_oem(errbuf, 0) == -1)
    {
    -    printf("Error initializing OEM WinPcap: %s\n", errbuf);
    +    printf("Error initializing WinPcap Professional: %s\n", errbuf);
        exit(1);
    } -  
  • Place the OEM WinPcap DLLs available in the \bin folder of the +  
  • Place the WinPcap Professional DLLs available in the \bin folder of the developer's pack into the working directory of your application.
    IMPORTANT NOTE: in order to avoid conflicts with any existing - installation of WinPcap, you should avoid putting the OEM WinPcap DLLs in + installation of WinPcap, you should avoid putting the WinPcap Professional DLLs in the system folder (usually c:\windows\system32) or generally in a folder on your PATH.
  • @@ -62,20 +62,20 @@

    Creating an application that uses OEM WinPcap

    from the tab control, Include files from the Show directories for combobox, and the add the path in the Directories box. -

    Deploying OEM WinPcap in your application installation

    -

    Installing OEM WinPcap with your application is extremely easy: you should +

    Deploying WinPcap Professional in your application installation

    +

    Installing WinPcap Professional with your application is extremely easy: you should just copy the DLLs available in the \bin folder of the developer's pack (i.e. packet.dll and wpcap.dll) into the working directory of your application.

    IMPORTANT NOTE: in order to avoid conflicts with any existing installation of -WinPcap, you should avoid putting the OEM WinPcap DLLs in the system folder +WinPcap, you should avoid putting the WinPcap Professional DLLs in the system folder (usually c:\windows\system32) or generally in a folder on your PATH.

    Sample programs

    A couple of sample programs are provided to show the usage of the WinPcap API. The source of the examples, along with all the files needed to compile and run them, can be found in the Developer's -Pack of OEM WinPcap. For didactic purpose we provide here a browsable version of +Pack of WinPcap Professional. For didactic purpose we provide here a browsable version of the code: it is possible to click on the variables and functions to jump the documentation of each of them. For a more complete set of samples, please refer -to the OEM WinPcap +to the WinPcap Professional Tutorial Section.

    From 03d411abfd4edf58a497a9947d0c9ee356e7f11a Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Mon, 22 Jan 2007 18:39:50 +0000 Subject: [PATCH 201/316] Renamed all the occurrences of OEM WinPcap into WinPcap Professional. --- Examples-pcap.diff | 40 ++++++++++++------------- Examples.diff | 60 ++++++++++++++++++------------------- create_docs_oem.bat | 2 +- dox/prj/winpcap_oem_noc.dox | 2 +- dox/wpcap_tut.txt | 2 +- dox/wpcap_tut1.txt | 6 ++-- version.h | 8 ++--- wpcap/pcap_oem.c | 4 ++- 8 files changed, 63 insertions(+), 61 deletions(-) diff --git a/Examples-pcap.diff b/Examples-pcap.diff index 5c22957f..20166cfc 100644 --- a/Examples-pcap.diff +++ b/Examples-pcap.diff @@ -5,10 +5,10 @@ diff -urb ..\winpcap\Examples-pcap/UDPdump/udpdump.c .\archive\Examples-pcap/UDP char packet_filter[] = "ip and udp"; struct bpf_program fcode; -+ /* start OEM WinPcap */ ++ /* start WinPcap Professional */ + if (pcap_start_oem(errbuf, 0) == -1) + { -+ fprintf(stderr, "Error starting OEM WinPcap: %s\n", errbuf); ++ fprintf(stderr, "Error starting WinPcap Professional: %s\n", errbuf); + exit(1); + } + @@ -22,10 +22,10 @@ diff -urb ..\winpcap\Examples-pcap/basic_dump/basic_dump.c .\archive\Examples-pc pcap_t *adhandle; char errbuf[PCAP_ERRBUF_SIZE]; -+ /* start OEM WinPcap */ ++ /* start WinPcap Professional */ + if (pcap_start_oem(errbuf, 0) == -1) + { -+ fprintf(stderr, "Error starting OEM WinPcap: %s\n", errbuf); ++ fprintf(stderr, "Error starting WinPcap Professional: %s\n", errbuf); + exit(1); + } + @@ -39,10 +39,10 @@ diff -urb ..\winpcap\Examples-pcap/basic_dump_ex/basic_dump_ex.c .\archive\Examp struct pcap_pkthdr *header; const u_char *pkt_data; -+ /* start OEM WinPcap */ ++ /* start WinPcap Professional */ + if (pcap_start_oem(errbuf, 0) == -1) + { -+ fprintf(stderr, "Error starting OEM WinPcap: %s\n", errbuf); ++ fprintf(stderr, "Error starting WinPcap Professional: %s\n", errbuf); + exit(1); + } @@ -55,10 +55,10 @@ diff -urb ..\winpcap\Examples-pcap/iflist/iflist.c .\archive\Examples-pcap/iflis pcap_if_t *d; char errbuf[PCAP_ERRBUF_SIZE+1]; -+ /* start OEM WinPcap */ ++ /* start WinPcap Professional */ + if (pcap_start_oem(errbuf, 0) == -1) + { -+ fprintf(stderr, "Error starting OEM WinPcap: %s\n", errbuf); ++ fprintf(stderr, "Error starting WinPcap Professional: %s\n", errbuf); + exit(1); + } + @@ -72,10 +72,10 @@ diff -urb ..\winpcap\Examples-pcap/pcap_filter/pcap_filter.c .\archive\Examples- } } -+ /* start OEM WinPcap */ ++ /* start WinPcap Professional */ + if (pcap_start_oem(errbuf, 0) == -1) + { -+ fprintf(stderr, "Error starting OEM WinPcap: %s\n", errbuf); ++ fprintf(stderr, "Error starting WinPcap Professional: %s\n", errbuf); + exit(1); + } + @@ -89,10 +89,10 @@ diff -urb ..\winpcap\Examples-pcap/pktdump_ex/pktdump_ex.c .\archive\Examples-pc " pktdump_ex -s file.acp\n" " pktdump_ex -s \\Device\\NPF_{C8736017-F3C3-4373-94AC-9A34B7DAD998}\n\n"); -+ /* start OEM WinPcap */ ++ /* start WinPcap Professional */ + if (pcap_start_oem(errbuf, 0) == -1) + { -+ fprintf(stderr, "Error starting OEM WinPcap: %s\n", errbuf); ++ fprintf(stderr, "Error starting WinPcap Professional: %s\n", errbuf); + exit(1); + } + @@ -106,10 +106,10 @@ diff -urb ..\winpcap\Examples-pcap/readfile/readfile.c .\archive\Examples-pcap/r } -+ /* start OEM WinPcap */ ++ /* start WinPcap Professional */ + if (pcap_start_oem(errbuf, 0) == -1) + { -+ fprintf(stderr, "Error starting OEM WinPcap: %s\n", errbuf); ++ fprintf(stderr, "Error starting WinPcap Professional: %s\n", errbuf); + exit(1); + } + @@ -123,10 +123,10 @@ diff -urb ..\winpcap\Examples-pcap/readfile_ex/readfile_ex.c .\archive\Examples- } -+ /* start OEM WinPcap */ ++ /* start WinPcap Professional */ + if (pcap_start_oem(errbuf, 0) == -1) + { -+ fprintf(stderr, "Error starting OEM WinPcap: %s\n", errbuf); ++ fprintf(stderr, "Error starting WinPcap Professional: %s\n", errbuf); + exit(1); + } + @@ -140,10 +140,10 @@ diff -urb ..\winpcap\Examples-pcap/savedump/savedump.c .\archive\Examples-pcap/s return -1; } -+ /* start OEM WinPcap */ ++ /* start WinPcap Professional */ + if (pcap_start_oem(errbuf, 0) == -1) + { -+ fprintf(stderr, "Error starting OEM WinPcap: %s\n", errbuf); ++ fprintf(stderr, "Error starting WinPcap Professional: %s\n", errbuf); + exit(1); + } + @@ -157,10 +157,10 @@ diff -urb ..\winpcap\Examples-pcap/sendpack/sendpack.c .\archive\Examples-pcap/s return 1; } -+ /* start OEM WinPcap */ ++ /* start WinPcap Professional */ + if (pcap_start_oem(errbuf, 0) == -1) + { -+ fprintf(stderr, "Error starting OEM WinPcap: %s\n", errbuf); ++ fprintf(stderr, "Error starting WinPcap Professional: %s\n", errbuf); + exit(1); + } + diff --git a/Examples.diff b/Examples.diff index 33563c66..d829a8aa 100644 --- a/Examples.diff +++ b/Examples.diff @@ -8,11 +8,11 @@ diff -urb ..\winpcap\Examples/PacketDriver/GetMacAddress/GetMacAddress.c .\Examp + CHAR ErrBuffer[1024]; + + // -+ // start OEM WinPcap ++ // start WinPcap Professional + // + if(PacketStartOem(ErrBuffer, sizeof(ErrBuffer)) == FALSE) + { -+ printf("Cannot start OEM WinPcap: %s\n", ErrBuffer); ++ printf("Cannot start WinPcap Professional: %s\n", ErrBuffer); + return -1; + } @@ -28,11 +28,11 @@ diff -urb ..\winpcap\Examples/PacketDriver/TestPacketCapture/TestPacketCapture.c + CHAR ErrBuffer[1024]; + + // -+ // start OEM WinPcap ++ // start WinPcap Professional + // + if(PacketStartOem(ErrBuffer, sizeof(ErrBuffer)) == FALSE) + { -+ printf("Cannot start OEM WinPcap: %s\n", ErrBuffer); ++ printf("Cannot start WinPcap Professional: %s\n", ErrBuffer); + return -1; + } + @@ -55,11 +55,11 @@ diff -urb ..\winpcap\Examples/PacketDriver/TestPacketSend/TestPacketSend.c .\Exa } + // -+ // start OEM WinPcap ++ // start WinPcap Professional + // + if(PacketStartOem(ErrBuffer, sizeof(ErrBuffer)) == FALSE) + { -+ printf("Cannot start OEM WinPcap: %s\n", ErrBuffer); ++ printf("Cannot start WinPcap Professional: %s\n", ErrBuffer); + return -1; + } @@ -72,10 +72,10 @@ diff -urb ..\winpcap\Examples/UDPdump/udpdump.c .\Examples/UDPdump/udpdump.c char packet_filter[] = "ip and udp"; struct bpf_program fcode; -+ /* start OEM WinPcap */ ++ /* start WinPcap Professional */ + if (pcap_start_oem(errbuf, 0) == -1) + { -+ fprintf(stderr, "Error starting OEM WinPcap: %s\n", errbuf); ++ fprintf(stderr, "Error starting WinPcap Professional: %s\n", errbuf); + exit(1); + } + @@ -89,10 +89,10 @@ diff -urb ..\winpcap\Examples/UserLevelBridge/UserBridge.c .\Examples/UserLevelB struct bpf_program fcode; in_out_adapters couple0, couple1; -+ /* start OEM WinPcap */ ++ /* start WinPcap Professional */ + if (pcap_start_oem(errbuf, 0) == -1) + { -+ fprintf(stderr, "Error starting OEM WinPcap: %s\n", errbuf); ++ fprintf(stderr, "Error starting WinPcap Professional: %s\n", errbuf); + exit(1); + } + @@ -106,10 +106,10 @@ diff -urb ..\winpcap\Examples/iflist/iflist.c .\Examples/iflist/iflist.c char errbuf[PCAP_ERRBUF_SIZE+1]; char source[PCAP_ERRBUF_SIZE+1]; -+ /* start OEM WinPcap */ ++ /* start WinPcap Professional */ + if (pcap_start_oem(errbuf, 0) == -1) + { -+ fprintf(stderr, "Error starting OEM WinPcap: %s\n", errbuf); ++ fprintf(stderr, "Error starting WinPcap Professional: %s\n", errbuf); + exit(1); + } + @@ -123,10 +123,10 @@ diff -urb ..\winpcap\Examples/misc/basic_dump.c .\Examples/misc/basic_dump.c pcap_t *adhandle; char errbuf[PCAP_ERRBUF_SIZE]; -+ /* start OEM WinPcap */ ++ /* start WinPcap Professional */ + if (pcap_start_oem(errbuf, 0) == -1) + { -+ fprintf(stderr, "Error starting OEM WinPcap: %s\n", errbuf); ++ fprintf(stderr, "Error starting WinPcap Professional: %s\n", errbuf); + exit(1); + } + @@ -140,10 +140,10 @@ diff -urb ..\winpcap\Examples/misc/basic_dump_ex.c .\Examples/misc/basic_dump_ex struct pcap_pkthdr *header; u_char *pkt_data; -+ /* start OEM WinPcap */ ++ /* start WinPcap Professional */ + if (pcap_start_oem(errbuf, 0) == -1) + { -+ fprintf(stderr, "Error starting OEM WinPcap: %s\n", errbuf); ++ fprintf(stderr, "Error starting WinPcap Professional: %s\n", errbuf); + exit(1); + } @@ -156,10 +156,10 @@ diff -urb ..\winpcap\Examples/pcap_filter/pcap_filter.c .\Examples/pcap_filter/p } } -+ /* start OEM WinPcap */ ++ /* start WinPcap Professional */ + if (pcap_start_oem(errbuf, 0) == -1) + { -+ fprintf(stderr, "Error starting OEM WinPcap: %s\n", errbuf); ++ fprintf(stderr, "Error starting WinPcap Professional: %s\n", errbuf); + exit(1); + } + @@ -173,10 +173,10 @@ diff -urb ..\winpcap\Examples/pktdump_ex/pktdump_ex.c .\Examples/pktdump_ex/pktd " pktdump_ex -s file://c:/temp/file.acp\n" " pktdump_ex -s rpcap://\\Device\\NPF_{C8736017-F3C3-4373-94AC-9A34B7DAD998}\n\n"); -+ /* start OEM WinPcap */ ++ /* start WinPcap Professional */ + if (pcap_start_oem(errbuf, 0) == -1) + { -+ fprintf(stderr, "Error starting OEM WinPcap: %s\n", errbuf); ++ fprintf(stderr, "Error starting WinPcap Professional: %s\n", errbuf); + exit(1); + } + @@ -190,10 +190,10 @@ diff -urb ..\winpcap\Examples/smp_1/smp_1.c .\Examples/smp_1/smp_1.c printf("and that the caplen is equal to the packet length.\n"); printf("If there is an error, it will print out a message saying \"Inconsistent XXX\"\n"); -+ /* start OEM WinPcap */ ++ /* start WinPcap Professional */ + if (pcap_start_oem(errbuf, 0) == -1) + { -+ fprintf(stderr, "Error starting OEM WinPcap: %s\n", errbuf); ++ fprintf(stderr, "Error starting WinPcap Professional: %s\n", errbuf); + exit(1); + } + @@ -207,10 +207,10 @@ diff -urb ..\winpcap\Examples/misc/savedump.c .\Examples/misc/savedump.c pcap_dumper_t *dumpfile; -+ /* start OEM WinPcap */ ++ /* start WinPcap Professional */ + if (pcap_start_oem(errbuf, 0) == -1) + { -+ fprintf(stderr, "Error starting OEM WinPcap: %s\n", errbuf); ++ fprintf(stderr, "Error starting WinPcap Professional: %s\n", errbuf); + return -1; + } @@ -223,10 +223,10 @@ diff -urb ..\winpcap\Examples/sendcap/sendcap.c .\Examples/sendcap/sendcap.c float cpu_time; u_int npacks = 0; -+ /* start OEM WinPcap */ ++ /* start WinPcap Professional */ + if (pcap_start_oem(errbuf, 0) == -1) + { -+ fprintf(stderr, "Error starting OEM WinPcap: %s\n", errbuf); ++ fprintf(stderr, "Error starting WinPcap Professional: %s\n", errbuf); + exit(1); + } + @@ -240,10 +240,10 @@ diff -urb ..\winpcap\Examples/tcptop/tcptop.c .\Examples/tcptop/tcptop.c return; } -+ /* start OEM WinPcap */ ++ /* start WinPcap Professional */ + if (pcap_start_oem(errbuf, 0) == -1) + { -+ fprintf(stderr, "Error starting OEM WinPcap: %s\n", errbuf); ++ fprintf(stderr, "Error starting WinPcap Professional: %s\n", errbuf); + exit(1); + } + @@ -257,10 +257,10 @@ diff -urb ..\winpcap\Examples/misc/sendpack.c .\Examples/misc/sendpack.c u_char packet[100]; int i; -+ /* start OEM WinPcap */ ++ /* start WinPcap Professional */ + if (pcap_start_oem(errbuf, 0) == -1) + { -+ fprintf(stderr, "Error starting OEM WinPcap: %s\n", errbuf); ++ fprintf(stderr, "Error starting WinPcap Professional: %s\n", errbuf); + return; + } + diff --git a/create_docs_oem.bat b/create_docs_oem.bat index 70f95ad0..03e3a5b7 100755 --- a/create_docs_oem.bat +++ b/create_docs_oem.bat @@ -24,7 +24,7 @@ xcopy ..\pics\*.jpg docs\. /v /y /q > nul popd -xcopy /v /Y .\dox\OEM_WinPcap_docs.html %WPDPACKDESTDIR%\docs\ >nul +xcopy /v /Y .\dox\WinPcapPro_docs.html %WPDPACKDESTDIR%\docs\ >nul xcopy /v /Y .\dox\prj\docs\*.* %WPDPACKDESTDIR%\docs\html\ >nul xcopy /v /Y ..\winpcap\dox\*.gif %WPDPACKDESTDIR%\docs\html\ >nul xcopy /v /Y ..\winpcap\dox\pics\*.gif %WPDPACKDESTDIR%\docs\html\ >nul diff --git a/dox/prj/winpcap_oem_noc.dox b/dox/prj/winpcap_oem_noc.dox index 6f9790fb..79b1cde4 100644 --- a/dox/prj/winpcap_oem_noc.dox +++ b/dox/prj/winpcap_oem_noc.dox @@ -3,7 +3,7 @@ #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- -PROJECT_NAME = "OEM WinPcap" +PROJECT_NAME = "WinPcap Professional" PROJECT_NUMBER = 4.0.2.730 OUTPUT_DIRECTORY = ./ CREATE_SUBDIRS = NO diff --git a/dox/wpcap_tut.txt b/dox/wpcap_tut.txt index 66cb540b..774e54a8 100644 --- a/dox/wpcap_tut.txt +++ b/dox/wpcap_tut.txt @@ -2,7 +2,7 @@ */ -/** @defgroup wpcap_tut OEM WinPcap tutorial: a step by step guide to using WinPcap +/** @defgroup wpcap_tut WinPcap Professional tutorial: a step by step guide to using WinPcap * @{ diff --git a/dox/wpcap_tut1.txt b/dox/wpcap_tut1.txt index 333a001c..b9049a3b 100644 --- a/dox/wpcap_tut1.txt +++ b/dox/wpcap_tut1.txt @@ -19,10 +19,10 @@ main() int i=0; char errbuf[PCAP_ERRBUF_SIZE]; - /* start OEM WinPcap */ + /* start WinPcap Professional */ if (pcap_start_oem(errbuf, 0) == -1) { - fprintf(stderr, "Error starting OEM WinPcap: %s\n", errbuf); + fprintf(stderr, "Error starting WinPcap Professional: %s\n", errbuf); exit(1); } @@ -64,7 +64,7 @@ Note finally that we free the list with pcap_freealldevs() once when we have fin Let's try to compile and run the code of this first sample. In order to compile it on Windows, you will need to create a project, following the instructions in the section \ref wpcapsamps of this manual. -However, we suggest that you use the OEM WinPcap developer's pack, since it provides many examples already configured as projects +However, we suggest that you use the WinPcap Professional developer's pack, since it provides many examples already configured as projects including all the code presented in this tutorial and the \e includes and \e libraries needed to compile and run the examples. \note if you create your own project, remember to add the preprocessor directives WPCAP and HAVE_REMOTE in order to compile and link this example. diff --git a/version.h b/version.h index 044c32ca..4abec3a9 100644 --- a/version.h +++ b/version.h @@ -1,6 +1,6 @@ //{{NO_DEPENDENCIES}} // Microsoft Developer Studio generated include file. -// Used by NetMonInstaller.rc +// Used by the RC/RC2 files in the project. // // 0 Feb = 31 + 0 = 31 @@ -17,13 +17,13 @@ #define WINPCAPOEM_REV 2 #define WINPCAPOEM_BUILD 730 -#define WINPCAPOEM_VER_STRING "4.0.2.730.oem" +#define WINPCAPOEM_VER_STRING "4.0.2.730.Pro" #define WINPCAPOEM_COMPANY_NAME "CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_NAME "Packet.dll Wrapper" -#define WINPCAPOEM_VERSION_STRING "4.0.2.730.oem" -#define WINPCAPOEM_PRODUCT_NAME "OEM WinPcap" +#define WINPCAPOEM_VERSION_STRING "4.0.2.730.Pro" +#define WINPCAPOEM_PRODUCT_NAME "WinPcap Professional" #define WINPCAPOEM_COPYRIGHT_STRING "Copyright © 2005-2007 CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_FILENAME "Packet.dll (wrapper)" #define WINPCAPOEM_BUILD_DESCRIPTION "" diff --git a/wpcap/pcap_oem.c b/wpcap/pcap_oem.c index 8a26d613..61fea7a3 100644 --- a/wpcap/pcap_oem.c +++ b/wpcap/pcap_oem.c @@ -7,7 +7,7 @@ /*! \ingroup wpcapfunc - \brief This function starts OEM WinPcap. + \brief This function starts WinPcap Professional. \param err_str pointer to a user-allocated buffer (of minimum size PCAP_ERRBUF_SIZE) that will contain the error message in case of failure. @@ -23,4 +23,6 @@ int pcap_start_oem(char* err_str, int flags) } return 0; } + + //\} From 608707b8b985dc897486dcda15ee5e85d370eca4 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Mon, 22 Jan 2007 18:50:29 +0000 Subject: [PATCH 202/316] Renamed the SECURITY define to TNT_BUILD. --- OEM/WinpcapOem/WinPcapOem.cpp | 8 ++--- OEM/WinpcapOem/WinpcapOem.dsp | 8 ++--- OEM/WinpcapOem/WinpcapOem.vcproj | 58 ++++++++------------------------ 3 files changed, 22 insertions(+), 52 deletions(-) diff --git a/OEM/WinpcapOem/WinPcapOem.cpp b/OEM/WinpcapOem/WinPcapOem.cpp index 78f3f5dd..a43fd93d 100644 --- a/OEM/WinpcapOem/WinPcapOem.cpp +++ b/OEM/WinpcapOem/WinPcapOem.cpp @@ -6,7 +6,7 @@ #include "resource.h" #include "WoemDebug.h" -#ifdef SECURITY +#ifdef TNT_BUILD #include "Security.h" #endif @@ -35,7 +35,7 @@ BOOL APIENTRY DllMain(HINSTANCE Dllh, DWORD Reason, LPVOID lpReserved) g_DllHandle = Dllh; ::InitializeCriticalSection(&::g_CritSectionProtectingWoemEnterDll); -#ifdef SECURITY +#ifdef TNT_BUILD // // the version with security enabled doesn't need to be activated with PacketStartOem() // @@ -139,7 +139,7 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) DWORD keyType; DWORD bufSize; HRESULT hr; -#ifdef SECURITY +#ifdef TNT_BUILD DWORD Result; #endif BOOL is64BitOs = FALSE; @@ -150,7 +150,7 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) WoemErrorString[PACKET_ERRSTR_SIZE - 1] = '\0'; -#ifdef SECURITY +#ifdef TNT_BUILD TRACE_MESSAGE("Process bound Woem, checking if the process is authorized..."); if (!g_IsProcAuthorized) diff --git a/OEM/WinpcapOem/WinpcapOem.dsp b/OEM/WinpcapOem/WinpcapOem.dsp index 11171731..03fd923c 100644 --- a/OEM/WinpcapOem/WinpcapOem.dsp +++ b/OEM/WinpcapOem/WinpcapOem.dsp @@ -108,9 +108,9 @@ PostBuild_Cmds=postbuild.bat # PROP Intermediate_Dir "Debug_Security" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" -# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I ".\\" /D "_DEBUG" /D "_MBCS" /D "_USRDLL" /D "WinpcapOem_EXPORTS" /D "WIN32" /D "_WINDOWS" /D "SECURITY" /FR /FD /GZ /c +# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I ".\\" /D "_DEBUG" /D "_MBCS" /D "_USRDLL" /D "WinpcapOem_EXPORTS" /D "WIN32" /D "_WINDOWS" /D "TNT_BUILD" /FR /FD /GZ /c # SUBTRACT BASE CPP /YX /Yc /Yu -# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I ".\\" /I "..\..\..\winpcap\common" /I "..\..\..\common" /D "_DEBUG" /D "_MBCS" /D "_USRDLL" /D "WinpcapOem_EXPORTS" /D "WIN32" /D "_WINDOWS" /D "SECURITY" /FR /FD /GZ /c +# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I ".\\" /I "..\..\..\winpcap\common" /I "..\..\..\common" /D "_DEBUG" /D "_MBCS" /D "_USRDLL" /D "WinpcapOem_EXPORTS" /D "WIN32" /D "_WINDOWS" /D "TNT_BUILD" /FR /FD /GZ /c # SUBTRACT CPP /YX /Yc /Yu # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 @@ -141,9 +141,9 @@ PostBuild_Cmds=postbuild.bat # PROP Intermediate_Dir "Release_Security" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I ".\\" /D "NDEBUG" /D "_MBCS" /D "_USRDLL" /D "WinpcapOem_EXPORTS" /D "WIN32" /D "_WINDOWS" /D "SECURITY" /FD /c +# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I ".\\" /D "NDEBUG" /D "_MBCS" /D "_USRDLL" /D "WinpcapOem_EXPORTS" /D "WIN32" /D "_WINDOWS" /D "TNT_BUILD" /FD /c # SUBTRACT BASE CPP /YX /Yc /Yu -# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\winpcap\common" /I ".\\" /I "..\..\..\common" /D "NDEBUG" /D "_MBCS" /D "_USRDLL" /D "WinpcapOem_EXPORTS" /D "WIN32" /D "_WINDOWS" /D "SECURITY" /FR /FD /c +# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\winpcap\common" /I ".\\" /I "..\..\..\common" /D "NDEBUG" /D "_MBCS" /D "_USRDLL" /D "WinpcapOem_EXPORTS" /D "WIN32" /D "_WINDOWS" /D "TNT_BUILD" /FR /FD /c # SUBTRACT CPP /YX /Yc /Yu # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 diff --git a/OEM/WinpcapOem/WinpcapOem.vcproj b/OEM/WinpcapOem/WinpcapOem.vcproj index d7874ddb..0b86f6fd 100644 --- a/OEM/WinpcapOem/WinpcapOem.vcproj +++ b/OEM/WinpcapOem/WinpcapOem.vcproj @@ -92,7 +92,7 @@ Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories=".\,..\..\..\winpcap\common,..\..\..\common" - PreprocessorDefinitions="_DEBUG;_USRDLL;WinpcapOem_EXPORTS;WIN32;_WINDOWS;SECURITY" + PreprocessorDefinitions="_DEBUG;_USRDLL;WinpcapOem_EXPORTS;WIN32;_WINDOWS;TNT_BUILD" BasicRuntimeChecks="3" RuntimeLibrary="1" BufferSecurityCheck="TRUE" @@ -231,7 +231,7 @@ Optimization="2" InlineFunctionExpansion="1" AdditionalIncludeDirectories="..\..\..\winpcap\common,.\,..\..\..\common" - PreprocessorDefinitions="NDEBUG;_USRDLL;WinpcapOem_EXPORTS;WIN32;_WINDOWS;SECURITY" + PreprocessorDefinitions="NDEBUG;_USRDLL;WinpcapOem_EXPORTS;WIN32;_WINDOWS;TNT_BUILD" StringPooling="TRUE" RuntimeLibrary="0" EnableFunctionLevelLinking="TRUE" @@ -394,8 +394,7 @@ echo **************************************************************** + AdditionalIncludeDirectories=""/> @@ -403,7 +402,6 @@ echo **************************************************************** Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" - PreprocessorDefinitions="_DEBUG;_MBCS;_USRDLL;WinpcapOem_EXPORTS;WIN32;_WINDOWS;SECURITY;$(NoInherit)" BasicRuntimeChecks="3" BrowseInformation="1"/> @@ -413,7 +411,6 @@ echo **************************************************************** Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" - PreprocessorDefinitions="_DEBUG;_MBCS;_USRDLL;WinpcapOem_EXPORTS;WIN32;_WINDOWS;$(NoInherit)" BasicRuntimeChecks="3" BrowseInformation="1"/> @@ -423,7 +420,6 @@ echo **************************************************************** Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" - PreprocessorDefinitions="NDEBUG;_MBCS;_USRDLL;WinpcapOem_EXPORTS;WIN32;_WINDOWS;SECURITY;$(NoInherit)" BrowseInformation="1"/> + AdditionalIncludeDirectories=""/>
    + AdditionalIncludeDirectories=""/> @@ -451,7 +445,6 @@ echo **************************************************************** Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" - PreprocessorDefinitions="_DEBUG;_MBCS;_USRDLL;WinpcapOem_EXPORTS;WIN32;_WINDOWS;SECURITY;$(NoInherit)" BasicRuntimeChecks="3" BrowseInformation="1"/> @@ -461,7 +454,6 @@ echo **************************************************************** Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" - PreprocessorDefinitions="_DEBUG;_MBCS;_USRDLL;WinpcapOem_EXPORTS;WIN32;_WINDOWS;$(NoInherit)" BasicRuntimeChecks="3" BrowseInformation="1"/> @@ -471,7 +463,6 @@ echo **************************************************************** Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" - PreprocessorDefinitions="NDEBUG;_MBCS;_USRDLL;WinpcapOem_EXPORTS;WIN32;_WINDOWS;SECURITY;$(NoInherit)" BrowseInformation="1"/> + AdditionalIncludeDirectories=""/> + AdditionalIncludeDirectories=""/> @@ -499,7 +488,6 @@ echo **************************************************************** Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" - PreprocessorDefinitions="_DEBUG;_MBCS;_USRDLL;WinpcapOem_EXPORTS;WIN32;_WINDOWS;SECURITY;$(NoInherit)" BasicRuntimeChecks="3" BrowseInformation="1"/> @@ -509,7 +497,6 @@ echo **************************************************************** Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" - PreprocessorDefinitions="_DEBUG;_MBCS;_USRDLL;WinpcapOem_EXPORTS;WIN32;_WINDOWS;$(NoInherit)" BasicRuntimeChecks="3" BrowseInformation="1"/> @@ -519,7 +506,6 @@ echo **************************************************************** Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" - PreprocessorDefinitions="NDEBUG;_MBCS;_USRDLL;WinpcapOem_EXPORTS;WIN32;_WINDOWS;SECURITY;$(NoInherit)" BrowseInformation="1"/> + AdditionalIncludeDirectories=""/> + AdditionalIncludeDirectories=""/> @@ -547,7 +531,6 @@ echo **************************************************************** Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" - PreprocessorDefinitions="_DEBUG;_MBCS;_USRDLL;WinpcapOem_EXPORTS;WIN32;_WINDOWS;SECURITY;$(NoInherit)" BasicRuntimeChecks="3" BrowseInformation="1"/> @@ -557,7 +540,6 @@ echo **************************************************************** Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" - PreprocessorDefinitions="_DEBUG;_MBCS;_USRDLL;WinpcapOem_EXPORTS;WIN32;_WINDOWS;$(NoInherit)" BasicRuntimeChecks="3" BrowseInformation="1"/> @@ -567,7 +549,6 @@ echo **************************************************************** Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" - PreprocessorDefinitions="NDEBUG;_MBCS;_USRDLL;WinpcapOem_EXPORTS;WIN32;_WINDOWS;SECURITY;$(NoInherit)" BrowseInformation="1"/> + AdditionalIncludeDirectories=""/> + AdditionalIncludeDirectories=""/> @@ -595,7 +574,6 @@ echo **************************************************************** Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" - PreprocessorDefinitions="_DEBUG;_MBCS;_USRDLL;WinpcapOem_EXPORTS;WIN32;_WINDOWS;SECURITY;$(NoInherit)" BasicRuntimeChecks="3" BrowseInformation="1"/> @@ -605,7 +583,6 @@ echo **************************************************************** Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" - PreprocessorDefinitions="_DEBUG;_MBCS;_USRDLL;WinpcapOem_EXPORTS;WIN32;_WINDOWS;$(NoInherit)" BasicRuntimeChecks="3" BrowseInformation="1"/> @@ -615,7 +592,6 @@ echo **************************************************************** Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" - PreprocessorDefinitions="NDEBUG;_MBCS;_USRDLL;WinpcapOem_EXPORTS;WIN32;_WINDOWS;SECURITY;$(NoInherit)" BrowseInformation="1"/> + AdditionalIncludeDirectories=""/> + AdditionalIncludeDirectories=""/> @@ -643,7 +617,6 @@ echo **************************************************************** Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" - PreprocessorDefinitions="_DEBUG;_MBCS;_USRDLL;WinpcapOem_EXPORTS;WIN32;_WINDOWS;SECURITY;$(NoInherit)" BasicRuntimeChecks="3" BrowseInformation="1"/> @@ -653,7 +626,6 @@ echo **************************************************************** Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="" - PreprocessorDefinitions="_DEBUG;_MBCS;_USRDLL;WinpcapOem_EXPORTS;WIN32;_WINDOWS;$(NoInherit)" BasicRuntimeChecks="3" BrowseInformation="1"/> @@ -663,7 +635,6 @@ echo **************************************************************** Name="VCCLCompilerTool" Optimization="2" AdditionalIncludeDirectories="" - PreprocessorDefinitions="NDEBUG;_MBCS;_USRDLL;WinpcapOem_EXPORTS;WIN32;_WINDOWS;SECURITY;$(NoInherit)" BrowseInformation="1"/> + AdditionalIncludeDirectories=""/> From 69cdf44650d191614d84f4e26077438f7e4bcce7 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Mon, 22 Jan 2007 19:02:47 +0000 Subject: [PATCH 203/316] Updated the release procedures after the renaming of OEM into WinPcap Professional. --- release procedures WOEM.txt | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/release procedures WOEM.txt b/release procedures WOEM.txt index 844b40de..b9b0345d 100644 --- a/release procedures WOEM.txt +++ b/release procedures WOEM.txt @@ -1,6 +1,6 @@ -$Header: /usr/cvsroot/winpcap_oem/release\040procedures\040WOEM.txt,v 1.10 2006/12/06 02:33:54 gianlucav Exp $ +$Header: /usr/cvsroot/winpcap_oem/release\040procedures\040WOEM.txt,v 1.11 2006/12/06 02:40:19 gianlucav Exp $ -OEM WINPCAP RELEASE PROCEDURE +WINPCAP PRO RELEASE PROCEDURE ============================= Needed tools @@ -9,7 +9,7 @@ Needed tools - Visual Studio .NET 2003 - The cygnus environment on your path (needed to execute step 11 and 12). In particular you will need to have flex, bison, patch. -- Doxygen 1.3.7 installed and on the path +- Doxygen 1.5.1 installed and on the path Dependencies ------------ @@ -20,7 +20,7 @@ Dependencies You should also have run the "NpfIm\build_dev_pack.bat" script to have the devpacks ready -How to compile OEM WinPcap (NOT for the Toolkit) +How to compile WinPcap PRO (NOT for the Toolkit) ------------------------------------------------ 1. Download winpcap (HEAD) and winpcap_oem from the CVS into %BUILD_TREE% @@ -48,10 +48,10 @@ How to compile OEM WinPcap (NOT for the Toolkit) into the CVS. These should be the *only* modified filew in this module. 8. Tag the %BUILD_TREE%\winpcap_oem module with the tag - OEM_WINPCAP__WOEM + WINPCAP_PRO__PUBLIC 9. Tag the %BUILD_TREE%\winpcap module with the tag - OEM_WINPCAP__WOEM + WINPCAP_PRO__PUBLIC 10. Take the contents of %BUILD_TREE%\libpcap_ and copy it into %BUILD_TREE%\winpcap\wpcap\libpcap @@ -130,7 +130,7 @@ How to compile OEM WinPcap (NOT for the Toolkit) %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\binaries\packetnt.dll %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\binaries\packetVista.dll -How to create the developer's pack for OEM WinPcap (NOT for the Toolkit) +How to create the developer's pack for WinPcap PRO (NOT for the Toolkit) ------------------------------------------------------------------------ 1. After the build is completed, in a command prompt go to @@ -146,7 +146,7 @@ How to create the developer's pack for OEM WinPcap (NOT for the Toolkit) e. creation of the documentation. One error copying some *.gif files is reported. -How to create the developer's pack for OEM WinPcap (NOT for the Toolkit) with NpfIm loading support (IBM) +How to create the developer's pack for WinPcap PRO (NOT for the Toolkit) with NpfIm loading support (IBM) --------------------------------------------------------------------------------------------------------- 1. After the build is completed, in a command prompt go to @@ -170,19 +170,19 @@ NpfIm BUILD: 1a. %BUILD_TREE%\winpcap_oem\wpdpack_NpfIm\ | v - OEM_WinPcap__WOEM_WpdPackNpfIm.zip + WinPcapPro__WpdPackNpfIm.zip Vanilla BUILD: 1a. %BUILD_TREE%\winpcap_oem\wpdpack\ | v - OEM_WinPcap__WOEM_WpdPack.zip + WinPcapPro__WpdPack.zip 2. %BUILD_TREE%\Sources.zip | V - OEM_WinPcap__WOEM_Sources.zip + WinPcapPro__Sources.zip 3. %BUILD_TREE%\winpcap_oem %BUILD_TREE%\winpcap @@ -191,7 +191,7 @@ Vanilla BUILD: %BUILD_TREE%\NpfIm | V - OEM_WinPcap__WOEM_Build_Tree.zip + WinPcapPro__BuildTree.zip MD5sum @@ -199,5 +199,5 @@ MD5sum 1. Open a command prompt and go into %BUILD_TREE% -2. Type md5sum.exe OEM_* > md5sum.txt +2. Type md5sum.exe WinPcapPro_* > md5sum.txt From 72bf63c648ee58f74352f91029f847e17e029f59 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Mon, 22 Jan 2007 19:09:09 +0000 Subject: [PATCH 204/316] Renamed all the occurrences of OEM WinPcap into WinPcap Professional. --- OEM/WinpcapOem/PacketWrapper.cpp | 2 +- OEM/WinpcapOem/WinPcapOem.cpp | 22 +++++++++++----------- OEM/WinpcapOem/WinpcapOem.vcproj | 2 +- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/OEM/WinpcapOem/PacketWrapper.cpp b/OEM/WinpcapOem/PacketWrapper.cpp index 056263ac..d2079bab 100644 --- a/OEM/WinpcapOem/PacketWrapper.cpp +++ b/OEM/WinpcapOem/PacketWrapper.cpp @@ -843,7 +843,7 @@ __inline BOOL WoemInitialize(HINSTANCE hDllHandle) if (g_OemActive == FALSE) { - TRACE_MESSAGE("OEM WinPcap not active"); + TRACE_MESSAGE("WinPcap Professional not active"); TRACE_EXIT("WoemInitialize"); return FALSE; diff --git a/OEM/WinpcapOem/WinPcapOem.cpp b/OEM/WinpcapOem/WinPcapOem.cpp index a43fd93d..df75d381 100644 --- a/OEM/WinpcapOem/WinPcapOem.cpp +++ b/OEM/WinpcapOem/WinPcapOem.cpp @@ -33,7 +33,7 @@ BOOL APIENTRY DllMain(HINSTANCE Dllh, DWORD Reason, LPVOID lpReserved) case DLL_PROCESS_ATTACH: g_DllHandle = Dllh; - ::InitializeCriticalSection(&::g_CritSectionProtectingWoemEnterDll); + InitializeCriticalSection(&::g_CritSectionProtectingWoemEnterDll); #ifdef TNT_BUILD // @@ -96,7 +96,7 @@ BOOL WoemEnterDll(HINSTANCE DllHandle, char *WoemErrorString) TRACE_ENTER("WoemEnterDll"); - ::EnterCriticalSection(&::g_CritSectionProtectingWoemEnterDll); + EnterCriticalSection(&::g_CritSectionProtectingWoemEnterDll); if (g_StillToInit) { @@ -107,7 +107,7 @@ BOOL WoemEnterDll(HINSTANCE DllHandle, char *WoemErrorString) } } - ::LeaveCriticalSection(&::g_CritSectionProtectingWoemEnterDll); + LeaveCriticalSection(&g_CritSectionProtectingWoemEnterDll); TRACE_EXIT("WoemEnterDll"); @@ -175,9 +175,9 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) { g_IsProcAuthorized = FALSE; - WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("This version of OEM WinPcap can be only run in conjunction with CACE Technologies Network Toolkit. This program is not recognized as part of The Network Toolkit, and therefore OEM WinPcap will not work."); + WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("This version of WinPcap Professional can be only run in conjunction with CACE Technologies Network Toolkit. This program is not recognized as part of The Network Toolkit, and therefore WinPcap Professional will not work."); - MessageBox(NULL, "This version of OEM WinPcap can be only run in conjunction with CACE Technologies Network Toolkit.\nThis program is not recognized as part of The Network Toolkit, and therefore OEM WinPcap will not work.", "Error", MB_ICONERROR); + MessageBox(NULL, "This version of WinPcap Professional can be only run in conjunction with CACE Technologies Network Toolkit.\nThis program is not recognized as part of The Network Toolkit, and therefore WinPcap Professional will not work.", "Error", MB_ICONERROR); TRACE_EXIT("WoemEnterDllInternal"); return FALSE; } @@ -527,7 +527,7 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) // if(!WoemSaveResourceToDisk(g_DllHandle, IDP_DLLNT, g_DllFullPath, FALSE)) { - WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Unable to copy the OEM WinPcap files. Administrative privileges are required for this operation."); + WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Unable to copy the WinPcap Professional files. Administrative privileges are required for this operation."); ReleaseMutex(g_hGlobalMutex); @@ -552,7 +552,7 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) // if(!WoemSaveResourceToDisk(g_DllHandle, IDP_DRINT, g_DriverFullPath, FALSE)) { - WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Unable to copy the OEM WinPcap files. Administrative privileges are required for this operation."); + WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Unable to copy the WinPcap Professional files. Administrative privileges are required for this operation."); _unlink(g_DllFullPath); @@ -601,7 +601,7 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) // if(!WoemSaveResourceToDisk(g_DllHandle, IDP_DLL2K, g_DllFullPath, FALSE)) { - WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Unable to copy the OEM WinPcap files. Administrative privileges are required for this operation."); + WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Unable to copy the WinPcap Professional files. Administrative privileges are required for this operation."); ReleaseMutex(g_hGlobalMutex); @@ -635,7 +635,7 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) if(!bLoadDriverResult) { - WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Unable to copy the OEM WinPcap files. Administrative privileges are required for this operation."); + WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Unable to copy the WinPcap Professional files. Administrative privileges are required for this operation."); _unlink(g_DllFullPath); @@ -672,7 +672,7 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) // if(!WoemSaveResourceToDisk(g_DllHandle, IDP_DLLVISTA, g_DllFullPath, FALSE)) { - WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Unable to copy the OEM WinPcap files. Administrative privileges are required for this operation."); + WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Unable to copy the WinPcap Professional files. Administrative privileges are required for this operation."); ReleaseMutex(g_hGlobalMutex); @@ -708,7 +708,7 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) } if(!bLoadDriverResult) { - WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Unable to copy the OEM WinPcap files. Administrative privileges are required for this operation."); + WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Unable to copy the WinPcap Professional files. Administrative privileges are required for this operation."); _unlink(g_DllFullPath); diff --git a/OEM/WinpcapOem/WinpcapOem.vcproj b/OEM/WinpcapOem/WinpcapOem.vcproj index 0b86f6fd..981944b4 100644 --- a/OEM/WinpcapOem/WinpcapOem.vcproj +++ b/OEM/WinpcapOem/WinpcapOem.vcproj @@ -196,7 +196,7 @@ HeaderFileName=""/> Date: Mon, 22 Jan 2007 19:11:44 +0000 Subject: [PATCH 205/316] Removed, as replaced by the pro one. --- OEM WinPcap License Agreement.pdf | Bin 53975 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 OEM WinPcap License Agreement.pdf diff --git a/OEM WinPcap License Agreement.pdf b/OEM WinPcap License Agreement.pdf deleted file mode 100644 index adfc96f204e3e8c8e49eb5c4870a97fec3e46ee3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53975 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 Date: Mon, 22 Jan 2007 19:14:26 +0000 Subject: [PATCH 206/316] Added the new License Agreement. --- LicenseAgreement.pdf | Bin 0 -> 45306 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 LicenseAgreement.pdf diff --git a/LicenseAgreement.pdf b/LicenseAgreement.pdf new file mode 100644 index 0000000000000000000000000000000000000000..3c25f27e0272cba5dc80773797d4bd5d854ed8b1 GIT binary patch literal 45306 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 literal 0 HcmV?d00001 From 285b40db3c59b2f0bb567120ee58fefda1837eb6 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Mon, 22 Jan 2007 19:59:48 +0000 Subject: [PATCH 207/316] The link to the stylesheet was pointing to the wrong file. --- dox/prj/winpcap_oem_noc.dox | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dox/prj/winpcap_oem_noc.dox b/dox/prj/winpcap_oem_noc.dox index 79b1cde4..d6e577af 100644 --- a/dox/prj/winpcap_oem_noc.dox +++ b/dox/prj/winpcap_oem_noc.dox @@ -132,7 +132,7 @@ HTML_OUTPUT = docs HTML_FILE_EXTENSION = .html HTML_HEADER = ../header.htm HTML_FOOTER = ../footer.htm -HTML_STYLESHEET = ../../../Winpcap/dox/style.css +HTML_STYLESHEET = ../style.css HTML_ALIGN_MEMBERS = YES GENERATE_HTMLHELP = YES CHM_FILE = From 5c600e6b185da380044c47604c0694dc2a411e05 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Mon, 22 Jan 2007 20:06:19 +0000 Subject: [PATCH 208/316] Updated the style to the default one shipped with doxygen 1.5.1, with small mods (different font and font size for the Hx titles). --- dox/style.css | 386 +++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 348 insertions(+), 38 deletions(-) diff --git a/dox/style.css b/dox/style.css index 7c2b4fbe..0094c621 100644 --- a/dox/style.css +++ b/dox/style.css @@ -1,48 +1,358 @@ -body,td -{ - background-color: #FFFFFF; +BODY,H1,H2,H3,H4,H5,H6,P,CENTER,TD,TH,UL,DL,DIV { font-family: Verdana,Arial,Helvetica; - font-size: 0.8em; } - -td,th -{ - vertical-align: top; +BODY,TD { + font-size: 90%; } - -th -{ - font-size: 1em; - text-align: center; - background-color: #FFFFCC; +H1 { + text-align: center; + font-size: 190%; } - -code,pre -{ - font-size: 1em; +H2 { + font-size: 150%; } - - -H1 { text-align: center; } -A.qindex {} -A.qindexRef {} +H3 { + font-size: 120%; +} +CAPTION { font-weight: bold } +DIV.qindex { + width: 100%; + background-color: #e8eef2; + border: 1px solid #84b0c7; + text-align: center; + margin: 2px; + padding: 2px; + line-height: 140%; +} +DIV.nav { + width: 100%; + background-color: #e8eef2; + border: 1px solid #84b0c7; + text-align: center; + margin: 2px; + padding: 2px; + line-height: 140%; +} +DIV.navtab { + background-color: #e8eef2; + border: 1px solid #84b0c7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} +TD.navtab { + font-size: 70%; +} +A.qindex { + text-decoration: none; + font-weight: bold; + color: #1A419D; +} +A.qindex:visited { + text-decoration: none; + font-weight: bold; + color: #1A419D +} +A.qindex:hover { + text-decoration: none; + background-color: #ddddff; +} +A.qindexHL { + text-decoration: none; + font-weight: bold; + background-color: #6666cc; + color: #ffffff; + border: 1px double #9295C2; +} +A.qindexHL:hover { + text-decoration: none; + background-color: #6666cc; + color: #ffffff; +} +A.qindexHL:visited { text-decoration: none; background-color: #6666cc; color: #ffffff } A.el { text-decoration: none; font-weight: bold } A.elRef { font-weight: bold } -A.code { text-decoration: none; font-weight: normal; color: #4444ee } -A.codeRef { font-weight: normal; color: #4444ee } +A.code:link { text-decoration: none; font-weight: normal; color: #0000FF} +A.code:visited { text-decoration: none; font-weight: normal; color: #0000FF} +A.codeRef:link { font-weight: normal; color: #0000FF} +A.codeRef:visited { font-weight: normal; color: #0000FF} A:hover { text-decoration: none; background-color: #f2f2ff } DL.el { margin-left: -1cm } -DIV.fragment { width: 100%; border: none; background-color: #eeeeee } +.fragment { + font-family: monospace, fixed; + font-size: 95%; +} +PRE.fragment { + border: 1px solid #CCCCCC; + background-color: #f5f5f5; + margin-top: 4px; + margin-bottom: 4px; + margin-left: 2px; + margin-right: 8px; + padding-left: 6px; + padding-right: 6px; + padding-top: 4px; + padding-bottom: 4px; +} DIV.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px } -TD.md { background-color: #f2f2ff; font-weight: bold; font-size: 0.8em; } -TD.mdname1 { background-color: #f2f2ff; font-weight: bold; color: #602020; } -TD.mdname { background-color: #f2f2ff; font-weight: bold; color: #602020; width: 600px; } -DIV.groupHeader { margin-left: 16px; margin-top: 12px; margin-bottom: 6px; font-weight: bold } -DIV.groupText { margin-left: 16px; font-style: italic; font-size: smaller } -FONT.keyword { color: #008000 } -FONT.keywordtype { color: #604020 } -FONT.keywordflow { color: #e08000 } -FONT.comment { color: #800000 } -FONT.preprocessor { color: #806020 } -FONT.stringliteral { color: #002080 } -FONT.charliteral { color: #008080 } + +DIV.groupHeader { + margin-left: 16px; + margin-top: 12px; + margin-bottom: 6px; + font-weight: bold; +} +DIV.groupText { margin-left: 16px; font-style: italic; font-size: 90% } +BODY { + background: white; + color: black; + margin-right: 20px; + margin-left: 20px; +} +TD.indexkey { + background-color: #e8eef2; + font-weight: bold; + padding-right : 10px; + padding-top : 2px; + padding-left : 10px; + padding-bottom : 2px; + margin-left : 0px; + margin-right : 0px; + margin-top : 2px; + margin-bottom : 2px; + border: 1px solid #CCCCCC; +} +TD.indexvalue { + background-color: #e8eef2; + font-style: italic; + padding-right : 10px; + padding-top : 2px; + padding-left : 10px; + padding-bottom : 2px; + margin-left : 0px; + margin-right : 0px; + margin-top : 2px; + margin-bottom : 2px; + border: 1px solid #CCCCCC; +} +TR.memlist { + background-color: #f0f0f0; +} +P.formulaDsp { text-align: center; } +IMG.formulaDsp { } +IMG.formulaInl { vertical-align: middle; } +SPAN.keyword { color: #008000 } +SPAN.keywordtype { color: #604020 } +SPAN.keywordflow { color: #e08000 } +SPAN.comment { color: #800000 } +SPAN.preprocessor { color: #806020 } +SPAN.stringliteral { color: #002080 } +SPAN.charliteral { color: #008080 } +.mdescLeft { + padding: 0px 8px 4px 8px; + font-size: 80%; + font-style: italic; + background-color: #FAFAFA; + border-top: 1px none #E0E0E0; + border-right: 1px none #E0E0E0; + border-bottom: 1px none #E0E0E0; + border-left: 1px none #E0E0E0; + margin: 0px; +} +.mdescRight { + padding: 0px 8px 4px 8px; + font-size: 80%; + font-style: italic; + background-color: #FAFAFA; + border-top: 1px none #E0E0E0; + border-right: 1px none #E0E0E0; + border-bottom: 1px none #E0E0E0; + border-left: 1px none #E0E0E0; + margin: 0px; +} +.memItemLeft { + padding: 1px 0px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-top-style: solid; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + background-color: #FAFAFA; + font-size: 80%; +} +.memItemRight { + padding: 1px 8px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-top-style: solid; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + background-color: #FAFAFA; + font-size: 80%; +} +.memTemplItemLeft { + padding: 1px 0px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-top-style: none; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + background-color: #FAFAFA; + font-size: 80%; +} +.memTemplItemRight { + padding: 1px 8px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-top-style: none; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + background-color: #FAFAFA; + font-size: 80%; +} +.memTemplParams { + padding: 1px 0px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-top-style: solid; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + color: #606060; + background-color: #FAFAFA; + font-size: 80%; +} +.search { color: #003399; + font-weight: bold; +} +FORM.search { + margin-bottom: 0px; + margin-top: 0px; +} +INPUT.search { font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #e8eef2; +} +TD.tiny { font-size: 75%; +} +a { + color: #1A41A8; +} +a:visited { + color: #2A3798; +} +.dirtab { padding: 4px; + border-collapse: collapse; + border: 1px solid #84b0c7; +} +TH.dirtab { background: #e8eef2; + font-weight: bold; +} +HR { height: 1px; + border: none; + border-top: 1px solid black; +} + +/* Style for detailed member documentation */ +.memtemplate { + font-size: 80%; + color: #606060; + font-weight: normal; +} +.memnav { + background-color: #e8eef2; + border: 1px solid #84b0c7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} +.memitem { + padding: 4px; + background-color: #eef3f5; + border-width: 1px; + border-style: solid; + border-color: #dedeee; + -moz-border-radius: 8px 8px 8px 8px; +} +.memname { + white-space: nowrap; + font-weight: bold; +} +.memdoc{ + padding-left: 10px; +} +.memproto { + background-color: #d5e1e8; + width: 100%; + border-width: 1px; + border-style: solid; + border-color: #84b0c7; + font-weight: bold; + -moz-border-radius: 8px 8px 8px 8px; +} +.paramkey { + text-align: right; +} +.paramtype { + white-space: nowrap; +} +.paramname { + color: #602020; + font-style: italic; + white-space: nowrap; +} +/* End Styling for detailed member documentation */ + +/* for the tree view */ +.ftvtree { + font-family: sans-serif; + margin:0.5em; +} +.directory { font-size: 9pt; font-weight: bold; } +.directory h3 { margin: 0px; margin-top: 1em; font-size: 11pt; } +.directory > h3 { margin-top: 0; } +.directory p { margin: 0px; white-space: nowrap; } +.directory div { display: none; margin: 0px; } +.directory img { vertical-align: -30%; } From 122719e5dbaae3ecf52fee4cf67fcc4a03f441ce Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Mon, 22 Jan 2007 20:07:15 +0000 Subject: [PATCH 209/316] Renamed OEM_WinPcap_docs into WinPcapPro_docs --- dox/{OEM_WinPcap_docs.html => WinPcapPro_docs.html} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename dox/{OEM_WinPcap_docs.html => WinPcapPro_docs.html} (100%) diff --git a/dox/OEM_WinPcap_docs.html b/dox/WinPcapPro_docs.html similarity index 100% rename from dox/OEM_WinPcap_docs.html rename to dox/WinPcapPro_docs.html From 5a5f43ee2bbe70366bbd4948f28a7a12c1596da7 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Mon, 22 Jan 2007 20:07:46 +0000 Subject: [PATCH 210/316] Renamed a couple minor files. --- build_wpdpack_oem.bat | 2 +- build_wpdpack_oem_with_npfim.bat | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/build_wpdpack_oem.bat b/build_wpdpack_oem.bat index 27e9f3cf..dcfdc267 100755 --- a/build_wpdpack_oem.bat +++ b/build_wpdpack_oem.bat @@ -18,5 +18,5 @@ call create_examples_oem.bat %WOEM_WPD_VANILLA_FOLDER% rem PAUSE call create_docs_oem.bat %WOEM_WPD_VANILLA_FOLDER% echo Copying the license agreement file -xcopy /v /Y "OEM WinPcap License Agreement.pdf" %WOEM_WPD_VANILLA_FOLDER%. >nul +xcopy /v /Y "LicenseAgreement.pdf" %WOEM_WPD_VANILLA_FOLDER%. >nul set WOEM_WPD_VANILLA_FOLDER= diff --git a/build_wpdpack_oem_with_npfim.bat b/build_wpdpack_oem_with_npfim.bat index 2c304c96..98ecc1cd 100644 --- a/build_wpdpack_oem_with_npfim.bat +++ b/build_wpdpack_oem_with_npfim.bat @@ -24,7 +24,7 @@ call create_examples_oem.bat %OEM_WPD_NPFIM_DEST_FOLDER% call create_docs_oem.bat %OEM_WPD_NPFIM_DEST_FOLDER% echo Copying the license agreement file -xcopy /v /Y "OEM WinPcap License Agreement.pdf" %OEM_WPD_NPFIM_DEST_FOLDER% >nul +xcopy /v /Y "LicenseAgreement.pdf" %OEM_WPD_NPFIM_DEST_FOLDER% >nul rem now we copy the certified files from the NpfIm engine @@ -53,6 +53,6 @@ xcopy /s/e/v/Y ..\NpfIm\LowLevelDll\docs\NpfImLoader\*.* %OEM_WPD_NPFIM_DEST_FOL del /f/s/q %OEM_WPD_NPFIM_DEST_FOLDER%\docs\WinPcap >nul 2>nul rd %OEM_WPD_NPFIM_DEST_FOLDER%\docs\WinPcap >nul 2>nul ren %OEM_WPD_NPFIM_DEST_FOLDER%\docs\html WinPcap -copy /v ..\NpfIm\LowLevelDll\docs\OEM_WinPcap_docs.html %OEM_WPD_NPFIM_DEST_FOLDER%\docs\. > nul +copy /v ..\NpfIm\LowLevelDll\docs\WinPcapPro_docs.html %OEM_WPD_NPFIM_DEST_FOLDER%\docs\. > nul set OEM_WPD_NPFIM_DEST_FOLDER= \ No newline at end of file From 914f58666dda3f16faf4564aeac8f64d256d463a Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Mon, 22 Jan 2007 21:25:50 +0000 Subject: [PATCH 211/316] Removed as no longer in use, and just generate confusion. --- packetNtx/Compile2k_oem.bat | 31 --------------------- packetNtx/CompileNT4_oem.bat | 52 ------------------------------------ 2 files changed, 83 deletions(-) delete mode 100644 packetNtx/Compile2k_oem.bat delete mode 100644 packetNtx/CompileNT4_oem.bat diff --git a/packetNtx/Compile2k_oem.bat b/packetNtx/Compile2k_oem.bat deleted file mode 100644 index 6187391a..00000000 --- a/packetNtx/Compile2k_oem.bat +++ /dev/null @@ -1,31 +0,0 @@ -@echo off - -echo ************************************************************ -echo * -echo * This compilation script has been OBSOLETED. -echo * -echo * Please use CompileDriver.bat to compile the driver -echo * for all the supported platforms (NT4,2k,xp,2k3,vista,x64) -echo * -echo ************************************************************ - -goto end - -mkdir driver\bin 2> nul -mkdir driver\bin\2k 2> nul - -set USER_C_DEFINES=-DNDIS50 -DWPCAP_OEM -set TARGETPATH=..\..\..\winpcap_oem\PacketNtx\driver\bin\2k - -copy driver\NPF_NT5.RC ..\..\winpcap\packetntx\driver\NPF.RC - -pushd ..\..\winpcap\packetntx\driver - -prefast build -cefw - -popd - -set TARGETPATH= -set USER_C_DEFINES= - -:end \ No newline at end of file diff --git a/packetNtx/CompileNT4_oem.bat b/packetNtx/CompileNT4_oem.bat deleted file mode 100644 index 348aa7b9..00000000 --- a/packetNtx/CompileNT4_oem.bat +++ /dev/null @@ -1,52 +0,0 @@ -@echo off - -echo ************************************************************ -echo * -echo * This compilation script has been OBSOLETED. -echo * -echo * Please use CompileDriver.bat to compile the driver -echo * for all the supported platforms (NT4,2k,xp,2k3,vista,x64) -echo * -echo ************************************************************ - -goto end -if NOT "%NPF_COMPILED%" == "1" ( - set Include=%BASEDIR%\src\network\inc;%BASEDIR%\inc;%Include% - set NPF_COMPILED=1 - ) -set USER_C_DEFINES=-D__NPF_NT4__ -DNDIS30 -DWPCAP_OEM -set TARGETPATH=..\..\..\winpcap_oem\PacketNtx\driver\bin\NT4 - -REM this enables the generation of pdb files for both free and debug mode -rem set USE_PDB=1 -rem set NTDEBUGTYPE=windbg - -mkdir driver\bin 2> nul -mkdir driver\bin\NT4 2> nul -mkdir driver\bin\NT4\i386\ 2> nul -mkdir driver\bin\NT4\i386\free 2> nul -mkdir driver\bin\NT4\i386\checked 2> nul - -copy driver\NPF_NT4.RC ..\..\winpcap\packetntx\driver\NPF.RC - -pushd ..\..\winpcap\packetntx\driver - -build -cefw - -popd - -if "%DDKBUILDENV%" == "free" ( - copy driver\bin\NT4\i386\free\npf.sys driver\bin\NT4\i386\ - copy driver\bin\NT4\i386\free\npf.pdb driver\bin\NT4\i386\ - ) - -if "%DDKBUILDENV%" == "checked" ( - copy driver\bin\NT4\i386\checked\npf.sys driver\bin\NT4\i386\ - copy driver\bin\NT4\i386\checked\npf.pdb driver\bin\NT4\i386\ - ) -set TARGETPATH= -set USER_C_DEFINES= -rem set USE_PDB= -rem set NTDEBUGTYPE= - -:end \ No newline at end of file From 80aff27556a93b0fecd1e9a3b617ca2fce698fc5 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Mon, 22 Jan 2007 21:26:56 +0000 Subject: [PATCH 212/316] Added a temporary new logo for WinPcap Professional. --- dox/pics/WinPcapPro_logo.jpg | Bin 0 -> 3067 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 dox/pics/WinPcapPro_logo.jpg diff --git a/dox/pics/WinPcapPro_logo.jpg b/dox/pics/WinPcapPro_logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8717c67d43a0e7271f62dacb3804a3e474f81526 GIT binary patch literal 3067 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 Date: Mon, 22 Jan 2007 23:15:45 +0000 Subject: [PATCH 213/316] Added some new build configurations for the signed version. --- WinPcap OEM.sln | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/WinPcap OEM.sln b/WinPcap OEM.sln index 0e66d746..f8befc07 100644 --- a/WinPcap OEM.sln +++ b/WinPcap OEM.sln @@ -20,7 +20,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WinpcapOem", "OEM\WinpcapOe EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wpcap", "wpcap\PRJ\wpcap.vcproj", "{CAEF56E3-4959-4C10-81F5-06C8E86C301E}" ProjectSection(ProjectDependencies) = postProject - {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2} = {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2} + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D} = {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Packet (Vista)", "packetNtx\Dll\Project\PacketVista.vcproj", "{8D305FC1-A748-4C63-B419-585BF03165D9}" @@ -32,7 +32,8 @@ Global Debug = Debug Debug_TNT = Debug_TNT Release = Release - Release CERTIFIED = Release CERTIFIED + Release SIGNED STEP1 = Release SIGNED STEP1 + Release SIGNED STEP2 = Release SIGNED STEP2 Release_TNT = Release_TNT EndGlobalSection GlobalSection(ProjectConfiguration) = postSolution @@ -41,7 +42,9 @@ Global {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Debug_TNT.Build.0 = Debug|Win32 {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release.ActiveCfg = Release|Win32 {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release.Build.0 = Release|Win32 - {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release CERTIFIED.ActiveCfg = Release|Win32 + {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release SIGNED STEP1.ActiveCfg = Release SIGNED|Win32 + {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release SIGNED STEP1.Build.0 = Release SIGNED|Win32 + {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release SIGNED STEP2.ActiveCfg = Release|Win32 {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release_TNT.ActiveCfg = Release|Win32 {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release_TNT.Build.0 = Release|Win32 {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Debug.ActiveCfg = Debug|Win32 @@ -49,13 +52,16 @@ Global {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Debug_TNT.Build.0 = Debug|Win32 {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release.ActiveCfg = Release|Win32 {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release.Build.0 = Release|Win32 - {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release CERTIFIED.ActiveCfg = Release|Win32 + {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release SIGNED STEP1.ActiveCfg = Release SIGNED|Win32 + {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release SIGNED STEP1.Build.0 = Release SIGNED|Win32 + {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release SIGNED STEP2.ActiveCfg = Release|Win32 {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release_TNT.ActiveCfg = Release|Win32 {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release_TNT.Build.0 = Release|Win32 {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Debug.ActiveCfg = Debug|Win32 {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Debug_TNT.ActiveCfg = Debug|Win32 {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Release.ActiveCfg = Release|Win32 - {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Release CERTIFIED.ActiveCfg = Release|Win32 + {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Release SIGNED STEP1.ActiveCfg = Release|Win32 + {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Release SIGNED STEP2.ActiveCfg = Release|Win32 {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Release_TNT.ActiveCfg = Release|Win32 {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Debug.ActiveCfg = Debug|Win32 {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Debug.Build.0 = Debug|Win32 @@ -63,8 +69,9 @@ Global {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Debug_TNT.Build.0 = Debug_TNT|Win32 {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release.ActiveCfg = Release|Win32 {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release.Build.0 = Release|Win32 - {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release CERTIFIED.ActiveCfg = Release CERTIFIED|Win32 - {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release CERTIFIED.Build.0 = Release CERTIFIED|Win32 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release SIGNED STEP1.ActiveCfg = Release|Win32 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release SIGNED STEP2.ActiveCfg = Release SIGNED|Win32 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release SIGNED STEP2.Build.0 = Release SIGNED|Win32 {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release_TNT.ActiveCfg = Release_TNT|Win32 {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release_TNT.Build.0 = Release_TNT|Win32 {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Debug.ActiveCfg = Debug REMOTE|Win32 @@ -73,8 +80,9 @@ Global {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Debug_TNT.Build.0 = Debug REMOTE TNT|Win32 {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release.ActiveCfg = Release REMOTE|Win32 {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release.Build.0 = Release REMOTE|Win32 - {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release CERTIFIED.ActiveCfg = Release REMOTE|Win32 - {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release CERTIFIED.Build.0 = Release REMOTE|Win32 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release SIGNED STEP1.ActiveCfg = Release REMOTE|Win32 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release SIGNED STEP2.ActiveCfg = Release REMOTE|Win32 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release SIGNED STEP2.Build.0 = Release REMOTE|Win32 {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release_TNT.ActiveCfg = Release REMOTE TNT|Win32 {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release_TNT.Build.0 = Release REMOTE TNT|Win32 {8D305FC1-A748-4C63-B419-585BF03165D9}.Debug.ActiveCfg = Debug|Win32 @@ -82,7 +90,9 @@ Global {8D305FC1-A748-4C63-B419-585BF03165D9}.Debug_TNT.Build.0 = Debug|Win32 {8D305FC1-A748-4C63-B419-585BF03165D9}.Release.ActiveCfg = Release|Win32 {8D305FC1-A748-4C63-B419-585BF03165D9}.Release.Build.0 = Release|Win32 - {8D305FC1-A748-4C63-B419-585BF03165D9}.Release CERTIFIED.ActiveCfg = Release|Win32 + {8D305FC1-A748-4C63-B419-585BF03165D9}.Release SIGNED STEP1.ActiveCfg = Release SIGNED|Win32 + {8D305FC1-A748-4C63-B419-585BF03165D9}.Release SIGNED STEP1.Build.0 = Release SIGNED|Win32 + {8D305FC1-A748-4C63-B419-585BF03165D9}.Release SIGNED STEP2.ActiveCfg = Release|Win32 {8D305FC1-A748-4C63-B419-585BF03165D9}.Release_TNT.ActiveCfg = Release|Win32 {8D305FC1-A748-4C63-B419-585BF03165D9}.Release_TNT.Build.0 = Release|Win32 EndGlobalSection From e9dedcb69f00dcbdf6345d2c06fd1c58bbdde196 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Mon, 22 Jan 2007 23:16:10 +0000 Subject: [PATCH 214/316] Modified the script to copy the signed binaries if possible. --- create_bin_oem.bat | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/create_bin_oem.bat b/create_bin_oem.bat index 30f9ccd3..950d0dab 100755 --- a/create_bin_oem.bat +++ b/create_bin_oem.bat @@ -6,8 +6,19 @@ echo Creating \bin folder mkdir %WPDPACKDESTDIR% >nul 2>nul mkdir %WPDPACKDESTDIR%\bin >nul 2>nul -xcopy /v /Y .\wpcap\PRJ\Release_REMOTE\wpcap.dll %WPDPACKDESTDIR%\bin\ >nul -xcopy /v /Y .\OEM\WinPcapOEM\release\packet.dll %WPDPACKDESTDIR%\bin\ >nul +if not exist .\oem\WinPcapOem\Binaries_SIGNED\wpcap.dll ( + echo Not using the signed version of the DLLs!! + xcopy /v /Y .\wpcap\PRJ\Release_REMOTE\wpcap.dll %WPDPACKDESTDIR%\bin\ >nul +) else ( + xcopy /v /y .\oem\WinPcaPOem\binaries_signed\wpcap.dll %WPDPACKDESTDIR%\bin\ >nul +) + +if not exist .\oem\WinPcapOem\Binaries_signed\packet.dll ( + echo Not using the signed version of the DLLs!! + xcopy /v /Y .\OEM\WinPcapOEM\release\packet.dll %WPDPACKDESTDIR%\bin\ >nul +) else ( + xcopy /v /y .\oem\WinPcaPOem\binaries_signed\packet.dll %WPDPACKDESTDIR%\bin\ >nul +) echo Folder \bin created successfully From 78f9ad3d627564779d5ab95601f215860d4727b5 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Mon, 22 Jan 2007 23:17:26 +0000 Subject: [PATCH 215/316] Added a new configuration for the SIGNED build. --- OEM/WinpcapOem/WinpcapOem.vcproj | 62 ++++---- packetNtx/Dll/Project/PacketAndWan2003.vcproj | 140 ++++++++++++++++++ packetNtx/Dll/Project/PacketNT4.vcproj | 78 ++++++++++ packetNtx/Dll/Project/PacketVista.vcproj | 78 ++++++++++ 4 files changed, 325 insertions(+), 33 deletions(-) diff --git a/OEM/WinpcapOem/WinpcapOem.vcproj b/OEM/WinpcapOem/WinpcapOem.vcproj index 981944b4..7b0d120c 100644 --- a/OEM/WinpcapOem/WinpcapOem.vcproj +++ b/OEM/WinpcapOem/WinpcapOem.vcproj @@ -62,7 +62,7 @@ CommandLine="postbuild_release.bat"/> + CommandLine="$(ProjectDir)\prebuild_Release.bat"/> @@ -316,13 +316,13 @@ +copy .\Release_SIGNED\packet.dll .\binaries_signed\packet.dll +copy ..\..\wpcap\PRJ\Release_REMOTE\wpcap.dll .\binaries_signed\wpcap.dll + +postbuild_release.bat"/> @@ -367,7 +363,7 @@ echo **************************************************************** Name="VCPreLinkEventTool"/> @@ -423,7 +419,7 @@ echo **************************************************************** BrowseInformation="1"/> + Name="Release SIGNED|Win32"> + Name="Release SIGNED|Win32"> + Name="Release SIGNED|Win32"> + Name="Release SIGNED|Win32"> + Name="Release SIGNED|Win32"> + Name="Release SIGNED|Win32"> + RelativePath="Packet2k.dll"> + RelativePath="binaries\Packet2k.dll"> @@ -714,7 +710,7 @@ echo **************************************************************** diff --git a/packetNtx/Dll/Project/PacketAndWan2003.vcproj b/packetNtx/Dll/Project/PacketAndWan2003.vcproj index 640e8d25..b73d15e8 100644 --- a/packetNtx/Dll/Project/PacketAndWan2003.vcproj +++ b/packetNtx/Dll/Project/PacketAndWan2003.vcproj @@ -148,6 +148,86 @@ + + + + + + + + + + + + + + + @@ -169,6 +249,12 @@ Name="VCCLCompilerTool" ObjectFile="$(IntDir)/$(InputName)1.obj"/> + + + @@ -184,6 +270,12 @@ Name="VCCLCompilerTool" ObjectFile="$(IntDir)/$(InputName)1.obj"/> + + + @@ -199,6 +291,12 @@ Name="VCCLCompilerTool" ObjectFile="$(IntDir)/$(InputName)1.obj"/> + + + @@ -214,6 +312,12 @@ Name="VCCLCompilerTool" ObjectFile="$(IntDir)/$(InputName)1.obj"/> + + + @@ -229,6 +333,12 @@ Name="VCCLCompilerTool" ObjectFile="$(IntDir)/$(InputName)1.obj"/> + + + @@ -250,6 +360,12 @@ Name="VCCLCompilerTool" ObjectFile="$(IntDir)/$(InputName)1.obj"/> + + + @@ -265,6 +381,12 @@ Name="VCCLCompilerTool" ObjectFile="$(IntDir)/$(InputName)1.obj"/> + + + @@ -280,6 +402,12 @@ Name="VCCLCompilerTool" ObjectFile="$(IntDir)/$(InputName)1.obj"/> + + + @@ -295,6 +423,12 @@ Name="VCCLCompilerTool" ObjectFile="$(IntDir)/$(InputName)1.obj"/> + + + @@ -310,6 +444,12 @@ Name="VCCLCompilerTool" ObjectFile="$(IntDir)/$(InputName)1.obj"/> + + + + + + + + + + + + + + + + + + diff --git a/packetNtx/Dll/Project/PacketVista.vcproj b/packetNtx/Dll/Project/PacketVista.vcproj index b6e9218f..30108aee 100644 --- a/packetNtx/Dll/Project/PacketVista.vcproj +++ b/packetNtx/Dll/Project/PacketVista.vcproj @@ -146,6 +146,84 @@ + + + + + + + + + + + + + + + From c16d5f91b7fc27577617af10b6b14b3aec430676 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Mon, 22 Jan 2007 23:17:44 +0000 Subject: [PATCH 216/316] Changed the path of the embedded binaries in the signed build. --- OEM/WinpcapOem/WinpcapOem.rc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/OEM/WinpcapOem/WinpcapOem.rc b/OEM/WinpcapOem/WinpcapOem.rc index 8d80a7d5..ee4be214 100644 --- a/OEM/WinpcapOem/WinpcapOem.rc +++ b/OEM/WinpcapOem/WinpcapOem.rc @@ -23,12 +23,21 @@ // Data // +#ifdef SIGNED_BINARIES +IDP_DLL2K RCDATA MOVEABLE PURE "binaries_SIGNED\\packet2k.dll" +IDP_DRI2K RCDATA MOVEABLE PURE "binaries_SIGNED\\npf2k.sys" +IDP_DLLNT RCDATA MOVEABLE PURE "binaries_SIGNED\\packetnt.dll" +IDP_DRINT RCDATA MOVEABLE PURE "binaries_SIGNED\\npfnt.sys" +IDP_DLLVISTA RCDATA MOVEABLE PURE "binaries_SIGNED\\packetVista.dll" +IDP_DRIx64 RCDATA MOVEABLE PURE "binaries_SIGNED\\npfx64.sys" +#else IDP_DLL2K RCDATA MOVEABLE PURE "binaries\\packet2k.dll" IDP_DRI2K RCDATA MOVEABLE PURE "binaries\\npf2k.sys" IDP_DLLNT RCDATA MOVEABLE PURE "binaries\\packetnt.dll" IDP_DRINT RCDATA MOVEABLE PURE "binaries\\npfnt.sys" IDP_DLLVISTA RCDATA MOVEABLE PURE "binaries\\packetVista.dll" IDP_DRIx64 RCDATA MOVEABLE PURE "binaries\\npfx64.sys" +#endif HSH_AUTH_PROC RCDATA MOVEABLE PURE "binaries\\tools.bin" From adc2f4579cb4aa20994974a0d1b92bcd3bd3267c Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Mon, 22 Jan 2007 23:40:31 +0000 Subject: [PATCH 217/316] Added some messages to detail which version of the DLLs has been used. --- create_bin_oem.bat | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/create_bin_oem.bat b/create_bin_oem.bat index 950d0dab..2e4fb091 100755 --- a/create_bin_oem.bat +++ b/create_bin_oem.bat @@ -7,16 +7,18 @@ mkdir %WPDPACKDESTDIR% >nul 2>nul mkdir %WPDPACKDESTDIR%\bin >nul 2>nul if not exist .\oem\WinPcapOem\Binaries_SIGNED\wpcap.dll ( - echo Not using the signed version of the DLLs!! + echo Not using the signed version of the wpcap.dll xcopy /v /Y .\wpcap\PRJ\Release_REMOTE\wpcap.dll %WPDPACKDESTDIR%\bin\ >nul ) else ( + echo Using the signed version of wpcap.dll xcopy /v /y .\oem\WinPcaPOem\binaries_signed\wpcap.dll %WPDPACKDESTDIR%\bin\ >nul ) if not exist .\oem\WinPcapOem\Binaries_signed\packet.dll ( - echo Not using the signed version of the DLLs!! + echo Not using the signed version of packet.dll xcopy /v /Y .\OEM\WinPcapOEM\release\packet.dll %WPDPACKDESTDIR%\bin\ >nul ) else ( + echo Using the signed version of packet.dll xcopy /v /y .\oem\WinPcaPOem\binaries_signed\packet.dll %WPDPACKDESTDIR%\bin\ >nul ) From ad20715d67d3919f3fa76d844fd917717cb4ae85 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Mon, 22 Jan 2007 23:41:46 +0000 Subject: [PATCH 218/316] Updated the release procedures to take binary signing into account. --- release procedures WOEM.txt | 70 +++++++++++++++++++++++++++++-------- 1 file changed, 56 insertions(+), 14 deletions(-) diff --git a/release procedures WOEM.txt b/release procedures WOEM.txt index b9b0345d..74424093 100644 --- a/release procedures WOEM.txt +++ b/release procedures WOEM.txt @@ -1,8 +1,11 @@ -$Header: /usr/cvsroot/winpcap_oem/release\040procedures\040WOEM.txt,v 1.11 2006/12/06 02:40:19 gianlucav Exp $ +$Header: /usr/cvsroot/winpcap_oem/release\040procedures\040WOEM.txt,v 1.12 2007/01/22 19:02:47 gianlucav Exp $ WINPCAP PRO RELEASE PROCEDURE ============================= +NOTE (GV20070122): the procedure has NOT been tested thoroughly in case +of non-signed builds. + Needed tools ------------ @@ -106,21 +109,54 @@ How to compile WinPcap PRO (NOT for the Toolkit) NOTE: DO NOT EXECUTE 15. and 16. and 17. at the same time, they overwrite files in the build process that are incompatible between the two builds. -18. Open %BUILD_TREE%\winpcap_oem\WinPcap OEM.sln with Visual Studio 2003. - Choose the Release configuration, and then use Build->Rebuild Solution. - Some warnings should be issued only for the Wpcap.dll project. - If you choose the Debug configuration, and then use Build->Rebuild Solution, the - compilation will fail beacuse the debug version of the NT4 driver is missing. Repeat - step 16 choosing the NT4 Checked build environment. - Close Visual Studio. -19. The build is complete. - The DLLs are in the following folders: +SIGNED BINARIES BUILD - %BUILD_TREE%\winpcap_oem\wpcap\PRJ\release_REMOTE\wpcap.dll - %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\Release\packet.dll + 18s. Open %BUILD_TREE%\winpcap_oem\WinPcap OEM.sln with Visual Studio 2003. + Choose the "Release SIGNED STEP1" configuration, and then use Build->Rebuild Solution. + No warnings should be generated. -20. Check the DLLs/SYSs files for the versions + 19s. Sign all the binaries in + %BUILD_TREE%\winpcap_oem\OEM\WinPcapOem\Binaries_SIGNED, namely + npfnt.sys + npf2k.sys + npfx64.sys + packetnt.dll + packet2k.dll + packetVista.dll + with the company certificate + cross certificate + + The generic command is + signtool sign /v /ac MSCV-VSClass3.cer /s my /n "CACE TECHNOLOGIES, LLC" + /t http://timestamp.verisign.com/scripts/timestamp.dll + + 20s. Go back to Vistual studio 2003. Choose the "Release SIGNED STEP2" configuration, and then + use Build->Rebuild solution. Some warnings should be generated when compiling wpcap.dll. + + 21s. Sign the following binaries in + %BUILD_TREE%\winpcap_oem\OEM\WinPcapOem\Binaries_SIGNED\packet.dll + %BUILD_TREE%\winpcap_oem\OEM\WinPcapOem\Binaries_SIGNED\wpcap.dll + with the company certificate + cross certificate + + + 21s. The build is complete. Check the versions *and* signature of the + following files: + %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\Binaries_SIGNED\wpcap.dll + %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\Binaries_SIGNED\packet.dll + %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\Binaries_SIGNED\npf2k.sys + %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\Binaries_SIGNED\npfnt.sys + %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\Binaries_SIGNED\npfx64.sys + %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\Binaries_SIGNED\packet2k.dll + %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\Binaries_SIGNED\packetnt.dll + %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\Binaries_SIGNED\packetVista.dll + +UNSIGNED BINARIES BUILD + +18u. Open %BUILD_TREE%\winpcap_oem\WinPcap OEM.sln with Visual Studio 2003. + Choose the "Release" configuration, and then use Build->Rebuild Solution. + Some warnings should be generated when compiling wpcap.dll. + +19u. The build is complete. Check the versions of the following files %BUILD_TREE%\winpcap_oem\wpcap\PRJ\release_REMOTE\wpcap.dll %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\Release\packet.dll %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\binaries\npf2k.sys @@ -130,10 +166,11 @@ How to compile WinPcap PRO (NOT for the Toolkit) %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\binaries\packetnt.dll %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\binaries\packetVista.dll + How to create the developer's pack for WinPcap PRO (NOT for the Toolkit) ------------------------------------------------------------------------ -1. After the build is completed, in a command prompt go to +1. After the build is complete, in a command prompt go to %BUILD_TREE%\winpcap_oem @@ -145,6 +182,8 @@ How to create the developer's pack for WinPcap PRO (NOT for the Toolkit) d. Creation of the Examples and Examples-pcap folders (no errors/warnings) e. creation of the documentation. One error copying some *.gif files is reported. +NOTE: the script gives precedence to the signed binaries, i.e. the ones in the + Binaries_SIGNED\ folder. How to create the developer's pack for WinPcap PRO (NOT for the Toolkit) with NpfIm loading support (IBM) --------------------------------------------------------------------------------------------------------- @@ -161,6 +200,9 @@ How to create the developer's pack for WinPcap PRO (NOT for the Toolkit) with Np d. Creation of the Examples and Examples-pcap folders (no errors/warnings) e. creation of the documentation. One error copying some *.gif files is reported. f. copy of the NpfIm files. + +NOTE: the script gives precedence to the signed binaries, i.e. the ones in the + Binaries_SIGNED\ folder. SCM procedures From 3853a30d85897e5b289f9d0a417c3cceefa0763e Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Tue, 23 Jan 2007 20:29:25 +0000 Subject: [PATCH 219/316] Updated the image with the release one. --- dox/pics/WinPcapPro_logo.jpg | Bin 3067 -> 11986 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/dox/pics/WinPcapPro_logo.jpg b/dox/pics/WinPcapPro_logo.jpg index 8717c67d43a0e7271f62dacb3804a3e474f81526..076883b26207ca3c35fb6502401f06a1dda36fca 100644 GIT binary patch literal 11986 zcma)i1yCJNv+o|(BO~% zcdPFE?t69bd%vxkn(gVG?b)5~>7MDQ`KNUNSMi;~I{<_L0G7`e@N@*=$#_{f_yHgQ z2><}?XVM9PEoJEfwgN0Wo++TGCEx>q0Qv{dB?2M>0s`Vc1p*=x;y*w_M*0_!kx~8u zGTOg@`46!E6QE~)Bt#@sWMouKG*q;IYxz%>|GDzi0pOtlR-n&_AUps84}^#Zdg=z6 zp2bFd7VNor7WH31MaMuxL4FqQAM&%1&*gst1r_PJ1r3Cb3joLnNYC=4qM;!pKes=R z3kexO!NW&Iqai@Y;G!jz(ja;tmdE|lTZoRQrnau0*vCy8>`w0`NU9kQB@s^a;AIfN z0|6jJ1jOf&BmJwF|L6w~nT88RO5;5~s#{`S)kIh)Ew?nm2H2hO`N2t^r0QRrbWe)_ z*0ab6c!+p_1kgT+j1VT7tIkY_@!wVa%2j4f7$nb9`s2>J_Z?@}No2i;L&X110}*7QRt*O8B12b-;L# zp`*)LMo@!`%1y@$4sn4aq6O9w^7Ig_@C5}nWh=Ul8CXb3#;#i|wmB~sg|T%kH~e0`zk1LHeid;&@#$u^jPPW?ckTHOu*gfd$R2utNg^?5Er`j*(x&5Q4%quL zqN5YAnN{Dh4g3FWV9BsQNlVL#J=U|x{U5*T|NX&3-b_!+HsNpj2Tdxc^D2*0hl*o;fldn=#KmtLQH& z>B;uHw}B~vo0J+PR|hC0zUz5i2_S?!`{aWh9opzjebX_~Ct!;z@a|i}evVAw^i+t) z@z%@Dkdw3@6cB&Rq|HLIm_ZPsHD>%}4d6{E);DSA*6#p0H>9 z0h@AfSB2)fFijXOn{<{Abk5vo7?t0JFSf24ow_s_e=Vm^ugUu3j3uLogH@I*2rH2h zL?ee1aV$1u*0avWz!=cigng*^qhXhgrJ@!)q8m;WJT38WS}il<$6L?oXQ!L8v%YU} zybERi)&IsEprI)0n=E!)N9jwUi<;>z&rU71>z|DM$$EN}lRsvn1D_cdbKY{$!5jTH zf92EHW4F&9QGf<78HCys5~|2_V`&j~LP((GNJye6FpOpkxxN2GTX1?Tzqm$!*5;z= zkT?I`jl@ZXffem^=qEC<5MtP3AtbLlf~lKW?W{jgmZBU#3ri`|IxO)~UAhe$Twq6lb+ou|l>o8R*=N4y^8@q%B$I z6)btkBg1w-X;@+VQ;+>+EK0e8cy^@Ie}(_Dh>8Vi$66EpD^D3`1H+I9o=m6$IRjS= z4Fv78?<)|t(b0IL4_5{AVPv~Q&z;-Kgd+;VSi|S0Ju@ZR%>0PdY9?CeS#>ngF)hY zNlzmL7A!`P;_4>@{kuj>AkRsaqI&M{sPGQ5GDE|WSrpZ~mEThW041FnBbd%02$o*z z8E@}@kT?zY@D!*S!JL>Yr78M@nch;w*4<6o$DGNM%=sHn5=tpaRel+@VCry5P{}0R z)K{gOV)u>bk>%FMr!@?&2dj1Bw;LKPGLG5OkAA=t%b8hQ85o*9{xZTMiLM>58k}8L zS_)0AjGLO^LL9izO*z@y?5$*_dBEn~m(0=HuPF7AASM}(%Fh0AV@0lTp*u$9HuFVx zKQ*k`@i#RIcMuU>*NA%sBuzH8uvjzfzU?+;-I}*4Z87g|a~T2s`99O!%KoFXVAgEH z()DZ-c%cRAjnl#s!9h%IZc&sflN4^j>n@QQ>seAoY4{B-YZavfDu||2KGiZjQ&{%p zD5q)fq!}()WSq&>E5R!_Dt@`9J)%iSUN(nv+VX}nY4O}oKPi60ny%c&*ht<^HSZ9LIDa04GtUd6^j zC_Xdj2QEvJeq&%RiMpLl!JG~S*1f6%w7H1hdTH!9d85-_>^p#@hsP~LK99{L+<3<#pV{uMzZ)^)oI zYxPQ<3&<)xfAwqZWxu^7Ke*s!i#C{uCTRZq%v-dOZaOL7pv>l7CwaKp>w-$PM>^F? z7GD?~O!pzMT4hI50&gST2OAN%wm8n+J^9P#FhG$j;t6)Uho&+dGN(l%-=`aLnS&E* z15ezpU9ZQz&FsE~VaIy9)j7|_b+)X?W#zPyhlV0VDjOpyX^{l=N{dEu^t+^l583|X zHAFD4tWkaPELwSOap9nDyH-fX+z2)glRle0KDiFd3z-h1slF-o5-?+HBBgCGg zL!J>Fj)HwO%OHE;tJ! z!WR<#E3h?@V41{Wn$U>7OZhTF*1vr5&E+Vd$Q&JQ`}Q?-b+0cIx_bEi+;^zD zkJVD(%i2--F6Bm9Ky=Qo%v@^)y7k!u5qHPX3|*Da2wLz>I5X%UC3L#M*4v-O&3*!~ zkjJ{#v|8(*0D3jIsu3)c5|P+I1Ckxpl`fC3mc%l@WC_$Go^>aNn%W$<8%dPauVH1o z;@SvL_+TpJEqktm7sC9s?1Zl{@@asOWNoFg9MMbn1_P-M52k|7>G_@d1lZY=5lfKgCj04aD}_u&wa8(?I;b(4>@Rz&^A*G9u!Xe0_t#+KQ_CELIG z#~OtPnBU9OzM*s~%JAnwm+A5yj}ub{x=@e7*P`#LZz>{?6p?oknjV^}wxoPpHN0{( zui#Tk#9H7pcE0)WkNsC>Of zPgv)_ZCbFeEUGNKxll!0tAOpTDn1y?lp&_^z+%^9U#q|XvLe%Xt-?y~? zxc*c73e(5m^>bZZYd$({f!|l;1j-w_?3ybk^;~tKOd$oC5A!HOZXH~|B6v;y&G?u+ z_BI!I?k%AzQna_uy>O_>BbT-diWz-JwKcpl%m~kJ>yLl+lC3nRMR*_!38q|v9_ot* zjN82W-gdw06>wnoy6jd2_fkHpi@0df38U1nAe+lEw_uK&z7N@?$wXF)vs-Bx0ZdB* zanLh2a(Am$Nrb;!FiVROt7fw`3f9n;!OEy+%V5OOrVd3-KHTFBjF5UO=5&|a@VeCS zj;#(mjTm8eB^&Ev_V#+DFAiIM-rD%{ALG zrklTP$ceCvUjFx2gQs=t*5vjYYok4+$v?k%57v8T^_9J*dy@gx+(jBiyyWBrgKSp% zRs#4W3JtxlR`_Rt@Y`7b9?A{HlPntJcfaKPKavsl^Yq=n&8MK-*)>lG0GU!S0|0xF zn~UE^6BE@6CX4ep)Mm*2CU-c>dZ5Ypg777INs}fimu%H55>--d9&>p&cEs-5mzPUY zb2*yLsXX5nQ;t6^^p+Un6*gM1TQf5bH_)@%!xjePjS7(Er_h;rr zLc!a1=}JkIw{+WY?|!*`D!(6o}qcWn7pzLAiXC^eOf8Qa^lyRD!OnqiBU);8E(lgaajJm{CTM&UJ(WGRk(JzeH9 zkgj|+T#}9J4VC@e^cyEg?P_RoKWE)|7T4*%KX15O>{4Q>!ri%a3r$3Qkr1SexTbYn z-6nsvp@u{pA^;HFUz$73xa(z>ldo(n)-**eYEAR&xu|7rM^Ep|*%qwGA{CI@N~fQD zBtr$!KO$6^`EKc|shLi;a|E)mw|2!G$&M~EZHS7;kxjR1{@29<>nh+7J8?f%^KSEC z)&WL45$gui;@Vd*K2w1%7Q+?(B4dQT^oCjzAw_3(sFTZJ&_x2gFJCMhEhARXKYTH5 z;agNWeN{X+n$N>mN&h(RsX$_DYa@;PS;Gzqsh_p9KP-_}f&3R~cW(yio$DwazAd#59IRFyq^kM$jH$FB(8-Ce*9+m7qcCVr)RpWz8?MdCK5 zc04ZM-e%#ohLJRx?;kT8ryFH65%){JuX_W1!bZc|@}wR+Sb_kUm(rnp&h_Qr?`S62 zi}e#6sCdMm;&T=S9!rj6=hCLTAuFom(kN?SGQdIY z<&vrU?;X964?tcetS9{3$Bpa(VcxcU-oE?j(I~dK8j=tgbXOryQ5gdv??bL&nj3EZ zgU6x9>=W?ad7s|%8hobbRY#)X`M5mwK;{0^sMn1xd3{q=BXPpy?K(X&HndPlFic)^ z7r^~0{Om5kSxjKYsiUbf*< zh@Qg5#V;napy|&8{SyrX=*ox?G@Q`T@sL^!WaRhP?zSv^5&6q2e^+t^{a|wx?Y;$h z62cj;zuVf7yzf>@lH-cq*g?dZ!9r;CS3mVKVK@$1W&2zUDWY-iXG0~_z}=;v(=@F9 zs6sD_N@**kg}Z6SRn;Mg+Hh2|q%8Kp)Yxj(l7aDEH!^BUMwI~@( zP2k%*sWWx=R2QNio@(cH2M3vonI0}p-IIx%EkYJeKY!n+zByZYdd^>I(%b0uaH+$T|GNdjeD%ke}uM2`2g^TgRYupmkUgCyFGDN~G z_?$zkaJ1g+gY#DK`f^CgxA3SI?h6kUFX9rmwO}(mG=+f$ev6V=10Sog-*8mT7o^N^ z`~*Pnb9Hp`YKPE|t!~7MyEUhIxmPaZWmVSQykC@3oP}CCaR%{f>d{%N&BeD!o52z* zxp3@>RCeP1At(CgNFj};isT8FVOk{WpQ8-SIHA^@@t|WoGK`>;zxNh};&3CXe8Y(C z20|#NUnYInE3!0z7z)WaQT)O?2-d|H2A??%=l9~pjzDZViG35 zZf-E(*P-o!f{upXfpmiICZfR{UBX3H{aT9x>b83HPQm4*d~(+tVDQe`o-o3-HlR+&~i4^X;V zGQ{RS@~JttSZw*&KH5p30y~+GdJg(Qu9-vxpN)_E-8MBTqzQY0+h3Yn@#-CPZC62+ z3-!)T`zOb2kqZ3DZFIX%N`;=1Xf}#Vzb51_X86${I zDL7vEt(%Dw^QP{C?Nz6L^)E((BIg#JFEqoVDvwwYu=u^L2rPoXY(>%3KZ4I!h~J8# zz*K?x{T~8h;{(Y3ru`qr8+YfGilzrGp3`iz{1z2RRf6+!a0Xax0yl*h-U(>klr}BH zzp?wdb&A55relz9N?VrqzcEuDI{U%`qz#(wl4YcGo9eA~RyV-bW?*->=8+GAzPc~P zMZ4?%Hck=Iw%pt@viznBQo1^H&pOtH@k)_>f^+Q#UcPtoR6~w!nEHjQ^H_zXO&;`2 znLcxA!F7hRnn{d3FEc{CuRi>iG7QZHhkW}^(M+^^D7v~-(0Z`hbx@P5<%CVoeO*h= zoF?eUNS-3NasIXAqguV+{*xab3|HmLx7 zYbw^gRjsa6OY*9ERcNFW4{i6iuR>o>f+Sr=i|v3ED~zQ|g6qJS7zaykLCR)H{-|t) zZO)_S>uP;|r{PPuvJR!JKFrkK4UB?dDP_YfV87he4U!}Zl~^akd|1?-tR=R%#YC^C4`5oV4#5S5p4Yw32WsX)KQW22vQi_8@0RYABu3v(fk;>I+ZH~V9&03w3 z4J6a?%tZCFREXF=wk#G)wv~PZcTaYqegYk9pv>`aHmCm4Cq~Zq!^)7qp#UU!_4l!J zNPa7G8e9xUJq02tD+}!fv^< zhOXU*);^yiYuE)GM`GhQSNS)Pd|t%4wXXd9&L1wp2lWoYyH)}zYThTH*ejvpGh6?P zigYdhn*oRhqEJ$(XTGXm9{{3K%=f&Pai#Wk?dH&fuC|OgYZZz|99$0mX!_!3Cnr15 zA~5HAhWmnW!{Z6ClO;>r?TVxobj^hyAR~m6ACTrotx)#xg}A6Ba-WGDZwoPQDXrMRqZZMMu4i&i_k;y2lFdCsAq>Umarhoqz{B?&emzMjo4WZ;lP zcP?XtJAJvR$h-EqzaVBc)uQ_73?&BpbNVBW@K8|)Vl6q(___@E9M zuJdB`jniv&cRh$k#hZOMpN_Ltd3cDIQZ^}Szvbs`t&$slIz45pE2SVw}-2@xQWXhn5Aa!Hm-d47uN z%*OcXCjaD1@-|8%VL2DMQ6>G9VNLJ?(_Vse-bZHUOCIP#E(N<`CDAA}+&C{wQdKfa zMCu73*>7*wlh~igZHhmV=oHY97&+!xagp?uF z-Qg@-52o)`$;BGS4a-riGU^N`Tegq&f^{q?g%Z^BJ0y>1xWS0$DL>7Af=8MUikhv( z#wN-uSvd@$jSm_Gr*WF)(Zbr@-(0*T1;~R8u8Ys5ZL3bI88!V{XONdUFW>R}z8?@r zxns3MLA|wSN^Ce}j?`WF-ro9f|CW{}2mU=Ez=cxT$Vm6g!20Q{?wHS8Iq(u}Z0u-u zY}BvVYYn7?W4qVWTh2XGGF|v%DY&hd>>7xWgtj7)pcJdY+7EQanpXV5;zior z;#Se5?}Jge{@xt~G#Ke+7OuM3O+uGF{4dp)E<~iGN59@V4nk0==#4IN$b-STbXwV^ z36IHl@AWSkR=6sj0Ofm&ckTAB`B~9(Ex+BC1y-1H3KYW=L|8)zm+o$KgzoyB$L(&z zq`p3$;q(kdEx+=)9AJHce^K#+mbV2K89M(XlsrW^$ToVKMaaDDmuI%d5YDLg; zXnlKGBqb%T<>3B1+v%k-H>CH?(FxrsH2@%355nF9>m91wAr9KS zoO%K@QN*cc33p;Z2@vA#+?)V9UexsfzuDF?F-ghmH}^V8omQBUXdS#fbL3TB9ec^t zB!OJisE`-P+yA2S@rRyk=>(?-QLL-8Tw;HPIJjI#p<1~ul?u@t)B&xSLYjj zTr+I-;XdZ9Px|CCO3BdUYW>W4a^H=QC>AY&w<$buqG_%>lU~{b+QH@t!_H|-T`4IK zGyk=dt@B@`mHYYIk(o{!awN=sv%5+52NSvK@P zGfLyN$H5EGn9^pL0M-X)h}-k((ZSQY`j#U=^k9O5z&+b6lBbGVe6%1pftl(omp&?|91ube2RTE z(P`wSPr$ZnntLdcGRZmuVf12M*{x1qt6sW2O7*f^eeElUcL&7y=cjn!@vQo8{SMae z;8a{%Ykrcg&=<&)K2m1h^(CIT&3yd59*6JQ`Ht-NeX?o_$H0#oUm_2-)eD6@7+uM+ z0GeZf4CCr(b**ilf5-QrZIN$t&&GDdY_L;lQEhJ-+RJs8XyqM#6gIg>gR#9@5GfyV z(=iO%1wc47s|3>=vJHAoVuDM~;l_?9kd-%9>}Ojk;qIA@8=2oUs+5Pz3OpF0aT=D! zo5qqbb$PlpEX|M8o`{Rz+s1?y_ODV*RAdW|J{hKFonfT14zx6pvoLC>a9|P25>3f; z9^t>2S|B9dI`AuW_P(5E(r}WJc~zZ~$Tvp_h->j>JORWzHyC-NYBvtU4<2~6AQypG9ZT)b{)EN#MP=^DG3jl5du`(ogO!0@2z^@_0XEJww2qVCW3L6J+Gso`e3lyv4Z z)6y&FiK?1t!u;6!V`Lsk=9=cGH*BO6c*?Yyi@PAio7PLtj-Kr~E3--5k!x4b`7=Rq z=}+y%i{)zd9XLDcKL*ex!bUcz$$Il#dC;M7PMDlpUM6lPn_@iDPcPk&Pg?NN&7 z9XC7W6pq;2sB5m0wlN#S%M%?Fi}dZjv#S~5pkqGmY~BC58CvB3?giQ^kJ4 zY2-gWOwuNM3%_{`zmPk5k$p#6j!Jp0?Ia%HX+rCq9xI#M`gIa6|DYz@EJ<6E-pAM? zL`Td~#ppt$-yzD$^b;W>OoYGrldW}JhrM&(WiLFT&Ui$Tzx{jun3zJW0xGJlE_eBq zjt6em8EmF$P}ze#*9|y(fy(Zqcr z5=DuV74S-OMv%nin!;mFgKFeXR;tF;H7@LSd!{-jkzn5O&qYI0xi|;?q#IZhMvaj= z!?Loau<5!Mc?o3yv6C>$@`p|%gD2ftMi8UY)V;dQzoC2HXno-v}2uPQNhbb z0vepV_0GyrCeRopo|2cCf1$?PY07$pyC6xH)s8-0vVaDIgs_m=6#&)&LUMv-^huQa zgS!R?CRN^ef7->SqdUkHWMH{tZ<35_h+(P4S;Ic54;j0Xx^t%sAzsuqH(8j=^LH9N z=!b}fJ+Wt*&{A~lfL~cWn1tvxF$ev(;?lrS;}2S_PM!4K${eueN7y0v@ z%(l#ILLj*Kx|MxFOqCZ@xHA3c4;(`60*sFC=a>mUnFV8^X3l$e!VWVF{Wypy}Lx;hcU1+;wEbJuClTdc*b2UPnDXa<1fmF`JpnrKrZV@YpIJ9TkwfvM zagnt6&z^Yk?U;AV{;9@@Qb;pJ!?LYiMUmo;=9bi)$uzapRv71ZvN?oZfdb_xd;BKXlbY3k{(j}`;@G|!I#~jP34Vh8v17zNVOH$^AQ^Z zCl2rfJ54N`yP2ip$KuAc_<2|hsgdf`m-ru!Ng{rv^gD>4aZ;vgw)Cui!VUyWjHsLr zwN(5x4(~82!=Roe(ZuN&G?6P0G1Iz9RWY_pY0)T*ns}Y(cy0hT^@;|$j9i#1-BIaz z<(1iqW6!Nc968g%J%fk8#Ppx2FS-mKg#x})4;l+seZ534>{mkp^|6Z?^z`scU3N=F z$?!Hw3^Oq~ZvLy)*gqVKgAW~fd$$fc9?rkL5Ah#{%zn{#NlY2DEd9jBiRB0ak^`Rr z6&wAfW&0M~KLUIw2wEs1u!i|GEX*4X+)tISy2M=s+LtuHzhT4sxje1myS#Aj_iWcY zdnVAAJv2T}@CyxyBxW7nYVxxn z%|gnhW|04t7eVzsH>$cwBv|6uXlqovQqx&t#Zp;rr|3h_A?EjOKRlN;`?c%Nnz*-% zW_@kLK|djeh{veVzX^G}X|UZ})c|K_(%?$Y_9>~ZRw5CXkcD&4^SjhX?k50GT*zL$ zDj4%hXn8hpjEABZFgv&+j1vTsA`zh6}RRV8Cmc0^Ks4-;N7~M*PO6r_WKD) z1X0-EV;+U{@%STWm5*JTkyu2AXhfQtVTsC7f-FUXCM(xf!xzYC4j*4%@gq>q{LP`8 z@*n$9txzQKCEL`D=W8ar$NPAaggDgVuQ8vpKY5_@FED-jMxU?eM8T+|VM3%xufazk zh_0+fD1(H=iM!5ANHI-N{TO^PlP)F$UkH(w>{J%gIh{9=MlE0J#^@tRXVg@F)hY}j z=0}G?0dOdQ5%mYiyyf#QG<=0W+ZZ(GLUx!ijk&m_PPtgW(zc-90N%zhqq`*bm6`Rf zmZoJ6ElAhm1pVd;g-SMN{CC-Y%!EX(D^Y(L514LR3-6rDQE9zJLT>mspW`^HnSx>t z_vdBhQ6zHhLkqR(;`M9o)js*$GUDN7Vs3}rCZrff*Q>A?T0~<9==FIXE6+huQcpEZuczLq5d8UVao%Ld` ze3XB6a{ELL(Zkf>+^;Po5xl7?|j4EIO333CNu}P*IoI2*1oQ8s?OXU;JB z@-#mO7dw4W90l};C3aH_2o3$Kr*lVW3bU)=i?-afHtA_1X4B!FA%_uaO_wzkxdzxK zCeD~-(;qwmRls12C|O8KBNz`yTuMHdvV`1SfR{WkDxd7kHO!Se<|{M&hN^0+0b(<7UZEK;%;*S$&!JR(onwR z3^fu1?`z+*Stk8pR(nwOLkO(#-O~C|_FT_-&RQfV&hsD74DgA-KY?$aS6}DFBkq-F zXHk%4#SNLx^+#Iy9jFY>4*#&A7#V68q#opEX^vlE&;3ipo5b?z{bOi(uQ-*Zv_xuS z4;K$l0oz)^wS(79fJ)Edm}asHI!f5!Wqg`|wm9{@B0!IBr2wH$arvGoC-kF3CYMh0 z6I+=o-`&@?%bBX)SaO?tGuc0e{Bf1$OIUAOSjEtaA+-cn6y%+>(3NI%6ivnqtLJ=R zjMZ)#*AEEIyCt(W2B{O36%7AhljB)0|09bx9BIWxStZs*J*H{-Wp?ktAgdNG`%4*K z&n6zXzS&yBuL4nF-JNH;l<(H8pMX6WW5At}Q+v?RuO}d8yW7Vj!Lw0Iw?*zM!K44p zom?F|ypBLCnsfj<=!6u7gMdbq5l*!#m@s5mdh0&?Xpr`|@THj4AdI&n#{Rl*h9t`7 z6;JEvo|^+{y+j7XC(V+m$MsPX33vtGRBhkE-w@&;)7&|(=P>2A{ZcVQXpybTNcIoC z*SG5yj=)foDp}nhpW+4ojA|3;1WGjj(6uU0nGxN!`aW>zn3B2M@K*#0080rw~sv@U;_w(ArJ^yaK8x(3PObr2n+4wpqQA*0oXw) zDcC_6Oj=e+P8yDofx+Yt$s?4NRaI4`<sk%fx%#befL5T z@J|*b0EP%cVStd-pXmYa+(I^QO)fAO~igOf8&3`AgJKJ z$UcXH{Ztiz?jQaKf6Kz4)>6{&L%+DH>-m+l_r`z&`@RHVU>INtMEFFu620CSQ+XI1 zm8k@|Ih>mS?RGhTvP20>(Yk#)*DA6=U=X`He2E*}Tv#Z+nJfLefagv|jcdzm>?$Aq zA*mDkU?VkRo+BkT;_VsrUd*^h@&i_5Xg2sYCY@oDbGVg$sQ(;JvW22W7wEy8CfPR) z`CO=H*qx>BaMI$!ZCp-QHR1%$Xs&?*O7rIEq?p0B9dmL-@!@auVQ<2Y$iM51J+|@+ zh=*{jroTWt87lH&p;23-#nrWmG$V=GhXh@+f`yY=i*a^$N&E{mdLH^(6!%t^B8aq6 zOU|}y9}Y9B$qO>r_R^cO^*f5J3D;fAKaq07czVX_K+Ixe`1W_vk7@0fL^&rKl$q3# zB?WAP$eEQ~7pxG!#{GB0j-z}5GsGhc_vccI=W((XLeV#(YsJ+*D7TWi-5Ub4oin|~ zP7nF+)4Sprv)mipe1!tnKJ(^2T%WwLx$w)vJwW7JiRapAkt6w2{+wf`clvId2WOa3 z0sale&D3*_5;6aZ4J8^%UnFgev*v!Rk_?Ji&+32M1Hiwu?N%-|LMDH7EIM>7UwhWRwN6I(-IuACcX>^QnW?!_74F{rg>W?dMhg?pEOM@t;a{*Ifr zlm2RM$gg%z#@~32DLi2?dXZkNr_oWM7-_+GbAVhg0<-I6*4l@EOPEvZ3HHFHp|x76 z;PBGGrnldr&fSLGYsXkY26lYLH=MSi1Qs_mUj1Zi#Nv^aYVF3zzfL82KN0D_y%0CO zJ-4_Aj0Z3!D(2<#<#;jc!Aq@nc>S81rSUuO0&7;ju1xh;+E%`>T9BS@xS;ChX*nNS z8Q*1DkwKsUxcWYt~gctls#0KmW-b8Ku@a)%+Hl8|ue&>|?$q z#+_-;F+AwLf`Vwle03X=rVHaU(N(_BoM(kvnU>IkDmU^tSBnrBF2xS_C~!VkiCl`! z_%%|Lm_<_hglfjFBj%MNlh{oV90%d;v5m(uL}Y}Q%ehlbq-ZSdXrQ(msMkUHwmf>% zog7N06Y}k=-y0M%kCcA)WBty{(&v9E*Q~XSta0cVzJ?Hnm+tNUR^V^weFd)sucw zw8AP2QDdwBC#SrHi+p4M>96_5@Vu)Z&rY3YR6V3+Ir(b$fg3$aNZ)*J)L+=RKFHUx zr%w4>XD^t$wb76>;IE<)3(hQw_xM%Z>_jikea68(U(g-da4YYzRvZ2uj+1#C7twX+ zCYMkuZ-B`6dN$*hL1xe51Gd=U;bO(ntt!cQiMj)$ zp=1mqqWqLS6ql1TEC@=@!o(Og!_yKfr&goGbuJsz*|5{M4@vS|KM%I>M0+9Ia(7v6 z>V`}26)#WbcbO_!7>d^H;sRoBueQNn7)erj@-bF^%GSH1%eAHg6jH_~{mA;kAdYOX zv=&S;!@Rft^p#<1MN*!zy^N$=nU!UK0z+UA_?Sw*q7iwbs2*GCyTls_DC$ff_NzGV zwQ4f`;1vZB!DYMLGkap@WbYknp+0~5?2dn195Mu(11*j4EUd=H>#QjUJuE$5^GU%g zv+BZ7xjf6!aq~di;>L%!9>2cF<4RPBi>v5csOO|B@MINZQIRtcx|YkEu;k_1$Ffw9 zXHi50ugo{;fh5l=*A5z%@1Py4rBVygxSFjT1JWc8Sc%8A53w9$$5Zz^_6!#C#5dIqFrHFRkgCUj7{ z^*@+v%#n$rdso-FL(jWV!Gu?$qt=_m6qms~A*;oJIn+Y#-NdOF=W0&Uahfr-D;dx3 z-EP-!U%1>mSn*CupS#4Jc_fcnx;OUcF;?*x?(_7}uKJ8YwnM~1rFR_#X=Db zMb`E1@4S+FEqFv`aZ5Bx@G+VT58@Ffry9cC zl%pIr=LeC0Mjq11{#+U+lZ^(Y&_MIRf|EnbRZ?61aKglgcFr}VQ>j#yuf)^qcw5GM zTKvgpeas^O<72RilO5dr2UG_)&p2MY}J#8mSOX>6BaTYA7(BYPvm}--*d$b`n~4=w!Vb zCKuJ?fx#%b;#+6*=u}ElguNu~63Z6$^}skksIPNF)VrM3SFD$Ei+Ji;meAlBPT&Dg z3>Ur3J(Vu=!L;-w&+%TNKcQBedEx%d^?=cC(j|QvK}Ljct$U!2kb9$9djCCeL z6m|-`QET>Ft93Kyr^Q5Za=oS2bTs|rn_#+w`ySA_`cm5yr!f#Kyn~_&@eubOoQMl= zP{0=0GW`w{C0y05@u`vtgLKg}XMRR>`F%a3Ku35-hvCH+^*Ql>y>5{qKDw;D7H>@= z#s{WOT4g86A^qz}#Ke5yE09$T9_mc2wCiM_9Od;4DV{xxB;D Date: Tue, 30 Jan 2007 17:24:05 +0000 Subject: [PATCH 220/316] Updated version info to 4.0.2.755 --- dox/prj/winpcap_oem_noc.dox | 2 +- version.h | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dox/prj/winpcap_oem_noc.dox b/dox/prj/winpcap_oem_noc.dox index d6e577af..403cddff 100644 --- a/dox/prj/winpcap_oem_noc.dox +++ b/dox/prj/winpcap_oem_noc.dox @@ -4,7 +4,7 @@ # Project related configuration options #--------------------------------------------------------------------------- PROJECT_NAME = "WinPcap Professional" -PROJECT_NUMBER = 4.0.2.730 +PROJECT_NUMBER = 4.0.2.755 OUTPUT_DIRECTORY = ./ CREATE_SUBDIRS = NO OUTPUT_LANGUAGE = English diff --git a/version.h b/version.h index 4abec3a9..0d7f0f41 100644 --- a/version.h +++ b/version.h @@ -15,14 +15,14 @@ #define WINPCAPOEM_MAJOR 4 #define WINPCAPOEM_MINOR 0 #define WINPCAPOEM_REV 2 -#define WINPCAPOEM_BUILD 730 +#define WINPCAPOEM_BUILD 755 -#define WINPCAPOEM_VER_STRING "4.0.2.730.Pro" +#define WINPCAPOEM_VER_STRING "4.0.2.755.Pro" #define WINPCAPOEM_COMPANY_NAME "CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_NAME "Packet.dll Wrapper" -#define WINPCAPOEM_VERSION_STRING "4.0.2.730.Pro" +#define WINPCAPOEM_VERSION_STRING "4.0.2.755.Pro" #define WINPCAPOEM_PRODUCT_NAME "WinPcap Professional" #define WINPCAPOEM_COPYRIGHT_STRING "Copyright © 2005-2007 CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_FILENAME "Packet.dll (wrapper)" From 793c6ed8d25dab6a8f7cf5fd63e3951fab8d4c65 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Tue, 8 May 2007 23:13:14 +0000 Subject: [PATCH 221/316] Updated version info to 4.0.1.755 (aka WinPcap Pro 4.0 for TNT) --- version.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/version.h b/version.h index 0d7f0f41..d386b2c7 100644 --- a/version.h +++ b/version.h @@ -14,15 +14,15 @@ #define WINPCAPOEM_MAJOR 4 #define WINPCAPOEM_MINOR 0 -#define WINPCAPOEM_REV 2 +#define WINPCAPOEM_REV 1 #define WINPCAPOEM_BUILD 755 -#define WINPCAPOEM_VER_STRING "4.0.2.755.Pro" +#define WINPCAPOEM_VER_STRING "4.0.1.755.TNT" #define WINPCAPOEM_COMPANY_NAME "CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_NAME "Packet.dll Wrapper" -#define WINPCAPOEM_VERSION_STRING "4.0.2.755.Pro" +#define WINPCAPOEM_VERSION_STRING "4.0.1.755.TNT" #define WINPCAPOEM_PRODUCT_NAME "WinPcap Professional" #define WINPCAPOEM_COPYRIGHT_STRING "Copyright © 2005-2007 CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_FILENAME "Packet.dll (wrapper)" From 0dd03de13a9f2b63e856e4c654ab41ccb66f4431 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 9 May 2007 00:28:44 +0000 Subject: [PATCH 222/316] Updated the release procedures to take signing into account. --- WinPcap OEM.sln | 19 ++++++ release procedures TNT OEM.txt | 103 +++++++++++++++++++++++---------- 2 files changed, 91 insertions(+), 31 deletions(-) diff --git a/WinPcap OEM.sln b/WinPcap OEM.sln index f8befc07..d8bf6b5b 100644 --- a/WinPcap OEM.sln +++ b/WinPcap OEM.sln @@ -34,6 +34,8 @@ Global Release = Release Release SIGNED STEP1 = Release SIGNED STEP1 Release SIGNED STEP2 = Release SIGNED STEP2 + Release TNT SIGNED STEP1 = Release TNT SIGNED STEP1 + Release TNT SIGNED STEP2 = Release TNT SIGNED STEP2 Release_TNT = Release_TNT EndGlobalSection GlobalSection(ProjectConfiguration) = postSolution @@ -45,6 +47,9 @@ Global {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release SIGNED STEP1.ActiveCfg = Release SIGNED|Win32 {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release SIGNED STEP1.Build.0 = Release SIGNED|Win32 {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release SIGNED STEP2.ActiveCfg = Release|Win32 + {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release TNT SIGNED STEP1.ActiveCfg = Release SIGNED|Win32 + {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release TNT SIGNED STEP1.Build.0 = Release SIGNED|Win32 + {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release TNT SIGNED STEP2.ActiveCfg = Release|Win32 {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release_TNT.ActiveCfg = Release|Win32 {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release_TNT.Build.0 = Release|Win32 {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Debug.ActiveCfg = Debug|Win32 @@ -55,6 +60,9 @@ Global {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release SIGNED STEP1.ActiveCfg = Release SIGNED|Win32 {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release SIGNED STEP1.Build.0 = Release SIGNED|Win32 {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release SIGNED STEP2.ActiveCfg = Release|Win32 + {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release TNT SIGNED STEP1.ActiveCfg = Release SIGNED|Win32 + {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release TNT SIGNED STEP1.Build.0 = Release SIGNED|Win32 + {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release TNT SIGNED STEP2.ActiveCfg = Release|Win32 {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release_TNT.ActiveCfg = Release|Win32 {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release_TNT.Build.0 = Release|Win32 {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Debug.ActiveCfg = Debug|Win32 @@ -62,6 +70,8 @@ Global {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Release.ActiveCfg = Release|Win32 {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Release SIGNED STEP1.ActiveCfg = Release|Win32 {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Release SIGNED STEP2.ActiveCfg = Release|Win32 + {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Release TNT SIGNED STEP1.ActiveCfg = Release|Win32 + {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Release TNT SIGNED STEP2.ActiveCfg = Release|Win32 {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Release_TNT.ActiveCfg = Release|Win32 {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Debug.ActiveCfg = Debug|Win32 {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Debug.Build.0 = Debug|Win32 @@ -72,6 +82,9 @@ Global {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release SIGNED STEP1.ActiveCfg = Release|Win32 {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release SIGNED STEP2.ActiveCfg = Release SIGNED|Win32 {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release SIGNED STEP2.Build.0 = Release SIGNED|Win32 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release TNT SIGNED STEP1.ActiveCfg = Release_TNT|Win32 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release TNT SIGNED STEP2.ActiveCfg = Release_TNT_SIGNED|Win32 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release TNT SIGNED STEP2.Build.0 = Release_TNT_SIGNED|Win32 {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release_TNT.ActiveCfg = Release_TNT|Win32 {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release_TNT.Build.0 = Release_TNT|Win32 {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Debug.ActiveCfg = Debug REMOTE|Win32 @@ -83,6 +96,9 @@ Global {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release SIGNED STEP1.ActiveCfg = Release REMOTE|Win32 {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release SIGNED STEP2.ActiveCfg = Release REMOTE|Win32 {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release SIGNED STEP2.Build.0 = Release REMOTE|Win32 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release TNT SIGNED STEP1.ActiveCfg = Release REMOTE TNT|Win32 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release TNT SIGNED STEP2.ActiveCfg = Release REMOTE TNT|Win32 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release TNT SIGNED STEP2.Build.0 = Release REMOTE TNT|Win32 {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release_TNT.ActiveCfg = Release REMOTE TNT|Win32 {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release_TNT.Build.0 = Release REMOTE TNT|Win32 {8D305FC1-A748-4C63-B419-585BF03165D9}.Debug.ActiveCfg = Debug|Win32 @@ -93,6 +109,9 @@ Global {8D305FC1-A748-4C63-B419-585BF03165D9}.Release SIGNED STEP1.ActiveCfg = Release SIGNED|Win32 {8D305FC1-A748-4C63-B419-585BF03165D9}.Release SIGNED STEP1.Build.0 = Release SIGNED|Win32 {8D305FC1-A748-4C63-B419-585BF03165D9}.Release SIGNED STEP2.ActiveCfg = Release|Win32 + {8D305FC1-A748-4C63-B419-585BF03165D9}.Release TNT SIGNED STEP1.ActiveCfg = Release SIGNED|Win32 + {8D305FC1-A748-4C63-B419-585BF03165D9}.Release TNT SIGNED STEP1.Build.0 = Release SIGNED|Win32 + {8D305FC1-A748-4C63-B419-585BF03165D9}.Release TNT SIGNED STEP2.ActiveCfg = Release|Win32 {8D305FC1-A748-4C63-B419-585BF03165D9}.Release_TNT.ActiveCfg = Release|Win32 {8D305FC1-A748-4C63-B419-585BF03165D9}.Release_TNT.Build.0 = Release|Win32 EndGlobalSection diff --git a/release procedures TNT OEM.txt b/release procedures TNT OEM.txt index c8305677..caaf2080 100644 --- a/release procedures TNT OEM.txt +++ b/release procedures TNT OEM.txt @@ -1,5 +1,5 @@ -$Header: /usr/cvsroot/winpcap_oem/release\040procedures\040TNT\040OEM.txt,v 1.4 2006/09/13 12:32:23 gianlucav Exp $ -OEM WINPCAP TOOLKIT RELEASE PROCEDURE +$Header: /usr/cvsroot/winpcap_oem/release\040procedures\040TNT\040OEM.txt,v 1.5 2006/09/13 12:34:44 gianlucav Exp $ +WINPCAP PRO TOOLKIT RELEASE PROCEDURE ===================================== Needed tools @@ -12,6 +12,10 @@ Dependencies ------------ - you need to have the Airpcap developer's pack in %BUILD_TREE%\Airpcap_Devpack +- you need to have the NpfIm compiled sources in + %BUILD_TREE%\NpfIm + You should also have run the "NpfIm\build_dev_pack.bat" script + to have the devpacks ready How to compile OEM WinPcap for the toolkit. @@ -35,10 +39,10 @@ How to compile OEM WinPcap for the toolkit. *only* modified file in this module. 6. Tag the %BUILD_TREE%\winpcap_oem module with the tag - OEM_WINPCAP__TNT_ + WINPCAP_PRO__TNT_ 7. Tag the %BUILD_TREE%\winpcap module with the tag - OEM_WINPCAP__TNT_ + WINPCAP_PRO__TNT_ 8. Take the contents of %BUILD_TREE%\libpcap_ and copy it into %BUILD_TREE%\winpcap\wpcap\libpcap @@ -58,23 +62,24 @@ How to compile OEM WinPcap for the toolkit. 13. Check that the version of wpcap in %BUILD_TREE%\winpcap\wpcap\libpcap\pcap.c line 875 - "static const char wpcap_version_string[] = "3.1";" + "static const char wpcap_version_string[] = "4.0";" is correct. -14. Zip the contents of the four folders +14. Zip the contents of the five folders %BUILD_TREE%\winpcap_oem %BUILD_TREE%\winpcap %BUILD_TREE%\libpcap_ %BUILD_TREE%\AirPcap_Devpack + %BUILD_TREE%\NpfIm | V %BUILD_TREE%\sources.zip 15. Open a Win 2000 DDK Free build environment. Go into %BUILD_TREE%\winpcap_oem\packetntx. - Execute "compileDriver.bat". Prefast 1.5.2402 should issue 8 warnings - (20060710). + Execute "compileDriver.bat". Prefast 1.5.2402 should issue 9 warnings + (20070508). Close the build environment. NOTE: DO NOT EXECUTE 15. 16. and 17. at the same time, they overwrite files in the build process that are incompatible between the two builds. @@ -93,51 +98,87 @@ How to compile OEM WinPcap for the toolkit. NOTE: DO NOT EXECUTE 15. 16. and 17. at the same time, they overwrite files in the build process that are incompatible between the two builds. -18. Open %BUILD_TREE%\winpcap_oem\WinPcap OEM.sln with Visual Studio 2003. - Choose the Release_TNT configuration, and then use Build->Rebuild Solution. - Some warnings should be issued related to the wpcap.dll project, only. - If you choose the Debug configuration, and then use Build->Rebuild Solution, the - compilation will fail because the debug version of the NT4 driver is missing. Repeat - step 16 choosing the NT4 Checked build environment. - Close Visual Studio. -19. The build is complete. - The DLLs are in the following folders: +SIGNED BINARIES BUILD - %BUILD_TREE%\winpcap_oem\wpcap\PRJ\release_REMOTE_TNT\wpcap.dll - %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\Release_TNT\packet.dll + 18s. Open %BUILD_TREE%\winpcap_oem\WinPcap OEM.sln with Visual Studio 2003. + Choose the "Release TNT SIGNED STEP1" configuration, and then use Build->Rebuild Solution. + No warnings should be generated. -20. Check the DLLs/SYSs files for the versions + 19s. Sign all the binaries in + %BUILD_TREE%\winpcap_oem\OEM\WinPcapOem\Binaries_SIGNED, namely + npfnt.sys + npf2k.sys + npfx64.sys + packetnt.dll + packet2k.dll + packetVista.dll + with the company certificate + cross certificate + + The generic command is + signtool sign /v /ac MSCV-VSClass3.cer /s my /n "CACE TECHNOLOGIES, LLC" + /t http://timestamp.verisign.com/scripts/timestamp.dll + + 20s. Go back to Visual studio 2003. Choose the "Release TNT SIGNED STEP2" configuration, and then + use Build->Rebuild solution. Some warnings should be generated when compiling wpcap.dll. + + 21s. Sign the following binaries in + %BUILD_TREE%\winpcap_oem\OEM\WinPcapOem\Binaries_SIGNED\packet.dll + %BUILD_TREE%\winpcap_oem\OEM\WinPcapOem\Binaries_SIGNED\wpcap.dll + with the company certificate + cross certificate + + + 21s. The build is complete. Check the versions *and* signature of the + following files: + %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\Binaries_SIGNED\wpcap.dll + %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\Binaries_SIGNED\packet.dll + %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\Binaries_SIGNED\npf2k.sys + %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\Binaries_SIGNED\npfnt.sys + %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\Binaries_SIGNED\npfx64.sys + %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\Binaries_SIGNED\packet2k.dll + %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\Binaries_SIGNED\packetnt.dll + %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\Binaries_SIGNED\packetVista.dll + + +UNSIGNED BINARIES BUILD +(NOTE GV: as of 20070508 this procedure has not been tested at all) + +18u. Open %BUILD_TREE%\winpcap_oem\WinPcap OEM.sln with Visual Studio 2003. + Choose the "Release TNT" configuration, and then use Build->Rebuild Solution. + Some warnings should be generated when compiling wpcap.dll. + +19u. The build is complete. Check the versions of the following files %BUILD_TREE%\winpcap_oem\wpcap\PRJ\release_REMOTE_TNT\wpcap.dll - %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\Release_TNT\packet.dll + %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\Release\packet.dll %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\binaries\npf2k.sys - %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\binaries\npfx64.sys %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\binaries\npfnt.sys - %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\binaries\packet2k.sys - %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\binaries\packetnt.sys - + %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\binaries\npfx64.sys + %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\binaries\packet2k.dll + %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\binaries\packetnt.dll + %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\binaries\packetVista.dll SCM procedures -------------- -1. %BUILD_TREE%\winpcap_oem\wpcap\PRJ\release_REMOTE_TNT\wpcap.dll - %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\Release_TNT\packet.dll +1. %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\Binaries_SIGNED\wpcap.dll + %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\Binaries_SIGNED\packet.dll | v - OEM_WinPcap__TNT__Binaries.zip + WinPcapPro__TNT__Binaries.zip 2. %BUILD_TREE%\Sources.zip | V - OEM_WinPcap__TNT__Sources.zip + WinPcapPro__TNT__Sources.zip 3. %BUILD_TREE%\winpcap_oem %BUILD_TREE%\winpcap %BUILD_TREE%\libpcap_ %BUILD_TREE%\Airpcap_Devpack + %BUILD_TREE%\NpfIm | V - OEM_WinPcap__TNT__Build_Tree.zip + WinPcapPro__TNT__Build_Tree.zip MD5sum @@ -145,6 +186,6 @@ MD5sum 1. Open a command prompt and go into %BUILD_TREE% -2. Type md5sum.exe OEM_* > md5sum.txt +2. Type md5sum.exe WinPcapPro_* > md5sum.txt \ No newline at end of file From 582b77bd5455e00435d01d0b349b6a6a0c621d62 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 9 May 2007 00:29:22 +0000 Subject: [PATCH 223/316] Updated the project to take signing into account. --- OEM/WinpcapOem/WinpcapOem.vcproj | 145 ++++++++++++++++++++++++++++++- 1 file changed, 141 insertions(+), 4 deletions(-) diff --git a/OEM/WinpcapOem/WinpcapOem.vcproj b/OEM/WinpcapOem/WinpcapOem.vcproj index 7b0d120c..49288467 100644 --- a/OEM/WinpcapOem/WinpcapOem.vcproj +++ b/OEM/WinpcapOem/WinpcapOem.vcproj @@ -266,7 +266,7 @@ HeaderFileName=""/> + CommandLine="postbuild_release.bat"/> @@ -347,7 +347,8 @@ echo **************************************************************** copy .\Release_SIGNED\packet.dll .\binaries_signed\packet.dll copy ..\..\wpcap\PRJ\Release_REMOTE\wpcap.dll .\binaries_signed\wpcap.dll -postbuild_release.bat"/> +postbuild_release.bat +"/> + + + + + + + + + + + + + + + @@ -425,6 +514,14 @@ echo **************************************************************** Optimization="2" AdditionalIncludeDirectories=""/> + + + @@ -468,6 +565,14 @@ echo **************************************************************** Optimization="2" AdditionalIncludeDirectories=""/> + + + @@ -511,6 +616,14 @@ echo **************************************************************** Optimization="2" AdditionalIncludeDirectories=""/> + + + @@ -554,6 +667,14 @@ echo **************************************************************** Optimization="2" AdditionalIncludeDirectories=""/> + + + @@ -597,6 +718,14 @@ echo **************************************************************** Optimization="2" AdditionalIncludeDirectories=""/> + + + @@ -640,6 +769,14 @@ echo **************************************************************** Optimization="2" AdditionalIncludeDirectories=""/> + + + + RelativePath="binaries\Packet2k.dll"> + RelativePath="Packet2k.dll"> From 0749e298490d0e186b72c9172e556bd303ab0706 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Tue, 3 Jul 2007 22:25:40 +0000 Subject: [PATCH 224/316] Updated version to 4.0.2.901 (aka WinPcap Pro 4.0.1). --- dox/prj/winpcap_oem_noc.dox | 2 +- version.h | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/dox/prj/winpcap_oem_noc.dox b/dox/prj/winpcap_oem_noc.dox index 403cddff..1b9ef477 100644 --- a/dox/prj/winpcap_oem_noc.dox +++ b/dox/prj/winpcap_oem_noc.dox @@ -4,7 +4,7 @@ # Project related configuration options #--------------------------------------------------------------------------- PROJECT_NAME = "WinPcap Professional" -PROJECT_NUMBER = 4.0.2.755 +PROJECT_NUMBER = 4.0.2.901 OUTPUT_DIRECTORY = ./ CREATE_SUBDIRS = NO OUTPUT_LANGUAGE = English diff --git a/version.h b/version.h index d386b2c7..786538e7 100644 --- a/version.h +++ b/version.h @@ -14,15 +14,15 @@ #define WINPCAPOEM_MAJOR 4 #define WINPCAPOEM_MINOR 0 -#define WINPCAPOEM_REV 1 -#define WINPCAPOEM_BUILD 755 +#define WINPCAPOEM_REV 2 +#define WINPCAPOEM_BUILD 901 -#define WINPCAPOEM_VER_STRING "4.0.1.755.TNT" +#define WINPCAPOEM_VER_STRING "4.0.2.901.Pro" #define WINPCAPOEM_COMPANY_NAME "CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_NAME "Packet.dll Wrapper" -#define WINPCAPOEM_VERSION_STRING "4.0.1.755.TNT" +#define WINPCAPOEM_VERSION_STRING "4.0.2.901.Pro" #define WINPCAPOEM_PRODUCT_NAME "WinPcap Professional" #define WINPCAPOEM_COPYRIGHT_STRING "Copyright © 2005-2007 CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_FILENAME "Packet.dll (wrapper)" From bd2dfb597209658262588236f5a84161d794489d Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 22 Aug 2007 00:14:53 +0000 Subject: [PATCH 225/316] Updated version to 4.0.1.901 (WinPcap Pro 4.0.1 for TNT). --- version.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/version.h b/version.h index 786538e7..26b66203 100644 --- a/version.h +++ b/version.h @@ -14,15 +14,15 @@ #define WINPCAPOEM_MAJOR 4 #define WINPCAPOEM_MINOR 0 -#define WINPCAPOEM_REV 2 +#define WINPCAPOEM_REV 1 #define WINPCAPOEM_BUILD 901 -#define WINPCAPOEM_VER_STRING "4.0.2.901.Pro" +#define WINPCAPOEM_VER_STRING "4.0.1.901.tnt" #define WINPCAPOEM_COMPANY_NAME "CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_NAME "Packet.dll Wrapper" -#define WINPCAPOEM_VERSION_STRING "4.0.2.901.Pro" +#define WINPCAPOEM_VERSION_STRING "4.0.1.901.tnt" #define WINPCAPOEM_PRODUCT_NAME "WinPcap Professional" #define WINPCAPOEM_COPYRIGHT_STRING "Copyright © 2005-2007 CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_FILENAME "Packet.dll (wrapper)" From 9d2cb31849875891cc095135d9bf90da9d74cbe7 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Thu, 20 Sep 2007 20:43:11 +0000 Subject: [PATCH 226/316] Added a missing export (pcap_get_airpcap_handle). --- wpcap/PRJ/WPCAP.DEF | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/wpcap/PRJ/WPCAP.DEF b/wpcap/PRJ/WPCAP.DEF index c1bd2923..4365a321 100755 --- a/wpcap/PRJ/WPCAP.DEF +++ b/wpcap/PRJ/WPCAP.DEF @@ -81,4 +81,5 @@ EXPORTS pcap_lib_version pcap_dump_file pcap_dump_ftell - pcap_start_oem \ No newline at end of file + pcap_start_oem + pcap_get_airpcap_handle \ No newline at end of file From 9f7529e41325f2374b4d9bc4b87730e83198f8bf Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Tue, 30 Oct 2007 16:34:50 +0000 Subject: [PATCH 227/316] Renamed the PDB files to Packet2k.pdb (to fix a problem when debugging with multiple copies of packet.dll loaded into memory). --- packetNtx/Dll/Project/PacketAndWan2003.vcproj | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packetNtx/Dll/Project/PacketAndWan2003.vcproj b/packetNtx/Dll/Project/PacketAndWan2003.vcproj index b73d15e8..4d396001 100644 --- a/packetNtx/Dll/Project/PacketAndWan2003.vcproj +++ b/packetNtx/Dll/Project/PacketAndWan2003.vcproj @@ -45,7 +45,7 @@ SuppressStartupBanner="TRUE" ModuleDefinitionFile="../../../../winpcap/PacketNtx/Dll/Packet.def" GenerateDebugInformation="TRUE" - ProgramDatabaseFile="$(OutDir)/Packet.pdb" + ProgramDatabaseFile="$(OutDir)/Packet2k.pdb" SubSystem="2" ImportLibrary="$(OutDir)/Packet.lib" TargetMachine="1"/> @@ -114,7 +114,7 @@ SuppressStartupBanner="TRUE" ModuleDefinitionFile="../../../../winpcap/PacketNtx/Dll/Packet.def" GenerateDebugInformation="TRUE" - ProgramDatabaseFile="$(OutDir)/Packet.pdb" + ProgramDatabaseFile="$(OutDir)/Packet2k.pdb" SubSystem="2" OptimizeReferences="2" ImportLibrary="$(OutDir)/Packet.lib" @@ -184,7 +184,7 @@ SuppressStartupBanner="TRUE" ModuleDefinitionFile="../../../../winpcap/PacketNtx/Dll/Packet.def" GenerateDebugInformation="TRUE" - ProgramDatabaseFile="$(OutDir)/Packet.pdb" + ProgramDatabaseFile="$(OutDir)/Packet2k.pdb" SubSystem="2" OptimizeReferences="2" ImportLibrary="$(OutDir)/Packet.lib" @@ -205,9 +205,9 @@ mkdir ..\..\..\OEM\WinPcapOem\Binaries_SIGNED >NUL 2>NUL copy .\Packet_Release_2k\packet.dll ..\..\..\OEM\WinPcapOem\Binaries_SIGNED\Packet2k.dll Echo Copying the drivers -copy ..\..\Driver\bin\2k\i386\npf.sys ..\..\..\OEM\WinPcapOem\Binaries_SIGNED\npf2k.sys -copy ..\..\Driver\bin\NT4\i386\free\npf.sys ..\..\..\OEM\WinPcapOem\Binaries_SIGNED\npfnt.sys -copy ..\..\Driver\bin\xp\AMD64\npf.sys ..\..\..\OEM\WinPcapOem\Binaries_SIGNED\npfx64.sys +copy ..\..\Driver\bin\2k\i386\npf.sys ..\..\..\OEM\WinPcapOem\Binaries_SIGNED\npf2k.sys +copy ..\..\Driver\bin\NT4\i386\free\npf.sys ..\..\..\OEM\WinPcapOem\Binaries_SIGNED\npfnt.sys +copy ..\..\Driver\bin\xp\AMD64\npf.sys ..\..\..\OEM\WinPcapOem\Binaries_SIGNED\npfx64.sys "/> From cb1cbda861c38e93d90e13e8699fb19fbe26524a Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Tue, 30 Oct 2007 16:35:33 +0000 Subject: [PATCH 228/316] Renamed the PDB files to PacketNT4.pdb (to fix a problem when debugging with multiple copies of packet.dll loaded into memory). --- packetNtx/Dll/Project/PacketNT4.vcproj | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/packetNtx/Dll/Project/PacketNT4.vcproj b/packetNtx/Dll/Project/PacketNT4.vcproj index fb6b2f34..fb626ff6 100644 --- a/packetNtx/Dll/Project/PacketNT4.vcproj +++ b/packetNtx/Dll/Project/PacketNT4.vcproj @@ -46,7 +46,7 @@ SuppressStartupBanner="TRUE" ModuleDefinitionFile="../../../../winpcap\packetntx\dll\packet.def" GenerateDebugInformation="TRUE" - ProgramDatabaseFile="$(OutDir)/Packet.pdb" + ProgramDatabaseFile="$(OutDir)/PacketNT4.pdb" SubSystem="2" OptimizeReferences="2" ImportLibrary="$(OutDir)/Packet.lib" @@ -112,7 +112,7 @@ SuppressStartupBanner="TRUE" ModuleDefinitionFile="../../../../winpcap\packetntx\dll\packet.def" GenerateDebugInformation="TRUE" - ProgramDatabaseFile="$(OutDir)/Packet.pdb" + ProgramDatabaseFile="$(OutDir)/PacketNT4.pdb" SubSystem="2" OptimizeReferences="0" ImportLibrary="$(OutDir)/Packet.lib" @@ -181,7 +181,7 @@ SuppressStartupBanner="TRUE" ModuleDefinitionFile="../../../../winpcap\packetntx\dll\packet.def" GenerateDebugInformation="TRUE" - ProgramDatabaseFile="$(OutDir)/Packet.pdb" + ProgramDatabaseFile="$(OutDir)/PacketNT4.pdb" SubSystem="2" OptimizeReferences="2" ImportLibrary="$(OutDir)/Packet.lib" @@ -202,9 +202,10 @@ mkdir ..\..\..\OEM\WinPcapOem\Binaries_SIGNED >NUL 2>NUL copy .\Packet_Release_NT4\packet.dll ..\..\..\OEM\WinPcapOem\Binaries_SIGNED\Packetnt.dll >NUL Echo Copying the drivers -copy ..\..\Driver\bin\2k\i386\npf.sys ..\..\..\OEM\WinPcapOem\Binaries_SIGNED\npf2k.sys -copy ..\..\Driver\bin\NT4\i386\free\npf.sys ..\..\..\OEM\WinPcapOem\Binaries_SIGNED\npfnt.sys -copy ..\..\Driver\bin\xp\AMD64\npf.sys ..\..\..\OEM\WinPcapOem\Binaries_SIGNED\npfx64.sys "/> +copy ..\..\Driver\bin\2k\i386\npf.sys ..\..\..\OEM\WinPcapOem\Binaries_SIGNED\npf2k.sys +copy ..\..\Driver\bin\NT4\i386\free\npf.sys ..\..\..\OEM\WinPcapOem\Binaries_SIGNED\npfnt.sys +copy ..\..\Driver\bin\xp\AMD64\npf.sys ..\..\..\OEM\WinPcapOem\Binaries_SIGNED\npfx64.sys +"/> Date: Tue, 30 Oct 2007 16:35:54 +0000 Subject: [PATCH 229/316] Renamed the PDB files to PacketVista.pdb (to fix a problem when debugging with multiple copies of packet.dll loaded into memory). --- packetNtx/Dll/Project/PacketVista.vcproj | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/packetNtx/Dll/Project/PacketVista.vcproj b/packetNtx/Dll/Project/PacketVista.vcproj index 30108aee..e16941eb 100644 --- a/packetNtx/Dll/Project/PacketVista.vcproj +++ b/packetNtx/Dll/Project/PacketVista.vcproj @@ -46,7 +46,7 @@ SuppressStartupBanner="TRUE" ModuleDefinitionFile="../../../../winpcap\packetntx\dll\packet.def" GenerateDebugInformation="TRUE" - ProgramDatabaseFile="$(OutDir)/Packet.pdb" + ProgramDatabaseFile="$(OutDir)/PacketVista.pdb" SubSystem="2" OptimizeReferences="2" ImportLibrary="$(OutDir)/Packet.lib" @@ -112,7 +112,7 @@ SuppressStartupBanner="TRUE" ModuleDefinitionFile="../../../../winpcap\packetntx\dll\packet.def" GenerateDebugInformation="TRUE" - ProgramDatabaseFile="$(OutDir)/Packet.pdb" + ProgramDatabaseFile="$(OutDir)/PacketVista.pdb" SubSystem="2" OptimizeReferences="0" ImportLibrary="$(OutDir)/Packet.lib" @@ -181,7 +181,7 @@ SuppressStartupBanner="TRUE" ModuleDefinitionFile="../../../../winpcap\packetntx\dll\packet.def" GenerateDebugInformation="TRUE" - ProgramDatabaseFile="$(OutDir)/Packet.pdb" + ProgramDatabaseFile="$(OutDir)/PacketVista.pdb" SubSystem="2" OptimizeReferences="2" ImportLibrary="$(OutDir)/Packet.lib" @@ -202,9 +202,10 @@ mkdir ..\..\..\OEM\WinPcapOem\Binaries_SIGNED >NUL 2>NUL copy .\Packet_Release_Vista\packet.dll ..\..\..\OEM\WinPcapOem\Binaries_SIGNED\PacketVista.dll >NUL Echo Copying the drivers -copy ..\..\Driver\bin\2k\i386\npf.sys ..\..\..\OEM\WinPcapOem\Binaries_SIGNED\npf2k.sys -copy ..\..\Driver\bin\NT4\i386\free\npf.sys ..\..\..\OEM\WinPcapOem\Binaries_SIGNED\npfnt.sys -copy ..\..\Driver\bin\xp\AMD64\npf.sys ..\..\..\OEM\WinPcapOem\Binaries_SIGNED\npfx64.sys "/> +copy ..\..\Driver\bin\2k\i386\npf.sys ..\..\..\OEM\WinPcapOem\Binaries_SIGNED\npf2k.sys +copy ..\..\Driver\bin\NT4\i386\free\npf.sys ..\..\..\OEM\WinPcapOem\Binaries_SIGNED\npfnt.sys +copy ..\..\Driver\bin\xp\AMD64\npf.sys ..\..\..\OEM\WinPcapOem\Binaries_SIGNED\npfx64.sys +"/> Date: Tue, 30 Oct 2007 16:37:02 +0000 Subject: [PATCH 230/316] Enabled the generation of PDB files for all the builds. --- OEM/WinpcapOem/WinpcapOem.vcproj | 11 ++++++++--- wpcap/PRJ/wpcap.vcproj | 2 ++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/OEM/WinpcapOem/WinpcapOem.vcproj b/OEM/WinpcapOem/WinpcapOem.vcproj index 49288467..f3624a14 100644 --- a/OEM/WinpcapOem/WinpcapOem.vcproj +++ b/OEM/WinpcapOem/WinpcapOem.vcproj @@ -46,6 +46,7 @@ SuppressStartupBanner="TRUE" AdditionalLibraryDirectories="..\..\WinpcapOem\Release\" ModuleDefinitionFile=".\WinpcapOem.def" + GenerateDebugInformation="TRUE" ProgramDatabaseFile=".\Release/Packet.pdb" ImportLibrary=".\Release/Packet.lib" TargetMachine="1"/> @@ -253,6 +254,7 @@ SuppressStartupBanner="TRUE" AdditionalLibraryDirectories="..\..\WinpcapOem\Release\" ModuleDefinitionFile=".\WinpcapOem.def" + GenerateDebugInformation="TRUE" ProgramDatabaseFile=".\Release_TNT/Packet.pdb" ImportLibrary=".\Release_TNT/Packet.lib" TargetMachine="1"/> @@ -321,6 +323,7 @@ SuppressStartupBanner="TRUE" AdditionalLibraryDirectories="..\..\WinpcapOem\Release\" ModuleDefinitionFile=".\WinpcapOem.def" + GenerateDebugInformation="TRUE" ProgramDatabaseFile=".\Release_SIGNED/Packet.pdb" ImportLibrary=".\Release_SIGNED/Packet.lib" TargetMachine="1"/> @@ -412,6 +415,7 @@ echo **************************************************************** SuppressStartupBanner="TRUE" AdditionalLibraryDirectories="..\..\WinpcapOem\Release\" ModuleDefinitionFile=".\WinpcapOem.def" + GenerateDebugInformation="TRUE" ProgramDatabaseFile=".\Release_TNT_SIGNED/Packet.pdb" ImportLibrary=".\Release_TNT_SIGNED/Packet.lib" TargetMachine="1"/> @@ -447,7 +451,8 @@ echo * You should have signed the following binaries * echo * * echo * .\binaries_SIGNED\*.* * echo * * -echo ****************************************************************"/> +echo **************************************************************** +"/> RelativePath="binaries\npfnt.sys"> + RelativePath="Packet2k.dll"> + RelativePath="binaries\Packet2k.dll"> diff --git a/wpcap/PRJ/wpcap.vcproj b/wpcap/PRJ/wpcap.vcproj index c9152648..2f1d49d5 100644 --- a/wpcap/PRJ/wpcap.vcproj +++ b/wpcap/PRJ/wpcap.vcproj @@ -47,6 +47,7 @@ SuppressStartupBanner="TRUE" IgnoreDefaultLibraryNames="libcmtd.lib" ModuleDefinitionFile=".\wpcap.def" + GenerateDebugInformation="TRUE" ProgramDatabaseFile=".\Release_REMOTE_TNT/wpcap.pdb" ImportLibrary=".\Release_REMOTE_TNT/wpcap.lib" TargetMachine="1"/> @@ -251,6 +252,7 @@ SuppressStartupBanner="TRUE" IgnoreDefaultLibraryNames="libcmtd.lib" ModuleDefinitionFile=".\wpcap.def" + GenerateDebugInformation="TRUE" ProgramDatabaseFile=".\Release_REMOTE/wpcap.pdb" ImportLibrary=".\Release_REMOTE/wpcap.lib" TargetMachine="1"/> From 7bc9d2a275db1d05de912ff6c66c36051fd8f9d9 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Tue, 30 Oct 2007 16:37:36 +0000 Subject: [PATCH 231/316] Fixed a comment in the file. --- wpcap/pcap_oem.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wpcap/pcap_oem.c b/wpcap/pcap_oem.c index 61fea7a3..e48e0348 100644 --- a/wpcap/pcap_oem.c +++ b/wpcap/pcap_oem.c @@ -1,7 +1,7 @@ #include /*! - \name OEM-specific Functions + \name Functions specific to WinPcap Professional */ //\{ From af15f8db0b0bcad93d0231afd4e71e2e6f9e4094 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Tue, 30 Oct 2007 18:28:28 +0000 Subject: [PATCH 232/316] Enabled the generation of proper symbols in the release build. --- OEM/WinpcapOem/WinpcapOem.vcproj | 8 ++++++-- wpcap/PRJ/wpcap.vcproj | 2 ++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/OEM/WinpcapOem/WinpcapOem.vcproj b/OEM/WinpcapOem/WinpcapOem.vcproj index f3624a14..510db2df 100644 --- a/OEM/WinpcapOem/WinpcapOem.vcproj +++ b/OEM/WinpcapOem/WinpcapOem.vcproj @@ -35,6 +35,7 @@ ProgramDataBaseFileName=".\Release/" WarningLevel="3" SuppressStartupBanner="TRUE" + DebugInformationFormat="3" CompileAs="0"/> @@ -243,6 +244,7 @@ BrowseInformation="1" WarningLevel="3" SuppressStartupBanner="TRUE" + DebugInformationFormat="3" CompileAs="0"/> @@ -312,6 +314,7 @@ ProgramDataBaseFileName=".\Release_SIGNED/" WarningLevel="3" SuppressStartupBanner="TRUE" + DebugInformationFormat="3" CompileAs="0"/> @@ -404,6 +407,7 @@ echo **************************************************************** BrowseInformation="1" WarningLevel="3" SuppressStartupBanner="TRUE" + DebugInformationFormat="3" CompileAs="0"/> @@ -841,10 +845,10 @@ echo **************************************************************** RelativePath="binaries\npfnt.sys"> + RelativePath="binaries\Packet2k.dll"> + RelativePath="Packet2k.dll"> diff --git a/wpcap/PRJ/wpcap.vcproj b/wpcap/PRJ/wpcap.vcproj index 2f1d49d5..0b1f2572 100644 --- a/wpcap/PRJ/wpcap.vcproj +++ b/wpcap/PRJ/wpcap.vcproj @@ -35,6 +35,7 @@ ProgramDataBaseFileName=".\Release_REMOTE_TNT/" WarningLevel="3" SuppressStartupBanner="TRUE" + DebugInformationFormat="3" CompileAs="0"/> @@ -240,6 +241,7 @@ ProgramDataBaseFileName=".\Release_REMOTE/" WarningLevel="3" SuppressStartupBanner="TRUE" + DebugInformationFormat="3" CompileAs="0"/> From 9ba8ddae602a0d6a2ca829fd258cd507b3db265c Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 31 Oct 2007 17:33:33 +0000 Subject: [PATCH 233/316] Added the /release linker option to generate the embed the checksum in the binaries. --- OEM/WinpcapOem/WinpcapOem.vcproj | 8 ++++++-- packetNtx/Dll/Project/PacketAndWan2003.vcproj | 2 ++ packetNtx/Dll/Project/PacketNT4.vcproj | 2 ++ packetNtx/Dll/Project/PacketVista.vcproj | 2 ++ 4 files changed, 12 insertions(+), 2 deletions(-) diff --git a/OEM/WinpcapOem/WinpcapOem.vcproj b/OEM/WinpcapOem/WinpcapOem.vcproj index 510db2df..c7292ecc 100644 --- a/OEM/WinpcapOem/WinpcapOem.vcproj +++ b/OEM/WinpcapOem/WinpcapOem.vcproj @@ -49,6 +49,7 @@ ModuleDefinitionFile=".\WinpcapOem.def" GenerateDebugInformation="TRUE" ProgramDatabaseFile=".\Release/Packet.pdb" + SetChecksum="TRUE" ImportLibrary=".\Release/Packet.lib" TargetMachine="1"/> + RelativePath="Packet2k.dll"> + RelativePath="binaries\Packet2k.dll"> diff --git a/packetNtx/Dll/Project/PacketAndWan2003.vcproj b/packetNtx/Dll/Project/PacketAndWan2003.vcproj index 4d396001..af593587 100644 --- a/packetNtx/Dll/Project/PacketAndWan2003.vcproj +++ b/packetNtx/Dll/Project/PacketAndWan2003.vcproj @@ -117,6 +117,7 @@ ProgramDatabaseFile="$(OutDir)/Packet2k.pdb" SubSystem="2" OptimizeReferences="2" + SetChecksum="TRUE" ImportLibrary="$(OutDir)/Packet.lib" TargetMachine="1"/> Date: Fri, 2 Nov 2007 16:29:16 +0000 Subject: [PATCH 234/316] Bumped version to 4.1.0.1036 (iDefense prebuild version). --- version.h | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/version.h b/version.h index 26b66203..c29ee4b5 100644 --- a/version.h +++ b/version.h @@ -14,18 +14,19 @@ #define WINPCAPOEM_MAJOR 4 #define WINPCAPOEM_MINOR 0 -#define WINPCAPOEM_REV 1 +#define WINPCAPOEM_REV 2 #define WINPCAPOEM_BUILD 901 -#define WINPCAPOEM_VER_STRING "4.0.1.901.tnt" +#define WINPCAPOEM_VER_STRING "4.0.2.901.Pro" #define WINPCAPOEM_COMPANY_NAME "CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_NAME "Packet.dll Wrapper" -#define WINPCAPOEM_VERSION_STRING "4.0.1.901.tnt" +#define WINPCAPOEM_VERSION_STRING "4.0.2.901.Pro" #define WINPCAPOEM_PRODUCT_NAME "WinPcap Professional" #define WINPCAPOEM_COPYRIGHT_STRING "Copyright © 2005-2007 CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_FILENAME "Packet.dll (wrapper)" -#define WINPCAPOEM_BUILD_DESCRIPTION "" +#define WINPCAPOEM_BUILD_DESCRIPTION "TEST_BUILD 200711011821" #define WINPCAPOEM_PRIVATE_BUILD "" #define WINPCAPOEM_LIBPCAP_VERSION "0.9.5" + From fc3bbd67776b4ffe13ca95e4a359546d971980cb Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Tue, 6 Nov 2007 19:01:21 +0000 Subject: [PATCH 235/316] General cleanup. Disabled support for the TME extensions. --- packetNtx/CompileDriver.bat | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/packetNtx/CompileDriver.bat b/packetNtx/CompileDriver.bat index 33ae1ba8..357cb5b4 100644 --- a/packetNtx/CompileDriver.bat +++ b/packetNtx/CompileDriver.bat @@ -23,8 +23,12 @@ mkdir .\driver\bin\2k 2> nul copy driver\NPF_NT5.RC ..\..\winpcap\packetntx\driver\NPF.RC set TARGETPATH=..\..\..\winpcap_oem\PacketNtx\driver\bin\2k -set NPF_C_DEFINES=-D__NPF_x86__ -DNDIS50 -DWPCAP_OEM -set NPF_TME_JIT_FILES=tme.c count_packets.c tcp_session.c functions.c bucket_lookup.c normal_lookup.c jitter.c win_bpf_filter_init.c +set NPF_C_DEFINES=-DNDIS50 -DWPCAP_OEM +rem ** enable the following line to enable the TME extensions ** +rem set NPF_TME_FILES=tme.c count_packets.c tcp_session.c functions.c bucket_lookup.c normal_lookup.c win_bpf_filter_init.c +rem set NPF_C_DEFINES=%NPF_C_DEFINES% -DHAVE_BUGGY_TME_SUPPORT + +set NPF_JIT_FILES=jitter.c pushd ..\..\winpcap\packetntx\driver @@ -34,7 +38,8 @@ popd set TARGETPATH= set NPF_C_DEFINES= -set NPF_TME_JIT_FILES= +set NPF_TME_FILES= +set NPF_JIT_FILES= goto end @@ -50,12 +55,13 @@ mkdir driver\bin\xp 2> nul copy driver\NPF_NT5_x64.RC ..\..\winpcap\packetntx\driver\NPF.RC set TARGETPATH=..\..\..\winpcap_oem\PacketNtx\driver\bin\xp -set NPF_C_DEFINES=-D__NPF_AMD64__ -DNDIS50 -DWPCAP_OEM +set NPF_C_DEFINES=-DNDIS50 -DWPCAP_OEM rem rem The TME extensions and the JIT is not supported on x64, at the moment rem -set NPF_TME_JIT_FILES= +set NPF_TME_FILES= +set NPF_JIT_FILES= pushd ..\..\winpcap\packetntx\driver @@ -65,7 +71,8 @@ popd set TARGETPATH= set NPF_C_DEFINES= -set NPF_TME_JIT_FILES= +set NPF_TME_FILES= +set NPF_JIT_FILES= goto end @@ -100,8 +107,13 @@ copy driver\NPF_NT4.RC ..\..\winpcap\packetntx\driver\NPF.RC set TARGETPATH=..\..\..\winpcap_oem\PacketNtx\driver\bin\NT4 -set NPF_C_DEFINES=-D__NPF_x86__ -DNDIS30 -D__NPF_NT4__ -DWPCAP_OEM -set NPF_TME_JIT_FILES=tme.c count_packets.c tcp_session.c functions.c bucket_lookup.c normal_lookup.c jitter.c win_bpf_filter_init.c +set NPF_C_DEFINES=-DNDIS30 -D__NPF_NT4__ -DWPCAP_OEM + +rem ** enable the following line to enable the TME extensions ** +rem set NPF_TME_FILES=tme.c count_packets.c tcp_session.c functions.c bucket_lookup.c normal_lookup.c win_bpf_filter_init.c +rem set NPF_C_DEFINES=%NPF_C_DEFINES% -DHAVE_BUGGY_TME_SUPPORT + +set NPF_JIT_FILES=jitter.c if NOT "%NPF_COMPILED%" == "1" ( set Include=%BASEDIR%\src\network\inc;%BASEDIR%\inc;%Include% @@ -116,7 +128,8 @@ popd set TARGETPATH= set NPF_C_DEFINES= -set NPF_TME_JIT_FILES= +set NPF_TME_FILES= +set NPF_JIT_FILES= goto end From 3e851cc574b5af80a23304a7878fb3858330627f Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 7 Nov 2007 22:10:27 +0000 Subject: [PATCH 236/316] Added a note related to a workaround from step 16s of the build procedure. --- release procedures WOEM.txt | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/release procedures WOEM.txt b/release procedures WOEM.txt index 74424093..98b2350b 100644 --- a/release procedures WOEM.txt +++ b/release procedures WOEM.txt @@ -1,4 +1,4 @@ -$Header: /usr/cvsroot/winpcap_oem/release\040procedures\040WOEM.txt,v 1.12 2007/01/22 19:02:47 gianlucav Exp $ +$Header: /usr/cvsroot/winpcap_oem/release\040procedures\040WOEM.txt,v 1.13 2007/01/22 23:41:46 gianlucav Exp $ WINPCAP PRO RELEASE PROCEDURE ============================= @@ -89,8 +89,8 @@ How to compile WinPcap PRO (NOT for the Toolkit) 15. Open a Win 2000 DDK Free build environment. Go into %BUILD_TREE%\winpcap_oem\packetntx. - Execute "compileDriver.bat". Prefast 1.5.2402 should issue 9 warnings - (20061127). + Execute "compileDriver.bat". Prefast 1.5.2402 should issue 8 warnings + (20071107). Close the build environment. NOTE: DO NOT EXECUTE 15. and 16. and 17. at the same time, they overwrite files in the build process that are incompatible between the two builds. @@ -116,6 +116,9 @@ SIGNED BINARIES BUILD Choose the "Release SIGNED STEP1" configuration, and then use Build->Rebuild Solution. No warnings should be generated. + NOTE(GV 20071107): due to a bug in the build procedure, first you need to build with the + "Release" configuration, then Rebuild with the "Release SIGNED STEP1" configuration. + 19s. Sign all the binaries in %BUILD_TREE%\winpcap_oem\OEM\WinPcapOem\Binaries_SIGNED, namely npfnt.sys From e81da362ecddf538b5140adb5033172e9b1daf44 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 7 Nov 2007 22:28:23 +0000 Subject: [PATCH 237/316] Bumped version to 4.0.2.1040 --- dox/prj/winpcap_oem_noc.dox | 2 +- version.h | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/dox/prj/winpcap_oem_noc.dox b/dox/prj/winpcap_oem_noc.dox index 1b9ef477..859a2070 100644 --- a/dox/prj/winpcap_oem_noc.dox +++ b/dox/prj/winpcap_oem_noc.dox @@ -4,7 +4,7 @@ # Project related configuration options #--------------------------------------------------------------------------- PROJECT_NAME = "WinPcap Professional" -PROJECT_NUMBER = 4.0.2.901 +PROJECT_NUMBER = 4.0.2.1040 OUTPUT_DIRECTORY = ./ CREATE_SUBDIRS = NO OUTPUT_LANGUAGE = English diff --git a/version.h b/version.h index c29ee4b5..7e5858d4 100644 --- a/version.h +++ b/version.h @@ -15,18 +15,18 @@ #define WINPCAPOEM_MAJOR 4 #define WINPCAPOEM_MINOR 0 #define WINPCAPOEM_REV 2 -#define WINPCAPOEM_BUILD 901 +#define WINPCAPOEM_BUILD 1040 -#define WINPCAPOEM_VER_STRING "4.0.2.901.Pro" +#define WINPCAPOEM_VER_STRING "4.0.2.1040.Pro" #define WINPCAPOEM_COMPANY_NAME "CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_NAME "Packet.dll Wrapper" -#define WINPCAPOEM_VERSION_STRING "4.0.2.901.Pro" +#define WINPCAPOEM_VERSION_STRING "4.0.2.1040.Pro" #define WINPCAPOEM_PRODUCT_NAME "WinPcap Professional" #define WINPCAPOEM_COPYRIGHT_STRING "Copyright © 2005-2007 CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_FILENAME "Packet.dll (wrapper)" -#define WINPCAPOEM_BUILD_DESCRIPTION "TEST_BUILD 200711011821" +#define WINPCAPOEM_BUILD_DESCRIPTION "" #define WINPCAPOEM_PRIVATE_BUILD "" #define WINPCAPOEM_LIBPCAP_VERSION "0.9.5" From 27a055eb3f9847e3c34421406faa09636b3f47dc Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Thu, 8 Nov 2007 21:05:55 +0000 Subject: [PATCH 238/316] Updated version to 4.0.1.1040 (aka WinPcap Pro 4.0.2 for TNT) --- version.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/version.h b/version.h index 7e5858d4..d1359da6 100644 --- a/version.h +++ b/version.h @@ -14,15 +14,15 @@ #define WINPCAPOEM_MAJOR 4 #define WINPCAPOEM_MINOR 0 -#define WINPCAPOEM_REV 2 +#define WINPCAPOEM_REV 1 #define WINPCAPOEM_BUILD 1040 -#define WINPCAPOEM_VER_STRING "4.0.2.1040.Pro" +#define WINPCAPOEM_VER_STRING "4.0.1.1040.tnt" #define WINPCAPOEM_COMPANY_NAME "CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_NAME "Packet.dll Wrapper" -#define WINPCAPOEM_VERSION_STRING "4.0.2.1040.Pro" +#define WINPCAPOEM_VERSION_STRING "4.0.1.1040.tnt" #define WINPCAPOEM_PRODUCT_NAME "WinPcap Professional" #define WINPCAPOEM_COPYRIGHT_STRING "Copyright © 2005-2007 CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_FILENAME "Packet.dll (wrapper)" From 82354ec562a9d13a65a73a9a1b368de17c8543a1 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Fri, 16 Nov 2007 18:22:33 +0000 Subject: [PATCH 239/316] Wait for up to MAX_DELAY_STOP_SERVICE checking if the service is stopped before deleting the service. Then delete the service only if it's in the stopped state. Otherwise fail the request to delete the service. --- OEM/WinpcapOem/SerivcesInstallers.cpp | 28 ++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/OEM/WinpcapOem/SerivcesInstallers.cpp b/OEM/WinpcapOem/SerivcesInstallers.cpp index f2a9f272..fdbd73ea 100644 --- a/OEM/WinpcapOem/SerivcesInstallers.cpp +++ b/OEM/WinpcapOem/SerivcesInstallers.cpp @@ -472,6 +472,7 @@ HRESULT HrReleaseINetCfg(BOOL fHasWriteLock, INetCfg* pnc) return hr; } +#define MAX_DELAY_STOP_SERVICE 3000 //ms /////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////// @@ -483,7 +484,8 @@ int delete_service(LPCTSTR ServiceName) SC_HANDLE SCM_Handle; SC_HANDLE ServiceHandle; SERVICE_STATUS ServiceStatus; - + ULONG delay; + DWORD ReturnValue; SCM_Handle=OpenSCManager(NULL, /*local machine */ @@ -529,6 +531,27 @@ int delete_service(LPCTSTR ServiceName) else TRACE_MESSAGE("Service %s successfully stopped\n",ServiceName); + // + // We can delete the service only if it's stopped. If the service is not stopped, it will be marked for deletion, + // which is a pain in the butt. Please see the long explanation about this problem in DllMain + // + delay = 0; + while((QueryServiceStatus(ServiceHandle, &ServiceStatus) == TRUE) && (ServiceStatus.dwCurrentState != SERVICE_STOPPED) && delay < MAX_DELAY_STOP_SERVICE) + { + TRACE_MESSAGE("The service status is now %u", ServiceStatus.dwCurrentState); + Sleep(100); + delay += 100; + } + + // + // If by this time the service is not stopped, just fail to delete the service + // + if (ServiceStatus.dwCurrentState != SERVICE_STOPPED) + { + TRACE_MESSAGE("The service cannot be stopped (pending handles?)"); + return -1; + } + if(!DeleteService(ServiceHandle)) { TRACE_MESSAGE("Error deleting service %s: ",ServiceName); @@ -538,7 +561,7 @@ int delete_service(LPCTSTR ServiceName) } else TRACE_MESSAGE("Service %s successfully deleted\n",ServiceName); - + if(!CloseServiceHandle(ServiceHandle)) { TRACE_MESSAGE("Error closing service %s: ",ServiceName); @@ -546,7 +569,6 @@ int delete_service(LPCTSTR ServiceName) ReturnValue=-1; } - if(!CloseServiceHandle(SCM_Handle)) { TRACE_MESSAGE("Error closing Service control Manager\n"); From 8455a789d41c08d8933663425d6b6243041becd1 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Fri, 16 Nov 2007 18:27:02 +0000 Subject: [PATCH 240/316] Added a couple new functions to sweep the open handles to the NPF driver upon DLL unload, before we try to delete the driver service. --- OEM/WinpcapOem/PacketWrapper.cpp | 13 +++ OEM/WinpcapOem/WinPcapOem.cpp | 172 ++++++++++++++++++++++++++++++- OEM/WinpcapOem/WinpcapOem.h | 12 +++ 3 files changed, 196 insertions(+), 1 deletion(-) diff --git a/OEM/WinpcapOem/PacketWrapper.cpp b/OEM/WinpcapOem/PacketWrapper.cpp index d2079bab..968b8951 100644 --- a/OEM/WinpcapOem/PacketWrapper.cpp +++ b/OEM/WinpcapOem/PacketWrapper.cpp @@ -176,6 +176,16 @@ LPADAPTER PacketOpenAdapter(PCHAR AdapterName) returnValue = PacketOpenAdapterH(AdapterName); } + if (returnValue != NULL) + { + if (RegisterPacketHandleForDllUnloadHandlesSweep(returnValue) == FALSE) + { + PacketCloseAdapterH(returnValue); + SetLastError(ERROR_OUTOFMEMORY); + returnValue = FALSE; + } + } + TRACE_EXIT("PacketOpenAdapter"); return returnValue; } @@ -193,7 +203,10 @@ VOID PacketCloseAdapter(LPADAPTER lpAdapter) } else { + DeregisterPacketHandleForDllUnloadHandlesSweep(lpAdapter); + PacketCloseAdapterH(lpAdapter); + } TRACE_EXIT("PacketCloseAdapter"); diff --git a/OEM/WinpcapOem/WinPcapOem.cpp b/OEM/WinpcapOem/WinPcapOem.cpp index df75d381..317edae4 100644 --- a/OEM/WinpcapOem/WinPcapOem.cpp +++ b/OEM/WinpcapOem/WinPcapOem.cpp @@ -22,6 +22,9 @@ BOOL g_IsProcAuthorized = FALSE; CRITICAL_SECTION g_CritSectionProtectingWoemEnterDll; +static VOID InitializePacketHandleForDllUnloadHandlesSweep(); +static VOID SweepPacketHandles(); + //////////////////////////////////////////////////////////////////// // DLL Entry point //////////////////////////////////////////////////////////////////// @@ -33,7 +36,8 @@ BOOL APIENTRY DllMain(HINSTANCE Dllh, DWORD Reason, LPVOID lpReserved) case DLL_PROCESS_ATTACH: g_DllHandle = Dllh; - InitializeCriticalSection(&::g_CritSectionProtectingWoemEnterDll); + InitializeCriticalSection(&g_CritSectionProtectingWoemEnterDll); + InitializePacketHandleForDllUnloadHandlesSweep(); #ifdef TNT_BUILD // @@ -46,6 +50,24 @@ BOOL APIENTRY DllMain(HINSTANCE Dllh, DWORD Reason, LPVOID lpReserved) case DLL_PROCESS_DETACH: + // + // Before trying to tear down any driver, we need to make sure that all the open handles + // to the NPF driver has been closed. The reason for this is quite complex. If there's even + // single open handle to the NPF driver, the driver cannot be unloaded. When you try to stop + // the driver service with the SCM (ControlService), the service will go into the SERVICE_STOP_PENDING + // status until the last handle gets closed. But ControlService returns immediately, way before the service + // has been stopped. + // If after this you call DeleteService, the service is still running and is marked for deletion. When a service + // is marked for deletion, you cannot reinstall it until it gets completely deleted. It's true that when the process + // is killed by the OS, all the open handles are closed (hence the NPF driver is unloaded). But it takes a bit of time + // between when the process is closed (hence the handles are closed) and when the driver is actually unloaded and the service + // deleted. If in the meanwhile someone tries to restart the winpcap-pro based app, the attempt to reinstall the driver + // may fail because the driver is still in the "marked for deletion" status. + // + // What we do here is closing the handles, and then the delete_service function makes sure that the service is stopped before deleting it, + // waiting for a certain amount of time. If by the timeout the service is not stopped, we do not delete the service. + // + SweepPacketHandles(); WoemLeaveDll(); break; @@ -1445,3 +1467,151 @@ BOOL WoemDeleteNameRegistryEntries() } #endif + +CRITICAL_SECTION g_PacketHandleSweepCriticalSection; +typedef struct _HANDLE_ITEM +{ + struct _HANDLE_ITEM *Next; + HANDLE hFile; +} + HANDLE_ITEM, *PHANDLE_ITEM; + +PHANDLE_ITEM g_HandleList; + +// +// Initialize the global list of open handles to the NPF driver +// +// Please see the long note in DllMain for the reason why we need +// this hack. +// +VOID InitializePacketHandleForDllUnloadHandlesSweep() +{ + TRACE_ENTER("InitializePacketHandleForDllUnloadHandlesSweep"); + g_HandleList = NULL; + InitializeCriticalSection(&g_PacketHandleSweepCriticalSection); + TRACE_EXIT("InitializePacketHandleForDllUnloadHandlesSweep"); +} + +// +// Register the open handle to the NPF driver in our global list +// The function returns TRUE if the registration was successful +// (or the ADAPTER instance is not related to an NPF adapter) +// +// Please see the long note in DllMain for the reason why we need +// this hack. +// +BOOL RegisterPacketHandleForDllUnloadHandlesSweep(LPADAPTER pAdapter) +{ + BOOL result = TRUE; + PHANDLE_ITEM pItem; + + TRACE_ENTER("RegisterPacketHandleForDllUnloadHandlesSweep"); + if (pAdapter->Flags == INFO_FLAG_NDIS_ADAPTER && pAdapter->hFile != NULL && pAdapter->hFile != INVALID_HANDLE_VALUE) + { + pItem = (PHANDLE_ITEM)GlobalAlloc(GPTR, sizeof(HANDLE_ITEM)); + if (pItem == NULL) + { + result = FALSE; + } + else + { + pItem->hFile = pAdapter->hFile; + EnterCriticalSection(&g_PacketHandleSweepCriticalSection); + pItem->Next = g_HandleList; + g_HandleList = pItem; + LeaveCriticalSection(&g_PacketHandleSweepCriticalSection); + } + } + + TRACE_EXIT("RegisterPacketHandleForDllUnloadHandlesSweep"); + return result; +} + +// +// Deregister the open handle to the NPF driver from our global list +// Please note that this function does NOT close the handle, it +// just removes it from the global list +// +// Please see the long note in DllMain for the reason why we need +// this hack. +// +VOID DeregisterPacketHandleForDllUnloadHandlesSweep(LPADAPTER pAdapter) +{ + PHANDLE_ITEM pCursor, pPrev; + TRACE_ENTER("DeregisterPacketHandleForDllUnloadHandlesSweep"); + + if (pAdapter->Flags == INFO_FLAG_NDIS_ADAPTER && pAdapter->hFile != NULL && pAdapter->hFile != INVALID_HANDLE_VALUE) + { + pPrev = NULL; + + EnterCriticalSection(&g_PacketHandleSweepCriticalSection); + + pCursor = g_HandleList; + while(pCursor != NULL) + { + if (pCursor->hFile == pAdapter->hFile) + { + if (pPrev != NULL) + { + pPrev->Next = pCursor->Next; + } + else + { + g_HandleList = pCursor->Next; + } + + GlobalFree(pCursor); + break; + } + + pPrev = pCursor; + pCursor = pCursor->Next; + } + LeaveCriticalSection(&g_PacketHandleSweepCriticalSection); + } + + TRACE_EXIT("DeregisterPacketHandleForDllUnloadHandlesSweep"); + +} + +// +// Close all the open handles to the NPF driver that have been registered +// with RegisterPacketHandleForDllUnloadHandlesSweep +// +// Please see the long note in DllMain for the reason why we need +// this hack. +// +VOID SweepPacketHandles() +{ + PHANDLE_ITEM pCursor, pNext; + + TRACE_ENTER("SweepPacketHandles"); + + // + // NOTE: there is a possibility of a deadlock here. + // if the application dies when we were calling a (De)RegisterHandle + // and the criticalsection was held, we would deadlock here. + // + // What we do here is not locking at all. + // In any case, g_HandleList always contains valid elements (the Deregister removes the item + // after having updated the list) + // + // + //EnterCriticalSection(&g_PacketHandleSweepCriticalSection); + + pCursor = g_HandleList; + + while(pCursor != NULL) + { + pNext = pCursor->Next; + + (VOID)CloseHandle(pCursor->hFile); + GlobalFree(pCursor); + pCursor = pNext; + } + + //LeaveCriticalSection(&g_PacketHandleSweepCriticalSection); + + TRACE_EXIT("SweepPacketHandles"); + +} diff --git a/OEM/WinpcapOem/WinpcapOem.h b/OEM/WinpcapOem/WinpcapOem.h index 73ed4003..376c7dc2 100644 --- a/OEM/WinpcapOem/WinpcapOem.h +++ b/OEM/WinpcapOem/WinpcapOem.h @@ -74,4 +74,16 @@ BOOL WoemDeleteDriverBinary(char* FileName, BOOL bDisableFsRedirector); //BOOL WoemDeleteNameRegistryEntries(); BOOL WoemCreateBinaryNames(); +//////////////////////////////////////////////////////////////////// +// Functions to register the open handles to NPF in a global list. +// This hack is needed to close all the handles before unloading the +// driver on DllUnload +//////////////////////////////////////////////////////////////////// +typedef struct _ADAPTER *LPADAPTER; + +BOOL RegisterPacketHandleForDllUnloadHandlesSweep(LPADAPTER pAdapter); +VOID DeregisterPacketHandleForDllUnloadHandlesSweep(LPADAPTER pAdapter); + + + #endif //__WINPCAP_OEM_H_E4C69242_4757_4139_A7E4_CA06F37A5B73 From 85d88dc91e91c66a199a9f1aa85d8a3a85c7263a Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Fri, 16 Nov 2007 18:27:40 +0000 Subject: [PATCH 241/316] The usual #ifdef/#define at the beginning of the include file for completely bogus. --- OEM/WinpcapOem/WoemDebug.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OEM/WinpcapOem/WoemDebug.h b/OEM/WinpcapOem/WoemDebug.h index 99bdaa4c..78191a54 100644 --- a/OEM/WinpcapOem/WoemDebug.h +++ b/OEM/WinpcapOem/WoemDebug.h @@ -6,7 +6,7 @@ */ #ifndef __WOEM_DEBUG_H_ -#define __WOEM_TRACE_H_ +#define __WOEM_DEBUG_H_ #include #include From 4905953a9077add96c8994572df0d9af4ecac895 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Mon, 28 Jan 2008 18:11:30 +0000 Subject: [PATCH 242/316] Bumped version to 4.0.2.1123 (WinPcap Pro 4.0.3) --- dox/prj/winpcap_oem_noc.dox | 2 +- version.h | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/dox/prj/winpcap_oem_noc.dox b/dox/prj/winpcap_oem_noc.dox index 859a2070..44231ebe 100644 --- a/dox/prj/winpcap_oem_noc.dox +++ b/dox/prj/winpcap_oem_noc.dox @@ -4,7 +4,7 @@ # Project related configuration options #--------------------------------------------------------------------------- PROJECT_NAME = "WinPcap Professional" -PROJECT_NUMBER = 4.0.2.1040 +PROJECT_NUMBER = 4.0.2.1123 OUTPUT_DIRECTORY = ./ CREATE_SUBDIRS = NO OUTPUT_LANGUAGE = English diff --git a/version.h b/version.h index d1359da6..44f40435 100644 --- a/version.h +++ b/version.h @@ -14,17 +14,17 @@ #define WINPCAPOEM_MAJOR 4 #define WINPCAPOEM_MINOR 0 -#define WINPCAPOEM_REV 1 -#define WINPCAPOEM_BUILD 1040 +#define WINPCAPOEM_REV 2 +#define WINPCAPOEM_BUILD 1123 -#define WINPCAPOEM_VER_STRING "4.0.1.1040.tnt" +#define WINPCAPOEM_VER_STRING "4.0.2.1123.Pro" #define WINPCAPOEM_COMPANY_NAME "CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_NAME "Packet.dll Wrapper" -#define WINPCAPOEM_VERSION_STRING "4.0.1.1040.tnt" +#define WINPCAPOEM_VERSION_STRING "4.0.2.1123.Pro" #define WINPCAPOEM_PRODUCT_NAME "WinPcap Professional" -#define WINPCAPOEM_COPYRIGHT_STRING "Copyright © 2005-2007 CACE Technologies" +#define WINPCAPOEM_COPYRIGHT_STRING "Copyright © 2005-2008 CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_FILENAME "Packet.dll (wrapper)" #define WINPCAPOEM_BUILD_DESCRIPTION "" #define WINPCAPOEM_PRIVATE_BUILD "" From f3fbc229f24c0d847f0f8c7c08d8eb57d52fbf13 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Tue, 8 Apr 2008 16:56:25 +0000 Subject: [PATCH 243/316] Fix for a problem reported by IBM on win2k8 x64. Upon OEM startup, if the driver is already running (e.g. because the previous run of an OEM based application was killed without proper tear down), do not try to remove it and reinstall it. Just leave it there (we know it's the proper version of the driver). --- OEM/WinpcapOem/WinPcapOem.cpp | 184 ++++++++++++++++------------------ 1 file changed, 84 insertions(+), 100 deletions(-) diff --git a/OEM/WinpcapOem/WinPcapOem.cpp b/OEM/WinpcapOem/WinPcapOem.cpp index 317edae4..3d9c9ee9 100644 --- a/OEM/WinpcapOem/WinPcapOem.cpp +++ b/OEM/WinpcapOem/WinPcapOem.cpp @@ -161,6 +161,7 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) DWORD keyType; DWORD bufSize; HRESULT hr; + BOOL npfDriverIsAlreadyRunning = FALSE; #ifdef TNT_BUILD DWORD Result; #endif @@ -509,30 +510,10 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) if(check_if_service_is_running(NPF_DRIVER_NAME) == 0) { // - // If we are here and the service is running, it's almost surely the result - // of some mess. We try to cleanup. + // if the service is running, just skip restarting it // - if (delete_service(NPF_DRIVER_NAME) == -1) - { - WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Error deleting an existing copy of the NPF service"); - - ReleaseMutex(g_hGlobalMutex); - - if(g_hGlobalMutex!=0) - { - CloseHandle(g_hGlobalMutex); - g_hGlobalMutex = NULL; - - } - if (g_hGlobalSemaphore!=0) - { - CloseHandle(g_hGlobalSemaphore); - g_hGlobalSemaphore = NULL; - } - - TRACE_EXIT("WoemEnterDllInternal"); - return FALSE; - } + TRACE_MESSAGE("The NPF driver (service " NPF_DRIVER_NAME ") is still running, do not reinstall it"); + npfDriverIsAlreadyRunning = TRUE; } // @@ -569,7 +550,7 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) return FALSE; } - // + // // Extract the driver to disk // if(!WoemSaveResourceToDisk(g_DllHandle, IDP_DRINT, g_DriverFullPath, FALSE)) @@ -754,110 +735,113 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) } - // - // Create the driver service - // - if(create_driver_service(NPF_DRIVER_NAME, - NPF_SERVICE_DESC, - NPF_DRIVER_COMPLETE_PATH) == -1) + if (!npfDriverIsAlreadyRunning) { - WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("unable to create the packet driver service"); - _unlink(g_DllFullPath); - _unlink(g_DriverFullPath); - - ReleaseMutex(g_hGlobalMutex); - - if(g_hGlobalMutex!=0) - { - CloseHandle(g_hGlobalMutex); - g_hGlobalMutex = NULL; - - } - if (g_hGlobalSemaphore!=0) + // + // Create the driver service + // + if(create_driver_service(NPF_DRIVER_NAME, + NPF_SERVICE_DESC, + NPF_DRIVER_COMPLETE_PATH) == -1) { - CloseHandle(g_hGlobalSemaphore); - g_hGlobalSemaphore = NULL; - } - - TRACE_EXIT("WoemEnterDllInternal"); - return FALSE; - } + WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("unable to create the packet driver service"); - // - // Load the driver - // - if(start_service(NPF_DRIVER_NAME) == -1) - { - WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("unable to start the packet driver service"); + _unlink(g_DllFullPath); + _unlink(g_DriverFullPath); - delete_service(NPF_DRIVER_NAME); - _unlink(g_DllFullPath); - _unlink(g_DriverFullPath); - - ReleaseMutex(g_hGlobalMutex); - - if(g_hGlobalMutex!=0) - { - CloseHandle(g_hGlobalMutex); - g_hGlobalMutex = NULL; - - } - if (g_hGlobalSemaphore!=0) - { - CloseHandle(g_hGlobalSemaphore); - g_hGlobalSemaphore = NULL; - } - - TRACE_EXIT("WoemEnterDllInternal"); - return FALSE; - } + ReleaseMutex(g_hGlobalMutex); - // - // Wait until the service is running - // - i = 0; - while(TRUE) - { - if(check_if_service_is_running(NPF_DRIVER_NAME) == 0) - { - break; + if(g_hGlobalMutex!=0) + { + CloseHandle(g_hGlobalMutex); + g_hGlobalMutex = NULL; + + } + if (g_hGlobalSemaphore!=0) + { + CloseHandle(g_hGlobalSemaphore); + g_hGlobalSemaphore = NULL; + } + + TRACE_EXIT("WoemEnterDllInternal"); + return FALSE; } - - i++; - if(i == 300) + // + // Load the driver + // + if(start_service(NPF_DRIVER_NAME) == -1) { - WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("timeout while starting the packet driver"); - + WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("unable to start the packet driver service"); + delete_service(NPF_DRIVER_NAME); _unlink(g_DllFullPath); - - WoemDeleteDriverBinary(g_DriverFullPath, is64BitOs); - _unlink(g_DriverFullPath); - + ReleaseMutex(g_hGlobalMutex); if(g_hGlobalMutex!=0) { CloseHandle(g_hGlobalMutex); g_hGlobalMutex = NULL; - + } if (g_hGlobalSemaphore!=0) { CloseHandle(g_hGlobalSemaphore); g_hGlobalSemaphore = NULL; } - + TRACE_EXIT("WoemEnterDllInternal"); return FALSE; - } - Sleep(100); + // + // Wait until the service is running + // + i = 0; + while(TRUE) + { + if(check_if_service_is_running(NPF_DRIVER_NAME) == 0) + { + break; + } + + i++; + if(i == 300) + { + WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("timeout while starting the packet driver"); + + delete_service(NPF_DRIVER_NAME); + _unlink(g_DllFullPath); + + WoemDeleteDriverBinary(g_DriverFullPath, is64BitOs); + + _unlink(g_DriverFullPath); + + ReleaseMutex(g_hGlobalMutex); + + if(g_hGlobalMutex!=0) + { + CloseHandle(g_hGlobalMutex); + g_hGlobalMutex = NULL; + + } + if (g_hGlobalSemaphore!=0) + { + CloseHandle(g_hGlobalSemaphore); + g_hGlobalSemaphore = NULL; + } + + TRACE_EXIT("WoemEnterDllInternal"); + return FALSE; + + } + + Sleep(100); + } + } - // // We've loaded the driver, we can delete its binary // From 75956ae3d25de2f950620f59456ad68ffad1db27 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Tue, 8 Apr 2008 17:57:55 +0000 Subject: [PATCH 244/316] Bumped version to 4.0.2.1194 (WinPcap Pro 4.0.4) --- dox/prj/winpcap_oem_noc.dox | 2 +- version.h | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dox/prj/winpcap_oem_noc.dox b/dox/prj/winpcap_oem_noc.dox index 44231ebe..6dd55a3c 100644 --- a/dox/prj/winpcap_oem_noc.dox +++ b/dox/prj/winpcap_oem_noc.dox @@ -4,7 +4,7 @@ # Project related configuration options #--------------------------------------------------------------------------- PROJECT_NAME = "WinPcap Professional" -PROJECT_NUMBER = 4.0.2.1123 +PROJECT_NUMBER = 4.0.2.1194 OUTPUT_DIRECTORY = ./ CREATE_SUBDIRS = NO OUTPUT_LANGUAGE = English diff --git a/version.h b/version.h index 44f40435..6e943de0 100644 --- a/version.h +++ b/version.h @@ -15,14 +15,14 @@ #define WINPCAPOEM_MAJOR 4 #define WINPCAPOEM_MINOR 0 #define WINPCAPOEM_REV 2 -#define WINPCAPOEM_BUILD 1123 +#define WINPCAPOEM_BUILD 1194 -#define WINPCAPOEM_VER_STRING "4.0.2.1123.Pro" +#define WINPCAPOEM_VER_STRING "4.0.2.1194.Pro" #define WINPCAPOEM_COMPANY_NAME "CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_NAME "Packet.dll Wrapper" -#define WINPCAPOEM_VERSION_STRING "4.0.2.1123.Pro" +#define WINPCAPOEM_VERSION_STRING "4.0.2.1194.Pro" #define WINPCAPOEM_PRODUCT_NAME "WinPcap Professional" #define WINPCAPOEM_COPYRIGHT_STRING "Copyright © 2005-2008 CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_FILENAME "Packet.dll (wrapper)" From 62a57c97d10b7f9e037aef4c265af44de1a96d30 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Tue, 3 Jun 2008 22:19:54 +0000 Subject: [PATCH 245/316] Added PacketStartOemEx to allow passing some flags to the function. In particular, a new flag has been defined in order to skip loading the NetMon enabled version of packet.dll. Removed some old code. --- OEM/WinpcapOem/PacketWrapper.cpp | 28 ++- OEM/WinpcapOem/WinPcapOem.cpp | 353 ++++++++++++++++++------------- OEM/WinpcapOem/WinpcapOem.def | 1 + OEM/WinpcapOem/WinpcapOem.h | 2 +- wpcap/pcap_oem.c | 2 +- 5 files changed, 233 insertions(+), 153 deletions(-) diff --git a/OEM/WinpcapOem/PacketWrapper.cpp b/OEM/WinpcapOem/PacketWrapper.cpp index 968b8951..e1bf42e5 100644 --- a/OEM/WinpcapOem/PacketWrapper.cpp +++ b/OEM/WinpcapOem/PacketWrapper.cpp @@ -812,17 +812,17 @@ PAirpcapHandle PacketGetAirPcapHandle(LPADAPTER AdapterObject) //--------------------------------------------------------------------------- // This public function enables winpcap oem -BOOLEAN PacketStartOem(PCHAR errorString, UINT errorStringLength) +BOOLEAN PacketStartOemEx(PCHAR errorString, UINT errorStringLength, ULONG flags) { CHAR internalErrorString[PACKET_ERRSTR_SIZE]; - TRACE_ENTER("PacketStartOem"); + TRACE_ENTER("PacketStartOemEx"); - if (WoemEnterDll(::g_DllHandle, internalErrorString) == TRUE) + if (WoemEnterDll(g_DllHandle, internalErrorString, flags) == TRUE) { g_OemActive = TRUE; - TRACE_EXIT("PacketStartOem"); + TRACE_EXIT("PacketStartOemEx"); return TRUE; } else @@ -831,11 +831,24 @@ BOOLEAN PacketStartOem(PCHAR errorString, UINT errorStringLength) strncpy(errorString, internalErrorString, errorStringLength - 1); - TRACE_EXIT("PacketStartOem"); + TRACE_EXIT("PacketStartOemEx"); return FALSE; } } +BOOLEAN PacketStartOem(PCHAR errorString, UINT errorStringLength) +{ + BOOLEAN result; + TRACE_ENTER("PacketStartOem"); + + result = PacketStartOemEx(errorString, errorStringLength, 0); + + TRACE_EXIT("PacketStartOem"); + + return result; +} + + //--------------------------------------------------------------------------- // FUNCTIONS //--------------------------------------------------------------------------- @@ -865,7 +878,10 @@ __inline BOOL WoemInitialize(HINSTANCE hDllHandle) // NOTE: this function changes the value of g_StillInit!! // we cannot do it here because we need to change this value // while holding the global lock! - returnValue = WoemEnterDll(hDllHandle, errorString); + // + // Also, we reach this point if we are using WinPcap Professional from within TNT. + // Within TNT we initialize OEM without any flags + returnValue = WoemEnterDll(hDllHandle, errorString, 0); TRACE_EXIT("WoemInitialize"); diff --git a/OEM/WinpcapOem/WinPcapOem.cpp b/OEM/WinpcapOem/WinPcapOem.cpp index 3d9c9ee9..d62f220e 100644 --- a/OEM/WinpcapOem/WinPcapOem.cpp +++ b/OEM/WinpcapOem/WinPcapOem.cpp @@ -13,12 +13,15 @@ HANDLE g_hGlobalMutex = NULL; HANDLE g_hGlobalSemaphore = NULL; char g_GlobalSemaphoreName[MAX_OBJNAME_LEN]; -char g_DllFullPath[MAX_PATH + 16]; +char g_DllFullPathNm[MAX_PATH + 16]; +char g_DllFullPathNoNm[MAX_PATH + 16]; +char *g_DllFullPath; char g_DriverFullPath[MAX_PATH + 16]; HINSTANCE g_DllHandle = NULL; char g_LastWoemError[PACKET_ERRSTR_SIZE]; volatile BOOL g_InitError = FALSE; BOOL g_IsProcAuthorized = FALSE; +BOOL g_DisableNetMon = FALSE; CRITICAL_SECTION g_CritSectionProtectingWoemEnterDll; @@ -111,21 +114,58 @@ PCHAR getObjectName(PCHAR systemObjectName, UINT strlen) static BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString); +#define WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR(_msg) do{strncpy(WoemErrorString, _msg, PACKET_ERRSTR_SIZE - 1); TRACE_MESSAGE(_msg);}while(0) -BOOL WoemEnterDll(HINSTANCE DllHandle, char *WoemErrorString) +BOOL WoemEnterDll(HINSTANCE DllHandle, char *WoemErrorString, ULONG flags) { BOOL returnValue = TRUE; TRACE_ENTER("WoemEnterDll"); - EnterCriticalSection(&::g_CritSectionProtectingWoemEnterDll); - - if (g_StillToInit) + if ((flags & (~PACKET_START_OEM_NO_NETMON)) != 0) { - returnValue = WoemEnterDllInternal(DllHandle, WoemErrorString); - if (returnValue == TRUE) + WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Unsupported flags passed as parameter."); + returnValue = FALSE; + } + else + { + EnterCriticalSection(&g_CritSectionProtectingWoemEnterDll); + + if (g_StillToInit) { - g_StillToInit = FALSE; + if (flags & PACKET_START_OEM_NO_NETMON) + { + g_DisableNetMon = TRUE; + } + else + { + g_DisableNetMon = FALSE; + } + + returnValue = WoemEnterDllInternal(DllHandle, WoemErrorString); + if (returnValue == TRUE) + { + g_StillToInit = FALSE; + } + } + else + { + if (flags & PACKET_START_OEM_NO_NETMON) + { + if (g_DisableNetMon == FALSE) + { + WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Already started WinPcap Professional with support for NetMon. Cannot restart it without NetMon support."); + returnValue = FALSE; + } + } + else + { + if (g_DisableNetMon == TRUE) + { + WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Already started WinPcap Professional without support for NetMon. Cannot restart it with NetMon support."); + returnValue = TRUE; + } + } } } @@ -136,7 +176,6 @@ BOOL WoemEnterDll(HINSTANCE DllHandle, char *WoemErrorString) return returnValue; } -#define WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR(_msg) do{strncpy(WoemErrorString, _msg, PACKET_ERRSTR_SIZE - 1); TRACE_MESSAGE(_msg);}while(0) //////////////////////////////////////////////////////////////////// // Function called when a process loads the dll. @@ -167,12 +206,12 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) #endif BOOL is64BitOs = FALSE; BOOL bLoadDriverResult; + BOOL bUseNetMonPacket; TRACE_ENTER("WoemEnterDllInternal"); WoemErrorString[PACKET_ERRSTR_SIZE - 1] = '\0'; - #ifdef TNT_BUILD TRACE_MESSAGE("Process bound Woem, checking if the process is authorized..."); @@ -220,6 +259,54 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) } #endif + // + // Get the OS we're running on + // + ZeroMemory(&osVer, sizeof(OSVERSIONINFO)); + osVer.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); + + if (GetVersionEx(&osVer) == 0) + { + WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Unable to determine OS version"); + + TRACE_EXIT("WoemEnterDllInternal"); + return FALSE; + } + + // + // Get the OS architecture + // + bufSize = sizeof(osArchitecture); + if (RegOpenKey(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment", &environmentKey) != ERROR_SUCCESS + || RegQueryValueEx(environmentKey, "PROCESSOR_ARCHITECTURE", NULL,&keyType,(LPBYTE)&osArchitecture,&bufSize) != ERROR_SUCCESS + || keyType != REG_SZ) + { + WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Unable to determine OS architecture"); + + if (environmentKey != NULL) + RegCloseKey(environmentKey); + + TRACE_EXIT("WoemEnterDllInternal"); + return FALSE; + } + + if (stricmp("x86", osArchitecture) == 0) + { + is64BitOs = FALSE; + } + else + if (stricmp("AMD64", osArchitecture) == 0) + { + is64BitOs = TRUE; + } + else + { + WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Unsupported Operating System architecture (only x86 and AMD64 are supported)"); + + TRACE_EXIT("WoemEnterDllInternal"); + return FALSE; + } + if(g_hGlobalMutex) { // @@ -361,129 +448,36 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) // // IF WE ARE HERE, THE DLL IS BEING LOADED FOR THE FIRST TIME. // - - // - // Get the OS we're running on - // - ZeroMemory(&osVer, sizeof(OSVERSIONINFO)); - osVer.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); - - if (GetVersionEx(&osVer) == 0) - { - WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Unable to determine OS version"); - - ReleaseMutex(g_hGlobalMutex); - - if(g_hGlobalMutex != 0) - { - CloseHandle(g_hGlobalMutex); - g_hGlobalMutex = NULL; - } - if (g_hGlobalSemaphore!=0) - { - CloseHandle(g_hGlobalSemaphore); - g_hGlobalSemaphore = NULL; - } - - TRACE_EXIT("WoemEnterDllInternal"); - return FALSE; - } - - // - // Get the OS architecture - // - bufSize = sizeof(osArchitecture); - if (RegOpenKey(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment", &environmentKey) != ERROR_SUCCESS - || RegQueryValueEx(environmentKey, "PROCESSOR_ARCHITECTURE", NULL,&keyType,(LPBYTE)&osArchitecture,&bufSize) != ERROR_SUCCESS - || keyType != REG_SZ) + if (g_DisableNetMon == TRUE) { - WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Unable to determine OS architecture"); - - if (environmentKey != NULL) - RegCloseKey(environmentKey); - - ReleaseMutex(g_hGlobalMutex); - - if(g_hGlobalMutex != 0) - { - CloseHandle(g_hGlobalMutex); - g_hGlobalMutex = NULL; - - } - if (g_hGlobalSemaphore!=0) - { - CloseHandle(g_hGlobalSemaphore); - g_hGlobalSemaphore = NULL; - } - - TRACE_EXIT("WoemEnterDllInternal"); - return FALSE; - } - - // - // check that we are running on x86 (the only architecture that we support at the moment) - // - if (stricmp("x86", osArchitecture) == 0) - { - is64BitOs = FALSE; - } - else - if (stricmp("AMD64", osArchitecture) == 0) - { - is64BitOs = TRUE; + bUseNetMonPacket = FALSE; } else { - WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Unsupported Operating System architecture (only x86 and AMD64 are supported)"); - - ReleaseMutex(g_hGlobalMutex); - - if(g_hGlobalMutex != 0) + if(osVer.dwMajorVersion == 5) { - CloseHandle(g_hGlobalMutex); - g_hGlobalMutex = NULL; - + // + // Windows 2000, XP, 2003 + // + if (is64BitOs) + { + bUseNetMonPacket = FALSE; + } + else + { + bUseNetMonPacket = TRUE; + } } - if (g_hGlobalSemaphore!=0) + else { - CloseHandle(g_hGlobalSemaphore); - g_hGlobalSemaphore = NULL; + // + // all the other OSes, including NT4 and Vista + // + bUseNetMonPacket = FALSE; } - - TRACE_EXIT("WoemEnterDllInternal"); - return FALSE; - } - - -// -// Old registry based WinPcap names -// -// // -// // Create the WinPcap global registry key -// // -// if(!WoemCreateNameRegistryEntries()) -// { -// WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Unable to create registry entries. Administrator provileges are required for this operation"); -// -// ReleaseMutex(g_hGlobalMutex); -// -// if(g_hGlobalMutex!=0) -// { -// CloseHandle(g_hGlobalMutex); -// g_hGlobalMutex = NULL; -// -// } -// if (g_hGlobalSemaphore!=0) -// { -// CloseHandle(g_hGlobalSemaphore); -// g_hGlobalSemaphore = NULL; -// } -// -// TRACE_EXIT("WoemEnterDllInternal"); -// return FALSE; -// } + } if(!WoemCreateBinaryNames()) { @@ -506,6 +500,15 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) TRACE_EXIT("WoemEnterDllInternal"); return FALSE; } + + if (bUseNetMonPacket) + { + g_DllFullPath = g_DllFullPathNm; + } + else + { + g_DllFullPath = g_DllFullPathNoNm; + } if(check_if_service_is_running(NPF_DRIVER_NAME) == 0) { @@ -579,30 +582,38 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) } else if(osVer.dwMajorVersion == 5) { + BOOL bExtractDllResult; + // // Windows 2000, XP, 2003 // - // - // Install Netmon - // - if(check_if_service_is_present("nm") != 0) + if (g_DisableNetMon == FALSE) { - hr = HrInstallNetMonProtocol(); - if (hr != S_OK) + // + // Install Netmon + // + if(check_if_service_is_present("nm") != 0) { - TRACE_MESSAGE("Warning: unable to load the netmon driver, ndiswan captures will not be available"); + hr = HrInstallNetMonProtocol(); + if (hr != S_OK) + { + TRACE_MESSAGE("Warning: unable to load the netmon driver, ndiswan captures will not be available"); + } + } + else + { + // printf("netmon already here!!!\n"); } } - else - { - // printf("netmon already here!!!\n"); - } - + // - // Extract packet.dll to disk + // Extract packet.dll to disk, both ones // - if(!WoemSaveResourceToDisk(g_DllHandle, IDP_DLL2K, g_DllFullPath, FALSE)) + bExtractDllResult = WoemSaveResourceToDisk(g_DllHandle, IDP_DLL2K, g_DllFullPathNm, FALSE); + bExtractDllResult &=WoemSaveResourceToDisk(g_DllHandle, IDP_DLLVISTA, g_DllFullPathNoNm, FALSE); + + if (!bExtractDllResult) { WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Unable to copy the WinPcap Professional files. Administrative privileges are required for this operation."); @@ -713,7 +724,8 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) { WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("Unable to copy the WinPcap Professional files. Administrative privileges are required for this operation."); - _unlink(g_DllFullPath); + _unlink(g_DllFullPathNm); + _unlink(g_DllFullPathNoNm); ReleaseMutex(g_hGlobalMutex); @@ -747,7 +759,8 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) { WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("unable to create the packet driver service"); - _unlink(g_DllFullPath); + _unlink(g_DllFullPathNm); + _unlink(g_DllFullPathNoNm); _unlink(g_DriverFullPath); ReleaseMutex(g_hGlobalMutex); @@ -775,7 +788,8 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("unable to start the packet driver service"); delete_service(NPF_DRIVER_NAME); - _unlink(g_DllFullPath); + _unlink(g_DllFullPathNm); + _unlink(g_DllFullPathNoNm); _unlink(g_DriverFullPath); ReleaseMutex(g_hGlobalMutex); @@ -849,10 +863,42 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) } else { + if (g_DisableNetMon == TRUE) + { + bUseNetMonPacket = FALSE; + } + else + { + if(osVer.dwMajorVersion == 5) + { + // + // Windows 2000, XP, 2003 + // + if (is64BitOs) + { + bUseNetMonPacket = FALSE; + } + else + { + bUseNetMonPacket = TRUE; + } + } + else + { + // + // all the other OSes, including NT4 and Vista + // + bUseNetMonPacket = FALSE; + } + + } + if(!WoemCreateBinaryNames()) { delete_service(NPF_DRIVER_NAME); - _unlink(g_DllFullPath); + _unlink(g_DllFullPathNm); + _unlink(g_DllFullPathNoNm); + WoemDeleteDriverBinary(g_DriverFullPath, is64BitOs); ReleaseMutex(g_hGlobalMutex); @@ -872,6 +918,15 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) TRACE_EXIT("WoemEnterDllInternal"); return FALSE; } + + if (bUseNetMonPacket) + { + g_DllFullPath = g_DllFullPathNm; + } + else + { + g_DllFullPath = g_DllFullPathNoNm; + } } // @@ -880,7 +935,8 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) if(!LoadPacketDll(g_DllFullPath, WoemErrorString)) { delete_service(NPF_DRIVER_NAME); - _unlink(g_DllFullPath); + _unlink(g_DllFullPathNm); + _unlink(g_DllFullPathNoNm); WoemDeleteDriverBinary(g_DriverFullPath, is64BitOs); ReleaseMutex(g_hGlobalMutex); @@ -911,7 +967,8 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) // // Schedule the deletion of the dll. It will go away at the next reboot // - DeleteDll(g_DllFullPath); + DeleteDll(g_DllFullPathNoNm); + DeleteDll(g_DllFullPathNm); // // Done. We can release the MUTEX @@ -1355,8 +1412,14 @@ BOOL WoemCreateBinaryNames() // and load the components // - _snprintf(g_DllFullPath, - sizeof(g_DllFullPath) - 1, + _snprintf(g_DllFullPathNm, + sizeof(g_DllFullPathNm) - 1, + "%s\\%swoem_nm.tmp", + SysDir, + NPF_DRIVER_NAME); + + _snprintf(g_DllFullPathNoNm, + sizeof(g_DllFullPathNoNm) - 1, "%s\\%swoem.tmp", SysDir, NPF_DRIVER_NAME); diff --git a/OEM/WinpcapOem/WinpcapOem.def b/OEM/WinpcapOem/WinpcapOem.def index f74a5579..903b0be6 100644 --- a/OEM/WinpcapOem/WinpcapOem.def +++ b/OEM/WinpcapOem/WinpcapOem.def @@ -33,4 +33,5 @@ EXPORTS PacketSetLoopbackBehavior PacketGetAirPcapHandle PacketStartOem + PacketStartOemEx diff --git a/OEM/WinpcapOem/WinpcapOem.h b/OEM/WinpcapOem/WinpcapOem.h index 376c7dc2..77e284a7 100644 --- a/OEM/WinpcapOem/WinpcapOem.h +++ b/OEM/WinpcapOem/WinpcapOem.h @@ -31,7 +31,7 @@ HRESULT HrUninstallNetMonProtocol(); //////////////////////////////////////////////////////////////////// BOOL LoadPacketDll(char *PacketDllFileName, char *errorString); void DeleteDll(char *DllFileName); -BOOL WoemEnterDll(HINSTANCE DllHandle, char *WoemErrorString); +BOOL WoemEnterDll(HINSTANCE DllHandle, char *WoemErrorString, ULONG flags); BOOL WoemLeaveDll(); #ifdef STATIC_LIB void RegisterPacketUnloadHandler(void* Handler); diff --git a/wpcap/pcap_oem.c b/wpcap/pcap_oem.c index e48e0348..b2ce2caf 100644 --- a/wpcap/pcap_oem.c +++ b/wpcap/pcap_oem.c @@ -17,7 +17,7 @@ */ int pcap_start_oem(char* err_str, int flags) { - if(PacketStartOem(err_str, PCAP_ERRBUF_SIZE) == FALSE) + if(PacketStartOemEx(err_str, PCAP_ERRBUF_SIZE, (ULONG)flags) == FALSE) { return -1; } From 1585632ec170a0ecd02d13ee19ab023ad4e10d13 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Tue, 3 Jun 2008 22:20:28 +0000 Subject: [PATCH 246/316] Added a missing initialization. --- OEM/WinpcapOem/WoemDebug.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OEM/WinpcapOem/WoemDebug.h b/OEM/WinpcapOem/WoemDebug.h index 78191a54..f5e70349 100644 --- a/OEM/WinpcapOem/WoemDebug.h +++ b/OEM/WinpcapOem/WoemDebug.h @@ -114,7 +114,7 @@ static __inline void OutputDebugMessageNewLine(char *_x, ...) { #ifdef _DEBUG_TO_FILE FILE *f; - int loops; + int loops = 0; #endif va_list Marker; From 7dc28b6fc1a750b357b5e60872846e14d7748720 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Tue, 3 Jun 2008 22:21:50 +0000 Subject: [PATCH 247/316] Generate the checksum for wpcap.dll. --- wpcap/PRJ/wpcap.vcproj | 2 ++ 1 file changed, 2 insertions(+) diff --git a/wpcap/PRJ/wpcap.vcproj b/wpcap/PRJ/wpcap.vcproj index 0b1f2572..0c37276e 100644 --- a/wpcap/PRJ/wpcap.vcproj +++ b/wpcap/PRJ/wpcap.vcproj @@ -50,6 +50,7 @@ ModuleDefinitionFile=".\wpcap.def" GenerateDebugInformation="TRUE" ProgramDatabaseFile=".\Release_REMOTE_TNT/wpcap.pdb" + SetChecksum="TRUE" ImportLibrary=".\Release_REMOTE_TNT/wpcap.lib" TargetMachine="1"/> Date: Tue, 3 Jun 2008 22:22:47 +0000 Subject: [PATCH 248/316] Added a new configuration enabled for tracing. --- OEM/WinpcapOem/WinpcapOem.vcproj | 145 ++++++++++++++++++++++++++++++- WinPcap OEM.sln | 9 ++ 2 files changed, 152 insertions(+), 2 deletions(-) diff --git a/OEM/WinpcapOem/WinpcapOem.vcproj b/OEM/WinpcapOem/WinpcapOem.vcproj index c7292ecc..d1887d2b 100644 --- a/OEM/WinpcapOem/WinpcapOem.vcproj +++ b/OEM/WinpcapOem/WinpcapOem.vcproj @@ -460,6 +460,99 @@ echo * * echo * .\binaries_SIGNED\*.* * echo * * echo **************************************************************** +"/> + + + + + + + + + + + + + + + @@ -535,6 +628,13 @@ echo **************************************************************** AdditionalIncludeDirectories="" BrowseInformation="1"/> + + + @@ -586,6 +686,13 @@ echo **************************************************************** AdditionalIncludeDirectories="" BrowseInformation="1"/> + + + @@ -637,6 +744,13 @@ echo **************************************************************** AdditionalIncludeDirectories="" BrowseInformation="1"/> + + + @@ -688,6 +802,13 @@ echo **************************************************************** AdditionalIncludeDirectories="" BrowseInformation="1"/> + + + @@ -739,6 +860,13 @@ echo **************************************************************** AdditionalIncludeDirectories="" BrowseInformation="1"/> + + + @@ -790,6 +918,13 @@ echo **************************************************************** AdditionalIncludeDirectories="" BrowseInformation="1"/> + + + + RelativePath="binaries\Packet2k.dll"> + RelativePath="Packet2k.dll"> @@ -865,6 +1000,12 @@ echo **************************************************************** + + + diff --git a/WinPcap OEM.sln b/WinPcap OEM.sln index d8bf6b5b..95c92c55 100644 --- a/WinPcap OEM.sln +++ b/WinPcap OEM.sln @@ -34,6 +34,7 @@ Global Release = Release Release SIGNED STEP1 = Release SIGNED STEP1 Release SIGNED STEP2 = Release SIGNED STEP2 + Release SIGNED STEP2 Tracing = Release SIGNED STEP2 Tracing Release TNT SIGNED STEP1 = Release TNT SIGNED STEP1 Release TNT SIGNED STEP2 = Release TNT SIGNED STEP2 Release_TNT = Release_TNT @@ -47,6 +48,7 @@ Global {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release SIGNED STEP1.ActiveCfg = Release SIGNED|Win32 {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release SIGNED STEP1.Build.0 = Release SIGNED|Win32 {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release SIGNED STEP2.ActiveCfg = Release|Win32 + {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release SIGNED STEP2 Tracing.ActiveCfg = Release|Win32 {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release TNT SIGNED STEP1.ActiveCfg = Release SIGNED|Win32 {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release TNT SIGNED STEP1.Build.0 = Release SIGNED|Win32 {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release TNT SIGNED STEP2.ActiveCfg = Release|Win32 @@ -60,6 +62,7 @@ Global {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release SIGNED STEP1.ActiveCfg = Release SIGNED|Win32 {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release SIGNED STEP1.Build.0 = Release SIGNED|Win32 {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release SIGNED STEP2.ActiveCfg = Release|Win32 + {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release SIGNED STEP2 Tracing.ActiveCfg = Release|Win32 {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release TNT SIGNED STEP1.ActiveCfg = Release SIGNED|Win32 {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release TNT SIGNED STEP1.Build.0 = Release SIGNED|Win32 {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release TNT SIGNED STEP2.ActiveCfg = Release|Win32 @@ -70,6 +73,7 @@ Global {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Release.ActiveCfg = Release|Win32 {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Release SIGNED STEP1.ActiveCfg = Release|Win32 {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Release SIGNED STEP2.ActiveCfg = Release|Win32 + {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Release SIGNED STEP2 Tracing.ActiveCfg = Release|Win32 {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Release TNT SIGNED STEP1.ActiveCfg = Release|Win32 {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Release TNT SIGNED STEP2.ActiveCfg = Release|Win32 {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Release_TNT.ActiveCfg = Release|Win32 @@ -82,6 +86,8 @@ Global {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release SIGNED STEP1.ActiveCfg = Release|Win32 {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release SIGNED STEP2.ActiveCfg = Release SIGNED|Win32 {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release SIGNED STEP2.Build.0 = Release SIGNED|Win32 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release SIGNED STEP2 Tracing.ActiveCfg = Release SIGNED Tracing|Win32 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release SIGNED STEP2 Tracing.Build.0 = Release SIGNED Tracing|Win32 {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release TNT SIGNED STEP1.ActiveCfg = Release_TNT|Win32 {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release TNT SIGNED STEP2.ActiveCfg = Release_TNT_SIGNED|Win32 {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release TNT SIGNED STEP2.Build.0 = Release_TNT_SIGNED|Win32 @@ -96,6 +102,8 @@ Global {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release SIGNED STEP1.ActiveCfg = Release REMOTE|Win32 {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release SIGNED STEP2.ActiveCfg = Release REMOTE|Win32 {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release SIGNED STEP2.Build.0 = Release REMOTE|Win32 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release SIGNED STEP2 Tracing.ActiveCfg = Release REMOTE|Win32 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release SIGNED STEP2 Tracing.Build.0 = Release REMOTE|Win32 {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release TNT SIGNED STEP1.ActiveCfg = Release REMOTE TNT|Win32 {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release TNT SIGNED STEP2.ActiveCfg = Release REMOTE TNT|Win32 {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release TNT SIGNED STEP2.Build.0 = Release REMOTE TNT|Win32 @@ -109,6 +117,7 @@ Global {8D305FC1-A748-4C63-B419-585BF03165D9}.Release SIGNED STEP1.ActiveCfg = Release SIGNED|Win32 {8D305FC1-A748-4C63-B419-585BF03165D9}.Release SIGNED STEP1.Build.0 = Release SIGNED|Win32 {8D305FC1-A748-4C63-B419-585BF03165D9}.Release SIGNED STEP2.ActiveCfg = Release|Win32 + {8D305FC1-A748-4C63-B419-585BF03165D9}.Release SIGNED STEP2 Tracing.ActiveCfg = Release|Win32 {8D305FC1-A748-4C63-B419-585BF03165D9}.Release TNT SIGNED STEP1.ActiveCfg = Release SIGNED|Win32 {8D305FC1-A748-4C63-B419-585BF03165D9}.Release TNT SIGNED STEP1.Build.0 = Release SIGNED|Win32 {8D305FC1-A748-4C63-B419-585BF03165D9}.Release TNT SIGNED STEP2.ActiveCfg = Release|Win32 From 295aebe920f3e4b19bfebb07db1d6e3133f6eac0 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Tue, 3 Jun 2008 22:46:47 +0000 Subject: [PATCH 249/316] Documented a new flag for pcap_start_oem --- wpcap/pcap_oem.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/wpcap/pcap_oem.c b/wpcap/pcap_oem.c index b2ce2caf..f7cb5c8e 100644 --- a/wpcap/pcap_oem.c +++ b/wpcap/pcap_oem.c @@ -5,14 +5,22 @@ */ //\{ +/*! + \ingroup wpcapfunc + \brief Flag used in conjunction with \ref pcap_start_oem. + When this flag is used, WinPcap Professional will be started without support + for dialup and VPN adapters (i.e. without loading the Microsoft NetMon component). +*/ +#define PCAP_START_OEM_NO_NETMON 0x00000001 + /*! \ingroup wpcapfunc \brief This function starts WinPcap Professional. \param err_str pointer to a user-allocated buffer (of minimum size PCAP_ERRBUF_SIZE) that will contain the error message in case of failure. - \param flags Reserved. It should be set to 0. - + \param flags A bitwise combination of the following flags: + - \ref PCAP_START_OEM_NO_NETMON \return 0 on success, -1 in case of failure. */ int pcap_start_oem(char* err_str, int flags) From 723cd4270c9235ab350445f067aa7c1b662b2cd4 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 4 Jun 2008 21:46:17 +0000 Subject: [PATCH 250/316] Updated version to 4.0.2.1252 --- dox/prj/winpcap_oem_noc.dox | 2 +- version.h | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dox/prj/winpcap_oem_noc.dox b/dox/prj/winpcap_oem_noc.dox index 6dd55a3c..c17f8c03 100644 --- a/dox/prj/winpcap_oem_noc.dox +++ b/dox/prj/winpcap_oem_noc.dox @@ -4,7 +4,7 @@ # Project related configuration options #--------------------------------------------------------------------------- PROJECT_NAME = "WinPcap Professional" -PROJECT_NUMBER = 4.0.2.1194 +PROJECT_NUMBER = 4.0.2.1252 OUTPUT_DIRECTORY = ./ CREATE_SUBDIRS = NO OUTPUT_LANGUAGE = English diff --git a/version.h b/version.h index 6e943de0..9fe52a73 100644 --- a/version.h +++ b/version.h @@ -15,14 +15,14 @@ #define WINPCAPOEM_MAJOR 4 #define WINPCAPOEM_MINOR 0 #define WINPCAPOEM_REV 2 -#define WINPCAPOEM_BUILD 1194 +#define WINPCAPOEM_BUILD 1252 -#define WINPCAPOEM_VER_STRING "4.0.2.1194.Pro" +#define WINPCAPOEM_VER_STRING "4.0.2.1252.Pro" #define WINPCAPOEM_COMPANY_NAME "CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_NAME "Packet.dll Wrapper" -#define WINPCAPOEM_VERSION_STRING "4.0.2.1194.Pro" +#define WINPCAPOEM_VERSION_STRING "4.0.2.1252.Pro" #define WINPCAPOEM_PRODUCT_NAME "WinPcap Professional" #define WINPCAPOEM_COPYRIGHT_STRING "Copyright © 2005-2008 CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_FILENAME "Packet.dll (wrapper)" From 3aab0ad887b6b31cd7bdfb00d0d275ac0839482c Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Thu, 14 Aug 2008 22:51:25 +0000 Subject: [PATCH 251/316] Fixed some warnings reported by VS2005. Do not disable the FS redirector in the x64 version of the DLL. --- OEM/WinpcapOem/Resources.cpp | 16 +++++++++++++--- OEM/WinpcapOem/WinPcapOem.cpp | 4 ++-- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/OEM/WinpcapOem/Resources.cpp b/OEM/WinpcapOem/Resources.cpp index 89b3b7af..7219fdf1 100644 --- a/OEM/WinpcapOem/Resources.cpp +++ b/OEM/WinpcapOem/Resources.cpp @@ -11,10 +11,13 @@ BOOL WoemSaveResourceToDisk(HINSTANCE hInst, int ResID, char* FileName, BOOL bDi { DWORD dwLastError = ERROR_SUCCESS; HANDLE hFile = INVALID_HANDLE_VALUE; + +#ifdef _X86_ PVOID OldFsRedirectorValue = NULL; HMODULE hKernel32Dll = NULL; Wow64DisableWow64FsRedirectionHandler DisableFsRedirector = NULL; Wow64RevertWow64FsRedirectionHandler RevertFsRedirector = NULL; +#endif CHAR ResName[100]; #ifdef STATIC_LIB @@ -29,6 +32,7 @@ BOOL WoemSaveResourceToDisk(HINSTANCE hInst, int ResID, char* FileName, BOOL bDi do { +#ifdef _X86_ if (bDisableFsRedirector) { // @@ -66,6 +70,8 @@ BOOL WoemSaveResourceToDisk(HINSTANCE hInst, int ResID, char* FileName, BOOL bDi } } +#endif // _X86_ + // // Find the resource // @@ -116,9 +122,7 @@ BOOL WoemSaveResourceToDisk(HINSTANCE hInst, int ResID, char* FileName, BOOL bDi TRACE_MESSAGE("Cannot open file %8.8x", dwLastError); } - // - // Save the resource to disk - // +#ifdef _X86_ if (bDisableFsRedirector) { if (RevertFsRedirector(OldFsRedirectorValue) == FALSE) @@ -127,12 +131,16 @@ BOOL WoemSaveResourceToDisk(HINSTANCE hInst, int ResID, char* FileName, BOOL bDi break; } } +#endif //_X86_ if (hFile == INVALID_HANDLE_VALUE) { break; } + // + // Save the resource to disk + // DWORD writtenBytes = 0; do { @@ -150,7 +158,9 @@ BOOL WoemSaveResourceToDisk(HINSTANCE hInst, int ResID, char* FileName, BOOL bDi }while(FALSE); +#ifdef _X86_ if (hKernel32Dll != NULL) FreeLibrary(hKernel32Dll); +#endif //_X86_ if (hFile != INVALID_HANDLE_VALUE) CloseHandle(hFile); diff --git a/OEM/WinpcapOem/WinPcapOem.cpp b/OEM/WinpcapOem/WinPcapOem.cpp index d62f220e..f8a9a40a 100644 --- a/OEM/WinpcapOem/WinPcapOem.cpp +++ b/OEM/WinpcapOem/WinPcapOem.cpp @@ -290,12 +290,12 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) return FALSE; } - if (stricmp("x86", osArchitecture) == 0) + if (_stricmp("x86", osArchitecture) == 0) { is64BitOs = FALSE; } else - if (stricmp("AMD64", osArchitecture) == 0) + if (_stricmp("AMD64", osArchitecture) == 0) { is64BitOs = TRUE; } From 59fabca0d168f8248262774e0d68dbb5ccc70f5e Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Thu, 14 Aug 2008 22:54:02 +0000 Subject: [PATCH 252/316] Migrated the project to VS2005. Simplified the build, still work in progress. --- OEM/WinpcapOem/WinpcapOem.rc | 31 +- OEM/WinpcapOem/WinpcapOem.sln | 94 +- OEM/WinpcapOem/WinpcapOem.vcproj | 1459 +++++++++++------ OEM/WinpcapOem/prebuild_debug.bat | 26 +- OEM/WinpcapOem/prebuild_release.bat | 27 +- WinPcap OEM.sln | 217 ++- packetNtx/Dll/Project/PacketAndWan2003.vcproj | 503 ------ packetNtx/Dll/Project/PacketNT4.vcproj | 434 +++-- packetNtx/Dll/Project/PacketNetMon.vcproj | 569 +++++++ packetNtx/Dll/Project/PacketVista.vcproj | 436 +++-- packetNtx/Driver/NPF_NT4.RC | 107 -- packetNtx/Driver/NPF_NT5.RC | 107 -- packetNtx/Driver/NPF_NT5_x64.RC | 107 -- packetNtx/Driver/npf.rc | 44 + 14 files changed, 2352 insertions(+), 1809 deletions(-) delete mode 100644 packetNtx/Dll/Project/PacketAndWan2003.vcproj create mode 100644 packetNtx/Dll/Project/PacketNetMon.vcproj delete mode 100644 packetNtx/Driver/NPF_NT4.RC delete mode 100644 packetNtx/Driver/NPF_NT5.RC delete mode 100644 packetNtx/Driver/NPF_NT5_x64.RC create mode 100644 packetNtx/Driver/npf.rc diff --git a/OEM/WinpcapOem/WinpcapOem.rc b/OEM/WinpcapOem/WinpcapOem.rc index ee4be214..7d42590d 100644 --- a/OEM/WinpcapOem/WinpcapOem.rc +++ b/OEM/WinpcapOem/WinpcapOem.rc @@ -23,21 +23,24 @@ // Data // -#ifdef SIGNED_BINARIES -IDP_DLL2K RCDATA MOVEABLE PURE "binaries_SIGNED\\packet2k.dll" -IDP_DRI2K RCDATA MOVEABLE PURE "binaries_SIGNED\\npf2k.sys" -IDP_DLLNT RCDATA MOVEABLE PURE "binaries_SIGNED\\packetnt.dll" -IDP_DRINT RCDATA MOVEABLE PURE "binaries_SIGNED\\npfnt.sys" -IDP_DLLVISTA RCDATA MOVEABLE PURE "binaries_SIGNED\\packetVista.dll" -IDP_DRIx64 RCDATA MOVEABLE PURE "binaries_SIGNED\\npfx64.sys" +#ifdef _AMD64_ + +IDP_DLL2K RCDATA MOVEABLE PURE "binaries\\x64\\packet2k.dll" +IDP_DLLVISTA RCDATA MOVEABLE PURE "binaries\\x64\\packetVista.dll" +IDP_DRIx64 RCDATA MOVEABLE PURE "binaries\\x64\\npfx64.sys" + #else -IDP_DLL2K RCDATA MOVEABLE PURE "binaries\\packet2k.dll" -IDP_DRI2K RCDATA MOVEABLE PURE "binaries\\npf2k.sys" -IDP_DLLNT RCDATA MOVEABLE PURE "binaries\\packetnt.dll" -IDP_DRINT RCDATA MOVEABLE PURE "binaries\\npfnt.sys" -IDP_DLLVISTA RCDATA MOVEABLE PURE "binaries\\packetVista.dll" -IDP_DRIx64 RCDATA MOVEABLE PURE "binaries\\npfx64.sys" -#endif +// +// x86 +// +IDP_DLL2K RCDATA MOVEABLE PURE "binaries\\x86\\packet2k.dll" +IDP_DRI2 RCDATA MOVEABLE PURE "binaries\\x86\\npf2k.sys" +IDP_DLLNT RCDATA MOVEABLE PURE "binaries\\x86\\packetnt.dll" +IDP_DRINT RCDATA MOVEABLE PURE "binaries\\x86\\npfnt.sys" +IDP_DLLVISTA RCDATA MOVEABLE PURE "binaries\\x86\\packetVista.dll" +IDP_DRIx64 RCDATA MOVEABLE PURE "binaries\\x64\\npfx64.sys" + +#endif //not _AMD64_ HSH_AUTH_PROC RCDATA MOVEABLE PURE "binaries\\tools.bin" diff --git a/OEM/WinpcapOem/WinpcapOem.sln b/OEM/WinpcapOem/WinpcapOem.sln index 3988dd43..1690d882 100644 --- a/OEM/WinpcapOem/WinpcapOem.sln +++ b/OEM/WinpcapOem/WinpcapOem.sln @@ -1,82 +1,36 @@ + Microsoft Visual Studio Solution File, Format Version 9.00 # Visual Studio 2005 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PacketAndWan", "..\..\..\winpcap\packetNtx\Dll\Project\PacketAndWan.vcproj", "{8A2D94DC-412E-48B5-B566-B451F4D7AD68}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WinpcapOem", "WinpcapOem.vcproj", "{FB2DA24E-A296-4B16-9DC2-1B84FCEC5311}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WinPcap NTx Driver", "..\..\..\winpcap\packetNtx\driver\WinPcap NTx Driver.vcproj", "{5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PacketNT", "..\..\..\winpcap\packetNtx\Dll\Project\Packet.vcproj", "{B825B6B9-3271-4740-8E88-C73EA358D10A}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WinpcapOem", "WinpcapOem.vcproj", "{E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug_Security|Win32 = Debug_Security|Win32 + Debug_TNT|Win32 = Debug_TNT|Win32 + Debug_TNT|x64 = Debug_TNT|x64 Debug|Win32 = Debug|Win32 - NT4 Debug|Win32 = NT4 Debug|Win32 - NT4 OEM Debug|Win32 = NT4 OEM Debug|Win32 - NT4 OEM Release|Win32 = NT4 OEM Release|Win32 - NT4 Release|Win32 = NT4 Release|Win32 - Release_Security|Win32 = Release_Security|Win32 + Debug|x64 = Debug|x64 + Release_TNT|Win32 = Release_TNT|Win32 + Release_TNT|x64 = Release_TNT|x64 Release|Win32 = Release|Win32 + Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {8A2D94DC-412E-48B5-B566-B451F4D7AD68}.Debug_Security|Win32.ActiveCfg = Debug|Win32 - {8A2D94DC-412E-48B5-B566-B451F4D7AD68}.Debug_Security|Win32.Build.0 = Debug|Win32 - {8A2D94DC-412E-48B5-B566-B451F4D7AD68}.Debug|Win32.ActiveCfg = Debug|Win32 - {8A2D94DC-412E-48B5-B566-B451F4D7AD68}.Debug|Win32.Build.0 = Debug|Win32 - {8A2D94DC-412E-48B5-B566-B451F4D7AD68}.NT4 Debug|Win32.ActiveCfg = Debug|Win32 - {8A2D94DC-412E-48B5-B566-B451F4D7AD68}.NT4 Debug|Win32.Build.0 = Debug|Win32 - {8A2D94DC-412E-48B5-B566-B451F4D7AD68}.NT4 OEM Debug|Win32.ActiveCfg = Debug|Win32 - {8A2D94DC-412E-48B5-B566-B451F4D7AD68}.NT4 OEM Debug|Win32.Build.0 = Debug|Win32 - {8A2D94DC-412E-48B5-B566-B451F4D7AD68}.NT4 OEM Release|Win32.ActiveCfg = Release|Win32 - {8A2D94DC-412E-48B5-B566-B451F4D7AD68}.NT4 OEM Release|Win32.Build.0 = Release|Win32 - {8A2D94DC-412E-48B5-B566-B451F4D7AD68}.NT4 Release|Win32.ActiveCfg = Release|Win32 - {8A2D94DC-412E-48B5-B566-B451F4D7AD68}.NT4 Release|Win32.Build.0 = Release|Win32 - {8A2D94DC-412E-48B5-B566-B451F4D7AD68}.Release_Security|Win32.ActiveCfg = Release|Win32 - {8A2D94DC-412E-48B5-B566-B451F4D7AD68}.Release_Security|Win32.Build.0 = Release|Win32 - {8A2D94DC-412E-48B5-B566-B451F4D7AD68}.Release|Win32.ActiveCfg = Release|Win32 - {8A2D94DC-412E-48B5-B566-B451F4D7AD68}.Release|Win32.Build.0 = Release|Win32 - {FB2DA24E-A296-4B16-9DC2-1B84FCEC5311}.Debug_Security|Win32.ActiveCfg = Debug_Security|Win32 - {FB2DA24E-A296-4B16-9DC2-1B84FCEC5311}.Debug_Security|Win32.Build.0 = Debug_Security|Win32 - {FB2DA24E-A296-4B16-9DC2-1B84FCEC5311}.Debug|Win32.ActiveCfg = Debug|Win32 - {FB2DA24E-A296-4B16-9DC2-1B84FCEC5311}.Debug|Win32.Build.0 = Debug|Win32 - {FB2DA24E-A296-4B16-9DC2-1B84FCEC5311}.NT4 Debug|Win32.ActiveCfg = Debug|Win32 - {FB2DA24E-A296-4B16-9DC2-1B84FCEC5311}.NT4 Debug|Win32.Build.0 = Debug|Win32 - {FB2DA24E-A296-4B16-9DC2-1B84FCEC5311}.NT4 OEM Debug|Win32.ActiveCfg = Debug|Win32 - {FB2DA24E-A296-4B16-9DC2-1B84FCEC5311}.NT4 OEM Debug|Win32.Build.0 = Debug|Win32 - {FB2DA24E-A296-4B16-9DC2-1B84FCEC5311}.NT4 OEM Release|Win32.ActiveCfg = Release|Win32 - {FB2DA24E-A296-4B16-9DC2-1B84FCEC5311}.NT4 OEM Release|Win32.Build.0 = Release|Win32 - {FB2DA24E-A296-4B16-9DC2-1B84FCEC5311}.NT4 Release|Win32.ActiveCfg = Release|Win32 - {FB2DA24E-A296-4B16-9DC2-1B84FCEC5311}.NT4 Release|Win32.Build.0 = Release|Win32 - {FB2DA24E-A296-4B16-9DC2-1B84FCEC5311}.Release_Security|Win32.ActiveCfg = Release_Security|Win32 - {FB2DA24E-A296-4B16-9DC2-1B84FCEC5311}.Release_Security|Win32.Build.0 = Release_Security|Win32 - {FB2DA24E-A296-4B16-9DC2-1B84FCEC5311}.Release|Win32.ActiveCfg = Release|Win32 - {FB2DA24E-A296-4B16-9DC2-1B84FCEC5311}.Release|Win32.Build.0 = Release|Win32 - {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Debug_Security|Win32.ActiveCfg = Debug|Win32 - {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Debug_Security|Win32.Build.0 = Debug|Win32 - {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Debug|Win32.ActiveCfg = Debug|Win32 - {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.NT4 Debug|Win32.ActiveCfg = Debug|Win32 - {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.NT4 OEM Debug|Win32.ActiveCfg = Debug|Win32 - {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.NT4 OEM Release|Win32.ActiveCfg = Debug|Win32 - {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.NT4 Release|Win32.ActiveCfg = Release|Win32 - {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Release_Security|Win32.ActiveCfg = Release|Win32 - {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Release|Win32.ActiveCfg = Release|Win32 - {B825B6B9-3271-4740-8E88-C73EA358D10A}.Debug_Security|Win32.ActiveCfg = Debug|Win32 - {B825B6B9-3271-4740-8E88-C73EA358D10A}.Debug_Security|Win32.Build.0 = Debug|Win32 - {B825B6B9-3271-4740-8E88-C73EA358D10A}.Debug|Win32.ActiveCfg = Debug|Win32 - {B825B6B9-3271-4740-8E88-C73EA358D10A}.Debug|Win32.Build.0 = Debug|Win32 - {B825B6B9-3271-4740-8E88-C73EA358D10A}.NT4 Debug|Win32.ActiveCfg = NT4 Debug|Win32 - {B825B6B9-3271-4740-8E88-C73EA358D10A}.NT4 Debug|Win32.Build.0 = NT4 Debug|Win32 - {B825B6B9-3271-4740-8E88-C73EA358D10A}.NT4 OEM Debug|Win32.ActiveCfg = NT4 OEM Debug|Win32 - {B825B6B9-3271-4740-8E88-C73EA358D10A}.NT4 OEM Debug|Win32.Build.0 = NT4 OEM Debug|Win32 - {B825B6B9-3271-4740-8E88-C73EA358D10A}.NT4 OEM Release|Win32.ActiveCfg = NT4 OEM Release|Win32 - {B825B6B9-3271-4740-8E88-C73EA358D10A}.NT4 OEM Release|Win32.Build.0 = NT4 OEM Release|Win32 - {B825B6B9-3271-4740-8E88-C73EA358D10A}.NT4 Release|Win32.ActiveCfg = NT4 Release|Win32 - {B825B6B9-3271-4740-8E88-C73EA358D10A}.NT4 Release|Win32.Build.0 = NT4 Release|Win32 - {B825B6B9-3271-4740-8E88-C73EA358D10A}.Release_Security|Win32.ActiveCfg = Release|Win32 - {B825B6B9-3271-4740-8E88-C73EA358D10A}.Release_Security|Win32.Build.0 = Release|Win32 - {B825B6B9-3271-4740-8E88-C73EA358D10A}.Release|Win32.ActiveCfg = Release|Win32 - {B825B6B9-3271-4740-8E88-C73EA358D10A}.Release|Win32.Build.0 = Release|Win32 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Debug_TNT|Win32.ActiveCfg = Debug_TNT|Win32 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Debug_TNT|Win32.Build.0 = Debug_TNT|Win32 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Debug_TNT|x64.ActiveCfg = Debug_TNT|x64 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Debug_TNT|x64.Build.0 = Debug_TNT|x64 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Debug|Win32.ActiveCfg = Debug|Win32 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Debug|Win32.Build.0 = Debug|Win32 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Debug|x64.ActiveCfg = Debug|x64 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Debug|x64.Build.0 = Debug|x64 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release_TNT|Win32.ActiveCfg = Release_TNT|Win32 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release_TNT|Win32.Build.0 = Release_TNT|Win32 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release_TNT|x64.ActiveCfg = Release_TNT|x64 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release_TNT|x64.Build.0 = Release_TNT|x64 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release|Win32.ActiveCfg = Release|Win32 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release|Win32.Build.0 = Release|Win32 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release|x64.ActiveCfg = Release|x64 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/OEM/WinpcapOem/WinpcapOem.vcproj b/OEM/WinpcapOem/WinpcapOem.vcproj index d1887d2b..a7fa83b1 100644 --- a/OEM/WinpcapOem/WinpcapOem.vcproj +++ b/OEM/WinpcapOem/WinpcapOem.vcproj @@ -1,575 +1,820 @@ + > + Name="Win32" + /> + + + + ATLMinimizesCRunTimeLibraryUsage="false" + CharacterSet="2" + > + + + + + + CompileAs="0" + /> + Name="VCManagedResourceCompilerTool" + /> + + + GenerateDebugInformation="true" + ProgramDatabaseFile="$(OutDir)\Packet.pdb" + SetChecksum="true" + ImportLibrary="$(OutDir)\Packet.lib" + TargetMachine="1" + /> + Name="VCALinkTool" + /> + + + + + + + CommandLine="postbuild_release.bat" + /> + + + CommandLine="$(ProjectDir)\prebuild_Release.bat x64" + /> + Name="VCCustomBuildTool" + /> + + + MkTypLibCompatible="true" + SuppressStartupBanner="true" + TargetEnvironment="3" + TypeLibraryName=".\Release/WinpcapOem.tlb" + HeaderFileName="" + /> + Name="VCCLCompilerTool" + Optimization="2" + InlineFunctionExpansion="1" + AdditionalIncludeDirectories=".\,..\..\..\winpcap\common,..\..\..\common" + PreprocessorDefinitions="NDEBUG;_USRDLL;WinpcapOem_EXPORTS;WIN32;_WINDOWS;_CRT_SECURE_NO_WARNINGS" + StringPooling="true" + RuntimeLibrary="0" + EnableFunctionLevelLinking="true" + PrecompiledHeaderFile="" + AssemblerListingLocation="" + ObjectFile="$(IntDir)\" + ProgramDataBaseFileName="$(IntDir)\vc80.pdb" + WarningLevel="3" + SuppressStartupBanner="true" + DebugInformationFormat="3" + CompileAs="0" + /> + Name="VCManagedResourceCompilerTool" + /> + Name="VCResourceCompilerTool" + PreprocessorDefinitions="NDEBUG;_AMD64_" + Culture="0" + /> + Name="VCPreLinkEventTool" + /> + Name="VCLinkerTool" + AdditionalDependencies="npptools.lib odbc32.lib odbccp32.lib" + OutputFile="$(OutDir)\Packet.dll" + LinkIncremental="1" + SuppressStartupBanner="true" + AdditionalLibraryDirectories="" + ModuleDefinitionFile=".\WinpcapOem.def" + GenerateDebugInformation="true" + ProgramDatabaseFile="$(OutDir)\Packet.pdb" + SetChecksum="true" + ImportLibrary="$(OutDir)\Packet.lib" + TargetMachine="17" + /> + + + + + + + + + ATLMinimizesCRunTimeLibraryUsage="false" + CharacterSet="2" + > + + + + + + CompileAs="0" + /> + Name="VCManagedResourceCompilerTool" + /> + + + GenerateDebugInformation="true" + ProgramDatabaseFile="$(OutDir)\Packet.pdb" + ImportLibrary="$(OutDir)\Packet.lib" + TargetMachine="1" + /> + Name="VCALinkTool" + /> + Name="VCManifestTool" + /> + Name="VCXDCMakeTool" + /> + Name="VCBscMakeTool" + /> - - + Name="VCFxCopTool" + /> + Name="VCAppVerifierTool" + /> + Name="VCWebDeploymentTool" + /> + Name="VCPostBuildEventTool" + CommandLine="postbuild.bat" + /> + ATLMinimizesCRunTimeLibraryUsage="false" + CharacterSet="2" + > + + + + + + SuppressStartupBanner="true" + DebugInformationFormat="3" + CompileAs="0" + /> + + Name="VCResourceCompilerTool" + PreprocessorDefinitions="_DEBUG;_AMD64_" + Culture="0" + /> + + GenerateDebugInformation="true" + ProgramDatabaseFile="$(OutDir)\Packet.pdb" + ImportLibrary="$(OutDir)\Packet.lib" + TargetMachine="17" + /> + Name="VCALinkTool" + /> + Name="VCManifestTool" + /> + Name="VCXDCMakeTool" + /> + Name="VCBscMakeTool" + /> + Name="VCFxCopTool" + /> + Name="VCAppVerifierTool" + /> + Name="VCWebDeploymentTool" + /> - - + Name="VCPostBuildEventTool" + CommandLine="postbuild.bat" + /> + ATLMinimizesCRunTimeLibraryUsage="false" + CharacterSet="2" + > + + + + + + SuppressStartupBanner="true" + DebugInformationFormat="4" + CompileAs="0" + /> + Name="VCManagedResourceCompilerTool" + /> + Name="VCResourceCompilerTool" + PreprocessorDefinitions="_DEBUG" + Culture="0" + /> + Name="VCPreLinkEventTool" + /> + Name="VCLinkerTool" + AdditionalDependencies="odbc32.lib odbccp32.lib npptools.lib" + OutputFile="$(OutDir)\Packet.dll" + LinkIncremental="0" + SuppressStartupBanner="true" + ModuleDefinitionFile=".\WinpcapOem.def" + GenerateDebugInformation="true" + ProgramDatabaseFile="$(OutDir)\Packet.pdb" + ImportLibrary="$(OutDir)\Packet.lib" + TargetMachine="1" + /> + Name="VCALinkTool" + /> + Name="VCManifestTool" + /> + Name="VCXDCMakeTool" + /> + Name="VCBscMakeTool" + /> + Name="VCFxCopTool" + /> + Name="VCAppVerifierTool" + /> + Name="VCWebDeploymentTool" + /> + Name="VCPostBuildEventTool" + Description="Copying the Pro packet.lib in the winpcap folder" + CommandLine="postbuild.bat" + /> + ATLMinimizesCRunTimeLibraryUsage="false" + CharacterSet="2" + > + + + + + + CompileAs="0" + /> + + + Name="VCPreLinkEventTool" + /> + GenerateDebugInformation="true" + ProgramDatabaseFile="$(OutDir)\Packet.pdb" + ImportLibrary="$(OutDir)\Packet.lib" + TargetMachine="17" + /> + Name="VCALinkTool" + /> + Name="VCManifestTool" + /> - + Name="VCXDCMakeTool" + /> - + Name="VCBscMakeTool" + /> + Name="VCFxCopTool" + /> + Name="VCAppVerifierTool" + /> + Name="VCWebDeploymentTool" + /> + Name="VCPostBuildEventTool" + Description="Copying the Pro packet.lib in the winpcap folder" + CommandLine="postbuild.bat" + /> + ATLMinimizesCRunTimeLibraryUsage="false" + CharacterSet="2" + > + + + + + + CompileAs="0" + /> + + Name="VCResourceCompilerTool" + PreprocessorDefinitions="NDEBUG" + Culture="0" + /> + + GenerateDebugInformation="true" + ProgramDatabaseFile="$(OutDir)\Packet.pdb" + SetChecksum="true" + ImportLibrary="$(OutDir)\Packet.lib" + TargetMachine="1" + /> + Name="VCALinkTool" + /> + Name="VCManifestTool" + /> - - + Name="VCXDCMakeTool" + /> + Name="VCBscMakeTool" + /> + Name="VCFxCopTool" + /> + Name="VCAppVerifierTool" + /> + Name="VCWebDeploymentTool" + /> + Name="VCPostBuildEventTool" + CommandLine="postbuild_release.bat" + /> + ATLMinimizesCRunTimeLibraryUsage="false" + CharacterSet="2" + > + + + + + + CompileAs="0" + /> + + Name="VCResourceCompilerTool" + PreprocessorDefinitions="NDEBUG;_AMD64_" + Culture="0" + /> + + GenerateDebugInformation="true" + ProgramDatabaseFile="$(OutDir)\Packet.pdb" + SetChecksum="true" + ImportLibrary="$(OutDir)\Packet.lib" + TargetMachine="17" + /> + Name="VCALinkTool" + /> - - + Name="VCManifestTool" + /> + Name="VCXDCMakeTool" + /> + Name="VCBscMakeTool" + /> + Name="VCFxCopTool" + /> + Name="VCAppVerifierTool" + /> + Name="VCWebDeploymentTool" + /> + Name="VCPostBuildEventTool" + CommandLine="postbuild_release.bat" + /> @@ -577,444 +822,602 @@ echo **************************************************************** + Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" + > + RelativePath="Crypto.cpp" + > + Name="Release|Win32" + > + AdditionalIncludeDirectories="" + /> + Name="Release|x64" + > + + + + BrowseInformation="1" + /> + Name="Debug_TNT|x64" + > + BrowseInformation="1" + /> + Name="Debug|Win32" + > + BasicRuntimeChecks="3" + BrowseInformation="1" + /> + Name="Debug|x64" + > + Optimization="0" + AdditionalIncludeDirectories="" + BasicRuntimeChecks="3" + BrowseInformation="1" + /> + Name="Release_TNT|Win32" + > + BrowseInformation="1" + /> + Name="Release_TNT|x64" + > + AdditionalIncludeDirectories="" + BrowseInformation="1" + /> + RelativePath="PacketWrapper.cpp" + > + Name="Release|Win32" + > + AdditionalIncludeDirectories="" + /> + Name="Release|x64" + > + + + + BrowseInformation="1" + /> + Name="Debug_TNT|x64" + > + BrowseInformation="1" + /> + Name="Debug|Win32" + > + BasicRuntimeChecks="3" + BrowseInformation="1" + /> + Name="Debug|x64" + > + Optimization="0" + AdditionalIncludeDirectories="" + BasicRuntimeChecks="3" + BrowseInformation="1" + /> + Name="Release_TNT|Win32" + > + BrowseInformation="1" + /> + Name="Release_TNT|x64" + > + AdditionalIncludeDirectories="" + BrowseInformation="1" + /> + RelativePath="Resources.cpp" + > + Name="Release|Win32" + > + AdditionalIncludeDirectories="" + /> + Name="Release|x64" + > + + + + BrowseInformation="1" + /> + Name="Debug_TNT|x64" + > + BrowseInformation="1" + /> + Name="Debug|Win32" + > + BasicRuntimeChecks="3" + BrowseInformation="1" + /> + Name="Debug|x64" + > + Optimization="0" + AdditionalIncludeDirectories="" + BasicRuntimeChecks="3" + BrowseInformation="1" + /> + Name="Release_TNT|Win32" + > + BrowseInformation="1" + /> + Name="Release_TNT|x64" + > + AdditionalIncludeDirectories="" + BrowseInformation="1" + /> + RelativePath="Security.cpp" + > + Name="Release|Win32" + > + AdditionalIncludeDirectories="" + /> + Name="Release|x64" + > + + + + BrowseInformation="1" + /> + Name="Debug_TNT|x64" + > + BrowseInformation="1" + /> + Name="Debug|Win32" + > + BasicRuntimeChecks="3" + BrowseInformation="1" + /> + Name="Debug|x64" + > + Optimization="0" + AdditionalIncludeDirectories="" + BasicRuntimeChecks="3" + BrowseInformation="1" + /> + Name="Release_TNT|Win32" + > + BrowseInformation="1" + /> + Name="Release_TNT|x64" + > + AdditionalIncludeDirectories="" + BrowseInformation="1" + /> + RelativePath="SerivcesInstallers.cpp" + > + Name="Release|Win32" + > + AdditionalIncludeDirectories="" + /> + Name="Release|x64" + > + + + + BrowseInformation="1" + /> + Name="Debug_TNT|x64" + > + BrowseInformation="1" + /> + Name="Debug|Win32" + > + BasicRuntimeChecks="3" + BrowseInformation="1" + /> + Name="Debug|x64" + > + Optimization="0" + AdditionalIncludeDirectories="" + BasicRuntimeChecks="3" + BrowseInformation="1" + /> + Name="Release_TNT|Win32" + > + BrowseInformation="1" + /> + Name="Release_TNT|x64" + > + AdditionalIncludeDirectories="" + BrowseInformation="1" + /> + RelativePath="WinPcapOem.cpp" + > + Name="Release|Win32" + > + AdditionalIncludeDirectories="" + /> + Name="Release|x64" + > + + + + BrowseInformation="1" + /> + Name="Debug_TNT|x64" + > + BrowseInformation="1" + /> + Name="Debug|Win32" + > + BasicRuntimeChecks="3" + BrowseInformation="1" + /> + Name="Debug|x64" + > + Optimization="0" + AdditionalIncludeDirectories="" + BasicRuntimeChecks="3" + BrowseInformation="1" + /> + Name="Release_TNT|Win32" + > + BrowseInformation="1" + /> + Name="Release_TNT|x64" + > + AdditionalIncludeDirectories="" + BrowseInformation="1" + /> + Filter="h;hpp;hxx;hm;inl" + > + RelativePath="Crypto.h" + > + RelativePath="idls.h" + > + RelativePath="netcfgn.h" + > + RelativePath="netcfgx.h" + > + RelativePath="NetMonInstaller.h" + > + RelativePath="..\..\..\winpcap\Common\Packet32.h" + > + RelativePath="pch.h" + > + RelativePath="Security.h" + > + RelativePath="WinpcapOem.h" + > + RelativePath="WoemDebug.h" + > + RelativePath="..\..\..\winpcap\Common\WpcapNames.h" + > + Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" + > + RelativePath=".\binaries\hsh_auth.bin" + > + RelativePath=".\WinpcapOem.rc" + > - - - - - - - - - - - - - - - - - - + RelativePath=".\postbuild_release.bat" + > + RelativePath=".\prebuild_debug.bat" + > + RelativePath=".\prebuild_release.bat" + > + RelativePath="WinpcapOem.def" + > diff --git a/OEM/WinpcapOem/prebuild_debug.bat b/OEM/WinpcapOem/prebuild_debug.bat index 27458669..cb11d264 100644 --- a/OEM/WinpcapOem/prebuild_debug.bat +++ b/OEM/WinpcapOem/prebuild_debug.bat @@ -1,12 +1,22 @@ @echo off -echo Copying compiled DLLs -copy ..\..\packetNtx\Dll\Project\Packet_Debug_NT4\packet.dll .\Binaries\packetnt.dll -copy ..\..\packetNtx\Dll\Project\Packet_Debug_2k\packet.dll .\Binaries\packet2k.dll -copy ..\..\PacketNtx\Dll\Project\Packet_Debug_Vista\packet.dll .\Binaries\packetVista.dll +echo Copying Debug DLLs -echo Copying drivers -copy ..\..\packetNtx\Driver\bin\2k\i386\npf.sys .\Binaries\npf2k.sys -copy ..\..\packetNtx\Driver\bin\NT4\i386\checked\npf.sys .\Binaries\npfnt.sys -copy ..\..\packetNtx\Driver\bin\xp\AMD64\npf.sys .\Binaries\npfx64.sys +if "%1"=="x64" ( +echo Copying compiled DLLs for x64 +copy "..\..\packetNtx\Dll\Project\Packet (NetMon) Debug\x64\packet.dll" .\Binaries\x64\packet2k.dll +copy "..\..\PacketNtx\Dll\Project\Packet (NoNetMon) Debug\x64\packet.dll" .\Binaries\x64\packetVista.dll +echo Copying drivers for x64 +copy ..\..\packetNtx\Driver\bin\xp\AMD64\npf.sys .\Binaries\x64\npfx64.sys +) +if "%1"=="x86" ( +echo Copying compiled DLLs for x86 +copy "..\..\packetNtx\Dll\Project\Packet (NT4) Debug\x86\packet.dll" .\Binaries\x86\packetnt.dll +copy "..\..\packetNtx\Dll\Project\Packet (NetMon) Debug\x86\packet.dll" .\Binaries\x86\packet2k.dll +copy "..\..\PacketNtx\Dll\Project\Packet (NoNetMon) Debug\x86\packet.dll" .\Binaries\x86\packetVista.dll +echo Copying drivers for x86 and x64 +copy ..\..\packetNtx\Driver\bin\2k\i386\npf.sys .\Binaries\x86\npf2k.sys +copy ..\..\packetNtx\Driver\bin\NT4\i386\free\npf.sys .\Binaries\x86\npfnt.sys +copy ..\..\packetNtx\Driver\bin\xp\AMD64\npf.sys .\Binaries\x64\npfx64.sys +) diff --git a/OEM/WinpcapOem/prebuild_release.bat b/OEM/WinpcapOem/prebuild_release.bat index 5de69224..f98e0d43 100644 --- a/OEM/WinpcapOem/prebuild_release.bat +++ b/OEM/WinpcapOem/prebuild_release.bat @@ -1,11 +1,22 @@ @echo off -echo Copying compiled DLLs -copy ..\..\packetNtx\Dll\Project\Packet_Release_NT4\packet.dll .\Binaries\packetnt.dll -copy ..\..\packetNtx\Dll\Project\Packet_Release_2k\packet.dll .\Binaries\packet2k.dll -copy ..\..\PacketNtx\Dll\Project\Packet_Release_Vista\packet.dll .\Binaries\packetVista.dll +echo Copying Release DLLs -echo Copying drivers -copy ..\..\packetNtx\Driver\bin\2k\i386\npf.sys .\Binaries\npf2k.sys -copy ..\..\packetNtx\Driver\bin\NT4\i386\free\npf.sys .\Binaries\npfnt.sys -copy ..\..\packetNtx\Driver\bin\xp\AMD64\npf.sys .\Binaries\npfx64.sys +if "%1"=="x64" ( +echo Copying compiled DLLs for x64 +copy "..\..\packetNtx\Dll\Project\Packet (NetMon) Release\x64\packet.dll" .\Binaries\x64\packet2k.dll +copy "..\..\PacketNtx\Dll\Project\Packet (NoNetMon) Release\x64\packet.dll" .\Binaries\x64\packetVista.dll +echo Copying drivers for x64 +copy ..\..\packetNtx\Driver\bin\xp\AMD64\npf.sys .\Binaries\x64\npfx64.sys +) + +if "%1"=="x86" ( +echo Copying compiled DLLs for x86 +copy "..\..\packetNtx\Dll\Project\Packet (NT4) Release\x86\packet.dll" .\Binaries\x86\packetnt.dll +copy "..\..\packetNtx\Dll\Project\Packet (NetMon) Release\x86\packet.dll" .\Binaries\x86\packet2k.dll +copy "..\..\PacketNtx\Dll\Project\Packet (NoNetMon) Release\x86\packet.dll" .\Binaries\x86\packetVista.dll +echo Copying drivers for x86 and x64 +copy ..\..\packetNtx\Driver\bin\2k\i386\npf.sys .\Binaries\x86\npf2k.sys +copy ..\..\packetNtx\Driver\bin\NT4\i386\free\npf.sys .\Binaries\x86\npfnt.sys +copy ..\..\packetNtx\Driver\bin\xp\AMD64\npf.sys .\Binaries\x64\npfx64.sys +) diff --git a/WinPcap OEM.sln b/WinPcap OEM.sln index 95c92c55..a909614f 100644 --- a/WinPcap OEM.sln +++ b/WinPcap OEM.sln @@ -1,21 +1,15 @@ -Microsoft Visual Studio Solution File, Format Version 8.00 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PacketAndWan (Win2k)", "packetNtx\Dll\Project\PacketAndWan2003.vcproj", "{A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Packet (WinNT4)", "packetNtx\Dll\Project\PacketNT4.vcproj", "{33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Packet (NT4)", "packetNtx\Dll\Project\PacketNT4.vcproj", "{33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WinPcap NTx Driver", "..\winpcap\packetNtx\driver\WinPcap NTx Driver_2003.vcproj", "{5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WinpcapOem", "OEM\WinpcapOem\WinpcapOem.vcproj", "{E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}" ProjectSection(ProjectDependencies) = postProject {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2} = {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2} - {8D305FC1-A748-4C63-B419-585BF03165D9} = {8D305FC1-A748-4C63-B419-585BF03165D9} + {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB} = {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB} {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D} = {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D} + {8D305FC1-A748-4C63-B419-585BF03165D9} = {8D305FC1-A748-4C63-B419-585BF03165D9} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wpcap", "wpcap\PRJ\wpcap.vcproj", "{CAEF56E3-4959-4C10-81F5-06C8E86C301E}" @@ -23,109 +17,110 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wpcap", "wpcap\PRJ\wpcap.vc {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D} = {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D} EndProjectSection EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Packet (Vista)", "packetNtx\Dll\Project\PacketVista.vcproj", "{8D305FC1-A748-4C63-B419-585BF03165D9}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Packet (NoNetMon)", "packetNtx\Dll\Project\PacketVista.vcproj", "{8D305FC1-A748-4C63-B419-585BF03165D9}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Packet (NetMon)", "packetNtx\Dll\Project\PacketNetMon.vcproj", "{A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}" EndProject Global - GlobalSection(SolutionConfiguration) = preSolution - Debug = Debug - Debug_TNT = Debug_TNT - Release = Release - Release SIGNED STEP1 = Release SIGNED STEP1 - Release SIGNED STEP2 = Release SIGNED STEP2 - Release SIGNED STEP2 Tracing = Release SIGNED STEP2 Tracing - Release TNT SIGNED STEP1 = Release TNT SIGNED STEP1 - Release TNT SIGNED STEP2 = Release TNT SIGNED STEP2 - Release_TNT = Release_TNT - EndGlobalSection - GlobalSection(ProjectConfiguration) = postSolution - {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Debug.ActiveCfg = Debug|Win32 - {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Debug_TNT.ActiveCfg = Debug|Win32 - {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Debug_TNT.Build.0 = Debug|Win32 - {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release.ActiveCfg = Release|Win32 - {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release.Build.0 = Release|Win32 - {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release SIGNED STEP1.ActiveCfg = Release SIGNED|Win32 - {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release SIGNED STEP1.Build.0 = Release SIGNED|Win32 - {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release SIGNED STEP2.ActiveCfg = Release|Win32 - {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release SIGNED STEP2 Tracing.ActiveCfg = Release|Win32 - {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release TNT SIGNED STEP1.ActiveCfg = Release SIGNED|Win32 - {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release TNT SIGNED STEP1.Build.0 = Release SIGNED|Win32 - {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release TNT SIGNED STEP2.ActiveCfg = Release|Win32 - {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release_TNT.ActiveCfg = Release|Win32 - {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release_TNT.Build.0 = Release|Win32 - {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Debug.ActiveCfg = Debug|Win32 - {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Debug_TNT.ActiveCfg = Debug|Win32 - {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Debug_TNT.Build.0 = Debug|Win32 - {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release.ActiveCfg = Release|Win32 - {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release.Build.0 = Release|Win32 - {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release SIGNED STEP1.ActiveCfg = Release SIGNED|Win32 - {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release SIGNED STEP1.Build.0 = Release SIGNED|Win32 - {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release SIGNED STEP2.ActiveCfg = Release|Win32 - {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release SIGNED STEP2 Tracing.ActiveCfg = Release|Win32 - {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release TNT SIGNED STEP1.ActiveCfg = Release SIGNED|Win32 - {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release TNT SIGNED STEP1.Build.0 = Release SIGNED|Win32 - {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release TNT SIGNED STEP2.ActiveCfg = Release|Win32 - {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release_TNT.ActiveCfg = Release|Win32 - {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release_TNT.Build.0 = Release|Win32 - {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Debug.ActiveCfg = Debug|Win32 - {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Debug_TNT.ActiveCfg = Debug|Win32 - {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Release.ActiveCfg = Release|Win32 - {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Release SIGNED STEP1.ActiveCfg = Release|Win32 - {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Release SIGNED STEP2.ActiveCfg = Release|Win32 - {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Release SIGNED STEP2 Tracing.ActiveCfg = Release|Win32 - {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Release TNT SIGNED STEP1.ActiveCfg = Release|Win32 - {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Release TNT SIGNED STEP2.ActiveCfg = Release|Win32 - {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Release_TNT.ActiveCfg = Release|Win32 - {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Debug.ActiveCfg = Debug|Win32 - {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Debug.Build.0 = Debug|Win32 - {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Debug_TNT.ActiveCfg = Debug_TNT|Win32 - {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Debug_TNT.Build.0 = Debug_TNT|Win32 - {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release.ActiveCfg = Release|Win32 - {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release.Build.0 = Release|Win32 - {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release SIGNED STEP1.ActiveCfg = Release|Win32 - {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release SIGNED STEP2.ActiveCfg = Release SIGNED|Win32 - {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release SIGNED STEP2.Build.0 = Release SIGNED|Win32 - {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release SIGNED STEP2 Tracing.ActiveCfg = Release SIGNED Tracing|Win32 - {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release SIGNED STEP2 Tracing.Build.0 = Release SIGNED Tracing|Win32 - {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release TNT SIGNED STEP1.ActiveCfg = Release_TNT|Win32 - {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release TNT SIGNED STEP2.ActiveCfg = Release_TNT_SIGNED|Win32 - {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release TNT SIGNED STEP2.Build.0 = Release_TNT_SIGNED|Win32 - {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release_TNT.ActiveCfg = Release_TNT|Win32 - {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release_TNT.Build.0 = Release_TNT|Win32 - {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Debug.ActiveCfg = Debug REMOTE|Win32 - {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Debug.Build.0 = Debug REMOTE|Win32 - {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Debug_TNT.ActiveCfg = Debug REMOTE TNT|Win32 - {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Debug_TNT.Build.0 = Debug REMOTE TNT|Win32 - {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release.ActiveCfg = Release REMOTE|Win32 - {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release.Build.0 = Release REMOTE|Win32 - {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release SIGNED STEP1.ActiveCfg = Release REMOTE|Win32 - {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release SIGNED STEP2.ActiveCfg = Release REMOTE|Win32 - {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release SIGNED STEP2.Build.0 = Release REMOTE|Win32 - {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release SIGNED STEP2 Tracing.ActiveCfg = Release REMOTE|Win32 - {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release SIGNED STEP2 Tracing.Build.0 = Release REMOTE|Win32 - {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release TNT SIGNED STEP1.ActiveCfg = Release REMOTE TNT|Win32 - {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release TNT SIGNED STEP2.ActiveCfg = Release REMOTE TNT|Win32 - {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release TNT SIGNED STEP2.Build.0 = Release REMOTE TNT|Win32 - {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release_TNT.ActiveCfg = Release REMOTE TNT|Win32 - {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release_TNT.Build.0 = Release REMOTE TNT|Win32 - {8D305FC1-A748-4C63-B419-585BF03165D9}.Debug.ActiveCfg = Debug|Win32 - {8D305FC1-A748-4C63-B419-585BF03165D9}.Debug_TNT.ActiveCfg = Debug|Win32 - {8D305FC1-A748-4C63-B419-585BF03165D9}.Debug_TNT.Build.0 = Debug|Win32 - {8D305FC1-A748-4C63-B419-585BF03165D9}.Release.ActiveCfg = Release|Win32 - {8D305FC1-A748-4C63-B419-585BF03165D9}.Release.Build.0 = Release|Win32 - {8D305FC1-A748-4C63-B419-585BF03165D9}.Release SIGNED STEP1.ActiveCfg = Release SIGNED|Win32 - {8D305FC1-A748-4C63-B419-585BF03165D9}.Release SIGNED STEP1.Build.0 = Release SIGNED|Win32 - {8D305FC1-A748-4C63-B419-585BF03165D9}.Release SIGNED STEP2.ActiveCfg = Release|Win32 - {8D305FC1-A748-4C63-B419-585BF03165D9}.Release SIGNED STEP2 Tracing.ActiveCfg = Release|Win32 - {8D305FC1-A748-4C63-B419-585BF03165D9}.Release TNT SIGNED STEP1.ActiveCfg = Release SIGNED|Win32 - {8D305FC1-A748-4C63-B419-585BF03165D9}.Release TNT SIGNED STEP1.Build.0 = Release SIGNED|Win32 - {8D305FC1-A748-4C63-B419-585BF03165D9}.Release TNT SIGNED STEP2.ActiveCfg = Release|Win32 - {8D305FC1-A748-4C63-B419-585BF03165D9}.Release_TNT.ActiveCfg = Release|Win32 - {8D305FC1-A748-4C63-B419-585BF03165D9}.Release_TNT.Build.0 = Release|Win32 + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug_TNT|Win32 = Debug_TNT|Win32 + Debug_TNT|x64 = Debug_TNT|x64 + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release_TNT|Win32 = Release_TNT|Win32 + Release_TNT|x64 = Release_TNT|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Debug_TNT|Win32.ActiveCfg = Debug|Win32 + {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Debug_TNT|Win32.Build.0 = Debug|Win32 + {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Debug_TNT|x64.ActiveCfg = Debug|x64 + {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Debug_TNT|x64.Build.0 = Debug|x64 + {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Debug|Win32.ActiveCfg = Debug|Win32 + {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Debug|Win32.Build.0 = Debug|Win32 + {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Debug|x64.ActiveCfg = Debug|x64 + {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release_TNT|Win32.ActiveCfg = Release|Win32 + {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release_TNT|Win32.Build.0 = Release|Win32 + {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release_TNT|x64.ActiveCfg = Release SIGNED|x64 + {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release_TNT|x64.Build.0 = Release SIGNED|x64 + {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release|Win32.ActiveCfg = Release|Win32 + {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release|Win32.Build.0 = Release|Win32 + {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release|x64.ActiveCfg = Release|x64 + {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Debug_TNT|Win32.ActiveCfg = Debug|Win32 + {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Debug_TNT|x64.ActiveCfg = Debug|x64 + {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Debug|Win32.ActiveCfg = Debug|Win32 + {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Debug|x64.ActiveCfg = Debug|x64 + {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Release_TNT|Win32.ActiveCfg = Release|Win32 + {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Release_TNT|x64.ActiveCfg = Release|x64 + {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Release|Win32.ActiveCfg = Release|Win32 + {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Release|x64.ActiveCfg = Release|x64 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Debug_TNT|Win32.ActiveCfg = Debug_TNT|Win32 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Debug_TNT|Win32.Build.0 = Debug_TNT|Win32 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Debug_TNT|x64.ActiveCfg = Debug_TNT|x64 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Debug_TNT|x64.Build.0 = Debug_TNT|x64 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Debug|Win32.ActiveCfg = Debug|Win32 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Debug|Win32.Build.0 = Debug|Win32 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Debug|x64.ActiveCfg = Debug|x64 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Debug|x64.Build.0 = Debug|x64 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release_TNT|Win32.ActiveCfg = Release_TNT|Win32 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release_TNT|Win32.Build.0 = Release_TNT|Win32 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release_TNT|x64.ActiveCfg = Release_TNT|x64 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release_TNT|x64.Build.0 = Release_TNT|x64 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release|Win32.ActiveCfg = Release|Win32 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release|Win32.Build.0 = Release|Win32 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release|x64.ActiveCfg = Release|x64 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release|x64.Build.0 = Release|x64 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Debug_TNT|Win32.ActiveCfg = Debug REMOTE TNT|Win32 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Debug_TNT|Win32.Build.0 = Debug REMOTE TNT|Win32 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Debug_TNT|x64.ActiveCfg = Debug REMOTE|x64 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Debug_TNT|x64.Build.0 = Debug REMOTE|x64 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Debug|Win32.ActiveCfg = Debug REMOTE|Win32 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Debug|Win32.Build.0 = Debug REMOTE|Win32 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Debug|x64.ActiveCfg = Debug REMOTE|x64 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Debug|x64.Build.0 = Debug REMOTE|x64 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release_TNT|Win32.ActiveCfg = Release REMOTE TNT|Win32 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release_TNT|Win32.Build.0 = Release REMOTE TNT|Win32 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release_TNT|x64.ActiveCfg = Release REMOTE|x64 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release_TNT|x64.Build.0 = Release REMOTE|x64 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release|Win32.ActiveCfg = Release REMOTE|Win32 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release|Win32.Build.0 = Release REMOTE|Win32 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release|x64.ActiveCfg = Release REMOTE|x64 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release|x64.Build.0 = Release REMOTE|x64 + {8D305FC1-A748-4C63-B419-585BF03165D9}.Debug_TNT|Win32.ActiveCfg = Debug|Win32 + {8D305FC1-A748-4C63-B419-585BF03165D9}.Debug_TNT|Win32.Build.0 = Debug|Win32 + {8D305FC1-A748-4C63-B419-585BF03165D9}.Debug_TNT|x64.ActiveCfg = Debug|x64 + {8D305FC1-A748-4C63-B419-585BF03165D9}.Debug_TNT|x64.Build.0 = Debug|x64 + {8D305FC1-A748-4C63-B419-585BF03165D9}.Debug|Win32.ActiveCfg = Debug|Win32 + {8D305FC1-A748-4C63-B419-585BF03165D9}.Debug|Win32.Build.0 = Debug|Win32 + {8D305FC1-A748-4C63-B419-585BF03165D9}.Debug|x64.ActiveCfg = Debug|x64 + {8D305FC1-A748-4C63-B419-585BF03165D9}.Debug|x64.Build.0 = Debug|x64 + {8D305FC1-A748-4C63-B419-585BF03165D9}.Release_TNT|Win32.ActiveCfg = Release|Win32 + {8D305FC1-A748-4C63-B419-585BF03165D9}.Release_TNT|Win32.Build.0 = Release|Win32 + {8D305FC1-A748-4C63-B419-585BF03165D9}.Release_TNT|x64.ActiveCfg = Release SIGNED|x64 + {8D305FC1-A748-4C63-B419-585BF03165D9}.Release_TNT|x64.Build.0 = Release SIGNED|x64 + {8D305FC1-A748-4C63-B419-585BF03165D9}.Release|Win32.ActiveCfg = Release|Win32 + {8D305FC1-A748-4C63-B419-585BF03165D9}.Release|Win32.Build.0 = Release|Win32 + {8D305FC1-A748-4C63-B419-585BF03165D9}.Release|x64.ActiveCfg = Release|x64 + {8D305FC1-A748-4C63-B419-585BF03165D9}.Release|x64.Build.0 = Release|x64 + {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Debug_TNT|Win32.ActiveCfg = Debug|Win32 + {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Debug_TNT|Win32.Build.0 = Debug|Win32 + {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Debug_TNT|x64.ActiveCfg = Debug|x64 + {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Debug_TNT|x64.Build.0 = Debug|x64 + {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Debug|Win32.ActiveCfg = Debug|Win32 + {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Debug|Win32.Build.0 = Debug|Win32 + {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Debug|x64.ActiveCfg = Debug|x64 + {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Debug|x64.Build.0 = Debug|x64 + {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release_TNT|Win32.ActiveCfg = Release|Win32 + {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release_TNT|Win32.Build.0 = Release|Win32 + {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release_TNT|x64.ActiveCfg = Release|x64 + {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release_TNT|x64.Build.0 = Release|x64 + {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release|Win32.ActiveCfg = Release|Win32 + {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release|Win32.Build.0 = Release|Win32 + {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release|x64.ActiveCfg = Release|x64 + {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release|x64.Build.0 = Release|x64 EndGlobalSection - GlobalSection(ExtensibilityAddIns) = postSolution + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE EndGlobalSection EndGlobal diff --git a/packetNtx/Dll/Project/PacketAndWan2003.vcproj b/packetNtx/Dll/Project/PacketAndWan2003.vcproj deleted file mode 100644 index af593587..00000000 --- a/packetNtx/Dll/Project/PacketAndWan2003.vcproj +++ /dev/null @@ -1,503 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/packetNtx/Dll/Project/PacketNT4.vcproj b/packetNtx/Dll/Project/PacketNT4.vcproj index d0d64f9e..656fe441 100644 --- a/packetNtx/Dll/Project/PacketNT4.vcproj +++ b/packetNtx/Dll/Project/PacketNT4.vcproj @@ -1,231 +1,413 @@ + RootNamespace="Packet (WinNT4)" + > + Name="Win32" + /> + + + + ATLMinimizesCRunTimeLibraryUsage="false" + > + + + + + + CompileAs="0" + /> + + + Name="VCPreLinkEventTool" + /> + TargetMachine="1" + /> + + + + + + + + + + + + + + - + HeaderFileName="" + /> + Name="VCCLCompilerTool" + Optimization="2" + InlineFunctionExpansion="1" + AdditionalIncludeDirectories="../../../../winpcap/Common" + PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;_WINNT4;WPCAP_OEM" + StringPooling="true" + RuntimeLibrary="0" + EnableFunctionLevelLinking="true" + UsePrecompiledHeader="0" + PrecompiledHeaderFile="$(IntDir)/Packet.pch" + AssemblerListingLocation="$(IntDir)/" + ObjectFile="$(IntDir)/" + ProgramDataBaseFileName="$(IntDir)/" + WarningLevel="4" + SuppressStartupBanner="true" + DebugInformationFormat="3" + CompileAs="0" + /> + Name="VCManagedResourceCompilerTool" + /> + Culture="0" + /> + + + + + + Name="VCBscMakeTool" + /> + Name="VCFxCopTool" + /> + Name="VCAppVerifierTool" + /> + Name="VCWebDeploymentTool" + /> + Name="VCPostBuildEventTool" + /> + ATLMinimizesCRunTimeLibraryUsage="false" + > + + + + + + CompileAs="0" + /> + + + Name="VCPreLinkEventTool" + /> + TargetMachine="1" + /> + Name="VCALinkTool" + /> + Name="VCManifestTool" + /> - - + Name="VCXDCMakeTool" + /> + Name="VCBscMakeTool" + /> + Name="VCFxCopTool" + /> + Name="VCAppVerifierTool" + /> + Name="VCWebDeploymentTool" + /> + Name="VCPostBuildEventTool" + /> + ATLMinimizesCRunTimeLibraryUsage="false" + > + + + + + + CompileAs="0" + /> + + Name="VCResourceCompilerTool" + PreprocessorDefinitions="_DEBUG" + Culture="1033" + /> + - + TargetMachine="17" + /> + Name="VCALinkTool" + /> + Name="VCManifestTool" + /> + Name="VCXDCMakeTool" + /> - + Name="VCBscMakeTool" + /> + Name="VCFxCopTool" + /> + Name="VCAppVerifierTool" + /> + Name="VCWebDeploymentTool" + /> + Name="VCPostBuildEventTool" + /> @@ -233,29 +415,35 @@ copy ..\..\Driver\bin\xp\AMD64\npf.sys ..\..\..\OEM\WinPcapOem\Binaries_SIGNED\n + > + RelativePath="..\..\..\..\winpcap\packetNtx\Dll\AdInfo.c" + > + RelativePath="..\..\..\..\winpcap\packetNtx\Dll\Packet32.c" + > + > + RelativePath="..\..\..\..\winpcap\Common\Packet32.h" + > + RelativePath="..\..\..\..\winpcap\Common\WpcapNames.h" + > + RelativePath="..\..\..\..\winpcap\packetNtx\Dll\Packet.def" + > + RelativePath=".\PacketNT4.rc" + > diff --git a/packetNtx/Dll/Project/PacketNetMon.vcproj b/packetNtx/Dll/Project/PacketNetMon.vcproj new file mode 100644 index 00000000..f3729d8e --- /dev/null +++ b/packetNtx/Dll/Project/PacketNetMon.vcproj @@ -0,0 +1,569 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packetNtx/Dll/Project/PacketVista.vcproj b/packetNtx/Dll/Project/PacketVista.vcproj index d43fb1e8..7172fc4d 100644 --- a/packetNtx/Dll/Project/PacketVista.vcproj +++ b/packetNtx/Dll/Project/PacketVista.vcproj @@ -1,231 +1,413 @@ + RootNamespace="Packet (Vista)" + > + Name="Win32" + /> + + + + ATLMinimizesCRunTimeLibraryUsage="false" + > + + + + + + CompileAs="0" + /> + Name="VCManagedResourceCompilerTool" + /> + + + TargetMachine="1" + /> + + + + + + + + + + + + + + + HeaderFileName="" + /> - + Name="VCCLCompilerTool" + Optimization="2" + InlineFunctionExpansion="1" + AdditionalIncludeDirectories="../../../../winpcap/Common;../../../../AirPcap_DevPack/include;../../../../NpfIm/NpfIm_DevPack" + PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;HAVE_NPFIM_API;HAVE_AIRPCAP_API;HAVE_IPHELPER_API;WPCAP_OEM" + StringPooling="true" + RuntimeLibrary="0" + EnableFunctionLevelLinking="true" + UsePrecompiledHeader="0" + PrecompiledHeaderFile="$(IntDir)/Packet.pch" + AssemblerListingLocation="$(IntDir)/" + ObjectFile="$(IntDir)/" + ProgramDataBaseFileName="$(IntDir)/" + WarningLevel="4" + SuppressStartupBanner="true" + DebugInformationFormat="3" + CompileAs="0" + /> + Name="VCManagedResourceCompilerTool" + /> + Culture="0" + /> + + + + + + Name="VCBscMakeTool" + /> + Name="VCFxCopTool" + /> + Name="VCAppVerifierTool" + /> + Name="VCWebDeploymentTool" + /> + Name="VCPostBuildEventTool" + /> + ATLMinimizesCRunTimeLibraryUsage="false" + > + + + + + + CompileAs="0" + /> + Name="VCManagedResourceCompilerTool" + /> + + + TargetMachine="1" + /> - + Name="VCALinkTool" + /> + Name="VCManifestTool" + /> - + Name="VCXDCMakeTool" + /> + Name="VCBscMakeTool" + /> + Name="VCFxCopTool" + /> + Name="VCAppVerifierTool" + /> + Name="VCWebDeploymentTool" + /> + Name="VCPostBuildEventTool" + /> + ATLMinimizesCRunTimeLibraryUsage="false" + > + + + + + + CompileAs="0" + /> + + Name="VCResourceCompilerTool" + PreprocessorDefinitions="_DEBUG" + Culture="1033" + /> + - + TargetMachine="17" + /> + Name="VCALinkTool" + /> + Name="VCManifestTool" + /> + Name="VCXDCMakeTool" + /> - + Name="VCBscMakeTool" + /> + Name="VCFxCopTool" + /> + Name="VCAppVerifierTool" + /> + Name="VCWebDeploymentTool" + /> + Name="VCPostBuildEventTool" + /> @@ -233,35 +415,43 @@ copy ..\..\Driver\bin\xp\AMD64\npf.sys ..\..\..\OEM\WinPcapOem\Binaries_SIGNED\n + > + RelativePath="..\..\..\..\winpcap\packetNtx\Dll\AdInfo.c" + > + RelativePath="..\..\..\..\winpcap\packetNtx\Dll\NpfImExt.c" + > + RelativePath="..\..\..\..\winpcap\packetNtx\Dll\Packet32.c" + > + > + RelativePath="..\..\..\..\winpcap\packetNtx\Dll\NpfImExt.h" + > + RelativePath="..\..\..\..\winpcap\Common\Packet32.h" + > + RelativePath="..\..\..\..\winpcap\Common\WpcapNames.h" + > + RelativePath="..\..\..\..\winpcap\packetNtx\Dll\Packet.def" + > + RelativePath=".\PacketVista.rc" + > diff --git a/packetNtx/Driver/NPF_NT4.RC b/packetNtx/Driver/NPF_NT4.RC deleted file mode 100644 index 4d6607c4..00000000 --- a/packetNtx/Driver/NPF_NT4.RC +++ /dev/null @@ -1,107 +0,0 @@ -//Microsoft Developer Studio generated resource script. -// - -#include "..\..\..\winpcap_oem\version.h" -#include "..\..\common\WpcapNames.h" - - -#define APSTUDIO_READONLY_SYMBOLS -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 2 resource. -// -#include "afxres.h" - -///////////////////////////////////////////////////////////////////////////// -#undef APSTUDIO_READONLY_SYMBOLS - -///////////////////////////////////////////////////////////////////////////// -// Neutral resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEU) -#ifdef _WIN32 -LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL -#pragma code_page(1252) -#endif //_WIN32 - -#ifdef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// TEXTINCLUDE -// - -2 TEXTINCLUDE DISCARDABLE -BEGIN - "#include ""afxres.h""\r\n" - "\0" -END - -3 TEXTINCLUDE DISCARDABLE -BEGIN - "\r\n" - "\0" -END - -#endif // APSTUDIO_INVOKED - - -#ifndef _MAC -///////////////////////////////////////////////////////////////////////////// -// -// Version -// - - -VS_VERSION_INFO VERSIONINFO - FILEVERSION WINPCAPOEM_MAJOR,WINPCAPOEM_MINOR,WINPCAPOEM_REV,WINPCAPOEM_BUILD - PRODUCTVERSION WINPCAPOEM_MAJOR,WINPCAPOEM_MINOR,WINPCAPOEM_REV,WINPCAPOEM_BUILD - FILEFLAGSMASK 0x3fL -#ifdef _DEBUG - FILEFLAGS 0x1L -#else - FILEFLAGS 0x0L -#endif - FILEOS 0x40004L - FILETYPE 0x3L - FILESUBTYPE 0x7L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "000004b0" - BEGIN - VALUE "CompanyName", WINPCAPOEM_COMPANY_NAME - VALUE "FileDescription", "npf.sys (NT4) Kernel Driver" - VALUE "FileVersion", WINPCAPOEM_VER_STRING - VALUE "InternalName", WINPCAPOEM_PRODUCT_NAME - VALUE "LegalCopyright", WINPCAPOEM_COPYRIGHT_STRING - VALUE "LegalTrademarks", "" - VALUE "OriginalFilename", "npf.sys" - VALUE "ProductName", WINPCAPOEM_PRODUCT_NAME " (" NPF_DRIVER_NAME ")" - VALUE "ProductVersion", WINPCAPOEM_VER_STRING - VALUE "Build Description", WINPCAPOEM_BUILD_DESCRIPTION - VALUE "PrivateBuild", WINPCAPOEM_PRIVATE_BUILD - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x0, 1200 - END -END - -#endif // !_MAC - -#endif // Neutral resources -///////////////////////////////////////////////////////////////////////////// - - - -#ifndef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 3 resource. -// - - -///////////////////////////////////////////////////////////////////////////// -#endif // not APSTUDIO_INVOKED - diff --git a/packetNtx/Driver/NPF_NT5.RC b/packetNtx/Driver/NPF_NT5.RC deleted file mode 100644 index beb4c14f..00000000 --- a/packetNtx/Driver/NPF_NT5.RC +++ /dev/null @@ -1,107 +0,0 @@ -//Microsoft Developer Studio generated resource script. -// - -#include "..\..\..\winpcap_oem\version.h" -#include "..\..\common\WpcapNames.h" - - -#define APSTUDIO_READONLY_SYMBOLS -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 2 resource. -// -#include "afxres.h" - -///////////////////////////////////////////////////////////////////////////// -#undef APSTUDIO_READONLY_SYMBOLS - -///////////////////////////////////////////////////////////////////////////// -// Neutral resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEU) -#ifdef _WIN32 -LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL -#pragma code_page(1252) -#endif //_WIN32 - -#ifdef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// TEXTINCLUDE -// - -2 TEXTINCLUDE DISCARDABLE -BEGIN - "#include ""afxres.h""\r\n" - "\0" -END - -3 TEXTINCLUDE DISCARDABLE -BEGIN - "\r\n" - "\0" -END - -#endif // APSTUDIO_INVOKED - - -#ifndef _MAC -///////////////////////////////////////////////////////////////////////////// -// -// Version -// - - -VS_VERSION_INFO VERSIONINFO - FILEVERSION WINPCAPOEM_MAJOR,WINPCAPOEM_MINOR,WINPCAPOEM_REV,WINPCAPOEM_BUILD - PRODUCTVERSION WINPCAPOEM_MAJOR,WINPCAPOEM_MINOR,WINPCAPOEM_REV,WINPCAPOEM_BUILD - FILEFLAGSMASK 0x3fL -#ifdef _DEBUG - FILEFLAGS 0x1L -#else - FILEFLAGS 0x0L -#endif - FILEOS 0x40004L - FILETYPE 0x3L - FILESUBTYPE 0x7L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "000004b0" - BEGIN - VALUE "CompanyName", WINPCAPOEM_COMPANY_NAME - VALUE "FileDescription", "npf.sys (NT5) Kernel Driver" - VALUE "FileVersion", WINPCAPOEM_VER_STRING - VALUE "InternalName", WINPCAPOEM_PRODUCT_NAME - VALUE "LegalCopyright", WINPCAPOEM_COPYRIGHT_STRING - VALUE "LegalTrademarks", "" - VALUE "OriginalFilename", "npf.sys" - VALUE "ProductName", WINPCAPOEM_PRODUCT_NAME " (" NPF_DRIVER_NAME ")" - VALUE "ProductVersion", WINPCAPOEM_VER_STRING - VALUE "Build Description", WINPCAPOEM_BUILD_DESCRIPTION - VALUE "PrivateBuild", WINPCAPOEM_PRIVATE_BUILD - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x0, 1200 - END -END - -#endif // !_MAC - -#endif // Neutral resources -///////////////////////////////////////////////////////////////////////////// - - - -#ifndef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 3 resource. -// - - -///////////////////////////////////////////////////////////////////////////// -#endif // not APSTUDIO_INVOKED - diff --git a/packetNtx/Driver/NPF_NT5_x64.RC b/packetNtx/Driver/NPF_NT5_x64.RC deleted file mode 100644 index a120eecd..00000000 --- a/packetNtx/Driver/NPF_NT5_x64.RC +++ /dev/null @@ -1,107 +0,0 @@ -//Microsoft Developer Studio generated resource script. -// - -#include "..\..\..\winpcap_oem\version.h" -#include "..\..\common\WpcapNames.h" - - -#define APSTUDIO_READONLY_SYMBOLS -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 2 resource. -// -#include "afxres.h" - -///////////////////////////////////////////////////////////////////////////// -#undef APSTUDIO_READONLY_SYMBOLS - -///////////////////////////////////////////////////////////////////////////// -// Neutral resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEU) -#ifdef _WIN32 -LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL -#pragma code_page(1252) -#endif //_WIN32 - -#ifdef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// TEXTINCLUDE -// - -2 TEXTINCLUDE DISCARDABLE -BEGIN - "#include ""afxres.h""\r\n" - "\0" -END - -3 TEXTINCLUDE DISCARDABLE -BEGIN - "\r\n" - "\0" -END - -#endif // APSTUDIO_INVOKED - - -#ifndef _MAC -///////////////////////////////////////////////////////////////////////////// -// -// Version -// - - -VS_VERSION_INFO VERSIONINFO - FILEVERSION WINPCAPOEM_MAJOR,WINPCAPOEM_MINOR,WINPCAPOEM_REV,WINPCAPOEM_BUILD - PRODUCTVERSION WINPCAPOEM_MAJOR,WINPCAPOEM_MINOR,WINPCAPOEM_REV,WINPCAPOEM_BUILD - FILEFLAGSMASK 0x3fL -#ifdef _DEBUG - FILEFLAGS 0x1L -#else - FILEFLAGS 0x0L -#endif - FILEOS 0x40004L - FILETYPE 0x3L - FILESUBTYPE 0x7L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "000004b0" - BEGIN - VALUE "CompanyName", WINPCAPOEM_COMPANY_NAME - VALUE "FileDescription", "npf.sys (x64) Kernel Driver" - VALUE "FileVersion", WINPCAPOEM_VER_STRING - VALUE "InternalName", WINPCAPOEM_PRODUCT_NAME - VALUE "LegalCopyright", WINPCAPOEM_COPYRIGHT_STRING - VALUE "LegalTrademarks", "" - VALUE "OriginalFilename", "npf.sys" - VALUE "ProductName", WINPCAPOEM_PRODUCT_NAME " (" NPF_DRIVER_NAME ")" - VALUE "ProductVersion", WINPCAPOEM_VER_STRING - VALUE "Build Description", WINPCAPOEM_BUILD_DESCRIPTION - VALUE "PrivateBuild", WINPCAPOEM_PRIVATE_BUILD - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x0, 1200 - END -END - -#endif // !_MAC - -#endif // Neutral resources -///////////////////////////////////////////////////////////////////////////// - - - -#ifndef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 3 resource. -// - - -///////////////////////////////////////////////////////////////////////////// -#endif // not APSTUDIO_INVOKED - diff --git a/packetNtx/Driver/npf.rc b/packetNtx/Driver/npf.rc new file mode 100644 index 00000000..cd34caa3 --- /dev/null +++ b/packetNtx/Driver/npf.rc @@ -0,0 +1,44 @@ +#include "..\..\..\winpcap_oem\version.h" +#include "..\..\common\WpcapNames.h" + +VS_VERSION_INFO VERSIONINFO + FILEVERSION WINPCAPOEM_MAJOR,WINPCAPOEM_MINOR,WINPCAPOEM_REV,WINPCAPOEM_BUILD + PRODUCTVERSION WINPCAPOEM_MAJOR,WINPCAPOEM_MINOR,WINPCAPOEM_REV,WINPCAPOEM_BUILD + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x40004L + FILETYPE 0x3L + FILESUBTYPE 0x7L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "000004b0" + BEGIN + VALUE "CompanyName", WINPCAPOEM_COMPANY_NAME +#ifdef __NPF_NT4__ + VALUE "FileDescription", "npf.sys (NT4) Kernel Driver" +#elif defined(_AMD64_) + VALUE "FileDescription", "npf.sys (NT5/6 AMD64) Kernel Driver" +#else + VALUE "FileDescription", "npf.sys (NT5/6 x86) Kernel Driver" +#endif + VALUE "FileVersion", WINPCAPOEM_VER_STRING + VALUE "InternalName", WINPCAPOEM_PRODUCT_NAME + VALUE "LegalCopyright", WINPCAPOEM_COPYRIGHT_STRING + VALUE "LegalTrademarks", "" + VALUE "OriginalFilename", "npf.sys" + VALUE "ProductName", WINPCAPOEM_PRODUCT_NAME " (" NPF_DRIVER_NAME ")" + VALUE "ProductVersion", WINPCAPOEM_VER_STRING + VALUE "Build Description", WINPCAPOEM_BUILD_DESCRIPTION + VALUE "PrivateBuild", WINPCAPOEM_PRIVATE_BUILD + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x0, 1200 + END +END From f1dc1b8bed9e49aeedac26423d1ed73256ae39c4 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Fri, 15 Aug 2008 00:00:20 +0000 Subject: [PATCH 253/316] Cleaned up the script. --- packetNtx/CompileDriver.bat | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packetNtx/CompileDriver.bat b/packetNtx/CompileDriver.bat index 357cb5b4..ccf08f5b 100644 --- a/packetNtx/CompileDriver.bat +++ b/packetNtx/CompileDriver.bat @@ -20,7 +20,7 @@ echo ****************************************************** mkdir .\driver\bin 2> nul mkdir .\driver\bin\2k 2> nul -copy driver\NPF_NT5.RC ..\..\winpcap\packetntx\driver\NPF.RC +copy driver\NPF.RC ..\..\winpcap\packetntx\driver\NPF.RC set TARGETPATH=..\..\..\winpcap_oem\PacketNtx\driver\bin\2k set NPF_C_DEFINES=-DNDIS50 -DWPCAP_OEM @@ -52,7 +52,7 @@ echo ******************************************************* mkdir driver\bin 2> nul mkdir driver\bin\xp 2> nul -copy driver\NPF_NT5_x64.RC ..\..\winpcap\packetntx\driver\NPF.RC +copy driver\NPF.RC ..\..\winpcap\packetntx\driver\NPF.RC set TARGETPATH=..\..\..\winpcap_oem\PacketNtx\driver\bin\xp set NPF_C_DEFINES=-DNDIS50 -DWPCAP_OEM @@ -103,7 +103,7 @@ mkdir .\driver\bin\NT4\i386 2> nul mkdir .\driver\bin\NT4\i386\free 2> nul mkdir .\driver\bin\NT4\i386\checked 2> nul -copy driver\NPF_NT4.RC ..\..\winpcap\packetntx\driver\NPF.RC +copy driver\NPF.RC ..\..\winpcap\packetntx\driver\NPF.RC set TARGETPATH=..\..\..\winpcap_oem\PacketNtx\driver\bin\NT4 From bfd022bd37b97220538a7879d10d4c1d010d4249 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Fri, 15 Aug 2008 00:00:54 +0000 Subject: [PATCH 254/316] Copy the x64 binaries. Updated the paths to the binaries after migrating to VS2005. --- create_bin_oem.bat | 38 +++++++++++++++++++++++--------------- create_lib_oem.bat | 7 +++++-- 2 files changed, 28 insertions(+), 17 deletions(-) diff --git a/create_bin_oem.bat b/create_bin_oem.bat index 2e4fb091..44d619fa 100755 --- a/create_bin_oem.bat +++ b/create_bin_oem.bat @@ -5,22 +5,30 @@ IF "%1"=="" (set WPDPACKDESTDIR=.\WpdPack\) ELSE (set WPDPACKDESTDIR=%1) echo Creating \bin folder mkdir %WPDPACKDESTDIR% >nul 2>nul mkdir %WPDPACKDESTDIR%\bin >nul 2>nul +mkdir %WPDPACKDESTDIR%\bin\x64 >nul 2>nul +mkdir %WPDPACKDESTDIR%\bin\x86 >nul 2>nul -if not exist .\oem\WinPcapOem\Binaries_SIGNED\wpcap.dll ( - echo Not using the signed version of the wpcap.dll - xcopy /v /Y .\wpcap\PRJ\Release_REMOTE\wpcap.dll %WPDPACKDESTDIR%\bin\ >nul -) else ( - echo Using the signed version of wpcap.dll - xcopy /v /y .\oem\WinPcaPOem\binaries_signed\wpcap.dll %WPDPACKDESTDIR%\bin\ >nul -) - -if not exist .\oem\WinPcapOem\Binaries_signed\packet.dll ( - echo Not using the signed version of packet.dll - xcopy /v /Y .\OEM\WinPcapOEM\release\packet.dll %WPDPACKDESTDIR%\bin\ >nul -) else ( - echo Using the signed version of packet.dll - xcopy /v /y .\oem\WinPcaPOem\binaries_signed\packet.dll %WPDPACKDESTDIR%\bin\ >nul -) +rem if not exist .\oem\WinPcapOem\Binaries_SIGNED\wpcap.dll ( +rem echo Not using the signed version of the wpcap.dll +rem xcopy /v /Y .\wpcap\PRJ\Release_REMOTE\wpcap.dll %WPDPACKDESTDIR%\bin\ >nul +rem ) else ( +rem echo Using the signed version of wpcap.dll +rem xcopy /v /y .\oem\WinPcaPOem\binaries_signed\wpcap.dll %WPDPACKDESTDIR%\bin\ >nul +rem ) +rem +rem if not exist .\oem\WinPcapOem\Binaries_signed\packet.dll ( +rem echo Not using the signed version of packet.dll +rem xcopy /v /Y .\OEM\WinPcapOEM\release\packet.dll %WPDPACKDESTDIR%\bin\ >nul +rem ) else ( +rem echo Using the signed version of packet.dll +rem xcopy /v /y .\oem\WinPcaPOem\binaries_signed\packet.dll %WPDPACKDESTDIR%\bin\ >nul +rem ) + + +xcopy /v /y ".\wpcap\PRJ\Release REMOTE\x86\wpcap.dll" %WPDPACKDESTDIR%\bin\x86\ >nul +xcopy /v /y ".\wpcap\PRJ\Release REMOTE\x64\wpcap.dll" %WPDPACKDESTDIR%\bin\x64\ >nul +xcopy /v /y ".\OEM\WinpcapOem\Release\x86\packet.dll" %WPDPACKDESTDIR%\bin\x86\ >nul +xcopy /v /y ".\OEM\WinpcapOem\Release\x64\packet.dll" %WPDPACKDESTDIR%\bin\x64\ >nul echo Folder \bin created successfully diff --git a/create_lib_oem.bat b/create_lib_oem.bat index 5c9e6011..0c39b503 100755 --- a/create_lib_oem.bat +++ b/create_lib_oem.bat @@ -5,9 +5,12 @@ IF "%1"=="" (set WPDPACKDESTDIR=.\WpdPack\) ELSE (set WPDPACKDESTDIR=%1) echo Creating \Lib folder mkdir %WPDPACKDESTDIR% >nul 2>nul mkdir %WPDPACKDESTDIR%\Lib >nul 2>nul +mkdir %WPDPACKDESTDIR%\Lib\x64 >nul 2>nul -xcopy /v /Y .\wpcap\PRJ\Release_REMOTE\wpcap.lib %WPDPACKDESTDIR%\Lib\ >nul -xcopy /v /Y .\OEM\WinPcapOEM\release\packet.lib %WPDPACKDESTDIR%\Lib\ >nul +xcopy /v /Y ".\wpcap\PRJ\Release REMOTE\x86\wpcap.lib" %WPDPACKDESTDIR%\Lib\ >nul +xcopy /v /Y ".\wpcap\PRJ\Release REMOTE\x64\wpcap.lib" %WPDPACKDESTDIR%\Lib\x64\ >nul +xcopy /v /Y .\OEM\WinPcapOEM\release\x86\packet.lib %WPDPACKDESTDIR%\Lib\ >nul +xcopy /v /Y .\OEM\WinPcapOEM\release\x64\packet.lib %WPDPACKDESTDIR%\Lib\x64\ >nul echo Folder \Lib created successfully From 65c20149c6e684d53406c19fd678bdaf60061079 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Fri, 15 Aug 2008 00:01:50 +0000 Subject: [PATCH 255/316] Created two new solution configurations for the signed build. --- WinPcap OEM.sln | 42 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 40 insertions(+), 2 deletions(-) diff --git a/WinPcap OEM.sln b/WinPcap OEM.sln index a909614f..9a293d8d 100644 --- a/WinPcap OEM.sln +++ b/WinPcap OEM.sln @@ -6,10 +6,10 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WinPcap NTx Driver", "..\wi EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WinpcapOem", "OEM\WinpcapOem\WinpcapOem.vcproj", "{E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}" ProjectSection(ProjectDependencies) = postProject + {8D305FC1-A748-4C63-B419-585BF03165D9} = {8D305FC1-A748-4C63-B419-585BF03165D9} + {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D} = {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D} {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2} = {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2} {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB} = {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB} - {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D} = {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D} - {8D305FC1-A748-4C63-B419-585BF03165D9} = {8D305FC1-A748-4C63-B419-585BF03165D9} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wpcap", "wpcap\PRJ\wpcap.vcproj", "{CAEF56E3-4959-4C10-81F5-06C8E86C301E}" @@ -27,6 +27,10 @@ Global Debug_TNT|x64 = Debug_TNT|x64 Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 + Release STEP1|Win32 = Release STEP1|Win32 + Release STEP1|x64 = Release STEP1|x64 + Release STEP2|Win32 = Release STEP2|Win32 + Release STEP2|x64 = Release STEP2|x64 Release_TNT|Win32 = Release_TNT|Win32 Release_TNT|x64 = Release_TNT|x64 Release|Win32 = Release|Win32 @@ -40,6 +44,12 @@ Global {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Debug|Win32.ActiveCfg = Debug|Win32 {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Debug|Win32.Build.0 = Debug|Win32 {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Debug|x64.ActiveCfg = Debug|x64 + {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release STEP1|Win32.ActiveCfg = Release|Win32 + {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release STEP1|Win32.Build.0 = Release|Win32 + {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release STEP1|x64.ActiveCfg = Release|x64 + {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release STEP1|x64.Build.0 = Release|x64 + {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release STEP2|Win32.ActiveCfg = Release|Win32 + {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release STEP2|x64.ActiveCfg = Release|x64 {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release_TNT|Win32.ActiveCfg = Release|Win32 {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release_TNT|Win32.Build.0 = Release|Win32 {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release_TNT|x64.ActiveCfg = Release SIGNED|x64 @@ -51,6 +61,10 @@ Global {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Debug_TNT|x64.ActiveCfg = Debug|x64 {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Debug|Win32.ActiveCfg = Debug|Win32 {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Debug|x64.ActiveCfg = Debug|x64 + {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Release STEP1|Win32.ActiveCfg = Release|Win32 + {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Release STEP1|x64.ActiveCfg = Release|x64 + {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Release STEP2|Win32.ActiveCfg = Release|Win32 + {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Release STEP2|x64.ActiveCfg = Release|x64 {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Release_TNT|Win32.ActiveCfg = Release|Win32 {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Release_TNT|x64.ActiveCfg = Release|x64 {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Release|Win32.ActiveCfg = Release|Win32 @@ -63,6 +77,12 @@ Global {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Debug|Win32.Build.0 = Debug|Win32 {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Debug|x64.ActiveCfg = Debug|x64 {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Debug|x64.Build.0 = Debug|x64 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release STEP1|Win32.ActiveCfg = Release|Win32 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release STEP1|x64.ActiveCfg = Release|x64 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release STEP2|Win32.ActiveCfg = Release|Win32 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release STEP2|Win32.Build.0 = Release|Win32 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release STEP2|x64.ActiveCfg = Release|x64 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release STEP2|x64.Build.0 = Release|x64 {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release_TNT|Win32.ActiveCfg = Release_TNT|Win32 {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release_TNT|Win32.Build.0 = Release_TNT|Win32 {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release_TNT|x64.ActiveCfg = Release_TNT|x64 @@ -79,6 +99,12 @@ Global {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Debug|Win32.Build.0 = Debug REMOTE|Win32 {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Debug|x64.ActiveCfg = Debug REMOTE|x64 {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Debug|x64.Build.0 = Debug REMOTE|x64 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release STEP1|Win32.ActiveCfg = Release REMOTE|Win32 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release STEP1|x64.ActiveCfg = Release REMOTE|x64 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release STEP2|Win32.ActiveCfg = Release REMOTE|Win32 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release STEP2|Win32.Build.0 = Release REMOTE|Win32 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release STEP2|x64.ActiveCfg = Release REMOTE|x64 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release STEP2|x64.Build.0 = Release REMOTE|x64 {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release_TNT|Win32.ActiveCfg = Release REMOTE TNT|Win32 {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release_TNT|Win32.Build.0 = Release REMOTE TNT|Win32 {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release_TNT|x64.ActiveCfg = Release REMOTE|x64 @@ -95,6 +121,12 @@ Global {8D305FC1-A748-4C63-B419-585BF03165D9}.Debug|Win32.Build.0 = Debug|Win32 {8D305FC1-A748-4C63-B419-585BF03165D9}.Debug|x64.ActiveCfg = Debug|x64 {8D305FC1-A748-4C63-B419-585BF03165D9}.Debug|x64.Build.0 = Debug|x64 + {8D305FC1-A748-4C63-B419-585BF03165D9}.Release STEP1|Win32.ActiveCfg = Release|Win32 + {8D305FC1-A748-4C63-B419-585BF03165D9}.Release STEP1|Win32.Build.0 = Release|Win32 + {8D305FC1-A748-4C63-B419-585BF03165D9}.Release STEP1|x64.ActiveCfg = Release|x64 + {8D305FC1-A748-4C63-B419-585BF03165D9}.Release STEP1|x64.Build.0 = Release|x64 + {8D305FC1-A748-4C63-B419-585BF03165D9}.Release STEP2|Win32.ActiveCfg = Release|Win32 + {8D305FC1-A748-4C63-B419-585BF03165D9}.Release STEP2|x64.ActiveCfg = Release|x64 {8D305FC1-A748-4C63-B419-585BF03165D9}.Release_TNT|Win32.ActiveCfg = Release|Win32 {8D305FC1-A748-4C63-B419-585BF03165D9}.Release_TNT|Win32.Build.0 = Release|Win32 {8D305FC1-A748-4C63-B419-585BF03165D9}.Release_TNT|x64.ActiveCfg = Release SIGNED|x64 @@ -111,6 +143,12 @@ Global {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Debug|Win32.Build.0 = Debug|Win32 {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Debug|x64.ActiveCfg = Debug|x64 {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Debug|x64.Build.0 = Debug|x64 + {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release STEP1|Win32.ActiveCfg = Release|Win32 + {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release STEP1|Win32.Build.0 = Release|Win32 + {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release STEP1|x64.ActiveCfg = Release|x64 + {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release STEP1|x64.Build.0 = Release|x64 + {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release STEP2|Win32.ActiveCfg = Release|Win32 + {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release STEP2|x64.ActiveCfg = Release|x64 {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release_TNT|Win32.ActiveCfg = Release|Win32 {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release_TNT|Win32.Build.0 = Release|Win32 {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release_TNT|x64.ActiveCfg = Release|x64 From 0f302edfe66afe47c78fffcf1f6042cf1d6be13f Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Fri, 15 Aug 2008 00:02:18 +0000 Subject: [PATCH 256/316] Fixed a compilation warning in x64 mode. --- OEM/WinpcapOem/Security.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/OEM/WinpcapOem/Security.cpp b/OEM/WinpcapOem/Security.cpp index 76b68445..065e5443 100644 --- a/OEM/WinpcapOem/Security.cpp +++ b/OEM/WinpcapOem/Security.cpp @@ -184,7 +184,7 @@ INT IsCredentialValid(LPBYTE credential, DWORD credentialLength) BOOL GetFileDump(LPCSTR lpFilename, LPBYTE dump, INT *pMaxDumpLen) { FILE * fileHandle; - INT byteRead; + size_t byteRead; BOOL fileError; TRACE_ENTER("GetFileDump"); @@ -214,7 +214,7 @@ BOOL GetFileDump(LPCSTR lpFilename, LPBYTE dump, INT *pMaxDumpLen) do { - INT localBytesRead = fread(dump + byteRead, 1, *pMaxDumpLen - byteRead, fileHandle); + size_t localBytesRead = fread(dump + byteRead, 1, *pMaxDumpLen - byteRead, fileHandle); byteRead += localBytesRead; if (localBytesRead == 0) @@ -243,7 +243,7 @@ BOOL GetFileDump(LPCSTR lpFilename, LPBYTE dump, INT *pMaxDumpLen) return FALSE; } - *pMaxDumpLen = byteRead; + *pMaxDumpLen = (INT)byteRead; TRACE_EXIT("GetFileDump"); From 5412c39a541afd79d31ece52dc6c1f294200867c Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Fri, 15 Aug 2008 00:02:59 +0000 Subject: [PATCH 257/316] Migrated the project to VS2005. Simplified the build, still work in progress. --- wpcap/PRJ/wpcap.vcproj | 882 +++++++++++++++++++++++++++++++++-------- 1 file changed, 708 insertions(+), 174 deletions(-) diff --git a/wpcap/PRJ/wpcap.vcproj b/wpcap/PRJ/wpcap.vcproj index 0c37276e..9584c277 100644 --- a/wpcap/PRJ/wpcap.vcproj +++ b/wpcap/PRJ/wpcap.vcproj @@ -1,293 +1,799 @@ + RootNamespace="wpcap" + > + Name="Win32" + /> + + + + ATLMinimizesCRunTimeLibraryUsage="false" + CharacterSet="2" + > + + + + + + CompileAs="0" + /> + + + Name="VCPreLinkEventTool" + /> + SetChecksum="true" + ImportLibrary="$(OutDir)/wpcap.lib" + TargetMachine="1" + /> + + + + + + + + + + + + + + - + HeaderFileName="" + /> + Name="VCCLCompilerTool" + Optimization="2" + InlineFunctionExpansion="1" + AdditionalIncludeDirectories="../../../winpcap/wpcap/libpcap/,../../../winpcap/wpcap/libpcap/bpf,../../../winpcap/wpcap/libpcap/lbl,../../../winpcap/wpcap/libpcap/Win32/Include,../../../winpcap/common,../../../winpcap/wpcap/Win32-Extensions,../../../Airpcap_Devpack/include" + PreprocessorDefinitions="HAVE_ADDRINFO=1;YY_NEVER_INTERACTIVE;yylval=pcap_lval;_USRDLL;LIBPCAP_EXPORTS;HAVE_STRERROR;__STDC__;INET6;_WINDOWS;SIZEOF_CHAR=1;SIZEOF_SHORT=2;SIZEOF_INT=4;WPCAP;NDEBUG;HAVE_SNPRINTF;HAVE_VSNPRINTF;WIN32;HAVE_REMOTE,_U_=;HAVE_AIRPCAP_API;_CRT_SECURE_NO_WARNINGS" + StringPooling="true" + RuntimeLibrary="0" + EnableFunctionLevelLinking="true" + UsePrecompiledHeader="0" + PrecompiledHeaderFile=".\Release_REMOTE_TNT/wpcap.pch" + WarningLevel="3" + SuppressStartupBanner="true" + DebugInformationFormat="3" + CompileAs="0" + /> + Name="VCManagedResourceCompilerTool" + /> + Culture="1040" + /> + + + + + Name="VCXDCMakeTool" + /> + Name="VCBscMakeTool" + /> + Name="VCFxCopTool" + /> + Name="VCAppVerifierTool" + /> + Name="VCWebDeploymentTool" + /> + + ATLMinimizesCRunTimeLibraryUsage="false" + CharacterSet="2" + > + + + + + + CompileAs="0" + /> + + + Name="VCPreLinkEventTool" + /> + ImportLibrary="$(OutDir)/wpcap.lib" + TargetMachine="1" + /> + + + + + + + + + + + + + + - + HeaderFileName="" + /> + Name="VCCLCompilerTool" + Optimization="0" + AdditionalIncludeDirectories="../../../winpcap/wpcap/libpcap/,../../../winpcap/wpcap/libpcap/bpf,../../../winpcap/wpcap/libpcap/lbl,../../../winpcap/wpcap/libpcap/Win32/Include,../../../winpcap/common,../../../winpcap/wpcap/Win32-Extensions,../../../Airpcap_Devpack/include" + PreprocessorDefinitions="HAVE_ADDRINFO;YY_NEVER_INTERACTIVE;yylval=pcap_lval;_USRDLL;LIBPCAP_EXPORTS;HAVE_STRERROR;__STDC__;INET6;_WINDOWS;SIZEOF_CHAR=1;SIZEOF_SHORT=2;SIZEOF_INT=4;WPCAP;_DEBUG;HAVE_SNPRINTF;HAVE_VSNPRINTF;WIN32;HAVE_REMOTE,_U_=;HAVE_AIRPCAP_API;_CRT_SECURE_NO_WARNINGS" + BasicRuntimeChecks="3" + RuntimeLibrary="1" + BufferSecurityCheck="true" + UsePrecompiledHeader="0" + PrecompiledHeaderFile=".\Debug_REMOTE_TNT/wpcap.pch" + BrowseInformation="1" + WarningLevel="3" + SuppressStartupBanner="true" + DebugInformationFormat="3" + CompileAs="0" + /> + Name="VCManagedResourceCompilerTool" + /> + Culture="1040" + /> + + + + + + Name="VCBscMakeTool" + /> + Name="VCFxCopTool" + /> + Name="VCAppVerifierTool" + /> + Name="VCWebDeploymentTool" + /> + Name="VCPostBuildEventTool" + /> + ATLMinimizesCRunTimeLibraryUsage="false" + CharacterSet="2" + > + + + + + + CompileAs="0" + /> + + + Name="VCPreLinkEventTool" + /> + ImportLibrary="$(OutDir)/wpcap.lib" + TargetMachine="1" + /> + + + + + + + + + + + + + + - + HeaderFileName="" + /> + Name="VCCLCompilerTool" + Optimization="0" + AdditionalIncludeDirectories="../../../winpcap/wpcap/libpcap/,../../../winpcap/wpcap/libpcap/bpf,../../../winpcap/wpcap/libpcap/lbl,../../../winpcap/wpcap/libpcap/Win32/Include,../../../winpcap/common,../../../winpcap/wpcap/Win32-Extensions,../../../Airpcap_Devpack/include" + PreprocessorDefinitions="HAVE_ADDRINFO;YY_NEVER_INTERACTIVE;yylval=pcap_lval;_USRDLL;LIBPCAP_EXPORTS;HAVE_STRERROR;__STDC__;INET6;_WINDOWS;SIZEOF_CHAR=1;SIZEOF_SHORT=2;SIZEOF_INT=4;WPCAP;_DEBUG;HAVE_SNPRINTF;HAVE_VSNPRINTF;WIN32;HAVE_REMOTE,_U_=;HAVE_AIRPCAP_API;_CRT_SECURE_NO_WARNINGS" + BasicRuntimeChecks="3" + RuntimeLibrary="1" + BufferSecurityCheck="true" + UsePrecompiledHeader="0" + PrecompiledHeaderFile=".\Debug_REMOTE/wpcap.pch" + BrowseInformation="1" + WarningLevel="3" + SuppressStartupBanner="true" + DebugInformationFormat="3" + CompileAs="0" + /> + Name="VCManagedResourceCompilerTool" + /> + Culture="1040" + /> + + + + Name="VCManifestTool" + /> + Name="VCXDCMakeTool" + /> + Name="VCBscMakeTool" + /> + Name="VCFxCopTool" + /> + Name="VCAppVerifierTool" + /> + + + ATLMinimizesCRunTimeLibraryUsage="false" + CharacterSet="2" + > + + + + + + CompileAs="0" + /> + + + Name="VCPreLinkEventTool" + /> + SetChecksum="true" + ImportLibrary="$(OutDir)/wpcap.lib" + TargetMachine="1" + /> + + + + + + + + + + + + + + - + HeaderFileName="" + /> + Name="VCCLCompilerTool" + Optimization="2" + InlineFunctionExpansion="1" + AdditionalIncludeDirectories="../../../winpcap/wpcap/libpcap/;../../../winpcap/wpcap/libpcap/bpf;../../../winpcap/wpcap/libpcap/lbl;../../../winpcap/wpcap/libpcap/Win32/Include;../../../winpcap/common;"../../../winpcap/wpcap/Win32-Extensions",../../../Airpcap_Devpack/include" + PreprocessorDefinitions="HAVE_ADDRINFO=1;YY_NEVER_INTERACTIVE;yylval=pcap_lval;_USRDLL;LIBPCAP_EXPORTS;HAVE_STRERROR;__STDC__;INET6;_WINDOWS;SIZEOF_CHAR=1;SIZEOF_SHORT=2;SIZEOF_INT=4;WPCAP;NDEBUG;HAVE_SNPRINTF;HAVE_VSNPRINTF;WIN32;HAVE_REMOTE,_U_=;HAVE_AIRPCAP_API;_CRT_SECURE_NO_WARNINGS" + StringPooling="true" + RuntimeLibrary="0" + EnableFunctionLevelLinking="true" + UsePrecompiledHeader="0" + PrecompiledHeaderFile=".\Release_REMOTE/wpcap.pch" + WarningLevel="3" + SuppressStartupBanner="true" + DebugInformationFormat="3" + CompileAs="0" + /> + Name="VCManagedResourceCompilerTool" + /> + Culture="1040" + /> + + + + + + Name="VCBscMakeTool" + /> + Name="VCFxCopTool" + /> + Name="VCAppVerifierTool" + /> + Name="VCWebDeploymentTool" + /> + Name="VCPostBuildEventTool" + /> @@ -295,91 +801,119 @@ + > + RelativePath="..\..\..\winpcap\wpcap\libpcap\bpf_dump.c" + > + RelativePath="..\..\..\winpcap\wpcap\libpcap\bpf\net\bpf_filter.c" + > + RelativePath="..\..\..\winpcap\wpcap\libpcap\bpf_image.c" + > + RelativePath="..\..\..\winpcap\wpcap\libpcap\etherent.c" + > + RelativePath="..\..\..\winpcap\wpcap\libpcap\fad-win32.c" + > + RelativePath="..\..\..\winpcap\wpcap\libpcap\Win32\Src\ffs.c" + > + RelativePath="..\..\..\winpcap\wpcap\libpcap\gencode.c" + > + RelativePath="..\..\..\winpcap\wpcap\libpcap\Win32\Src\getnetbynm.c" + > + RelativePath="..\..\..\winpcap\wpcap\libpcap\Win32\Src\getnetent.c" + > + RelativePath="..\..\..\winpcap\wpcap\libpcap\Win32\Src\getservent.c" + > + RelativePath="..\..\..\winpcap\wpcap\libpcap\grammar.c" + > + RelativePath="..\..\..\winpcap\wpcap\libpcap\inet.c" + > + RelativePath="..\..\..\winpcap\wpcap\libpcap\Win32\Src\inet_aton.c" + > + RelativePath="..\..\..\winpcap\wpcap\libpcap\Win32\Src\inet_net.c" + > + RelativePath="..\..\..\winpcap\wpcap\libpcap\Win32\Src\inet_pton.c" + > + RelativePath="..\..\..\winpcap\wpcap\libpcap\nametoaddr.c" + > + RelativePath="..\..\..\winpcap\wpcap\libpcap\optimize.c" + > + RelativePath="..\..\..\winpcap\wpcap\libpcap\pcap-new.c" + > + RelativePath="..\..\..\winpcap\wpcap\libpcap\pcap-remote.c" + > + RelativePath="..\..\..\winpcap\wpcap\libpcap\pcap-win32.c" + > + RelativePath="..\..\..\winpcap\wpcap\libpcap\pcap.c" + > + RelativePath="..\pcap_oem.c" + > + RelativePath="..\..\..\winpcap\wpcap\libpcap\savefile.c" + > + RelativePath="..\..\..\winpcap\wpcap\libpcap\scanner.c" + > + RelativePath="..\..\..\winpcap\wpcap\libpcap\sockutils.c" + > + RelativePath="..\..\..\winpcap\wpcap\Win32-Extensions\Win32-Extensions.c" + > + RelativePath=".\Wpcap.def" + > + RelativePath=".\wpcap.rc" + > From 5ae9aadff12d7c5b731cfa2a023ffaa49698eac4 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Mon, 18 Aug 2008 22:11:39 +0000 Subject: [PATCH 258/316] Updated project to doxygen 1.5.4 --- dox/prj/winpcap_oem_noc.dox | 1110 ++++++++++++++++++++++++++++++++++- 1 file changed, 1104 insertions(+), 6 deletions(-) diff --git a/dox/prj/winpcap_oem_noc.dox b/dox/prj/winpcap_oem_noc.dox index c17f8c03..cc2afeb0 100644 --- a/dox/prj/winpcap_oem_noc.dox +++ b/dox/prj/winpcap_oem_noc.dox @@ -1,72 +1,498 @@ -# Doxyfile 1.3.7 +# Doxyfile 1.5.4 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project +# +# All text after a hash (#) is considered a comment and will be ignored +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" ") #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- -PROJECT_NAME = "WinPcap Professional" + +# This tag specifies the encoding used for all characters in the config file that +# follow. The default is UTF-8 which is also the encoding used for all text before +# the first occurrence of this tag. Doxygen uses libiconv (or the iconv built into +# libc) for the transcoding. See http://www.gnu.org/software/libiconv for the list of +# possible encodings. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded +# by quotes) that should identify the project. + +PROJECT_NAME = "WinPcap Professional " + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + PROJECT_NUMBER = 4.0.2.1252 + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + OUTPUT_DIRECTORY = ./ + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create +# 4096 sub-directories (in 2 levels) under the output directory of each output +# format and will distribute the generated files over these directories. +# Enabling this option can be useful when feeding doxygen a huge amount of +# source files, where putting all generated files in the same directory would +# otherwise cause performance problems for the file system. + CREATE_SUBDIRS = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, +# Croatian, Czech, Danish, Dutch, Finnish, French, German, Greek, Hungarian, +# Italian, Japanese, Japanese-en (Japanese with English messages), Korean, +# Korean-en, Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian, +# Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian. + OUTPUT_LANGUAGE = English -USE_WINDOWS_ENCODING = YES + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + BRIEF_MEMBER_DESC = NO + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is +# used as the annotated text. Otherwise, the brief description is used as-is. +# If left blank, the following values are used ("$name" is automatically +# replaced with the name of the entity): "The $name class" "The $name widget" +# "The $name file" "is" "provides" "specifies" "contains" +# "represents" "a" "an" "the" + ABBREVIATE_BRIEF = + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. + INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + FULL_PATH_NAMES = NO + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. + STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of +# the path mentioned in the documentation of a class, which tells +# the reader which header file to include in order to use a class. +# If left blank only the name of the header file containing the class +# definition is used. Otherwise one should specify the include paths that +# are normally passed to the compiler using the -I flag. + STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful is your file systems +# doesn't support long names like on DOS, Mac, or CD-ROM. + SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like regular Qt-style comments +# (thus requiring an explicit @brief command for a brief description.) + JAVADOC_AUTOBRIEF = NO + +# If the QT_AUTOBRIEF tag is set to YES then Doxygen will +# interpret the first line (until the first dot) of a Qt-style +# comment as the brief description. If set to NO, the comments +# will behave just like regular Qt-style comments (thus requiring +# an explicit \brief command for a brief description.) + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + MULTILINE_CPP_IS_BRIEF = NO + +# If the DETAILS_AT_TOP tag is set to YES then Doxygen +# will output the detailed description near the top, like JavaDoc. +# If set to NO, the detailed description appears after the member +# documentation. + DETAILS_AT_TOP = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + INHERIT_DOCS = YES -DISTRIBUTE_GROUP_DOC = NO + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce +# a new page for each member. If set to NO, the documentation of a member will +# be part of the file/class/namespace that contains it. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + TAB_SIZE = 4 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + ALIASES = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C +# sources only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + OPTIMIZE_OUTPUT_FOR_C = YES + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java +# sources only. Doxygen will then generate output that is more tailored for Java. +# For instance, namespaces will be presented as packages, qualified scopes +# will look different, etc. + OPTIMIZE_OUTPUT_JAVA = NO + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to +# include (a tag file for) the STL sources as input, then you should +# set this tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. +# func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. +# Doxygen will parse them like normal C++ but will assume all classes use public +# instead of private inheritance when no explicit protection keyword is present. + +SIP_SUPPORT = NO + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + SUBGROUPING = YES + +# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct (or union) is +# documented as struct with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically +# be useful for C code where the coding convention is that all structs are +# typedef'ed and only the typedef is referenced never the struct's name. + +TYPEDEF_HIDES_STRUCT = NO + #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + EXTRACT_PRIVATE = YES + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + EXTRACT_STATIC = YES + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. When set to YES local +# methods, which are defined in the implementation section but not in +# the interface are included in the documentation. +# If set to NO (the default) only methods in the interface are included. + EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be extracted +# and appear in the documentation as a namespace called 'anonymous_namespace{file}', +# where file will be replaced with the base name of the file that contains the anonymous +# namespace. By default anonymous namespace are hidden. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + HIDE_UNDOC_MEMBERS = YES + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + HIDE_UNDOC_CLASSES = YES + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + INTERNAL_DOCS = YES + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. + CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + HIDE_SCOPE_NAMES = YES + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + SHOW_INCLUDE_FILES = YES + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + SORT_BRIEF_DOCS = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + SORT_BY_SCOPE_NAME = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or define consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and defines in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + SHOW_USED_FILES = YES + +# If the sources in your project are distributed over multiple directories +# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy +# in the documentation. The default is NO. + +SHOW_DIRECTORIES = NO + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from the +# version control system). Doxygen will invoke the program by executing (via +# popen()) the command , where is the value of +# the FILE_VERSION_FILTER tag, and is the name of an input file +# provided by doxygen. Whatever the program writes to standard output +# is used as the file version. See the manual for examples. + +FILE_VERSION_FILTER = + #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be abled to get warnings for +# functions that are documented, but have no documentation for their parameters +# or return value. If set to NO (the default) doxygen will only warn about +# wrong or incomplete parameter documentation, but not about the absence of +# documentation. + +WARN_NO_PARAMDOC = NO + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. Optionally the format may contain +# $version, which will be replaced by the version of the file (if it could +# be obtained via FILE_VERSION_FILTER) + WARN_FORMAT = + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + WARN_LOGFILE = + #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + INPUT = ../../../winpcap/dox/libpcap/incs/pcap.h \ ../../../winpcap/dox/libpcap/funcs/pcap.h \ ../../../winpcap/wpcap/Win32-Extensions/Win32-Extensions.h \ @@ -91,156 +517,828 @@ INPUT = ../../../winpcap/dox/libpcap/incs/pcap.h \ ../../../winpcap/wpcap/libpcap/rpcapd/rpcapd.h \ ../../../winpcap/wpcap/libpcap/rpcapd/win32-svc.h \ ../../wpcap/pcap_oem.c + +# This tag can be used to specify the character encoding of the source files that +# doxygen parses. Internally doxygen uses the UTF-8 encoding, which is also the default +# input encoding. Doxygen uses libiconv (or the iconv built into libc) for the transcoding. +# See http://www.gnu.org/software/libiconv for the list of possible encodings. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx +# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 + FILE_PATTERNS = *.cpp \ *.c \ *.h \ *.txt \ *.htm + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + RECURSIVE = YES + +# The EXCLUDE tag can be used to specify files and/or directories that should +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. + EXCLUDE = test + +# The EXCLUDE_SYMLINKS tag can be used select whether or not files or +# directories that are symbolic links (a Unix filesystem feature) are excluded +# from the input. + EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. Note that the wildcards are matched +# against the file with absolute path, so to exclude all test directories +# for example use the pattern */test/* + EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the output. +# The symbol name can be a fully qualified name, a word, or if the wildcard * is used, +# a substring. Examples: ANamespace, AClass, AClass::ANamespace, ANamespace::*Test + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + EXAMPLE_PATH = ../../Examples/ \ ../../../WinPcap/dox/ \ ../ + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + EXAMPLE_PATTERNS = + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + IMAGE_PATH = ../../../Winpcap/dox/pics/ \ ../pics/ + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command , where +# is the value of the INPUT_FILTER tag, and is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. If FILTER_PATTERNS is specified, this tag will be +# ignored. + INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further +# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER +# is applied to all files. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + FILTER_SOURCE_FILES = NO + #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. If you have enabled CALL_GRAPH or CALLER_GRAPH +# then you must also enable this option. If you don't then doxygen will produce +# a warning and turn it on anyway + SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C and C++ comments will always remain visible. + STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES (the default) +# then for each documented function all documented +# functions referencing it will be listed. + REFERENCED_BY_RELATION = YES + +# If the REFERENCES_RELATION tag is set to YES (the default) +# then for each documented function all documented entities +# called/used by that function will be listed. + REFERENCES_RELATION = YES + +# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) +# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from +# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will +# link to the source code. Otherwise they will link to the documentstion. + +REFERENCES_LINK_SOURCE = YES + +# If the USE_HTAGS tag is set to YES then the references to source code +# will point to the HTML generated by the htags(1) tool instead of doxygen +# built-in source browser. The htags tool is part of GNU's global source +# tagging system (see http://www.gnu.org/software/global/global.html). You +# will need version 4.8.6 or higher. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + VERBATIM_HEADERS = YES + #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + ALPHABETICAL_INDEX = NO + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + IGNORE_PREFIX = + #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + HTML_OUTPUT = docs + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. + HTML_HEADER = ../header.htm + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + HTML_FOOTER = ../footer.htm + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# stylesheet in the HTML output directory as well, or it will be erased! + HTML_STYLESHEET = ../style.css + +# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, +# files or namespaces will be aligned in HTML using tables. If set to +# NO a bullet list will be used. + HTML_ALIGN_MEMBERS = YES + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) +# of the generated HTML documentation. + GENERATE_HTMLHELP = YES + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. For this to work a browser that supports +# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox +# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). + +HTML_DYNAMIC_SECTIONS = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + TOC_EXPAND = NO + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index at +# top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. + DISABLE_INDEX = YES + +# This tag can be used to set the number of enum values (range [1..20]) +# that doxygen will group on one line in the generated HTML documentation. + ENUM_VALUES_PER_LINE = 4 + +# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be +# generated containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, +# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are +# probably better off using the HTML help feature. + GENERATE_TREEVIEW = NO + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + TREEVIEW_WIDTH = 250 + #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + GENERATE_LATEX = NO + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + LATEX_OUTPUT = + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. + LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, a4wide, letter, legal and +# executive. If left blank a4wide will be used. + PAPER_TYPE = a4wide + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + LATEX_HEADER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + PDF_HYPERLINKS = NO + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + USE_PDFLATEX = NO + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + LATEX_HIDE_INDICES = NO + #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + RTF_OUTPUT = + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + RTF_HYPERLINKS = NO + +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + RTF_EXTENSIONS_FILE = + #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + MAN_OUTPUT = + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + MAN_EXTENSION = + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + MAN_LINKS = NO + #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + XML_DTD = + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + XML_PROGRAMLISTING = YES + #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + GENERATE_AUTOGEN_DEF = NO + #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. This is useful +# if you want to understand what is going on. On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + PERLMOD_MAKEVAR_PREFIX = + #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + MACRO_EXPANSION = NO + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_DEFINED tags. + EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# in the INCLUDE_PATH (see below) will be search if a #include is found. + SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + PREDEFINED = WIN32 \ _DEBUG_TO_FILE \ EXPAND_AS_DEFINED \ EXPAND_AS_DEFINED \ = + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition. + EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all function-like macros that are alone +# on a line, have an all uppercase name, and do not end with a semicolon. Such +# function macros are typically used for boiler-plate code, and will confuse +# the parser if not removed. + SKIP_FUNCTION_MACROS = YES + #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. +# Optionally an initial location of the external documentation +# can be added for each tagfile. The format of a tag file without +# this location is as follows: +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths or +# URLs. If a location is present for each tag, the installdox tool +# does not have to be run to correct the links. +# Note that each tag file must have a unique name +# (where the name does NOT include the path) +# If a tag file is not located in the directory in which doxygen +# is run, you must also specify the path to the tagfile here. + TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + PERL_PATH = + #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option is superseded by the HAVE_DOT option below. This is only a +# fallback. It is recommended to install and use dot, since it yields more +# powerful graphs. + CLASS_DIAGRAMS = YES + +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see http://www.mcternan.me.uk/mscgen/) to +# produce the chart and insert it in the documentation. The MSCGEN_PATH tag allows you to +# specify the directory where the mscgen tool resides. If left empty the tool is assumed to +# be found in the default search path. + +MSCGEN_PATH = + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + HAVE_DOT = NO + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# the CLASS_DIAGRAMS tag to NO. + CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + COLLABORATION_GRAPH = YES + +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + UML_LOOK = NO + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + TEMPLATE_RELATIONS = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH, SOURCE_BROWSER and HAVE_DOT tags are set to YES then doxygen will +# generate a call dependency graph for every global function or class method. +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable call graphs for selected +# functions only using the \callgraph command. + CALL_GRAPH = NO + +# If the CALLER_GRAPH, SOURCE_BROWSER and HAVE_DOT tags are set to YES then doxygen will +# generate a caller dependency graph for every global function or class method. +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable caller graphs for selected +# functions only using the \callergraph command. + +CALLER_GRAPH = NO + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will graphical hierarchy of all classes instead of a textual one. + GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are png, jpg, or gif +# If left blank png will be used. + DOT_IMAGE_FORMAT = gif + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. + DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + DOTFILE_DIRS = -MAX_DOT_GRAPH_WIDTH = 1024 -MAX_DOT_GRAPH_HEIGHT = 1024 + +# The MAX_DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of +# nodes that will be shown in the graph. If the number of nodes in a graph +# becomes larger than this value, doxygen will truncate the graph, which is +# visualized by representing a node as a red box. Note that doxygen if the number +# of direct children of the root node in a graph is already larger than +# MAX_DOT_GRAPH_NOTES then the graph will not be shown at all. Also note +# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. + +DOT_GRAPH_MAX_NODES = 50 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the +# graphs generated by dot. A depth value of 3 means that only nodes reachable +# from the root by following a path via at most 3 edges will be shown. Nodes +# that lay further from the root node will be omitted. Note that setting this +# option to 1 or 2 may greatly reduce the computation time needed for large +# code bases. Also note that the size of a graph can be further restricted by +# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. + MAX_DOT_GRAPH_DEPTH = 0 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, which results in a white background. +# Warning: Depending on the platform used, enabling this option may lead to +# badly anti-aliased labels on the edges of a graph (i.e. they become hard to +# read). + +DOT_TRANSPARENT = YES + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = NO + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + DOT_CLEANUP = YES + #--------------------------------------------------------------------------- # Configuration::additions related to the search engine #--------------------------------------------------------------------------- + +# The SEARCHENGINE tag specifies whether or not a search engine should be +# used. If set to NO the values of all tags below this one will be ignored. + SEARCHENGINE = NO From e0fc10341918a6c4d756a1289575deca4826795f Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Mon, 18 Aug 2008 22:37:00 +0000 Subject: [PATCH 259/316] Added a preprocessor definition to avoid some CRT warnings. --- packetNtx/Dll/Project/PacketNT4.vcproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packetNtx/Dll/Project/PacketNT4.vcproj b/packetNtx/Dll/Project/PacketNT4.vcproj index 656fe441..88d8333b 100644 --- a/packetNtx/Dll/Project/PacketNT4.vcproj +++ b/packetNtx/Dll/Project/PacketNT4.vcproj @@ -152,7 +152,7 @@ Optimization="2" InlineFunctionExpansion="1" AdditionalIncludeDirectories="../../../../winpcap/Common" - PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;_WINNT4;WPCAP_OEM" + PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;_WINNT4;WPCAP_OEM;_CRT_SECURE_NO_WARNINGS" StringPooling="true" RuntimeLibrary="0" EnableFunctionLevelLinking="true" @@ -347,7 +347,7 @@ Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="../../../../winpcap/Common" - PreprocessorDefinitions="WIN32;_WINDOWS;_WINNT4;WPCAP_OEM" + PreprocessorDefinitions="WIN32;_WINDOWS;_WINNT4;WPCAP_OEM;_CRT_SECURE_NO_WARNINGS" RuntimeLibrary="1" UsePrecompiledHeader="0" PrecompiledHeaderFile="$(IntDir)/Packet.pch" From a367e8dec8f40cffd5e3c05e25113f0b343ed09f Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Mon, 18 Aug 2008 22:37:20 +0000 Subject: [PATCH 260/316] Create the output folders if they don't exist. --- OEM/WinpcapOem/prebuild_debug.bat | 8 ++++++++ OEM/WinpcapOem/prebuild_release.bat | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/OEM/WinpcapOem/prebuild_debug.bat b/OEM/WinpcapOem/prebuild_debug.bat index cb11d264..7613a0dd 100644 --- a/OEM/WinpcapOem/prebuild_debug.bat +++ b/OEM/WinpcapOem/prebuild_debug.bat @@ -3,6 +3,10 @@ echo Copying Debug DLLs if "%1"=="x64" ( +echo Creating folders +mkdir .\Binaries\ > NUL 2>NUL +mkdir .\Binaries\x64 > NUL 2>NUL +mkdir .\Binaries\x86 > NUL 2>NUL echo Copying compiled DLLs for x64 copy "..\..\packetNtx\Dll\Project\Packet (NetMon) Debug\x64\packet.dll" .\Binaries\x64\packet2k.dll copy "..\..\PacketNtx\Dll\Project\Packet (NoNetMon) Debug\x64\packet.dll" .\Binaries\x64\packetVista.dll @@ -11,6 +15,10 @@ copy ..\..\packetNtx\Driver\bin\xp\AMD64\npf.sys .\Binaries\x64\npfx64.sys ) if "%1"=="x86" ( +echo Creating folders +mkdir .\Binaries\ > NUL 2>NUL +mkdir .\Binaries\x64 > NUL 2>NUL +mkdir .\Binaries\x86 > NUL 2>NUL echo Copying compiled DLLs for x86 copy "..\..\packetNtx\Dll\Project\Packet (NT4) Debug\x86\packet.dll" .\Binaries\x86\packetnt.dll copy "..\..\packetNtx\Dll\Project\Packet (NetMon) Debug\x86\packet.dll" .\Binaries\x86\packet2k.dll diff --git a/OEM/WinpcapOem/prebuild_release.bat b/OEM/WinpcapOem/prebuild_release.bat index f98e0d43..127ee1ed 100644 --- a/OEM/WinpcapOem/prebuild_release.bat +++ b/OEM/WinpcapOem/prebuild_release.bat @@ -3,6 +3,10 @@ echo Copying Release DLLs if "%1"=="x64" ( +echo Creating folders +mkdir .\Binaries\ > NUL 2>NUL +mkdir .\Binaries\x64 > NUL 2>NUL +mkdir .\Binaries\x86 > NUL 2>NUL echo Copying compiled DLLs for x64 copy "..\..\packetNtx\Dll\Project\Packet (NetMon) Release\x64\packet.dll" .\Binaries\x64\packet2k.dll copy "..\..\PacketNtx\Dll\Project\Packet (NoNetMon) Release\x64\packet.dll" .\Binaries\x64\packetVista.dll @@ -11,6 +15,10 @@ copy ..\..\packetNtx\Driver\bin\xp\AMD64\npf.sys .\Binaries\x64\npfx64.sys ) if "%1"=="x86" ( +echo Creating folders +mkdir .\Binaries\ > NUL 2>NUL +mkdir .\Binaries\x64 > NUL 2>NUL +mkdir .\Binaries\x86 > NUL 2>NUL echo Copying compiled DLLs for x86 copy "..\..\packetNtx\Dll\Project\Packet (NT4) Release\x86\packet.dll" .\Binaries\x86\packetnt.dll copy "..\..\packetNtx\Dll\Project\Packet (NetMon) Release\x86\packet.dll" .\Binaries\x86\packet2k.dll From 6af5552434f0081ed47358f5a6d75d6ef25b44ad Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Mon, 18 Aug 2008 22:37:43 +0000 Subject: [PATCH 261/316] Updated the release procedures after migrating to VS2005. --- release procedures WOEM.txt | 120 +++++++++++++----------------------- 1 file changed, 44 insertions(+), 76 deletions(-) diff --git a/release procedures WOEM.txt b/release procedures WOEM.txt index 98b2350b..9940fdf5 100644 --- a/release procedures WOEM.txt +++ b/release procedures WOEM.txt @@ -1,4 +1,4 @@ -$Header: /usr/cvsroot/winpcap_oem/release\040procedures\040WOEM.txt,v 1.13 2007/01/22 23:41:46 gianlucav Exp $ +$Header: /usr/cvsroot/winpcap_oem/release\040procedures\040WOEM.txt,v 1.14 2007/11/07 22:10:27 gianlucav Exp $ WINPCAP PRO RELEASE PROCEDURE ============================= @@ -9,10 +9,11 @@ of non-signed builds. Needed tools ------------ -- Visual Studio .NET 2003 +- Visual Studio .NET 2005 SP1 (both x86 and x64 build environments) +- WDK 6000. - The cygnus environment on your path (needed to execute step 11 and 12). In particular you will need to have flex, bison, patch. -- Doxygen 1.5.1 installed and on the path +- Doxygen 1.5.4 installed and on the path Dependencies ------------ @@ -31,7 +32,7 @@ How to compile WinPcap PRO (NOT for the Toolkit) 2. Modify the version info into %BUILD_TREE%\winpcap_oem\version.h. The version is x.y.2.z -3. Modify the doxumentation version in the file +3. Modify the documentation version in the file %BUILD_TREE%\winpcap_oem\dox\prj\winpcap_oem_noc.dox 4. Modify the device string into @@ -40,7 +41,7 @@ How to compile WinPcap PRO (NOT for the Toolkit) 5. Download the libpcap sources (usually 0_9 branch) into %BUILD_TREE%\libpcap_ -6. Be sure that the sources of libpcap do *not* contain any CVS folder. The tarball usually +6. Be sure that the sources of libpcap do *not* contain any CVS folder. The tarball usually contains the CVS folders if it's a daily snapshot. If any, remove them. 7. Commit @@ -67,17 +68,17 @@ How to compile WinPcap PRO (NOT for the Toolkit) 13. CD into %BUILD_TREE%\winpcap\wpcap\prj and execute "build_scanner_parser.bat" -13a. Check that the version of libpcap in +14. Check that the version of libpcap in %BUILD_TREE%\winpcap\wpcap\libpcap\pcap.c line 865 "static const char pcap_version_string[] = "libpcap version 0.9[.x]";" makes sense (??? WHAT DOES IT MEAN???) -13b. Check that the version of wpcap in +15. Check that the version of wpcap in %BUILD_TREE%\winpcap\wpcap\libpcap\pcap.c line 875 "static const char wpcap_version_string[] = "3.1";" is correct. -14. Zip the contents of the six folders +16. Zip the contents of the six folders %BUILD_TREE%\winpcap_oem %BUILD_TREE%\winpcap %BUILD_TREE%\libpcap_ @@ -87,88 +88,59 @@ How to compile WinPcap PRO (NOT for the Toolkit) V %BUILD_TREE%\sources.zip -15. Open a Win 2000 DDK Free build environment. Go into +17. Open a Win 2000 DDK Free build environment. Go into %BUILD_TREE%\winpcap_oem\packetntx. Execute "compileDriver.bat". Prefast 1.5.2402 should issue 8 warnings (20071107). Close the build environment. - NOTE: DO NOT EXECUTE 15. and 16. and 17. at the same time, they overwrite files in - the build process that are incompatible between the two builds. -16. Open the WinNT4 DDK Release build environment. Go into +18. Open the WinNT4 DDK Release build environment. Go into %BUILD_TREE%\winpcap_oem\packetntx. Execute "compileDriver.bat". Close the build environment. - NOTE: DO NOT EXECUTE 15. and 16. and 17. at the same time, they overwrite files in - the build process that are incompatible between the two builds. - -17. Open the Windows Server 2003 Free x64 build environment. Go into +19. Open the Windows Server 2003 Free x64 build environment. Go into %BUILD_TREE%\winpcap_oem\packetntx. Execute "compileDriver.bat". Close the build environment. - NOTE: DO NOT EXECUTE 15. and 16. and 17. at the same time, they overwrite files in - the build process that are incompatible between the two builds. - -SIGNED BINARIES BUILD +20. Open %BUILD_TREE%\winpcap_oem\MakeAll.sln with Visual Studio 2005 SP1. - 18s. Open %BUILD_TREE%\winpcap_oem\WinPcap OEM.sln with Visual Studio 2003. - Choose the "Release SIGNED STEP1" configuration, and then use Build->Rebuild Solution. - No warnings should be generated. +21. Choose the "Release|Win32" configuration, and then use Build->Rebuild Solution. + No warnings should be generated. - NOTE(GV 20071107): due to a bug in the build procedure, first you need to build with the - "Release" configuration, then Rebuild with the "Release SIGNED STEP1" configuration. - - 19s. Sign all the binaries in - %BUILD_TREE%\winpcap_oem\OEM\WinPcapOem\Binaries_SIGNED, namely - npfnt.sys - npf2k.sys - npfx64.sys - packetnt.dll - packet2k.dll - packetVista.dll +22. Choose the "Release|X64" configuration, and then use Build->Rebuild Solution. + No warnings should be generated. + +23. If you are NOT building a SIGNED build, the build is complete :-) + +24. Sign all the binaries in + %BUILD_TREE%\winpcap_oem\OEM\WinPcapOem\Binaries, namely + x86\npfnt.sys + x86\npf2k.sys + x86\packetnt.dll + x86\packet2k.dll + x86\packetVista.dll + x64\npfx64.sys + x64\packet2k.dll + x64\packetVista.dll with the company certificate + cross certificate The generic command is - signtool sign /v /ac MSCV-VSClass3.cer /s my /n "CACE TECHNOLOGIES, LLC" + signtool sign /v /ac MSCV-VSClass3.cer /s my /n "CACE Technologies, Inc." /t http://timestamp.verisign.com/scripts/timestamp.dll - 20s. Go back to Vistual studio 2003. Choose the "Release SIGNED STEP2" configuration, and then - use Build->Rebuild solution. Some warnings should be generated when compiling wpcap.dll. - - 21s. Sign the following binaries in - %BUILD_TREE%\winpcap_oem\OEM\WinPcapOem\Binaries_SIGNED\packet.dll - %BUILD_TREE%\winpcap_oem\OEM\WinPcapOem\Binaries_SIGNED\wpcap.dll +25. Go back to Vistual studio 2005. Choose the "Release STEP2" configuration, and then + use Build->Rebuild solution. + IT IS IMPERATIVE THAT YOU CHOOSE "REBUILD" SO THAT THE SIGNED BINARIES ARE USED. + +26. Sign the following binaries + %BUILD_TREE%\winpcap_oem\wpcap\PRJ\Release REMOTE\x86\wpcap.dll + %BUILD_TREE%\winpcap_oem\wpcap\PRJ\Release REMOTE\x64\wpcap.dll + %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\Release\x86\packet.dll + %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\Release\x64\packet.dll with the company certificate + cross certificate - - 21s. The build is complete. Check the versions *and* signature of the - following files: - %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\Binaries_SIGNED\wpcap.dll - %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\Binaries_SIGNED\packet.dll - %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\Binaries_SIGNED\npf2k.sys - %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\Binaries_SIGNED\npfnt.sys - %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\Binaries_SIGNED\npfx64.sys - %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\Binaries_SIGNED\packet2k.dll - %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\Binaries_SIGNED\packetnt.dll - %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\Binaries_SIGNED\packetVista.dll - -UNSIGNED BINARIES BUILD - -18u. Open %BUILD_TREE%\winpcap_oem\WinPcap OEM.sln with Visual Studio 2003. - Choose the "Release" configuration, and then use Build->Rebuild Solution. - Some warnings should be generated when compiling wpcap.dll. - -19u. The build is complete. Check the versions of the following files - %BUILD_TREE%\winpcap_oem\wpcap\PRJ\release_REMOTE\wpcap.dll - %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\Release\packet.dll - %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\binaries\npf2k.sys - %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\binaries\npfnt.sys - %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\binaries\npfx64.sys - %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\binaries\packet2k.dll - %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\binaries\packetnt.dll - %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\binaries\packetVista.dll - +27. The build is complete. How to create the developer's pack for WinPcap PRO (NOT for the Toolkit) ------------------------------------------------------------------------ @@ -185,12 +157,11 @@ How to create the developer's pack for WinPcap PRO (NOT for the Toolkit) d. Creation of the Examples and Examples-pcap folders (no errors/warnings) e. creation of the documentation. One error copying some *.gif files is reported. -NOTE: the script gives precedence to the signed binaries, i.e. the ones in the - Binaries_SIGNED\ folder. - How to create the developer's pack for WinPcap PRO (NOT for the Toolkit) with NpfIm loading support (IBM) --------------------------------------------------------------------------------------------------------- +TO BE UPDATED (GV20080818) + 1. After the build is completed, in a command prompt go to %BUILD_TREE%\winpcap_oem @@ -204,14 +175,11 @@ How to create the developer's pack for WinPcap PRO (NOT for the Toolkit) with Np e. creation of the documentation. One error copying some *.gif files is reported. f. copy of the NpfIm files. -NOTE: the script gives precedence to the signed binaries, i.e. the ones in the - Binaries_SIGNED\ folder. - - SCM procedures -------------- NpfIm BUILD: +TO BE UPDATED (GV20080818) 1a. %BUILD_TREE%\winpcap_oem\wpdpack_NpfIm\ | v From 0c3e8db370844c5410ba56c8d3319b8866e3797c Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Mon, 18 Aug 2008 22:38:17 +0000 Subject: [PATCH 262/316] Got rid of the "Release STEP 1" configuration. --- OEM/WinpcapOem/WinpcapOem.sln | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/OEM/WinpcapOem/WinpcapOem.sln b/OEM/WinpcapOem/WinpcapOem.sln index 1690d882..eb70fe45 100644 --- a/OEM/WinpcapOem/WinpcapOem.sln +++ b/OEM/WinpcapOem/WinpcapOem.sln @@ -9,6 +9,8 @@ Global Debug_TNT|x64 = Debug_TNT|x64 Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 + Release STEP 1|Win32 = Release STEP 1|Win32 + Release STEP 1|x64 = Release STEP 1|x64 Release_TNT|Win32 = Release_TNT|Win32 Release_TNT|x64 = Release_TNT|x64 Release|Win32 = Release|Win32 @@ -23,6 +25,10 @@ Global {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Debug|Win32.Build.0 = Debug|Win32 {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Debug|x64.ActiveCfg = Debug|x64 {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Debug|x64.Build.0 = Debug|x64 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release STEP 1|Win32.ActiveCfg = Release|Win32 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release STEP 1|Win32.Build.0 = Release|Win32 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release STEP 1|x64.ActiveCfg = Release|x64 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release STEP 1|x64.Build.0 = Release|x64 {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release_TNT|Win32.ActiveCfg = Release_TNT|Win32 {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release_TNT|Win32.Build.0 = Release_TNT|Win32 {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release_TNT|x64.ActiveCfg = Release_TNT|x64 From 9716f2c98c2b17302a2699bb1722d2970b0f4c7a Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Mon, 18 Aug 2008 22:47:29 +0000 Subject: [PATCH 263/316] Updated version to 4.0.2.1325 --- dox/prj/winpcap_oem_noc.dox | 2 +- version.h | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dox/prj/winpcap_oem_noc.dox b/dox/prj/winpcap_oem_noc.dox index cc2afeb0..880cb914 100644 --- a/dox/prj/winpcap_oem_noc.dox +++ b/dox/prj/winpcap_oem_noc.dox @@ -31,7 +31,7 @@ PROJECT_NAME = "WinPcap Professional " # This could be handy for archiving the generated documentation or # if some version control system is used. -PROJECT_NUMBER = 4.0.2.1252 +PROJECT_NUMBER = 4.0.2.1325 # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. diff --git a/version.h b/version.h index 9fe52a73..cff9194e 100644 --- a/version.h +++ b/version.h @@ -15,14 +15,14 @@ #define WINPCAPOEM_MAJOR 4 #define WINPCAPOEM_MINOR 0 #define WINPCAPOEM_REV 2 -#define WINPCAPOEM_BUILD 1252 +#define WINPCAPOEM_BUILD 1325 -#define WINPCAPOEM_VER_STRING "4.0.2.1252.Pro" +#define WINPCAPOEM_VER_STRING "4.0.2.1325.Pro" #define WINPCAPOEM_COMPANY_NAME "CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_NAME "Packet.dll Wrapper" -#define WINPCAPOEM_VERSION_STRING "4.0.2.1252.Pro" +#define WINPCAPOEM_VERSION_STRING "4.0.2.1325.Pro" #define WINPCAPOEM_PRODUCT_NAME "WinPcap Professional" #define WINPCAPOEM_COPYRIGHT_STRING "Copyright © 2005-2008 CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_FILENAME "Packet.dll (wrapper)" From 8f3f63e2135ef608371175efe655d611b2f8e0cc Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Mon, 18 Aug 2008 23:02:56 +0000 Subject: [PATCH 264/316] Renamed the global solution into MakeAll.sln --- MakeAll.sln | 144 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 144 insertions(+) create mode 100644 MakeAll.sln diff --git a/MakeAll.sln b/MakeAll.sln new file mode 100644 index 00000000..a40f79f7 --- /dev/null +++ b/MakeAll.sln @@ -0,0 +1,144 @@ +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Packet (NT4)", "packetNtx\Dll\Project\PacketNT4.vcproj", "{33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WinPcap NTx Driver", "..\winpcap\packetNtx\driver\WinPcap NTx Driver_2003.vcproj", "{5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WinpcapOem", "OEM\WinpcapOem\WinpcapOem.vcproj", "{E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}" + ProjectSection(ProjectDependencies) = postProject + {8D305FC1-A748-4C63-B419-585BF03165D9} = {8D305FC1-A748-4C63-B419-585BF03165D9} + {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D} = {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D} + {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2} = {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2} + {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB} = {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wpcap", "wpcap\PRJ\wpcap.vcproj", "{CAEF56E3-4959-4C10-81F5-06C8E86C301E}" + ProjectSection(ProjectDependencies) = postProject + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D} = {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Packet (NoNetMon)", "packetNtx\Dll\Project\PacketVista.vcproj", "{8D305FC1-A748-4C63-B419-585BF03165D9}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Packet (NetMon)", "packetNtx\Dll\Project\PacketNetMon.vcproj", "{A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug_TNT|Win32 = Debug_TNT|Win32 + Debug_TNT|x64 = Debug_TNT|x64 + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release STEP2|Win32 = Release STEP2|Win32 + Release STEP2|x64 = Release STEP2|x64 + Release_TNT|Win32 = Release_TNT|Win32 + Release_TNT|x64 = Release_TNT|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Debug_TNT|Win32.ActiveCfg = Debug|Win32 + {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Debug_TNT|Win32.Build.0 = Debug|Win32 + {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Debug_TNT|x64.ActiveCfg = Debug|x64 + {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Debug_TNT|x64.Build.0 = Debug|x64 + {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Debug|Win32.ActiveCfg = Debug|Win32 + {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Debug|Win32.Build.0 = Debug|Win32 + {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Debug|x64.ActiveCfg = Debug|x64 + {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release STEP2|Win32.ActiveCfg = Release|Win32 + {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release STEP2|x64.ActiveCfg = Release|x64 + {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release_TNT|Win32.ActiveCfg = Release|Win32 + {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release_TNT|Win32.Build.0 = Release|Win32 + {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release_TNT|x64.ActiveCfg = Release SIGNED|x64 + {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release_TNT|x64.Build.0 = Release SIGNED|x64 + {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release|Win32.ActiveCfg = Release|Win32 + {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release|Win32.Build.0 = Release|Win32 + {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release|x64.ActiveCfg = Release|x64 + {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Debug_TNT|Win32.ActiveCfg = Debug|Win32 + {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Debug_TNT|x64.ActiveCfg = Debug|x64 + {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Debug|Win32.ActiveCfg = Debug|Win32 + {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Debug|x64.ActiveCfg = Debug|x64 + {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Release STEP2|Win32.ActiveCfg = Release|Win32 + {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Release STEP2|x64.ActiveCfg = Release|x64 + {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Release_TNT|Win32.ActiveCfg = Release|Win32 + {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Release_TNT|x64.ActiveCfg = Release|x64 + {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Release|Win32.ActiveCfg = Release|Win32 + {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Release|x64.ActiveCfg = Release|x64 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Debug_TNT|Win32.ActiveCfg = Debug_TNT|Win32 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Debug_TNT|Win32.Build.0 = Debug_TNT|Win32 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Debug_TNT|x64.ActiveCfg = Debug_TNT|x64 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Debug_TNT|x64.Build.0 = Debug_TNT|x64 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Debug|Win32.ActiveCfg = Debug|Win32 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Debug|Win32.Build.0 = Debug|Win32 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Debug|x64.ActiveCfg = Debug|x64 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Debug|x64.Build.0 = Debug|x64 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release STEP2|Win32.ActiveCfg = Release|Win32 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release STEP2|Win32.Build.0 = Release|Win32 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release STEP2|x64.ActiveCfg = Release|x64 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release STEP2|x64.Build.0 = Release|x64 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release_TNT|Win32.ActiveCfg = Release_TNT|Win32 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release_TNT|Win32.Build.0 = Release_TNT|Win32 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release_TNT|x64.ActiveCfg = Release_TNT|x64 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release_TNT|x64.Build.0 = Release_TNT|x64 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release|Win32.ActiveCfg = Release|Win32 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release|Win32.Build.0 = Release|Win32 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release|x64.ActiveCfg = Release|x64 + {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Release|x64.Build.0 = Release|x64 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Debug_TNT|Win32.ActiveCfg = Debug REMOTE TNT|Win32 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Debug_TNT|Win32.Build.0 = Debug REMOTE TNT|Win32 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Debug_TNT|x64.ActiveCfg = Debug REMOTE|x64 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Debug_TNT|x64.Build.0 = Debug REMOTE|x64 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Debug|Win32.ActiveCfg = Debug REMOTE|Win32 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Debug|Win32.Build.0 = Debug REMOTE|Win32 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Debug|x64.ActiveCfg = Debug REMOTE|x64 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Debug|x64.Build.0 = Debug REMOTE|x64 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release STEP2|Win32.ActiveCfg = Release REMOTE|Win32 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release STEP2|Win32.Build.0 = Release REMOTE|Win32 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release STEP2|x64.ActiveCfg = Release REMOTE|x64 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release STEP2|x64.Build.0 = Release REMOTE|x64 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release_TNT|Win32.ActiveCfg = Release REMOTE TNT|Win32 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release_TNT|Win32.Build.0 = Release REMOTE TNT|Win32 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release_TNT|x64.ActiveCfg = Release REMOTE|x64 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release_TNT|x64.Build.0 = Release REMOTE|x64 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release|Win32.ActiveCfg = Release REMOTE|Win32 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release|Win32.Build.0 = Release REMOTE|Win32 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release|x64.ActiveCfg = Release REMOTE|x64 + {CAEF56E3-4959-4C10-81F5-06C8E86C301E}.Release|x64.Build.0 = Release REMOTE|x64 + {8D305FC1-A748-4C63-B419-585BF03165D9}.Debug_TNT|Win32.ActiveCfg = Debug|Win32 + {8D305FC1-A748-4C63-B419-585BF03165D9}.Debug_TNT|Win32.Build.0 = Debug|Win32 + {8D305FC1-A748-4C63-B419-585BF03165D9}.Debug_TNT|x64.ActiveCfg = Debug|x64 + {8D305FC1-A748-4C63-B419-585BF03165D9}.Debug_TNT|x64.Build.0 = Debug|x64 + {8D305FC1-A748-4C63-B419-585BF03165D9}.Debug|Win32.ActiveCfg = Debug|Win32 + {8D305FC1-A748-4C63-B419-585BF03165D9}.Debug|Win32.Build.0 = Debug|Win32 + {8D305FC1-A748-4C63-B419-585BF03165D9}.Debug|x64.ActiveCfg = Debug|x64 + {8D305FC1-A748-4C63-B419-585BF03165D9}.Debug|x64.Build.0 = Debug|x64 + {8D305FC1-A748-4C63-B419-585BF03165D9}.Release STEP2|Win32.ActiveCfg = Release|Win32 + {8D305FC1-A748-4C63-B419-585BF03165D9}.Release STEP2|x64.ActiveCfg = Release|x64 + {8D305FC1-A748-4C63-B419-585BF03165D9}.Release_TNT|Win32.ActiveCfg = Release|Win32 + {8D305FC1-A748-4C63-B419-585BF03165D9}.Release_TNT|Win32.Build.0 = Release|Win32 + {8D305FC1-A748-4C63-B419-585BF03165D9}.Release_TNT|x64.ActiveCfg = Release SIGNED|x64 + {8D305FC1-A748-4C63-B419-585BF03165D9}.Release_TNT|x64.Build.0 = Release SIGNED|x64 + {8D305FC1-A748-4C63-B419-585BF03165D9}.Release|Win32.ActiveCfg = Release|Win32 + {8D305FC1-A748-4C63-B419-585BF03165D9}.Release|Win32.Build.0 = Release|Win32 + {8D305FC1-A748-4C63-B419-585BF03165D9}.Release|x64.ActiveCfg = Release|x64 + {8D305FC1-A748-4C63-B419-585BF03165D9}.Release|x64.Build.0 = Release|x64 + {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Debug_TNT|Win32.ActiveCfg = Debug|Win32 + {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Debug_TNT|Win32.Build.0 = Debug|Win32 + {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Debug_TNT|x64.ActiveCfg = Debug|x64 + {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Debug_TNT|x64.Build.0 = Debug|x64 + {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Debug|Win32.ActiveCfg = Debug|Win32 + {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Debug|Win32.Build.0 = Debug|Win32 + {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Debug|x64.ActiveCfg = Debug|x64 + {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Debug|x64.Build.0 = Debug|x64 + {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release STEP2|Win32.ActiveCfg = Release|Win32 + {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release STEP2|x64.ActiveCfg = Release|x64 + {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release_TNT|Win32.ActiveCfg = Release|Win32 + {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release_TNT|Win32.Build.0 = Release|Win32 + {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release_TNT|x64.ActiveCfg = Release|x64 + {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release_TNT|x64.Build.0 = Release|x64 + {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release|Win32.ActiveCfg = Release|Win32 + {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release|Win32.Build.0 = Release|Win32 + {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release|x64.ActiveCfg = Release|x64 + {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal From a592e6a4862dcb5895a8f82037068b9e5ab81455 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Mon, 18 Aug 2008 23:07:49 +0000 Subject: [PATCH 265/316] Fixed a lib path. --- wpcap/PRJ/wpcap.vcproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wpcap/PRJ/wpcap.vcproj b/wpcap/PRJ/wpcap.vcproj index 9584c277..0e1dc3de 100644 --- a/wpcap/PRJ/wpcap.vcproj +++ b/wpcap/PRJ/wpcap.vcproj @@ -662,7 +662,7 @@ OutputFile="$(OutDir)/wpcap.dll" LinkIncremental="1" SuppressStartupBanner="true" - AdditionalLibraryDirectories="..\..\OEM\WinPcapOem\Debug\x86" + AdditionalLibraryDirectories="..\..\OEM\WinPcapOem\Release\x86" IgnoreDefaultLibraryNames="" ModuleDefinitionFile=".\wpcap.def" GenerateDebugInformation="true" From ea0f14d151e5ad0dd2688f92d0ab8716d4fb90c0 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Mon, 18 Aug 2008 23:08:34 +0000 Subject: [PATCH 266/316] Build the NT4 x64 version of packet.dll, even if not needed, due to the stoopid way VS2005 manages project dependencies. --- MakeAll.sln | 1 + 1 file changed, 1 insertion(+) diff --git a/MakeAll.sln b/MakeAll.sln index a40f79f7..49aa1f6f 100644 --- a/MakeAll.sln +++ b/MakeAll.sln @@ -51,6 +51,7 @@ Global {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release|Win32.ActiveCfg = Release|Win32 {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release|Win32.Build.0 = Release|Win32 {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release|x64.ActiveCfg = Release|x64 + {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release|x64.Build.0 = Release|x64 {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Debug_TNT|Win32.ActiveCfg = Debug|Win32 {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Debug_TNT|x64.ActiveCfg = Debug|x64 {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Debug|Win32.ActiveCfg = Debug|Win32 From 792be4ad871d93d8f4ca89508d2ef69d6b5af4b4 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Tue, 19 Aug 2008 00:30:26 +0000 Subject: [PATCH 267/316] Added a fake project to copy the files to be embedded as resources in packet.dll --- OEM/WinpcapOem/CopyEmbeddedFiles.vcproj | 326 ++++++++++++++++++++++++ 1 file changed, 326 insertions(+) create mode 100644 OEM/WinpcapOem/CopyEmbeddedFiles.vcproj diff --git a/OEM/WinpcapOem/CopyEmbeddedFiles.vcproj b/OEM/WinpcapOem/CopyEmbeddedFiles.vcproj new file mode 100644 index 00000000..d994cf3f --- /dev/null +++ b/OEM/WinpcapOem/CopyEmbeddedFiles.vcproj @@ -0,0 +1,326 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From ff8996b2a569a617dea78b686a1f30ce7a9b48d9 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Tue, 19 Aug 2008 00:32:47 +0000 Subject: [PATCH 268/316] Moved the prebuild step into a fake separate project. --- OEM/WinpcapOem/WinpcapOem.vcproj | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/OEM/WinpcapOem/WinpcapOem.vcproj b/OEM/WinpcapOem/WinpcapOem.vcproj index a7fa83b1..bf3f24c0 100644 --- a/OEM/WinpcapOem/WinpcapOem.vcproj +++ b/OEM/WinpcapOem/WinpcapOem.vcproj @@ -29,7 +29,7 @@ > Date: Tue, 19 Aug 2008 00:37:55 +0000 Subject: [PATCH 269/316] Moved the prebuild step into a fake separate project. --- MakeAll.sln | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/MakeAll.sln b/MakeAll.sln index 49aa1f6f..5a4442ef 100644 --- a/MakeAll.sln +++ b/MakeAll.sln @@ -6,9 +6,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WinPcap NTx Driver", "..\wi EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WinpcapOem", "OEM\WinpcapOem\WinpcapOem.vcproj", "{E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}" ProjectSection(ProjectDependencies) = postProject - {8D305FC1-A748-4C63-B419-585BF03165D9} = {8D305FC1-A748-4C63-B419-585BF03165D9} - {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D} = {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D} - {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2} = {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2} + {59BDDA0D-E009-4EFC-AE87-64AF3DC17E5B} = {59BDDA0D-E009-4EFC-AE87-64AF3DC17E5B} {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB} = {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB} EndProjectSection EndProject @@ -21,6 +19,13 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Packet (NoNetMon)", "packet EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Packet (NetMon)", "packetNtx\Dll\Project\PacketNetMon.vcproj", "{A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CopyEmbeddedFiles", "OEM\WinpcapOem\CopyEmbeddedFiles.vcproj", "{59BDDA0D-E009-4EFC-AE87-64AF3DC17E5B}" + ProjectSection(ProjectDependencies) = postProject + {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2} = {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2} + {8D305FC1-A748-4C63-B419-585BF03165D9} = {8D305FC1-A748-4C63-B419-585BF03165D9} + {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D} = {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D} + EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug_TNT|Win32 = Debug_TNT|Win32 @@ -38,7 +43,6 @@ Global {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Debug_TNT|Win32.ActiveCfg = Debug|Win32 {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Debug_TNT|Win32.Build.0 = Debug|Win32 {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Debug_TNT|x64.ActiveCfg = Debug|x64 - {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Debug_TNT|x64.Build.0 = Debug|x64 {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Debug|Win32.ActiveCfg = Debug|Win32 {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Debug|Win32.Build.0 = Debug|Win32 {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Debug|x64.ActiveCfg = Debug|x64 @@ -47,11 +51,9 @@ Global {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release_TNT|Win32.ActiveCfg = Release|Win32 {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release_TNT|Win32.Build.0 = Release|Win32 {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release_TNT|x64.ActiveCfg = Release SIGNED|x64 - {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release_TNT|x64.Build.0 = Release SIGNED|x64 {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release|Win32.ActiveCfg = Release|Win32 {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release|Win32.Build.0 = Release|Win32 {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release|x64.ActiveCfg = Release|x64 - {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release|x64.Build.0 = Release|x64 {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Debug_TNT|Win32.ActiveCfg = Debug|Win32 {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Debug_TNT|x64.ActiveCfg = Debug|x64 {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Debug|Win32.ActiveCfg = Debug|Win32 @@ -138,6 +140,24 @@ Global {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release|Win32.Build.0 = Release|Win32 {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release|x64.ActiveCfg = Release|x64 {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2}.Release|x64.Build.0 = Release|x64 + {59BDDA0D-E009-4EFC-AE87-64AF3DC17E5B}.Debug_TNT|Win32.ActiveCfg = Debug|Win32 + {59BDDA0D-E009-4EFC-AE87-64AF3DC17E5B}.Debug_TNT|Win32.Build.0 = Debug|Win32 + {59BDDA0D-E009-4EFC-AE87-64AF3DC17E5B}.Debug_TNT|x64.ActiveCfg = Debug|x64 + {59BDDA0D-E009-4EFC-AE87-64AF3DC17E5B}.Debug_TNT|x64.Build.0 = Debug|x64 + {59BDDA0D-E009-4EFC-AE87-64AF3DC17E5B}.Debug|Win32.ActiveCfg = Debug|Win32 + {59BDDA0D-E009-4EFC-AE87-64AF3DC17E5B}.Debug|Win32.Build.0 = Debug|Win32 + {59BDDA0D-E009-4EFC-AE87-64AF3DC17E5B}.Debug|x64.ActiveCfg = Debug|x64 + {59BDDA0D-E009-4EFC-AE87-64AF3DC17E5B}.Debug|x64.Build.0 = Debug|x64 + {59BDDA0D-E009-4EFC-AE87-64AF3DC17E5B}.Release STEP2|Win32.ActiveCfg = Release|Win32 + {59BDDA0D-E009-4EFC-AE87-64AF3DC17E5B}.Release STEP2|x64.ActiveCfg = Release|x64 + {59BDDA0D-E009-4EFC-AE87-64AF3DC17E5B}.Release_TNT|Win32.ActiveCfg = Release|Win32 + {59BDDA0D-E009-4EFC-AE87-64AF3DC17E5B}.Release_TNT|Win32.Build.0 = Release|Win32 + {59BDDA0D-E009-4EFC-AE87-64AF3DC17E5B}.Release_TNT|x64.ActiveCfg = Release|x64 + {59BDDA0D-E009-4EFC-AE87-64AF3DC17E5B}.Release_TNT|x64.Build.0 = Release|x64 + {59BDDA0D-E009-4EFC-AE87-64AF3DC17E5B}.Release|Win32.ActiveCfg = Release|Win32 + {59BDDA0D-E009-4EFC-AE87-64AF3DC17E5B}.Release|Win32.Build.0 = Release|Win32 + {59BDDA0D-E009-4EFC-AE87-64AF3DC17E5B}.Release|x64.ActiveCfg = Release|x64 + {59BDDA0D-E009-4EFC-AE87-64AF3DC17E5B}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE From 47dfdb9df4e6b2043842e28b60866488cfffa771 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Tue, 19 Aug 2008 18:45:37 +0000 Subject: [PATCH 270/316] Update copyright year. --- dox/footer.htm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dox/footer.htm b/dox/footer.htm index 37017989..815ec18c 100644 --- a/dox/footer.htm +++ b/dox/footer.htm @@ -1,7 +1,7 @@


        -Copyright (c) 2005 - 2007 CACE Technologies. All rights reserved.

    +Copyright (c) 2005 - 2008 CACE Technologies. All rights reserved.

    From a566435baff11c690c5ad2b2faf26cc6d26f8220 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Tue, 19 Aug 2008 18:46:15 +0000 Subject: [PATCH 271/316] Updated the compilation instructions to account for Visual Studio 2005 and x64. --- dox/wpcap_samp.htm | 43 +++++++++++++++++++++++++++++++++++-------- 1 file changed, 35 insertions(+), 8 deletions(-) diff --git a/dox/wpcap_samp.htm b/dox/wpcap_samp.htm index f505f832..1cf88763 100644 --- a/dox/wpcap_samp.htm +++ b/dox/wpcap_samp.htm @@ -15,13 +15,12 @@

    Creating an application that uses WinPcap Professional

    • Include the file pcap.h at the beginning of every source file that uses the functions exported by library.
    • -
    • If your program uses Win32 specific functions of WinPcap, remember to include WPCAP - among the preprocessor definitions.
    • If your program uses the remote extensions (pcap_findalldevs_ex() is among the remote extensions), remember to add HAVE_REMOTE among your preprocessor definitions.
    • Set the options of the linker to include the wpcap.lib library - file. wpcap.lib can - be found in the \lib folder of the WinPcap Professional developer's pack. -
    • Set the options of the linker to include the winsock library file (for + file specific for your target (x86 or x64). wpcap.lib for x86 can + be found in the \lib\x86 folder of the WinPcap Professional developer's + pack, wpcap.lib for x64 can + be found in the \lib\x64 folder.
    • Set the options of the linker to include the winsock library file (for example wsock32.lib). This file is distributed with the C compiler and contains the socket functions for Windows. It is needed by some libpcap functions.
    • @@ -37,13 +36,17 @@

      Creating an application that uses WinPcap Professional

          exit(1);
      }  
    • Place the WinPcap Professional DLLs available in the \bin folder of the - developer's pack into the working directory of your application.
      + developer's pack into the working directory of your application. The DLLs + for x86 are available in the \bin\x86 folder, the ones for x64 are available + in the \lib\x64 folder.
      IMPORTANT NOTE: in order to avoid conflicts with any existing installation of WinPcap, you should avoid putting the WinPcap Professional DLLs in the system folder (usually c:\windows\system32) or generally in a folder on your PATH.
    -

    Remember that:

    +

    How to properly set Microsoft Visual Studio
    +
    +
    Visual Studio 6

    • To add a preprocessor definition, you must select Settings from the Project menu, then select C/C++ from the tab control, and under the category General, you must add @@ -62,10 +65,34 @@

      Creating an application that uses WinPcap Professional

      from the tab control, Include files from the Show directories for combobox, and the add the path in the Directories box.
    +

    Visual Studio 2005 (needed to compile x64 applications)

    +
      +
    • To add a preprocessor definition, you must select Properties from the Project menu, then select C/C++ + from the list control on the left, and under the category Preprocessor, you must add + the definition under the Preprocessor Definitions text box. +
    • To add a new library to the project, you must + select Properties from the Project menu, then select Linker + from the list control on the left, and under the category Input add the name of the new library in the + Additional Dependencies text box.
    • To add a new path where Microsoft Visual + Studio will look for the libraries, + you must select Options from the Tools menu, then + Project and Solutions from the list control on the left, VC++ + Directories, then choose Library Files in the Show directories + for combobox, and the add the path in the box below. +
    • To add a new path where Microsoft Visual + Studio will look for the include files, + you must select Options from the Tools menu, then + Project and Solutions from the list control on the left, VC++ + Directories, then choose Include Files in the Show directories + for combobox, and the add the path in the box below. +
    +

     

    Deploying WinPcap Professional in your application installation

    Installing WinPcap Professional with your application is extremely easy: you should just copy the DLLs available in the \bin folder of the developer's pack (i.e. -packet.dll and wpcap.dll) into the working directory of your application.

    +packet.dll and wpcap.dll) into the working directory of your application. Be +sure to copy the DLLs matching the architecture of your application, x86 or  +x64.

    IMPORTANT NOTE: in order to avoid conflicts with any existing installation of WinPcap, you should avoid putting the WinPcap Professional DLLs in the system folder (usually c:\windows\system32) or generally in a folder on your PATH.

    From 258e392dde0e708b3070930518a5bebc3e641eb8 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Tue, 19 Aug 2008 18:46:38 +0000 Subject: [PATCH 272/316] Added Win2008 among the supported OSes. --- dox/intro.htm | 1 + 1 file changed, 1 insertion(+) diff --git a/dox/intro.htm b/dox/intro.htm index f16d8be7..1e148558 100644 --- a/dox/intro.htm +++ b/dox/intro.htm @@ -75,6 +75,7 @@

    What is WinPcap Professional

  • Windows XP (x86 and x64)
  • Windows Server 2003 (x86 and x64)
  • Windows Vista (x86 and x64).
  • +
  • Windows server 2008 (x86 and x64).
  • From 4c882c9f819e79d2f64313670d3f0c700c0593ce Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Thu, 21 Aug 2008 22:13:06 +0000 Subject: [PATCH 273/316] Updated version to 4.0.2.1328 --- dox/prj/winpcap_oem_noc.dox | 2 +- version.h | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dox/prj/winpcap_oem_noc.dox b/dox/prj/winpcap_oem_noc.dox index 880cb914..e851e487 100644 --- a/dox/prj/winpcap_oem_noc.dox +++ b/dox/prj/winpcap_oem_noc.dox @@ -31,7 +31,7 @@ PROJECT_NAME = "WinPcap Professional " # This could be handy for archiving the generated documentation or # if some version control system is used. -PROJECT_NUMBER = 4.0.2.1325 +PROJECT_NUMBER = 4.0.2.1328 # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. diff --git a/version.h b/version.h index cff9194e..f057d868 100644 --- a/version.h +++ b/version.h @@ -15,14 +15,14 @@ #define WINPCAPOEM_MAJOR 4 #define WINPCAPOEM_MINOR 0 #define WINPCAPOEM_REV 2 -#define WINPCAPOEM_BUILD 1325 +#define WINPCAPOEM_BUILD 1328 -#define WINPCAPOEM_VER_STRING "4.0.2.1325.Pro" +#define WINPCAPOEM_VER_STRING "4.0.2.1328.Pro" #define WINPCAPOEM_COMPANY_NAME "CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_NAME "Packet.dll Wrapper" -#define WINPCAPOEM_VERSION_STRING "4.0.2.1325.Pro" +#define WINPCAPOEM_VERSION_STRING "4.0.2.1328.Pro" #define WINPCAPOEM_PRODUCT_NAME "WinPcap Professional" #define WINPCAPOEM_COPYRIGHT_STRING "Copyright © 2005-2008 CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_FILENAME "Packet.dll (wrapper)" From 24bd3dedc3d5566984739c1a8e68a6142c155dd1 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Fri, 22 Aug 2008 18:36:57 +0000 Subject: [PATCH 274/316] Fixed a typo causing the x86 driver not to be extracted properly from the resources. --- OEM/WinpcapOem/WinpcapOem.rc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OEM/WinpcapOem/WinpcapOem.rc b/OEM/WinpcapOem/WinpcapOem.rc index 7d42590d..cba2993b 100644 --- a/OEM/WinpcapOem/WinpcapOem.rc +++ b/OEM/WinpcapOem/WinpcapOem.rc @@ -34,7 +34,7 @@ IDP_DRIx64 RCDATA MOVEABLE PURE "binaries\\x64\\npfx64.sys" // x86 // IDP_DLL2K RCDATA MOVEABLE PURE "binaries\\x86\\packet2k.dll" -IDP_DRI2 RCDATA MOVEABLE PURE "binaries\\x86\\npf2k.sys" +IDP_DRI2K RCDATA MOVEABLE PURE "binaries\\x86\\npf2k.sys" IDP_DLLNT RCDATA MOVEABLE PURE "binaries\\x86\\packetnt.dll" IDP_DRINT RCDATA MOVEABLE PURE "binaries\\x86\\npfnt.sys" IDP_DLLVISTA RCDATA MOVEABLE PURE "binaries\\x86\\packetVista.dll" From 5a2892371c9af0b7e97a2636b403404ac9b0e390 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Fri, 22 Aug 2008 18:45:50 +0000 Subject: [PATCH 275/316] Minor fixes. --- release procedures WOEM.txt | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/release procedures WOEM.txt b/release procedures WOEM.txt index 9940fdf5..c1a3a0ab 100644 --- a/release procedures WOEM.txt +++ b/release procedures WOEM.txt @@ -1,4 +1,4 @@ -$Header: /usr/cvsroot/winpcap_oem/release\040procedures\040WOEM.txt,v 1.14 2007/11/07 22:10:27 gianlucav Exp $ +$Header: /usr/cvsroot/winpcap_oem/release\040procedures\040WOEM.txt,v 1.15 2008/08/18 22:37:43 gianlucav Exp $ WINPCAP PRO RELEASE PROCEDURE ============================= @@ -69,16 +69,16 @@ How to compile WinPcap PRO (NOT for the Toolkit) "build_scanner_parser.bat" 14. Check that the version of libpcap in - %BUILD_TREE%\winpcap\wpcap\libpcap\pcap.c line 865 + %BUILD_TREE%\winpcap\wpcap\libpcap\pcap.c line 869 "static const char pcap_version_string[] = "libpcap version 0.9[.x]";" makes sense (??? WHAT DOES IT MEAN???) 15. Check that the version of wpcap in - %BUILD_TREE%\winpcap\wpcap\libpcap\pcap.c line 875 + %BUILD_TREE%\winpcap\wpcap\libpcap\pcap.c line 878 "static const char wpcap_version_string[] = "3.1";" is correct. -16. Zip the contents of the six folders +16. Zip the contents of the 5 folders %BUILD_TREE%\winpcap_oem %BUILD_TREE%\winpcap %BUILD_TREE%\libpcap_ @@ -90,8 +90,8 @@ How to compile WinPcap PRO (NOT for the Toolkit) 17. Open a Win 2000 DDK Free build environment. Go into %BUILD_TREE%\winpcap_oem\packetntx. - Execute "compileDriver.bat". Prefast 1.5.2402 should issue 8 warnings - (20071107). + Execute "compileDriver.bat". Prefast 8.0.86081 should issue 21 warnings + (20080821). Close the build environment. 18. Open the WinNT4 DDK Release build environment. Go into @@ -129,18 +129,21 @@ How to compile WinPcap PRO (NOT for the Toolkit) signtool sign /v /ac MSCV-VSClass3.cer /s my /n "CACE Technologies, Inc." /t http://timestamp.verisign.com/scripts/timestamp.dll -25. Go back to Vistual studio 2005. Choose the "Release STEP2" configuration, and then +25. Go back to Visual studio 2005. Choose the "Release STEP2|Win32" configuration, and then use Build->Rebuild solution. IT IS IMPERATIVE THAT YOU CHOOSE "REBUILD" SO THAT THE SIGNED BINARIES ARE USED. -26. Sign the following binaries +26. Choose the "Release STEP2|x64" configuration, and then use Build->Rebuild solution. + IT IS IMPERATIVE THAT YOU CHOOSE "REBUILD" SO THAT THE SIGNED BINARIES ARE USED. + +27. Sign the following binaries %BUILD_TREE%\winpcap_oem\wpcap\PRJ\Release REMOTE\x86\wpcap.dll %BUILD_TREE%\winpcap_oem\wpcap\PRJ\Release REMOTE\x64\wpcap.dll %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\Release\x86\packet.dll %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\Release\x64\packet.dll with the company certificate + cross certificate -27. The build is complete. +28. The build is complete. How to create the developer's pack for WinPcap PRO (NOT for the Toolkit) ------------------------------------------------------------------------ From 15c8e8b0dbcc4b93f77144bbffa0f7196cf2f13d Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Fri, 22 Aug 2008 19:05:18 +0000 Subject: [PATCH 276/316] Updated version to 4.0.2.1329 --- dox/prj/winpcap_oem_noc.dox | 2 +- version.h | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dox/prj/winpcap_oem_noc.dox b/dox/prj/winpcap_oem_noc.dox index e851e487..c3a89256 100644 --- a/dox/prj/winpcap_oem_noc.dox +++ b/dox/prj/winpcap_oem_noc.dox @@ -31,7 +31,7 @@ PROJECT_NAME = "WinPcap Professional " # This could be handy for archiving the generated documentation or # if some version control system is used. -PROJECT_NUMBER = 4.0.2.1328 +PROJECT_NUMBER = 4.0.2.1329 # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. diff --git a/version.h b/version.h index f057d868..a79476ce 100644 --- a/version.h +++ b/version.h @@ -15,14 +15,14 @@ #define WINPCAPOEM_MAJOR 4 #define WINPCAPOEM_MINOR 0 #define WINPCAPOEM_REV 2 -#define WINPCAPOEM_BUILD 1328 +#define WINPCAPOEM_BUILD 1329 -#define WINPCAPOEM_VER_STRING "4.0.2.1328.Pro" +#define WINPCAPOEM_VER_STRING "4.0.2.1329.Pro" #define WINPCAPOEM_COMPANY_NAME "CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_NAME "Packet.dll Wrapper" -#define WINPCAPOEM_VERSION_STRING "4.0.2.1328.Pro" +#define WINPCAPOEM_VERSION_STRING "4.0.2.1329.Pro" #define WINPCAPOEM_PRODUCT_NAME "WinPcap Professional" #define WINPCAPOEM_COPYRIGHT_STRING "Copyright © 2005-2008 CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_FILENAME "Packet.dll (wrapper)" From af1bd73ff23055474a5499fa555f4dcdc72dabbc Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Tue, 2 Sep 2008 23:20:31 +0000 Subject: [PATCH 277/316] Updated version to 4.0.2.1340 --- dox/prj/winpcap_oem_noc.dox | 2 +- version.h | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dox/prj/winpcap_oem_noc.dox b/dox/prj/winpcap_oem_noc.dox index c3a89256..121fc964 100644 --- a/dox/prj/winpcap_oem_noc.dox +++ b/dox/prj/winpcap_oem_noc.dox @@ -31,7 +31,7 @@ PROJECT_NAME = "WinPcap Professional " # This could be handy for archiving the generated documentation or # if some version control system is used. -PROJECT_NUMBER = 4.0.2.1329 +PROJECT_NUMBER = 4.0.2.1340 # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. diff --git a/version.h b/version.h index a79476ce..ec44bf5a 100644 --- a/version.h +++ b/version.h @@ -15,14 +15,14 @@ #define WINPCAPOEM_MAJOR 4 #define WINPCAPOEM_MINOR 0 #define WINPCAPOEM_REV 2 -#define WINPCAPOEM_BUILD 1329 +#define WINPCAPOEM_BUILD 1340 -#define WINPCAPOEM_VER_STRING "4.0.2.1329.Pro" +#define WINPCAPOEM_VER_STRING "4.0.2.1340.Pro" #define WINPCAPOEM_COMPANY_NAME "CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_NAME "Packet.dll Wrapper" -#define WINPCAPOEM_VERSION_STRING "4.0.2.1329.Pro" +#define WINPCAPOEM_VERSION_STRING "4.0.2.1340.Pro" #define WINPCAPOEM_PRODUCT_NAME "WinPcap Professional" #define WINPCAPOEM_COPYRIGHT_STRING "Copyright © 2005-2008 CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_FILENAME "Packet.dll (wrapper)" From 34857d7314354c239fa8176af4aa684cd320f6d9 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 19 Nov 2008 05:28:13 +0000 Subject: [PATCH 278/316] Added a VS2005 project for the driver. --- packetNtx/Driver/Driver.vcproj | 266 +++++++++++++++++++++++++++++++++ 1 file changed, 266 insertions(+) create mode 100644 packetNtx/Driver/Driver.vcproj diff --git a/packetNtx/Driver/Driver.vcproj b/packetNtx/Driver/Driver.vcproj new file mode 100644 index 00000000..38ccfe55 --- /dev/null +++ b/packetNtx/Driver/Driver.vcproj @@ -0,0 +1,266 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 33afa3dcf8f76c8c71ea94f450d030a93a8c5f6e Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 19 Nov 2008 05:29:24 +0000 Subject: [PATCH 279/316] Added a new compilation script based on ddkbuild --- packetNtx/CompileDriverNew.bat | 74 ++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 packetNtx/CompileDriverNew.bat diff --git a/packetNtx/CompileDriverNew.bat b/packetNtx/CompileDriverNew.bat new file mode 100644 index 00000000..dadb6d11 --- /dev/null +++ b/packetNtx/CompileDriverNew.bat @@ -0,0 +1,74 @@ +@echo off + +if "%2" == "checked" ( + set __BUILD_TYPE=checked +) else ( + set __BUILD_TYPE=free +) + +if "%1"=="x86" goto x86_build +if "%1"=="AMD64" goto amd64_build + +echo ****************************************************** +echo ERROR: unknown or unspecified build architecture (%1) +echo ****************************************************** + +goto end + +:x86_build + +echo ****************************************************** +echo * Compiling the driver for Windows NT5.x 32 bit * +echo ****************************************************** + +mkdir driver\bin 2> nul +copy driver\NPF.RC ..\..\winpcap\packetntx\driver\NPF.RC + +set TARGETSUFFIX=\..\..\..\..\winpcap_oem\PacketNtx\driver\bin\2k +set NPF_C_DEFINES=-DNDIS50 -DWPCAP_OEM + +rem ** enable the following line to enable the TME extensions ** +rem set NPF_TME_FILES=tme.c count_packets.c tcp_session.c functions.c bucket_lookup.c normal_lookup.c win_bpf_filter_init.c +rem set NPF_C_DEFINES=%NPF_C_DEFINES% -DHAVE_BUGGY_TME_SUPPORT + +ddkbuild -WDFXP -prefast %__BUILD_TYPE% ..\..\winpcap\packetntx\driver -cefw + +rem ** enable the following line to enable the TME extensions ** +rem set NPF_TME_FILES= +rem set NPF_JIT_FILES= +set NPF_C_DEFINES= +set TARGETSUFFIX= + +goto end + +:amd64_build + +echo ******************************************************* +echo * Compiling the driver for Windows NT5.x x64 (AMD64) * +echo ******************************************************* + +mkdir driver\bin 2> nul +mkdir driver\bin\xp 2> nul + +copy driver\NPF.RC ..\..\winpcap\packetntx\driver\NPF.RC +set TARGETSUFFIX=\..\..\..\..\winpcap_oem\PacketNtx\driver\bin\xp +set NPF_C_DEFINES=-DNDIS50 -DWPCAP_OEM + +rem +rem The TME extensions and the JIT is not supported on x64, at the moment +rem +rem set NPF_TME_FILES= +rem set NPF_JIT_FILES= + +ddkbuild -WDFA64 -prefast %__BUILD_TYPE% ..\..\winpcap\packetntx\driver -cefw + +set NPF_C_DEFINES= +rem set NPF_TME_FILES= +rem set NPF_JIT_FILES= +set TARGETSUFFIX= + +goto end + +:end + +set __BUILD_TYPE= From 3fa7b33fb3f29731080f7f3587234b2bf3afeb31 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 19 Nov 2008 05:31:32 +0000 Subject: [PATCH 280/316] Changed the driver project, changed the build dependencies. --- MakeAll.sln | 35 +++++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/MakeAll.sln b/MakeAll.sln index 5a4442ef..6cfb32b4 100644 --- a/MakeAll.sln +++ b/MakeAll.sln @@ -2,12 +2,10 @@ Microsoft Visual Studio Solution File, Format Version 9.00 # Visual Studio 2005 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Packet (NT4)", "packetNtx\Dll\Project\PacketNT4.vcproj", "{33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WinPcap NTx Driver", "..\winpcap\packetNtx\driver\WinPcap NTx Driver_2003.vcproj", "{5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}" -EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WinpcapOem", "OEM\WinpcapOem\WinpcapOem.vcproj", "{E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}" ProjectSection(ProjectDependencies) = postProject + {0FF1984E-927D-4C8D-AF70-8D53FC745209} = {0FF1984E-927D-4C8D-AF70-8D53FC745209} {59BDDA0D-E009-4EFC-AE87-64AF3DC17E5B} = {59BDDA0D-E009-4EFC-AE87-64AF3DC17E5B} - {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB} = {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wpcap", "wpcap\PRJ\wpcap.vcproj", "{CAEF56E3-4959-4C10-81F5-06C8E86C301E}" @@ -22,10 +20,13 @@ EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CopyEmbeddedFiles", "OEM\WinpcapOem\CopyEmbeddedFiles.vcproj", "{59BDDA0D-E009-4EFC-AE87-64AF3DC17E5B}" ProjectSection(ProjectDependencies) = postProject {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2} = {A3042039-CBC3-4F02-BD4E-A372F2BE2ED2} - {8D305FC1-A748-4C63-B419-585BF03165D9} = {8D305FC1-A748-4C63-B419-585BF03165D9} + {0FF1984E-927D-4C8D-AF70-8D53FC745209} = {0FF1984E-927D-4C8D-AF70-8D53FC745209} {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D} = {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D} + {8D305FC1-A748-4C63-B419-585BF03165D9} = {8D305FC1-A748-4C63-B419-585BF03165D9} EndProjectSection EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WinPcap NTx Driver", "packetNtx\Driver\Driver.vcproj", "{0FF1984E-927D-4C8D-AF70-8D53FC745209}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug_TNT|Win32 = Debug_TNT|Win32 @@ -54,16 +55,6 @@ Global {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release|Win32.ActiveCfg = Release|Win32 {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release|Win32.Build.0 = Release|Win32 {33BCE0DE-2404-4647-8F2D-DA5D00F04A3D}.Release|x64.ActiveCfg = Release|x64 - {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Debug_TNT|Win32.ActiveCfg = Debug|Win32 - {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Debug_TNT|x64.ActiveCfg = Debug|x64 - {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Debug|Win32.ActiveCfg = Debug|Win32 - {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Debug|x64.ActiveCfg = Debug|x64 - {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Release STEP2|Win32.ActiveCfg = Release|Win32 - {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Release STEP2|x64.ActiveCfg = Release|x64 - {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Release_TNT|Win32.ActiveCfg = Release|Win32 - {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Release_TNT|x64.ActiveCfg = Release|x64 - {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Release|Win32.ActiveCfg = Release|Win32 - {5E91F1EF-C30E-43F7-9187-E37A0BDA7FDB}.Release|x64.ActiveCfg = Release|x64 {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Debug_TNT|Win32.ActiveCfg = Debug_TNT|Win32 {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Debug_TNT|Win32.Build.0 = Debug_TNT|Win32 {E491DDDD-D07C-49E8-BA60-0EEA963E2E8D}.Debug_TNT|x64.ActiveCfg = Debug_TNT|x64 @@ -158,6 +149,22 @@ Global {59BDDA0D-E009-4EFC-AE87-64AF3DC17E5B}.Release|Win32.Build.0 = Release|Win32 {59BDDA0D-E009-4EFC-AE87-64AF3DC17E5B}.Release|x64.ActiveCfg = Release|x64 {59BDDA0D-E009-4EFC-AE87-64AF3DC17E5B}.Release|x64.Build.0 = Release|x64 + {0FF1984E-927D-4C8D-AF70-8D53FC745209}.Debug_TNT|Win32.ActiveCfg = Debug|x64 + {0FF1984E-927D-4C8D-AF70-8D53FC745209}.Debug_TNT|x64.ActiveCfg = Debug|x64 + {0FF1984E-927D-4C8D-AF70-8D53FC745209}.Debug_TNT|x64.Build.0 = Debug|x64 + {0FF1984E-927D-4C8D-AF70-8D53FC745209}.Debug|Win32.ActiveCfg = Debug|Win32 + {0FF1984E-927D-4C8D-AF70-8D53FC745209}.Debug|Win32.Build.0 = Debug|Win32 + {0FF1984E-927D-4C8D-AF70-8D53FC745209}.Debug|x64.ActiveCfg = Debug|x64 + {0FF1984E-927D-4C8D-AF70-8D53FC745209}.Debug|x64.Build.0 = Debug|x64 + {0FF1984E-927D-4C8D-AF70-8D53FC745209}.Release STEP2|Win32.ActiveCfg = Release|Win32 + {0FF1984E-927D-4C8D-AF70-8D53FC745209}.Release STEP2|x64.ActiveCfg = Release|x64 + {0FF1984E-927D-4C8D-AF70-8D53FC745209}.Release_TNT|Win32.ActiveCfg = Release|Win32 + {0FF1984E-927D-4C8D-AF70-8D53FC745209}.Release_TNT|x64.ActiveCfg = Release|x64 + {0FF1984E-927D-4C8D-AF70-8D53FC745209}.Release_TNT|x64.Build.0 = Release|x64 + {0FF1984E-927D-4C8D-AF70-8D53FC745209}.Release|Win32.ActiveCfg = Release|Win32 + {0FF1984E-927D-4C8D-AF70-8D53FC745209}.Release|Win32.Build.0 = Release|Win32 + {0FF1984E-927D-4C8D-AF70-8D53FC745209}.Release|x64.ActiveCfg = Release|x64 + {0FF1984E-927D-4C8D-AF70-8D53FC745209}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE From 7db773b5bbb3e2f9d22026a9ad4441fd3a3cc9a3 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 19 Nov 2008 06:17:25 +0000 Subject: [PATCH 281/316] Added YY_NO_UNISTD_H to the preprocessor definitions. --- wpcap/PRJ/wpcap.vcproj | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/wpcap/PRJ/wpcap.vcproj b/wpcap/PRJ/wpcap.vcproj index 0e1dc3de..3fe454ff 100644 --- a/wpcap/PRJ/wpcap.vcproj +++ b/wpcap/PRJ/wpcap.vcproj @@ -53,7 +53,7 @@ Optimization="2" InlineFunctionExpansion="1" AdditionalIncludeDirectories="../../../winpcap/wpcap/libpcap/,../../../winpcap/wpcap/libpcap/bpf,../../../winpcap/wpcap/libpcap/lbl,../../../winpcap/wpcap/libpcap/Win32/Include,../../../winpcap/common,../../../winpcap/wpcap/Win32-Extensions,../../../Airpcap_Devpack/include" - PreprocessorDefinitions="HAVE_ADDRINFO=1;YY_NEVER_INTERACTIVE;yylval=pcap_lval;_USRDLL;LIBPCAP_EXPORTS;HAVE_STRERROR;__STDC__;INET6;_WINDOWS;SIZEOF_CHAR=1;SIZEOF_SHORT=2;SIZEOF_INT=4;WPCAP;NDEBUG;HAVE_SNPRINTF;HAVE_VSNPRINTF;WIN32;HAVE_REMOTE,_U_=;HAVE_AIRPCAP_API;_CRT_SECURE_NO_WARNINGS" + PreprocessorDefinitions="HAVE_ADDRINFO=1;YY_NEVER_INTERACTIVE;yylval=pcap_lval;_USRDLL;LIBPCAP_EXPORTS;HAVE_STRERROR;__STDC__;INET6;_WINDOWS;SIZEOF_CHAR=1;SIZEOF_SHORT=2;SIZEOF_INT=4;WPCAP;NDEBUG;HAVE_SNPRINTF;HAVE_VSNPRINTF;WIN32;HAVE_REMOTE,_U_=;HAVE_AIRPCAP_API;_CRT_SECURE_NO_WARNINGS;YY_NO_UNISTD_H" StringPooling="true" RuntimeLibrary="0" EnableFunctionLevelLinking="true" @@ -152,7 +152,7 @@ Optimization="2" InlineFunctionExpansion="1" AdditionalIncludeDirectories="../../../winpcap/wpcap/libpcap/,../../../winpcap/wpcap/libpcap/bpf,../../../winpcap/wpcap/libpcap/lbl,../../../winpcap/wpcap/libpcap/Win32/Include,../../../winpcap/common,../../../winpcap/wpcap/Win32-Extensions,../../../Airpcap_Devpack/include" - PreprocessorDefinitions="HAVE_ADDRINFO=1;YY_NEVER_INTERACTIVE;yylval=pcap_lval;_USRDLL;LIBPCAP_EXPORTS;HAVE_STRERROR;__STDC__;INET6;_WINDOWS;SIZEOF_CHAR=1;SIZEOF_SHORT=2;SIZEOF_INT=4;WPCAP;NDEBUG;HAVE_SNPRINTF;HAVE_VSNPRINTF;WIN32;HAVE_REMOTE,_U_=;HAVE_AIRPCAP_API;_CRT_SECURE_NO_WARNINGS" + PreprocessorDefinitions="HAVE_ADDRINFO=1;YY_NEVER_INTERACTIVE;yylval=pcap_lval;_USRDLL;LIBPCAP_EXPORTS;HAVE_STRERROR;__STDC__;INET6;_WINDOWS;SIZEOF_CHAR=1;SIZEOF_SHORT=2;SIZEOF_INT=4;WPCAP;NDEBUG;HAVE_SNPRINTF;HAVE_VSNPRINTF;WIN32;HAVE_REMOTE,_U_=;HAVE_AIRPCAP_API;_CRT_SECURE_NO_WARNINGS;YY_NO_UNISTD_H" StringPooling="true" RuntimeLibrary="0" EnableFunctionLevelLinking="true" @@ -250,7 +250,7 @@ Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="../../../winpcap/wpcap/libpcap/,../../../winpcap/wpcap/libpcap/bpf,../../../winpcap/wpcap/libpcap/lbl,../../../winpcap/wpcap/libpcap/Win32/Include,../../../winpcap/common,../../../winpcap/wpcap/Win32-Extensions,../../../Airpcap_Devpack/include" - PreprocessorDefinitions="HAVE_ADDRINFO;YY_NEVER_INTERACTIVE;yylval=pcap_lval;_USRDLL;LIBPCAP_EXPORTS;HAVE_STRERROR;__STDC__;INET6;_WINDOWS;SIZEOF_CHAR=1;SIZEOF_SHORT=2;SIZEOF_INT=4;WPCAP;_DEBUG;HAVE_SNPRINTF;HAVE_VSNPRINTF;WIN32;HAVE_REMOTE,_U_=;HAVE_AIRPCAP_API;_CRT_SECURE_NO_WARNINGS" + PreprocessorDefinitions="HAVE_ADDRINFO;YY_NEVER_INTERACTIVE;yylval=pcap_lval;_USRDLL;LIBPCAP_EXPORTS;HAVE_STRERROR;__STDC__;INET6;_WINDOWS;SIZEOF_CHAR=1;SIZEOF_SHORT=2;SIZEOF_INT=4;WPCAP;_DEBUG;HAVE_SNPRINTF;HAVE_VSNPRINTF;WIN32;HAVE_REMOTE,_U_=;HAVE_AIRPCAP_API;_CRT_SECURE_NO_WARNINGS;YY_NO_UNISTD_H" BasicRuntimeChecks="3" RuntimeLibrary="1" BufferSecurityCheck="true" @@ -346,7 +346,7 @@ Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="../../../winpcap/wpcap/libpcap/,../../../winpcap/wpcap/libpcap/bpf,../../../winpcap/wpcap/libpcap/lbl,../../../winpcap/wpcap/libpcap/Win32/Include,../../../winpcap/common,../../../winpcap/wpcap/Win32-Extensions,../../../Airpcap_Devpack/include" - PreprocessorDefinitions="HAVE_ADDRINFO;YY_NEVER_INTERACTIVE;yylval=pcap_lval;_USRDLL;LIBPCAP_EXPORTS;HAVE_STRERROR;__STDC__;INET6;_WINDOWS;SIZEOF_CHAR=1;SIZEOF_SHORT=2;SIZEOF_INT=4;WPCAP;_DEBUG;HAVE_SNPRINTF;HAVE_VSNPRINTF;WIN32;HAVE_REMOTE,_U_=;HAVE_AIRPCAP_API;_CRT_SECURE_NO_WARNINGS" + PreprocessorDefinitions="HAVE_ADDRINFO;YY_NEVER_INTERACTIVE;yylval=pcap_lval;_USRDLL;LIBPCAP_EXPORTS;HAVE_STRERROR;__STDC__;INET6;_WINDOWS;SIZEOF_CHAR=1;SIZEOF_SHORT=2;SIZEOF_INT=4;WPCAP;_DEBUG;HAVE_SNPRINTF;HAVE_VSNPRINTF;WIN32;HAVE_REMOTE,_U_=;HAVE_AIRPCAP_API;_CRT_SECURE_NO_WARNINGS;YY_NO_UNISTD_H" BasicRuntimeChecks="3" RuntimeLibrary="1" BufferSecurityCheck="true" @@ -442,7 +442,7 @@ Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="../../../winpcap/wpcap/libpcap/,../../../winpcap/wpcap/libpcap/bpf,../../../winpcap/wpcap/libpcap/lbl,../../../winpcap/wpcap/libpcap/Win32/Include,../../../winpcap/common,../../../winpcap/wpcap/Win32-Extensions,../../../Airpcap_Devpack/include" - PreprocessorDefinitions="HAVE_ADDRINFO;YY_NEVER_INTERACTIVE;yylval=pcap_lval;_USRDLL;LIBPCAP_EXPORTS;HAVE_STRERROR;__STDC__;INET6;_WINDOWS;SIZEOF_CHAR=1;SIZEOF_SHORT=2;SIZEOF_INT=4;WPCAP;_DEBUG;HAVE_SNPRINTF;HAVE_VSNPRINTF;WIN32;HAVE_REMOTE,_U_=;HAVE_AIRPCAP_API;_CRT_SECURE_NO_WARNINGS" + PreprocessorDefinitions="HAVE_ADDRINFO;YY_NEVER_INTERACTIVE;yylval=pcap_lval;_USRDLL;LIBPCAP_EXPORTS;HAVE_STRERROR;__STDC__;INET6;_WINDOWS;SIZEOF_CHAR=1;SIZEOF_SHORT=2;SIZEOF_INT=4;WPCAP;_DEBUG;HAVE_SNPRINTF;HAVE_VSNPRINTF;WIN32;HAVE_REMOTE,_U_=;HAVE_AIRPCAP_API;_CRT_SECURE_NO_WARNINGS;YY_NO_UNISTD_H" BasicRuntimeChecks="3" RuntimeLibrary="1" BufferSecurityCheck="true" @@ -537,7 +537,7 @@ Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="../../../winpcap/wpcap/libpcap/,../../../winpcap/wpcap/libpcap/bpf,../../../winpcap/wpcap/libpcap/lbl,../../../winpcap/wpcap/libpcap/Win32/Include,../../../winpcap/common,../../../winpcap/wpcap/Win32-Extensions,../../../Airpcap_Devpack/include" - PreprocessorDefinitions="HAVE_ADDRINFO;YY_NEVER_INTERACTIVE;yylval=pcap_lval;_USRDLL;LIBPCAP_EXPORTS;HAVE_STRERROR;__STDC__;INET6;_WINDOWS;SIZEOF_CHAR=1;SIZEOF_SHORT=2;SIZEOF_INT=4;WPCAP;_DEBUG;HAVE_SNPRINTF;HAVE_VSNPRINTF;WIN32;HAVE_REMOTE,_U_=;HAVE_AIRPCAP_API;_CRT_SECURE_NO_WARNINGS" + PreprocessorDefinitions="HAVE_ADDRINFO;YY_NEVER_INTERACTIVE;yylval=pcap_lval;_USRDLL;LIBPCAP_EXPORTS;HAVE_STRERROR;__STDC__;INET6;_WINDOWS;SIZEOF_CHAR=1;SIZEOF_SHORT=2;SIZEOF_INT=4;WPCAP;_DEBUG;HAVE_SNPRINTF;HAVE_VSNPRINTF;WIN32;HAVE_REMOTE,_U_=;HAVE_AIRPCAP_API;_CRT_SECURE_NO_WARNINGS;YY_NO_UNISTD_H" BasicRuntimeChecks="3" RuntimeLibrary="1" BufferSecurityCheck="true" @@ -634,7 +634,7 @@ Optimization="2" InlineFunctionExpansion="1" AdditionalIncludeDirectories="../../../winpcap/wpcap/libpcap/;../../../winpcap/wpcap/libpcap/bpf;../../../winpcap/wpcap/libpcap/lbl;../../../winpcap/wpcap/libpcap/Win32/Include;../../../winpcap/common;"../../../winpcap/wpcap/Win32-Extensions",../../../Airpcap_Devpack/include" - PreprocessorDefinitions="HAVE_ADDRINFO=1;YY_NEVER_INTERACTIVE;yylval=pcap_lval;_USRDLL;LIBPCAP_EXPORTS;HAVE_STRERROR;__STDC__;INET6;_WINDOWS;SIZEOF_CHAR=1;SIZEOF_SHORT=2;SIZEOF_INT=4;WPCAP;NDEBUG;HAVE_SNPRINTF;HAVE_VSNPRINTF;WIN32;HAVE_REMOTE;_U_=;HAVE_AIRPCAP_API;_CRT_SECURE_NO_WARNINGS" + PreprocessorDefinitions="HAVE_ADDRINFO=1;YY_NEVER_INTERACTIVE;yylval=pcap_lval;_USRDLL;LIBPCAP_EXPORTS;HAVE_STRERROR;__STDC__;INET6;_WINDOWS;SIZEOF_CHAR=1;SIZEOF_SHORT=2;SIZEOF_INT=4;WPCAP;NDEBUG;HAVE_SNPRINTF;HAVE_VSNPRINTF;WIN32;HAVE_REMOTE;_U_=;HAVE_AIRPCAP_API;_CRT_SECURE_NO_WARNINGS;YY_NO_UNISTD_H" StringPooling="true" RuntimeLibrary="0" EnableFunctionLevelLinking="true" @@ -732,7 +732,7 @@ Optimization="2" InlineFunctionExpansion="1" AdditionalIncludeDirectories="../../../winpcap/wpcap/libpcap/;../../../winpcap/wpcap/libpcap/bpf;../../../winpcap/wpcap/libpcap/lbl;../../../winpcap/wpcap/libpcap/Win32/Include;../../../winpcap/common;"../../../winpcap/wpcap/Win32-Extensions",../../../Airpcap_Devpack/include" - PreprocessorDefinitions="HAVE_ADDRINFO=1;YY_NEVER_INTERACTIVE;yylval=pcap_lval;_USRDLL;LIBPCAP_EXPORTS;HAVE_STRERROR;__STDC__;INET6;_WINDOWS;SIZEOF_CHAR=1;SIZEOF_SHORT=2;SIZEOF_INT=4;WPCAP;NDEBUG;HAVE_SNPRINTF;HAVE_VSNPRINTF;WIN32;HAVE_REMOTE,_U_=;HAVE_AIRPCAP_API;_CRT_SECURE_NO_WARNINGS" + PreprocessorDefinitions="HAVE_ADDRINFO=1;YY_NEVER_INTERACTIVE;yylval=pcap_lval;_USRDLL;LIBPCAP_EXPORTS;HAVE_STRERROR;__STDC__;INET6;_WINDOWS;SIZEOF_CHAR=1;SIZEOF_SHORT=2;SIZEOF_INT=4;WPCAP;NDEBUG;HAVE_SNPRINTF;HAVE_VSNPRINTF;WIN32;HAVE_REMOTE,_U_=;HAVE_AIRPCAP_API;_CRT_SECURE_NO_WARNINGS;YY_NO_UNISTD_H" StringPooling="true" RuntimeLibrary="0" EnableFunctionLevelLinking="true" From 703b17ba5006b0359408c9357b919d9fa8c48585 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Tue, 14 Jul 2009 21:51:50 +0000 Subject: [PATCH 282/316] Fixed the driver compilation under all the operating systems and WDK 6001. --- packetNtx/CompileDriver.bat | 12 +++++++++--- packetNtx/CompileDriverNew.bat | 4 ++-- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/packetNtx/CompileDriver.bat b/packetNtx/CompileDriver.bat index ccf08f5b..023488a9 100644 --- a/packetNtx/CompileDriver.bat +++ b/packetNtx/CompileDriver.bat @@ -1,5 +1,6 @@ @echo off + if "%_BUILDARCH%"=="x86" goto x86_build if "%_BUILDARCH%"=="AMD64" goto amd64_build if "%_BUILDARCH%"=="IA64" goto ia64_build @@ -22,7 +23,7 @@ mkdir .\driver\bin\2k 2> nul copy driver\NPF.RC ..\..\winpcap\packetntx\driver\NPF.RC -set TARGETPATH=..\..\..\winpcap_oem\PacketNtx\driver\bin\2k +//set TARGETPATH=..\..\..\winpcap_oem\PacketNtx\driver\bin\2k set NPF_C_DEFINES=-DNDIS50 -DWPCAP_OEM rem ** enable the following line to enable the TME extensions ** rem set NPF_TME_FILES=tme.c count_packets.c tcp_session.c functions.c bucket_lookup.c normal_lookup.c win_bpf_filter_init.c @@ -105,8 +106,6 @@ mkdir .\driver\bin\NT4\i386\checked 2> nul copy driver\NPF.RC ..\..\winpcap\packetntx\driver\NPF.RC -set TARGETPATH=..\..\..\winpcap_oem\PacketNtx\driver\bin\NT4 - set NPF_C_DEFINES=-DNDIS30 -D__NPF_NT4__ -DWPCAP_OEM rem ** enable the following line to enable the TME extensions ** @@ -122,10 +121,17 @@ if NOT "%NPF_COMPILED%" == "1" ( pushd ..\..\winpcap\packetntx\driver +mkdir .\bin 2> nul +mkdir .\bin\i386 2> nul +mkdir .\bin\i386\free 2> nul +mkdir .\bin\i386\checked 2> nul + build -cefw popd +xcopy /s /e /v ..\..\winpcap\packetntx\driver\bin\i386\* .\driver\bin\NT4\i386\ + set TARGETPATH= set NPF_C_DEFINES= set NPF_TME_FILES= diff --git a/packetNtx/CompileDriverNew.bat b/packetNtx/CompileDriverNew.bat index dadb6d11..dfebcb22 100644 --- a/packetNtx/CompileDriverNew.bat +++ b/packetNtx/CompileDriverNew.bat @@ -31,7 +31,7 @@ rem ** enable the following line to enable the TME extensions ** rem set NPF_TME_FILES=tme.c count_packets.c tcp_session.c functions.c bucket_lookup.c normal_lookup.c win_bpf_filter_init.c rem set NPF_C_DEFINES=%NPF_C_DEFINES% -DHAVE_BUGGY_TME_SUPPORT -ddkbuild -WDFXP -prefast %__BUILD_TYPE% ..\..\winpcap\packetntx\driver -cefw +ddkbuild -WLHXP -prefast %__BUILD_TYPE% ..\..\winpcap\packetntx\driver -cefw rem ** enable the following line to enable the TME extensions ** rem set NPF_TME_FILES= @@ -60,7 +60,7 @@ rem rem set NPF_TME_FILES= rem set NPF_JIT_FILES= -ddkbuild -WDFA64 -prefast %__BUILD_TYPE% ..\..\winpcap\packetntx\driver -cefw +ddkbuild -WLHNETA64 -prefast %__BUILD_TYPE% ..\..\winpcap\packetntx\driver -cefw set NPF_C_DEFINES= rem set NPF_TME_FILES= From 6b2d48e21d708603eefd681f9fe244a0968ec9dd Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Tue, 14 Jul 2009 21:55:08 +0000 Subject: [PATCH 283/316] Fixed some issues. In particular, this is a fake project, dont try to generate the manifest. --- OEM/WinpcapOem/CopyEmbeddedFiles.vcproj | 42 +++++++++++++------------ 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/OEM/WinpcapOem/CopyEmbeddedFiles.vcproj b/OEM/WinpcapOem/CopyEmbeddedFiles.vcproj index d994cf3f..5ec6a2a8 100644 --- a/OEM/WinpcapOem/CopyEmbeddedFiles.vcproj +++ b/OEM/WinpcapOem/CopyEmbeddedFiles.vcproj @@ -92,12 +92,11 @@ /> Date: Tue, 14 Jul 2009 21:56:09 +0000 Subject: [PATCH 284/316] Exported a bunch of new functions. --- wpcap/PRJ/WPCAP.DEF | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/wpcap/PRJ/WPCAP.DEF b/wpcap/PRJ/WPCAP.DEF index 4365a321..f7ca8b92 100755 --- a/wpcap/PRJ/WPCAP.DEF +++ b/wpcap/PRJ/WPCAP.DEF @@ -82,4 +82,12 @@ EXPORTS pcap_dump_file pcap_dump_ftell pcap_start_oem - pcap_get_airpcap_handle \ No newline at end of file + pcap_get_airpcap_handle + pcap_create + pcap_activate + pcap_set_promisc + pcap_set_snaplen + pcap_set_timeout + pcap_set_buffer_size + pcap_hopen_offline + pcap_setdirection From 7ef8b8a02ee21a9fcb0d44cda5704b9cbc737d9f Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Tue, 14 Jul 2009 21:56:46 +0000 Subject: [PATCH 285/316] Added support for the turbocap adapters. --- wpcap/PRJ/wpcap.vcproj | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/wpcap/PRJ/wpcap.vcproj b/wpcap/PRJ/wpcap.vcproj index 3fe454ff..835a9f70 100644 --- a/wpcap/PRJ/wpcap.vcproj +++ b/wpcap/PRJ/wpcap.vcproj @@ -53,7 +53,7 @@ Optimization="2" InlineFunctionExpansion="1" AdditionalIncludeDirectories="../../../winpcap/wpcap/libpcap/,../../../winpcap/wpcap/libpcap/bpf,../../../winpcap/wpcap/libpcap/lbl,../../../winpcap/wpcap/libpcap/Win32/Include,../../../winpcap/common,../../../winpcap/wpcap/Win32-Extensions,../../../Airpcap_Devpack/include" - PreprocessorDefinitions="HAVE_ADDRINFO=1;YY_NEVER_INTERACTIVE;yylval=pcap_lval;_USRDLL;LIBPCAP_EXPORTS;HAVE_STRERROR;__STDC__;INET6;_WINDOWS;SIZEOF_CHAR=1;SIZEOF_SHORT=2;SIZEOF_INT=4;WPCAP;NDEBUG;HAVE_SNPRINTF;HAVE_VSNPRINTF;WIN32;HAVE_REMOTE,_U_=;HAVE_AIRPCAP_API;_CRT_SECURE_NO_WARNINGS;YY_NO_UNISTD_H" + PreprocessorDefinitions="HAVE_ADDRINFO=1;YY_NEVER_INTERACTIVE;yylval=pcap_lval;_USRDLL;LIBPCAP_EXPORTS;HAVE_STRERROR;__STDC__;INET6;_WINDOWS;SIZEOF_CHAR=1;SIZEOF_SHORT=2;SIZEOF_INT=4;WPCAP;NDEBUG;HAVE_SNPRINTF;HAVE_VSNPRINTF;WIN32;HAVE_REMOTE,_U_=;HAVE_AIRPCAP_API;_CRT_SECURE_NO_WARNINGS;YY_NO_UNISTD_H;HAVE_TC_API" StringPooling="true" RuntimeLibrary="0" EnableFunctionLevelLinking="true" @@ -250,7 +250,7 @@ Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="../../../winpcap/wpcap/libpcap/,../../../winpcap/wpcap/libpcap/bpf,../../../winpcap/wpcap/libpcap/lbl,../../../winpcap/wpcap/libpcap/Win32/Include,../../../winpcap/common,../../../winpcap/wpcap/Win32-Extensions,../../../Airpcap_Devpack/include" - PreprocessorDefinitions="HAVE_ADDRINFO;YY_NEVER_INTERACTIVE;yylval=pcap_lval;_USRDLL;LIBPCAP_EXPORTS;HAVE_STRERROR;__STDC__;INET6;_WINDOWS;SIZEOF_CHAR=1;SIZEOF_SHORT=2;SIZEOF_INT=4;WPCAP;_DEBUG;HAVE_SNPRINTF;HAVE_VSNPRINTF;WIN32;HAVE_REMOTE,_U_=;HAVE_AIRPCAP_API;_CRT_SECURE_NO_WARNINGS;YY_NO_UNISTD_H" + PreprocessorDefinitions="HAVE_ADDRINFO;YY_NEVER_INTERACTIVE;yylval=pcap_lval;_USRDLL;LIBPCAP_EXPORTS;HAVE_STRERROR;__STDC__;INET6;_WINDOWS;SIZEOF_CHAR=1;SIZEOF_SHORT=2;SIZEOF_INT=4;WPCAP;_DEBUG;HAVE_SNPRINTF;HAVE_VSNPRINTF;WIN32;HAVE_REMOTE,_U_=;HAVE_AIRPCAP_API;_CRT_SECURE_NO_WARNINGS;YY_NO_UNISTD_H;HAVE_TC_API" BasicRuntimeChecks="3" RuntimeLibrary="1" BufferSecurityCheck="true" @@ -442,7 +442,7 @@ Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="../../../winpcap/wpcap/libpcap/,../../../winpcap/wpcap/libpcap/bpf,../../../winpcap/wpcap/libpcap/lbl,../../../winpcap/wpcap/libpcap/Win32/Include,../../../winpcap/common,../../../winpcap/wpcap/Win32-Extensions,../../../Airpcap_Devpack/include" - PreprocessorDefinitions="HAVE_ADDRINFO;YY_NEVER_INTERACTIVE;yylval=pcap_lval;_USRDLL;LIBPCAP_EXPORTS;HAVE_STRERROR;__STDC__;INET6;_WINDOWS;SIZEOF_CHAR=1;SIZEOF_SHORT=2;SIZEOF_INT=4;WPCAP;_DEBUG;HAVE_SNPRINTF;HAVE_VSNPRINTF;WIN32;HAVE_REMOTE,_U_=;HAVE_AIRPCAP_API;_CRT_SECURE_NO_WARNINGS;YY_NO_UNISTD_H" + PreprocessorDefinitions="HAVE_ADDRINFO;YY_NEVER_INTERACTIVE;yylval=pcap_lval;_USRDLL;LIBPCAP_EXPORTS;HAVE_STRERROR;__STDC__;INET6;_WINDOWS;SIZEOF_CHAR=1;SIZEOF_SHORT=2;SIZEOF_INT=4;WPCAP;_DEBUG;HAVE_SNPRINTF;HAVE_VSNPRINTF;WIN32;HAVE_REMOTE,_U_=;HAVE_AIRPCAP_API;_CRT_SECURE_NO_WARNINGS;YY_NO_UNISTD_H;HAVE_TC_API" BasicRuntimeChecks="3" RuntimeLibrary="1" BufferSecurityCheck="true" @@ -634,7 +634,7 @@ Optimization="2" InlineFunctionExpansion="1" AdditionalIncludeDirectories="../../../winpcap/wpcap/libpcap/;../../../winpcap/wpcap/libpcap/bpf;../../../winpcap/wpcap/libpcap/lbl;../../../winpcap/wpcap/libpcap/Win32/Include;../../../winpcap/common;"../../../winpcap/wpcap/Win32-Extensions",../../../Airpcap_Devpack/include" - PreprocessorDefinitions="HAVE_ADDRINFO=1;YY_NEVER_INTERACTIVE;yylval=pcap_lval;_USRDLL;LIBPCAP_EXPORTS;HAVE_STRERROR;__STDC__;INET6;_WINDOWS;SIZEOF_CHAR=1;SIZEOF_SHORT=2;SIZEOF_INT=4;WPCAP;NDEBUG;HAVE_SNPRINTF;HAVE_VSNPRINTF;WIN32;HAVE_REMOTE;_U_=;HAVE_AIRPCAP_API;_CRT_SECURE_NO_WARNINGS;YY_NO_UNISTD_H" + PreprocessorDefinitions="HAVE_ADDRINFO=1;YY_NEVER_INTERACTIVE;yylval=pcap_lval;_USRDLL;LIBPCAP_EXPORTS;HAVE_STRERROR;__STDC__;INET6;_WINDOWS;SIZEOF_CHAR=1;SIZEOF_SHORT=2;SIZEOF_INT=4;WPCAP;NDEBUG;HAVE_SNPRINTF;HAVE_VSNPRINTF;WIN32;HAVE_REMOTE;_U_=;HAVE_AIRPCAP_API;_CRT_SECURE_NO_WARNINGS;YY_NO_UNISTD_H;HAVE_TC_API" StringPooling="true" RuntimeLibrary="0" EnableFunctionLevelLinking="true" @@ -878,6 +878,10 @@ RelativePath="..\..\..\winpcap\wpcap\libpcap\pcap-remote.c" > + + From b6b7fc1d571506ec5e4e5792f0ce03d1ca4360cc Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Tue, 14 Jul 2009 22:01:08 +0000 Subject: [PATCH 286/316] Fixed some issues. In particular, this is a fake project, dont try to generate the manifest. --- OEM/WinpcapOem/CopyEmbeddedFiles.vcproj | 3 +++ wpcap/PRJ/wpcap.vcproj | 8 ++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/OEM/WinpcapOem/CopyEmbeddedFiles.vcproj b/OEM/WinpcapOem/CopyEmbeddedFiles.vcproj index 5ec6a2a8..6005acf0 100644 --- a/OEM/WinpcapOem/CopyEmbeddedFiles.vcproj +++ b/OEM/WinpcapOem/CopyEmbeddedFiles.vcproj @@ -63,6 +63,7 @@ /> @@ -138,6 +139,7 @@ /> @@ -288,6 +290,7 @@ /> Date: Tue, 14 Jul 2009 22:15:21 +0000 Subject: [PATCH 287/316] Fixed the output folder for the PDBs. --- wpcap/PRJ/wpcap.vcproj | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/wpcap/PRJ/wpcap.vcproj b/wpcap/PRJ/wpcap.vcproj index 04185585..fe075001 100644 --- a/wpcap/PRJ/wpcap.vcproj +++ b/wpcap/PRJ/wpcap.vcproj @@ -45,7 +45,7 @@ MkTypLibCompatible="true" SuppressStartupBanner="true" TargetEnvironment="1" - TypeLibraryName=".\Release_REMOTE_TNT/wpcap.tlb" + TypeLibraryName=".\Release REMOTE_TNT/wpcap.tlb" HeaderFileName="" /> @@ -339,7 +339,7 @@ MkTypLibCompatible="true" SuppressStartupBanner="true" TargetEnvironment="3" - TypeLibraryName=".\Debug_REMOTE_TNT/wpcap.tlb" + TypeLibraryName=".\Debug REMOTE_TNT/wpcap.tlb" HeaderFileName="" /> @@ -435,7 +435,7 @@ MkTypLibCompatible="true" SuppressStartupBanner="true" TargetEnvironment="1" - TypeLibraryName=".\Debug_REMOTE/wpcap.tlb" + TypeLibraryName=".\Debug REMOTE/wpcap.tlb" HeaderFileName="" /> @@ -530,7 +530,7 @@ MkTypLibCompatible="true" SuppressStartupBanner="true" TargetEnvironment="3" - TypeLibraryName=".\Debug_REMOTE/wpcap.tlb" + TypeLibraryName=".\Debug REMOTE/wpcap.tlb" HeaderFileName="" /> @@ -626,7 +626,7 @@ MkTypLibCompatible="true" SuppressStartupBanner="true" TargetEnvironment="1" - TypeLibraryName=".\Release_REMOTE/wpcap.tlb" + TypeLibraryName=".\Release REMOTE/wpcap.tlb" HeaderFileName="" /> Date: Tue, 14 Jul 2009 23:06:03 +0000 Subject: [PATCH 288/316] Updated the patch. --- Examples.diff | 186 +++++++++++++++++++++++++------------------------- 1 file changed, 93 insertions(+), 93 deletions(-) diff --git a/Examples.diff b/Examples.diff index d829a8aa..5003693b 100644 --- a/Examples.diff +++ b/Examples.diff @@ -1,6 +1,6 @@ -diff -urb ..\winpcap\Examples/PacketDriver/GetMacAddress/GetMacAddress.c .\Examples/PacketDriver/GetMacAddress/GetMacAddress.c ---- ..\winpcap\Examples/PacketDriver/GetMacAddress/GetMacAddress.c 2006-02-22 09:28:16.000000000 -0800 -+++ .\Examples/PacketDriver/GetMacAddress/GetMacAddress.c 2006-07-12 17:25:44.703125000 -0700 +diff -urb ..\winpcap\Examples\/PacketDriver/GetMacAddress/GetMacAddress.c .\Examples/PacketDriver/GetMacAddress/GetMacAddress.c +--- ..\winpcap\Examples\/PacketDriver/GetMacAddress/GetMacAddress.c 2008-12-23 02:43:56.000000000 -0800 ++++ .\Examples/PacketDriver/GetMacAddress/GetMacAddress.c 2009-07-14 15:59:25.765625000 -0700 @@ -50,6 +50,16 @@ ULONG AdapterLength; PPACKET_OID_DATA OidData; @@ -18,9 +18,9 @@ diff -urb ..\winpcap\Examples/PacketDriver/GetMacAddress/GetMacAddress.c .\Examp // // Obtain the name of the adapters installed on this machine -diff -urb ..\winpcap\Examples/PacketDriver/TestPacketCapture/TestPacketCapture.c .\Examples/PacketDriver/TestPacketCapture/TestPacketCapture.c ---- ..\winpcap\Examples/PacketDriver/TestPacketCapture/TestPacketCapture.c 2006-02-22 09:28:16.000000000 -0800 -+++ .\Examples/PacketDriver/TestPacketCapture/TestPacketCapture.c 2006-07-12 17:25:44.703125000 -0700 +diff -urb ..\winpcap\Examples\/PacketDriver/TestPacketCapture/TestPacketCapture.c .\Examples/PacketDriver/TestPacketCapture/TestPacketCapture.c +--- ..\winpcap\Examples\/PacketDriver/TestPacketCapture/TestPacketCapture.c 2008-12-23 02:43:58.000000000 -0800 ++++ .\Examples/PacketDriver/TestPacketCapture/TestPacketCapture.c 2009-07-14 15:59:25.781250000 -0700 @@ -72,6 +72,17 @@ struct bpf_stat stat; @@ -39,9 +39,9 @@ diff -urb ..\winpcap\Examples/PacketDriver/TestPacketCapture/TestPacketCapture.c // // Obtain the name of the adapters installed on this machine // -diff -urb ..\winpcap\Examples/PacketDriver/TestPacketSend/TestPacketSend.c .\Examples/PacketDriver/TestPacketSend/TestPacketSend.c ---- ..\winpcap\Examples/PacketDriver/TestPacketSend/TestPacketSend.c 2006-02-22 09:28:16.000000000 -0800 -+++ .\Examples/PacketDriver/TestPacketSend/TestPacketSend.c 2006-07-12 17:25:44.703125000 -0700 +diff -urb ..\winpcap\Examples\/PacketDriver/TestPacketSend/TestPacketSend.c .\Examples/PacketDriver/TestPacketSend/TestPacketSend.c +--- ..\winpcap\Examples\/PacketDriver/TestPacketSend/TestPacketSend.c 2008-12-23 02:43:58.000000000 -0800 ++++ .\Examples/PacketDriver/TestPacketSend/TestPacketSend.c 2009-07-14 15:59:25.781250000 -0700 @@ -71,6 +71,7 @@ ULONG AdapterLength; @@ -65,9 +65,9 @@ diff -urb ..\winpcap\Examples/PacketDriver/TestPacketSend/TestPacketSend.c .\Exa AdapterName[0]=0; -diff -urb ..\winpcap\Examples/UDPdump/udpdump.c .\Examples/UDPdump/udpdump.c ---- ..\winpcap\Examples/UDPdump/udpdump.c 2006-02-22 09:28:15.000000000 -0800 -+++ .\Examples/UDPdump/udpdump.c 2006-07-12 17:25:44.703125000 -0700 +diff -urb ..\winpcap\Examples\/UDPdump/udpdump.c .\Examples/UDPdump/udpdump.c +--- ..\winpcap\Examples\/UDPdump/udpdump.c 2008-12-23 02:43:58.000000000 -0800 ++++ .\Examples/UDPdump/udpdump.c 2009-07-14 15:59:25.781250000 -0700 @@ -80,6 +80,13 @@ char packet_filter[] = "ip and udp"; struct bpf_program fcode; @@ -82,9 +82,9 @@ diff -urb ..\winpcap\Examples/UDPdump/udpdump.c .\Examples/UDPdump/udpdump.c /* Retrieve the device list */ if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1) { -diff -urb ..\winpcap\Examples/UserLevelBridge/UserBridge.c .\Examples/UserLevelBridge/UserBridge.c ---- ..\winpcap\Examples/UserLevelBridge/UserBridge.c 2006-07-12 17:15:46.437500000 -0700 -+++ .\Examples/UserLevelBridge/UserBridge.c 2006-07-12 17:27:30.578125000 -0700 +diff -urb ..\winpcap\Examples\/UserLevelBridge/UserBridge.c .\Examples/UserLevelBridge/UserBridge.c +--- ..\winpcap\Examples\/UserLevelBridge/UserBridge.c 2008-12-23 02:43:59.000000000 -0800 ++++ .\Examples/UserLevelBridge/UserBridge.c 2009-07-14 15:59:25.796875000 -0700 @@ -78,6 +78,13 @@ struct bpf_program fcode; in_out_adapters couple0, couple1; @@ -99,10 +99,10 @@ diff -urb ..\winpcap\Examples/UserLevelBridge/UserBridge.c .\Examples/UserLevelB /* * Retrieve the device list */ -diff -urb ..\winpcap\Examples/iflist/iflist.c .\Examples/iflist/iflist.c ---- ..\winpcap\Examples/iflist/iflist.c 2006-02-22 09:28:16.000000000 -0800 -+++ .\Examples/iflist/iflist.c 2006-07-12 17:25:44.703125000 -0700 -@@ -54,6 +54,13 @@ +diff -urb ..\winpcap\Examples\/iflist/iflist.c .\Examples/iflist/iflist.c +--- ..\winpcap\Examples\/iflist/iflist.c 2008-12-23 02:43:57.000000000 -0800 ++++ .\Examples/iflist/iflist.c 2009-07-14 15:59:25.796875000 -0700 +@@ -56,6 +56,13 @@ char errbuf[PCAP_ERRBUF_SIZE+1]; char source[PCAP_ERRBUF_SIZE+1]; @@ -116,9 +116,9 @@ diff -urb ..\winpcap\Examples/iflist/iflist.c .\Examples/iflist/iflist.c printf("Enter the device you want to list:\n" "rpcap:// ==> lists interfaces in the local machine\n" "rpcap://hostname:port ==> lists interfaces in a remote machine\n" -diff -urb ..\winpcap\Examples/misc/basic_dump.c .\Examples/misc/basic_dump.c ---- ..\winpcap\Examples/misc/basic_dump.c 2003-07-08 00:21:29.000000000 -0700 -+++ .\Examples/misc/basic_dump.c 2006-07-12 17:25:44.703125000 -0700 +diff -urb ..\winpcap\Examples\/misc/basic_dump.c .\Examples/misc/basic_dump.c +--- ..\winpcap\Examples\/misc/basic_dump.c 2008-12-23 02:43:55.000000000 -0800 ++++ .\Examples/misc/basic_dump.c 2009-07-14 15:59:25.812500000 -0700 @@ -12,6 +12,13 @@ pcap_t *adhandle; char errbuf[PCAP_ERRBUF_SIZE]; @@ -133,12 +133,12 @@ diff -urb ..\winpcap\Examples/misc/basic_dump.c .\Examples/misc/basic_dump.c /* Retrieve the device list on the local machine */ if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1) { -diff -urb ..\winpcap\Examples/misc/basic_dump_ex.c .\Examples/misc/basic_dump_ex.c ---- ..\winpcap\Examples/misc/basic_dump_ex.c 2003-07-08 00:21:29.000000000 -0700 -+++ .\Examples/misc/basic_dump_ex.c 2006-07-12 17:25:44.718750000 -0700 -@@ -15,6 +15,12 @@ - struct pcap_pkthdr *header; - u_char *pkt_data; +diff -urb ..\winpcap\Examples\/misc/basic_dump_ex.c .\Examples/misc/basic_dump_ex.c +--- ..\winpcap\Examples\/misc/basic_dump_ex.c 2008-12-23 02:43:55.000000000 -0800 ++++ .\Examples/misc/basic_dump_ex.c 2009-07-14 15:59:25.812500000 -0700 +@@ -16,6 +16,12 @@ + const u_char *pkt_data; + time_t local_tv_sec; + /* start WinPcap Professional */ + if (pcap_start_oem(errbuf, 0) == -1) @@ -149,9 +149,43 @@ diff -urb ..\winpcap\Examples/misc/basic_dump_ex.c .\Examples/misc/basic_dump_ex /* Retrieve the device list on the local machine */ if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1) -diff -urb ..\winpcap\Examples/pcap_filter/pcap_filter.c .\Examples/pcap_filter/pcap_filter.c ---- ..\winpcap\Examples/pcap_filter/pcap_filter.c 2006-02-22 09:28:16.000000000 -0800 -+++ .\Examples/pcap_filter/pcap_filter.c 2006-07-12 17:25:44.718750000 -0700 +diff -urb ..\winpcap\Examples\/misc/savedump.c .\Examples/misc/savedump.c +--- ..\winpcap\Examples\/misc/savedump.c 2008-12-23 02:43:55.000000000 -0800 ++++ .\Examples/misc/savedump.c 2009-07-14 15:59:25.828125000 -0700 +@@ -14,6 +14,12 @@ + pcap_dumper_t *dumpfile; + + ++ /* start WinPcap Professional */ ++ if (pcap_start_oem(errbuf, 0) == -1) ++ { ++ fprintf(stderr, "Error starting WinPcap Professional: %s\n", errbuf); ++ return -1; ++ } + + /* Check command line */ + if(argc != 2) +diff -urb ..\winpcap\Examples\/misc/sendpack.c .\Examples/misc/sendpack.c +--- ..\winpcap\Examples\/misc/sendpack.c 2008-12-23 02:43:55.000000000 -0800 ++++ .\Examples/misc/sendpack.c 2009-07-14 15:59:25.859375000 -0700 +@@ -11,6 +11,14 @@ + u_char packet[100]; + int i; + ++ /* start WinPcap Professional */ ++ if (pcap_start_oem(errbuf, 0) == -1) ++ { ++ fprintf(stderr, "Error starting WinPcap Professional: %s\n", errbuf); ++ return; ++ } ++ ++ + /* Check the validity of the command line */ + if (argc != 2) + { +diff -urb ..\winpcap\Examples\/pcap_filter/pcap_filter.c .\Examples/pcap_filter/pcap_filter.c +--- ..\winpcap\Examples\/pcap_filter/pcap_filter.c 2006-07-24 14:08:27.000000000 -0700 ++++ .\Examples/pcap_filter/pcap_filter.c 2009-07-14 15:59:25.812500000 -0700 @@ -90,6 +90,13 @@ } } @@ -166,10 +200,10 @@ diff -urb ..\winpcap\Examples/pcap_filter/pcap_filter.c .\Examples/pcap_filter/p // open a capture from the network if (source != NULL) { -diff -urb ..\winpcap\Examples/pktdump_ex/pktdump_ex.c .\Examples/pktdump_ex/pktdump_ex.c ---- ..\winpcap\Examples/pktdump_ex/pktdump_ex.c 2006-02-22 09:28:16.000000000 -0800 -+++ .\Examples/pktdump_ex/pktdump_ex.c 2006-07-12 17:25:44.718750000 -0700 -@@ -56,6 +56,13 @@ +diff -urb ..\winpcap\Examples\/pktdump_ex/pktdump_ex.c .\Examples/pktdump_ex/pktdump_ex.c +--- ..\winpcap\Examples\/pktdump_ex/pktdump_ex.c 2008-12-23 02:43:57.000000000 -0800 ++++ .\Examples/pktdump_ex/pktdump_ex.c 2009-07-14 15:59:25.828125000 -0700 +@@ -60,6 +60,13 @@ " pktdump_ex -s file://c:/temp/file.acp\n" " pktdump_ex -s rpcap://\\Device\\NPF_{C8736017-F3C3-4373-94AC-9A34B7DAD998}\n\n"); @@ -183,10 +217,27 @@ diff -urb ..\winpcap\Examples/pktdump_ex/pktdump_ex.c .\Examples/pktdump_ex/pktd if(argc < 3) { -diff -urb ..\winpcap\Examples/smp_1/smp_1.c .\Examples/smp_1/smp_1.c ---- ..\winpcap\Examples/smp_1/smp_1.c 2006-02-22 09:28:16.000000000 -0800 -+++ .\Examples/smp_1/smp_1.c 2006-07-12 17:25:44.718750000 -0700 -@@ -57,6 +57,13 @@ +diff -urb ..\winpcap\Examples\/sendcap/sendcap.c .\Examples/sendcap/sendcap.c +--- ..\winpcap\Examples\/sendcap/sendcap.c 2008-12-23 02:43:57.000000000 -0800 ++++ .\Examples/sendcap/sendcap.c 2009-07-14 16:00:48.468750000 -0700 +@@ -53,6 +53,13 @@ + u_int npacks = 0; + errno_t fopen_error; + ++ /* start WinPcap Professional */ ++ if (pcap_start_oem(errbuf, 0) == -1) ++ { ++ fprintf(stderr, "Error starting WinPcap Professional: %s\n", errbuf); ++ exit(1); ++ } ++ + /* Check the validity of the command line */ + if (argc <= 2 || argc >= 5) + { +diff -urb ..\winpcap\Examples\/smp_1/smp_1.c .\Examples/smp_1/smp_1.c +--- ..\winpcap\Examples\/smp_1/smp_1.c 2008-12-23 02:43:57.000000000 -0800 ++++ .\Examples/smp_1/smp_1.c 2009-07-14 15:59:25.828125000 -0700 +@@ -56,6 +56,13 @@ printf("and that the caplen is equal to the packet length.\n"); printf("If there is an error, it will print out a message saying \"Inconsistent XXX\"\n"); @@ -200,42 +251,9 @@ diff -urb ..\winpcap\Examples/smp_1/smp_1.c .\Examples/smp_1/smp_1.c if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1) { fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf); -diff -urb ..\winpcap\Examples/misc/savedump.c .\Examples/misc/savedump.c ---- ..\winpcap\Examples/misc/savedump.c 2003-07-08 00:21:30.000000000 -0700 -+++ .\Examples/misc/savedump.c 2006-07-26 17:44:37.484375000 -0700 -@@ -14,6 +14,12 @@ - pcap_dumper_t *dumpfile; - - -+ /* start WinPcap Professional */ -+ if (pcap_start_oem(errbuf, 0) == -1) -+ { -+ fprintf(stderr, "Error starting WinPcap Professional: %s\n", errbuf); -+ return -1; -+ } - - /* Check command line */ - if(argc != 2) -diff -urb ..\winpcap\Examples/sendcap/sendcap.c .\Examples/sendcap/sendcap.c ---- ..\winpcap\Examples/sendcap/sendcap.c 2006-02-22 09:28:16.000000000 -0800 -+++ .\Examples/sendcap/sendcap.c 2006-07-26 17:44:37.500000000 -0700 -@@ -53,6 +53,13 @@ - float cpu_time; - u_int npacks = 0; - -+ /* start WinPcap Professional */ -+ if (pcap_start_oem(errbuf, 0) == -1) -+ { -+ fprintf(stderr, "Error starting WinPcap Professional: %s\n", errbuf); -+ exit(1); -+ } -+ - /* Check the validity of the command line */ - if (argc <= 2 || argc >= 5) - { -diff -urb ..\winpcap\Examples/tcptop/tcptop.c .\Examples/tcptop/tcptop.c ---- ..\winpcap\Examples/tcptop/tcptop.c 2006-02-22 09:28:15.000000000 -0800 -+++ .\Examples/tcptop/tcptop.c 2006-07-26 17:45:13.750000000 -0700 +diff -urb ..\winpcap\Examples\/tcptop/tcptop.c .\Examples/tcptop/tcptop.c +--- ..\winpcap\Examples\/tcptop/tcptop.c 2008-12-23 02:43:57.000000000 -0800 ++++ .\Examples/tcptop/tcptop.c 2009-07-14 15:59:25.843750000 -0700 @@ -56,6 +56,13 @@ return; } @@ -250,21 +268,3 @@ diff -urb ..\winpcap\Examples/tcptop/tcptop.c .\Examples/tcptop/tcptop.c /* Open the output adapter */ if ( (fp= pcap_open(argv[1], 100, PCAP_OPENFLAG_PROMISCUOUS, 1000, NULL, errbuf) ) == NULL) { -diff -urb ..\winpcap\Examples/misc/sendpack.c .\Examples/misc/sendpack.c ---- ..\winpcap\Examples/misc/sendpack.c 2003-07-08 00:21:30.000000000 -0700 -+++ .\Examples/misc/sendpack.c 2006-08-17 09:57:07.750000000 -0700 -@@ -11,6 +11,14 @@ - u_char packet[100]; - int i; - -+ /* start WinPcap Professional */ -+ if (pcap_start_oem(errbuf, 0) == -1) -+ { -+ fprintf(stderr, "Error starting WinPcap Professional: %s\n", errbuf); -+ return; -+ } -+ -+ - /* Check the validity of the command line */ - if (argc != 2) - { From 6ddd25ac3bc22a2335f52f3779c9f4810fd71052 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Tue, 14 Jul 2009 23:58:45 +0000 Subject: [PATCH 289/316] Updated the patch. --- Examples-pcap.diff | 168 ++++++++++++++++++++++++++++++++++----------- 1 file changed, 127 insertions(+), 41 deletions(-) diff --git a/Examples-pcap.diff b/Examples-pcap.diff index 20166cfc..53d366d8 100644 --- a/Examples-pcap.diff +++ b/Examples-pcap.diff @@ -1,7 +1,16 @@ -diff -urb ..\winpcap\Examples-pcap/UDPdump/udpdump.c .\archive\Examples-pcap/UDPdump/udpdump.c ---- ..\winpcap\Examples-pcap/UDPdump/udpdump.c 2006-02-22 09:26:53.140625000 -0800 -+++ .\archive\Examples-pcap/UDPdump/udpdump.c 2006-02-13 12:56:33.203125000 -0800 -@@ -84,6 +83,13 @@ +diff -urb ..\WinPcap\Examples-pcap/UDPdump/udpdump.c .\Examples-pcap/UDPdump/udpdump.c +--- ..\WinPcap\Examples-pcap/UDPdump/udpdump.c 2008-12-23 02:54:49.000000000 -0800 ++++ .\Examples-pcap/UDPdump/udpdump.c 2009-07-14 16:51:15.796875000 -0700 +@@ -39,6 +39,8 @@ + #define _CRT_SECURE_NO_WARNINGS + #endif + ++#define WPCAP //this is needed to use pcap_start_oem ++ + #include "pcap.h" + + /* 4 bytes IP address */ +@@ -91,6 +93,13 @@ char packet_filter[] = "ip and udp"; struct bpf_program fcode; @@ -15,10 +24,19 @@ diff -urb ..\winpcap\Examples-pcap/UDPdump/udpdump.c .\archive\Examples-pcap/UDP /* Retrieve the device list */ if(pcap_findalldevs(&alldevs, errbuf) == -1) { -diff -urb ..\winpcap\Examples-pcap/basic_dump/basic_dump.c .\archive\Examples-pcap/basic_dump/basic_dump.c ---- ..\winpcap\Examples-pcap/basic_dump/basic_dump.c 2005-08-11 09:05:03.593750000 -0700 -+++ .\archive\Examples-pcap/basic_dump/basic_dump.c 2006-02-13 12:56:35.312500000 -0800 -@@ -12,6 +12,13 @@ +diff -urb ..\WinPcap\Examples-pcap/basic_dump/basic_dump.c .\Examples-pcap/basic_dump/basic_dump.c +--- ..\WinPcap\Examples-pcap/basic_dump/basic_dump.c 2008-12-23 02:54:48.000000000 -0800 ++++ .\Examples-pcap/basic_dump/basic_dump.c 2009-07-14 16:48:44.203125000 -0700 +@@ -6,6 +6,8 @@ + #define _CRT_SECURE_NO_WARNINGS + #endif + ++#define WPCAP //this is needed to use pcap_start_oem ++ + #include "pcap.h" + + /* prototype of the packet handler */ +@@ -20,6 +22,13 @@ pcap_t *adhandle; char errbuf[PCAP_ERRBUF_SIZE]; @@ -32,12 +50,21 @@ diff -urb ..\winpcap\Examples-pcap/basic_dump/basic_dump.c .\archive\Examples-pc /* Retrieve the device list */ if(pcap_findalldevs(&alldevs, errbuf) == -1) { -diff -urb ..\winpcap\Examples-pcap/basic_dump_ex/basic_dump_ex.c .\archive\Examples-pcap/basic_dump_ex/basic_dump_ex.c ---- ..\winpcap\Examples-pcap/basic_dump_ex/basic_dump_ex.c 2005-08-11 09:05:04.109375000 -0700 -+++ .\archive\Examples-pcap/basic_dump_ex/basic_dump_ex.c 2006-02-13 12:56:35.234375000 -0800 -@@ -15,6 +15,12 @@ - struct pcap_pkthdr *header; +diff -urb ..\WinPcap\Examples-pcap/basic_dump_ex/basic_dump_ex.c .\Examples-pcap/basic_dump_ex/basic_dump_ex.c +--- ..\WinPcap\Examples-pcap/basic_dump_ex/basic_dump_ex.c 2008-12-23 02:54:48.000000000 -0800 ++++ .\Examples-pcap/basic_dump_ex/basic_dump_ex.c 2009-07-14 16:49:28.671875000 -0700 +@@ -6,6 +6,8 @@ + #define _CRT_SECURE_NO_WARNINGS + #endif + ++#define WPCAP //this is needed to use pcap_start_oem ++ + #include "pcap.h" + + int main() +@@ -23,6 +25,12 @@ const u_char *pkt_data; + time_t local_tv_sec; + /* start WinPcap Professional */ + if (pcap_start_oem(errbuf, 0) == -1) @@ -48,10 +75,19 @@ diff -urb ..\winpcap\Examples-pcap/basic_dump_ex/basic_dump_ex.c .\archive\Examp /* Retrieve the device list */ if(pcap_findalldevs(&alldevs, errbuf) == -1) -diff -urb ..\winpcap\Examples-pcap/iflist/iflist.c .\archive\Examples-pcap/iflist/iflist.c ---- ..\winpcap\Examples-pcap/iflist/iflist.c 2006-02-22 09:25:45.703125000 -0800 -+++ .\archive\Examples-pcap/iflist/iflist.c 2006-02-13 12:56:35.265625000 -0800 -@@ -54,6 +53,13 @@ +diff -urb ..\WinPcap\Examples-pcap/iflist/iflist.c .\Examples-pcap/iflist/iflist.c +--- ..\WinPcap\Examples-pcap/iflist/iflist.c 2008-12-23 02:54:48.000000000 -0800 ++++ .\Examples-pcap/iflist/iflist.c 2009-07-14 16:49:28.625000000 -0700 +@@ -39,6 +39,8 @@ + #define _CRT_SECURE_NO_WARNINGS + #endif + ++#define WPCAP //this is needed to use pcap_start_oem ++ + #include "pcap.h" + + #ifndef WIN32 +@@ -61,6 +63,13 @@ pcap_if_t *d; char errbuf[PCAP_ERRBUF_SIZE+1]; @@ -65,10 +101,19 @@ diff -urb ..\winpcap\Examples-pcap/iflist/iflist.c .\archive\Examples-pcap/iflis /* Retrieve the device list */ if(pcap_findalldevs(&alldevs, errbuf) == -1) { -diff -urb ..\winpcap\Examples-pcap/pcap_filter/pcap_filter.c .\archive\Examples-pcap/pcap_filter/pcap_filter.c ---- ..\winpcap\Examples-pcap/pcap_filter/pcap_filter.c 2006-02-22 09:25:57.937500000 -0800 -+++ .\archive\Examples-pcap/pcap_filter/pcap_filter.c 2006-02-13 12:56:35.078125000 -0800 -@@ -90,6 +89,13 @@ +diff -urb ..\WinPcap\Examples-pcap/pcap_filter/pcap_filter.c .\Examples-pcap/pcap_filter/pcap_filter.c +--- ..\WinPcap\Examples-pcap/pcap_filter/pcap_filter.c 2006-02-22 09:28:33.000000000 -0800 ++++ .\Examples-pcap/pcap_filter/pcap_filter.c 2009-07-14 16:49:28.593750000 -0700 +@@ -35,6 +35,8 @@ + #include + #include + ++#define WPCAP //this is needed to use pcap_start_oem ++ + #include + + #define MAX_PRINT 80 +@@ -90,6 +92,13 @@ } } @@ -82,10 +127,19 @@ diff -urb ..\winpcap\Examples-pcap/pcap_filter/pcap_filter.c .\archive\Examples- // open a capture from the network if (source != NULL) { -diff -urb ..\winpcap\Examples-pcap/pktdump_ex/pktdump_ex.c .\archive\Examples-pcap/pktdump_ex/pktdump_ex.c ---- ..\winpcap\Examples-pcap/pktdump_ex/pktdump_ex.c 2006-02-22 09:26:10.031250000 -0800 -+++ .\archive\Examples-pcap/pktdump_ex/pktdump_ex.c 2006-02-13 12:56:35.343750000 -0800 -@@ -56,6 +55,13 @@ +diff -urb ..\WinPcap\Examples-pcap/pktdump_ex/pktdump_ex.c .\Examples-pcap/pktdump_ex/pktdump_ex.c +--- ..\WinPcap\Examples-pcap/pktdump_ex/pktdump_ex.c 2008-12-23 02:54:49.000000000 -0800 ++++ .\Examples-pcap/pktdump_ex/pktdump_ex.c 2009-07-14 16:50:29.265625000 -0700 +@@ -42,6 +42,8 @@ + #include + #include + ++#define WPCAP //this is needed to use pcap_start_oem ++ + #include + + #define LINE_LEN 16 +@@ -63,6 +65,13 @@ " pktdump_ex -s file.acp\n" " pktdump_ex -s \\Device\\NPF_{C8736017-F3C3-4373-94AC-9A34B7DAD998}\n\n"); @@ -99,10 +153,16 @@ diff -urb ..\winpcap\Examples-pcap/pktdump_ex/pktdump_ex.c .\archive\Examples-pc if(argc < 3) { printf("\nNo adapter selected: printing the device list:\n"); -diff -urb ..\winpcap\Examples-pcap/readfile/readfile.c .\archive\Examples-pcap/readfile/readfile.c ---- ..\winpcap\Examples-pcap/readfile/readfile.c 2005-08-11 09:05:06.437500000 -0700 -+++ .\archive\Examples-pcap/readfile/readfile.c 2006-02-13 12:56:35.015625000 -0800 -@@ -17,6 +17,13 @@ +diff -urb ..\WinPcap\Examples-pcap/readfile/readfile.c .\Examples-pcap/readfile/readfile.c +--- ..\WinPcap\Examples-pcap/readfile/readfile.c 2008-12-23 02:54:49.000000000 -0800 ++++ .\Examples-pcap/readfile/readfile.c 2009-07-14 16:48:44.187500000 -0700 +@@ -1,4 +1,5 @@ + #include ++#define WPCAP //this is needed to use pcap_start_oem + #include + + #define LINE_LEN 16 +@@ -17,6 +18,13 @@ } @@ -116,10 +176,18 @@ diff -urb ..\winpcap\Examples-pcap/readfile/readfile.c .\archive\Examples-pcap/r /* Open the capture file */ if ((fp = pcap_open_offline(argv[1], // name of the device errbuf // error buffer -diff -urb ..\winpcap\Examples-pcap/readfile_ex/readfile_ex.c .\archive\Examples-pcap/readfile_ex/readfile_ex.c ---- ..\winpcap\Examples-pcap/readfile_ex/readfile_ex.c 2005-08-11 09:05:06.765625000 -0700 -+++ .\archive\Examples-pcap/readfile_ex/readfile_ex.c 2006-02-13 12:56:35.187500000 -0800 -@@ -19,6 +19,13 @@ +diff -urb ..\WinPcap\Examples-pcap/readfile_ex/readfile_ex.c .\Examples-pcap/readfile_ex/readfile_ex.c +--- ..\WinPcap\Examples-pcap/readfile_ex/readfile_ex.c 2005-07-20 16:02:59.000000000 -0700 ++++ .\Examples-pcap/readfile_ex/readfile_ex.c 2009-07-14 16:50:47.281250000 -0700 +@@ -1,4 +1,7 @@ + #include ++ ++#define WPCAP //this is needed to use pcap_start_oem ++ + #include + + #define LINE_LEN 16 +@@ -19,6 +22,13 @@ } @@ -133,10 +201,19 @@ diff -urb ..\winpcap\Examples-pcap/readfile_ex/readfile_ex.c .\archive\Examples- /* Open the capture file */ if ((fp = pcap_open_offline(argv[1], // name of the device errbuf // error buffer -diff -urb ..\winpcap\Examples-pcap/savedump/savedump.c .\archive\Examples-pcap/savedump/savedump.c ---- ..\winpcap\Examples-pcap/savedump/savedump.c 2005-08-11 09:05:07.015625000 -0700 -+++ .\archive\Examples-pcap/savedump/savedump.c 2006-02-13 12:56:35.109375000 -0800 -@@ -21,6 +21,13 @@ +diff -urb ..\WinPcap\Examples-pcap/savedump/savedump.c .\Examples-pcap/savedump/savedump.c +--- ..\WinPcap\Examples-pcap/savedump/savedump.c 2008-12-23 02:54:49.000000000 -0800 ++++ .\Examples-pcap/savedump/savedump.c 2009-07-14 16:50:56.765625000 -0700 +@@ -6,6 +6,8 @@ + #define _CRT_SECURE_NO_WARNINGS + #endif + ++#define WPCAP //this is needed to use pcap_start_oem ++ + #include "pcap.h" + + /* prototype of the packet handler */ +@@ -29,6 +31,13 @@ return -1; } @@ -150,10 +227,19 @@ diff -urb ..\winpcap\Examples-pcap/savedump/savedump.c .\archive\Examples-pcap/s /* Retrieve the device list on the local machine */ if (pcap_findalldevs(&alldevs, errbuf) == -1) { -diff -urb ..\winpcap\Examples-pcap/sendpack/sendpack.c .\archive\Examples-pcap/sendpack/sendpack.c ---- ..\winpcap\Examples-pcap/sendpack/sendpack.c 2005-08-11 09:05:07.531250000 -0700 -+++ .\archive\Examples-pcap/sendpack/sendpack.c 2006-02-13 12:56:35.156250000 -0800 -@@ -18,6 +18,13 @@ +diff -urb ..\WinPcap\Examples-pcap/sendpack/sendpack.c .\Examples-pcap/sendpack/sendpack.c +--- ..\WinPcap\Examples-pcap/sendpack/sendpack.c 2008-12-23 02:54:49.000000000 -0800 ++++ .\Examples-pcap/sendpack/sendpack.c 2009-07-14 16:51:04.453125000 -0700 +@@ -1,6 +1,8 @@ + #include + #include + ++#define WPCAP //this is needed to use pcap_start_oem ++ + #include + + +@@ -18,6 +20,13 @@ return 1; } From a059415ec1fa90b998896e22f4425022f3473e84 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Tue, 14 Jul 2009 23:59:08 +0000 Subject: [PATCH 290/316] Updated the include files. --- create_include_oem.bat | 35 ++++++++++++++++------------------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/create_include_oem.bat b/create_include_oem.bat index 58982daa..865739d6 100755 --- a/create_include_oem.bat +++ b/create_include_oem.bat @@ -7,30 +7,27 @@ IF ""=="%1" (set WINPCAPSOURCEDIR=.\) ELSE (set WINPCAPSOURCEDIR=%1) echo Creating \Include folder mkdir %WPDPACKDESTDIR% 2>nul >nul mkdir %WPDPACKDESTDIR%\Include 2>nul >nul +mkdir %WPDPACKDESTDIR%\Include\pcap 2>nul >nul -xcopy /v /Y %WINPCAPSOURCEDIR%\wpcap\libpcap\Win32\Include\bittypes.h %WPDPACKDESTDIR%\Include\ >nul -xcopy /v /Y %WINPCAPSOURCEDIR%\wpcap\libpcap\Win32\Include\Gnuc.h %WPDPACKDESTDIR%\Include\ >nul -xcopy /v /Y %WINPCAPSOURCEDIR%\wpcap\libpcap\Win32\Include\ip6_misc.h %WPDPACKDESTDIR%\Include\ >nul -rem xcopy /v /Y %WINPCAPSOURCEDIR%\wpcap\libpcap\rpcapd\win32-pthreads\pthread.h %WPDPACKDESTDIR%\Include\ >nul -rem xcopy /v /Y %WINPCAPSOURCEDIR%\wpcap\libpcap\rpcapd\win32-pthreads\sched.h %WPDPACKDESTDIR%\Include\ >nul -rem xcopy /v /Y %WINPCAPSOURCEDIR%\wpcap\libpcap\rpcapd\win32-pthreads\semaphore.h %WPDPACKDESTDIR%\Include\ >nul -xcopy /v /Y %WINPCAPSOURCEDIR%\wpcap\libpcap\PCAP-INT.H %WPDPACKDESTDIR%\Include\ >nul -xcopy /v /Y %WINPCAPSOURCEDIR%\wpcap\libpcap\pcap-bpf.h %WPDPACKDESTDIR%\Include\ >nul -xcopy /v /Y %WINPCAPSOURCEDIR%\wpcap\libpcap\pcap-stdinc.h %WPDPACKDESTDIR%\Include\ >nul +xcopy /v /Y %WINPCAPSOURCEDIR%\wpcap\libpcap\pcap\*.h %WPDPACKDESTDIR%\Include\pcap\ >nul xcopy /v /Y %WINPCAPSOURCEDIR%\wpcap\libpcap\PCAP.H %WPDPACKDESTDIR%\Include\ >nul +xcopy /v /Y %WINPCAPSOURCEDIR%\wpcap\libpcap\pcap-bpf.h %WPDPACKDESTDIR%\Include\ >nul +xcopy /v /Y %WINPCAPSOURCEDIR%\wpcap\libpcap\pcap-namedb.h %WPDPACKDESTDIR%\Include\ >nul xcopy /v /Y %WINPCAPSOURCEDIR%\wpcap\libpcap\remote-ext.h %WPDPACKDESTDIR%\Include\ >nul +xcopy /v /Y %WINPCAPSOURCEDIR%\wpcap\libpcap\pcap-stdinc.h %WPDPACKDESTDIR%\Include\ >nul xcopy /v /Y %WINPCAPSOURCEDIR%\wpcap\Win32-Extensions\Win32-Extensions.h %WPDPACKDESTDIR%\Include\ >nul -xcopy /v /Y %WINPCAPSOURCEDIR%\packetNtx\driver\bucket_lookup.h %WPDPACKDESTDIR%\Include\ >nul -xcopy /v /Y %WINPCAPSOURCEDIR%\packetNtx\driver\count_packets.h %WPDPACKDESTDIR%\Include\ >nul -xcopy /v /Y %WINPCAPSOURCEDIR%\packetNtx\driver\memory_t.h %WPDPACKDESTDIR%\Include\ >nul -xcopy /v /Y %WINPCAPSOURCEDIR%\packetNtx\driver\normal_lookup.h %WPDPACKDESTDIR%\Include\ >nul -xcopy /v /Y %WINPCAPSOURCEDIR%\packetNtx\driver\tcp_session.h %WPDPACKDESTDIR%\Include\ >nul -xcopy /v /Y %WINPCAPSOURCEDIR%\packetNtx\driver\time_calls.h %WPDPACKDESTDIR%\Include\ >nul -xcopy /v /Y %WINPCAPSOURCEDIR%\packetNtx\driver\tme.h %WPDPACKDESTDIR%\Include\ >nul +xcopy /v /Y %WINPCAPSOURCEDIR%\wpcap\libpcap\Win32\Include\bittypes.h %WPDPACKDESTDIR%\Include\ >nul +xcopy /v /Y %WINPCAPSOURCEDIR%\wpcap\libpcap\Win32\Include\ip6_misc.h %WPDPACKDESTDIR%\Include\ >nul + xcopy /v /Y %WINPCAPSOURCEDIR%\Common\Packet32.h %WPDPACKDESTDIR%\Include\ >nul -xcopy /v /Y %WINPCAPSOURCEDIR%\Common\Devioctl.h %WPDPACKDESTDIR%\Include\ >nul -xcopy /v /Y %WINPCAPSOURCEDIR%\Common\Ntddndis.h %WPDPACKDESTDIR%\Include\ >nul -xcopy /v /Y %WINPCAPSOURCEDIR%\Common\Ntddpack.h %WPDPACKDESTDIR%\Include\ >nul + +rem xcopy /v /Y %WINPCAPSOURCEDIR%\packetNtx\driver\bucket_lookup.h %WPDPACKDESTDIR%\Include\ >nul +rem xcopy /v /Y %WINPCAPSOURCEDIR%\packetNtx\driver\count_packets.h %WPDPACKDESTDIR%\Include\ >nul +rem xcopy /v /Y %WINPCAPSOURCEDIR%\packetNtx\driver\memory_t.h %WPDPACKDESTDIR%\Include\ >nul +rem xcopy /v /Y %WINPCAPSOURCEDIR%\packetNtx\driver\normal_lookup.h %WPDPACKDESTDIR%\Include\ >nul +rem xcopy /v /Y %WINPCAPSOURCEDIR%\packetNtx\driver\tcp_session.h %WPDPACKDESTDIR%\Include\ >nul +rem xcopy /v /Y %WINPCAPSOURCEDIR%\packetNtx\driver\time_calls.h %WPDPACKDESTDIR%\Include\ >nul +rem xcopy /v /Y %WINPCAPSOURCEDIR%\packetNtx\driver\tme.h %WPDPACKDESTDIR%\Include\ >nul echo Folder \Include created successfully set WPDPACKDESTDIR= From 77dd2a6418bfb16269c3af3078866fdd705c110d Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 15 Jul 2009 00:23:08 +0000 Subject: [PATCH 291/316] Added a note regarding Win7. --- OEM/WinpcapOem/WinPcapOem.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OEM/WinpcapOem/WinPcapOem.cpp b/OEM/WinpcapOem/WinPcapOem.cpp index f8a9a40a..5285595d 100644 --- a/OEM/WinpcapOem/WinPcapOem.cpp +++ b/OEM/WinpcapOem/WinPcapOem.cpp @@ -674,7 +674,7 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) else if(osVer.dwMajorVersion == 6) { // - // Windows Vista + // Windows Vista or Win7 (6.1) // // From bc389b70845fa94a8d6b7456f8762c341506a6ed Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 15 Jul 2009 17:16:04 +0000 Subject: [PATCH 292/316] Updated the release procedures. --- release procedures WOEM.txt | 101 ++++++++++++++++++------------------ 1 file changed, 51 insertions(+), 50 deletions(-) diff --git a/release procedures WOEM.txt b/release procedures WOEM.txt index c1a3a0ab..47af440b 100644 --- a/release procedures WOEM.txt +++ b/release procedures WOEM.txt @@ -1,4 +1,4 @@ -$Header: /usr/cvsroot/winpcap_oem/release\040procedures\040WOEM.txt,v 1.15 2008/08/18 22:37:43 gianlucav Exp $ +$Header: /usr/cvsroot/winpcap_oem/release\040procedures\040WOEM.txt,v 1.16 2008-08-22 18:45:50 gianlucav Exp $ WINPCAP PRO RELEASE PROCEDURE ============================= @@ -10,8 +10,10 @@ Needed tools ------------ - Visual Studio .NET 2005 SP1 (both x86 and x64 build environments) -- WDK 6000. -- The cygnus environment on your path (needed to execute step 11 and 12). +- WDK 6001.18002. +- DDKBUILD v. 3.14.37 on the path. The variables WLHBASE and WNETBASE should point + to the wDK path. +- The cygnus environment on your path (needed to execute step 9). In particular you will need to have flex, bison, patch. - Doxygen 1.5.4 installed and on the path @@ -38,47 +40,55 @@ How to compile WinPcap PRO (NOT for the Toolkit) 4. Modify the device string into %BUILD_TREE%\winpcap\common\wpcapnames.h (first two defines) -5. Download the libpcap sources (usually 0_9 branch) into - %BUILD_TREE%\libpcap_ +5. Download the libpcap sources (usually 1.0 branch) into + %BUILD_TREE%\libpcap -6. Be sure that the sources of libpcap do *not* contain any CVS folder. The tarball usually - contains the CVS folders if it's a daily snapshot. If any, remove them. - -7. Commit +6. Commit %BUILD_TREE%\winpcap_oem\version.h %BUILD_TREE%\winpcap_oem\dox\prj\winpcap_oem_noc.dox into the CVS. These should be the *only* modified filew in this module. -8. Tag the %BUILD_TREE%\winpcap_oem module with the tag +7. Tag the %BUILD_TREE%\winpcap_oem module with the tag WINPCAP_PRO__PUBLIC -9. Tag the %BUILD_TREE%\winpcap module with the tag +8. Tag the %BUILD_TREE%\winpcap module with the tag WINPCAP_PRO__PUBLIC -10. Take the contents of %BUILD_TREE%\libpcap_ and copy it into - %BUILD_TREE%\winpcap\wpcap\libpcap - -11. From the command line, go to folder - %BUILD_TREE%\winpcap\wpcap\libpcap - -12. On the command line, type "patch -p1 < remote_code.patch" - -13. CD into %BUILD_TREE%\winpcap\wpcap\prj and execute - "build_scanner_parser.bat" - -14. Check that the version of libpcap in - %BUILD_TREE%\winpcap\wpcap\libpcap\pcap.c line 869 +9. Go to %BUILD_TREE%\winpcap and execute + integrate_libpcap.bat + The correct output should be + +Copying files... +Copying files -- Done +--------------------------------------- +Applying remote code patch... +Applying remote code patch -- Done +--------------------------------------- +Applying TurboCap code patch... +Applying TurboCap code patch -- Done +--------------------------------------- +DOS'ifing the libpcap makefile... +libpcap.dsp: done. +DOS'ifing the libpcap makefile -- Done +--------------------------------------- +Generating the compiler files... +Building the libpcap parser and scanner... + --- Done! +Generating the compiler files -- Done + +10. Check that the version of libpcap in + %BUILD_TREE%\winpcap\wpcap\libpcap\pcap.c line 1321 "static const char pcap_version_string[] = "libpcap version 0.9[.x]";" makes sense (??? WHAT DOES IT MEAN???) -15. Check that the version of wpcap in - %BUILD_TREE%\winpcap\wpcap\libpcap\pcap.c line 878 +11. Check that the version of wpcap in + %BUILD_TREE%\winpcap\wpcap\libpcap\pcap.c line 1330 "static const char wpcap_version_string[] = "3.1";" is correct. -16. Zip the contents of the 5 folders +12. Zip the contents of the 5 folders %BUILD_TREE%\winpcap_oem %BUILD_TREE%\winpcap %BUILD_TREE%\libpcap_ @@ -88,32 +98,22 @@ How to compile WinPcap PRO (NOT for the Toolkit) V %BUILD_TREE%\sources.zip -17. Open a Win 2000 DDK Free build environment. Go into - %BUILD_TREE%\winpcap_oem\packetntx. - Execute "compileDriver.bat". Prefast 8.0.86081 should issue 21 warnings - (20080821). - Close the build environment. - -18. Open the WinNT4 DDK Release build environment. Go into - %BUILD_TREE%\winpcap_oem\packetntx. - Execute "compileDriver.bat". Close the build - environment. -19. Open the Windows Server 2003 Free x64 build environment. Go into +13. Open the WinNT4 DDK Release build environment. Go into %BUILD_TREE%\winpcap_oem\packetntx. Execute "compileDriver.bat". Close the build environment. -20. Open %BUILD_TREE%\winpcap_oem\MakeAll.sln with Visual Studio 2005 SP1. +14. Open %BUILD_TREE%\winpcap_oem\MakeAll.sln with Visual Studio 2005 SP1. -21. Choose the "Release|Win32" configuration, and then use Build->Rebuild Solution. +15. Choose the "Release|X64" configuration, and then use Build->Rebuild Solution. No warnings should be generated. -22. Choose the "Release|X64" configuration, and then use Build->Rebuild Solution. +16. Choose the "Release|Win32" configuration, and then use Build->Rebuild Solution. No warnings should be generated. - -23. If you are NOT building a SIGNED build, the build is complete :-) -24. Sign all the binaries in +17. If you are NOT building a SIGNED build, the build is complete :-) + +18. Sign all the binaries in %BUILD_TREE%\winpcap_oem\OEM\WinPcapOem\Binaries, namely x86\npfnt.sys x86\npf2k.sys @@ -129,21 +129,21 @@ How to compile WinPcap PRO (NOT for the Toolkit) signtool sign /v /ac MSCV-VSClass3.cer /s my /n "CACE Technologies, Inc." /t http://timestamp.verisign.com/scripts/timestamp.dll -25. Go back to Visual studio 2005. Choose the "Release STEP2|Win32" configuration, and then +19. Go back to Visual studio 2005. Choose the "Release STEP2|Win32" configuration, and then use Build->Rebuild solution. IT IS IMPERATIVE THAT YOU CHOOSE "REBUILD" SO THAT THE SIGNED BINARIES ARE USED. -26. Choose the "Release STEP2|x64" configuration, and then use Build->Rebuild solution. +20. Choose the "Release STEP2|x64" configuration, and then use Build->Rebuild solution. IT IS IMPERATIVE THAT YOU CHOOSE "REBUILD" SO THAT THE SIGNED BINARIES ARE USED. -27. Sign the following binaries +21. Sign the following binaries %BUILD_TREE%\winpcap_oem\wpcap\PRJ\Release REMOTE\x86\wpcap.dll %BUILD_TREE%\winpcap_oem\wpcap\PRJ\Release REMOTE\x64\wpcap.dll %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\Release\x86\packet.dll %BUILD_TREE%\winpcap_oem\OEM\WinpcapOem\Release\x64\packet.dll with the company certificate + cross certificate -28. The build is complete. +22. The build is complete. How to create the developer's pack for WinPcap PRO (NOT for the Toolkit) ------------------------------------------------------------------------ @@ -210,10 +210,11 @@ Vanilla BUILD: WinPcapPro__BuildTree.zip -MD5sum ------- +Checksums +--------- 1. Open a command prompt and go into %BUILD_TREE% 2. Type md5sum.exe WinPcapPro_* > md5sum.txt +3. Type sha1sum.exe WinPcapPro_* > sha1sum.txt From cf3d10ceb608d28a21fff58a90a0a5d86a6dc187 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Thu, 8 Oct 2009 18:21:12 +0000 Subject: [PATCH 293/316] Updated the documentation. --- dox/footer.htm | 2 +- dox/intro.htm | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/dox/footer.htm b/dox/footer.htm index 815ec18c..5af336e0 100644 --- a/dox/footer.htm +++ b/dox/footer.htm @@ -1,7 +1,7 @@

        -Copyright (c) 2005 - 2008 CACE Technologies. All rights reserved.

    +Copyright (c) 2005 - 2009 CACE Technologies. All rights reserved.

    diff --git a/dox/intro.htm b/dox/intro.htm index 1e148558..4a8391ab 100644 --- a/dox/intro.htm +++ b/dox/intro.htm @@ -74,8 +74,11 @@

    What is WinPcap Professional

  • Windows 2000
  • Windows XP (x86 and x64)
  • Windows Server 2003 (x86 and x64)
  • +
  • Windows Server 2003 R2 (x86 and x64)
  • Windows Vista (x86 and x64).
  • -
  • Windows server 2008 (x86 and x64).
  • +
  • Windows Server 2008 (x86 and x64).
  • +
  • Windows 7 (x86 and x64).
  • +
  • Windows Server 2008 R2 (x86 and x64).
  • From 04523b53a1b783a05840a42424984f73bc9f64d8 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Thu, 8 Oct 2009 19:58:00 +0000 Subject: [PATCH 294/316] Update version to 4.1.2.1741. Updated copyright to 2009. --- version.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/version.h b/version.h index ec44bf5a..ecfbfaeb 100644 --- a/version.h +++ b/version.h @@ -13,20 +13,20 @@ // 0 Dec = 324 + 30 = 334 #define WINPCAPOEM_MAJOR 4 -#define WINPCAPOEM_MINOR 0 +#define WINPCAPOEM_MINOR 1 #define WINPCAPOEM_REV 2 -#define WINPCAPOEM_BUILD 1340 +#define WINPCAPOEM_BUILD 1741 -#define WINPCAPOEM_VER_STRING "4.0.2.1340.Pro" +#define WINPCAPOEM_VER_STRING "4.1.2.1741.Pro" #define WINPCAPOEM_COMPANY_NAME "CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_NAME "Packet.dll Wrapper" -#define WINPCAPOEM_VERSION_STRING "4.0.2.1340.Pro" +#define WINPCAPOEM_VERSION_STRING "4.1.2.1741.Pro" #define WINPCAPOEM_PRODUCT_NAME "WinPcap Professional" -#define WINPCAPOEM_COPYRIGHT_STRING "Copyright © 2005-2008 CACE Technologies" +#define WINPCAPOEM_COPYRIGHT_STRING "Copyright © 2005-2009 CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_FILENAME "Packet.dll (wrapper)" #define WINPCAPOEM_BUILD_DESCRIPTION "" #define WINPCAPOEM_PRIVATE_BUILD "" -#define WINPCAPOEM_LIBPCAP_VERSION "0.9.5" +#define WINPCAPOEM_LIBPCAP_VERSION "1.0rel0b branch (20091008)" From 33abadd23be309128df96b5ab3f3f74b123688f0 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Thu, 8 Oct 2009 19:58:09 +0000 Subject: [PATCH 295/316] Update version to 4.1.2.1741. Updated copyright to 2009. --- dox/prj/winpcap_oem_noc.dox | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dox/prj/winpcap_oem_noc.dox b/dox/prj/winpcap_oem_noc.dox index 121fc964..f16dc221 100644 --- a/dox/prj/winpcap_oem_noc.dox +++ b/dox/prj/winpcap_oem_noc.dox @@ -31,7 +31,7 @@ PROJECT_NAME = "WinPcap Professional " # This could be handy for archiving the generated documentation or # if some version control system is used. -PROJECT_NUMBER = 4.0.2.1340 +PROJECT_NUMBER = 4.1.2.1741 # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. From e904e6c3768a5e493d922d6f5fa2c61cc167079a Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Thu, 8 Oct 2009 22:42:28 +0000 Subject: [PATCH 296/316] Update version to 4.1.2.1742. Updated copyright to 2009. --- version.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/version.h b/version.h index ecfbfaeb..90953869 100644 --- a/version.h +++ b/version.h @@ -15,14 +15,14 @@ #define WINPCAPOEM_MAJOR 4 #define WINPCAPOEM_MINOR 1 #define WINPCAPOEM_REV 2 -#define WINPCAPOEM_BUILD 1741 +#define WINPCAPOEM_BUILD 1742 -#define WINPCAPOEM_VER_STRING "4.1.2.1741.Pro" +#define WINPCAPOEM_VER_STRING "4.1.2.1742.Pro" #define WINPCAPOEM_COMPANY_NAME "CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_NAME "Packet.dll Wrapper" -#define WINPCAPOEM_VERSION_STRING "4.1.2.1741.Pro" +#define WINPCAPOEM_VERSION_STRING "4.1.2.1742.Pro" #define WINPCAPOEM_PRODUCT_NAME "WinPcap Professional" #define WINPCAPOEM_COPYRIGHT_STRING "Copyright © 2005-2009 CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_FILENAME "Packet.dll (wrapper)" From 6061d18eb56b1e03bb3a618710ff6ff6ed3456a8 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Thu, 8 Oct 2009 22:42:38 +0000 Subject: [PATCH 297/316] Update version to 4.1.2.1742. Updated copyright to 2009. --- dox/prj/winpcap_oem_noc.dox | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dox/prj/winpcap_oem_noc.dox b/dox/prj/winpcap_oem_noc.dox index f16dc221..7c8c8324 100644 --- a/dox/prj/winpcap_oem_noc.dox +++ b/dox/prj/winpcap_oem_noc.dox @@ -31,7 +31,7 @@ PROJECT_NAME = "WinPcap Professional " # This could be handy for archiving the generated documentation or # if some version control system is used. -PROJECT_NUMBER = 4.1.2.1741 +PROJECT_NUMBER = 4.1.2.1742 # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. From 430c5708a4fd1a4897c851b701052bb8f9af5a22 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Thu, 17 Dec 2009 06:12:09 +0000 Subject: [PATCH 298/316] Do not delete the driver immediately after we have loaded it. It causes some issues with some backup software (as reported by McAfee). Delete it when the driver gets unloaded. --- OEM/WinpcapOem/WinPcapOem.cpp | 49 +++++++++++++++++++++++++++++++++-- 1 file changed, 47 insertions(+), 2 deletions(-) diff --git a/OEM/WinpcapOem/WinPcapOem.cpp b/OEM/WinpcapOem/WinPcapOem.cpp index 5285595d..6ac76dc1 100644 --- a/OEM/WinpcapOem/WinPcapOem.cpp +++ b/OEM/WinpcapOem/WinPcapOem.cpp @@ -790,7 +790,7 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) delete_service(NPF_DRIVER_NAME); _unlink(g_DllFullPathNm); _unlink(g_DllFullPathNoNm); - _unlink(g_DriverFullPath); + WoemDeleteDriverBinary(g_DriverFullPath, is64BitOs); ReleaseMutex(g_hGlobalMutex); @@ -859,7 +859,10 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) // // We've loaded the driver, we can delete its binary // - WoemDeleteDriverBinary(g_DriverFullPath, is64BitOs); +// +// MCAFEE +// +// WoemDeleteDriverBinary(g_DriverFullPath, is64BitOs); } else { @@ -991,6 +994,39 @@ BOOL WoemLeaveDll() { DWORD result; BOOLEAN retry; +/// +/// MCAFEE +/// + BOOLEAN is64BitOs = FALSE; + CHAR osArchitecture[256]; + HKEY environmentKey = NULL; + DWORD keyType; + DWORD bufSize; + + bufSize = sizeof(osArchitecture); + if (RegOpenKey(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment", &environmentKey) != ERROR_SUCCESS + || RegQueryValueEx(environmentKey, "PROCESSOR_ARCHITECTURE", NULL,&keyType,(LPBYTE)&osArchitecture,&bufSize) != ERROR_SUCCESS + || keyType != REG_SZ) + { + // + // we ignore the error and assume it's x86 + // + } + else + if (_stricmp("AMD64", osArchitecture) == 0) + { + is64BitOs = TRUE; + RegCloseKey(environmentKey); + } + + if (environmentKey != NULL) + { + RegCloseKey(environmentKey); + } + +/// +/// MCAFEE +/// // // Try to acquire the ownership of the mutex @@ -1064,6 +1100,15 @@ BOOL WoemLeaveDll() // delete_service(NPF_DRIVER_NAME); + +/// +/// MCAFEE +/// + WoemDeleteDriverBinary(g_DriverFullPath, is64BitOs); +/// +/// MCAFEE +/// + // // Old registry based WinPcap names // From 6a7ada673bd5868454627e792dec4f7cedb902ac Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Thu, 17 Dec 2009 06:35:09 +0000 Subject: [PATCH 299/316] Updated version to 4.1.2.1810 --- version.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/version.h b/version.h index 90953869..d64d5952 100644 --- a/version.h +++ b/version.h @@ -15,14 +15,14 @@ #define WINPCAPOEM_MAJOR 4 #define WINPCAPOEM_MINOR 1 #define WINPCAPOEM_REV 2 -#define WINPCAPOEM_BUILD 1742 +#define WINPCAPOEM_BUILD 1810 -#define WINPCAPOEM_VER_STRING "4.1.2.1742.Pro" +#define WINPCAPOEM_VER_STRING "4.1.2.1810.Pro" #define WINPCAPOEM_COMPANY_NAME "CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_NAME "Packet.dll Wrapper" -#define WINPCAPOEM_VERSION_STRING "4.1.2.1742.Pro" +#define WINPCAPOEM_VERSION_STRING "4.1.2.1810.Pro" #define WINPCAPOEM_PRODUCT_NAME "WinPcap Professional" #define WINPCAPOEM_COPYRIGHT_STRING "Copyright © 2005-2009 CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_FILENAME "Packet.dll (wrapper)" From 2341701651c71f431c18d52abc6fdf61d51fbedc Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Thu, 17 Dec 2009 06:35:38 +0000 Subject: [PATCH 300/316] Updated version to 4.1.2.1810 --- dox/prj/winpcap_oem_noc.dox | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dox/prj/winpcap_oem_noc.dox b/dox/prj/winpcap_oem_noc.dox index 7c8c8324..2bac2b9f 100644 --- a/dox/prj/winpcap_oem_noc.dox +++ b/dox/prj/winpcap_oem_noc.dox @@ -31,7 +31,7 @@ PROJECT_NAME = "WinPcap Professional " # This could be handy for archiving the generated documentation or # if some version control system is used. -PROJECT_NUMBER = 4.1.2.1742 +PROJECT_NUMBER = 4.1.2.1810 # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. From ec4c58e12f77f44b29deb432df5cbdc0a6bb4083 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Tue, 23 Feb 2010 01:23:46 +0000 Subject: [PATCH 301/316] Play with the x64 FS redirector only in the 32bit version of the DLL. --- OEM/WinpcapOem/WinPcapOem.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/OEM/WinpcapOem/WinPcapOem.cpp b/OEM/WinpcapOem/WinPcapOem.cpp index 6ac76dc1..59e26547 100644 --- a/OEM/WinpcapOem/WinPcapOem.cpp +++ b/OEM/WinpcapOem/WinPcapOem.cpp @@ -1482,6 +1482,7 @@ BOOL WoemCreateBinaryNames() // note: this function has actually nothing to BOOL WoemDeleteDriverBinary(char* FileName, BOOL bDisableFsRedirector) { +#ifndef _AMD64_ PVOID OldFsRedirectorValue; HMODULE hKernel32Dll; Wow64DisableWow64FsRedirectionHandler DisableFsRedirector; @@ -1521,9 +1522,11 @@ BOOL WoemDeleteDriverBinary(char* FileName, BOOL bDisableFsRedirector) return FALSE; } } +#endif _unlink(FileName); +#ifndef _AMD64_ if (bDisableFsRedirector) { @@ -1537,6 +1540,7 @@ BOOL WoemDeleteDriverBinary(char* FileName, BOOL bDisableFsRedirector) FreeLibrary(hKernel32Dll); } +#endif return TRUE; } From edf529519d7204c47fa7395abe935fc9716a386b Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Tue, 23 Feb 2010 20:17:28 +0000 Subject: [PATCH 302/316] Updated version to 4.1.2.1879 (4.1.1). --- dox/prj/winpcap_oem_noc.dox | 2 +- version.h | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/dox/prj/winpcap_oem_noc.dox b/dox/prj/winpcap_oem_noc.dox index 2bac2b9f..b8e994bb 100644 --- a/dox/prj/winpcap_oem_noc.dox +++ b/dox/prj/winpcap_oem_noc.dox @@ -31,7 +31,7 @@ PROJECT_NAME = "WinPcap Professional " # This could be handy for archiving the generated documentation or # if some version control system is used. -PROJECT_NUMBER = 4.1.2.1810 +PROJECT_NUMBER = 4.1.2.1879 # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. diff --git a/version.h b/version.h index d64d5952..9ba2b22f 100644 --- a/version.h +++ b/version.h @@ -15,16 +15,16 @@ #define WINPCAPOEM_MAJOR 4 #define WINPCAPOEM_MINOR 1 #define WINPCAPOEM_REV 2 -#define WINPCAPOEM_BUILD 1810 +#define WINPCAPOEM_BUILD 1879 -#define WINPCAPOEM_VER_STRING "4.1.2.1810.Pro" +#define WINPCAPOEM_VER_STRING "4.1.2.1879.Pro" #define WINPCAPOEM_COMPANY_NAME "CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_NAME "Packet.dll Wrapper" -#define WINPCAPOEM_VERSION_STRING "4.1.2.1810.Pro" +#define WINPCAPOEM_VERSION_STRING "4.1.2.1879.Pro" #define WINPCAPOEM_PRODUCT_NAME "WinPcap Professional" -#define WINPCAPOEM_COPYRIGHT_STRING "Copyright © 2005-2009 CACE Technologies" +#define WINPCAPOEM_COPYRIGHT_STRING "Copyright © 2005-2010 CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_FILENAME "Packet.dll (wrapper)" #define WINPCAPOEM_BUILD_DESCRIPTION "" #define WINPCAPOEM_PRIVATE_BUILD "" From 7d0b85352144d4fafe11f3fd9b153f53aa34cc49 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 23 Jun 2010 00:00:08 +0000 Subject: [PATCH 303/316] Exported pcap_freedatalinks. --- wpcap/PRJ/WPCAP.DEF | 1 + 1 file changed, 1 insertion(+) diff --git a/wpcap/PRJ/WPCAP.DEF b/wpcap/PRJ/WPCAP.DEF index f7ca8b92..747abb81 100755 --- a/wpcap/PRJ/WPCAP.DEF +++ b/wpcap/PRJ/WPCAP.DEF @@ -91,3 +91,4 @@ EXPORTS pcap_set_buffer_size pcap_hopen_offline pcap_setdirection + pcap_free_datalinks From 141b5cf7ea4b02c4c7740c6c48e36675f0834e10 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 23 Jun 2010 00:06:36 +0000 Subject: [PATCH 304/316] Updated version to 4.1.2.1999 --- dox/prj/winpcap_oem_noc.dox | 2 +- version.h | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dox/prj/winpcap_oem_noc.dox b/dox/prj/winpcap_oem_noc.dox index b8e994bb..229a8b80 100644 --- a/dox/prj/winpcap_oem_noc.dox +++ b/dox/prj/winpcap_oem_noc.dox @@ -31,7 +31,7 @@ PROJECT_NAME = "WinPcap Professional " # This could be handy for archiving the generated documentation or # if some version control system is used. -PROJECT_NUMBER = 4.1.2.1879 +PROJECT_NUMBER = 4.1.2.1999 # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. diff --git a/version.h b/version.h index 9ba2b22f..814f075c 100644 --- a/version.h +++ b/version.h @@ -15,14 +15,14 @@ #define WINPCAPOEM_MAJOR 4 #define WINPCAPOEM_MINOR 1 #define WINPCAPOEM_REV 2 -#define WINPCAPOEM_BUILD 1879 +#define WINPCAPOEM_BUILD 1999 -#define WINPCAPOEM_VER_STRING "4.1.2.1879.Pro" +#define WINPCAPOEM_VER_STRING "4.1.2.1999.Pro" #define WINPCAPOEM_COMPANY_NAME "CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_NAME "Packet.dll Wrapper" -#define WINPCAPOEM_VERSION_STRING "4.1.2.1879.Pro" +#define WINPCAPOEM_VERSION_STRING "4.1.2.1999.Pro" #define WINPCAPOEM_PRODUCT_NAME "WinPcap Professional" #define WINPCAPOEM_COPYRIGHT_STRING "Copyright © 2005-2010 CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_FILENAME "Packet.dll (wrapper)" From 52c37d03a92eab37fb36e64aceea7db120caaa02 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Fri, 25 Jun 2010 19:18:04 +0000 Subject: [PATCH 305/316] Updated version to 4.1.2.2001 --- dox/prj/winpcap_oem_noc.dox | 2 +- version.h | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dox/prj/winpcap_oem_noc.dox b/dox/prj/winpcap_oem_noc.dox index 229a8b80..dbc92de0 100644 --- a/dox/prj/winpcap_oem_noc.dox +++ b/dox/prj/winpcap_oem_noc.dox @@ -31,7 +31,7 @@ PROJECT_NAME = "WinPcap Professional " # This could be handy for archiving the generated documentation or # if some version control system is used. -PROJECT_NUMBER = 4.1.2.1999 +PROJECT_NUMBER = 4.1.2.2001 # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. diff --git a/version.h b/version.h index 814f075c..de83e9ca 100644 --- a/version.h +++ b/version.h @@ -15,14 +15,14 @@ #define WINPCAPOEM_MAJOR 4 #define WINPCAPOEM_MINOR 1 #define WINPCAPOEM_REV 2 -#define WINPCAPOEM_BUILD 1999 +#define WINPCAPOEM_BUILD 2001 -#define WINPCAPOEM_VER_STRING "4.1.2.1999.Pro" +#define WINPCAPOEM_VER_STRING "4.1.2.2001.Pro" #define WINPCAPOEM_COMPANY_NAME "CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_NAME "Packet.dll Wrapper" -#define WINPCAPOEM_VERSION_STRING "4.1.2.1999.Pro" +#define WINPCAPOEM_VERSION_STRING "4.1.2.2001.Pro" #define WINPCAPOEM_PRODUCT_NAME "WinPcap Professional" #define WINPCAPOEM_COPYRIGHT_STRING "Copyright © 2005-2010 CACE Technologies" #define WINPCAPOEM_PACKET_WRAPPER_FILENAME "Packet.dll (wrapper)" From 93112304e0e39bd322ca83bc2d68f2bbc59ef0af Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Fri, 27 Aug 2010 16:43:42 +0000 Subject: [PATCH 306/316] Bug fixing: a registry handle was released twice on a 64bit OS when unloading packet.dll. This would could an exception that was caught when running the app under a debugger. --- OEM/WinpcapOem/WinPcapOem.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/OEM/WinpcapOem/WinPcapOem.cpp b/OEM/WinpcapOem/WinPcapOem.cpp index 59e26547..1bc42438 100644 --- a/OEM/WinpcapOem/WinPcapOem.cpp +++ b/OEM/WinpcapOem/WinPcapOem.cpp @@ -1016,7 +1016,6 @@ BOOL WoemLeaveDll() if (_stricmp("AMD64", osArchitecture) == 0) { is64BitOs = TRUE; - RegCloseKey(environmentKey); } if (environmentKey != NULL) From 30aee3343762b6ba68a801dd9ed895d19673bd41 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Wed, 12 Jan 2011 18:36:19 +0000 Subject: [PATCH 307/316] Do not copy the license. --- build_wpdpack_oem.bat | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build_wpdpack_oem.bat b/build_wpdpack_oem.bat index dcfdc267..40c6fcb3 100755 --- a/build_wpdpack_oem.bat +++ b/build_wpdpack_oem.bat @@ -17,6 +17,6 @@ rem PAUSE call create_examples_oem.bat %WOEM_WPD_VANILLA_FOLDER% rem PAUSE call create_docs_oem.bat %WOEM_WPD_VANILLA_FOLDER% -echo Copying the license agreement file -xcopy /v /Y "LicenseAgreement.pdf" %WOEM_WPD_VANILLA_FOLDER%. >nul +rem echo Copying the license agreement file +rem xcopy /v /Y "LicenseAgreement.pdf" %WOEM_WPD_VANILLA_FOLDER%. >nul set WOEM_WPD_VANILLA_FOLDER= From 71bf5a4ee75cde47f027fedfa3fca671ab25d8fe Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Fri, 17 Jun 2011 17:55:10 +0000 Subject: [PATCH 308/316] Modified the code and signature of create_driver_service and start_service to return an error string in case of failure. --- OEM/WinpcapOem/SerivcesInstallers.cpp | 147 +++++++++++++++++++++----- 1 file changed, 120 insertions(+), 27 deletions(-) diff --git a/OEM/WinpcapOem/SerivcesInstallers.cpp b/OEM/WinpcapOem/SerivcesInstallers.cpp index fdbd73ea..f7982b89 100644 --- a/OEM/WinpcapOem/SerivcesInstallers.cpp +++ b/OEM/WinpcapOem/SerivcesInstallers.cpp @@ -1,6 +1,6 @@ /* * Copyright (c) 2003 - 2005 NetGroup, Politecnico di Torino (Italy). - * Copyright (c) 2005 CACE Technologies, Davis (California). + * Copyright (c) 2005 -2011 Riverbed Technology, San Francisco (California). * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -89,6 +89,7 @@ inline ULONG ReleaseObj(IUnknown* punk) } void DisplayErrorText(DWORD dwLastError); +static void ConvertLastErrorToString(DWORD dwLastError, char *errorString, size_t length); /////////////////////////////////////////////////////////////////////// @@ -717,20 +718,29 @@ int change_start_type_service(LPCTSTR ServiceName, DWORD StartType) } -int start_service(LPCTSTR ServiceName) +int start_service(LPCTSTR ServiceName, char* ErrorString, size_t Length) { SC_HANDLE SCM_Handle; SC_HANDLE ServiceHandle; DWORD ReturnValue; - + DWORD LastError; + char InternalErrorMsg[PACKET_ERRSTR_SIZE]; + SCM_Handle=OpenSCManager(NULL, /*local machine */ NULL, /*active database*/ SC_MANAGER_ALL_ACCESS); if (SCM_Handle == NULL) { - TRACE_MESSAGE("Error opening Service Control Manager: "); - DisplayErrorText(GetLastError()); + LastError = GetLastError(); + ::ConvertLastErrorToString(LastError, InternalErrorMsg, PACKET_ERRSTR_SIZE); + if (Length > 0) + { + ErrorString[Length - 1] = '\0'; + _snprintf(ErrorString, Length, "Error opening Service Control Manager: %s", InternalErrorMsg); + } + TRACE_MESSAGE("Error opening Service Control Manager: %s", InternalErrorMsg); + return -1; } @@ -741,8 +751,14 @@ int start_service(LPCTSTR ServiceName) if (ServiceHandle == NULL) { - TRACE_MESSAGE("Error opening service %s: ",ServiceName); - DisplayErrorText(GetLastError()); + LastError = GetLastError(); + ::ConvertLastErrorToString(LastError, InternalErrorMsg, PACKET_ERRSTR_SIZE); + if (Length > 0) + { + ErrorString[Length - 1] = '\0'; + _snprintf(ErrorString, Length, "Error opening service %s: %s", ServiceName, InternalErrorMsg); + } + TRACE_MESSAGE("Error opening service %s: %s", ServiceName, InternalErrorMsg); if (!CloseServiceHandle(SCM_Handle)) TRACE_MESSAGE("Error closing Service control Manager\n"); @@ -754,8 +770,14 @@ int start_service(LPCTSTR ServiceName) if (!StartService(ServiceHandle,0,NULL)) { - TRACE_MESSAGE("Error starting service %s:",ServiceName); - DisplayErrorText(GetLastError()); + LastError = GetLastError(); + ::ConvertLastErrorToString(LastError, InternalErrorMsg, PACKET_ERRSTR_SIZE); + if (Length > 0) + { + ErrorString[Length - 1] = '\0'; + _snprintf(ErrorString, Length, "Error starting service %s: %s", ServiceName, InternalErrorMsg); + } + TRACE_MESSAGE("Error starting service %s: %s", ServiceName, InternalErrorMsg); ReturnValue=-1; } @@ -764,27 +786,42 @@ int start_service(LPCTSTR ServiceName) if (!CloseServiceHandle(ServiceHandle)) { - TRACE_MESSAGE("Error closing service %s\n",ServiceName); + LastError = GetLastError(); + ::ConvertLastErrorToString(LastError, InternalErrorMsg, PACKET_ERRSTR_SIZE); + if (Length > 0) + { + ErrorString[Length - 1] = '\0'; + _snprintf(ErrorString, Length, "Error closing service handle %s: %s", ServiceName, InternalErrorMsg); + } + TRACE_MESSAGE("Error closing service handle %s: %s", ServiceName, InternalErrorMsg); ReturnValue=-1; } if (!CloseServiceHandle(SCM_Handle)) { - TRACE_MESSAGE("Error closing Service control Manager\n"); + LastError = GetLastError(); + ::ConvertLastErrorToString(LastError, InternalErrorMsg, PACKET_ERRSTR_SIZE); + if (Length > 0) + { + ErrorString[Length - 1] = '\0'; + _snprintf(ErrorString, Length, "Error closing Service Control Manager: %s", InternalErrorMsg); + } + TRACE_MESSAGE("Error closing Service Control Manager: %s", InternalErrorMsg); ReturnValue=-1; } return ReturnValue; - } -int create_driver_service(LPCTSTR ServiceName,LPCTSTR ServiceDescription,LPCTSTR ServicePath) +int create_driver_service(LPCTSTR ServiceName,LPCTSTR ServiceDescription,LPCTSTR ServicePath, char *ErrorString, size_t Length) { SC_HANDLE SCM_Handle; SC_HANDLE ServiceHandle; - DWORD ReturnValue; + DWORD LastError; + char InternalErrorMsg[PACKET_ERRSTR_SIZE]; + int ReturnValue; SCM_Handle=OpenSCManager(NULL, /*local machine */ NULL, /*active database*/ @@ -792,10 +829,14 @@ int create_driver_service(LPCTSTR ServiceName,LPCTSTR ServiceDescription,LPCTSTR if (SCM_Handle==NULL) { - - TRACE_MESSAGE("Error opening Service Control Manager: "); - DisplayErrorText(GetLastError()); - + LastError = GetLastError(); + ::ConvertLastErrorToString(LastError, InternalErrorMsg, PACKET_ERRSTR_SIZE); + if (Length > 0) + { + ErrorString[Length-1] = '\0'; + _snprintf(ErrorString, Length, "Error opening Service Control Manager: %s", InternalErrorMsg); + } + TRACE_MESSAGE("Error opening Service Control Manager: %s", InternalErrorMsg); return -1; } @@ -815,7 +856,8 @@ int create_driver_service(LPCTSTR ServiceName,LPCTSTR ServiceDescription,LPCTSTR if (ServiceHandle==NULL) { - if(GetLastError() == ERROR_SERVICE_EXISTS) + LastError = GetLastError(); + if(LastError == ERROR_SERVICE_EXISTS) { if (!CloseServiceHandle(SCM_Handle)) if (stdout != NULL) @@ -824,17 +866,19 @@ int create_driver_service(LPCTSTR ServiceName,LPCTSTR ServiceDescription,LPCTSTR return 0; } - TRACE_MESSAGE("Error creating service %s: (%d)", - ServiceName, - GetLastError()); - - DisplayErrorText(GetLastError()); + ::ConvertLastErrorToString(LastError, InternalErrorMsg, PACKET_ERRSTR_SIZE); + if (Length > 0) + { + ErrorString[Length - 1] = '\0'; + _snprintf(ErrorString, Length, "Error creating service %s: %s", ServiceName, InternalErrorMsg); + } + TRACE_MESSAGE("%s", ErrorString); if (!CloseServiceHandle(SCM_Handle)) if (stdout != NULL) TRACE_MESSAGE("Error closing Service control Manager\n"); - return -1; + return -1; } TRACE_MESSAGE("Service %s successfully created.\n",ServiceName); @@ -843,14 +887,26 @@ int create_driver_service(LPCTSTR ServiceName,LPCTSTR ServiceDescription,LPCTSTR if (!CloseServiceHandle(ServiceHandle)) { - TRACE_MESSAGE("Error closing service %s.\n",ServiceName); + ::ConvertLastErrorToString(GetLastError(), InternalErrorMsg, PACKET_ERRSTR_SIZE); + if (Length > 0) + { + ErrorString[Length - 1] = '\0'; + _snprintf(ErrorString, Length, "Error closing service %s: %s", ServiceName, InternalErrorMsg); + } + TRACE_MESSAGE("Error closing service %s: %s", ServiceName, InternalErrorMsg); ReturnValue=-1; } if (!CloseServiceHandle(SCM_Handle)) { - TRACE_MESSAGE("Error closing Service control Manager\n"); + ::ConvertLastErrorToString(GetLastError(), InternalErrorMsg, PACKET_ERRSTR_SIZE); + if (Length > 0) + { + ErrorString[Length - 1] = '\0'; + _snprintf(ErrorString, Length, "Error closing Service Control Manager: %s", InternalErrorMsg); + } + TRACE_MESSAGE("Error closing Service Control Manager: %s", InternalErrorMsg); ReturnValue=-1; } @@ -946,6 +1002,42 @@ int check_if_service_is_present(LPCTSTR ServiceName) return 0; } +void ConvertLastErrorToString(DWORD dwLastError, char *errorString, size_t length) +{ + LPSTR MessageBuffer; + DWORD dwBufferLength; + + DWORD dwFormatFlags = FORMAT_MESSAGE_ALLOCATE_BUFFER | + FORMAT_MESSAGE_IGNORE_INSERTS | + FORMAT_MESSAGE_FROM_SYSTEM ; + + // + // Call FormatMessage() to allow for message + // text to be acquired from the system + // or from the supplied module handle. + // + + if(dwBufferLength = FormatMessageA( + dwFormatFlags, + NULL, // module to get message from (NULL == system) + dwLastError, + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // default language + (LPSTR) &MessageBuffer, + 0, + NULL + )) + { + if (length > 0) + { + errorString[length-1] = '\0'; + strncpy(errorString, MessageBuffer, length-1); + } + // + // Free the buffer allocated by the system. + // + LocalFree(MessageBuffer); + } +} void DisplayErrorText(DWORD dwLastError) { @@ -987,3 +1079,4 @@ void DisplayErrorText(DWORD dwLastError) if(hModule != NULL) FreeLibrary(hModule); } + From 7cbdbaceb76283c858cf84b48ebd729e687eaec1 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Fri, 17 Jun 2011 17:56:29 +0000 Subject: [PATCH 309/316] Modified the code and signature of create_driver_service and start_service to return an error string in case of failure. --- OEM/WinpcapOem/WinPcapOem.cpp | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/OEM/WinpcapOem/WinPcapOem.cpp b/OEM/WinpcapOem/WinPcapOem.cpp index 1bc42438..c1bafffe 100644 --- a/OEM/WinpcapOem/WinPcapOem.cpp +++ b/OEM/WinpcapOem/WinPcapOem.cpp @@ -207,9 +207,11 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) BOOL is64BitOs = FALSE; BOOL bLoadDriverResult; BOOL bUseNetMonPacket; - + char errorString[PACKET_ERRSTR_SIZE]; + TRACE_ENTER("WoemEnterDllInternal"); + errorString[PACKET_ERRSTR_SIZE - 1] = '\0'; WoemErrorString[PACKET_ERRSTR_SIZE - 1] = '\0'; #ifdef TNT_BUILD @@ -755,9 +757,11 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) // if(create_driver_service(NPF_DRIVER_NAME, NPF_SERVICE_DESC, - NPF_DRIVER_COMPLETE_PATH) == -1) + NPF_DRIVER_COMPLETE_PATH, + errorString, PACKET_ERRSTR_SIZE) == -1) { - WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("unable to create the packet driver service"); + _snprintf(WoemErrorString, PACKET_ERRSTR_SIZE - 1, "unable to create the packet driver service: %s", errorString); + TRACE_MESSAGE("%s", WoemErrorString); _unlink(g_DllFullPathNm); _unlink(g_DllFullPathNoNm); @@ -783,9 +787,11 @@ BOOL WoemEnterDllInternal(HINSTANCE DllHandle, char *WoemErrorString) // // Load the driver // - if(start_service(NPF_DRIVER_NAME) == -1) + if(start_service(NPF_DRIVER_NAME, errorString, PACKET_ERRSTR_SIZE) == -1) { - WOEM_ENTER_DLL_TRACE_AND_COPY_ERROR("unable to start the packet driver service"); + + _snprintf(WoemErrorString, PACKET_ERRSTR_SIZE - 1, "unable to start the packet driver service: %s", errorString); + TRACE_MESSAGE("%s", WoemErrorString); delete_service(NPF_DRIVER_NAME); _unlink(g_DllFullPathNm); @@ -994,7 +1000,6 @@ BOOL WoemLeaveDll() { DWORD result; BOOLEAN retry; -/// /// MCAFEE /// BOOLEAN is64BitOs = FALSE; From b87821cf59719ab58afdc7ff16dcbf00bd41062f Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Fri, 17 Jun 2011 17:56:56 +0000 Subject: [PATCH 310/316] Modified the code and signature of create_driver_service and start_service to return an error string in case of failure. --- OEM/WinpcapOem/WinpcapOem.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/OEM/WinpcapOem/WinpcapOem.h b/OEM/WinpcapOem/WinpcapOem.h index 77e284a7..d46cff3c 100644 --- a/OEM/WinpcapOem/WinpcapOem.h +++ b/OEM/WinpcapOem/WinpcapOem.h @@ -18,8 +18,8 @@ //////////////////////////////////////////////////////////////////// int delete_service(LPCTSTR ServiceName); int stop_service(LPCTSTR ServiceName); -int start_service(LPCTSTR ServiceName); -int create_driver_service(LPCTSTR ServiceName, LPCTSTR ServiceDescription, LPCTSTR ServicePath); +int start_service(LPCTSTR ServiceName, char *ErrorString, size_t Length); +int create_driver_service(LPCTSTR ServiceName, LPCTSTR ServiceDescription, LPCTSTR ServicePath, char* ErrorString, size_t Length); int check_if_service_is_running(LPCTSTR ServiceName); int check_if_service_is_present(LPCTSTR ServiceName); int change_start_type_service(LPCTSTR ServiceName, DWORD StartType); From edb4783c2c9a2a18d07fa4744c833462d0b844e2 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Fri, 17 Jun 2011 20:27:27 +0000 Subject: [PATCH 311/316] Bumped version to 4.1.2.2358 and Riverbed Technology. --- dox/prj/winpcap_oem_noc.dox | 2 +- version.h | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/dox/prj/winpcap_oem_noc.dox b/dox/prj/winpcap_oem_noc.dox index dbc92de0..7043dbaa 100644 --- a/dox/prj/winpcap_oem_noc.dox +++ b/dox/prj/winpcap_oem_noc.dox @@ -31,7 +31,7 @@ PROJECT_NAME = "WinPcap Professional " # This could be handy for archiving the generated documentation or # if some version control system is used. -PROJECT_NUMBER = 4.1.2.2001 +PROJECT_NUMBER = 4.1.2.2358 # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. diff --git a/version.h b/version.h index de83e9ca..cfaeb401 100644 --- a/version.h +++ b/version.h @@ -15,16 +15,16 @@ #define WINPCAPOEM_MAJOR 4 #define WINPCAPOEM_MINOR 1 #define WINPCAPOEM_REV 2 -#define WINPCAPOEM_BUILD 2001 +#define WINPCAPOEM_BUILD 2358 -#define WINPCAPOEM_VER_STRING "4.1.2.2001.Pro" +#define WINPCAPOEM_VER_STRING "4.1.2.2358.Pro" -#define WINPCAPOEM_COMPANY_NAME "CACE Technologies" +#define WINPCAPOEM_COMPANY_NAME "Riverbed Technology" #define WINPCAPOEM_PACKET_WRAPPER_NAME "Packet.dll Wrapper" -#define WINPCAPOEM_VERSION_STRING "4.1.2.2001.Pro" +#define WINPCAPOEM_VERSION_STRING "4.1.2.2358.Pro" #define WINPCAPOEM_PRODUCT_NAME "WinPcap Professional" -#define WINPCAPOEM_COPYRIGHT_STRING "Copyright © 2005-2010 CACE Technologies" +#define WINPCAPOEM_COPYRIGHT_STRING "Copyright © 2005-2011 Riverbed Technology" #define WINPCAPOEM_PACKET_WRAPPER_FILENAME "Packet.dll (wrapper)" #define WINPCAPOEM_BUILD_DESCRIPTION "" #define WINPCAPOEM_PRIVATE_BUILD "" From 3d8b0c224c9726b8a88a0cbe4fe09c621dc0371a Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Mon, 5 Dec 2011 20:16:43 +0000 Subject: [PATCH 312/316] Bumped version to 4.1.2.2529 (WPRO_41_2529) --- dox/prj/winpcap_oem_noc.dox | 2 +- version.h | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dox/prj/winpcap_oem_noc.dox b/dox/prj/winpcap_oem_noc.dox index 7043dbaa..698589e6 100644 --- a/dox/prj/winpcap_oem_noc.dox +++ b/dox/prj/winpcap_oem_noc.dox @@ -31,7 +31,7 @@ PROJECT_NAME = "WinPcap Professional " # This could be handy for archiving the generated documentation or # if some version control system is used. -PROJECT_NUMBER = 4.1.2.2358 +PROJECT_NUMBER = 4.1.2.2529 # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. diff --git a/version.h b/version.h index cfaeb401..f9a3ceb3 100644 --- a/version.h +++ b/version.h @@ -15,14 +15,14 @@ #define WINPCAPOEM_MAJOR 4 #define WINPCAPOEM_MINOR 1 #define WINPCAPOEM_REV 2 -#define WINPCAPOEM_BUILD 2358 +#define WINPCAPOEM_BUILD 2529 -#define WINPCAPOEM_VER_STRING "4.1.2.2358.Pro" +#define WINPCAPOEM_VER_STRING "4.1.2.2529.Pro" #define WINPCAPOEM_COMPANY_NAME "Riverbed Technology" #define WINPCAPOEM_PACKET_WRAPPER_NAME "Packet.dll Wrapper" -#define WINPCAPOEM_VERSION_STRING "4.1.2.2358.Pro" +#define WINPCAPOEM_VERSION_STRING "4.1.2.2529.Pro" #define WINPCAPOEM_PRODUCT_NAME "WinPcap Professional" #define WINPCAPOEM_COPYRIGHT_STRING "Copyright © 2005-2011 Riverbed Technology" #define WINPCAPOEM_PACKET_WRAPPER_FILENAME "Packet.dll (wrapper)" From 62f1a72fc3be167a6295ae4ffe27132c367b9cd3 Mon Sep 17 00:00:00 2001 From: Gianluca Varenni Date: Mon, 12 Dec 2011 22:18:30 +0000 Subject: [PATCH 313/316] Bumped version to 4.1.2.2536 (WPRO_41_2536) --- dox/prj/winpcap_oem_noc.dox | 2 +- version.h | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dox/prj/winpcap_oem_noc.dox b/dox/prj/winpcap_oem_noc.dox index 698589e6..15b718d0 100644 --- a/dox/prj/winpcap_oem_noc.dox +++ b/dox/prj/winpcap_oem_noc.dox @@ -31,7 +31,7 @@ PROJECT_NAME = "WinPcap Professional " # This could be handy for archiving the generated documentation or # if some version control system is used. -PROJECT_NUMBER = 4.1.2.2529 +PROJECT_NUMBER = 4.1.2.2536 # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. diff --git a/version.h b/version.h index f9a3ceb3..9f019918 100644 --- a/version.h +++ b/version.h @@ -15,14 +15,14 @@ #define WINPCAPOEM_MAJOR 4 #define WINPCAPOEM_MINOR 1 #define WINPCAPOEM_REV 2 -#define WINPCAPOEM_BUILD 2529 +#define WINPCAPOEM_BUILD 2536 -#define WINPCAPOEM_VER_STRING "4.1.2.2529.Pro" +#define WINPCAPOEM_VER_STRING "4.1.2.2536.Pro" #define WINPCAPOEM_COMPANY_NAME "Riverbed Technology" #define WINPCAPOEM_PACKET_WRAPPER_NAME "Packet.dll Wrapper" -#define WINPCAPOEM_VERSION_STRING "4.1.2.2529.Pro" +#define WINPCAPOEM_VERSION_STRING "4.1.2.2536.Pro" #define WINPCAPOEM_PRODUCT_NAME "WinPcap Professional" #define WINPCAPOEM_COPYRIGHT_STRING "Copyright © 2005-2011 Riverbed Technology" #define WINPCAPOEM_PACKET_WRAPPER_FILENAME "Packet.dll (wrapper)" From 1ad7ba8e4af2ec327360554a4f07a1501e7a212f Mon Sep 17 00:00:00 2001 From: Gerald Combs Date: Wed, 3 Jun 2015 12:05:52 -0700 Subject: [PATCH 314/316] Remove the old CACE Technologies license agreement. License fees and non-disclosure agreements are no longer required. --- LicenseAgreement.pdf | Bin 45306 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 LicenseAgreement.pdf diff --git a/LicenseAgreement.pdf b/LicenseAgreement.pdf deleted file mode 100644 index 3c25f27e0272cba5dc80773797d4bd5d854ed8b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45306 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 From 12365f9741663278b4e56226e3b76c0b183a73c3 Mon Sep 17 00:00:00 2001 From: Gerald Combs Date: Wed, 3 Jun 2015 12:10:37 -0700 Subject: [PATCH 315/316] Apply the WinPcap license and a Riverbed copyright. In each applicable WinPcap OEM source code file (.h, .c, and .cpp) apply a BSD 3-clause license similar to the one used in the plain WinPcap sources. This is preparation for inclusion in the public WinPcap repository. To the best of my knowledge Riverbed Technology has sole ownership of each the changed files. --- OEM/WinpcapOem/Crypto.cpp | 31 ++++++++++++++++++++++++++++++ OEM/WinpcapOem/Crypto.h | 33 +++++++++++++++++++++++++++++++- OEM/WinpcapOem/PacketWrapper.cpp | 31 ++++++++++++++++++++++++++++++ OEM/WinpcapOem/Resources.cpp | 31 ++++++++++++++++++++++++++++++ OEM/WinpcapOem/Security.cpp | 33 +++++++++++++++++++++++++++++++- OEM/WinpcapOem/Security.h | 31 ++++++++++++++++++++++++++++++ OEM/WinpcapOem/WinPcapOem.cpp | 31 ++++++++++++++++++++++++++++++ OEM/WinpcapOem/WinpcapOem.h | 31 ++++++++++++++++++++++++++++++ OEM/WinpcapOem/WoemDebug.h | 30 ++++++++++++++++++++++++++--- wpcap/pcap_oem.c | 31 ++++++++++++++++++++++++++++++ 10 files changed, 308 insertions(+), 5 deletions(-) diff --git a/OEM/WinpcapOem/Crypto.cpp b/OEM/WinpcapOem/Crypto.cpp index 7ff6006d..3acf1144 100644 --- a/OEM/WinpcapOem/Crypto.cpp +++ b/OEM/WinpcapOem/Crypto.cpp @@ -1,3 +1,34 @@ +/* + * Copyright 2015 Riverbed Technology, San Francisco (California). + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of Riverbed Technology nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + #include #include diff --git a/OEM/WinpcapOem/Crypto.h b/OEM/WinpcapOem/Crypto.h index d6fbc94b..80534071 100644 --- a/OEM/WinpcapOem/Crypto.h +++ b/OEM/WinpcapOem/Crypto.h @@ -1,3 +1,34 @@ +/* + * Copyright 2015 Riverbed Technology, San Francisco (California). + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of Riverbed Technology nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + #ifndef __CRYPTO_H_0C32B20D_A87D_429D_A7E1_A4353B74F21A #define __CRYPTO_H_0C32B20D_A87D_429D_A7E1_A4353B74F21A @@ -7,4 +38,4 @@ INT GetHash(LPCBYTE lpbData, DWORD dwDataLen, LPBYTE lpValue, DWORD dwValueLength); -#endif //__CRYPTO_H_0C32B20D_A87D_429D_A7E1_A4353B74F21A \ No newline at end of file +#endif //__CRYPTO_H_0C32B20D_A87D_429D_A7E1_A4353B74F21A diff --git a/OEM/WinpcapOem/PacketWrapper.cpp b/OEM/WinpcapOem/PacketWrapper.cpp index e1bf42e5..affedbd6 100644 --- a/OEM/WinpcapOem/PacketWrapper.cpp +++ b/OEM/WinpcapOem/PacketWrapper.cpp @@ -1,3 +1,34 @@ +/* + * Copyright 2015 Riverbed Technology, San Francisco (California). + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of Riverbed Technology nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + #include #include "Packet32.h" #include "WinpcapOem.h" diff --git a/OEM/WinpcapOem/Resources.cpp b/OEM/WinpcapOem/Resources.cpp index 7219fdf1..36246110 100644 --- a/OEM/WinpcapOem/Resources.cpp +++ b/OEM/WinpcapOem/Resources.cpp @@ -1,3 +1,34 @@ +/* + * Copyright 2015 Riverbed Technology, San Francisco (California). + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of Riverbed Technology nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + #include #include #include "WinpcapOem.h" diff --git a/OEM/WinpcapOem/Security.cpp b/OEM/WinpcapOem/Security.cpp index 065e5443..2923d159 100644 --- a/OEM/WinpcapOem/Security.cpp +++ b/OEM/WinpcapOem/Security.cpp @@ -1,3 +1,34 @@ +/* + * Copyright 2015 Riverbed Technology, San Francisco (California). + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of Riverbed Technology nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + #include #include #include @@ -248,4 +279,4 @@ BOOL GetFileDump(LPCSTR lpFilename, LPBYTE dump, INT *pMaxDumpLen) TRACE_EXIT("GetFileDump"); return TRUE; -} \ No newline at end of file +} diff --git a/OEM/WinpcapOem/Security.h b/OEM/WinpcapOem/Security.h index 2ab10e24..c5eacc88 100644 --- a/OEM/WinpcapOem/Security.h +++ b/OEM/WinpcapOem/Security.h @@ -1,3 +1,34 @@ +/* + * Copyright 2015 Riverbed Technology, San Francisco (California). + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of Riverbed Technology nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + #ifndef __SECURITY_H_820D0C9F_A563_489b_834A_23FBB6C892F7 #define __SECURITY_H_820D0C9F_A563_489b_834A_23FBB6C892F7 diff --git a/OEM/WinpcapOem/WinPcapOem.cpp b/OEM/WinpcapOem/WinPcapOem.cpp index c1bafffe..61cf3a88 100644 --- a/OEM/WinpcapOem/WinPcapOem.cpp +++ b/OEM/WinpcapOem/WinPcapOem.cpp @@ -1,3 +1,34 @@ +/* + * Copyright 2015 Riverbed Technology, San Francisco (California). + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of Riverbed Technology nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + #include #include #include "Packet32.h" diff --git a/OEM/WinpcapOem/WinpcapOem.h b/OEM/WinpcapOem/WinpcapOem.h index d46cff3c..1403403c 100644 --- a/OEM/WinpcapOem/WinpcapOem.h +++ b/OEM/WinpcapOem/WinpcapOem.h @@ -1,3 +1,34 @@ +/* + * Copyright 2015 Riverbed Technology, San Francisco (California). + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of Riverbed Technology nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + #ifndef __WINPCAP_OEM_H_E4C69242_4757_4139_A7E4_CA06F37A5B73 #define __WINPCAP_OEM_H_E4C69242_4757_4139_A7E4_CA06F37A5B73 diff --git a/OEM/WinpcapOem/WoemDebug.h b/OEM/WinpcapOem/WoemDebug.h index f5e70349..3302c87e 100644 --- a/OEM/WinpcapOem/WoemDebug.h +++ b/OEM/WinpcapOem/WoemDebug.h @@ -1,8 +1,32 @@ /* - * Copyright (c) 2005 - * CACE Technologies LLC, Davis (CA) + * Copyright 2015 Riverbed Technology, San Francisco (California). * All rights reserved. * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of Riverbed Technology nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * */ #ifndef __WOEM_DEBUG_H_ @@ -249,4 +273,4 @@ static __inline void TRACE_MESSAGE(char *_x, ...){} #endif -#endif //__WOEM_DEBUG_H_ \ No newline at end of file +#endif //__WOEM_DEBUG_H_ diff --git a/wpcap/pcap_oem.c b/wpcap/pcap_oem.c index f7cb5c8e..90fbc939 100644 --- a/wpcap/pcap_oem.c +++ b/wpcap/pcap_oem.c @@ -1,3 +1,34 @@ +/* + * Copyright 2015 Riverbed Technology, San Francisco (California). + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of Riverbed Technology nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + #include /*! From 3e11ff954e8007c68d825a03e0d159c855db7527 Mon Sep 17 00:00:00 2001 From: Gerald Combs Date: Wed, 3 Jun 2015 12:39:02 -0700 Subject: [PATCH 316/316] Move everything into winpcap_oem. Move the contents of this (the winpcap_oem) repository into the winpcap_oem subdirectory. This is in preparation for merging with the winpcap repository. --- .gitignore => winpcap_oem/.gitignore | 0 .../Examples-pcap.diff | 0 Examples.diff => winpcap_oem/Examples.diff | 0 MakeAll.sln => winpcap_oem/MakeAll.sln | 0 .../OEM}/WinpcapOem/CopyEmbeddedFiles.vcproj | 0 {OEM => winpcap_oem/OEM}/WinpcapOem/Crypto.cpp | 0 {OEM => winpcap_oem/OEM}/WinpcapOem/Crypto.h | 0 .../OEM}/WinpcapOem/NetMonInstaller.h | 0 .../OEM}/WinpcapOem/PacketWrapper.cpp | 0 {OEM => winpcap_oem/OEM}/WinpcapOem/Resources.cpp | 0 {OEM => winpcap_oem/OEM}/WinpcapOem/Security.cpp | 0 {OEM => winpcap_oem/OEM}/WinpcapOem/Security.h | 0 .../OEM}/WinpcapOem/SerivcesInstallers.cpp | 0 .../OEM}/WinpcapOem/StaticWinpcapOem.dsp | 0 .../OEM}/WinpcapOem/StaticWinpcapOem.dsw | 0 {OEM => winpcap_oem/OEM}/WinpcapOem/WinPcapOem.cpp | 0 {OEM => winpcap_oem/OEM}/WinpcapOem/WinPcapOem.rc2 | 0 {OEM => winpcap_oem/OEM}/WinpcapOem/WinpcapOem.def | 0 {OEM => winpcap_oem/OEM}/WinpcapOem/WinpcapOem.dsp | 0 {OEM => winpcap_oem/OEM}/WinpcapOem/WinpcapOem.dsw | 0 {OEM => winpcap_oem/OEM}/WinpcapOem/WinpcapOem.h | 0 {OEM => winpcap_oem/OEM}/WinpcapOem/WinpcapOem.rc | 0 {OEM => winpcap_oem/OEM}/WinpcapOem/WinpcapOem.sln | 0 .../OEM}/WinpcapOem/WinpcapOem.vcproj | 0 {OEM => winpcap_oem/OEM}/WinpcapOem/WoemDebug.h | 0 .../OEM}/WinpcapOem/binaries/Note.txt | 0 .../OEM}/WinpcapOem/binaries/tools.bin | Bin {OEM => winpcap_oem/OEM}/WinpcapOem/idls.h | 0 {OEM => winpcap_oem/OEM}/WinpcapOem/idls_i.c | 0 {OEM => winpcap_oem/OEM}/WinpcapOem/netcfgn.h | 0 {OEM => winpcap_oem/OEM}/WinpcapOem/netcfgx.h | 0 {OEM => winpcap_oem/OEM}/WinpcapOem/pch.h | 0 {OEM => winpcap_oem/OEM}/WinpcapOem/postbuild.bat | 0 .../OEM}/WinpcapOem/postbuild_release.bat | 0 .../OEM}/WinpcapOem/prebuild_debug.bat | 0 .../OEM}/WinpcapOem/prebuild_release.bat | 0 {OEM => winpcap_oem/OEM}/WinpcapOem/resource.h | 0 {OEM => winpcap_oem/OEM}/WinpcapOem/resrc1.h | 0 {OEM => winpcap_oem/OEM}/WinpcapOem/version.h | 0 {OEM => winpcap_oem/OEM}/bin2c/BIN2C.C | 0 {OEM => winpcap_oem/OEM}/bin2c/bin2c.exe | Bin WinPcap OEM.sln => winpcap_oem/WinPcap OEM.sln | 0 build_tnt_bin.bat => winpcap_oem/build_tnt_bin.bat | 0 .../build_wpdpack_oem.bat | 0 .../build_wpdpack_oem_with_npfim.bat | 0 .../create_bin_oem.bat | 0 .../create_docs_oem.bat | 0 .../create_examples_oem.bat | 0 .../create_include_oem.bat | 0 .../create_lib_oem.bat | 0 .../create_local_examples.bat | 0 {dox => winpcap_oem/dox}/WinPcapPro_docs.html | 0 {dox => winpcap_oem/dox}/doxygen_groups.txt | 0 {dox => winpcap_oem/dox}/footer.htm | 0 {dox => winpcap_oem/dox}/header.htm | 0 {dox => winpcap_oem/dox}/intro.htm | 0 {dox => winpcap_oem/dox}/main.txt | 0 {dox => winpcap_oem/dox}/pics/CACE_logo.jpg | Bin {dox => winpcap_oem/dox}/pics/OEM_logo.jpg | Bin {dox => winpcap_oem/dox}/pics/WinPcapPro_logo.jpg | Bin {dox => winpcap_oem/dox}/prj/winpcap_oem_noc.dox | 0 {dox => winpcap_oem/dox}/style.css | 0 {dox => winpcap_oem/dox}/wpcap_samp.htm | 0 {dox => winpcap_oem/dox}/wpcap_samp1.htm | 0 {dox => winpcap_oem/dox}/wpcap_samp2.htm | 0 {dox => winpcap_oem/dox}/wpcap_tut.txt | 0 {dox => winpcap_oem/dox}/wpcap_tut1.txt | 0 {dox => winpcap_oem/dox}/wpcap_tut2.txt | 0 {dox => winpcap_oem/dox}/wpcap_tut3.txt | 0 {dox => winpcap_oem/dox}/wpcap_tut4.txt | 0 {dox => winpcap_oem/dox}/wpcap_tut5.txt | 0 {dox => winpcap_oem/dox}/wpcap_tut6.txt | 0 {dox => winpcap_oem/dox}/wpcap_tut7.txt | 0 {dox => winpcap_oem/dox}/wpcap_tut8.txt | 0 {dox => winpcap_oem/dox}/wpcap_tut9.txt | 0 .../packetNtx}/CompileDriver.bat | 0 .../packetNtx}/CompileDriverNew.bat | 0 .../packetNtx}/Dll/Project/PacketAndWan.dsp | 0 .../packetNtx}/Dll/Project/PacketAndWan.dsw | 0 .../packetNtx}/Dll/Project/PacketAndWan.rc | 0 .../packetNtx}/Dll/Project/PacketAndWan.rc2 | 0 .../packetNtx}/Dll/Project/PacketNT4.rc | 0 .../packetNtx}/Dll/Project/PacketNT4.rc2 | 0 .../packetNtx}/Dll/Project/PacketNT4.vcproj | 0 .../packetNtx}/Dll/Project/PacketNetMon.vcproj | 0 .../packetNtx}/Dll/Project/PacketVista.rc | 0 .../packetNtx}/Dll/Project/PacketVista.rc2 | 0 .../packetNtx}/Dll/Project/PacketVista.vcproj | 0 .../packetNtx}/Driver/Driver.vcproj | 0 {packetNtx => winpcap_oem/packetNtx}/Driver/npf.rc | 0 .../release procedures TNT OEM.txt | 0 .../release procedures WOEM.txt | 0 version.h => winpcap_oem/version.h | 0 .../windump}/win32/prj/WinDump.dsp | 0 .../windump}/win32/prj/WinDump.dsw | 0 .../windump}/win32/prj/WinDump.rc | 0 .../windump}/win32/prj/resource.h | 0 {windump => winpcap_oem/windump}/win32/prj/resrc1.h | 0 {wpcap => winpcap_oem/wpcap}/PRJ/WPCAP.DEF | 0 {wpcap => winpcap_oem/wpcap}/PRJ/wpcap.rc | 0 {wpcap => winpcap_oem/wpcap}/PRJ/wpcap.rc2 | 0 {wpcap => winpcap_oem/wpcap}/PRJ/wpcap.vcproj | 0 {wpcap => winpcap_oem/wpcap}/pcap_oem.c | 0 103 files changed, 0 insertions(+), 0 deletions(-) rename .gitignore => winpcap_oem/.gitignore (100%) rename Examples-pcap.diff => winpcap_oem/Examples-pcap.diff (100%) rename Examples.diff => winpcap_oem/Examples.diff (100%) rename MakeAll.sln => winpcap_oem/MakeAll.sln (100%) rename {OEM => winpcap_oem/OEM}/WinpcapOem/CopyEmbeddedFiles.vcproj (100%) rename {OEM => winpcap_oem/OEM}/WinpcapOem/Crypto.cpp (100%) rename {OEM => winpcap_oem/OEM}/WinpcapOem/Crypto.h (100%) rename {OEM => winpcap_oem/OEM}/WinpcapOem/NetMonInstaller.h (100%) rename {OEM => winpcap_oem/OEM}/WinpcapOem/PacketWrapper.cpp (100%) rename {OEM => winpcap_oem/OEM}/WinpcapOem/Resources.cpp (100%) rename {OEM => winpcap_oem/OEM}/WinpcapOem/Security.cpp (100%) rename {OEM => winpcap_oem/OEM}/WinpcapOem/Security.h (100%) rename {OEM => winpcap_oem/OEM}/WinpcapOem/SerivcesInstallers.cpp (100%) rename {OEM => winpcap_oem/OEM}/WinpcapOem/StaticWinpcapOem.dsp (100%) rename {OEM => winpcap_oem/OEM}/WinpcapOem/StaticWinpcapOem.dsw (100%) rename {OEM => winpcap_oem/OEM}/WinpcapOem/WinPcapOem.cpp (100%) rename {OEM => winpcap_oem/OEM}/WinpcapOem/WinPcapOem.rc2 (100%) rename {OEM => winpcap_oem/OEM}/WinpcapOem/WinpcapOem.def (100%) rename {OEM => winpcap_oem/OEM}/WinpcapOem/WinpcapOem.dsp (100%) rename {OEM => winpcap_oem/OEM}/WinpcapOem/WinpcapOem.dsw (100%) rename {OEM => winpcap_oem/OEM}/WinpcapOem/WinpcapOem.h (100%) rename {OEM => winpcap_oem/OEM}/WinpcapOem/WinpcapOem.rc (100%) rename {OEM => winpcap_oem/OEM}/WinpcapOem/WinpcapOem.sln (100%) rename {OEM => winpcap_oem/OEM}/WinpcapOem/WinpcapOem.vcproj (100%) rename {OEM => winpcap_oem/OEM}/WinpcapOem/WoemDebug.h (100%) rename {OEM => winpcap_oem/OEM}/WinpcapOem/binaries/Note.txt (100%) rename {OEM => winpcap_oem/OEM}/WinpcapOem/binaries/tools.bin (100%) rename {OEM => winpcap_oem/OEM}/WinpcapOem/idls.h (100%) rename {OEM => winpcap_oem/OEM}/WinpcapOem/idls_i.c (100%) rename {OEM => winpcap_oem/OEM}/WinpcapOem/netcfgn.h (100%) rename {OEM => winpcap_oem/OEM}/WinpcapOem/netcfgx.h (100%) rename {OEM => winpcap_oem/OEM}/WinpcapOem/pch.h (100%) rename {OEM => winpcap_oem/OEM}/WinpcapOem/postbuild.bat (100%) rename {OEM => winpcap_oem/OEM}/WinpcapOem/postbuild_release.bat (100%) rename {OEM => winpcap_oem/OEM}/WinpcapOem/prebuild_debug.bat (100%) rename {OEM => winpcap_oem/OEM}/WinpcapOem/prebuild_release.bat (100%) rename {OEM => winpcap_oem/OEM}/WinpcapOem/resource.h (100%) rename {OEM => winpcap_oem/OEM}/WinpcapOem/resrc1.h (100%) rename {OEM => winpcap_oem/OEM}/WinpcapOem/version.h (100%) rename {OEM => winpcap_oem/OEM}/bin2c/BIN2C.C (100%) rename {OEM => winpcap_oem/OEM}/bin2c/bin2c.exe (100%) rename WinPcap OEM.sln => winpcap_oem/WinPcap OEM.sln (100%) rename build_tnt_bin.bat => winpcap_oem/build_tnt_bin.bat (100%) rename build_wpdpack_oem.bat => winpcap_oem/build_wpdpack_oem.bat (100%) rename build_wpdpack_oem_with_npfim.bat => winpcap_oem/build_wpdpack_oem_with_npfim.bat (100%) rename create_bin_oem.bat => winpcap_oem/create_bin_oem.bat (100%) rename create_docs_oem.bat => winpcap_oem/create_docs_oem.bat (100%) rename create_examples_oem.bat => winpcap_oem/create_examples_oem.bat (100%) rename create_include_oem.bat => winpcap_oem/create_include_oem.bat (100%) rename create_lib_oem.bat => winpcap_oem/create_lib_oem.bat (100%) rename create_local_examples.bat => winpcap_oem/create_local_examples.bat (100%) rename {dox => winpcap_oem/dox}/WinPcapPro_docs.html (100%) rename {dox => winpcap_oem/dox}/doxygen_groups.txt (100%) rename {dox => winpcap_oem/dox}/footer.htm (100%) rename {dox => winpcap_oem/dox}/header.htm (100%) rename {dox => winpcap_oem/dox}/intro.htm (100%) rename {dox => winpcap_oem/dox}/main.txt (100%) rename {dox => winpcap_oem/dox}/pics/CACE_logo.jpg (100%) rename {dox => winpcap_oem/dox}/pics/OEM_logo.jpg (100%) rename {dox => winpcap_oem/dox}/pics/WinPcapPro_logo.jpg (100%) rename {dox => winpcap_oem/dox}/prj/winpcap_oem_noc.dox (100%) rename {dox => winpcap_oem/dox}/style.css (100%) rename {dox => winpcap_oem/dox}/wpcap_samp.htm (100%) rename {dox => winpcap_oem/dox}/wpcap_samp1.htm (100%) rename {dox => winpcap_oem/dox}/wpcap_samp2.htm (100%) rename {dox => winpcap_oem/dox}/wpcap_tut.txt (100%) rename {dox => winpcap_oem/dox}/wpcap_tut1.txt (100%) rename {dox => winpcap_oem/dox}/wpcap_tut2.txt (100%) rename {dox => winpcap_oem/dox}/wpcap_tut3.txt (100%) rename {dox => winpcap_oem/dox}/wpcap_tut4.txt (100%) rename {dox => winpcap_oem/dox}/wpcap_tut5.txt (100%) rename {dox => winpcap_oem/dox}/wpcap_tut6.txt (100%) rename {dox => winpcap_oem/dox}/wpcap_tut7.txt (100%) rename {dox => winpcap_oem/dox}/wpcap_tut8.txt (100%) rename {dox => winpcap_oem/dox}/wpcap_tut9.txt (100%) rename {packetNtx => winpcap_oem/packetNtx}/CompileDriver.bat (100%) rename {packetNtx => winpcap_oem/packetNtx}/CompileDriverNew.bat (100%) rename {packetNtx => winpcap_oem/packetNtx}/Dll/Project/PacketAndWan.dsp (100%) rename {packetNtx => winpcap_oem/packetNtx}/Dll/Project/PacketAndWan.dsw (100%) rename {packetNtx => winpcap_oem/packetNtx}/Dll/Project/PacketAndWan.rc (100%) rename {packetNtx => winpcap_oem/packetNtx}/Dll/Project/PacketAndWan.rc2 (100%) rename {packetNtx => winpcap_oem/packetNtx}/Dll/Project/PacketNT4.rc (100%) rename {packetNtx => winpcap_oem/packetNtx}/Dll/Project/PacketNT4.rc2 (100%) rename {packetNtx => winpcap_oem/packetNtx}/Dll/Project/PacketNT4.vcproj (100%) rename {packetNtx => winpcap_oem/packetNtx}/Dll/Project/PacketNetMon.vcproj (100%) rename {packetNtx => winpcap_oem/packetNtx}/Dll/Project/PacketVista.rc (100%) rename {packetNtx => winpcap_oem/packetNtx}/Dll/Project/PacketVista.rc2 (100%) rename {packetNtx => winpcap_oem/packetNtx}/Dll/Project/PacketVista.vcproj (100%) rename {packetNtx => winpcap_oem/packetNtx}/Driver/Driver.vcproj (100%) rename {packetNtx => winpcap_oem/packetNtx}/Driver/npf.rc (100%) rename release procedures TNT OEM.txt => winpcap_oem/release procedures TNT OEM.txt (100%) rename release procedures WOEM.txt => winpcap_oem/release procedures WOEM.txt (100%) rename version.h => winpcap_oem/version.h (100%) rename {windump => winpcap_oem/windump}/win32/prj/WinDump.dsp (100%) rename {windump => winpcap_oem/windump}/win32/prj/WinDump.dsw (100%) rename {windump => winpcap_oem/windump}/win32/prj/WinDump.rc (100%) rename {windump => winpcap_oem/windump}/win32/prj/resource.h (100%) rename {windump => winpcap_oem/windump}/win32/prj/resrc1.h (100%) rename {wpcap => winpcap_oem/wpcap}/PRJ/WPCAP.DEF (100%) rename {wpcap => winpcap_oem/wpcap}/PRJ/wpcap.rc (100%) rename {wpcap => winpcap_oem/wpcap}/PRJ/wpcap.rc2 (100%) rename {wpcap => winpcap_oem/wpcap}/PRJ/wpcap.vcproj (100%) rename {wpcap => winpcap_oem/wpcap}/pcap_oem.c (100%) diff --git a/.gitignore b/winpcap_oem/.gitignore similarity index 100% rename from .gitignore rename to winpcap_oem/.gitignore diff --git a/Examples-pcap.diff b/winpcap_oem/Examples-pcap.diff similarity index 100% rename from Examples-pcap.diff rename to winpcap_oem/Examples-pcap.diff diff --git a/Examples.diff b/winpcap_oem/Examples.diff similarity index 100% rename from Examples.diff rename to winpcap_oem/Examples.diff diff --git a/MakeAll.sln b/winpcap_oem/MakeAll.sln similarity index 100% rename from MakeAll.sln rename to winpcap_oem/MakeAll.sln diff --git a/OEM/WinpcapOem/CopyEmbeddedFiles.vcproj b/winpcap_oem/OEM/WinpcapOem/CopyEmbeddedFiles.vcproj similarity index 100% rename from OEM/WinpcapOem/CopyEmbeddedFiles.vcproj rename to winpcap_oem/OEM/WinpcapOem/CopyEmbeddedFiles.vcproj diff --git a/OEM/WinpcapOem/Crypto.cpp b/winpcap_oem/OEM/WinpcapOem/Crypto.cpp similarity index 100% rename from OEM/WinpcapOem/Crypto.cpp rename to winpcap_oem/OEM/WinpcapOem/Crypto.cpp diff --git a/OEM/WinpcapOem/Crypto.h b/winpcap_oem/OEM/WinpcapOem/Crypto.h similarity index 100% rename from OEM/WinpcapOem/Crypto.h rename to winpcap_oem/OEM/WinpcapOem/Crypto.h diff --git a/OEM/WinpcapOem/NetMonInstaller.h b/winpcap_oem/OEM/WinpcapOem/NetMonInstaller.h similarity index 100% rename from OEM/WinpcapOem/NetMonInstaller.h rename to winpcap_oem/OEM/WinpcapOem/NetMonInstaller.h diff --git a/OEM/WinpcapOem/PacketWrapper.cpp b/winpcap_oem/OEM/WinpcapOem/PacketWrapper.cpp similarity index 100% rename from OEM/WinpcapOem/PacketWrapper.cpp rename to winpcap_oem/OEM/WinpcapOem/PacketWrapper.cpp diff --git a/OEM/WinpcapOem/Resources.cpp b/winpcap_oem/OEM/WinpcapOem/Resources.cpp similarity index 100% rename from OEM/WinpcapOem/Resources.cpp rename to winpcap_oem/OEM/WinpcapOem/Resources.cpp diff --git a/OEM/WinpcapOem/Security.cpp b/winpcap_oem/OEM/WinpcapOem/Security.cpp similarity index 100% rename from OEM/WinpcapOem/Security.cpp rename to winpcap_oem/OEM/WinpcapOem/Security.cpp diff --git a/OEM/WinpcapOem/Security.h b/winpcap_oem/OEM/WinpcapOem/Security.h similarity index 100% rename from OEM/WinpcapOem/Security.h rename to winpcap_oem/OEM/WinpcapOem/Security.h diff --git a/OEM/WinpcapOem/SerivcesInstallers.cpp b/winpcap_oem/OEM/WinpcapOem/SerivcesInstallers.cpp similarity index 100% rename from OEM/WinpcapOem/SerivcesInstallers.cpp rename to winpcap_oem/OEM/WinpcapOem/SerivcesInstallers.cpp diff --git a/OEM/WinpcapOem/StaticWinpcapOem.dsp b/winpcap_oem/OEM/WinpcapOem/StaticWinpcapOem.dsp similarity index 100% rename from OEM/WinpcapOem/StaticWinpcapOem.dsp rename to winpcap_oem/OEM/WinpcapOem/StaticWinpcapOem.dsp diff --git a/OEM/WinpcapOem/StaticWinpcapOem.dsw b/winpcap_oem/OEM/WinpcapOem/StaticWinpcapOem.dsw similarity index 100% rename from OEM/WinpcapOem/StaticWinpcapOem.dsw rename to winpcap_oem/OEM/WinpcapOem/StaticWinpcapOem.dsw diff --git a/OEM/WinpcapOem/WinPcapOem.cpp b/winpcap_oem/OEM/WinpcapOem/WinPcapOem.cpp similarity index 100% rename from OEM/WinpcapOem/WinPcapOem.cpp rename to winpcap_oem/OEM/WinpcapOem/WinPcapOem.cpp diff --git a/OEM/WinpcapOem/WinPcapOem.rc2 b/winpcap_oem/OEM/WinpcapOem/WinPcapOem.rc2 similarity index 100% rename from OEM/WinpcapOem/WinPcapOem.rc2 rename to winpcap_oem/OEM/WinpcapOem/WinPcapOem.rc2 diff --git a/OEM/WinpcapOem/WinpcapOem.def b/winpcap_oem/OEM/WinpcapOem/WinpcapOem.def similarity index 100% rename from OEM/WinpcapOem/WinpcapOem.def rename to winpcap_oem/OEM/WinpcapOem/WinpcapOem.def diff --git a/OEM/WinpcapOem/WinpcapOem.dsp b/winpcap_oem/OEM/WinpcapOem/WinpcapOem.dsp similarity index 100% rename from OEM/WinpcapOem/WinpcapOem.dsp rename to winpcap_oem/OEM/WinpcapOem/WinpcapOem.dsp diff --git a/OEM/WinpcapOem/WinpcapOem.dsw b/winpcap_oem/OEM/WinpcapOem/WinpcapOem.dsw similarity index 100% rename from OEM/WinpcapOem/WinpcapOem.dsw rename to winpcap_oem/OEM/WinpcapOem/WinpcapOem.dsw diff --git a/OEM/WinpcapOem/WinpcapOem.h b/winpcap_oem/OEM/WinpcapOem/WinpcapOem.h similarity index 100% rename from OEM/WinpcapOem/WinpcapOem.h rename to winpcap_oem/OEM/WinpcapOem/WinpcapOem.h diff --git a/OEM/WinpcapOem/WinpcapOem.rc b/winpcap_oem/OEM/WinpcapOem/WinpcapOem.rc similarity index 100% rename from OEM/WinpcapOem/WinpcapOem.rc rename to winpcap_oem/OEM/WinpcapOem/WinpcapOem.rc diff --git a/OEM/WinpcapOem/WinpcapOem.sln b/winpcap_oem/OEM/WinpcapOem/WinpcapOem.sln similarity index 100% rename from OEM/WinpcapOem/WinpcapOem.sln rename to winpcap_oem/OEM/WinpcapOem/WinpcapOem.sln diff --git a/OEM/WinpcapOem/WinpcapOem.vcproj b/winpcap_oem/OEM/WinpcapOem/WinpcapOem.vcproj similarity index 100% rename from OEM/WinpcapOem/WinpcapOem.vcproj rename to winpcap_oem/OEM/WinpcapOem/WinpcapOem.vcproj diff --git a/OEM/WinpcapOem/WoemDebug.h b/winpcap_oem/OEM/WinpcapOem/WoemDebug.h similarity index 100% rename from OEM/WinpcapOem/WoemDebug.h rename to winpcap_oem/OEM/WinpcapOem/WoemDebug.h diff --git a/OEM/WinpcapOem/binaries/Note.txt b/winpcap_oem/OEM/WinpcapOem/binaries/Note.txt similarity index 100% rename from OEM/WinpcapOem/binaries/Note.txt rename to winpcap_oem/OEM/WinpcapOem/binaries/Note.txt diff --git a/OEM/WinpcapOem/binaries/tools.bin b/winpcap_oem/OEM/WinpcapOem/binaries/tools.bin similarity index 100% rename from OEM/WinpcapOem/binaries/tools.bin rename to winpcap_oem/OEM/WinpcapOem/binaries/tools.bin diff --git a/OEM/WinpcapOem/idls.h b/winpcap_oem/OEM/WinpcapOem/idls.h similarity index 100% rename from OEM/WinpcapOem/idls.h rename to winpcap_oem/OEM/WinpcapOem/idls.h diff --git a/OEM/WinpcapOem/idls_i.c b/winpcap_oem/OEM/WinpcapOem/idls_i.c similarity index 100% rename from OEM/WinpcapOem/idls_i.c rename to winpcap_oem/OEM/WinpcapOem/idls_i.c diff --git a/OEM/WinpcapOem/netcfgn.h b/winpcap_oem/OEM/WinpcapOem/netcfgn.h similarity index 100% rename from OEM/WinpcapOem/netcfgn.h rename to winpcap_oem/OEM/WinpcapOem/netcfgn.h diff --git a/OEM/WinpcapOem/netcfgx.h b/winpcap_oem/OEM/WinpcapOem/netcfgx.h similarity index 100% rename from OEM/WinpcapOem/netcfgx.h rename to winpcap_oem/OEM/WinpcapOem/netcfgx.h diff --git a/OEM/WinpcapOem/pch.h b/winpcap_oem/OEM/WinpcapOem/pch.h similarity index 100% rename from OEM/WinpcapOem/pch.h rename to winpcap_oem/OEM/WinpcapOem/pch.h diff --git a/OEM/WinpcapOem/postbuild.bat b/winpcap_oem/OEM/WinpcapOem/postbuild.bat similarity index 100% rename from OEM/WinpcapOem/postbuild.bat rename to winpcap_oem/OEM/WinpcapOem/postbuild.bat diff --git a/OEM/WinpcapOem/postbuild_release.bat b/winpcap_oem/OEM/WinpcapOem/postbuild_release.bat similarity index 100% rename from OEM/WinpcapOem/postbuild_release.bat rename to winpcap_oem/OEM/WinpcapOem/postbuild_release.bat diff --git a/OEM/WinpcapOem/prebuild_debug.bat b/winpcap_oem/OEM/WinpcapOem/prebuild_debug.bat similarity index 100% rename from OEM/WinpcapOem/prebuild_debug.bat rename to winpcap_oem/OEM/WinpcapOem/prebuild_debug.bat diff --git a/OEM/WinpcapOem/prebuild_release.bat b/winpcap_oem/OEM/WinpcapOem/prebuild_release.bat similarity index 100% rename from OEM/WinpcapOem/prebuild_release.bat rename to winpcap_oem/OEM/WinpcapOem/prebuild_release.bat diff --git a/OEM/WinpcapOem/resource.h b/winpcap_oem/OEM/WinpcapOem/resource.h similarity index 100% rename from OEM/WinpcapOem/resource.h rename to winpcap_oem/OEM/WinpcapOem/resource.h diff --git a/OEM/WinpcapOem/resrc1.h b/winpcap_oem/OEM/WinpcapOem/resrc1.h similarity index 100% rename from OEM/WinpcapOem/resrc1.h rename to winpcap_oem/OEM/WinpcapOem/resrc1.h diff --git a/OEM/WinpcapOem/version.h b/winpcap_oem/OEM/WinpcapOem/version.h similarity index 100% rename from OEM/WinpcapOem/version.h rename to winpcap_oem/OEM/WinpcapOem/version.h diff --git a/OEM/bin2c/BIN2C.C b/winpcap_oem/OEM/bin2c/BIN2C.C similarity index 100% rename from OEM/bin2c/BIN2C.C rename to winpcap_oem/OEM/bin2c/BIN2C.C diff --git a/OEM/bin2c/bin2c.exe b/winpcap_oem/OEM/bin2c/bin2c.exe similarity index 100% rename from OEM/bin2c/bin2c.exe rename to winpcap_oem/OEM/bin2c/bin2c.exe diff --git a/WinPcap OEM.sln b/winpcap_oem/WinPcap OEM.sln similarity index 100% rename from WinPcap OEM.sln rename to winpcap_oem/WinPcap OEM.sln diff --git a/build_tnt_bin.bat b/winpcap_oem/build_tnt_bin.bat similarity index 100% rename from build_tnt_bin.bat rename to winpcap_oem/build_tnt_bin.bat diff --git a/build_wpdpack_oem.bat b/winpcap_oem/build_wpdpack_oem.bat similarity index 100% rename from build_wpdpack_oem.bat rename to winpcap_oem/build_wpdpack_oem.bat diff --git a/build_wpdpack_oem_with_npfim.bat b/winpcap_oem/build_wpdpack_oem_with_npfim.bat similarity index 100% rename from build_wpdpack_oem_with_npfim.bat rename to winpcap_oem/build_wpdpack_oem_with_npfim.bat diff --git a/create_bin_oem.bat b/winpcap_oem/create_bin_oem.bat similarity index 100% rename from create_bin_oem.bat rename to winpcap_oem/create_bin_oem.bat diff --git a/create_docs_oem.bat b/winpcap_oem/create_docs_oem.bat similarity index 100% rename from create_docs_oem.bat rename to winpcap_oem/create_docs_oem.bat diff --git a/create_examples_oem.bat b/winpcap_oem/create_examples_oem.bat similarity index 100% rename from create_examples_oem.bat rename to winpcap_oem/create_examples_oem.bat diff --git a/create_include_oem.bat b/winpcap_oem/create_include_oem.bat similarity index 100% rename from create_include_oem.bat rename to winpcap_oem/create_include_oem.bat diff --git a/create_lib_oem.bat b/winpcap_oem/create_lib_oem.bat similarity index 100% rename from create_lib_oem.bat rename to winpcap_oem/create_lib_oem.bat diff --git a/create_local_examples.bat b/winpcap_oem/create_local_examples.bat similarity index 100% rename from create_local_examples.bat rename to winpcap_oem/create_local_examples.bat diff --git a/dox/WinPcapPro_docs.html b/winpcap_oem/dox/WinPcapPro_docs.html similarity index 100% rename from dox/WinPcapPro_docs.html rename to winpcap_oem/dox/WinPcapPro_docs.html diff --git a/dox/doxygen_groups.txt b/winpcap_oem/dox/doxygen_groups.txt similarity index 100% rename from dox/doxygen_groups.txt rename to winpcap_oem/dox/doxygen_groups.txt diff --git a/dox/footer.htm b/winpcap_oem/dox/footer.htm similarity index 100% rename from dox/footer.htm rename to winpcap_oem/dox/footer.htm diff --git a/dox/header.htm b/winpcap_oem/dox/header.htm similarity index 100% rename from dox/header.htm rename to winpcap_oem/dox/header.htm diff --git a/dox/intro.htm b/winpcap_oem/dox/intro.htm similarity index 100% rename from dox/intro.htm rename to winpcap_oem/dox/intro.htm diff --git a/dox/main.txt b/winpcap_oem/dox/main.txt similarity index 100% rename from dox/main.txt rename to winpcap_oem/dox/main.txt diff --git a/dox/pics/CACE_logo.jpg b/winpcap_oem/dox/pics/CACE_logo.jpg similarity index 100% rename from dox/pics/CACE_logo.jpg rename to winpcap_oem/dox/pics/CACE_logo.jpg diff --git a/dox/pics/OEM_logo.jpg b/winpcap_oem/dox/pics/OEM_logo.jpg similarity index 100% rename from dox/pics/OEM_logo.jpg rename to winpcap_oem/dox/pics/OEM_logo.jpg diff --git a/dox/pics/WinPcapPro_logo.jpg b/winpcap_oem/dox/pics/WinPcapPro_logo.jpg similarity index 100% rename from dox/pics/WinPcapPro_logo.jpg rename to winpcap_oem/dox/pics/WinPcapPro_logo.jpg diff --git a/dox/prj/winpcap_oem_noc.dox b/winpcap_oem/dox/prj/winpcap_oem_noc.dox similarity index 100% rename from dox/prj/winpcap_oem_noc.dox rename to winpcap_oem/dox/prj/winpcap_oem_noc.dox diff --git a/dox/style.css b/winpcap_oem/dox/style.css similarity index 100% rename from dox/style.css rename to winpcap_oem/dox/style.css diff --git a/dox/wpcap_samp.htm b/winpcap_oem/dox/wpcap_samp.htm similarity index 100% rename from dox/wpcap_samp.htm rename to winpcap_oem/dox/wpcap_samp.htm diff --git a/dox/wpcap_samp1.htm b/winpcap_oem/dox/wpcap_samp1.htm similarity index 100% rename from dox/wpcap_samp1.htm rename to winpcap_oem/dox/wpcap_samp1.htm diff --git a/dox/wpcap_samp2.htm b/winpcap_oem/dox/wpcap_samp2.htm similarity index 100% rename from dox/wpcap_samp2.htm rename to winpcap_oem/dox/wpcap_samp2.htm diff --git a/dox/wpcap_tut.txt b/winpcap_oem/dox/wpcap_tut.txt similarity index 100% rename from dox/wpcap_tut.txt rename to winpcap_oem/dox/wpcap_tut.txt diff --git a/dox/wpcap_tut1.txt b/winpcap_oem/dox/wpcap_tut1.txt similarity index 100% rename from dox/wpcap_tut1.txt rename to winpcap_oem/dox/wpcap_tut1.txt diff --git a/dox/wpcap_tut2.txt b/winpcap_oem/dox/wpcap_tut2.txt similarity index 100% rename from dox/wpcap_tut2.txt rename to winpcap_oem/dox/wpcap_tut2.txt diff --git a/dox/wpcap_tut3.txt b/winpcap_oem/dox/wpcap_tut3.txt similarity index 100% rename from dox/wpcap_tut3.txt rename to winpcap_oem/dox/wpcap_tut3.txt diff --git a/dox/wpcap_tut4.txt b/winpcap_oem/dox/wpcap_tut4.txt similarity index 100% rename from dox/wpcap_tut4.txt rename to winpcap_oem/dox/wpcap_tut4.txt diff --git a/dox/wpcap_tut5.txt b/winpcap_oem/dox/wpcap_tut5.txt similarity index 100% rename from dox/wpcap_tut5.txt rename to winpcap_oem/dox/wpcap_tut5.txt diff --git a/dox/wpcap_tut6.txt b/winpcap_oem/dox/wpcap_tut6.txt similarity index 100% rename from dox/wpcap_tut6.txt rename to winpcap_oem/dox/wpcap_tut6.txt diff --git a/dox/wpcap_tut7.txt b/winpcap_oem/dox/wpcap_tut7.txt similarity index 100% rename from dox/wpcap_tut7.txt rename to winpcap_oem/dox/wpcap_tut7.txt diff --git a/dox/wpcap_tut8.txt b/winpcap_oem/dox/wpcap_tut8.txt similarity index 100% rename from dox/wpcap_tut8.txt rename to winpcap_oem/dox/wpcap_tut8.txt diff --git a/dox/wpcap_tut9.txt b/winpcap_oem/dox/wpcap_tut9.txt similarity index 100% rename from dox/wpcap_tut9.txt rename to winpcap_oem/dox/wpcap_tut9.txt diff --git a/packetNtx/CompileDriver.bat b/winpcap_oem/packetNtx/CompileDriver.bat similarity index 100% rename from packetNtx/CompileDriver.bat rename to winpcap_oem/packetNtx/CompileDriver.bat diff --git a/packetNtx/CompileDriverNew.bat b/winpcap_oem/packetNtx/CompileDriverNew.bat similarity index 100% rename from packetNtx/CompileDriverNew.bat rename to winpcap_oem/packetNtx/CompileDriverNew.bat diff --git a/packetNtx/Dll/Project/PacketAndWan.dsp b/winpcap_oem/packetNtx/Dll/Project/PacketAndWan.dsp similarity index 100% rename from packetNtx/Dll/Project/PacketAndWan.dsp rename to winpcap_oem/packetNtx/Dll/Project/PacketAndWan.dsp diff --git a/packetNtx/Dll/Project/PacketAndWan.dsw b/winpcap_oem/packetNtx/Dll/Project/PacketAndWan.dsw similarity index 100% rename from packetNtx/Dll/Project/PacketAndWan.dsw rename to winpcap_oem/packetNtx/Dll/Project/PacketAndWan.dsw diff --git a/packetNtx/Dll/Project/PacketAndWan.rc b/winpcap_oem/packetNtx/Dll/Project/PacketAndWan.rc similarity index 100% rename from packetNtx/Dll/Project/PacketAndWan.rc rename to winpcap_oem/packetNtx/Dll/Project/PacketAndWan.rc diff --git a/packetNtx/Dll/Project/PacketAndWan.rc2 b/winpcap_oem/packetNtx/Dll/Project/PacketAndWan.rc2 similarity index 100% rename from packetNtx/Dll/Project/PacketAndWan.rc2 rename to winpcap_oem/packetNtx/Dll/Project/PacketAndWan.rc2 diff --git a/packetNtx/Dll/Project/PacketNT4.rc b/winpcap_oem/packetNtx/Dll/Project/PacketNT4.rc similarity index 100% rename from packetNtx/Dll/Project/PacketNT4.rc rename to winpcap_oem/packetNtx/Dll/Project/PacketNT4.rc diff --git a/packetNtx/Dll/Project/PacketNT4.rc2 b/winpcap_oem/packetNtx/Dll/Project/PacketNT4.rc2 similarity index 100% rename from packetNtx/Dll/Project/PacketNT4.rc2 rename to winpcap_oem/packetNtx/Dll/Project/PacketNT4.rc2 diff --git a/packetNtx/Dll/Project/PacketNT4.vcproj b/winpcap_oem/packetNtx/Dll/Project/PacketNT4.vcproj similarity index 100% rename from packetNtx/Dll/Project/PacketNT4.vcproj rename to winpcap_oem/packetNtx/Dll/Project/PacketNT4.vcproj diff --git a/packetNtx/Dll/Project/PacketNetMon.vcproj b/winpcap_oem/packetNtx/Dll/Project/PacketNetMon.vcproj similarity index 100% rename from packetNtx/Dll/Project/PacketNetMon.vcproj rename to winpcap_oem/packetNtx/Dll/Project/PacketNetMon.vcproj diff --git a/packetNtx/Dll/Project/PacketVista.rc b/winpcap_oem/packetNtx/Dll/Project/PacketVista.rc similarity index 100% rename from packetNtx/Dll/Project/PacketVista.rc rename to winpcap_oem/packetNtx/Dll/Project/PacketVista.rc diff --git a/packetNtx/Dll/Project/PacketVista.rc2 b/winpcap_oem/packetNtx/Dll/Project/PacketVista.rc2 similarity index 100% rename from packetNtx/Dll/Project/PacketVista.rc2 rename to winpcap_oem/packetNtx/Dll/Project/PacketVista.rc2 diff --git a/packetNtx/Dll/Project/PacketVista.vcproj b/winpcap_oem/packetNtx/Dll/Project/PacketVista.vcproj similarity index 100% rename from packetNtx/Dll/Project/PacketVista.vcproj rename to winpcap_oem/packetNtx/Dll/Project/PacketVista.vcproj diff --git a/packetNtx/Driver/Driver.vcproj b/winpcap_oem/packetNtx/Driver/Driver.vcproj similarity index 100% rename from packetNtx/Driver/Driver.vcproj rename to winpcap_oem/packetNtx/Driver/Driver.vcproj diff --git a/packetNtx/Driver/npf.rc b/winpcap_oem/packetNtx/Driver/npf.rc similarity index 100% rename from packetNtx/Driver/npf.rc rename to winpcap_oem/packetNtx/Driver/npf.rc diff --git a/release procedures TNT OEM.txt b/winpcap_oem/release procedures TNT OEM.txt similarity index 100% rename from release procedures TNT OEM.txt rename to winpcap_oem/release procedures TNT OEM.txt diff --git a/release procedures WOEM.txt b/winpcap_oem/release procedures WOEM.txt similarity index 100% rename from release procedures WOEM.txt rename to winpcap_oem/release procedures WOEM.txt diff --git a/version.h b/winpcap_oem/version.h similarity index 100% rename from version.h rename to winpcap_oem/version.h diff --git a/windump/win32/prj/WinDump.dsp b/winpcap_oem/windump/win32/prj/WinDump.dsp similarity index 100% rename from windump/win32/prj/WinDump.dsp rename to winpcap_oem/windump/win32/prj/WinDump.dsp diff --git a/windump/win32/prj/WinDump.dsw b/winpcap_oem/windump/win32/prj/WinDump.dsw similarity index 100% rename from windump/win32/prj/WinDump.dsw rename to winpcap_oem/windump/win32/prj/WinDump.dsw diff --git a/windump/win32/prj/WinDump.rc b/winpcap_oem/windump/win32/prj/WinDump.rc similarity index 100% rename from windump/win32/prj/WinDump.rc rename to winpcap_oem/windump/win32/prj/WinDump.rc diff --git a/windump/win32/prj/resource.h b/winpcap_oem/windump/win32/prj/resource.h similarity index 100% rename from windump/win32/prj/resource.h rename to winpcap_oem/windump/win32/prj/resource.h diff --git a/windump/win32/prj/resrc1.h b/winpcap_oem/windump/win32/prj/resrc1.h similarity index 100% rename from windump/win32/prj/resrc1.h rename to winpcap_oem/windump/win32/prj/resrc1.h diff --git a/wpcap/PRJ/WPCAP.DEF b/winpcap_oem/wpcap/PRJ/WPCAP.DEF similarity index 100% rename from wpcap/PRJ/WPCAP.DEF rename to winpcap_oem/wpcap/PRJ/WPCAP.DEF diff --git a/wpcap/PRJ/wpcap.rc b/winpcap_oem/wpcap/PRJ/wpcap.rc similarity index 100% rename from wpcap/PRJ/wpcap.rc rename to winpcap_oem/wpcap/PRJ/wpcap.rc diff --git a/wpcap/PRJ/wpcap.rc2 b/winpcap_oem/wpcap/PRJ/wpcap.rc2 similarity index 100% rename from wpcap/PRJ/wpcap.rc2 rename to winpcap_oem/wpcap/PRJ/wpcap.rc2 diff --git a/wpcap/PRJ/wpcap.vcproj b/winpcap_oem/wpcap/PRJ/wpcap.vcproj similarity index 100% rename from wpcap/PRJ/wpcap.vcproj rename to winpcap_oem/wpcap/PRJ/wpcap.vcproj diff --git a/wpcap/pcap_oem.c b/winpcap_oem/wpcap/pcap_oem.c similarity index 100% rename from wpcap/pcap_oem.c rename to winpcap_oem/wpcap/pcap_oem.c