2 * PROJECT: Filesystem Filter Manager
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: drivers/filters/fltmgr/Dispatch.c
5 * PURPOSE: Contains dispatch handler routines
6 * PROGRAMMERS: Ged Murphy (gedmurphy@reactos.org)
9 /* INCLUDES ******************************************************************/
12 #include "fltmgrint.h"
13 #include "fltmgr_shared.h"
19 /* DATA *********************************************************************/
22 HandleLoadUnloadIoctl(
23 _In_ PDEVICE_OBJECT DeviceObject
,
29 _In_ PDEVICE_OBJECT DeviceObject
,
34 /* sdsfds *******************************************************************/
37 FltpDeviceControlHandler(_In_ PDEVICE_OBJECT DeviceObject
,
40 PIO_STACK_LOCATION StackPtr
;
44 StackPtr
= IoGetCurrentIrpStackLocation(Irp
);
45 FLT_ASSERT(StackPtr
->MajorFunction
== IRP_MJ_DEVICE_CONTROL
);
47 ControlCode
= StackPtr
->Parameters
.DeviceIoControl
.IoControlCode
;
50 case IOCTL_LOAD_FILTER
:
51 Status
= HandleLoadUnloadIoctl(DeviceObject
, Irp
);
54 case IOCTL_UNLOAD_FILTER
:
55 Status
= HandleLoadUnloadIoctl(DeviceObject
, Irp
);
58 case IOCTL_FIND_FIRST_FILTER
:
59 Status
= HandleFindFirstIoctl(DeviceObject
, Irp
);
63 Status
= STATUS_INVALID_PARAMETER
;
71 FltpDispatchHandler(_In_ PDEVICE_OBJECT DeviceObject
,
74 PIO_STACK_LOCATION StackPtr
;
75 StackPtr
= IoGetCurrentIrpStackLocation(Irp
);
76 UNREFERENCED_PARAMETER(StackPtr
);
80 return STATUS_SUCCESS
;
84 /* INTERNAL FUNCTIONS ******************************************************/
87 HandleLoadUnloadIoctl(_In_ PDEVICE_OBJECT DeviceObject
,
90 PIO_STACK_LOCATION StackPtr
;
92 PFILTER_NAME FilterName
;
96 /* Get the IOCTL data from the stack pointer */
97 StackPtr
= IoGetCurrentIrpStackLocation(Irp
);
98 BufferLength
= StackPtr
->Parameters
.DeviceIoControl
.InputBufferLength
;
99 ControlCode
= StackPtr
->Parameters
.DeviceIoControl
.IoControlCode
;
101 FLT_ASSERT(ControlCode
== IOCTL_LOAD_FILTER
|| ControlCode
== IOCTL_UNLOAD_FILTER
);
103 /* Make sure the buffer is valid */
104 if (BufferLength
< sizeof(FILTER_NAME
))
105 return STATUS_INVALID_PARAMETER
;
107 /* Convert the file name buffer into a string */
108 FilterName
= (PFILTER_NAME
)Irp
->AssociatedIrp
.SystemBuffer
;
109 Name
.Length
= FilterName
->Length
;
110 Name
.MaximumLength
= FilterName
->Length
;
111 Name
.Buffer
= (PWCH
)((PCHAR
)FilterName
+ FIELD_OFFSET(FILTER_NAME
, FilterName
[0]));
113 /* Forward the request to our Flt routines */
114 if (ControlCode
== IOCTL_LOAD_FILTER
)
116 return FltLoadFilter(&Name
);
120 return FltUnloadFilter(&Name
);
125 HandleFindFirstIoctl(_In_ PDEVICE_OBJECT DeviceObject
,
128 return STATUS_NOT_SUPPORTED
;