ClamAV is an open source (GPLv2) anti-virus toolkit.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
clamav/win32
Micah Snyder e766303b2f Removing final references to libmspack-0.5alpha, preventing make dist. 7 years ago
..
3rdparty Updated win32 3rdparty libxml2 to version 2.9.8. 7 years ago
clamav-for-windows Restructured scan options flags from a single bitflag field to a structure containing multiple bitflag fields. This also required adding a new function to the bytecode API to get scan options a la carte, and modifying the existing function to hand back scan options in the old/deprecated uint32_t bitflag format. Re-generated bytecode iface header files. 7 years ago
compat Spelling Adjustments (#30) 7 years ago
conf_examples Changing numerous scan options' names, primarily those of heuristic signatature alert options. Original options (command line and clamd) will remain as deprecated & undocumented for a couple releases. Added 2 extra scan options to allow users to differentiate between alerting on encrypted archives vs encrypted documents (bb11911). 7 years ago
llvmbuild Spelling Adjustments (#30) 7 years ago
res Incrementing the libclamav version numbers to 9.0.0 and setting the version strings to 0.101.0-beta. 7 years ago
.gitignore updating git commits, sln to fix build, and most importantly adding macro definitions to cltypes in support of Windows. 8 years ago
ClamAV-Installer.iss Replaced vdproj Installer Project setup build files with Inno Setup build file. Updated win32 README accordingly. 7 years ago
ClamAV.sln Replaced vdproj Installer Project setup build files with Inno Setup build file. Updated win32 README accordingly. 7 years ago
LLVMcodegen.vcxproj bb11378 - updating ClamAV to support VS 2015, patch based on pull request by Keith Jones 9 years ago
LLVMcodegen.vcxproj.filters bb11378 - updating ClamAV to support VS 2015, patch based on pull request by Keith Jones 9 years ago
LLVMjit.vcxproj bb11378 - updating ClamAV to support VS 2015, patch based on pull request by Keith Jones 9 years ago
LLVMjit.vcxproj.filters bb11378 - updating ClamAV to support VS 2015, patch based on pull request by Keith Jones 9 years ago
LLVMsystem.vcxproj bb11378 - updating ClamAV to support VS 2015, patch based on pull request by Keith Jones 9 years ago
LLVMsystem.vcxproj.filters bb11378 - updating ClamAV to support VS 2015, patch based on pull request by Keith Jones 9 years ago
LLVMx86codegen.vcxproj bb11378 - updating ClamAV to support VS 2015, patch based on pull request by Keith Jones 9 years ago
LLVMx86codegen.vcxproj.filters bb11378 - updating ClamAV to support VS 2015, patch based on pull request by Keith Jones 9 years ago
README.md Documentation improvements regarding ClamAV installation, initial setup. 7 years ago
clamav-config.h Incrementing the libclamav version numbers to 9.0.0 and setting the version strings to 0.101.0-beta. 7 years ago
clambc.vcxproj Updated win32 3rdparty pcre library to pcre2 version 10.31. 7 years ago
clambc.vcxproj.filters win32: project files updated to vs10; 64bit stuff will be restored soon 15 years ago
clamconf.vcxproj Updated win32 3rdparty pcre library to pcre2 version 10.31. 7 years ago
clamconf.vcxproj.filters win32: project files updated to vs10; 64bit stuff will be restored soon 15 years ago
clamd.vcxproj Updated win32 3rdparty pcre library to pcre2 version 10.31. 7 years ago
clamd.vcxproj.filters bb11062 - adding idmef_logging references to clamd vs2015 proj 9 years ago
clamdscan.vcxproj Updated win32 3rdparty pcre library to pcre2 version 10.31. 7 years ago
clamdscan.vcxproj.filters Build on Win32 11 years ago
clamscan.vcxproj Updated win32 3rdparty pcre library to pcre2 version 10.31. 7 years ago
clamscan.vcxproj.filters Build on Win32 11 years ago
configure.bat win32: configure.js 16 years ago
configure.js win32: properly handle release versions 14 years ago
demon.bmp Replaced vdproj Installer Project setup build files with Inno Setup build file. Updated win32 README accordingly. 7 years ago
freshclam.vcxproj Updated win32 3rdparty pcre library to pcre2 version 10.31. 7 years ago
freshclam.vcxproj.filters Change Windows build to use OpenSSL 1.1.0.c 9 years ago
libclamav.def win32: fixes for sigtool imphash linking 9 years ago
libclamav.vcxproj Removing final references to libmspack-0.5alpha, preventing make dist. 7 years ago
libclamav.vcxproj.filters Removed sdl check from mspack so it possibly-(but not actually)-uninitialized-local-variables will not be treated as an error. Added matcher-byte-comp.c to libclamav.vcxproj. 7 years ago
libclamavcxx.vcxproj Fix spelling mistake 8 years ago
libclamavcxx.vcxproj.filters Build on Win32 11 years ago
libclamunrar.def win32: add unrar s'port 16 years ago
libclamunrar.vcxproj Updating libclamunrar from legacy C implementation to modern unrar 5.6.5. API changes and supporting changes included to pass the filepath of the scanned file into libclamav through the cli_ctx structure, required by the unrar library to open archives. The filename argument may be optional for the scandesc scanning variant, but libclamav will make a best effort to identify the filename from the file descriptor if it was not provided. In addition, included the ability to prefix temp file and directory names with file basenames. 7 years ago
libclamunrar.vcxproj.filters Updating libclamunrar from legacy C implementation to modern unrar 5.6.5. API changes and supporting changes included to pass the filepath of the scanned file into libclamav through the cli_ctx structure, required by the unrar library to open archives. The filename argument may be optional for the scandesc scanning variant, but libclamav will make a best effort to identify the filename from the file descriptor if it was not provided. In addition, included the ability to prefix temp file and directory names with file basenames. 7 years ago
libclamunrar_iface.def Updating libclamunrar from legacy C implementation to modern unrar 5.6.5. API changes and supporting changes included to pass the filepath of the scanned file into libclamav through the cli_ctx structure, required by the unrar library to open archives. The filename argument may be optional for the scandesc scanning variant, but libclamav will make a best effort to identify the filename from the file descriptor if it was not provided. In addition, included the ability to prefix temp file and directory names with file basenames. 7 years ago
libclamunrar_iface.vcxproj Updating libclamunrar from legacy C implementation to modern unrar 5.6.5. API changes and supporting changes included to pass the filepath of the scanned file into libclamav through the cli_ctx structure, required by the unrar library to open archives. The filename argument may be optional for the scandesc scanning variant, but libclamav will make a best effort to identify the filename from the file descriptor if it was not provided. In addition, included the ability to prefix temp file and directory names with file basenames. 7 years ago
libclamunrar_iface.vcxproj.filters Updating libclamunrar from legacy C implementation to modern unrar 5.6.5. API changes and supporting changes included to pass the filepath of the scanned file into libclamav through the cli_ctx structure, required by the unrar library to open archives. The filename argument may be optional for the scandesc scanning variant, but libclamav will make a best effort to identify the filename from the file descriptor if it was not provided. In addition, included the ability to prefix temp file and directory names with file basenames. 7 years ago
mspack.vcxproj Removed sdl check from mspack so it possibly-(but not actually)-uninitialized-local-variables will not be treated as an error. Added matcher-byte-comp.c to libclamav.vcxproj. 7 years ago
mspack.vcxproj.filters Removed sdl check from mspack so it possibly-(but not actually)-uninitialized-local-variables will not be treated as an error. Added matcher-byte-comp.c to libclamav.vcxproj. 7 years ago
openssl.vcxproj Regargeting openssl solution to match the other projects. 8 years ago
openssl.vcxproj.filters adding openssl visual studio project to provide the openssl DLLs to the Setup installer projects. there may be an even cleaner solution but this works. 8 years ago
platform.h bb11250 - Removing deprecated function gethostbyname from Windows. 10 years ago
pthreads.vcxproj Explicitely building 3rdparty/pthreads-win32 as a separate DLL and dynamically linking it with libclamav. 7 years ago
pthreads.vcxproj.filters Explicitely building 3rdparty/pthreads-win32 as a separate DLL and dynamically linking it with libclamav. 7 years ago
sigtool.vcxproj Updated win32 3rdparty pcre library to pcre2 version 10.31. 7 years ago
sigtool.vcxproj.filters Change Windows build to use OpenSSL 1.1.0.c 9 years ago
talos.bmp Replaced vdproj Installer Project setup build files with Inno Setup build file. Updated win32 README accordingly. 7 years ago
target.h win32 fixes: bb#2152 and bb#2153 15 years ago
update-win32.pl Converting http urls to https urls. Primary focus was on clamav.net urls. I updated a couple others and fixes a few broken links as well. There are many (non-clamav.net) urls I didn't address, especially in 3rd party or contrib code. 7 years ago

README.md

Win32 ClamAV Build Instructions

This document describes how to build ClamAV on Windows using Visual Studio. For information on how to use ClamAV, please refer to our User Manual.

News

Installer Projects

ClamAV 0.101 removes the old Visual Studio Installer Projects files (Setup-x64.vdproj, Setup-x86.vdproj). In their place we now build an installer using Inno Setup that is capable of installing ClamAV on both 32-bit and 64-bit architectures with one installer.

For more details, see the instructions below on how to build ClamAV.

OpenSSL

In order to support more advanced features planned in future releases, ClamAV has switched to using OpenSSL for hashing. The ClamAV Visual Studio project included with ClamAV's source code requires the OpenSSL distributables to be placed in a specific directory. This article will teach you how to compile OpenSSL on a Microsoft Windows system and how to link ClamAV against OpenSSL.

Read More here

Socket and libclamav API input

Starting from version 0.98 the windows version of ClamAV requires all the input to be UTF-8 encoded.

This affects:

  • the API, notably the cl_scanfile() function
  • clamd socket input, e.g. the commands SCAN, CONTSCAN, MUTLISCAN, etc.
  • clamd socket output, i.e replies to the above queries

For legacy reasons ANSI (i.e. CP_ACP) input will still be accepted and processed as before, but with two important remarks: First, socket replies to ANSI queries will still be UTF-8 encoded. Second, ANSI sequences which are also valid UTF-8 sequences will be handled as UTF-8.

As a side note, console output (stdin and stderr) will always be OEM encoded, even when redirected to a file.

Requirements

To build the source code you will need:

To build the installer, you also need:

ClamAV is supported for Windows 7+, but Windows 10 is recommended. Visual Studio 2017 should work fine, but we currently work with Visual Studio 2015.

Getting the code

ClamAV source code is freely available on GitHub

To obtain a copy of the code, open a Git Bash terminal. Navigate to a directory where you want to store the code, eg "workspace" and clone the repository using the https web URL. For example:

cd
mkdir workspace
cd workspace
git clone https://github.com/vrtadmin/clamav-devel.git

Step into the win32 directory and open an Explorer window.

cd clamav-devel
cd win32
explorer .

ClamAV for Windows uses the same code base as Unix/Linux based operating systems. However, Windows specific files for building ClamAV are found under the win32 directory.

Code configuration

After downloading the source code, minimal configuration is required:

  1. Run the win32/configure.bat script from within the git shell. Skip this step if you are building from an official release tarball.
  2. Obtain OpenSSL V1.1.0 or higher. You will need the headers, libs, and bins for the platform (Win32 or x64) that you're targeting.
  3. Place the headers and binaries in a directory with the following structure:
    C:\clam_dependencies
    │
    ├───vcredist
    │   ├───vc_redist.x64.exe <-- VS 2015 Redistributables installer (x64)
    │   └───vc_redist.x86.exe <-- VS 2015 Redistributables installer (x86)
    ├───Win32
    │   ├───include
    │   │   └───openssl  <-- openssl headers here
    │   └───lib          <-- .DLLs and .LIBs here
    └───x64
        ├───include
        │   └───openssl  <-- openssl headers here
        └───lib          <-- .DLLs and .LIBs here
    
  4. Add an environment variable with the name CLAM_DEPENDENCIES and set the value to the path of the above directory.
  5. At present, the Inno Setup script ClamAV-Installer.iss requires this directory to be located specifically at C:\clam_dependencies in order to build the installer:

Compilation

Open win32/ClamAV.sln in Visual Studio and build all. The output directory for the binaries is either /win32/(Win32|x64)/Debug or /win32/(Win32|x64)/Release depending on the configuration you pick.

Alternatively, you can build from the command line (aka cmd.exe) by following these steps:

x64:

call "C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\vcvarsall.bat" x64
setx CLAM_DEPENDENCIES "C:\\clam_dependencies"
call configure.bat
devenv ClamAV.sln /Clean "Release|x64" /useenv /ProjectConfig "Release|x64"
devenv ClamAV.sln /Rebuild "Release|x64" /useenv /ProjectConfig "Release|x64"'''

x86:

reg Query "HKLM\\Hardware\\Description\\System\\CentralProcessor\\0" | find /i "x86" > NUL && set OS=32BIT || set OS=64BIT
if %OS%==32BIT call "C:\\Program Files\\Microsoft Visual Studio 14.0\\VC\\vcvarsall.bat" x86
if %OS%==64BIT call "C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\vcvarsall.bat" x86
setx CLAM_DEPENDENCIES "C:\\clam_dependencies"
call configure.bat
devenv ClamAV.sln /Clean "Release|Win32" /useenv /ProjectConfig "Release|Win32"
devenv ClamAV.sln /Rebuild "Release|Win32" /useenv /ProjectConfig "Release|Win32"'''

To build the installer:

  1. Build ClamAV for both x64 and Win32. The installer requires both versions to be available.
  2. Open win32\ClamAV-Installer.iss using Inno Setup 5.
  3. Run "Compile".

Alternatively, you can invoke the Inno Setup command line installer from cmd.exe:

"C:\Program Files (x86)\Inno Setup 5\ISCC.exe" .\ClamAV-Installer.iss

After compilation, the installer will be located at win32\ClamAV-<version>.exe

Special notes

The ClamAV tools in win32 are the same as in unix, so refer to their respective manpage for general usage. The major differences are listed below:

  • Config files path search order:

    1. The content of the registry key: "HKEY_LOCAL_MACHINE/Software/ClamAV/ConfDir"
    2. The directory where libclamav.dll is located: "C:\Program Files\ClamAV"
    3. "C:\ClamAV"
  • Database files path search order:

    1. The content of the registry key: "HKEY_LOCAL_MACHINE/Software/ClamAV/DataDir"
    2. The directory "database" inside the directory where libclamav.dll is located: "C:\Program Files\ClamAV\database"
    3. "C:\ClamAV\db"
  • Globbing Since the Windows command prompt doesn't take care of wildcard expansion, minimal emulation of unix glob() is performed internally. It supports "*" and "?" only.

  • File paths Please always use the backslash as the path separator. SMB Network shares and UNC paths are supported.

  • Debug builds Malloc in Debug (as opposed to release) mode fails after allocating some 90k chunks; such builds won't be able to handle large databases. Just do yourself a favour and always build in Release mode.

Special thanks

Special thanks to Gianluigi Tiesi and Mark Pizzolato for their valuable help in coding and testing.