From bccdc0c6c494a2c689ff325c4b83b360dfb819dd Mon Sep 17 00:00:00 2001 From: Ruslan Valiakhmetov Date: Tue, 31 Dec 2019 12:09:07 +0200 Subject: [PATCH 1/2] Added minifilter driver project --- .gitignore | 5 + readme.md | 16 +-- src/FSFilter/FsFilter.vcxproj | 76 ------------ src/FsFilter.sln | 38 +++--- src/FsMinifilter/FsMinifilter.cpp | 78 ++++++++++++ src/FsMinifilter/FsMinifilter.h | 21 ++++ src/FsMinifilter/FsMinifilter.inf | 93 ++++++++++++++ src/FsMinifilter/FsMinifilter.rc | 10 ++ src/FsMinifilter/FsMinifilter.vcxproj | 116 ++++++++++++++++++ src/FsMinifilter/FsMinifilter.vcxproj.filters | 44 +++++++ src/FsMinifilter/Main.cpp | 73 +++++++++++ 11 files changed, 466 insertions(+), 104 deletions(-) create mode 100644 .gitignore create mode 100644 src/FsMinifilter/FsMinifilter.cpp create mode 100644 src/FsMinifilter/FsMinifilter.h create mode 100644 src/FsMinifilter/FsMinifilter.inf create mode 100644 src/FsMinifilter/FsMinifilter.rc create mode 100644 src/FsMinifilter/FsMinifilter.vcxproj create mode 100644 src/FsMinifilter/FsMinifilter.vcxproj.filters create mode 100644 src/FsMinifilter/Main.cpp diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..414117a --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +**/.vs +**/x64 +**/release +**/debug +*.user \ No newline at end of file diff --git a/readme.md b/readme.md index 89aae78..4da535b 100644 --- a/readme.md +++ b/readme.md @@ -1,30 +1,30 @@ -# Windows File System Filter Driver Development Tutorial +# Windows File System Filter and Minifilter Drivers Development Tutorial ## About -A simple Windows file system filter driver solution, created mainly for the demonstration and further customization purposes. +A simple Windows file system filter and minifilter drivers solution, created mainly for the demonstration and further customization purposes. -The main purpose when you develop a file system filter driver is to change file system behavior. It is called at each I/O operation and provides possibility to additionally process its parameters and change its results (“filter” this request). +The main purpose when you develop a file system filter or minifilter driver is to change file system behavior. It is called at each I/O operation and provides possibility to additionally process its parameters and change its results ("filter" this request). -File system filter driver development is used for context-based permission management, configuration change management, access management, continuous backup solutions, anti-malware solutions and many other applications. +File system filter or minifilter driver development is used for context-based permission management, configuration change management, access management, continuous backup solutions, anti-malware solutions and many other applications. But note that the minifilter driver is easier to develop, use, and maintain. Author: @SergiusTheBest ## Implementation The code is written in C++. You will also need WDK/IFS kit to build the solution. -You can find a step-by-step file system filter driver tutorial with code samples as well as instructions on how to install/uninstall and start/stop this driver in the [detailed related article](https://www.apriorit.com/dev-blog/167-file-system-filter-driver). +You can find a step-by-step file system filter and minifilter drivers tutorial with code samples as well as instructions on how to install/uninstall and start/stop this driver in the [detailed related article](https://www.apriorit.com/dev-blog/167-file-system-filter-driver). ## License -Licensed under the MIT license. © Apriorit. +Licensed under the MIT license. © Apriorit. ## How to build -To build filter driver solution you need: +To build file system drivers you need: - Visual Studio 2019 16.4 or higher (with all SDK available in additional features); - Windows 10 SDK 10.1.18362.1 or higher; - WDK 10.1.18362.1 or higher; - MSVC v142 C++ Spectre-Mitigation tools (via Visual Studio Installer -> Individual Components). -After installing all the necessary tools open FsFilter.sln file and build FsFilter project. +After installing all the necessary tools open FsFilter.sln file and build FsFilter solution. diff --git a/src/FSFilter/FsFilter.vcxproj b/src/FSFilter/FsFilter.vcxproj index 6e213ef..1af49c2 100644 --- a/src/FSFilter/FsFilter.vcxproj +++ b/src/FSFilter/FsFilter.vcxproj @@ -17,22 +17,6 @@ Release x64 - - Debug - ARM - - - Release - ARM - - - Debug - ARM64 - - - Release - ARM64 - @@ -76,34 +60,6 @@ Driver WDM - - Windows10 - true - WindowsKernelModeDriver10.0 - Driver - WDM - - - Windows10 - false - WindowsKernelModeDriver10.0 - Driver - WDM - - - Windows10 - true - WindowsKernelModeDriver10.0 - Driver - WDM - - - Windows10 - false - WindowsKernelModeDriver10.0 - Driver - WDM - @@ -124,18 +80,6 @@ DbgengKernelDebugger - - DbgengKernelDebugger - - - DbgengKernelDebugger - - - DbgengKernelDebugger - - - DbgengKernelDebugger - fltmgr.lib;%(AdditionalDependencies) @@ -156,26 +100,6 @@ fltmgr.lib;%(AdditionalDependencies) - - - fltmgr.lib;%(AdditionalDependencies) - - - - - fltmgr.lib;%(AdditionalDependencies) - - - - - fltmgr.lib;%(AdditionalDependencies) - - - - - fltmgr.lib;%(AdditionalDependencies) - - diff --git a/src/FsFilter.sln b/src/FsFilter.sln index 0402812..7da87f8 100644 --- a/src/FsFilter.sln +++ b/src/FsFilter.sln @@ -3,44 +3,42 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 16 VisualStudioVersion = 16.0.29519.181 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "FsFilter", "FsFilter\FsFilter.vcxproj", "{140A7CB4-A057-4FEB-9C5A-838ED6C1B921}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "FsFilter", "FSFilter\FsFilter.vcxproj", "{140A7CB4-A057-4FEB-9C5A-838ED6C1B921}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "FsMinifilter", "FsMinifilter\FsMinifilter.vcxproj", "{AB9EA1EB-D358-4FDE-B50B-6D0588EFACE3}" 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 - {140A7CB4-A057-4FEB-9C5A-838ED6C1B921}.Debug|ARM.ActiveCfg = Debug|ARM - {140A7CB4-A057-4FEB-9C5A-838ED6C1B921}.Debug|ARM.Build.0 = Debug|ARM - {140A7CB4-A057-4FEB-9C5A-838ED6C1B921}.Debug|ARM.Deploy.0 = Debug|ARM - {140A7CB4-A057-4FEB-9C5A-838ED6C1B921}.Debug|ARM64.ActiveCfg = Debug|ARM64 - {140A7CB4-A057-4FEB-9C5A-838ED6C1B921}.Debug|ARM64.Build.0 = Debug|ARM64 - {140A7CB4-A057-4FEB-9C5A-838ED6C1B921}.Debug|ARM64.Deploy.0 = Debug|ARM64 {140A7CB4-A057-4FEB-9C5A-838ED6C1B921}.Debug|x64.ActiveCfg = Debug|x64 {140A7CB4-A057-4FEB-9C5A-838ED6C1B921}.Debug|x64.Build.0 = Debug|x64 {140A7CB4-A057-4FEB-9C5A-838ED6C1B921}.Debug|x64.Deploy.0 = Debug|x64 {140A7CB4-A057-4FEB-9C5A-838ED6C1B921}.Debug|x86.ActiveCfg = Debug|Win32 {140A7CB4-A057-4FEB-9C5A-838ED6C1B921}.Debug|x86.Build.0 = Debug|Win32 {140A7CB4-A057-4FEB-9C5A-838ED6C1B921}.Debug|x86.Deploy.0 = Debug|Win32 - {140A7CB4-A057-4FEB-9C5A-838ED6C1B921}.Release|ARM.ActiveCfg = Release|ARM - {140A7CB4-A057-4FEB-9C5A-838ED6C1B921}.Release|ARM.Build.0 = Release|ARM - {140A7CB4-A057-4FEB-9C5A-838ED6C1B921}.Release|ARM.Deploy.0 = Release|ARM - {140A7CB4-A057-4FEB-9C5A-838ED6C1B921}.Release|ARM64.ActiveCfg = Release|ARM64 - {140A7CB4-A057-4FEB-9C5A-838ED6C1B921}.Release|ARM64.Build.0 = Release|ARM64 - {140A7CB4-A057-4FEB-9C5A-838ED6C1B921}.Release|ARM64.Deploy.0 = Release|ARM64 - {140A7CB4-A057-4FEB-9C5A-838ED6C1B921}.Release|x64.ActiveCfg = Release|x64 - {140A7CB4-A057-4FEB-9C5A-838ED6C1B921}.Release|x64.Build.0 = Release|x64 - {140A7CB4-A057-4FEB-9C5A-838ED6C1B921}.Release|x64.Deploy.0 = Release|x64 + {140A7CB4-A057-4FEB-9C5A-838ED6C1B921}.Release|x64.ActiveCfg = Debug|x64 + {140A7CB4-A057-4FEB-9C5A-838ED6C1B921}.Release|x64.Build.0 = Debug|x64 + {140A7CB4-A057-4FEB-9C5A-838ED6C1B921}.Release|x64.Deploy.0 = Debug|x64 {140A7CB4-A057-4FEB-9C5A-838ED6C1B921}.Release|x86.ActiveCfg = Release|Win32 {140A7CB4-A057-4FEB-9C5A-838ED6C1B921}.Release|x86.Build.0 = Release|Win32 {140A7CB4-A057-4FEB-9C5A-838ED6C1B921}.Release|x86.Deploy.0 = Release|Win32 + {AB9EA1EB-D358-4FDE-B50B-6D0588EFACE3}.Debug|x64.ActiveCfg = Debug|x64 + {AB9EA1EB-D358-4FDE-B50B-6D0588EFACE3}.Debug|x64.Build.0 = Debug|x64 + {AB9EA1EB-D358-4FDE-B50B-6D0588EFACE3}.Debug|x64.Deploy.0 = Debug|x64 + {AB9EA1EB-D358-4FDE-B50B-6D0588EFACE3}.Debug|x86.ActiveCfg = Debug|Win32 + {AB9EA1EB-D358-4FDE-B50B-6D0588EFACE3}.Debug|x86.Build.0 = Debug|Win32 + {AB9EA1EB-D358-4FDE-B50B-6D0588EFACE3}.Debug|x86.Deploy.0 = Debug|Win32 + {AB9EA1EB-D358-4FDE-B50B-6D0588EFACE3}.Release|x64.ActiveCfg = Debug|x64 + {AB9EA1EB-D358-4FDE-B50B-6D0588EFACE3}.Release|x64.Build.0 = Debug|x64 + {AB9EA1EB-D358-4FDE-B50B-6D0588EFACE3}.Release|x64.Deploy.0 = Debug|x64 + {AB9EA1EB-D358-4FDE-B50B-6D0588EFACE3}.Release|x86.ActiveCfg = Release|Win32 + {AB9EA1EB-D358-4FDE-B50B-6D0588EFACE3}.Release|x86.Build.0 = Release|Win32 + {AB9EA1EB-D358-4FDE-B50B-6D0588EFACE3}.Release|x86.Deploy.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/src/FsMinifilter/FsMinifilter.cpp b/src/FsMinifilter/FsMinifilter.cpp new file mode 100644 index 0000000..de11314 --- /dev/null +++ b/src/FsMinifilter/FsMinifilter.cpp @@ -0,0 +1,78 @@ +#include "FsMinifilter.h" + +// +// Global minifilter handle +// +extern PFLT_FILTER g_minifilterHandle; + +NTSTATUS FLTAPI InstanceFilterUnloadCallback(_In_ FLT_FILTER_UNLOAD_FLAGS Flags) +{ + // + // This is called before a filter is unloaded. + // If a NULL is specified for this routine then the filter can never be unloaded. + // + + UNREFERENCED_PARAMETER(Flags); + + if (NULL != g_minifilterHandle) + { + FltUnregisterFilter(g_minifilterHandle); + } + + return STATUS_SUCCESS; +} + +NTSTATUS FLTAPI InstanceSetupCallback( + _In_ PCFLT_RELATED_OBJECTS FltObjects, + _In_ FLT_INSTANCE_SETUP_FLAGS Flags, + _In_ DEVICE_TYPE VolumeDeviceType, + _In_ FLT_FILESYSTEM_TYPE VolumeFilesystemType) +{ + // + // This is called to see if a filter would like to attach an instance to the given volume. + // If a NULL is specified for this routine, the attachment is always made. + // + + UNREFERENCED_PARAMETER(FltObjects); + UNREFERENCED_PARAMETER(Flags); + UNREFERENCED_PARAMETER(VolumeDeviceType); + UNREFERENCED_PARAMETER(VolumeFilesystemType); + + return STATUS_SUCCESS; +} + +NTSTATUS FLTAPI InstanceQueryTeardownCallback( + _In_ PCFLT_RELATED_OBJECTS FltObjects, + _In_ FLT_INSTANCE_QUERY_TEARDOWN_FLAGS Flags +) +{ + // + // This is called to see if the filter wants to detach from the given + // volume. This is only called for manual detach requests. + // If a NULL is specified for this routine, then instances can never be manually detached. + // + + UNREFERENCED_PARAMETER(FltObjects); + UNREFERENCED_PARAMETER(Flags); + + return STATUS_SUCCESS; +} + +FLT_PREOP_CALLBACK_STATUS FLTAPI PreOperationCreate( + _Inout_ PFLT_CALLBACK_DATA Data, + _In_ PCFLT_RELATED_OBJECTS FltObjects, + _Flt_CompletionContext_Outptr_ PVOID* CompletionContext +) +{ + // + // Pre-create callback to get file info during creation or opening + // + + UNREFERENCED_PARAMETER(Data); + UNREFERENCED_PARAMETER(FltObjects); + UNREFERENCED_PARAMETER(CompletionContext); + + DbgPrint("%wZ\n", &Data->Iopb->TargetFileObject->FileName); + + return FLT_PREOP_SUCCESS_NO_CALLBACK; +} diff --git a/src/FsMinifilter/FsMinifilter.h b/src/FsMinifilter/FsMinifilter.h new file mode 100644 index 0000000..0d5c98e --- /dev/null +++ b/src/FsMinifilter/FsMinifilter.h @@ -0,0 +1,21 @@ +#pragma once +#include + +NTSTATUS FLTAPI InstanceFilterUnloadCallback(_In_ FLT_FILTER_UNLOAD_FLAGS Flags); + +NTSTATUS FLTAPI InstanceSetupCallback( + _In_ PCFLT_RELATED_OBJECTS FltObjects, + _In_ FLT_INSTANCE_SETUP_FLAGS Flags, + _In_ DEVICE_TYPE VolumeDeviceType, + _In_ FLT_FILESYSTEM_TYPE VolumeFilesystemType); + +NTSTATUS FLTAPI InstanceQueryTeardownCallback( + _In_ PCFLT_RELATED_OBJECTS FltObjects, + _In_ FLT_INSTANCE_QUERY_TEARDOWN_FLAGS Flags +); + +FLT_PREOP_CALLBACK_STATUS FLTAPI PreOperationCreate( + _Inout_ PFLT_CALLBACK_DATA Data, + _In_ PCFLT_RELATED_OBJECTS FltObjects, + _Flt_CompletionContext_Outptr_ PVOID* CompletionContext +); diff --git a/src/FsMinifilter/FsMinifilter.inf b/src/FsMinifilter/FsMinifilter.inf new file mode 100644 index 0000000..088f56e --- /dev/null +++ b/src/FsMinifilter/FsMinifilter.inf @@ -0,0 +1,93 @@ +;;; +;;; FsMinifilter +;;; + +[Version] +Signature = "$Windows NT$" +Class = "Bottom" +ClassGuid = {21D41938-DAA8-4615-86AE-E37344C18BD8} +Provider = %ManufacturerName% +DriverVer = +CatalogFile = FsMinifilter.cat + +[DestinationDirs] +DefaultDestDir = 12 +MiniFilter.DriverFiles = 12 ;%windir%\system32\drivers + +;; +;; Default install sections +;; + +[DefaultInstall] +OptionDesc = %ServiceDescription% +CopyFiles = MiniFilter.DriverFiles + +[DefaultInstall.Services] +AddService = %ServiceName%,,MiniFilter.Service + +;; +;; Default uninstall sections +;; + +[DefaultUninstall] +DelFiles = MiniFilter.DriverFiles + +[DefaultUninstall.Services] +DelService = %ServiceName%,0x200 ;Ensure service is stopped before deleting + +; +; Services Section +; + +[MiniFilter.Service] +DisplayName = %ServiceName% +Description = %ServiceDescription% +ServiceBinary = %12%\%DriverName%.sys ;%windir%\system32\drivers\ +Dependencies = "FltMgr" +ServiceType = 2 ;SERVICE_FILE_SYSTEM_DRIVER +StartType = 3 ;SERVICE_DEMAND_START +ErrorControl = 1 ;SERVICE_ERROR_NORMAL +LoadOrderGroup = "FSFilter Bottom" +AddReg = MiniFilter.AddRegistry + +; +; Registry Modifications +; + +[MiniFilter.AddRegistry] +HKR,,"DebugFlags",0x00010001 ,0x0 +HKR,,"SupportedFeatures",0x00010001,0x3 +HKR,"Instances","DefaultInstance",0x00000000,%DefaultInstance% +HKR,"Instances\"%Instance1.Name%,"Altitude",0x00000000,%Instance1.Altitude% +HKR,"Instances\"%Instance1.Name%,"Flags",0x00010001,%Instance1.Flags% + +; +; Copy Files +; + +[MiniFilter.DriverFiles] +%DriverName%.sys + +[SourceDisksFiles] +FsMinifilter.sys = 1,, + +[SourceDisksNames] +1 = %DiskId1%,,, + +;; +;; String Section +;; + +[Strings] +; TODO - Add your manufacturer +ManufacturerName = "Template" +ServiceDescription = "FsMinifilter Mini-Filter Driver" +ServiceName = "FsMinifilter" +DriverName = "FsMinifilter" +DiskId1 = "FsMinifilter Device Installation Disk" + +;Instances specific information. +DefaultInstance = "FsMinifilter Instance" +Instance1.Name = "FsMinifilter Instance" +Instance1.Altitude = "47777" +Instance1.Flags = 0x0 ; Allow all attachments diff --git a/src/FsMinifilter/FsMinifilter.rc b/src/FsMinifilter/FsMinifilter.rc new file mode 100644 index 0000000..aa21aaf --- /dev/null +++ b/src/FsMinifilter/FsMinifilter.rc @@ -0,0 +1,10 @@ +#include + +#include + +#define VER_FILETYPE VFT_DRV +#define VER_FILESUBTYPE VFT2_DRV_SYSTEM +#define VER_FILEDESCRIPTION_STR "FsMinifilter Filter Driver" +#define VER_INTERNALNAME_STR "FsMinifilter.sys" + +#include "common.ver" diff --git a/src/FsMinifilter/FsMinifilter.vcxproj b/src/FsMinifilter/FsMinifilter.vcxproj new file mode 100644 index 0000000..b9f8a70 --- /dev/null +++ b/src/FsMinifilter/FsMinifilter.vcxproj @@ -0,0 +1,116 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + + + + + {AB9EA1EB-D358-4FDE-B50B-6D0588EFACE3} + {f2f62967-0815-4fd7-9b86-6eedcac766eb} + v4.5 + 12.0 + Debug + Win32 + FsMinifilter + + + + Windows10 + true + WindowsKernelModeDriver10.0 + Driver + WDM + + + Windows10 + false + WindowsKernelModeDriver10.0 + Driver + WDM + + + Windows10 + true + WindowsKernelModeDriver10.0 + Driver + WDM + + + Windows10 + false + WindowsKernelModeDriver10.0 + Driver + WDM + + + + + + + + + + + DbgengKernelDebugger + + + DbgengKernelDebugger + + + DbgengKernelDebugger + + + DbgengKernelDebugger + + + + fltmgr.lib;%(AdditionalDependencies) + + + + + fltmgr.lib;%(AdditionalDependencies) + + + + + fltmgr.lib;%(AdditionalDependencies) + + + + + fltmgr.lib;%(AdditionalDependencies) + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/FsMinifilter/FsMinifilter.vcxproj.filters b/src/FsMinifilter/FsMinifilter.vcxproj.filters new file mode 100644 index 0000000..3ada289 --- /dev/null +++ b/src/FsMinifilter/FsMinifilter.vcxproj.filters @@ -0,0 +1,44 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + {8E41214B-6785-4CFE-B992-037D68949A14} + inf;inv;inx;mof;mc; + + + + + Driver Files + + + + + Resource Files + + + + + Header Files + + + + + Source Files + + + Source Files + + + \ No newline at end of file diff --git a/src/FsMinifilter/Main.cpp b/src/FsMinifilter/Main.cpp new file mode 100644 index 0000000..ea1dea2 --- /dev/null +++ b/src/FsMinifilter/Main.cpp @@ -0,0 +1,73 @@ +#include "FsMinifilter.h" + +// +// The minifilter handle that results from a call to FltRegisterFilter +// NOTE: this handle must be passed to FltUnregisterFilter during minifilter unloading +// +PFLT_FILTER g_minifilterHandle = NULL; + +// +// Constant FLT_REGISTRATION structure for our filter. This +// initializes the callback routines our filter wants to register for. +// This is only used to register with the filter manager +// +CONST FLT_OPERATION_REGISTRATION g_callbacks[] = +{ + { + IRP_MJ_CREATE, + 0, + PreOperationCreate, + 0 + }, + + { IRP_MJ_OPERATION_END } +}; + +// +// The FLT_REGISTRATION structure is used to provide information about +// a file system minifilter to the filter manager. +// +CONST FLT_REGISTRATION g_filterRegistration = +{ + sizeof(FLT_REGISTRATION), // Size + FLT_REGISTRATION_VERSION, // Version + 0, // Flags + NULL, // Context Registration + g_callbacks, // Operation callbacks + InstanceFilterUnloadCallback, // FilterUnload + InstanceSetupCallback, // InstanceSetup + InstanceQueryTeardownCallback, // InstanceQueryTeardown + NULL, // InstanceTeardownStart + NULL, // InstanceTeardownComplete + NULL, // GenerateFileName + NULL, // GenerateDestinationFileName + NULL // NormalizeNameComponent +}; + +EXTERN_C DRIVER_INITIALIZE DriverEntry; + +NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath) +{ + UNREFERENCED_PARAMETER(RegistryPath); + NTSTATUS status = STATUS_SUCCESS; + + // + // register minifilter driver + // + status = FltRegisterFilter(DriverObject, &g_filterRegistration, &g_minifilterHandle); + if (!NT_SUCCESS(status)) + { + return status; + } + + // + // start minifilter driver + // + status = FltStartFiltering(g_minifilterHandle); + if (!NT_SUCCESS(status)) + { + FltUnregisterFilter(g_minifilterHandle); + } + + return status; +} From abc28274ef0e3f41dfba5177a3b4562613b447b2 Mon Sep 17 00:00:00 2001 From: Zakharov Ihor Date: Mon, 4 May 2020 09:25:28 -0700 Subject: [PATCH 2/2] Updated platform configuration settings --- src/FsFilter.sln | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/FsFilter.sln b/src/FsFilter.sln index 7da87f8..2d0162c 100644 --- a/src/FsFilter.sln +++ b/src/FsFilter.sln @@ -21,9 +21,9 @@ Global {140A7CB4-A057-4FEB-9C5A-838ED6C1B921}.Debug|x86.ActiveCfg = Debug|Win32 {140A7CB4-A057-4FEB-9C5A-838ED6C1B921}.Debug|x86.Build.0 = Debug|Win32 {140A7CB4-A057-4FEB-9C5A-838ED6C1B921}.Debug|x86.Deploy.0 = Debug|Win32 - {140A7CB4-A057-4FEB-9C5A-838ED6C1B921}.Release|x64.ActiveCfg = Debug|x64 - {140A7CB4-A057-4FEB-9C5A-838ED6C1B921}.Release|x64.Build.0 = Debug|x64 - {140A7CB4-A057-4FEB-9C5A-838ED6C1B921}.Release|x64.Deploy.0 = Debug|x64 + {140A7CB4-A057-4FEB-9C5A-838ED6C1B921}.Release|x64.ActiveCfg = Release|x64 + {140A7CB4-A057-4FEB-9C5A-838ED6C1B921}.Release|x64.Build.0 = Release|x64 + {140A7CB4-A057-4FEB-9C5A-838ED6C1B921}.Release|x64.Deploy.0 = Release|x64 {140A7CB4-A057-4FEB-9C5A-838ED6C1B921}.Release|x86.ActiveCfg = Release|Win32 {140A7CB4-A057-4FEB-9C5A-838ED6C1B921}.Release|x86.Build.0 = Release|Win32 {140A7CB4-A057-4FEB-9C5A-838ED6C1B921}.Release|x86.Deploy.0 = Release|Win32 @@ -33,9 +33,9 @@ Global {AB9EA1EB-D358-4FDE-B50B-6D0588EFACE3}.Debug|x86.ActiveCfg = Debug|Win32 {AB9EA1EB-D358-4FDE-B50B-6D0588EFACE3}.Debug|x86.Build.0 = Debug|Win32 {AB9EA1EB-D358-4FDE-B50B-6D0588EFACE3}.Debug|x86.Deploy.0 = Debug|Win32 - {AB9EA1EB-D358-4FDE-B50B-6D0588EFACE3}.Release|x64.ActiveCfg = Debug|x64 - {AB9EA1EB-D358-4FDE-B50B-6D0588EFACE3}.Release|x64.Build.0 = Debug|x64 - {AB9EA1EB-D358-4FDE-B50B-6D0588EFACE3}.Release|x64.Deploy.0 = Debug|x64 + {AB9EA1EB-D358-4FDE-B50B-6D0588EFACE3}.Release|x64.ActiveCfg = Release|x64 + {AB9EA1EB-D358-4FDE-B50B-6D0588EFACE3}.Release|x64.Build.0 = Release|x64 + {AB9EA1EB-D358-4FDE-B50B-6D0588EFACE3}.Release|x64.Deploy.0 = Release|x64 {AB9EA1EB-D358-4FDE-B50B-6D0588EFACE3}.Release|x86.ActiveCfg = Release|Win32 {AB9EA1EB-D358-4FDE-B50B-6D0588EFACE3}.Release|x86.Build.0 = Release|Win32 {AB9EA1EB-D358-4FDE-B50B-6D0588EFACE3}.Release|x86.Deploy.0 = Release|Win32