mirror of
https://github.com/SoftEtherVPN/SoftEtherVPN.git
synced 2025-09-19 17:59:19 +03:00
v4.03-9408-rtm
This commit is contained in:
1282
src/Wfp/Wfp.c
Normal file
1282
src/Wfp/Wfp.c
Normal file
File diff suppressed because it is too large
Load Diff
126
src/Wfp/Wfp.h
Normal file
126
src/Wfp/Wfp.h
Normal file
@ -0,0 +1,126 @@
|
||||
// SoftEther VPN Source Code
|
||||
// Windows Filtering Platform Callout Driver for Capturing IPsec Packets on Windows Vista / 7 / Server 2008
|
||||
//
|
||||
// SoftEther VPN Server, Client and Bridge are free software under GPLv2.
|
||||
//
|
||||
// Copyright (c) 2012-2014 Daiyuu Nobori.
|
||||
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan.
|
||||
// Copyright (c) 2012-2014 SoftEther Corporation.
|
||||
//
|
||||
// All Rights Reserved.
|
||||
//
|
||||
// http://www.softether.org/
|
||||
//
|
||||
// Author: Daiyuu Nobori
|
||||
// Comments: Tetsuo Sugiyama, Ph.D.
|
||||
//
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// version 2 as published by the Free Software Foundation.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License version 2
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
//
|
||||
// THE LICENSE AGREEMENT IS ATTACHED ON THE SOURCE-CODE PACKAGE
|
||||
// AS "LICENSE.TXT" FILE. READ THE TEXT FILE IN ADVANCE TO USE THE SOFTWARE.
|
||||
//
|
||||
//
|
||||
// THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN,
|
||||
// UNDER JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY,
|
||||
// MERGE, PUBLISH, DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS
|
||||
// SOFTWARE, THAT ANY JURIDICAL DISPUTES WHICH ARE CONCERNED TO THIS
|
||||
// SOFTWARE OR ITS CONTENTS, AGAINST US (SOFTETHER PROJECT, SOFTETHER
|
||||
// CORPORATION, DAIYUU NOBORI OR OTHER SUPPLIERS), OR ANY JURIDICAL
|
||||
// DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND OF USING, COPYING,
|
||||
// MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING, AND/OR
|
||||
// SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND
|
||||
// CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO
|
||||
// EXCLUSIVE JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO,
|
||||
// JAPAN. YOU MUST WAIVE ALL DEFENSES OF LACK OF PERSONAL JURISDICTION
|
||||
// AND FORUM NON CONVENIENS. PROCESS MAY BE SERVED ON EITHER PARTY IN
|
||||
// THE MANNER AUTHORIZED BY APPLICABLE LAW OR COURT RULE.
|
||||
//
|
||||
// USE ONLY IN JAPAN. DO NOT USE IT IN OTHER COUNTRIES. IMPORTING THIS
|
||||
// SOFTWARE INTO OTHER COUNTRIES IS AT YOUR OWN RISK. SOME COUNTRIES
|
||||
// PROHIBIT ENCRYPTED COMMUNICATIONS. USING THIS SOFTWARE IN OTHER
|
||||
// COUNTRIES MIGHT BE RESTRICTED.
|
||||
//
|
||||
//
|
||||
// DEAR SECURITY EXPERTS
|
||||
// ---------------------
|
||||
//
|
||||
// If you find a bug or a security vulnerability please kindly inform us
|
||||
// about the problem immediately so that we can fix the security problem
|
||||
// to protect a lot of users around the world as soon as possible.
|
||||
//
|
||||
// Our e-mail address for security reports is:
|
||||
// softether-vpn-security [at] softether.org
|
||||
//
|
||||
// Please note that the above e-mail address is not a technical support
|
||||
// inquiry address. If you need technical assistance, please visit
|
||||
// http://www.softether.org/ and ask your question on the users forum.
|
||||
//
|
||||
// Thank you for your cooperation.
|
||||
|
||||
|
||||
// Wfp.h
|
||||
// Header File for WFP Callout Driver
|
||||
|
||||
#ifndef WFP_H
|
||||
#define WFP_H
|
||||
|
||||
// Identify string
|
||||
#define WFP_DEVICE_NAME L"\\Device\\PXWFP_DEVICE"
|
||||
#define WFP_DEVICE_NAME_WIN32 L"\\DosDevices\\PXWFP_DEVICE"
|
||||
#define WFP_DEVICE_FILE_NAME "\\\\.\\PXWFP_DEVICE"
|
||||
#define WFP_EVENT_NAME L"\\BaseNamedObjects\\PXWFP_EVENT"
|
||||
#define WFP_EVENT_NAME_WIN32 "Global\\PXWFP_EVENT"
|
||||
|
||||
// PXWFP Callout Driver
|
||||
// {4E6F16C5-C266-440a-9382-22E7B1AA4411}
|
||||
DEFINE_GUID(GUID_WFP_CALLOUT_DRIVER_V4,
|
||||
0x4e6f16c5, 0xc266, 0x440a, 0x93, 0x82, 0x22, 0xe7, 0xb1, 0xaa, 0x44, 0x11);
|
||||
// {CAE3EC1F-E2F9-4b07-B910-1467E223E55E}
|
||||
DEFINE_GUID(GUID_WFP_CALLOUT_DRIVER_V6,
|
||||
0xcae3ec1f, 0xe2f9, 0x4b07, 0xb9, 0x10, 0x14, 0x67, 0xe2, 0x23, 0xe5, 0x5e);
|
||||
|
||||
// PXWFP Filter for IPsec
|
||||
// {4FB80D9C-B3D3-433c-B707-9D6EDE3A9493}
|
||||
//DEFINE_GUID(GUID_WFP_FILTER,
|
||||
// 0x4fb80d9c, 0xb3d3, 0x433c, 0xb7, 0x7, 0x9d, 0x6e, 0xde, 0x3a, 0x94, 0x94);
|
||||
|
||||
// WFP local IP address
|
||||
typedef struct WFP_LOCAL_IP
|
||||
{
|
||||
UINT IpVersion;
|
||||
UINT Padding;
|
||||
union
|
||||
{
|
||||
UCHAR IPv4Address[4];
|
||||
UCHAR IPv6Address[16];
|
||||
} IpAddress;
|
||||
} WFP_LOCAL_IP;
|
||||
|
||||
|
||||
#endif // WFP_H
|
||||
|
||||
|
||||
|
||||
// Developed by SoftEther VPN Project at University of Tsukuba in Japan.
|
||||
// Department of Computer Science has dozens of overly-enthusiastic geeks.
|
||||
// Join us: http://www.tsukuba.ac.jp/english/admission/
|
63
src/Wfp/Wfp.rc
Normal file
63
src/Wfp/Wfp.rc
Normal file
@ -0,0 +1,63 @@
|
||||
// Microsoft Visual C++ generated resource script.
|
||||
//
|
||||
#include "resource1.h"
|
||||
|
||||
#define APSTUDIO_READONLY_SYMBOLS
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Generated from the TEXTINCLUDE 2 resource.
|
||||
//
|
||||
#include "afxres.h"
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#undef APSTUDIO_READONLY_SYMBOLS
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Japanese resources
|
||||
|
||||
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_JPN)
|
||||
#ifdef _WIN32
|
||||
LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT
|
||||
#pragma code_page(932)
|
||||
#endif //_WIN32
|
||||
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// TEXTINCLUDE
|
||||
//
|
||||
|
||||
1 TEXTINCLUDE
|
||||
BEGIN
|
||||
"resource1.h\0"
|
||||
END
|
||||
|
||||
2 TEXTINCLUDE
|
||||
BEGIN
|
||||
"#include ""afxres.h""\r\n"
|
||||
"\0"
|
||||
END
|
||||
|
||||
3 TEXTINCLUDE
|
||||
BEGIN
|
||||
"\r\n"
|
||||
"\0"
|
||||
END
|
||||
|
||||
#endif // APSTUDIO_INVOKED
|
||||
|
||||
#endif // Japanese resources
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
#ifndef APSTUDIO_INVOKED
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Generated from the TEXTINCLUDE 3 resource.
|
||||
//
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#endif // not APSTUDIO_INVOKED
|
||||
|
276
src/Wfp/Wfp.vcproj
Normal file
276
src/Wfp/Wfp.vcproj
Normal file
@ -0,0 +1,276 @@
|
||||
<?xml version="1.0" encoding="shift_jis"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="9.00"
|
||||
Name="Wfp"
|
||||
ProjectGUID="{717B8D7F-9C93-4713-9A23-8CE70A31FD39}"
|
||||
RootNamespace="Wfp"
|
||||
Keyword="Win32Proj"
|
||||
TargetFrameworkVersion="131072"
|
||||
>
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"
|
||||
/>
|
||||
<Platform
|
||||
Name="x64"
|
||||
/>
|
||||
</Platforms>
|
||||
<ToolFiles>
|
||||
</ToolFiles>
|
||||
<Configurations>
|
||||
<Configuration
|
||||
Name="Release|Win32"
|
||||
OutputDirectory="$(SolutionDir)bin"
|
||||
IntermediateDirectory="$(PlatformName)_$(ConfigurationName)"
|
||||
ConfigurationType="2"
|
||||
CharacterSet="2"
|
||||
WholeProgramOptimization="0"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="3"
|
||||
InlineFunctionExpansion="0"
|
||||
EnableIntrinsicFunctions="false"
|
||||
FavorSizeOrSpeed="0"
|
||||
AdditionalIncludeDirectories="$(SolutionDir)Mayaqua\win32_inc;C:\WINDDK\7600.16385.0\inc\ddk;C:\WinDDK\7600.16385.0\inc\api;C:\WinDDK\7600.16385.0\inc\crt;$(SolutionDir)"
|
||||
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;WFP_EXPORTS;VPN_SPEED"
|
||||
GeneratePreprocessedFile="0"
|
||||
KeepComments="false"
|
||||
StringPooling="false"
|
||||
ExceptionHandling="0"
|
||||
RuntimeLibrary="0"
|
||||
StructMemberAlignment="4"
|
||||
BufferSecurityCheck="false"
|
||||
EnableFunctionLevelLinking="false"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
DebugInformationFormat="3"
|
||||
CallingConvention="2"
|
||||
CompileAs="1"
|
||||
DisableSpecificWarnings="4996"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
CommandLine="$(SolutionDir)bin\BuildUtil.exe /CMD:GenerateVersionResource "$(TargetPath)" /OUT:"$(SolutionDir)tmp\VersionResources\$(ProjectName)_$(PlatformName).res""
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
IgnoreImportLibrary="true"
|
||||
AdditionalOptions="/driver /subsystem:native,6.00 /FULLBUILD /align:0x80 /osversion:6.00 /STACK:0x40000,0x1000 /MERGE:_PAGE=PAGE /MERGE:_TEXT=.text /NODEFAULTLIB /stub:C:\WINDDK\7600.16385.0\lib\wlh\stub512.com"
|
||||
AdditionalDependencies="wdm.lib ndis.lib ntoskrnl.lib fwpkclnt.lib "$(SolutionDir)tmp\VersionResources\$(ProjectName)_$(PlatformName).res""
|
||||
OutputFile="$(OutDir)\hamcore\not_signed\pxwfp_x86.sys"
|
||||
LinkIncremental="1"
|
||||
AdditionalLibraryDirectories="C:\WINDDK\7600.16385.0\lib\wlh\i386"
|
||||
GenerateManifest="false"
|
||||
IgnoreAllDefaultLibraries="true"
|
||||
GenerateDebugInformation="true"
|
||||
ProgramDatabaseFile="$(SolutionDir)DebugFiles\pdb\$(PlatformName)_$(ConfigurationName)\$(ProjectName).pdb"
|
||||
GenerateMapFile="true"
|
||||
MapFileName="$(SolutionDir)DebugFiles\map\$(PlatformName)_$(ConfigurationName)\$(ProjectName).map"
|
||||
SubSystem="0"
|
||||
OptimizeReferences="1"
|
||||
EnableCOMDATFolding="1"
|
||||
EntryPointSymbol="DriverEntry"
|
||||
BaseAddress="0x10000"
|
||||
RandomizedBaseAddress="0"
|
||||
FixedBaseAddress="1"
|
||||
DataExecutionPrevention="0"
|
||||
ImportLibrary="$(SolutionDir)tmp\lib\$(PlatformName)_$(ConfigurationName)\$(ProjectName).lib"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
EmbedManifest="false"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
CommandLine="$(SolutionDir)bin\BuildUtil.exe /CMD:SignCode "$(TargetPath)" /COMMENT:"VPN Software" /KERNEL:yes"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|x64"
|
||||
OutputDirectory="$(SolutionDir)bin"
|
||||
IntermediateDirectory="$(PlatformName)_$(ConfigurationName)"
|
||||
ConfigurationType="2"
|
||||
CharacterSet="2"
|
||||
WholeProgramOptimization="0"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
TargetEnvironment="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="3"
|
||||
InlineFunctionExpansion="0"
|
||||
EnableIntrinsicFunctions="false"
|
||||
FavorSizeOrSpeed="0"
|
||||
AdditionalIncludeDirectories="$(SolutionDir)Mayaqua\win32_inc;C:\WINDDK\7600.16385.0\inc\ddk;C:\WinDDK\7600.16385.0\inc\api;C:\WinDDK\7600.16385.0\inc\crt;$(SolutionDir)"
|
||||
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;WFP_EXPORTS;VPN_SPEED;CPU_64"
|
||||
StringPooling="false"
|
||||
ExceptionHandling="0"
|
||||
RuntimeLibrary="0"
|
||||
StructMemberAlignment="4"
|
||||
BufferSecurityCheck="false"
|
||||
EnableFunctionLevelLinking="false"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
DebugInformationFormat="3"
|
||||
CallingConvention="1"
|
||||
CompileAs="1"
|
||||
DisableSpecificWarnings="4996"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
CommandLine="$(SolutionDir)bin\BuildUtil.exe /CMD:GenerateVersionResource "$(TargetPath)" /OUT:"$(SolutionDir)tmp\VersionResources\$(ProjectName)_$(PlatformName).res""
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
IgnoreImportLibrary="true"
|
||||
AdditionalOptions="/driver /subsystem:native /FULLBUILD /align:0x80 /osversion:6.00 /STACK:0x40000,0x1000 /MERGE:_PAGE=PAGE /MERGE:_TEXT=.text /NODEFAULTLIB /stub:C:\WINDDK\7600.16385.0\lib\wlh\stub512.com"
|
||||
AdditionalDependencies="wdm.lib ndis.lib wdmsec.lib ntoskrnl.lib fwpkclnt.lib "$(SolutionDir)tmp\VersionResources\$(ProjectName)_$(PlatformName).res""
|
||||
OutputFile="$(OutDir)\hamcore\not_signed\pxwfp_x64.sys"
|
||||
LinkIncremental="1"
|
||||
AdditionalLibraryDirectories="C:\WINDDK\7600.16385.0\lib\wlh\amd64"
|
||||
GenerateManifest="false"
|
||||
IgnoreAllDefaultLibraries="true"
|
||||
GenerateDebugInformation="true"
|
||||
ProgramDatabaseFile="$(SolutionDir)DebugFiles\pdb\$(PlatformName)_$(ConfigurationName)\$(ProjectName).pdb"
|
||||
GenerateMapFile="true"
|
||||
MapFileName="$(SolutionDir)DebugFiles\map\$(PlatformName)_$(ConfigurationName)\$(ProjectName).map"
|
||||
SubSystem="0"
|
||||
OptimizeReferences="1"
|
||||
EnableCOMDATFolding="1"
|
||||
EntryPointSymbol="DriverEntry"
|
||||
BaseAddress="0x10000"
|
||||
RandomizedBaseAddress="0"
|
||||
FixedBaseAddress="1"
|
||||
DataExecutionPrevention="0"
|
||||
ImportLibrary="$(SolutionDir)tmp\lib\$(PlatformName)_$(ConfigurationName)\$(ProjectName).lib"
|
||||
TargetMachine="17"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
EmbedManifest="false"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
CommandLine="$(SolutionDir)bin\BuildUtil.exe /CMD:SignCode "$(TargetPath)" /COMMENT:"VPN Software" /KERNEL:yes"
|
||||
/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
<References>
|
||||
</References>
|
||||
<Files>
|
||||
<Filter
|
||||
Name="Source Files"
|
||||
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\Wfp.c"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Header Files"
|
||||
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
||||
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\resource1.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\Wfp.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\WfpInner.h"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Resource Files"
|
||||
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
|
||||
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\Wfp.rc"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
</Files>
|
||||
<Globals>
|
||||
</Globals>
|
||||
</VisualStudioProject>
|
315
src/Wfp/WfpInner.h
Normal file
315
src/Wfp/WfpInner.h
Normal file
@ -0,0 +1,315 @@
|
||||
// SoftEther VPN Source Code
|
||||
// Windows Filtering Platform Callout Driver for Capturing IPsec Packets on Windows Vista / 7 / Server 2008
|
||||
//
|
||||
// SoftEther VPN Server, Client and Bridge are free software under GPLv2.
|
||||
//
|
||||
// Copyright (c) 2012-2014 Daiyuu Nobori.
|
||||
// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan.
|
||||
// Copyright (c) 2012-2014 SoftEther Corporation.
|
||||
//
|
||||
// All Rights Reserved.
|
||||
//
|
||||
// http://www.softether.org/
|
||||
//
|
||||
// Author: Daiyuu Nobori
|
||||
// Comments: Tetsuo Sugiyama, Ph.D.
|
||||
//
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// version 2 as published by the Free Software Foundation.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License version 2
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
//
|
||||
// THE LICENSE AGREEMENT IS ATTACHED ON THE SOURCE-CODE PACKAGE
|
||||
// AS "LICENSE.TXT" FILE. READ THE TEXT FILE IN ADVANCE TO USE THE SOFTWARE.
|
||||
//
|
||||
//
|
||||
// THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN,
|
||||
// UNDER JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY,
|
||||
// MERGE, PUBLISH, DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS
|
||||
// SOFTWARE, THAT ANY JURIDICAL DISPUTES WHICH ARE CONCERNED TO THIS
|
||||
// SOFTWARE OR ITS CONTENTS, AGAINST US (SOFTETHER PROJECT, SOFTETHER
|
||||
// CORPORATION, DAIYUU NOBORI OR OTHER SUPPLIERS), OR ANY JURIDICAL
|
||||
// DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND OF USING, COPYING,
|
||||
// MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING, AND/OR
|
||||
// SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND
|
||||
// CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO
|
||||
// EXCLUSIVE JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO,
|
||||
// JAPAN. YOU MUST WAIVE ALL DEFENSES OF LACK OF PERSONAL JURISDICTION
|
||||
// AND FORUM NON CONVENIENS. PROCESS MAY BE SERVED ON EITHER PARTY IN
|
||||
// THE MANNER AUTHORIZED BY APPLICABLE LAW OR COURT RULE.
|
||||
//
|
||||
// USE ONLY IN JAPAN. DO NOT USE IT IN OTHER COUNTRIES. IMPORTING THIS
|
||||
// SOFTWARE INTO OTHER COUNTRIES IS AT YOUR OWN RISK. SOME COUNTRIES
|
||||
// PROHIBIT ENCRYPTED COMMUNICATIONS. USING THIS SOFTWARE IN OTHER
|
||||
// COUNTRIES MIGHT BE RESTRICTED.
|
||||
//
|
||||
//
|
||||
// DEAR SECURITY EXPERTS
|
||||
// ---------------------
|
||||
//
|
||||
// If you find a bug or a security vulnerability please kindly inform us
|
||||
// about the problem immediately so that we can fix the security problem
|
||||
// to protect a lot of users around the world as soon as possible.
|
||||
//
|
||||
// Our e-mail address for security reports is:
|
||||
// softether-vpn-security [at] softether.org
|
||||
//
|
||||
// Please note that the above e-mail address is not a technical support
|
||||
// inquiry address. If you need technical assistance, please visit
|
||||
// http://www.softether.org/ and ask your question on the users forum.
|
||||
//
|
||||
// Thank you for your cooperation.
|
||||
|
||||
|
||||
// WfpInner.h
|
||||
// Header File for WFP Callout Driver
|
||||
|
||||
#ifndef WFPINNER_H
|
||||
#define WFPINNER_H
|
||||
|
||||
// Win32 DDK related
|
||||
#ifndef CPU_64
|
||||
#define _X86_
|
||||
#define i386
|
||||
#else // CPU_64
|
||||
#define _AMD64_
|
||||
#define AMD64
|
||||
#define x64
|
||||
#endif // CPU_64
|
||||
|
||||
#define STD_CALL
|
||||
#define CONDITION_HANDLING 1
|
||||
#define NT_UP 1
|
||||
#define NT_INST 0
|
||||
#define _NT1X_ 100
|
||||
#define _WIN32_WINNT 0x0600
|
||||
#define WINNT 1
|
||||
#define WINVER 0x0600
|
||||
#define _WIN32_IE 0x0700
|
||||
#define WIN32_LEAN_AND_MEAN 1
|
||||
#define DEVL 1
|
||||
#define __BUILDMACHINE__ WinDDK
|
||||
#define FPO 0
|
||||
#define BINARY_COMPATIBLE 0
|
||||
#define NT
|
||||
#define NDIS60 1
|
||||
#define NDIS_SUPPORT_NDIS6 1
|
||||
#define NTDDI_VERSION 0x06000100
|
||||
|
||||
#define KMDF_MAJOR_VERSION_STRING 01
|
||||
#define KMDF_MINOR_VERSION_STRING 009
|
||||
|
||||
#include <ntddk.h>
|
||||
#include <fwpsk.h>
|
||||
#include <fwpmk.h>
|
||||
#include <ndis.h>
|
||||
#include <ws2ipdef.h>
|
||||
#include <in6addr.h>
|
||||
#include <ip2string.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#define INITGUID
|
||||
#include <guiddef.h>
|
||||
|
||||
#define TRUE 1
|
||||
#define FALSE 0
|
||||
typedef unsigned long bool;
|
||||
#define true 1
|
||||
#define false 0
|
||||
typedef unsigned long long UINT64;
|
||||
typedef signed long long INT64;
|
||||
typedef unsigned short WORD;
|
||||
typedef unsigned short USHORT;
|
||||
typedef signed short SHORT;
|
||||
typedef unsigned char BYTE;
|
||||
typedef unsigned char UCHAR;
|
||||
typedef signed char CHAR;
|
||||
typedef unsigned long DWORD;
|
||||
#define INFINITE 0xFFFFFFFF
|
||||
|
||||
#define LESS(a, max_value) ((a) < (max_value) ? (a) : (max_value))
|
||||
#define MORE(a, min_value) ((a) > (min_value) ? (a) : (min_value))
|
||||
#define INNER(a, b, c) (((b) <= (c) && (a) >= (b) && (a) <= (c)) || ((b) >= (c) && (a) >= (c) && (a) <= (b)))
|
||||
#define OUTER(a, b, c) (!INNER((a), (b), (c)))
|
||||
#define MAKESURE(a, b, c) (((b) <= (c)) ? (MORE(LESS((a), (c)), (b))) : (MORE(LESS((a), (b)), (c))))
|
||||
#define MIN(a, b) ((a) >= (b) ? (b) : (a))
|
||||
#define MAX(a, b) ((a) >= (b) ? (a) : (b))
|
||||
|
||||
// Error checking macro
|
||||
#define OK(val) (val == STATUS_SUCCESS)
|
||||
#define NG(val) (!OK(val))
|
||||
#define CRUSH_WHERE //Crush(0xaaaaaaaa, __LINE__, __LINE__, __LINE__)
|
||||
|
||||
// Constants
|
||||
#define MEMPOOL_TAG 'wpfx'
|
||||
#define WFP_MAX_LOCAL_IP_COUNT 4096
|
||||
|
||||
// Tag constant
|
||||
#define WFP_ESP_PACKET_TAG_1 0x19841117
|
||||
#define WFP_ESP_PACKET_TAG_2 0x1accafe1
|
||||
|
||||
// ESP protocol number
|
||||
#define WFP_ESP_RAW_PROTOCOL_ID 50
|
||||
#define WFP_ESP_RAW_PROTOCOL_ID_DST 52
|
||||
|
||||
// Event
|
||||
typedef struct EVENT
|
||||
{
|
||||
KEVENT *EventObj;
|
||||
HANDLE Handle;
|
||||
} EVENT;
|
||||
|
||||
// Spin lock
|
||||
typedef struct SPINLOCK
|
||||
{
|
||||
KSPIN_LOCK SpinLock;
|
||||
KIRQL OldIrql;
|
||||
} SPINLOCK;
|
||||
|
||||
// Instance data
|
||||
typedef struct WFP_CTX
|
||||
{
|
||||
DEVICE_OBJECT *DeviceObject;
|
||||
UNICODE_STRING DeviceName;
|
||||
UNICODE_STRING DeviceNameWin32;
|
||||
EVENT *Event;
|
||||
HANDLE hEngine;
|
||||
bool Halting;
|
||||
UINT CalloutIdIPv4;
|
||||
UINT CalloutIdIPv6;
|
||||
UINT CalloutObjIdIPv4;
|
||||
UINT CalloutObjIdIPv6;
|
||||
SPINLOCK *LocalIPListLock;
|
||||
UCHAR *LocalIPListData;
|
||||
UINT LocalIPListSize;
|
||||
HANDLE hInjectionIPv4, hInjectionIPv6;
|
||||
NDIS_HANDLE hNdis;
|
||||
} WFP_CTX;
|
||||
|
||||
#pragma pack(push, 1)
|
||||
|
||||
#define WFP_IP_PROTO_UDP 0x11 // UDP protocol
|
||||
|
||||
// IPv4 header
|
||||
typedef struct WFP_IPV4_HEADER
|
||||
{
|
||||
UCHAR VersionAndHeaderLength; // Version and header size
|
||||
UCHAR TypeOfService; // Service Type
|
||||
USHORT TotalLength; // Total size
|
||||
USHORT Identification; // Identifier
|
||||
UCHAR FlagsAndFlagmentOffset[2]; // The flag and fragment offset
|
||||
UCHAR TimeToLive; // TTL
|
||||
UCHAR Protocol; // Protocol
|
||||
USHORT Checksum; // Checksum
|
||||
UINT SrcIP; // Source IP address
|
||||
UINT DstIP; // Destination IP address
|
||||
} WFP_IPV4_HEADER;
|
||||
|
||||
// IPv6 header
|
||||
typedef struct WFP_IPV6_HEADER
|
||||
{
|
||||
UCHAR VersionAndTrafficClass1; // Version Number (4 bit) and Traffic Class 1 (4 bit)
|
||||
UCHAR TrafficClass2AndFlowLabel1; // Traffic Class 2 (4 bit) and Flow Label 1 (4 bit)
|
||||
UCHAR FlowLabel2; // Flow Label 2 (8 bit)
|
||||
UCHAR FlowLabel3; // Flow Label 3 (8 bit)
|
||||
USHORT PayloadLength; // Length of the payload (including extension header)
|
||||
UCHAR NextHeader; // The next header
|
||||
UCHAR HopLimit; // Hop limit
|
||||
UCHAR SrcAddress[16]; // Source address
|
||||
UCHAR DestAddress[16]; // Destination address
|
||||
} WFP_IPV6_HEADER;
|
||||
|
||||
// UDP header
|
||||
typedef struct WFP_UDP_HEADER
|
||||
{
|
||||
USHORT SrcPort; // Source port number
|
||||
USHORT DstPort; // Destination port number
|
||||
USHORT PacketLength; // Data length
|
||||
USHORT Checksum; // Checksum
|
||||
} WFP_UDP_HEADER;
|
||||
|
||||
// Context of injected packet
|
||||
typedef struct WFP_INJECTED_PACKET_CONTEXT
|
||||
{
|
||||
NET_BUFFER OriginalNetBufferData; // Data of the original NET_BUFFER
|
||||
NET_BUFFER *CurrentNetBuffer; // Pointer of the current NET_BUFFER
|
||||
NET_BUFFER_LIST *AllocatedNetBufferList; // Newly allocated NET_BUFFER_LIST
|
||||
MDL *AllocatedMdl; // MDL that newly allocated
|
||||
void *AllocatedMemory; // Newly allocated memory
|
||||
} WFP_INJECTED_PACKET_CONTEXT;
|
||||
|
||||
|
||||
#pragma pack(pop)
|
||||
|
||||
|
||||
// Function prototype
|
||||
NTSTATUS DriverEntry(DRIVER_OBJECT *driver_object, UNICODE_STRING *registry_path);
|
||||
void DriverUnload(DRIVER_OBJECT *driver_object);
|
||||
NTSTATUS DriverDispatch(DEVICE_OBJECT *device_object, IRP *irp);
|
||||
|
||||
void NTAPI CalloutClassify(const FWPS_INCOMING_VALUES0* inFixedValues,
|
||||
const FWPS_INCOMING_METADATA_VALUES0* inMetaValues,
|
||||
void* layerData,
|
||||
const FWPS_FILTER0* filter,
|
||||
UINT64 flowContext,
|
||||
FWPS_CLASSIFY_OUT0* classifyOut);
|
||||
NTSTATUS NTAPI CalloutNotify(FWPS_CALLOUT_NOTIFY_TYPE notifyType,
|
||||
const GUID* filterKey, FWPS_FILTER0* filter);
|
||||
bool IsIPAddressInList(struct WFP_LOCAL_IP *ip);
|
||||
bool IsIPv4AddressInList(void *addr);
|
||||
bool IsIPv6AddressInList(void *addr);
|
||||
void FreeInjectionCtx(WFP_INJECTED_PACKET_CONTEXT *ctx);
|
||||
UCHAR *ModificationOfIPsecESPPacket(UCHAR *ip_packet, UINT ip_packet_size, UINT ip_header_size, UINT *dst_size_ptr, bool isv6);
|
||||
USHORT IpChecksum(void *buf, UINT size);
|
||||
bool InjectPacket(HANDLE hInjection, NET_BUFFER_LIST *nbl, UCHAR *dst_data, UINT dst_size, const FWPS_INCOMING_VALUES0* inFixedValues, const FWPS_INCOMING_METADATA_VALUES0* inMetaValues);
|
||||
|
||||
void *Malloc(UINT size);
|
||||
void *ZeroMalloc(UINT size);
|
||||
void Free(void *p);
|
||||
void *ReAlloc(void *p, UINT size);
|
||||
void Copy(void *dst, void *src, UINT size);
|
||||
UINT GetMemSize(void *p);
|
||||
void Zero(void *p, UINT size);
|
||||
UINT Cmp(void *p1, void *p2, UINT size);
|
||||
SPINLOCK *NewSpinLock();
|
||||
void SpinLock(SPINLOCK *s);
|
||||
void SpinUnlock(SPINLOCK *s);
|
||||
void FreeSpinLock(SPINLOCK *s);
|
||||
EVENT *NewEvent(wchar_t *name);
|
||||
void FreeEvent(EVENT *e);
|
||||
void SetEvent(EVENT *e);
|
||||
void ResetEvent(EVENT *e);
|
||||
void Sleep(int milliSeconds);
|
||||
USHORT Swap16(USHORT value);
|
||||
UINT Swap32(UINT value);
|
||||
UINT64 Swap64(UINT64 value);
|
||||
USHORT Endian16(USHORT src);
|
||||
UINT Endian32(UINT src);
|
||||
UINT64 Endian64(UINT64 src);
|
||||
|
||||
void Crush();
|
||||
|
||||
|
||||
#endif // WFPINNER_H
|
||||
|
||||
|
||||
// Developed by SoftEther VPN Project at University of Tsukuba in Japan.
|
||||
// Department of Computer Science has dozens of overly-enthusiastic geeks.
|
||||
// Join us: http://www.tsukuba.ac.jp/english/admission/
|
84
src/Wfp/resource1.h
Normal file
84
src/Wfp/resource1.h
Normal file
@ -0,0 +1,84 @@
|
||||
//{{NO_DEPENDENCIES}}
|
||||
// Microsoft Visual C++ generated include file.
|
||||
// Used by Wfp.rc
|
||||
//
|
||||
// Comments: Tetsuo Sugiyama, Ph.D.
|
||||
//
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// version 2 as published by the Free Software Foundation.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License version 2
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
//
|
||||
// THE LICENSE AGREEMENT IS ATTACHED ON THE SOURCE-CODE PACKAGE
|
||||
// AS "LICENSE.TXT" FILE. READ THE TEXT FILE IN ADVANCE TO USE THE SOFTWARE.
|
||||
//
|
||||
//
|
||||
// THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN,
|
||||
// UNDER JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY,
|
||||
// MERGE, PUBLISH, DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS
|
||||
// SOFTWARE, THAT ANY JURIDICAL DISPUTES WHICH ARE CONCERNED TO THIS
|
||||
// SOFTWARE OR ITS CONTENTS, AGAINST US (SOFTETHER PROJECT, SOFTETHER
|
||||
// CORPORATION, DAIYUU NOBORI OR OTHER SUPPLIERS), OR ANY JURIDICAL
|
||||
// DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND OF USING, COPYING,
|
||||
// MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING, AND/OR
|
||||
// SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND
|
||||
// CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO
|
||||
// EXCLUSIVE JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO,
|
||||
// JAPAN. YOU MUST WAIVE ALL DEFENSES OF LACK OF PERSONAL JURISDICTION
|
||||
// AND FORUM NON CONVENIENS. PROCESS MAY BE SERVED ON EITHER PARTY IN
|
||||
// THE MANNER AUTHORIZED BY APPLICABLE LAW OR COURT RULE.
|
||||
//
|
||||
// USE ONLY IN JAPAN. DO NOT USE IT IN OTHER COUNTRIES. IMPORTING THIS
|
||||
// SOFTWARE INTO OTHER COUNTRIES IS AT YOUR OWN RISK. SOME COUNTRIES
|
||||
// PROHIBIT ENCRYPTED COMMUNICATIONS. USING THIS SOFTWARE IN OTHER
|
||||
// COUNTRIES MIGHT BE RESTRICTED.
|
||||
//
|
||||
//
|
||||
// DEAR SECURITY EXPERTS
|
||||
// ---------------------
|
||||
//
|
||||
// If you find a bug or a security vulnerability please kindly inform us
|
||||
// about the problem immediately so that we can fix the security problem
|
||||
// to protect a lot of users around the world as soon as possible.
|
||||
//
|
||||
// Our e-mail address for security reports is:
|
||||
// softether-vpn-security [at] softether.org
|
||||
//
|
||||
// Please note that the above e-mail address is not a technical support
|
||||
// inquiry address. If you need technical assistance, please visit
|
||||
// http://www.softether.org/ and ask your question on the users forum.
|
||||
//
|
||||
// Thank you for your cooperation.
|
||||
|
||||
|
||||
// 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
|
||||
|
||||
// Developed by SoftEther VPN Project at University of Tsukuba in Japan.
|
||||
// Department of Computer Science has dozens of overly-enthusiastic geeks.
|
||||
// Join us: http://www.tsukuba.ac.jp/english/admission/
|
Reference in New Issue
Block a user