Merged PR 3981967: Rename driver
Update the driver name to reflect the architecture discussions Related work items: #9115665
This commit is contained in:
Родитель
a636139432
Коммит
5848faf2c9
|
@ -1,65 +1,65 @@
|
|||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 16
|
||||
VisualStudioVersion = 16.0.30804.86
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EbpfDriver", "EbpfDriver\EbpfDriver.vcxproj", "{97E52ABB-2F1E-4AD2-AEFD-6EB7FDC0A41D}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EbpfTool", "EbpfTool\EbpfTool.vcxproj", "{87765170-A439-418F-8EF3-0458D22C5772}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|ARM = Debug|ARM
|
||||
Debug|ARM64 = Debug|ARM64
|
||||
Debug|x64 = Debug|x64
|
||||
Debug|x86 = Debug|x86
|
||||
Release|ARM = Release|ARM
|
||||
Release|ARM64 = Release|ARM64
|
||||
Release|x64 = Release|x64
|
||||
Release|x86 = Release|x86
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{97E52ABB-2F1E-4AD2-AEFD-6EB7FDC0A41D}.Debug|ARM.ActiveCfg = Debug|ARM
|
||||
{97E52ABB-2F1E-4AD2-AEFD-6EB7FDC0A41D}.Debug|ARM.Build.0 = Debug|ARM
|
||||
{97E52ABB-2F1E-4AD2-AEFD-6EB7FDC0A41D}.Debug|ARM.Deploy.0 = Debug|ARM
|
||||
{97E52ABB-2F1E-4AD2-AEFD-6EB7FDC0A41D}.Debug|ARM64.ActiveCfg = Debug|ARM64
|
||||
{97E52ABB-2F1E-4AD2-AEFD-6EB7FDC0A41D}.Debug|ARM64.Build.0 = Debug|ARM64
|
||||
{97E52ABB-2F1E-4AD2-AEFD-6EB7FDC0A41D}.Debug|ARM64.Deploy.0 = Debug|ARM64
|
||||
{97E52ABB-2F1E-4AD2-AEFD-6EB7FDC0A41D}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{97E52ABB-2F1E-4AD2-AEFD-6EB7FDC0A41D}.Debug|x64.Build.0 = Debug|x64
|
||||
{97E52ABB-2F1E-4AD2-AEFD-6EB7FDC0A41D}.Debug|x64.Deploy.0 = Debug|x64
|
||||
{97E52ABB-2F1E-4AD2-AEFD-6EB7FDC0A41D}.Debug|x86.ActiveCfg = Debug|Win32
|
||||
{97E52ABB-2F1E-4AD2-AEFD-6EB7FDC0A41D}.Debug|x86.Build.0 = Debug|Win32
|
||||
{97E52ABB-2F1E-4AD2-AEFD-6EB7FDC0A41D}.Debug|x86.Deploy.0 = Debug|Win32
|
||||
{97E52ABB-2F1E-4AD2-AEFD-6EB7FDC0A41D}.Release|ARM.ActiveCfg = Release|ARM
|
||||
{97E52ABB-2F1E-4AD2-AEFD-6EB7FDC0A41D}.Release|ARM.Build.0 = Release|ARM
|
||||
{97E52ABB-2F1E-4AD2-AEFD-6EB7FDC0A41D}.Release|ARM.Deploy.0 = Release|ARM
|
||||
{97E52ABB-2F1E-4AD2-AEFD-6EB7FDC0A41D}.Release|ARM64.ActiveCfg = Release|ARM64
|
||||
{97E52ABB-2F1E-4AD2-AEFD-6EB7FDC0A41D}.Release|ARM64.Build.0 = Release|ARM64
|
||||
{97E52ABB-2F1E-4AD2-AEFD-6EB7FDC0A41D}.Release|ARM64.Deploy.0 = Release|ARM64
|
||||
{97E52ABB-2F1E-4AD2-AEFD-6EB7FDC0A41D}.Release|x64.ActiveCfg = Release|x64
|
||||
{97E52ABB-2F1E-4AD2-AEFD-6EB7FDC0A41D}.Release|x64.Build.0 = Release|x64
|
||||
{97E52ABB-2F1E-4AD2-AEFD-6EB7FDC0A41D}.Release|x64.Deploy.0 = Release|x64
|
||||
{97E52ABB-2F1E-4AD2-AEFD-6EB7FDC0A41D}.Release|x86.ActiveCfg = Release|Win32
|
||||
{97E52ABB-2F1E-4AD2-AEFD-6EB7FDC0A41D}.Release|x86.Build.0 = Release|Win32
|
||||
{97E52ABB-2F1E-4AD2-AEFD-6EB7FDC0A41D}.Release|x86.Deploy.0 = Release|Win32
|
||||
{87765170-A439-418F-8EF3-0458D22C5772}.Debug|ARM.ActiveCfg = Debug|Win32
|
||||
{87765170-A439-418F-8EF3-0458D22C5772}.Debug|ARM64.ActiveCfg = Debug|Win32
|
||||
{87765170-A439-418F-8EF3-0458D22C5772}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{87765170-A439-418F-8EF3-0458D22C5772}.Debug|x64.Build.0 = Debug|x64
|
||||
{87765170-A439-418F-8EF3-0458D22C5772}.Debug|x86.ActiveCfg = Debug|Win32
|
||||
{87765170-A439-418F-8EF3-0458D22C5772}.Debug|x86.Build.0 = Debug|Win32
|
||||
{87765170-A439-418F-8EF3-0458D22C5772}.Release|ARM.ActiveCfg = Release|Win32
|
||||
{87765170-A439-418F-8EF3-0458D22C5772}.Release|ARM64.ActiveCfg = Release|Win32
|
||||
{87765170-A439-418F-8EF3-0458D22C5772}.Release|x64.ActiveCfg = Release|x64
|
||||
{87765170-A439-418F-8EF3-0458D22C5772}.Release|x64.Build.0 = Release|x64
|
||||
{87765170-A439-418F-8EF3-0458D22C5772}.Release|x86.ActiveCfg = Release|Win32
|
||||
{87765170-A439-418F-8EF3-0458D22C5772}.Release|x86.Build.0 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {E4D71C30-6BB5-42D0-AABF-A21D8D585B1A}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 16
|
||||
VisualStudioVersion = 16.0.30804.86
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EbpfCore", "EbpfCore\EbpfCore.vcxproj", "{97E52ABB-2F1E-4AD2-AEFD-6EB7FDC0A41D}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EbpfTool", "EbpfTool\EbpfTool.vcxproj", "{87765170-A439-418F-8EF3-0458D22C5772}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|ARM = Debug|ARM
|
||||
Debug|ARM64 = Debug|ARM64
|
||||
Debug|x64 = Debug|x64
|
||||
Debug|x86 = Debug|x86
|
||||
Release|ARM = Release|ARM
|
||||
Release|ARM64 = Release|ARM64
|
||||
Release|x64 = Release|x64
|
||||
Release|x86 = Release|x86
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{97E52ABB-2F1E-4AD2-AEFD-6EB7FDC0A41D}.Debug|ARM.ActiveCfg = Debug|ARM
|
||||
{97E52ABB-2F1E-4AD2-AEFD-6EB7FDC0A41D}.Debug|ARM.Build.0 = Debug|ARM
|
||||
{97E52ABB-2F1E-4AD2-AEFD-6EB7FDC0A41D}.Debug|ARM.Deploy.0 = Debug|ARM
|
||||
{97E52ABB-2F1E-4AD2-AEFD-6EB7FDC0A41D}.Debug|ARM64.ActiveCfg = Debug|ARM64
|
||||
{97E52ABB-2F1E-4AD2-AEFD-6EB7FDC0A41D}.Debug|ARM64.Build.0 = Debug|ARM64
|
||||
{97E52ABB-2F1E-4AD2-AEFD-6EB7FDC0A41D}.Debug|ARM64.Deploy.0 = Debug|ARM64
|
||||
{97E52ABB-2F1E-4AD2-AEFD-6EB7FDC0A41D}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{97E52ABB-2F1E-4AD2-AEFD-6EB7FDC0A41D}.Debug|x64.Build.0 = Debug|x64
|
||||
{97E52ABB-2F1E-4AD2-AEFD-6EB7FDC0A41D}.Debug|x64.Deploy.0 = Debug|x64
|
||||
{97E52ABB-2F1E-4AD2-AEFD-6EB7FDC0A41D}.Debug|x86.ActiveCfg = Debug|Win32
|
||||
{97E52ABB-2F1E-4AD2-AEFD-6EB7FDC0A41D}.Debug|x86.Build.0 = Debug|Win32
|
||||
{97E52ABB-2F1E-4AD2-AEFD-6EB7FDC0A41D}.Debug|x86.Deploy.0 = Debug|Win32
|
||||
{97E52ABB-2F1E-4AD2-AEFD-6EB7FDC0A41D}.Release|ARM.ActiveCfg = Release|ARM
|
||||
{97E52ABB-2F1E-4AD2-AEFD-6EB7FDC0A41D}.Release|ARM.Build.0 = Release|ARM
|
||||
{97E52ABB-2F1E-4AD2-AEFD-6EB7FDC0A41D}.Release|ARM.Deploy.0 = Release|ARM
|
||||
{97E52ABB-2F1E-4AD2-AEFD-6EB7FDC0A41D}.Release|ARM64.ActiveCfg = Release|ARM64
|
||||
{97E52ABB-2F1E-4AD2-AEFD-6EB7FDC0A41D}.Release|ARM64.Build.0 = Release|ARM64
|
||||
{97E52ABB-2F1E-4AD2-AEFD-6EB7FDC0A41D}.Release|ARM64.Deploy.0 = Release|ARM64
|
||||
{97E52ABB-2F1E-4AD2-AEFD-6EB7FDC0A41D}.Release|x64.ActiveCfg = Release|x64
|
||||
{97E52ABB-2F1E-4AD2-AEFD-6EB7FDC0A41D}.Release|x64.Build.0 = Release|x64
|
||||
{97E52ABB-2F1E-4AD2-AEFD-6EB7FDC0A41D}.Release|x64.Deploy.0 = Release|x64
|
||||
{97E52ABB-2F1E-4AD2-AEFD-6EB7FDC0A41D}.Release|x86.ActiveCfg = Release|Win32
|
||||
{97E52ABB-2F1E-4AD2-AEFD-6EB7FDC0A41D}.Release|x86.Build.0 = Release|Win32
|
||||
{97E52ABB-2F1E-4AD2-AEFD-6EB7FDC0A41D}.Release|x86.Deploy.0 = Release|Win32
|
||||
{87765170-A439-418F-8EF3-0458D22C5772}.Debug|ARM.ActiveCfg = Debug|Win32
|
||||
{87765170-A439-418F-8EF3-0458D22C5772}.Debug|ARM64.ActiveCfg = Debug|Win32
|
||||
{87765170-A439-418F-8EF3-0458D22C5772}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{87765170-A439-418F-8EF3-0458D22C5772}.Debug|x64.Build.0 = Debug|x64
|
||||
{87765170-A439-418F-8EF3-0458D22C5772}.Debug|x86.ActiveCfg = Debug|Win32
|
||||
{87765170-A439-418F-8EF3-0458D22C5772}.Debug|x86.Build.0 = Debug|Win32
|
||||
{87765170-A439-418F-8EF3-0458D22C5772}.Release|ARM.ActiveCfg = Release|Win32
|
||||
{87765170-A439-418F-8EF3-0458D22C5772}.Release|ARM64.ActiveCfg = Release|Win32
|
||||
{87765170-A439-418F-8EF3-0458D22C5772}.Release|x64.ActiveCfg = Release|x64
|
||||
{87765170-A439-418F-8EF3-0458D22C5772}.Release|x64.Build.0 = Release|x64
|
||||
{87765170-A439-418F-8EF3-0458D22C5772}.Release|x86.ActiveCfg = Release|Win32
|
||||
{87765170-A439-418F-8EF3-0458D22C5772}.Release|x86.Build.0 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {E4D71C30-6BB5-42D0-AABF-A21D8D585B1A}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
|
@ -1,87 +1,93 @@
|
|||
;
|
||||
; EbpfDriver.inf
|
||||
;
|
||||
|
||||
[Version]
|
||||
Signature="$WINDOWS NT$"
|
||||
Class=Sample ; TODO: edit Class
|
||||
ClassGuid={78A1C341-4539-11d3-B88D-00C04FAD5171} ; TODO: edit ClassGuid
|
||||
Provider=%ManufacturerName%
|
||||
CatalogFile=EbpfDriver.cat
|
||||
DriverVer= 1/11/2021,1.0.0.0
|
||||
PnpLockDown=1
|
||||
|
||||
[DestinationDirs]
|
||||
DefaultDestDir = 12
|
||||
EbpfDriver_Device_CoInstaller_CopyFiles = 11
|
||||
|
||||
; ================= Class section =====================
|
||||
|
||||
[ClassInstall32]
|
||||
Addreg=SampleClassReg
|
||||
|
||||
[SampleClassReg]
|
||||
HKR,,,0,%ClassName%
|
||||
HKR,,Icon,,-5
|
||||
|
||||
[SourceDisksNames]
|
||||
1 = %DiskName%,,,""
|
||||
|
||||
[SourceDisksFiles]
|
||||
EbpfDriver.sys = 1,,
|
||||
WdfCoInstaller$KMDFCOINSTALLERVERSION$.dll=1 ; make sure the number matches with SourceDisksNames
|
||||
|
||||
;*****************************************
|
||||
; Install Section
|
||||
;*****************************************
|
||||
|
||||
[Manufacturer]
|
||||
%ManufacturerName%=Standard,NT$ARCH$
|
||||
|
||||
[Standard.NT$ARCH$]
|
||||
%EbpfDriver.DeviceDesc%=EbpfDriver_Device, Root\EbpfDriver ; TODO: edit hw-id
|
||||
|
||||
[EbpfDriver_Device.NT]
|
||||
CopyFiles=Drivers_Dir
|
||||
|
||||
[Drivers_Dir]
|
||||
EbpfDriver.sys
|
||||
|
||||
;-------------- Service installation
|
||||
[EbpfDriver_Device.NT.Services]
|
||||
AddService = EbpfDriver,%SPSVCINST_ASSOCSERVICE%, EbpfDriver_Service_Inst
|
||||
|
||||
; -------------- EbpfDriver driver install sections
|
||||
[EbpfDriver_Service_Inst]
|
||||
DisplayName = %EbpfDriver.SVCDESC%
|
||||
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
|
||||
StartType = 3 ; SERVICE_DEMAND_START
|
||||
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
|
||||
ServiceBinary = %12%\EbpfDriver.sys
|
||||
|
||||
;
|
||||
;--- EbpfDriver_Device Coinstaller installation ------
|
||||
;
|
||||
|
||||
[EbpfDriver_Device.NT.CoInstallers]
|
||||
AddReg=EbpfDriver_Device_CoInstaller_AddReg
|
||||
CopyFiles=EbpfDriver_Device_CoInstaller_CopyFiles
|
||||
|
||||
[EbpfDriver_Device_CoInstaller_AddReg]
|
||||
HKR,,CoInstallers32,0x00010000, "WdfCoInstaller$KMDFCOINSTALLERVERSION$.dll,WdfCoInstaller"
|
||||
|
||||
[EbpfDriver_Device_CoInstaller_CopyFiles]
|
||||
WdfCoInstaller$KMDFCOINSTALLERVERSION$.dll
|
||||
|
||||
[EbpfDriver_Device.NT.Wdf]
|
||||
KmdfService = EbpfDriver, EbpfDriver_wdfsect
|
||||
[EbpfDriver_wdfsect]
|
||||
KmdfLibraryVersion = $KMDFVERSION$
|
||||
|
||||
[Strings]
|
||||
SPSVCINST_ASSOCSERVICE= 0x00000002
|
||||
ManufacturerName="EdgeOS CoreNet"
|
||||
ClassName="Samples" ; TODO: edit ClassName
|
||||
DiskName = "EbpfDriver Installation Disk"
|
||||
EbpfDriver.DeviceDesc = "EbpfDriver Device"
|
||||
EbpfDriver.SVCDESC = "EbpfDriver Service"
|
||||
;
|
||||
; EbpfCore.inf
|
||||
;
|
||||
|
||||
[Version]
|
||||
Signature="$WINDOWS NT$"
|
||||
Class=Sample ; TODO: edit Class
|
||||
ClassGuid={78A1C341-4539-11d3-B88D-00C04FAD5171} ; TODO: edit ClassGuid
|
||||
Provider=%ManufacturerName%
|
||||
CatalogFile=EbpfCore.cat
|
||||
DriverVer= 1/11/2021,1.0.0.0
|
||||
PnpLockDown=1
|
||||
|
||||
[DestinationDirs]
|
||||
DefaultDestDir = 12
|
||||
EbpfCore_Device_CoInstaller_CopyFiles = 11
|
||||
|
||||
; ================= Class section =====================
|
||||
|
||||
[ClassInstall32]
|
||||
Addreg=SampleClassReg
|
||||
|
||||
[SampleClassReg]
|
||||
HKR,,,0,%ClassName%
|
||||
HKR,,Icon,,-5
|
||||
|
||||
[SourceDisksNames]
|
||||
1 = %DiskName%,,,""
|
||||
|
||||
[SourceDisksFiles]
|
||||
EbpfCore.sys = 1,,
|
||||
WdfCoInstaller$KMDFCOINSTALLERVERSION$.dll=1 ; make sure the number matches with SourceDisksNames
|
||||
|
||||
;*****************************************
|
||||
; Install Section
|
||||
;*****************************************
|
||||
|
||||
[Manufacturer]
|
||||
%ManufacturerName%=Standard,NT$ARCH$
|
||||
|
||||
[Standard.NT$ARCH$]
|
||||
%EbpfCore.DeviceDesc%=EbpfCore_Device, Root\EbpfCore ; TODO: edit hw-id
|
||||
|
||||
[EbpfCore_Device.NT]
|
||||
CopyFiles=Drivers_Dir
|
||||
|
||||
[Drivers_Dir]
|
||||
EbpfCore.sys
|
||||
|
||||
[DefaultUninstall]
|
||||
DelFiles = Drivers_Dir
|
||||
|
||||
[DefaultUninstall.Services]
|
||||
DelService = EbpfCore,0x200 ; SPSVCINST_STOPSERVICE
|
||||
|
||||
;-------------- Service installation
|
||||
[EbpfCore_Device.NT.Services]
|
||||
AddService = EbpfCore,%SPSVCINST_ASSOCSERVICE%, EbpfCore_Service_Inst
|
||||
|
||||
; -------------- EbpfCore driver install sections
|
||||
[EbpfCore_Service_Inst]
|
||||
DisplayName = %EbpfCore.SVCDESC%
|
||||
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
|
||||
StartType = 3 ; SERVICE_DEMAND_START
|
||||
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
|
||||
ServiceBinary = %12%\EbpfCore.sys
|
||||
|
||||
;
|
||||
;--- EbpfCore_Device Coinstaller installation ------
|
||||
;
|
||||
|
||||
[EbpfCore_Device.NT.CoInstallers]
|
||||
AddReg=EbpfCore_Device_CoInstaller_AddReg
|
||||
CopyFiles=EbpfCore_Device_CoInstaller_CopyFiles
|
||||
|
||||
[EbpfCore_Device_CoInstaller_AddReg]
|
||||
HKR,,CoInstallers32,0x00010000, "WdfCoInstaller$KMDFCOINSTALLERVERSION$.dll,WdfCoInstaller"
|
||||
|
||||
[EbpfCore_Device_CoInstaller_CopyFiles]
|
||||
WdfCoInstaller$KMDFCOINSTALLERVERSION$.dll
|
||||
|
||||
[EbpfCore_Device.NT.Wdf]
|
||||
KmdfService = EbpfCore, EbpfCore_wdfsect
|
||||
[EbpfCore_wdfsect]
|
||||
KmdfLibraryVersion = $KMDFVERSION$
|
||||
|
||||
[Strings]
|
||||
SPSVCINST_ASSOCSERVICE= 0x00000002
|
||||
ManufacturerName="EdgeOS CoreNet"
|
||||
ClassName="Samples" ; TODO: edit ClassName
|
||||
DiskName = "EbpfCore Installation Disk"
|
||||
EbpfCore.DeviceDesc = "EbpfCore Device"
|
||||
EbpfCore.SVCDESC = "EbpfCore Service"
|
|
@ -1,238 +1,239 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|x64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|ARM">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>ARM</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|ARM">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>ARM</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|ARM64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>ARM64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|ARM64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>ARM64</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<ProjectGuid>{97E52ABB-2F1E-4AD2-AEFD-6EB7FDC0A41D}</ProjectGuid>
|
||||
<TemplateGuid>{1bc93793-694f-48fe-9372-81e2b05556fd}</TemplateGuid>
|
||||
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
|
||||
<MinimumVisualStudioVersion>12.0</MinimumVisualStudioVersion>
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform Condition="'$(Platform)' == ''">Win32</Platform>
|
||||
<RootNamespace>EbpfDriver</RootNamespace>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<TargetVersion>Windows10</TargetVersion>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
|
||||
<ConfigurationType>Driver</ConfigurationType>
|
||||
<DriverType>KMDF</DriverType>
|
||||
<DriverTargetPlatform>Universal</DriverTargetPlatform>
|
||||
<Driver_SpectreMitigation>false</Driver_SpectreMitigation>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<TargetVersion>Windows10</TargetVersion>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
|
||||
<ConfigurationType>Driver</ConfigurationType>
|
||||
<DriverType>KMDF</DriverType>
|
||||
<DriverTargetPlatform>Universal</DriverTargetPlatform>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<TargetVersion>Windows10</TargetVersion>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
|
||||
<ConfigurationType>Driver</ConfigurationType>
|
||||
<DriverType>KMDF</DriverType>
|
||||
<DriverTargetPlatform>Universal</DriverTargetPlatform>
|
||||
<Driver_SpectreMitigation>false</Driver_SpectreMitigation>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||
<TargetVersion>Windows10</TargetVersion>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
|
||||
<ConfigurationType>Driver</ConfigurationType>
|
||||
<DriverType>KMDF</DriverType>
|
||||
<DriverTargetPlatform>Universal</DriverTargetPlatform>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'" Label="Configuration">
|
||||
<TargetVersion>Windows10</TargetVersion>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
|
||||
<ConfigurationType>Driver</ConfigurationType>
|
||||
<DriverType>KMDF</DriverType>
|
||||
<DriverTargetPlatform>Universal</DriverTargetPlatform>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'" Label="Configuration">
|
||||
<TargetVersion>Windows10</TargetVersion>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
|
||||
<ConfigurationType>Driver</ConfigurationType>
|
||||
<DriverType>KMDF</DriverType>
|
||||
<DriverTargetPlatform>Universal</DriverTargetPlatform>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="Configuration">
|
||||
<TargetVersion>Windows10</TargetVersion>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
|
||||
<ConfigurationType>Driver</ConfigurationType>
|
||||
<DriverType>KMDF</DriverType>
|
||||
<DriverTargetPlatform>Universal</DriverTargetPlatform>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="Configuration">
|
||||
<TargetVersion>Windows10</TargetVersion>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
|
||||
<ConfigurationType>Driver</ConfigurationType>
|
||||
<DriverType>KMDF</DriverType>
|
||||
<DriverTargetPlatform>Universal</DriverTargetPlatform>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
|
||||
<DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
|
||||
<DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
|
||||
<DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
|
||||
<DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ResourceCompile>
|
||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>%(PreprocessorDefinitions);BINARY_COMPATIBLE=0;NT;UNICODE;_UNICODE;NDIS60;POOL_NX_OPTIN_AUTO</PreprocessorDefinitions>
|
||||
</ResourceCompile>
|
||||
<ClCompile>
|
||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>%(PreprocessorDefinitions);BINARY_COMPATIBLE=0;NT;UNICODE;_UNICODE;NDIS60;POOL_NX_OPTIN_AUTO</PreprocessorDefinitions>
|
||||
<ExceptionHandling>
|
||||
</ExceptionHandling>
|
||||
</ClCompile>
|
||||
<Midl>
|
||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>%(PreprocessorDefinitions);BINARY_COMPATIBLE=0;NT;UNICODE;_UNICODE;NDIS60;POOL_NX_OPTIN_AUTO</PreprocessorDefinitions>
|
||||
</Midl>
|
||||
<Link>
|
||||
<AdditionalDependencies>%(AdditionalDependencies);$(DDK_LIB_PATH)\ntoskrnl.lib;$(DDK_LIB_PATH)\ndis.lib;$(DDK_LIB_PATH)\wdmsec.lib;$(DDK_LIB_PATH)\fwpkclnt.lib;$(SDK_LIB_PATH)\uuid.lib</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<ResourceCompile>
|
||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>%(PreprocessorDefinitions);BINARY_COMPATIBLE=0;NT;UNICODE;_UNICODE;NDIS60;POOL_NX_OPTIN_AUTO</PreprocessorDefinitions>
|
||||
</ResourceCompile>
|
||||
<ClCompile>
|
||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>%(PreprocessorDefinitions);BINARY_COMPATIBLE=0;NT;UNICODE;_UNICODE;NDIS60;POOL_NX_OPTIN_AUTO</PreprocessorDefinitions>
|
||||
<ExceptionHandling>
|
||||
</ExceptionHandling>
|
||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||
</ClCompile>
|
||||
<Midl>
|
||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>%(PreprocessorDefinitions);BINARY_COMPATIBLE=0;NT;UNICODE;_UNICODE;NDIS60;POOL_NX_OPTIN_AUTO</PreprocessorDefinitions>
|
||||
</Midl>
|
||||
<Link>
|
||||
<AdditionalDependencies>%(AdditionalDependencies);$(DDK_LIB_PATH)\ntoskrnl.lib;$(DDK_LIB_PATH)\ndis.lib;$(DDK_LIB_PATH)\wdmsec.lib;$(DDK_LIB_PATH)\fwpkclnt.lib;$(SDK_LIB_PATH)\uuid.lib</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ResourceCompile>
|
||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>%(PreprocessorDefinitions);BINARY_COMPATIBLE=0;NT;UNICODE;_UNICODE;NDIS60;POOL_NX_OPTIN_AUTO</PreprocessorDefinitions>
|
||||
</ResourceCompile>
|
||||
<ClCompile>
|
||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>%(PreprocessorDefinitions);BINARY_COMPATIBLE=0;NT;UNICODE;_UNICODE;NDIS60;POOL_NX_OPTIN_AUTO</PreprocessorDefinitions>
|
||||
<ExceptionHandling>
|
||||
</ExceptionHandling>
|
||||
</ClCompile>
|
||||
<Midl>
|
||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>%(PreprocessorDefinitions);BINARY_COMPATIBLE=0;NT;UNICODE;_UNICODE;NDIS60;POOL_NX_OPTIN_AUTO</PreprocessorDefinitions>
|
||||
</Midl>
|
||||
<Link>
|
||||
<AdditionalDependencies>%(AdditionalDependencies);$(DDK_LIB_PATH)\ntoskrnl.lib;$(DDK_LIB_PATH)\ndis.lib;$(DDK_LIB_PATH)\wdmsec.lib;$(DDK_LIB_PATH)\fwpkclnt.lib;$(SDK_LIB_PATH)\uuid.lib</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ResourceCompile>
|
||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>%(PreprocessorDefinitions);BINARY_COMPATIBLE=0;NT;UNICODE;_UNICODE;NDIS60;POOL_NX_OPTIN_AUTO</PreprocessorDefinitions>
|
||||
</ResourceCompile>
|
||||
<ClCompile>
|
||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>%(PreprocessorDefinitions);BINARY_COMPATIBLE=0;NT;UNICODE;_UNICODE;NDIS60;POOL_NX_OPTIN_AUTO</PreprocessorDefinitions>
|
||||
<ExceptionHandling>
|
||||
</ExceptionHandling>
|
||||
</ClCompile>
|
||||
<Midl>
|
||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>%(PreprocessorDefinitions);BINARY_COMPATIBLE=0;NT;UNICODE;_UNICODE;NDIS60;POOL_NX_OPTIN_AUTO</PreprocessorDefinitions>
|
||||
</Midl>
|
||||
<Link>
|
||||
<AdditionalDependencies>%(AdditionalDependencies);$(DDK_LIB_PATH)\ntoskrnl.lib;$(DDK_LIB_PATH)\ndis.lib;$(DDK_LIB_PATH)\wdmsec.lib;$(DDK_LIB_PATH)\fwpkclnt.lib;$(SDK_LIB_PATH)\uuid.lib</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="ebpf_drv.c" />
|
||||
<ClCompile Include="ebpf_l2_hook.c" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Inf Include="EbpfDriver.inf" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<FilesToPackage Include="$(TargetPath)" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="ebpf_l2_hook.h" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|x64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|ARM">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>ARM</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|ARM">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>ARM</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|ARM64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>ARM64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|ARM64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>ARM64</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<ProjectGuid>{97E52ABB-2F1E-4AD2-AEFD-6EB7FDC0A41D}</ProjectGuid>
|
||||
<TemplateGuid>{1bc93793-694f-48fe-9372-81e2b05556fd}</TemplateGuid>
|
||||
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
|
||||
<MinimumVisualStudioVersion>12.0</MinimumVisualStudioVersion>
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform Condition="'$(Platform)' == ''">Win32</Platform>
|
||||
<RootNamespace>EbpfDriver</RootNamespace>
|
||||
<ProjectName>EbpfCore</ProjectName>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<TargetVersion>Windows10</TargetVersion>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
|
||||
<ConfigurationType>Driver</ConfigurationType>
|
||||
<DriverType>KMDF</DriverType>
|
||||
<DriverTargetPlatform>Universal</DriverTargetPlatform>
|
||||
<Driver_SpectreMitigation>false</Driver_SpectreMitigation>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<TargetVersion>Windows10</TargetVersion>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
|
||||
<ConfigurationType>Driver</ConfigurationType>
|
||||
<DriverType>KMDF</DriverType>
|
||||
<DriverTargetPlatform>Universal</DriverTargetPlatform>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<TargetVersion>Windows10</TargetVersion>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
|
||||
<ConfigurationType>Driver</ConfigurationType>
|
||||
<DriverType>KMDF</DriverType>
|
||||
<DriverTargetPlatform>Universal</DriverTargetPlatform>
|
||||
<Driver_SpectreMitigation>false</Driver_SpectreMitigation>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||
<TargetVersion>Windows10</TargetVersion>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
|
||||
<ConfigurationType>Driver</ConfigurationType>
|
||||
<DriverType>KMDF</DriverType>
|
||||
<DriverTargetPlatform>Universal</DriverTargetPlatform>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'" Label="Configuration">
|
||||
<TargetVersion>Windows10</TargetVersion>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
|
||||
<ConfigurationType>Driver</ConfigurationType>
|
||||
<DriverType>KMDF</DriverType>
|
||||
<DriverTargetPlatform>Universal</DriverTargetPlatform>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'" Label="Configuration">
|
||||
<TargetVersion>Windows10</TargetVersion>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
|
||||
<ConfigurationType>Driver</ConfigurationType>
|
||||
<DriverType>KMDF</DriverType>
|
||||
<DriverTargetPlatform>Universal</DriverTargetPlatform>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="Configuration">
|
||||
<TargetVersion>Windows10</TargetVersion>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
|
||||
<ConfigurationType>Driver</ConfigurationType>
|
||||
<DriverType>KMDF</DriverType>
|
||||
<DriverTargetPlatform>Universal</DriverTargetPlatform>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="Configuration">
|
||||
<TargetVersion>Windows10</TargetVersion>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
|
||||
<ConfigurationType>Driver</ConfigurationType>
|
||||
<DriverType>KMDF</DriverType>
|
||||
<DriverTargetPlatform>Universal</DriverTargetPlatform>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
|
||||
<DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
|
||||
<DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
|
||||
<DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
|
||||
<DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ResourceCompile>
|
||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>%(PreprocessorDefinitions);BINARY_COMPATIBLE=0;NT;UNICODE;_UNICODE;NDIS60;POOL_NX_OPTIN_AUTO</PreprocessorDefinitions>
|
||||
</ResourceCompile>
|
||||
<ClCompile>
|
||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>%(PreprocessorDefinitions);BINARY_COMPATIBLE=0;NT;UNICODE;_UNICODE;NDIS60;POOL_NX_OPTIN_AUTO</PreprocessorDefinitions>
|
||||
<ExceptionHandling>
|
||||
</ExceptionHandling>
|
||||
</ClCompile>
|
||||
<Midl>
|
||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>%(PreprocessorDefinitions);BINARY_COMPATIBLE=0;NT;UNICODE;_UNICODE;NDIS60;POOL_NX_OPTIN_AUTO</PreprocessorDefinitions>
|
||||
</Midl>
|
||||
<Link>
|
||||
<AdditionalDependencies>%(AdditionalDependencies);$(DDK_LIB_PATH)\ntoskrnl.lib;$(DDK_LIB_PATH)\ndis.lib;$(DDK_LIB_PATH)\wdmsec.lib;$(DDK_LIB_PATH)\fwpkclnt.lib;$(SDK_LIB_PATH)\uuid.lib</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<ResourceCompile>
|
||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>%(PreprocessorDefinitions);BINARY_COMPATIBLE=0;NT;UNICODE;_UNICODE;NDIS60;POOL_NX_OPTIN_AUTO</PreprocessorDefinitions>
|
||||
</ResourceCompile>
|
||||
<ClCompile>
|
||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>%(PreprocessorDefinitions);BINARY_COMPATIBLE=0;NT;UNICODE;_UNICODE;NDIS60;POOL_NX_OPTIN_AUTO</PreprocessorDefinitions>
|
||||
<ExceptionHandling>
|
||||
</ExceptionHandling>
|
||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||
</ClCompile>
|
||||
<Midl>
|
||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>%(PreprocessorDefinitions);BINARY_COMPATIBLE=0;NT;UNICODE;_UNICODE;NDIS60;POOL_NX_OPTIN_AUTO</PreprocessorDefinitions>
|
||||
</Midl>
|
||||
<Link>
|
||||
<AdditionalDependencies>%(AdditionalDependencies);$(DDK_LIB_PATH)\ntoskrnl.lib;$(DDK_LIB_PATH)\ndis.lib;$(DDK_LIB_PATH)\wdmsec.lib;$(DDK_LIB_PATH)\fwpkclnt.lib;$(SDK_LIB_PATH)\uuid.lib</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ResourceCompile>
|
||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>%(PreprocessorDefinitions);BINARY_COMPATIBLE=0;NT;UNICODE;_UNICODE;NDIS60;POOL_NX_OPTIN_AUTO</PreprocessorDefinitions>
|
||||
</ResourceCompile>
|
||||
<ClCompile>
|
||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>%(PreprocessorDefinitions);BINARY_COMPATIBLE=0;NT;UNICODE;_UNICODE;NDIS60;POOL_NX_OPTIN_AUTO</PreprocessorDefinitions>
|
||||
<ExceptionHandling>
|
||||
</ExceptionHandling>
|
||||
</ClCompile>
|
||||
<Midl>
|
||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>%(PreprocessorDefinitions);BINARY_COMPATIBLE=0;NT;UNICODE;_UNICODE;NDIS60;POOL_NX_OPTIN_AUTO</PreprocessorDefinitions>
|
||||
</Midl>
|
||||
<Link>
|
||||
<AdditionalDependencies>%(AdditionalDependencies);$(DDK_LIB_PATH)\ntoskrnl.lib;$(DDK_LIB_PATH)\ndis.lib;$(DDK_LIB_PATH)\wdmsec.lib;$(DDK_LIB_PATH)\fwpkclnt.lib;$(SDK_LIB_PATH)\uuid.lib</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ResourceCompile>
|
||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>%(PreprocessorDefinitions);BINARY_COMPATIBLE=0;NT;UNICODE;_UNICODE;NDIS60;POOL_NX_OPTIN_AUTO</PreprocessorDefinitions>
|
||||
</ResourceCompile>
|
||||
<ClCompile>
|
||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>%(PreprocessorDefinitions);BINARY_COMPATIBLE=0;NT;UNICODE;_UNICODE;NDIS60;POOL_NX_OPTIN_AUTO</PreprocessorDefinitions>
|
||||
<ExceptionHandling>
|
||||
</ExceptionHandling>
|
||||
</ClCompile>
|
||||
<Midl>
|
||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>%(PreprocessorDefinitions);BINARY_COMPATIBLE=0;NT;UNICODE;_UNICODE;NDIS60;POOL_NX_OPTIN_AUTO</PreprocessorDefinitions>
|
||||
</Midl>
|
||||
<Link>
|
||||
<AdditionalDependencies>%(AdditionalDependencies);$(DDK_LIB_PATH)\ntoskrnl.lib;$(DDK_LIB_PATH)\ndis.lib;$(DDK_LIB_PATH)\wdmsec.lib;$(DDK_LIB_PATH)\fwpkclnt.lib;$(SDK_LIB_PATH)\uuid.lib</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="ebpf_drv.c" />
|
||||
<ClCompile Include="ebpf_l2_hook.c" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Inf Include="EbpfCore.inf" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<FilesToPackage Include="$(TargetPath)" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="ebpf_l2_hook.h" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
|
@ -1,39 +1,39 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup>
|
||||
<Filter Include="Source Files">
|
||||
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Header Files">
|
||||
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Resource Files">
|
||||
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
|
||||
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Driver Files">
|
||||
<UniqueIdentifier>{8E41214B-6785-4CFE-B992-037D68949A14}</UniqueIdentifier>
|
||||
<Extensions>inf;inv;inx;mof;mc;</Extensions>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Inf Include="EbpfDriver.inf">
|
||||
<Filter>Driver Files</Filter>
|
||||
</Inf>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="ebpf_drv.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="ebpf_l2_hook.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="ebpf_l2_hook.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup>
|
||||
<Filter Include="Source Files">
|
||||
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Header Files">
|
||||
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Resource Files">
|
||||
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
|
||||
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Driver Files">
|
||||
<UniqueIdentifier>{8E41214B-6785-4CFE-B992-037D68949A14}</UniqueIdentifier>
|
||||
<Extensions>inf;inv;inx;mof;mc;</Extensions>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="ebpf_drv.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="ebpf_l2_hook.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="ebpf_l2_hook.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Inf Include="EbpfCore.inf">
|
||||
<Filter>Driver Files</Filter>
|
||||
</Inf>
|
||||
</ItemGroup>
|
||||
</Project>
|
|
@ -1,321 +1,321 @@
|
|||
/*++
|
||||
|
||||
Copyright (c) Microsoft Corporation. All rights reserved
|
||||
|
||||
Abstract:
|
||||
WDF based driver that does the following:
|
||||
1. Registers as a WFP L2 Callout
|
||||
2. Opens a IOCTL surface
|
||||
|
||||
Environment:
|
||||
|
||||
Kernel mode
|
||||
|
||||
--*/
|
||||
|
||||
#include <ntddk.h>
|
||||
#include <wdf.h>
|
||||
|
||||
#pragma warning(push)
|
||||
#pragma warning(disable:4201) // unnamed struct/union
|
||||
|
||||
#include <fwpsk.h>
|
||||
|
||||
#pragma warning(pop)
|
||||
|
||||
#include <fwpmk.h>
|
||||
|
||||
#include "ebpf_l2_hook.h"
|
||||
|
||||
|
||||
// Driver global variables
|
||||
|
||||
DEVICE_OBJECT* gWdmDevice;
|
||||
|
||||
BOOLEAN gDriverUnloading = FALSE;
|
||||
|
||||
DRIVER_INITIALIZE DriverEntry;
|
||||
EVT_WDF_DRIVER_UNLOAD EvtDriverUnload;
|
||||
|
||||
//
|
||||
// Constants
|
||||
//
|
||||
PCWSTR EbpfDeviceName = L"\\Device\\EbpfIoDevice";
|
||||
PCWSTR EbpfSymbolicDeviceName = L"\\GLOBAL??\\EbpfIoDevice";
|
||||
|
||||
#ifndef CTL_CODE
|
||||
#define CTL_CODE( DeviceType, Function, Method, Access ) ( \
|
||||
((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method) \
|
||||
)
|
||||
#endif
|
||||
// Device type
|
||||
#define EBPF_IOCTL_TYPE FILE_DEVICE_NETWORK
|
||||
|
||||
// Function codes from 0x800 to 0xFFF are for customer use.
|
||||
#define IOCTL_EBPFCTL_METHOD_BUFFERED \
|
||||
CTL_CODE( EBPF_IOCTL_TYPE, 0x900, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
||||
|
||||
//
|
||||
// Pre-Declarations
|
||||
//
|
||||
VOID
|
||||
EbpfCoreEvtIoDeviceControl(
|
||||
_In_ WDFQUEUE queue,
|
||||
_In_ WDFREQUEST request,
|
||||
_In_ size_t outputBufferLength,
|
||||
_In_ size_t inputBufferLength,
|
||||
_In_ ULONG ioControlCode
|
||||
);
|
||||
|
||||
_Function_class_(EVT_WDF_DRIVER_UNLOAD)
|
||||
_IRQL_requires_same_
|
||||
_IRQL_requires_max_(PASSIVE_LEVEL)
|
||||
void
|
||||
EvtDriverUnload(
|
||||
_In_ WDFDRIVER driverObject
|
||||
)
|
||||
{
|
||||
UNREFERENCED_PARAMETER(driverObject);
|
||||
|
||||
gDriverUnloading = TRUE;
|
||||
|
||||
EbpfHookUnregisterCallouts();
|
||||
}
|
||||
|
||||
//
|
||||
// Create a basic WDF driver, set up the device object
|
||||
// for a callout driver and setup the ioctl surface
|
||||
//
|
||||
NTSTATUS
|
||||
EbpfCoreInitDriverObjects(
|
||||
_Inout_ DRIVER_OBJECT* driverObject,
|
||||
_In_ const UNICODE_STRING* registryPath,
|
||||
_Out_ WDFDRIVER* pDriver,
|
||||
_Out_ WDFDEVICE* pDevice
|
||||
)
|
||||
{
|
||||
NTSTATUS status;
|
||||
WDF_DRIVER_CONFIG config;
|
||||
PWDFDEVICE_INIT pInit = NULL;
|
||||
WDF_IO_QUEUE_CONFIG ioQueueConfig;
|
||||
UNICODE_STRING ebpfDeviceName;
|
||||
UNICODE_STRING ebpfSymDeviceName;
|
||||
BOOLEAN deviceCreated = FALSE;
|
||||
|
||||
WDF_DRIVER_CONFIG_INIT(
|
||||
&config,
|
||||
WDF_NO_EVENT_CALLBACK
|
||||
);
|
||||
|
||||
config.DriverInitFlags |= WdfDriverInitNonPnpDriver;
|
||||
config.EvtDriverUnload = EvtDriverUnload;
|
||||
|
||||
status = WdfDriverCreate(
|
||||
driverObject,
|
||||
registryPath,
|
||||
WDF_NO_OBJECT_ATTRIBUTES,
|
||||
&config,
|
||||
pDriver
|
||||
);
|
||||
|
||||
if (!NT_SUCCESS(status))
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
DbgBreakPoint();
|
||||
pInit = WdfControlDeviceInitAllocate(
|
||||
*pDriver,
|
||||
&SDDL_DEVOBJ_SYS_ALL_ADM_ALL // only kernel/system and admins
|
||||
);
|
||||
if (!pInit)
|
||||
{
|
||||
status = STATUS_INSUFFICIENT_RESOURCES;
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
WdfDeviceInitSetDeviceType(
|
||||
pInit,
|
||||
FILE_DEVICE_NETWORK
|
||||
);
|
||||
|
||||
WdfDeviceInitSetCharacteristics(
|
||||
pInit,
|
||||
FILE_DEVICE_SECURE_OPEN,
|
||||
FALSE
|
||||
);
|
||||
|
||||
WdfDeviceInitSetCharacteristics(
|
||||
pInit,
|
||||
FILE_AUTOGENERATED_DEVICE_NAME,
|
||||
TRUE
|
||||
);
|
||||
|
||||
RtlInitUnicodeString(&ebpfDeviceName, EbpfDeviceName);
|
||||
WdfDeviceInitAssignName(
|
||||
pInit,
|
||||
&ebpfDeviceName);
|
||||
|
||||
status = WdfDeviceCreate(
|
||||
&pInit,
|
||||
WDF_NO_OBJECT_ATTRIBUTES,
|
||||
pDevice
|
||||
);
|
||||
|
||||
if (!NT_SUCCESS(status))
|
||||
{
|
||||
// do not free if any other call
|
||||
// after WdfDeviceCreate fails.
|
||||
WdfDeviceInitFree(pInit);
|
||||
pInit = NULL;
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
deviceCreated = TRUE;
|
||||
|
||||
// create symbolic link for control object for um
|
||||
RtlInitUnicodeString(&ebpfSymDeviceName, EbpfSymbolicDeviceName);
|
||||
status = WdfDeviceCreateSymbolicLink(
|
||||
*pDevice,
|
||||
&ebpfSymDeviceName);
|
||||
|
||||
if (!NT_SUCCESS(status))
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
// parallel default queue
|
||||
WDF_IO_QUEUE_CONFIG_INIT_DEFAULT_QUEUE(&ioQueueConfig,
|
||||
WdfIoQueueDispatchParallel);
|
||||
|
||||
ioQueueConfig.EvtIoDeviceControl = EbpfCoreEvtIoDeviceControl;
|
||||
|
||||
status = WdfIoQueueCreate(
|
||||
*pDevice,
|
||||
&ioQueueConfig,
|
||||
WDF_NO_OBJECT_ATTRIBUTES,
|
||||
WDF_NO_HANDLE // pointer to default queue
|
||||
);
|
||||
if (!NT_SUCCESS(status))
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
WdfControlFinishInitializing(*pDevice);
|
||||
|
||||
Exit:
|
||||
if (!NT_SUCCESS(status))
|
||||
{
|
||||
if (deviceCreated && pDevice != NULL)
|
||||
{
|
||||
//
|
||||
// Release the reference on the newly created object, since
|
||||
// we couldn't initialize it.
|
||||
//
|
||||
WdfObjectDelete(*pDevice);
|
||||
}
|
||||
}
|
||||
return status;
|
||||
}
|
||||
|
||||
VOID
|
||||
EbpfCoreEvtIoDeviceControl(
|
||||
_In_ WDFQUEUE queue,
|
||||
_In_ WDFREQUEST request,
|
||||
_In_ size_t outputBufferLength,
|
||||
_In_ size_t inputBufferLength,
|
||||
_In_ ULONG ioControlCode
|
||||
)
|
||||
{
|
||||
|
||||
NTSTATUS status = STATUS_SUCCESS;
|
||||
WDFDEVICE device;
|
||||
void* inputBuffer = NULL;
|
||||
size_t actualLength;
|
||||
char* inputValue = NULL;
|
||||
|
||||
UNREFERENCED_PARAMETER(outputBufferLength);
|
||||
UNREFERENCED_PARAMETER(inputBufferLength);
|
||||
|
||||
device = WdfIoQueueGetDevice(queue);
|
||||
|
||||
switch(ioControlCode)
|
||||
{
|
||||
case IOCTL_EBPFCTL_METHOD_BUFFERED:
|
||||
// Verify that length of the input buffer supplied to the request object
|
||||
// is not zero
|
||||
if(inputBufferLength != 0)
|
||||
{
|
||||
// Retrieve the input buffer associated with the request object
|
||||
status = WdfRequestRetrieveInputBuffer(
|
||||
request, // Request object
|
||||
inputBufferLength, // Length of input buffer
|
||||
&inputBuffer, // Pointer to buffer
|
||||
&actualLength // Length of buffer
|
||||
);
|
||||
|
||||
if(NT_SUCCESS(status))
|
||||
{
|
||||
if(inputBuffer != NULL)
|
||||
{
|
||||
inputValue = (char *)inputBuffer;
|
||||
}
|
||||
}
|
||||
else{
|
||||
status = STATUS_UNSUCCESSFUL;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
WdfRequestComplete(request, status);
|
||||
return;
|
||||
}
|
||||
|
||||
NTSTATUS
|
||||
DriverEntry(
|
||||
_In_ DRIVER_OBJECT* driverObject,
|
||||
_In_ UNICODE_STRING* registryPath
|
||||
)
|
||||
{
|
||||
NTSTATUS status;
|
||||
WDFDRIVER driver;
|
||||
WDFDEVICE device;
|
||||
|
||||
// Request NX Non-Paged Pool when available
|
||||
ExInitializeDriverRuntime(DrvRtPoolNxOptIn);
|
||||
|
||||
KdPrintEx((DPFLTR_IHVDRIVER_ID, DPFLTR_INFO_LEVEL, "EbpfCore: DriverEntry\n"));
|
||||
|
||||
status = EbpfCoreInitDriverObjects(
|
||||
driverObject,
|
||||
registryPath,
|
||||
&driver,
|
||||
&device
|
||||
);
|
||||
|
||||
if (!NT_SUCCESS(status))
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
gWdmDevice = WdfDeviceWdmGetDeviceObject(device);
|
||||
|
||||
status = EbpfHookRegisterCallouts(gWdmDevice);
|
||||
|
||||
if (!NT_SUCCESS(status))
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
Exit:
|
||||
|
||||
if (!NT_SUCCESS(status))
|
||||
{
|
||||
EbpfHookUnregisterCallouts();
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
/*++
|
||||
|
||||
Copyright (c) Microsoft Corporation. All rights reserved
|
||||
|
||||
Abstract:
|
||||
WDF based driver that does the following:
|
||||
1. Registers as a WFP L2 Callout
|
||||
2. Opens a IOCTL surface
|
||||
|
||||
Environment:
|
||||
|
||||
Kernel mode
|
||||
|
||||
--*/
|
||||
|
||||
#include <ntddk.h>
|
||||
#include <wdf.h>
|
||||
|
||||
#pragma warning(push)
|
||||
#pragma warning(disable:4201) // unnamed struct/union
|
||||
|
||||
#include <fwpsk.h>
|
||||
|
||||
#pragma warning(pop)
|
||||
|
||||
#include <fwpmk.h>
|
||||
|
||||
#include "ebpf_l2_hook.h"
|
||||
|
||||
|
||||
// Driver global variables
|
||||
|
||||
DEVICE_OBJECT* gWdmDevice;
|
||||
|
||||
BOOLEAN gDriverUnloading = FALSE;
|
||||
|
||||
DRIVER_INITIALIZE DriverEntry;
|
||||
EVT_WDF_DRIVER_UNLOAD EvtDriverUnload;
|
||||
|
||||
//
|
||||
// Constants
|
||||
//
|
||||
PCWSTR EbpfDeviceName = L"\\Device\\EbpfIoDevice";
|
||||
PCWSTR EbpfSymbolicDeviceName = L"\\GLOBAL??\\EbpfIoDevice";
|
||||
|
||||
#ifndef CTL_CODE
|
||||
#define CTL_CODE( DeviceType, Function, Method, Access ) ( \
|
||||
((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method) \
|
||||
)
|
||||
#endif
|
||||
// Device type
|
||||
#define EBPF_IOCTL_TYPE FILE_DEVICE_NETWORK
|
||||
|
||||
// Function codes from 0x800 to 0xFFF are for customer use.
|
||||
#define IOCTL_EBPFCTL_METHOD_BUFFERED \
|
||||
CTL_CODE( EBPF_IOCTL_TYPE, 0x900, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
||||
|
||||
//
|
||||
// Pre-Declarations
|
||||
//
|
||||
VOID
|
||||
EbpfCoreEvtIoDeviceControl(
|
||||
_In_ WDFQUEUE queue,
|
||||
_In_ WDFREQUEST request,
|
||||
_In_ size_t outputBufferLength,
|
||||
_In_ size_t inputBufferLength,
|
||||
_In_ ULONG ioControlCode
|
||||
);
|
||||
|
||||
_Function_class_(EVT_WDF_DRIVER_UNLOAD)
|
||||
_IRQL_requires_same_
|
||||
_IRQL_requires_max_(PASSIVE_LEVEL)
|
||||
void
|
||||
EvtDriverUnload(
|
||||
_In_ WDFDRIVER driverObject
|
||||
)
|
||||
{
|
||||
UNREFERENCED_PARAMETER(driverObject);
|
||||
|
||||
gDriverUnloading = TRUE;
|
||||
|
||||
EbpfHookUnregisterCallouts();
|
||||
}
|
||||
|
||||
//
|
||||
// Create a basic WDF driver, set up the device object
|
||||
// for a callout driver and setup the ioctl surface
|
||||
//
|
||||
NTSTATUS
|
||||
EbpfCoreInitDriverObjects(
|
||||
_Inout_ DRIVER_OBJECT* driverObject,
|
||||
_In_ const UNICODE_STRING* registryPath,
|
||||
_Out_ WDFDRIVER* pDriver,
|
||||
_Out_ WDFDEVICE* pDevice
|
||||
)
|
||||
{
|
||||
NTSTATUS status;
|
||||
WDF_DRIVER_CONFIG config;
|
||||
PWDFDEVICE_INIT pInit = NULL;
|
||||
WDF_IO_QUEUE_CONFIG ioQueueConfig;
|
||||
UNICODE_STRING ebpfDeviceName;
|
||||
UNICODE_STRING ebpfSymDeviceName;
|
||||
BOOLEAN deviceCreated = FALSE;
|
||||
|
||||
WDF_DRIVER_CONFIG_INIT(
|
||||
&config,
|
||||
WDF_NO_EVENT_CALLBACK
|
||||
);
|
||||
|
||||
config.DriverInitFlags |= WdfDriverInitNonPnpDriver;
|
||||
config.EvtDriverUnload = EvtDriverUnload;
|
||||
|
||||
status = WdfDriverCreate(
|
||||
driverObject,
|
||||
registryPath,
|
||||
WDF_NO_OBJECT_ATTRIBUTES,
|
||||
&config,
|
||||
pDriver
|
||||
);
|
||||
|
||||
if (!NT_SUCCESS(status))
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
DbgBreakPoint();
|
||||
pInit = WdfControlDeviceInitAllocate(
|
||||
*pDriver,
|
||||
&SDDL_DEVOBJ_SYS_ALL_ADM_ALL // only kernel/system and admins
|
||||
);
|
||||
if (!pInit)
|
||||
{
|
||||
status = STATUS_INSUFFICIENT_RESOURCES;
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
WdfDeviceInitSetDeviceType(
|
||||
pInit,
|
||||
FILE_DEVICE_NETWORK
|
||||
);
|
||||
|
||||
WdfDeviceInitSetCharacteristics(
|
||||
pInit,
|
||||
FILE_DEVICE_SECURE_OPEN,
|
||||
FALSE
|
||||
);
|
||||
|
||||
WdfDeviceInitSetCharacteristics(
|
||||
pInit,
|
||||
FILE_AUTOGENERATED_DEVICE_NAME,
|
||||
TRUE
|
||||
);
|
||||
|
||||
RtlInitUnicodeString(&ebpfDeviceName, EbpfDeviceName);
|
||||
WdfDeviceInitAssignName(
|
||||
pInit,
|
||||
&ebpfDeviceName);
|
||||
|
||||
status = WdfDeviceCreate(
|
||||
&pInit,
|
||||
WDF_NO_OBJECT_ATTRIBUTES,
|
||||
pDevice
|
||||
);
|
||||
|
||||
if (!NT_SUCCESS(status))
|
||||
{
|
||||
// do not free if any other call
|
||||
// after WdfDeviceCreate fails.
|
||||
WdfDeviceInitFree(pInit);
|
||||
pInit = NULL;
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
deviceCreated = TRUE;
|
||||
|
||||
// create symbolic link for control object for um
|
||||
RtlInitUnicodeString(&ebpfSymDeviceName, EbpfSymbolicDeviceName);
|
||||
status = WdfDeviceCreateSymbolicLink(
|
||||
*pDevice,
|
||||
&ebpfSymDeviceName);
|
||||
|
||||
if (!NT_SUCCESS(status))
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
// parallel default queue
|
||||
WDF_IO_QUEUE_CONFIG_INIT_DEFAULT_QUEUE(&ioQueueConfig,
|
||||
WdfIoQueueDispatchParallel);
|
||||
|
||||
ioQueueConfig.EvtIoDeviceControl = EbpfCoreEvtIoDeviceControl;
|
||||
|
||||
status = WdfIoQueueCreate(
|
||||
*pDevice,
|
||||
&ioQueueConfig,
|
||||
WDF_NO_OBJECT_ATTRIBUTES,
|
||||
WDF_NO_HANDLE // pointer to default queue
|
||||
);
|
||||
if (!NT_SUCCESS(status))
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
WdfControlFinishInitializing(*pDevice);
|
||||
|
||||
Exit:
|
||||
if (!NT_SUCCESS(status))
|
||||
{
|
||||
if (deviceCreated && pDevice != NULL)
|
||||
{
|
||||
//
|
||||
// Release the reference on the newly created object, since
|
||||
// we couldn't initialize it.
|
||||
//
|
||||
WdfObjectDelete(*pDevice);
|
||||
}
|
||||
}
|
||||
return status;
|
||||
}
|
||||
|
||||
VOID
|
||||
EbpfCoreEvtIoDeviceControl(
|
||||
_In_ WDFQUEUE queue,
|
||||
_In_ WDFREQUEST request,
|
||||
_In_ size_t outputBufferLength,
|
||||
_In_ size_t inputBufferLength,
|
||||
_In_ ULONG ioControlCode
|
||||
)
|
||||
{
|
||||
|
||||
NTSTATUS status = STATUS_SUCCESS;
|
||||
WDFDEVICE device;
|
||||
void* inputBuffer = NULL;
|
||||
size_t actualLength;
|
||||
char* inputValue = NULL;
|
||||
|
||||
UNREFERENCED_PARAMETER(outputBufferLength);
|
||||
UNREFERENCED_PARAMETER(inputBufferLength);
|
||||
|
||||
device = WdfIoQueueGetDevice(queue);
|
||||
|
||||
switch(ioControlCode)
|
||||
{
|
||||
case IOCTL_EBPFCTL_METHOD_BUFFERED:
|
||||
// Verify that length of the input buffer supplied to the request object
|
||||
// is not zero
|
||||
if(inputBufferLength != 0)
|
||||
{
|
||||
// Retrieve the input buffer associated with the request object
|
||||
status = WdfRequestRetrieveInputBuffer(
|
||||
request, // Request object
|
||||
inputBufferLength, // Length of input buffer
|
||||
&inputBuffer, // Pointer to buffer
|
||||
&actualLength // Length of buffer
|
||||
);
|
||||
|
||||
if(NT_SUCCESS(status))
|
||||
{
|
||||
if(inputBuffer != NULL)
|
||||
{
|
||||
inputValue = (char *)inputBuffer;
|
||||
}
|
||||
}
|
||||
else{
|
||||
status = STATUS_UNSUCCESSFUL;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
WdfRequestComplete(request, status);
|
||||
return;
|
||||
}
|
||||
|
||||
NTSTATUS
|
||||
DriverEntry(
|
||||
_In_ DRIVER_OBJECT* driverObject,
|
||||
_In_ UNICODE_STRING* registryPath
|
||||
)
|
||||
{
|
||||
NTSTATUS status;
|
||||
WDFDRIVER driver;
|
||||
WDFDEVICE device;
|
||||
|
||||
// Request NX Non-Paged Pool when available
|
||||
ExInitializeDriverRuntime(DrvRtPoolNxOptIn);
|
||||
|
||||
KdPrintEx((DPFLTR_IHVDRIVER_ID, DPFLTR_INFO_LEVEL, "EbpfCore: DriverEntry\n"));
|
||||
|
||||
status = EbpfCoreInitDriverObjects(
|
||||
driverObject,
|
||||
registryPath,
|
||||
&driver,
|
||||
&device
|
||||
);
|
||||
|
||||
if (!NT_SUCCESS(status))
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
gWdmDevice = WdfDeviceWdmGetDeviceObject(device);
|
||||
|
||||
status = EbpfHookRegisterCallouts(gWdmDevice);
|
||||
|
||||
if (!NT_SUCCESS(status))
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
Exit:
|
||||
|
||||
if (!NT_SUCCESS(status))
|
||||
{
|
||||
EbpfHookUnregisterCallouts();
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
|
@ -1,355 +1,355 @@
|
|||
/*++
|
||||
|
||||
Copyright (c) Microsoft Corporation. All rights reserved
|
||||
|
||||
Abstract:
|
||||
|
||||
This file implements the classifyFn, notifiFn, and flowDeleteFn callout
|
||||
functions for the l2 callout.
|
||||
|
||||
Environment:
|
||||
|
||||
Kernel mode
|
||||
|
||||
--*/
|
||||
|
||||
#include <ntddk.h>
|
||||
|
||||
#pragma warning(push)
|
||||
#pragma warning(disable:4201) // unnamed struct/union
|
||||
|
||||
#include <fwpsk.h>
|
||||
|
||||
#pragma warning(pop)
|
||||
|
||||
#include <fwpmk.h>
|
||||
|
||||
#include "ebpf_l2_hook.h"
|
||||
|
||||
#define INITGUID
|
||||
#include <guiddef.h>
|
||||
|
||||
// Callout and sublayer GUIDs
|
||||
|
||||
// 5a5614e5-6b64-4738-8367-33c6ca07bf8f
|
||||
DEFINE_GUID(
|
||||
EBPF_HOOK_L2_CALLOUT,
|
||||
0x5a5614e5,
|
||||
0x6b64,
|
||||
0x4738,
|
||||
0x83, 0x67, 0x33, 0xc6, 0xca, 0x07, 0xbf, 0x8f
|
||||
);
|
||||
|
||||
// 7c7b3fb9-3331-436a-98e1-b901df457fff
|
||||
DEFINE_GUID(
|
||||
EBPF_HOOK_SUBLAYER,
|
||||
0x7c7b3fb9,
|
||||
0x3331,
|
||||
0x436a,
|
||||
0x98, 0xe1, 0xb9, 0x01, 0xdf, 0x45, 0x7f, 0xff
|
||||
);
|
||||
|
||||
// Callout globals
|
||||
HANDLE gEngineHandle;
|
||||
UINT32 gL2CalloutId;
|
||||
|
||||
NTSTATUS
|
||||
EbpfHookAddFilter(
|
||||
_In_ const PWSTR filterName,
|
||||
_In_ const PWSTR filterDesc,
|
||||
_In_ FWP_DIRECTION direction,
|
||||
_In_ const GUID* layerKey,
|
||||
_In_ const GUID* calloutKey
|
||||
)
|
||||
{
|
||||
UNREFERENCED_PARAMETER(direction);
|
||||
NTSTATUS status = STATUS_SUCCESS;
|
||||
|
||||
FWPM_FILTER filter = { 0 };
|
||||
FWPM_FILTER_CONDITION filterConditions[3] = { 0 };
|
||||
UINT conditionIndex;
|
||||
|
||||
filter.layerKey = *layerKey;
|
||||
filter.displayData.name = (wchar_t*)filterName;
|
||||
filter.displayData.description = (wchar_t*)filterDesc;
|
||||
|
||||
filter.action.type = FWP_ACTION_CALLOUT_TERMINATING;
|
||||
filter.action.calloutKey = *calloutKey;
|
||||
filter.filterCondition = filterConditions;
|
||||
filter.subLayerKey = EBPF_HOOK_SUBLAYER;
|
||||
filter.weight.type = FWP_EMPTY; // auto-weight.
|
||||
//filter.rawContext = context;
|
||||
|
||||
conditionIndex = 0;
|
||||
|
||||
filterConditions[conditionIndex].fieldKey = FWPM_CONDITION_ETHER_TYPE;
|
||||
filterConditions[conditionIndex].matchType = FWP_MATCH_EQUAL;
|
||||
filterConditions[conditionIndex].conditionValue.type = FWP_UINT16;
|
||||
filterConditions[conditionIndex].conditionValue.uint16 = NDIS_ETH_TYPE_IPV4;
|
||||
|
||||
conditionIndex++;
|
||||
|
||||
filter.numFilterConditions = conditionIndex;
|
||||
|
||||
status = FwpmFilterAdd(
|
||||
gEngineHandle,
|
||||
&filter,
|
||||
NULL,
|
||||
NULL);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
|
||||
NTSTATUS
|
||||
EbpfHookRegisterL2Callout(
|
||||
_In_ const GUID* layerKey,
|
||||
_In_ const GUID* calloutKey,
|
||||
_Inout_ void* deviceObject,
|
||||
_Out_ UINT32* calloutId
|
||||
)
|
||||
/* ++
|
||||
|
||||
This function registers callouts and filters that intercept L2 traffic at
|
||||
WFP FWPM_LAYER_INBOUND_MAC_FRAME_ETHERNET.
|
||||
|
||||
-- */
|
||||
{
|
||||
NTSTATUS status = STATUS_SUCCESS;
|
||||
|
||||
FWPS_CALLOUT sCallout = { 0 };
|
||||
FWPM_CALLOUT mCallout = { 0 };
|
||||
|
||||
FWPM_DISPLAY_DATA displayData = { 0 };
|
||||
|
||||
BOOLEAN calloutRegistered = FALSE;
|
||||
|
||||
sCallout.calloutKey = *calloutKey;
|
||||
sCallout.classifyFn = EbpfHookL2Classify;
|
||||
sCallout.notifyFn = EbpfHookL2Notify;
|
||||
sCallout.flowDeleteFn = EbpfHookL2FlowDelete;
|
||||
sCallout.flags = 0;
|
||||
|
||||
status = FwpsCalloutRegister(
|
||||
deviceObject,
|
||||
&sCallout,
|
||||
calloutId
|
||||
);
|
||||
if (!NT_SUCCESS(status))
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
calloutRegistered = TRUE;
|
||||
|
||||
displayData.name = L"L2 XDP Callout";
|
||||
displayData.description = L"L2 callout driver for eBPF at XDP-like layer";
|
||||
|
||||
mCallout.calloutKey = *calloutKey;
|
||||
mCallout.displayData = displayData;
|
||||
mCallout.applicableLayer = *layerKey;
|
||||
|
||||
status = FwpmCalloutAdd(
|
||||
gEngineHandle,
|
||||
&mCallout,
|
||||
NULL,
|
||||
NULL
|
||||
);
|
||||
|
||||
if (!NT_SUCCESS(status))
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
status = EbpfHookAddFilter(
|
||||
L"L2 filter (Inbound)",
|
||||
L"L2 filter inbound",
|
||||
FWP_DIRECTION_INBOUND,
|
||||
layerKey,
|
||||
calloutKey
|
||||
);
|
||||
|
||||
if (!NT_SUCCESS(status))
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
Exit:
|
||||
|
||||
if (!NT_SUCCESS(status))
|
||||
{
|
||||
if (calloutRegistered)
|
||||
{
|
||||
FwpsCalloutUnregisterById(*calloutId);
|
||||
*calloutId = 0;
|
||||
}
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
NTSTATUS
|
||||
EbpfHookRegisterCallouts(
|
||||
_Inout_ void* deviceObject
|
||||
)
|
||||
/* ++
|
||||
|
||||
This function registers dynamic callouts and filters that
|
||||
FWPM_LAYER_INBOUND_MAC_FRAME_ETHERNET layer.
|
||||
|
||||
Callouts and filters will be removed during DriverUnload.
|
||||
|
||||
-- */
|
||||
{
|
||||
NTSTATUS status = STATUS_SUCCESS;
|
||||
FWPM_SUBLAYER ebpfHookL2SubLayer;
|
||||
|
||||
BOOLEAN engineOpened = FALSE;
|
||||
BOOLEAN inTransaction = FALSE;
|
||||
|
||||
FWPM_SESSION session = { 0 };
|
||||
|
||||
session.flags = FWPM_SESSION_FLAG_DYNAMIC;
|
||||
|
||||
status = FwpmEngineOpen(
|
||||
NULL,
|
||||
RPC_C_AUTHN_WINNT,
|
||||
NULL,
|
||||
&session,
|
||||
&gEngineHandle
|
||||
);
|
||||
if (!NT_SUCCESS(status))
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
engineOpened = TRUE;
|
||||
|
||||
status = FwpmTransactionBegin(gEngineHandle, 0);
|
||||
if (!NT_SUCCESS(status))
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
inTransaction = TRUE;
|
||||
|
||||
RtlZeroMemory(&ebpfHookL2SubLayer, sizeof(FWPM_SUBLAYER));
|
||||
|
||||
ebpfHookL2SubLayer.subLayerKey = EBPF_HOOK_SUBLAYER;
|
||||
ebpfHookL2SubLayer.displayData.name = L"L2 hook Sub-Layer";
|
||||
ebpfHookL2SubLayer.displayData.description =
|
||||
L"Sub-Layer for use by L2 callouts";
|
||||
ebpfHookL2SubLayer.flags = 0;
|
||||
ebpfHookL2SubLayer.weight = FWP_EMPTY; // auto-weight.;
|
||||
|
||||
status = FwpmSubLayerAdd(gEngineHandle, &ebpfHookL2SubLayer, NULL);
|
||||
if (!NT_SUCCESS(status))
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
status = EbpfHookRegisterL2Callout(
|
||||
&FWPM_LAYER_INBOUND_MAC_FRAME_ETHERNET,
|
||||
&EBPF_HOOK_L2_CALLOUT,
|
||||
deviceObject,
|
||||
&gL2CalloutId
|
||||
);
|
||||
if (!NT_SUCCESS(status))
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
status = FwpmTransactionCommit(gEngineHandle);
|
||||
if (!NT_SUCCESS(status))
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
inTransaction = FALSE;
|
||||
|
||||
Exit:
|
||||
|
||||
if (!NT_SUCCESS(status))
|
||||
{
|
||||
if (inTransaction)
|
||||
{
|
||||
FwpmTransactionAbort(gEngineHandle);
|
||||
_Analysis_assume_lock_not_held_(gEngineHandle); // Potential leak if "FwpmTransactionAbort" fails
|
||||
}
|
||||
if (engineOpened)
|
||||
{
|
||||
FwpmEngineClose(gEngineHandle);
|
||||
gEngineHandle = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
void
|
||||
EbpfHookUnregisterCallouts(void)
|
||||
{
|
||||
if (gEngineHandle != NULL)
|
||||
{
|
||||
FwpmEngineClose(gEngineHandle);
|
||||
gEngineHandle = NULL;
|
||||
|
||||
FwpsCalloutUnregisterById(gL2CalloutId);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
EbpfHookL2Classify(
|
||||
_In_ const FWPS_INCOMING_VALUES* inFixedValues,
|
||||
_In_ const FWPS_INCOMING_METADATA_VALUES* inMetaValues,
|
||||
_Inout_opt_ void* layerData,
|
||||
_In_opt_ const void* classifyContext,
|
||||
_In_ const FWPS_FILTER* filter,
|
||||
_In_ UINT64 flowContext,
|
||||
_Inout_ FWPS_CLASSIFY_OUT* classifyOut
|
||||
)
|
||||
/* ++
|
||||
|
||||
A simple classify function at the WFP L2 MAC layer.
|
||||
|
||||
-- */
|
||||
{
|
||||
UNREFERENCED_PARAMETER(inFixedValues);
|
||||
UNREFERENCED_PARAMETER(inMetaValues);
|
||||
UNREFERENCED_PARAMETER(layerData);
|
||||
UNREFERENCED_PARAMETER(classifyContext);
|
||||
UNREFERENCED_PARAMETER(filter);
|
||||
UNREFERENCED_PARAMETER(flowContext);
|
||||
|
||||
classifyOut->actionType = FWP_ACTION_PERMIT;
|
||||
return;
|
||||
}
|
||||
|
||||
NTSTATUS
|
||||
EbpfHookL2Notify(
|
||||
_In_ FWPS_CALLOUT_NOTIFY_TYPE notifyType,
|
||||
_In_ const GUID* filterKey,
|
||||
_Inout_ const FWPS_FILTER* filter
|
||||
)
|
||||
{
|
||||
UNREFERENCED_PARAMETER(notifyType);
|
||||
UNREFERENCED_PARAMETER(filterKey);
|
||||
UNREFERENCED_PARAMETER(filter);
|
||||
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
void
|
||||
EbpfHookL2FlowDelete(
|
||||
_In_ UINT16 layerId,
|
||||
_In_ UINT32 calloutId,
|
||||
_In_ UINT64 flowContext
|
||||
)
|
||||
/* ++
|
||||
|
||||
This is the flowDeleteFn function of the L2 callout.
|
||||
|
||||
-- */
|
||||
{
|
||||
UNREFERENCED_PARAMETER(layerId);
|
||||
UNREFERENCED_PARAMETER(calloutId);
|
||||
UNREFERENCED_PARAMETER(flowContext);
|
||||
return;
|
||||
}
|
||||
/*++
|
||||
|
||||
Copyright (c) Microsoft Corporation. All rights reserved
|
||||
|
||||
Abstract:
|
||||
|
||||
This file implements the classifyFn, notifiFn, and flowDeleteFn callout
|
||||
functions for the l2 callout.
|
||||
|
||||
Environment:
|
||||
|
||||
Kernel mode
|
||||
|
||||
--*/
|
||||
|
||||
#include <ntddk.h>
|
||||
|
||||
#pragma warning(push)
|
||||
#pragma warning(disable:4201) // unnamed struct/union
|
||||
|
||||
#include <fwpsk.h>
|
||||
|
||||
#pragma warning(pop)
|
||||
|
||||
#include <fwpmk.h>
|
||||
|
||||
#include "ebpf_l2_hook.h"
|
||||
|
||||
#define INITGUID
|
||||
#include <guiddef.h>
|
||||
|
||||
// Callout and sublayer GUIDs
|
||||
|
||||
// 5a5614e5-6b64-4738-8367-33c6ca07bf8f
|
||||
DEFINE_GUID(
|
||||
EBPF_HOOK_L2_CALLOUT,
|
||||
0x5a5614e5,
|
||||
0x6b64,
|
||||
0x4738,
|
||||
0x83, 0x67, 0x33, 0xc6, 0xca, 0x07, 0xbf, 0x8f
|
||||
);
|
||||
|
||||
// 7c7b3fb9-3331-436a-98e1-b901df457fff
|
||||
DEFINE_GUID(
|
||||
EBPF_HOOK_SUBLAYER,
|
||||
0x7c7b3fb9,
|
||||
0x3331,
|
||||
0x436a,
|
||||
0x98, 0xe1, 0xb9, 0x01, 0xdf, 0x45, 0x7f, 0xff
|
||||
);
|
||||
|
||||
// Callout globals
|
||||
HANDLE gEngineHandle;
|
||||
UINT32 gL2CalloutId;
|
||||
|
||||
NTSTATUS
|
||||
EbpfHookAddFilter(
|
||||
_In_ const PWSTR filterName,
|
||||
_In_ const PWSTR filterDesc,
|
||||
_In_ FWP_DIRECTION direction,
|
||||
_In_ const GUID* layerKey,
|
||||
_In_ const GUID* calloutKey
|
||||
)
|
||||
{
|
||||
UNREFERENCED_PARAMETER(direction);
|
||||
NTSTATUS status = STATUS_SUCCESS;
|
||||
|
||||
FWPM_FILTER filter = { 0 };
|
||||
FWPM_FILTER_CONDITION filterConditions[3] = { 0 };
|
||||
UINT conditionIndex;
|
||||
|
||||
filter.layerKey = *layerKey;
|
||||
filter.displayData.name = (wchar_t*)filterName;
|
||||
filter.displayData.description = (wchar_t*)filterDesc;
|
||||
|
||||
filter.action.type = FWP_ACTION_CALLOUT_TERMINATING;
|
||||
filter.action.calloutKey = *calloutKey;
|
||||
filter.filterCondition = filterConditions;
|
||||
filter.subLayerKey = EBPF_HOOK_SUBLAYER;
|
||||
filter.weight.type = FWP_EMPTY; // auto-weight.
|
||||
//filter.rawContext = context;
|
||||
|
||||
conditionIndex = 0;
|
||||
|
||||
filterConditions[conditionIndex].fieldKey = FWPM_CONDITION_ETHER_TYPE;
|
||||
filterConditions[conditionIndex].matchType = FWP_MATCH_EQUAL;
|
||||
filterConditions[conditionIndex].conditionValue.type = FWP_UINT16;
|
||||
filterConditions[conditionIndex].conditionValue.uint16 = NDIS_ETH_TYPE_IPV4;
|
||||
|
||||
conditionIndex++;
|
||||
|
||||
filter.numFilterConditions = conditionIndex;
|
||||
|
||||
status = FwpmFilterAdd(
|
||||
gEngineHandle,
|
||||
&filter,
|
||||
NULL,
|
||||
NULL);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
|
||||
NTSTATUS
|
||||
EbpfHookRegisterL2Callout(
|
||||
_In_ const GUID* layerKey,
|
||||
_In_ const GUID* calloutKey,
|
||||
_Inout_ void* deviceObject,
|
||||
_Out_ UINT32* calloutId
|
||||
)
|
||||
/* ++
|
||||
|
||||
This function registers callouts and filters that intercept L2 traffic at
|
||||
WFP FWPM_LAYER_INBOUND_MAC_FRAME_ETHERNET.
|
||||
|
||||
-- */
|
||||
{
|
||||
NTSTATUS status = STATUS_SUCCESS;
|
||||
|
||||
FWPS_CALLOUT sCallout = { 0 };
|
||||
FWPM_CALLOUT mCallout = { 0 };
|
||||
|
||||
FWPM_DISPLAY_DATA displayData = { 0 };
|
||||
|
||||
BOOLEAN calloutRegistered = FALSE;
|
||||
|
||||
sCallout.calloutKey = *calloutKey;
|
||||
sCallout.classifyFn = EbpfHookL2Classify;
|
||||
sCallout.notifyFn = EbpfHookL2Notify;
|
||||
sCallout.flowDeleteFn = EbpfHookL2FlowDelete;
|
||||
sCallout.flags = 0;
|
||||
|
||||
status = FwpsCalloutRegister(
|
||||
deviceObject,
|
||||
&sCallout,
|
||||
calloutId
|
||||
);
|
||||
if (!NT_SUCCESS(status))
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
calloutRegistered = TRUE;
|
||||
|
||||
displayData.name = L"L2 XDP Callout";
|
||||
displayData.description = L"L2 callout driver for eBPF at XDP-like layer";
|
||||
|
||||
mCallout.calloutKey = *calloutKey;
|
||||
mCallout.displayData = displayData;
|
||||
mCallout.applicableLayer = *layerKey;
|
||||
|
||||
status = FwpmCalloutAdd(
|
||||
gEngineHandle,
|
||||
&mCallout,
|
||||
NULL,
|
||||
NULL
|
||||
);
|
||||
|
||||
if (!NT_SUCCESS(status))
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
status = EbpfHookAddFilter(
|
||||
L"L2 filter (Inbound)",
|
||||
L"L2 filter inbound",
|
||||
FWP_DIRECTION_INBOUND,
|
||||
layerKey,
|
||||
calloutKey
|
||||
);
|
||||
|
||||
if (!NT_SUCCESS(status))
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
Exit:
|
||||
|
||||
if (!NT_SUCCESS(status))
|
||||
{
|
||||
if (calloutRegistered)
|
||||
{
|
||||
FwpsCalloutUnregisterById(*calloutId);
|
||||
*calloutId = 0;
|
||||
}
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
NTSTATUS
|
||||
EbpfHookRegisterCallouts(
|
||||
_Inout_ void* deviceObject
|
||||
)
|
||||
/* ++
|
||||
|
||||
This function registers dynamic callouts and filters that
|
||||
FWPM_LAYER_INBOUND_MAC_FRAME_ETHERNET layer.
|
||||
|
||||
Callouts and filters will be removed during DriverUnload.
|
||||
|
||||
-- */
|
||||
{
|
||||
NTSTATUS status = STATUS_SUCCESS;
|
||||
FWPM_SUBLAYER ebpfHookL2SubLayer;
|
||||
|
||||
BOOLEAN engineOpened = FALSE;
|
||||
BOOLEAN inTransaction = FALSE;
|
||||
|
||||
FWPM_SESSION session = { 0 };
|
||||
|
||||
session.flags = FWPM_SESSION_FLAG_DYNAMIC;
|
||||
|
||||
status = FwpmEngineOpen(
|
||||
NULL,
|
||||
RPC_C_AUTHN_WINNT,
|
||||
NULL,
|
||||
&session,
|
||||
&gEngineHandle
|
||||
);
|
||||
if (!NT_SUCCESS(status))
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
engineOpened = TRUE;
|
||||
|
||||
status = FwpmTransactionBegin(gEngineHandle, 0);
|
||||
if (!NT_SUCCESS(status))
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
inTransaction = TRUE;
|
||||
|
||||
RtlZeroMemory(&ebpfHookL2SubLayer, sizeof(FWPM_SUBLAYER));
|
||||
|
||||
ebpfHookL2SubLayer.subLayerKey = EBPF_HOOK_SUBLAYER;
|
||||
ebpfHookL2SubLayer.displayData.name = L"L2 hook Sub-Layer";
|
||||
ebpfHookL2SubLayer.displayData.description =
|
||||
L"Sub-Layer for use by L2 callouts";
|
||||
ebpfHookL2SubLayer.flags = 0;
|
||||
ebpfHookL2SubLayer.weight = FWP_EMPTY; // auto-weight.;
|
||||
|
||||
status = FwpmSubLayerAdd(gEngineHandle, &ebpfHookL2SubLayer, NULL);
|
||||
if (!NT_SUCCESS(status))
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
status = EbpfHookRegisterL2Callout(
|
||||
&FWPM_LAYER_INBOUND_MAC_FRAME_ETHERNET,
|
||||
&EBPF_HOOK_L2_CALLOUT,
|
||||
deviceObject,
|
||||
&gL2CalloutId
|
||||
);
|
||||
if (!NT_SUCCESS(status))
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
status = FwpmTransactionCommit(gEngineHandle);
|
||||
if (!NT_SUCCESS(status))
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
inTransaction = FALSE;
|
||||
|
||||
Exit:
|
||||
|
||||
if (!NT_SUCCESS(status))
|
||||
{
|
||||
if (inTransaction)
|
||||
{
|
||||
FwpmTransactionAbort(gEngineHandle);
|
||||
_Analysis_assume_lock_not_held_(gEngineHandle); // Potential leak if "FwpmTransactionAbort" fails
|
||||
}
|
||||
if (engineOpened)
|
||||
{
|
||||
FwpmEngineClose(gEngineHandle);
|
||||
gEngineHandle = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
void
|
||||
EbpfHookUnregisterCallouts(void)
|
||||
{
|
||||
if (gEngineHandle != NULL)
|
||||
{
|
||||
FwpmEngineClose(gEngineHandle);
|
||||
gEngineHandle = NULL;
|
||||
|
||||
FwpsCalloutUnregisterById(gL2CalloutId);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
EbpfHookL2Classify(
|
||||
_In_ const FWPS_INCOMING_VALUES* inFixedValues,
|
||||
_In_ const FWPS_INCOMING_METADATA_VALUES* inMetaValues,
|
||||
_Inout_opt_ void* layerData,
|
||||
_In_opt_ const void* classifyContext,
|
||||
_In_ const FWPS_FILTER* filter,
|
||||
_In_ UINT64 flowContext,
|
||||
_Inout_ FWPS_CLASSIFY_OUT* classifyOut
|
||||
)
|
||||
/* ++
|
||||
|
||||
A simple classify function at the WFP L2 MAC layer.
|
||||
|
||||
-- */
|
||||
{
|
||||
UNREFERENCED_PARAMETER(inFixedValues);
|
||||
UNREFERENCED_PARAMETER(inMetaValues);
|
||||
UNREFERENCED_PARAMETER(layerData);
|
||||
UNREFERENCED_PARAMETER(classifyContext);
|
||||
UNREFERENCED_PARAMETER(filter);
|
||||
UNREFERENCED_PARAMETER(flowContext);
|
||||
|
||||
classifyOut->actionType = FWP_ACTION_PERMIT;
|
||||
return;
|
||||
}
|
||||
|
||||
NTSTATUS
|
||||
EbpfHookL2Notify(
|
||||
_In_ FWPS_CALLOUT_NOTIFY_TYPE notifyType,
|
||||
_In_ const GUID* filterKey,
|
||||
_Inout_ const FWPS_FILTER* filter
|
||||
)
|
||||
{
|
||||
UNREFERENCED_PARAMETER(notifyType);
|
||||
UNREFERENCED_PARAMETER(filterKey);
|
||||
UNREFERENCED_PARAMETER(filter);
|
||||
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
void
|
||||
EbpfHookL2FlowDelete(
|
||||
_In_ UINT16 layerId,
|
||||
_In_ UINT32 calloutId,
|
||||
_In_ UINT64 flowContext
|
||||
)
|
||||
/* ++
|
||||
|
||||
This is the flowDeleteFn function of the L2 callout.
|
||||
|
||||
-- */
|
||||
{
|
||||
UNREFERENCED_PARAMETER(layerId);
|
||||
UNREFERENCED_PARAMETER(calloutId);
|
||||
UNREFERENCED_PARAMETER(flowContext);
|
||||
return;
|
||||
}
|
||||
|
|
@ -1,60 +1,60 @@
|
|||
/*++
|
||||
|
||||
Copyright (c) Microsoft Corporation. All rights reserved
|
||||
|
||||
Abstract:
|
||||
|
||||
Header file for structures/prototypes of the driver.
|
||||
|
||||
|
||||
Environment:
|
||||
|
||||
Kernel mode
|
||||
|
||||
--*/
|
||||
|
||||
#ifndef _EBPF_L2HOOK_H_
|
||||
#define _EBPF_L2HOOK_H_
|
||||
|
||||
// Externs
|
||||
extern UINT32 gL2CalloutId;
|
||||
extern BOOLEAN gDriverUnloading;
|
||||
|
||||
//
|
||||
// Shared function prototypes
|
||||
//
|
||||
|
||||
NTSTATUS
|
||||
EbpfHookRegisterCallouts(
|
||||
_Inout_ void* deviceObject
|
||||
);
|
||||
|
||||
void
|
||||
EbpfHookUnregisterCallouts(void);
|
||||
|
||||
void
|
||||
EbpfHookL2Classify(
|
||||
_In_ const FWPS_INCOMING_VALUES* inFixedValues,
|
||||
_In_ const FWPS_INCOMING_METADATA_VALUES* inMetaValues,
|
||||
_Inout_opt_ void* layerData,
|
||||
_In_opt_ const void* classifyContext,
|
||||
_In_ const FWPS_FILTER* filter,
|
||||
_In_ UINT64 flowContext,
|
||||
_Inout_ FWPS_CLASSIFY_OUT* classifyOut
|
||||
);
|
||||
|
||||
void
|
||||
EbpfHookL2FlowDelete(
|
||||
_In_ UINT16 layerId,
|
||||
_In_ UINT32 calloutId,
|
||||
_In_ UINT64 flowContext
|
||||
);
|
||||
|
||||
NTSTATUS
|
||||
EbpfHookL2Notify(
|
||||
_In_ FWPS_CALLOUT_NOTIFY_TYPE notifyType,
|
||||
_In_ const GUID* filterKey,
|
||||
_Inout_ const FWPS_FILTER* filter
|
||||
);
|
||||
|
||||
#endif // _EBPF_L2HOOK_H_
|
||||
/*++
|
||||
|
||||
Copyright (c) Microsoft Corporation. All rights reserved
|
||||
|
||||
Abstract:
|
||||
|
||||
Header file for structures/prototypes of the driver.
|
||||
|
||||
|
||||
Environment:
|
||||
|
||||
Kernel mode
|
||||
|
||||
--*/
|
||||
|
||||
#ifndef _EBPF_L2HOOK_H_
|
||||
#define _EBPF_L2HOOK_H_
|
||||
|
||||
// Externs
|
||||
extern UINT32 gL2CalloutId;
|
||||
extern BOOLEAN gDriverUnloading;
|
||||
|
||||
//
|
||||
// Shared function prototypes
|
||||
//
|
||||
|
||||
NTSTATUS
|
||||
EbpfHookRegisterCallouts(
|
||||
_Inout_ void* deviceObject
|
||||
);
|
||||
|
||||
void
|
||||
EbpfHookUnregisterCallouts(void);
|
||||
|
||||
void
|
||||
EbpfHookL2Classify(
|
||||
_In_ const FWPS_INCOMING_VALUES* inFixedValues,
|
||||
_In_ const FWPS_INCOMING_METADATA_VALUES* inMetaValues,
|
||||
_Inout_opt_ void* layerData,
|
||||
_In_opt_ const void* classifyContext,
|
||||
_In_ const FWPS_FILTER* filter,
|
||||
_In_ UINT64 flowContext,
|
||||
_Inout_ FWPS_CLASSIFY_OUT* classifyOut
|
||||
);
|
||||
|
||||
void
|
||||
EbpfHookL2FlowDelete(
|
||||
_In_ UINT16 layerId,
|
||||
_In_ UINT32 calloutId,
|
||||
_In_ UINT64 flowContext
|
||||
);
|
||||
|
||||
NTSTATUS
|
||||
EbpfHookL2Notify(
|
||||
_In_ FWPS_CALLOUT_NOTIFY_TYPE notifyType,
|
||||
_In_ const GUID* filterKey,
|
||||
_Inout_ const FWPS_FILTER* filter
|
||||
);
|
||||
|
||||
#endif // _EBPF_L2HOOK_H_
|
|
@ -1,78 +1,78 @@
|
|||
#include <windows.h>
|
||||
#include <winioctl.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <strsafe.h>
|
||||
|
||||
// Globals
|
||||
char OutputBuffer[100];
|
||||
char InputBuffer[100];
|
||||
|
||||
|
||||
// Device type
|
||||
#define EBPF_IOCTL_TYPE FILE_DEVICE_NETWORK
|
||||
|
||||
// Function codes from 0x800 to 0xFFF are for customer use.
|
||||
#define IOCTL_EBPFCTL_METHOD_BUFFERED \
|
||||
CTL_CODE( EBPF_IOCTL_TYPE, 0x900, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
||||
|
||||
int main(
|
||||
_In_ ULONG argc,
|
||||
_In_reads_(argc) PCHAR argv[]
|
||||
)
|
||||
|
||||
{
|
||||
HANDLE deviceHandle;
|
||||
DWORD error = NO_ERROR;
|
||||
LPCWSTR ebpfDeviceName = L"\\\\.\\EbpfIoDevice";
|
||||
ULONG bytesReturned;
|
||||
|
||||
UNREFERENCED_PARAMETER(argc);
|
||||
UNREFERENCED_PARAMETER(argv);
|
||||
|
||||
|
||||
deviceHandle = CreateFile(ebpfDeviceName,
|
||||
GENERIC_READ | GENERIC_WRITE,
|
||||
0,
|
||||
NULL,
|
||||
CREATE_ALWAYS,
|
||||
FILE_ATTRIBUTE_NORMAL,
|
||||
NULL);
|
||||
|
||||
if (deviceHandle == INVALID_HANDLE_VALUE) {
|
||||
error = GetLastError();
|
||||
printf("Error: CreatFile Failed : %d\n", error);
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
printf("InputBuffer Pointer = %p, BufLength = %Iu\n", InputBuffer,
|
||||
sizeof(InputBuffer));
|
||||
StringCbCopy(InputBuffer, sizeof(InputBuffer),
|
||||
L"This String is from User Application; using METHOD_BUFFERED");
|
||||
|
||||
printf("OutputBuffer Pointer = %p BufLength = %Iu\n", OutputBuffer,
|
||||
sizeof(OutputBuffer));
|
||||
memset(OutputBuffer, 0, sizeof(OutputBuffer));
|
||||
|
||||
error = DeviceIoControl(
|
||||
deviceHandle,
|
||||
(DWORD)IOCTL_EBPFCTL_METHOD_BUFFERED,
|
||||
&InputBuffer,
|
||||
(DWORD)strlen(InputBuffer) + 1,
|
||||
&OutputBuffer,
|
||||
sizeof(OutputBuffer),
|
||||
&bytesReturned,
|
||||
NULL);
|
||||
if (!error)
|
||||
{
|
||||
error = GetLastError();
|
||||
printf("Error in DeviceIoControl : %d", error);
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
printf(" OutBuffer (%d): %s\n", bytesReturned, OutputBuffer);
|
||||
|
||||
Exit:
|
||||
return error;
|
||||
#include <windows.h>
|
||||
#include <winioctl.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <strsafe.h>
|
||||
|
||||
// Globals
|
||||
char OutputBuffer[100];
|
||||
char InputBuffer[100];
|
||||
|
||||
|
||||
// Device type
|
||||
#define EBPF_IOCTL_TYPE FILE_DEVICE_NETWORK
|
||||
|
||||
// Function codes from 0x800 to 0xFFF are for customer use.
|
||||
#define IOCTL_EBPFCTL_METHOD_BUFFERED \
|
||||
CTL_CODE( EBPF_IOCTL_TYPE, 0x900, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
||||
|
||||
int main(
|
||||
_In_ ULONG argc,
|
||||
_In_reads_(argc) PCHAR argv[]
|
||||
)
|
||||
|
||||
{
|
||||
HANDLE deviceHandle;
|
||||
DWORD error = NO_ERROR;
|
||||
LPCWSTR ebpfDeviceName = L"\\\\.\\EbpfIoDevice";
|
||||
ULONG bytesReturned;
|
||||
|
||||
UNREFERENCED_PARAMETER(argc);
|
||||
UNREFERENCED_PARAMETER(argv);
|
||||
|
||||
|
||||
deviceHandle = CreateFile(ebpfDeviceName,
|
||||
GENERIC_READ | GENERIC_WRITE,
|
||||
0,
|
||||
NULL,
|
||||
CREATE_ALWAYS,
|
||||
FILE_ATTRIBUTE_NORMAL,
|
||||
NULL);
|
||||
|
||||
if (deviceHandle == INVALID_HANDLE_VALUE) {
|
||||
error = GetLastError();
|
||||
printf("Error: CreatFile Failed : %d\n", error);
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
printf("InputBuffer Pointer = %p, BufLength = %Iu\n", InputBuffer,
|
||||
sizeof(InputBuffer));
|
||||
StringCbCopy(InputBuffer, sizeof(InputBuffer),
|
||||
L"This String is from User Application; using METHOD_BUFFERED");
|
||||
|
||||
printf("OutputBuffer Pointer = %p BufLength = %Iu\n", OutputBuffer,
|
||||
sizeof(OutputBuffer));
|
||||
memset(OutputBuffer, 0, sizeof(OutputBuffer));
|
||||
|
||||
error = DeviceIoControl(
|
||||
deviceHandle,
|
||||
(DWORD)IOCTL_EBPFCTL_METHOD_BUFFERED,
|
||||
&InputBuffer,
|
||||
(DWORD)strlen(InputBuffer) + 1,
|
||||
&OutputBuffer,
|
||||
sizeof(OutputBuffer),
|
||||
&bytesReturned,
|
||||
NULL);
|
||||
if (!error)
|
||||
{
|
||||
error = GetLastError();
|
||||
printf("Error in DeviceIoControl : %d", error);
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
printf(" OutBuffer (%d): %s\n", bytesReturned, OutputBuffer);
|
||||
|
||||
Exit:
|
||||
return error;
|
||||
}
|
|
@ -1,149 +1,149 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|x64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<VCProjectVersion>16.0</VCProjectVersion>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<ProjectGuid>{87765170-a439-418f-8ef3-0458d22c5772}</ProjectGuid>
|
||||
<RootNamespace>EbpfTool</RootNamespace>
|
||||
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="Shared">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<AdditionalIncludeDirectories>$(SolutionDir)EbpfDriver;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="EbpfTool.c" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|x64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<VCProjectVersion>16.0</VCProjectVersion>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<ProjectGuid>{87765170-a439-418f-8ef3-0458d22c5772}</ProjectGuid>
|
||||
<RootNamespace>EbpfTool</RootNamespace>
|
||||
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="Shared">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<AdditionalIncludeDirectories>$(SolutionDir)EbpfDriver;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="EbpfTool.c" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
|
@ -1,22 +1,22 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup>
|
||||
<Filter Include="Source Files">
|
||||
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||
<Extensions>cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Header Files">
|
||||
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||
<Extensions>h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Resource Files">
|
||||
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
|
||||
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="EbpfTool.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup>
|
||||
<Filter Include="Source Files">
|
||||
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||
<Extensions>cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Header Files">
|
||||
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||
<Extensions>h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Resource Files">
|
||||
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
|
||||
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="EbpfTool.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
</Project>
|
Загрузка…
Ссылка в новой задаче