diff --git a/mswin32/winpcap/LICENSE b/mswin32/winpcap/LICENSE index 85cec823b..157d49a50 100644 --- a/mswin32/winpcap/LICENSE +++ b/mswin32/winpcap/LICENSE @@ -1,12 +1,13 @@ Copyright (c) 1999 - 2005 NetGroup, Politecnico di Torino (Italy). Copyright (c) 2005 - 2010 CACE Technologies, Davis (California). +Copyright (c) 2010 - 2013 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 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. +3. Neither the name of the Politecnico di Torino, CACE Technologies, Riverbed Technology nor the names of their 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. diff --git a/mswin32/winpcap/npf.sys b/mswin32/winpcap/npf.sys index f256f4cb8..5c8e66c34 100644 Binary files a/mswin32/winpcap/npf.sys and b/mswin32/winpcap/npf.sys differ diff --git a/mswin32/winpcap/nt5/x64/Packet.dll b/mswin32/winpcap/nt5/x64/Packet.dll index 1a991b438..4c7ffd67e 100755 Binary files a/mswin32/winpcap/nt5/x64/Packet.dll and b/mswin32/winpcap/nt5/x64/Packet.dll differ diff --git a/mswin32/winpcap/nt5/x86/Packet.dll b/mswin32/winpcap/nt5/x86/Packet.dll index ed3b2f79d..295cea264 100755 Binary files a/mswin32/winpcap/nt5/x86/Packet.dll and b/mswin32/winpcap/nt5/x86/Packet.dll differ diff --git a/mswin32/winpcap/rpcapd.exe b/mswin32/winpcap/rpcapd.exe index 3857a62ab..5d34e4409 100755 Binary files a/mswin32/winpcap/rpcapd.exe and b/mswin32/winpcap/rpcapd.exe differ diff --git a/mswin32/winpcap/vista/x64/Packet.dll b/mswin32/winpcap/vista/x64/Packet.dll index aa54b5e37..a8bbfa4e4 100755 Binary files a/mswin32/winpcap/vista/x64/Packet.dll and b/mswin32/winpcap/vista/x64/Packet.dll differ diff --git a/mswin32/winpcap/vista/x86/Packet.dll b/mswin32/winpcap/vista/x86/Packet.dll index 9d21036e9..8bec676a7 100755 Binary files a/mswin32/winpcap/vista/x86/Packet.dll and b/mswin32/winpcap/vista/x86/Packet.dll differ diff --git a/mswin32/winpcap/winpcap-nmap.nsi b/mswin32/winpcap/winpcap-nmap.nsi index fad03c5a5..6c309ec07 100644 --- a/mswin32/winpcap/winpcap-nmap.nsi +++ b/mswin32/winpcap/winpcap-nmap.nsi @@ -1,523 +1,524 @@ -;; Custom winpcap for nmap -;; Recognizes the options (case sensitive): -;; /S silent install -;; /NPFSTARTUP=NO start NPF now and at startup (only has effect with /S) - -;; Started by Doug Hoyte, April 2006 - -;; Eddie Bell -;; Updated to 4.0, June 2007 -;; Updated to 4.01, July 2007 -;; Updated to 4.02, November 2007 - -;; Rob Nicholls -;; Updated to 4.1.1, October 2009 -;; Updated to 4.1.2, July 2010 - -SetCompressor /SOLID /FINAL lzma - -;-------------------------------- -;Include Modern UI - - !include "MUI.nsh" - !include "FileFunc.nsh" - -;-------------------------------- -;General - -; The name of the installer -Name "WinPcap (Nmap) 4.1.2" - -; The file to write -OutFile "winpcap-nmap-4.12.exe" - -RequestExecutionLevel admin - -; These leave either "1" or "0" in $0. -Function is64bit - System::Call "kernel32::GetCurrentProcess() i .s" - System::Call "kernel32::IsWow64Process(i s, *i .r0)" -FunctionEnd -Function un.is64bit - System::Call "kernel32::GetCurrentProcess() i .s" - System::Call "kernel32::IsWow64Process(i s, *i .r0)" -FunctionEnd - -VIProductVersion "4.1.0.2001" -VIAddVersionKey /LANG=1033 "FileVersion" "4.1.0.2001" -VIAddVersionKey /LANG=1033 "ProductName" "WinPcap" -VIAddVersionKey /LANG=1033 "FileDescription" "WinPcap 4.1.2 installer" -VIAddVersionKey /LANG=1033 "LegalCopyright" "" - -;-------------------------------- -; Windows API Definitions - -!define SC_MANAGER_ALL_ACCESS 0x3F -!define SERVICE_ALL_ACCESS 0xF01FF - -; Service Types -!define SERVICE_FILE_SYSTEM_DRIVER 0x00000002 -!define SERVICE_KERNEL_DRIVER 0x00000001 -!define SERVICE_WIN32_OWN_PROCESS 0x00000010 -!define SERVICE_WIN32_SHARE_PROCESS 0x00000020 -!define SERVICE_INTERACTIVE_PROCESS 0x00000100 - -; Service start options -!define SERVICE_AUTO_START 0x00000002 -!define SERVICE_BOOT_START 0x00000000 -!define SERVICE_DEMAND_START 0x00000003 -!define SERVICE_DISABLED 0x00000004 -!define SERVICE_SYSTEM_START 0x00000001 - -; Service Error control -!define SERVICE_ERROR_CRITICAL 0x00000003 -!define SERVICE_ERROR_IGNORE 0x00000000 -!define SERVICE_ERROR_NORMAL 0x00000001 -!define SERVICE_ERROR_SEVERE 0x00000002 - -; Service Control Options -!define SERVICE_CONTROL_STOP 0x00000001 -!define SERVICE_CONTROL_PAUSE 0x00000002 - - - -;-------------------------------- -;Interface Settings - - !define MUI_ABORTWARNING - -;-------------------------------- -;Pages - -!insertmacro MUI_PAGE_LICENSE "LICENSE" -; Don't let user choose where to install the files. WinPcap doesn't let people, and it's one less thing for us to worry about. -!insertmacro MUI_PAGE_INSTFILES -!insertmacro MUI_UNPAGE_CONFIRM -!insertmacro MUI_UNPAGE_INSTFILES -Page custom optionsPage doOptions -Page custom finalPage doFinal - -;-------------------------------- -;Languages - - !insertmacro MUI_LANGUAGE "English" - -;-------------------------------- -;Reserves - -ReserveFile "options.ini" -ReserveFile "final.ini" -!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS - -;-------------------------------- - -!insertmacro GetParameters -!insertmacro GetOptions - -; This function is called on startup. IfSilent checks -; if the flag /S was specified. If so, it sets the installer -; to run in "silent mode" which displays no windows and accepts -; all defaults. - -; We also check if there is a previously installed winpcap -; on this system. If it's the same as the version we're installing, -; abort the install. If not, prompt the user about whether to -; replace it or not. - -Function .onInit - !insertmacro MUI_INSTALLOPTIONS_EXTRACT "options.ini" - !insertmacro MUI_INSTALLOPTIONS_EXTRACT "final.ini" - - var /GLOBAL inst_ver - var /GLOBAL my_ver - var /GLOBAL npf_startup - StrCpy $my_ver "4.1.0.2001" - StrCpy $npf_startup "YES" - - ; Always use the requested /D= $INSTDIR if given. - StrCmp $INSTDIR "" "" instdir_nochange - ; On 64-bit Windows, $PROGRAMFILES is "C:\Program Files (x86)" and - ; $PROGRAMFILES64 is "C:\Program Files". We want "C:\Program Files" - ; on 32-bit or 64-bit. - StrCpy $INSTDIR "$PROGRAMFILES\WinPcap" - Call is64bit - StrCmp $0 "0" instdir_nochange - StrCpy $INSTDIR "$PROGRAMFILES64\WinPcap" - instdir_nochange: - - ${GetParameters} $R0 - ClearErrors - ${GetOptions} $R0 "/NPFSTARTUP=" $npf_startup - - IfSilent do_silent no_silent - - do_silent: - SetSilent silent - IfFileExists "$SYSDIR\wpcap.dll" silent_checks - return - silent_checks: - ; check for the presence of Nmap's custom WinPcapInst registry key: - ReadRegStr $0 "HKLM" "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\WinPcapInst" "InstalledBy" - StrCmp $0 "Nmap" silent_uninstall winpcap_installedby_keys_not_present - - winpcap_installedby_keys_not_present: - ; check for the presence of WinPcapInst's UninstallString - ; and manually cleanup registry entries to avoid running - ; the GUI uninstaller and assume our installer will overwrite - ; the files. Needs to be checked in case someone (force) - ; installs WinPcap over the top of our installation - ReadRegStr $0 "HKLM" "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\WinPcapInst" "UninstallString" - StrCmp $0 "" winpcap_keys_not_present - - DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\WinPcapInst" - - ReadRegStr $0 "HKLM" "Software\WinPcap" "" - StrCmp $0 "" winpcap_keys_not_present - - Delete $0\rpcapd.exe - Delete $0\LICENSE - Delete $0\uninstall.exe - ; Official 4.1 installer creates an install.log - Delete $0\install.log - RMDir "$0" - DeleteRegKey HKLM "Software\WinPcap" - - ; because we've deleted their uninstaller, skip the next - ; registry key check (we'll still need to overwrite stuff) - Goto winpcap-nmap_keys_not_present - - winpcap_keys_not_present: - - ; if our old registry key is present then assume all is well - ; (we got this far so the official WinPcap wasn't installed) - ; and use our uninstaller to (magically) silently uninstall - ; everything cleanly and avoid having to overwrite files - ReadRegStr $0 "HKLM" "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\winpcap-nmap" "UninstallString" - StrCmp $0 "" winpcap-nmap_keys_not_present silent_uninstall - - winpcap-nmap_keys_not_present: - - ; setoverwrite on to try and avoid any problems when trying to install the files - ; wpcap.dll is still present at this point, but unclear where it came from - SetOverwrite on - - ; try to ensure that npf has been stopped before we install/overwrite files - ExecWait '"net stop npf"' - - return - - silent_uninstall: - ; Our InstalledBy string is present, UninstallString should have quotes and uninstall.exe location - ; and this file should support a silent uninstall by passing /S to it. - ; we could read QuietUninstallString, but this should be exactly the same as UninstallString with /S on the end. - ReadRegStr $0 "HKLM" "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\WinPcapInst" "UninstallString" - ExecWait '$0 /S _?=$INSTDIR' - return - - no_silent: - IfFileExists "$SYSDIR\wpcap.dll" do_version_check - return - - do_version_check: - - GetDllVersion "$SYSDIR\wpcap.dll" $R0 $R1 - IntOp $R2 $R0 / 0x00010000 - IntOp $R3 $R0 & 0x0000FFFF - IntOp $R4 $R1 / 0x00010000 - IntOp $R5 $R1 & 0x0000FFFF - StrCpy $inst_ver "$R2.$R3.$R4.$R5" - - StrCmp $inst_ver $my_ver same_ver - - MessageBox MB_YESNO|MB_ICONQUESTION "WinPcap version $inst_ver exists on this system. Replace with version $my_ver?" IDYES try_uninstallers - quit - - same_ver: - MessageBox MB_OK "Skipping WinPcap installation since version $inst_ver already exists on this system. Uninstall that version first if you wish to force install." - quit - - try_uninstallers: - - ; check for UninstallString and use that in preference (should already have double quotes and uninstall.exe) - ReadRegStr $0 "HKLM" "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\WinPcapInst" "UninstallString" - StrCmp $0 "" no_uninstallstring - IfFileExists "$0" uninstaller_exists no_uninstallstring - uninstaller_exists: - ExecWait '$0 _?=$INSTDIR' - return - - no_uninstallstring: - ; didn't find an UninstallString, check for our old UninstallString and if uninstall.exe exists: - ReadRegStr $0 "HKLM" "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\winpcap-nmap" "UninstallString" - StrCmp $0 "" still_no_uninstallstring - IfFileExists "$0" old_uninstaller_exists still_no_uninstallstring - old_uninstaller_exists: - MessageBox MB_OK "Using our old UninstallString, file exists" - ExecWait '$0 _?=$INSTDIR' - return - - still_no_uninstallstring: - ; still didn't find anything, try looking for an uninstall.exe file at: - ReadRegStr $0 "HKLM" "Software\WinPcap" "" - ; Strip any surrounding double quotes from around the install string, - ; as WinPcap hasn't used quotes in the past, but our old installers did. - ; Check the first and last character for safety! - StrCpy $1 $0 1 - StrCmp $1 "$\"" maybestripquotes nostrip - maybestripquotes: - StrLen $1 $0 - IntOp $1 $1 - 1 - StrCpy $1 $0 1 $1 - StrCmp $1 "$\"" stripquotes nostrip - stripquotes: - StrCpy $0 $0 -1 1 - nostrip: - IfFileExists "$0\uninstall.exe" run_last_uninstaller no_uninstall_exe - run_last_uninstaller: - ExecWait '"$0\Uninstall.exe" _?=$INSTDIR' - no_uninstall_exe: - ; give up now, we've tried our hardest to determine a valid uninstaller! - return - -FunctionEnd - -Function optionsPage - !insertmacro MUI_HEADER_TEXT "WinPcap Options" "" - !insertmacro MUI_INSTALLOPTIONS_DISPLAY "options.ini" -FunctionEnd - -Function doOptions - ReadINIStr $0 "$PLUGINSDIR\options.ini" "Field 1" "State" - StrCmp $0 "0" do_options_next - WriteRegDWORD HKLM "SYSTEM\CurrentControlSet\Services\NPF" "Start" 2 - do_options_next: - ReadINIStr $0 "$PLUGINSDIR\options.ini" "Field 2" "State" - StrCmp $0 "0" do_options_end - nsExec::Exec "net start npf" - do_options_end: -FunctionEnd - -Function finalPage - ; diplay a page saying everything's finished - !insertmacro MUI_HEADER_TEXT "Finished" "Thank you for installing WinPcap" - !insertmacro MUI_INSTALLOPTIONS_DISPLAY "final.ini" -FunctionEnd - -Function doFinal - ; don't need to do anything -FunctionEnd - -Function registerServiceAPI - ; delete the npf service to avoid an error message later if it already exists - System::Call 'advapi32::OpenSCManagerA(,,i ${SC_MANAGER_ALL_ACCESS})i.r0' - System::Call 'advapi32::OpenServiceA(i r0,t "npf", i ${SERVICE_ALL_ACCESS}) i.r1' - System::Call 'advapi32::DeleteService(i r1) i.r6' - System::Call 'advapi32::CloseServiceHandle(i r1) n' - System::Call 'advapi32::CloseServiceHandle(i r0) n' - ; create the new npf service - System::Call 'advapi32::OpenSCManagerA(,,i ${SC_MANAGER_ALL_ACCESS})i.R0' - System::Call 'advapi32::CreateServiceA(i R0,t "npf",t "NetGroup Packet Filter Driver",i ${SERVICE_ALL_ACCESS},i ${SERVICE_KERNEL_DRIVER}, i ${SERVICE_DEMAND_START},i ${SERVICE_ERROR_NORMAL}, t "system32\drivers\npf.sys",,,,,) i.r1' - StrCmp $1 "0" register_fail register_success - register_fail: - DetailPrint "Failed to create the npf service" - IfSilent close_register_handle register_fail_messagebox - register_fail_messagebox: - MessageBox MB_OK "Failed to create the npf service. Please try installing WinPcap again, or use the official WinPcap installer from www.winpcap.org" - Goto close_register_handle - register_success: - DetailPrint "The npf service was successfully created" - close_register_handle: - System::Call 'advapi32::CloseServiceHandle(i R0) n' -FunctionEnd - -Function un.registerServiceAPI - System::Call 'advapi32::OpenSCManagerA(,,i ${SC_MANAGER_ALL_ACCESS})i.r0' - System::Call 'advapi32::OpenServiceA(i r0,t "npf", i ${SERVICE_ALL_ACCESS}) i.r1' - System::Call 'advapi32::DeleteService(i r1) i.r6' - StrCmp $6 "0" unregister_fail unregister_success - unregister_fail: - DetailPrint "Failed to delete the npf service" - Goto close_unregister_handle - unregister_success: - DetailPrint "The npf service was successfully deleted" - close_unregister_handle: - System::Call 'advapi32::CloseServiceHandle(i r1) n' - System::Call 'advapi32::CloseServiceHandle(i r0) n' -FunctionEnd - -Function autoStartWinPcap - WriteRegDWORD HKLM "SYSTEM\CurrentControlSet\Services\NPF" "Start" 2 - nsExec::Exec "net start npf" -FunctionEnd - - -;-------------------------------- -; The stuff to install -Section "WinPcap" SecWinPcap - - ; stop the service, in case it's still registered, so files can be - ; safely overwritten and the service can be deleted. - nsExec::Exec "net stop npf" - - ; NB: We may need to introduce a check here to ensure that NPF - ; has been stopped before we continue, otherwise we Sleep for a - ; while and try the check again. This might help prevent any race - ; conditions during a silent install (and potentially during the - ; slower GUI installation. - - ; These x86 files are automatically redirected to the right place on x64 - SetOutPath $SYSDIR - File pthreadVC.dll - File wpcap.dll - - ; Check windows version - ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion - DetailPrint "Windows CurrentVersion: $R0" - StrCpy $R0 $R0 2 - StrCmp $R0 '6.' vista_files - - File nt5\x86\Packet.dll - Goto install - - vista_files: - File vista\x86\Packet.dll - - install: - Call is64bit - StrCmp $0 "0" install_32bit install_64bit - - ; Note, NSIS states: "You should always quote the path to make sure spaces - ; in the path will not disrupt Windows to find the uninstaller." - ; See: http://nsis.sourceforge.net/Add_uninstall_information_to_Add/Remove_Programs - ; This matches (most) Windows installations. Rather inconsistently, - ; DisplayIcon doesn't usually have quotes (even on Microsoft installations) and - ; HKLM Software\PackageName doesn't usually have quotes either. - - install_32bit: - SetOutPath $INSTDIR - File rpcapd.exe - File LICENSE - WriteUninstaller "$INSTDIR\uninstall.exe" - DetailPrint "Installing x86 driver" - SetOutPath $SYSDIR\drivers - File npf.sys ; x86 NT5/NT6 version - WriteRegStr HKLM "Software\WinPcap" "" "$INSTDIR" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\WinPcapInst" "UninstallString" "$\"$INSTDIR\uninstall.exe$\"" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\WinPcapInst" "QuietUninstallString" "$\"$INSTDIR\uninstall.exe$\" /S" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\WinPcapInst" "DisplayIcon" "$INSTDIR\uninstall.exe" - Goto npfdone - - install_64bit: - SetOutPath $INSTDIR - File rpcapd.exe - File LICENSE - WriteUninstaller "$INSTDIR\uninstall.exe" - DetailPrint "Installing x64 driver" - SetOutPath $SYSDIR\drivers - ; disable Wow64FsRedirection - System::Call kernel32::Wow64EnableWow64FsRedirection(i0) - File x64\npf.sys ; x64 NT5/NT6 version - ; The x86 versions of wpcap.dll and packet.dll are - ; installed into the right place further above. - ; install the 64-bit version of wpcap.dll into System32 - SetOutPath $SYSDIR - File x64\wpcap.dll ; x64 NT5/NT6 version - ; install the 64-bit version of packet.dll into System32 - ; check for vista, otherwise install the NT5 version (for XP and 2003) - StrCpy $R0 $R0 2 - StrCmp $R0 '6.' vista_x64_packet - File nt5\x64\Packet.dll ; x64 XP/2003 version - Goto nt5_x64_packet_done - vista_x64_packet: - File vista\x64\Packet.dll ; x64 Vista version - nt5_x64_packet_done: - WriteRegStr HKLM "Software\WinPcap" "" "$INSTDIR" - ; re-enable Wow64FsRedirection - System::Call kernel32::Wow64EnableWow64FsRedirection(i1) - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\WinPcapInst" "UninstallString" "$\"$INSTDIR\uninstall.exe$\"" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\WinPcapInst" "QuietUninstallString" "$\"$INSTDIR\uninstall.exe$\" /S" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\WinPcapInst" "DisplayIcon" "$INSTDIR\uninstall.exe" - - npfdone: - - ; register the driver as a system service using Windows API calls - ; this will work on Windows 2000 (that lacks sc.exe) and higher - Call registerServiceAPI - - ; Create the default NPF startup setting of 3 (SERVICE_DEMAND_START) - WriteRegDWORD HKLM "SYSTEM\CurrentControlSet\Services\NPF" "Start" 3 - - ; automatically start the service if performing a silent install, unless - ; /NPFSTARTUP=NO was given. - IfSilent 0 skip_auto_start - StrCmp $npf_startup "NO" skip_auto_start - Call autoStartWinPcap - skip_auto_start: - - ; Write the rest of the uninstall keys for Windows - - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\WinPcapInst" "DisplayName" "WinPcap 4.1.2" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\WinPcapInst" "DisplayVersion" "4.1.0.2001" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\WinPcapInst" "Publisher" "CACE Technologies" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\WinPcapInst" "URLInfoAbout" "http://www.cacetech.com" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\WinPcapInst" "URLUpdateInfo" "http://www.winpcap.org" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\WinPcapInst" "VersionMajor" "4" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\WinPcapInst" "VersionMinor" "1" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\WinPcapInst" "InstalledBy" "Nmap" - WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\WinPcapInst" "NoModify" 1 - WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\WinPcapInst" "NoRepair" 1 - - ; delete our legacy winpcap-nmap keys if they still exist (e.g. official 4.0.2 force installed over our 4.0.2): - DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\winpcap-nmap" - -SectionEnd ; end the section - - -;-------------------------------- -;Uninstaller Section - -Section "Uninstall" - - ; stop npf before we delete the service from the registry - nsExec::Exec "net stop npf" - ; unregister the driver as a system service using Windows API calls, so it works on Windows 2000 - Call un.registerServiceAPI - - ; delete our winpcap-nmap and any WinPcapInst registry keys - DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\winpcap-nmap" - DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\WinPcapInst" - DeleteRegKey HKLM "Software\WinPcap" - - Delete $INSTDIR\rpcapd.exe - Delete $INSTDIR\LICENSE - Delete $INSTDIR\uninstall.exe - - ; This deletes the x86 files from SysWOW64 if we're on x64. - Delete $SYSDIR\Packet.dll - Delete $SYSDIR\pthreadVC.dll - Delete $SYSDIR\wpcap.dll - - ; check for x64, delete npf.sys file from system32\drivers - Call un.is64bit - StrCmp $0 "0" del32bitnpf del64bitnpf - del64bitnpf: - ; disable Wow64FsRedirection - System::Call kernel32::Wow64EnableWow64FsRedirection(i0) - - Delete $SYSDIR\drivers\npf.sys - ; Also delete the x64 files in System32 - Delete $SYSDIR\wpcap.dll - Delete $SYSDIR\Packet.dll - - ; re-enable Wow64FsRedirection - System::Call kernel32::Wow64EnableWow64FsRedirection(i1) - Goto npfdeleted - del32bitnpf: - - Delete $SYSDIR\drivers\npf.sys - - npfdeleted: - - RMDir "$INSTDIR" - -SectionEnd +;; Custom winpcap for nmap +;; Recognizes the options (case sensitive): +;; /S silent install +;; /NPFSTARTUP=NO start NPF now and at startup (only has effect with /S) + +;; Started by Doug Hoyte, April 2006 + +;; Eddie Bell +;; Updated to 4.0, June 2007 +;; Updated to 4.01, July 2007 +;; Updated to 4.02, November 2007 + +;; Rob Nicholls +;; Updated to 4.1.1, October 2009 +;; Updated to 4.1.2, July 2010 +;; Updated to 4.1.3, January 2014 + +SetCompressor /SOLID /FINAL lzma + +;-------------------------------- +;Include Modern UI + + !include "MUI.nsh" + !include "FileFunc.nsh" + +;-------------------------------- +;General + +; The name of the installer +Name "WinPcap (Nmap) 4.1.3" + +; The file to write +OutFile "winpcap-nmap-4.13.exe" + +RequestExecutionLevel admin + +; These leave either "1" or "0" in $0. +Function is64bit + System::Call "kernel32::GetCurrentProcess() i .s" + System::Call "kernel32::IsWow64Process(i s, *i .r0)" +FunctionEnd +Function un.is64bit + System::Call "kernel32::GetCurrentProcess() i .s" + System::Call "kernel32::IsWow64Process(i s, *i .r0)" +FunctionEnd + +VIProductVersion "4.1.0.2980" +VIAddVersionKey /LANG=1033 "FileVersion" "4.1.0.2980" +VIAddVersionKey /LANG=1033 "ProductName" "WinPcap" +VIAddVersionKey /LANG=1033 "FileDescription" "WinPcap 4.1.3 installer" +VIAddVersionKey /LANG=1033 "LegalCopyright" "" + +;-------------------------------- +; Windows API Definitions + +!define SC_MANAGER_ALL_ACCESS 0x3F +!define SERVICE_ALL_ACCESS 0xF01FF + +; Service Types +!define SERVICE_FILE_SYSTEM_DRIVER 0x00000002 +!define SERVICE_KERNEL_DRIVER 0x00000001 +!define SERVICE_WIN32_OWN_PROCESS 0x00000010 +!define SERVICE_WIN32_SHARE_PROCESS 0x00000020 +!define SERVICE_INTERACTIVE_PROCESS 0x00000100 + +; Service start options +!define SERVICE_AUTO_START 0x00000002 +!define SERVICE_BOOT_START 0x00000000 +!define SERVICE_DEMAND_START 0x00000003 +!define SERVICE_DISABLED 0x00000004 +!define SERVICE_SYSTEM_START 0x00000001 + +; Service Error control +!define SERVICE_ERROR_CRITICAL 0x00000003 +!define SERVICE_ERROR_IGNORE 0x00000000 +!define SERVICE_ERROR_NORMAL 0x00000001 +!define SERVICE_ERROR_SEVERE 0x00000002 + +; Service Control Options +!define SERVICE_CONTROL_STOP 0x00000001 +!define SERVICE_CONTROL_PAUSE 0x00000002 + + + +;-------------------------------- +;Interface Settings + + !define MUI_ABORTWARNING + +;-------------------------------- +;Pages + +!insertmacro MUI_PAGE_LICENSE "LICENSE" +; Don't let user choose where to install the files. WinPcap doesn't let people, and it's one less thing for us to worry about. +!insertmacro MUI_PAGE_INSTFILES +!insertmacro MUI_UNPAGE_CONFIRM +!insertmacro MUI_UNPAGE_INSTFILES +Page custom optionsPage doOptions +Page custom finalPage doFinal + +;-------------------------------- +;Languages + + !insertmacro MUI_LANGUAGE "English" + +;-------------------------------- +;Reserves + +ReserveFile "options.ini" +ReserveFile "final.ini" +!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS + +;-------------------------------- + +!insertmacro GetParameters +!insertmacro GetOptions + +; This function is called on startup. IfSilent checks +; if the flag /S was specified. If so, it sets the installer +; to run in "silent mode" which displays no windows and accepts +; all defaults. + +; We also check if there is a previously installed winpcap +; on this system. If it's the same as the version we're installing, +; abort the install. If not, prompt the user about whether to +; replace it or not. + +Function .onInit + !insertmacro MUI_INSTALLOPTIONS_EXTRACT "options.ini" + !insertmacro MUI_INSTALLOPTIONS_EXTRACT "final.ini" + + var /GLOBAL inst_ver + var /GLOBAL my_ver + var /GLOBAL npf_startup + StrCpy $my_ver "4.1.0.2980" + StrCpy $npf_startup "YES" + + ; Always use the requested /D= $INSTDIR if given. + StrCmp $INSTDIR "" "" instdir_nochange + ; On 64-bit Windows, $PROGRAMFILES is "C:\Program Files (x86)" and + ; $PROGRAMFILES64 is "C:\Program Files". We want "C:\Program Files" + ; on 32-bit or 64-bit. + StrCpy $INSTDIR "$PROGRAMFILES\WinPcap" + Call is64bit + StrCmp $0 "0" instdir_nochange + StrCpy $INSTDIR "$PROGRAMFILES64\WinPcap" + instdir_nochange: + + ${GetParameters} $R0 + ClearErrors + ${GetOptions} $R0 "/NPFSTARTUP=" $npf_startup + + IfSilent do_silent no_silent + + do_silent: + SetSilent silent + IfFileExists "$SYSDIR\wpcap.dll" silent_checks + return + silent_checks: + ; check for the presence of Nmap's custom WinPcapInst registry key: + ReadRegStr $0 "HKLM" "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\WinPcapInst" "InstalledBy" + StrCmp $0 "Nmap" silent_uninstall winpcap_installedby_keys_not_present + + winpcap_installedby_keys_not_present: + ; check for the presence of WinPcapInst's UninstallString + ; and manually cleanup registry entries to avoid running + ; the GUI uninstaller and assume our installer will overwrite + ; the files. Needs to be checked in case someone (force) + ; installs WinPcap over the top of our installation + ReadRegStr $0 "HKLM" "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\WinPcapInst" "UninstallString" + StrCmp $0 "" winpcap_keys_not_present + + DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\WinPcapInst" + + ReadRegStr $0 "HKLM" "Software\WinPcap" "" + StrCmp $0 "" winpcap_keys_not_present + + Delete $0\rpcapd.exe + Delete $0\LICENSE + Delete $0\uninstall.exe + ; Official 4.1 installer creates an install.log + Delete $0\install.log + RMDir "$0" + DeleteRegKey HKLM "Software\WinPcap" + + ; because we've deleted their uninstaller, skip the next + ; registry key check (we'll still need to overwrite stuff) + Goto winpcap-nmap_keys_not_present + + winpcap_keys_not_present: + + ; if our old registry key is present then assume all is well + ; (we got this far so the official WinPcap wasn't installed) + ; and use our uninstaller to (magically) silently uninstall + ; everything cleanly and avoid having to overwrite files + ReadRegStr $0 "HKLM" "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\winpcap-nmap" "UninstallString" + StrCmp $0 "" winpcap-nmap_keys_not_present silent_uninstall + + winpcap-nmap_keys_not_present: + + ; setoverwrite on to try and avoid any problems when trying to install the files + ; wpcap.dll is still present at this point, but unclear where it came from + SetOverwrite on + + ; try to ensure that npf has been stopped before we install/overwrite files + ExecWait '"net stop npf"' + + return + + silent_uninstall: + ; Our InstalledBy string is present, UninstallString should have quotes and uninstall.exe location + ; and this file should support a silent uninstall by passing /S to it. + ; we could read QuietUninstallString, but this should be exactly the same as UninstallString with /S on the end. + ReadRegStr $0 "HKLM" "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\WinPcapInst" "UninstallString" + ExecWait '$0 /S _?=$INSTDIR' + return + + no_silent: + IfFileExists "$SYSDIR\wpcap.dll" do_version_check + return + + do_version_check: + + GetDllVersion "$SYSDIR\wpcap.dll" $R0 $R1 + IntOp $R2 $R0 / 0x00010000 + IntOp $R3 $R0 & 0x0000FFFF + IntOp $R4 $R1 / 0x00010000 + IntOp $R5 $R1 & 0x0000FFFF + StrCpy $inst_ver "$R2.$R3.$R4.$R5" + + StrCmp $inst_ver $my_ver same_ver + + MessageBox MB_YESNO|MB_ICONQUESTION "WinPcap version $inst_ver exists on this system. Replace with version $my_ver?" IDYES try_uninstallers + quit + + same_ver: + MessageBox MB_OK "Skipping WinPcap installation since version $inst_ver already exists on this system. Uninstall that version first if you wish to force install." + quit + + try_uninstallers: + + ; check for UninstallString and use that in preference (should already have double quotes and uninstall.exe) + ReadRegStr $0 "HKLM" "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\WinPcapInst" "UninstallString" + StrCmp $0 "" no_uninstallstring + IfFileExists "$0" uninstaller_exists no_uninstallstring + uninstaller_exists: + ExecWait '$0 _?=$INSTDIR' + return + + no_uninstallstring: + ; didn't find an UninstallString, check for our old UninstallString and if uninstall.exe exists: + ReadRegStr $0 "HKLM" "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\winpcap-nmap" "UninstallString" + StrCmp $0 "" still_no_uninstallstring + IfFileExists "$0" old_uninstaller_exists still_no_uninstallstring + old_uninstaller_exists: + MessageBox MB_OK "Using our old UninstallString, file exists" + ExecWait '$0 _?=$INSTDIR' + return + + still_no_uninstallstring: + ; still didn't find anything, try looking for an uninstall.exe file at: + ReadRegStr $0 "HKLM" "Software\WinPcap" "" + ; Strip any surrounding double quotes from around the install string, + ; as WinPcap hasn't used quotes in the past, but our old installers did. + ; Check the first and last character for safety! + StrCpy $1 $0 1 + StrCmp $1 "$\"" maybestripquotes nostrip + maybestripquotes: + StrLen $1 $0 + IntOp $1 $1 - 1 + StrCpy $1 $0 1 $1 + StrCmp $1 "$\"" stripquotes nostrip + stripquotes: + StrCpy $0 $0 -1 1 + nostrip: + IfFileExists "$0\uninstall.exe" run_last_uninstaller no_uninstall_exe + run_last_uninstaller: + ExecWait '"$0\Uninstall.exe" _?=$INSTDIR' + no_uninstall_exe: + ; give up now, we've tried our hardest to determine a valid uninstaller! + return + +FunctionEnd + +Function optionsPage + !insertmacro MUI_HEADER_TEXT "WinPcap Options" "" + !insertmacro MUI_INSTALLOPTIONS_DISPLAY "options.ini" +FunctionEnd + +Function doOptions + ReadINIStr $0 "$PLUGINSDIR\options.ini" "Field 1" "State" + StrCmp $0 "0" do_options_next + WriteRegDWORD HKLM "SYSTEM\CurrentControlSet\Services\NPF" "Start" 2 + do_options_next: + ReadINIStr $0 "$PLUGINSDIR\options.ini" "Field 2" "State" + StrCmp $0 "0" do_options_end + nsExec::Exec "net start npf" + do_options_end: +FunctionEnd + +Function finalPage + ; diplay a page saying everything's finished + !insertmacro MUI_HEADER_TEXT "Finished" "Thank you for installing WinPcap" + !insertmacro MUI_INSTALLOPTIONS_DISPLAY "final.ini" +FunctionEnd + +Function doFinal + ; don't need to do anything +FunctionEnd + +Function registerServiceAPI + ; delete the npf service to avoid an error message later if it already exists + System::Call 'advapi32::OpenSCManagerA(,,i ${SC_MANAGER_ALL_ACCESS})i.r0' + System::Call 'advapi32::OpenServiceA(i r0,t "npf", i ${SERVICE_ALL_ACCESS}) i.r1' + System::Call 'advapi32::DeleteService(i r1) i.r6' + System::Call 'advapi32::CloseServiceHandle(i r1) n' + System::Call 'advapi32::CloseServiceHandle(i r0) n' + ; create the new npf service + System::Call 'advapi32::OpenSCManagerA(,,i ${SC_MANAGER_ALL_ACCESS})i.R0' + System::Call 'advapi32::CreateServiceA(i R0,t "npf",t "NetGroup Packet Filter Driver",i ${SERVICE_ALL_ACCESS},i ${SERVICE_KERNEL_DRIVER}, i ${SERVICE_DEMAND_START},i ${SERVICE_ERROR_NORMAL}, t "system32\drivers\npf.sys",,,,,) i.r1' + StrCmp $1 "0" register_fail register_success + register_fail: + DetailPrint "Failed to create the npf service" + IfSilent close_register_handle register_fail_messagebox + register_fail_messagebox: + MessageBox MB_OK "Failed to create the npf service. Please try installing WinPcap again, or use the official WinPcap installer from www.winpcap.org" + Goto close_register_handle + register_success: + DetailPrint "The npf service was successfully created" + close_register_handle: + System::Call 'advapi32::CloseServiceHandle(i R0) n' +FunctionEnd + +Function un.registerServiceAPI + System::Call 'advapi32::OpenSCManagerA(,,i ${SC_MANAGER_ALL_ACCESS})i.r0' + System::Call 'advapi32::OpenServiceA(i r0,t "npf", i ${SERVICE_ALL_ACCESS}) i.r1' + System::Call 'advapi32::DeleteService(i r1) i.r6' + StrCmp $6 "0" unregister_fail unregister_success + unregister_fail: + DetailPrint "Failed to delete the npf service" + Goto close_unregister_handle + unregister_success: + DetailPrint "The npf service was successfully deleted" + close_unregister_handle: + System::Call 'advapi32::CloseServiceHandle(i r1) n' + System::Call 'advapi32::CloseServiceHandle(i r0) n' +FunctionEnd + +Function autoStartWinPcap + WriteRegDWORD HKLM "SYSTEM\CurrentControlSet\Services\NPF" "Start" 2 + nsExec::Exec "net start npf" +FunctionEnd + + +;-------------------------------- +; The stuff to install +Section "WinPcap" SecWinPcap + + ; stop the service, in case it's still registered, so files can be + ; safely overwritten and the service can be deleted. + nsExec::Exec "net stop npf" + + ; NB: We may need to introduce a check here to ensure that NPF + ; has been stopped before we continue, otherwise we Sleep for a + ; while and try the check again. This might help prevent any race + ; conditions during a silent install (and potentially during the + ; slower GUI installation. + + ; These x86 files are automatically redirected to the right place on x64 + SetOutPath $SYSDIR + File pthreadVC.dll + File wpcap.dll + + ; Check windows version + ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion + DetailPrint "Windows CurrentVersion: $R0" + StrCpy $R0 $R0 2 + StrCmp $R0 '6.' vista_files + + File nt5\x86\Packet.dll + Goto install + + vista_files: + File vista\x86\Packet.dll + + install: + Call is64bit + StrCmp $0 "0" install_32bit install_64bit + + ; Note, NSIS states: "You should always quote the path to make sure spaces + ; in the path will not disrupt Windows to find the uninstaller." + ; See: http://nsis.sourceforge.net/Add_uninstall_information_to_Add/Remove_Programs + ; This matches (most) Windows installations. Rather inconsistently, + ; DisplayIcon doesn't usually have quotes (even on Microsoft installations) and + ; HKLM Software\PackageName doesn't usually have quotes either. + + install_32bit: + SetOutPath $INSTDIR + File rpcapd.exe + File LICENSE + WriteUninstaller "$INSTDIR\uninstall.exe" + DetailPrint "Installing x86 driver" + SetOutPath $SYSDIR\drivers + File npf.sys ; x86 NT5/NT6 version + WriteRegStr HKLM "Software\WinPcap" "" "$INSTDIR" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\WinPcapInst" "UninstallString" "$\"$INSTDIR\uninstall.exe$\"" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\WinPcapInst" "QuietUninstallString" "$\"$INSTDIR\uninstall.exe$\" /S" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\WinPcapInst" "DisplayIcon" "$INSTDIR\uninstall.exe" + Goto npfdone + + install_64bit: + SetOutPath $INSTDIR + File rpcapd.exe + File LICENSE + WriteUninstaller "$INSTDIR\uninstall.exe" + DetailPrint "Installing x64 driver" + SetOutPath $SYSDIR\drivers + ; disable Wow64FsRedirection + System::Call kernel32::Wow64EnableWow64FsRedirection(i0) + File x64\npf.sys ; x64 NT5/NT6 version + ; The x86 versions of wpcap.dll and packet.dll are + ; installed into the right place further above. + ; install the 64-bit version of wpcap.dll into System32 + SetOutPath $SYSDIR + File x64\wpcap.dll ; x64 NT5/NT6 version + ; install the 64-bit version of packet.dll into System32 + ; check for vista, otherwise install the NT5 version (for XP and 2003) + StrCpy $R0 $R0 2 + StrCmp $R0 '6.' vista_x64_packet + File nt5\x64\Packet.dll ; x64 XP/2003 version + Goto nt5_x64_packet_done + vista_x64_packet: + File vista\x64\Packet.dll ; x64 Vista version + nt5_x64_packet_done: + WriteRegStr HKLM "Software\WinPcap" "" "$INSTDIR" + ; re-enable Wow64FsRedirection + System::Call kernel32::Wow64EnableWow64FsRedirection(i1) + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\WinPcapInst" "UninstallString" "$\"$INSTDIR\uninstall.exe$\"" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\WinPcapInst" "QuietUninstallString" "$\"$INSTDIR\uninstall.exe$\" /S" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\WinPcapInst" "DisplayIcon" "$INSTDIR\uninstall.exe" + + npfdone: + + ; register the driver as a system service using Windows API calls + ; this will work on Windows 2000 (that lacks sc.exe) and higher + Call registerServiceAPI + + ; Create the default NPF startup setting of 3 (SERVICE_DEMAND_START) + WriteRegDWORD HKLM "SYSTEM\CurrentControlSet\Services\NPF" "Start" 3 + + ; automatically start the service if performing a silent install, unless + ; /NPFSTARTUP=NO was given. + IfSilent 0 skip_auto_start + StrCmp $npf_startup "NO" skip_auto_start + Call autoStartWinPcap + skip_auto_start: + + ; Write the rest of the uninstall keys for Windows + + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\WinPcapInst" "DisplayName" "WinPcap 4.1.3" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\WinPcapInst" "DisplayVersion" "4.1.0.2980" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\WinPcapInst" "Publisher" "CACE Technologies" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\WinPcapInst" "URLInfoAbout" "http://www.cacetech.com" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\WinPcapInst" "URLUpdateInfo" "http://www.winpcap.org" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\WinPcapInst" "VersionMajor" "4" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\WinPcapInst" "VersionMinor" "1" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\WinPcapInst" "InstalledBy" "Nmap" + WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\WinPcapInst" "NoModify" 1 + WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\WinPcapInst" "NoRepair" 1 + + ; delete our legacy winpcap-nmap keys if they still exist (e.g. official 4.0.2 force installed over our 4.0.2): + DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\winpcap-nmap" + +SectionEnd ; end the section + + +;-------------------------------- +;Uninstaller Section + +Section "Uninstall" + + ; stop npf before we delete the service from the registry + nsExec::Exec "net stop npf" + ; unregister the driver as a system service using Windows API calls, so it works on Windows 2000 + Call un.registerServiceAPI + + ; delete our winpcap-nmap and any WinPcapInst registry keys + DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\winpcap-nmap" + DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\WinPcapInst" + DeleteRegKey HKLM "Software\WinPcap" + + Delete $INSTDIR\rpcapd.exe + Delete $INSTDIR\LICENSE + Delete $INSTDIR\uninstall.exe + + ; This deletes the x86 files from SysWOW64 if we're on x64. + Delete $SYSDIR\Packet.dll + Delete $SYSDIR\pthreadVC.dll + Delete $SYSDIR\wpcap.dll + + ; check for x64, delete npf.sys file from system32\drivers + Call un.is64bit + StrCmp $0 "0" del32bitnpf del64bitnpf + del64bitnpf: + ; disable Wow64FsRedirection + System::Call kernel32::Wow64EnableWow64FsRedirection(i0) + + Delete $SYSDIR\drivers\npf.sys + ; Also delete the x64 files in System32 + Delete $SYSDIR\wpcap.dll + Delete $SYSDIR\Packet.dll + + ; re-enable Wow64FsRedirection + System::Call kernel32::Wow64EnableWow64FsRedirection(i1) + Goto npfdeleted + del32bitnpf: + + Delete $SYSDIR\drivers\npf.sys + + npfdeleted: + + RMDir "$INSTDIR" + +SectionEnd diff --git a/mswin32/winpcap/wpcap.dll b/mswin32/winpcap/wpcap.dll index ebb17ad55..0d432e964 100644 Binary files a/mswin32/winpcap/wpcap.dll and b/mswin32/winpcap/wpcap.dll differ diff --git a/mswin32/winpcap/x64/npf.sys b/mswin32/winpcap/x64/npf.sys index 3e373fa6c..761c90c93 100644 Binary files a/mswin32/winpcap/x64/npf.sys and b/mswin32/winpcap/x64/npf.sys differ diff --git a/mswin32/winpcap/x64/wpcap.dll b/mswin32/winpcap/x64/wpcap.dll index d68e476e4..eabb73ddd 100755 Binary files a/mswin32/winpcap/x64/wpcap.dll and b/mswin32/winpcap/x64/wpcap.dll differ