Author: gedmurphy
Date: Tue Sep  6 15:52:38 2016
New Revision: 72591

URL: http://svn.reactos.org/svn/reactos?rev=72591&view=rev
Log:
[FLTLIB]
- On load, open a handle to fltmgr, not the target driver...
- Fixup the load data we send to the fltmgr to be the same Windows layout. We 
need to copy this interface to allow component sharing between windows and ros.
- Move IOCTLs to shared header

Modified:
    trunk/reactos/dll/win32/fltlib/CMakeLists.txt
    trunk/reactos/dll/win32/fltlib/fltlib.c

Modified: trunk/reactos/dll/win32/fltlib/CMakeLists.txt
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/fltlib/CMakeLists.txt?rev=72591&r1=72590&r2=72591&view=diff
==============================================================================
--- trunk/reactos/dll/win32/fltlib/CMakeLists.txt       [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/fltlib/CMakeLists.txt       [iso-8859-1] Tue Sep  6 
15:52:38 2016
@@ -1,7 +1,11 @@
 
 add_definitions(-D__WINESRC__)
-include_directories(${REACTOS_SOURCE_DIR}/sdk/include/reactos/wine)
 spec2def(fltlib.dll fltlib.spec ADD_IMPORTLIB)
+
+include_directories(
+    ${REACTOS_SOURCE_DIR}/sdk/include/reactos/drivers/fltmgr
+    ${REACTOS_SOURCE_DIR}/sdk/include/reactos/wine
+    includes)
 
 list(APPEND SOURCE
     fltlib.c

Modified: trunk/reactos/dll/win32/fltlib/fltlib.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/fltlib/fltlib.c?rev=72591&r1=72590&r2=72591&view=diff
==============================================================================
--- trunk/reactos/dll/win32/fltlib/fltlib.c     [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/fltlib/fltlib.c     [iso-8859-1] Tue Sep  6 
15:52:38 2016
@@ -17,6 +17,7 @@
 #include <ndk/iofuncs.h>
 #include <ndk/obfuncs.h>
 #include <ndk/rtlfuncs.h>
+#include <fltmgr_shared.h>
 
 #include "wine/debug.h"
 
@@ -24,11 +25,6 @@
 /* DATA 
****************************************************************************/
 
 WINE_DEFAULT_DEBUG_CHANNEL(fltlib);
-
-//MOVEME
-#define IOCTL_LOAD_FILTER       CTL_CODE(FILE_DEVICE_DISK_FILE_SYSTEM, 0x01, 
0, FILE_WRITE_DATA) //88004
-#define IOCTL_UNLOAD_FILTER     CTL_CODE(FILE_DEVICE_DISK_FILE_SYSTEM, 0x02, 
0, FILE_WRITE_DATA) //88008
-#define IOCTL_CREATE_FILTER     CTL_CODE(FILE_DEVICE_DISK_FILE_SYSTEM, 0x03, 
0, FILE_READ_DATA)  //8400c
 
 static
 HRESULT
@@ -69,14 +65,15 @@
 FilterLoadUnload(_In_z_ LPCWSTR lpFilterName,
                  _In_ BOOL Load)
 {
-    PUNICODE_STRING FilterName;
+    PFILTER_NAME FilterName;
     HANDLE hFltMgr;
+    DWORD StringLength;
     DWORD BufferLength;
     DWORD dwError;
 
     /* Get a handle to the filter manager */
-    hFltMgr = CreateFileW(lpFilterName,
-                          GENERIC_READ,
+    hFltMgr = CreateFileW(L"\\\\.\\fltmgr",
+                          GENERIC_WRITE,
                           FILE_SHARE_WRITE,
                           NULL,
                           OPEN_EXISTING,
@@ -89,30 +86,31 @@
     }
 
     /* Calc and allocate a buffer to hold our filter name */
-    BufferLength = wcslen(lpFilterName) * sizeof(WCHAR);
+    StringLength = wcslen(lpFilterName) * sizeof(WCHAR);
+    BufferLength = StringLength + sizeof(FILTER_NAME);
     FilterName = RtlAllocateHeap(GetProcessHeap(),
                                  0,
-                                 BufferLength + sizeof(UNICODE_STRING));
+                                 BufferLength);
     if (FilterName == NULL)
     {
         CloseHandle(hFltMgr);
         return HRESULT_FROM_WIN32(ERROR_OUTOFMEMORY);
     }
 
-    /* Build up the filter name into a real life string */
-    FilterName->Buffer = (PWCH)(FilterName + 1);
-    FilterName->Length = BufferLength;
-    FilterName->MaximumLength = BufferLength;
-    RtlCopyMemory(FilterName->Buffer, lpFilterName, BufferLength);
+    /* Build up the filter name */
+    FilterName->Length = StringLength;
+    CopyMemory(FilterName->FilterName, lpFilterName, StringLength);
 
     /* Tell the filter manager to load the filter for us */
     dwError = SendIoctl(hFltMgr,
                         Load ? IOCTL_LOAD_FILTER : IOCTL_UNLOAD_FILTER,
                         FilterName,
-                        BufferLength + sizeof(UNICODE_STRING));
+                        BufferLength);
 
     /* Cleaup and bail*/
+    RtlFreeHeap(GetProcessHeap(), 0, FilterName);
     CloseHandle(hFltMgr);
+
     return HRESULT_FROM_WIN32(dwError);
 }
 


Reply via email to