@@ -46,74 +46,6 @@ PH_FREE_LIST KphpCommsReplyFreeList;
46
46
#define KPH_COMMS_THREAD_SCALE 2
47
47
#define KPH_COMMS_MAX_MESSAGES 1024
48
48
49
- // rev
50
- typedef struct _FILTER_PORT_EA
51
- {
52
- PUNICODE_STRING PortName ;
53
- PUNICODE_STRING64 PortName64 ;
54
- USHORT SizeOfContext ;
55
- BYTE Padding [6 ]; // not-used (uninitialized heap bytes)
56
- BYTE ConnectionContext [ANYSIZE_ARRAY ];
57
- } FILTER_PORT_EA , * PFILTER_PORT_EA ;
58
-
59
- #define FLT_PORT_CONTEXT_MAX 0xFFE8
60
-
61
- // FILE_FULL_EA_INFORMATION (symbols)
62
- typedef struct _FILTER_PORT_FULL_EA
63
- {
64
- ULONG NextEntryOffset ; // 0
65
- UCHAR Flags ; // 0
66
- UCHAR EaNameLength ; // sizeof(FLT_PORT_EA_NAME) - sizeof(ANSI_NULL)
67
- USHORT EaValueLength ; // RTL_SIZEOF_THROUGH_FIELD(FILTER_PORT_EA, Padding) + SizeOfContext
68
- CHAR EaName [8 ]; // FLTPORT\0
69
- FILTER_PORT_EA EaValue ;
70
- } FILTER_PORT_FULL_EA , * PFILTER_PORT_FULL_EA ;
71
-
72
- #define FLT_PORT_EA_NAME "FLTPORT"
73
-
74
- #define FILTER_PORT_EA_SIZE \
75
- (sizeof(FILE_FULL_EA_INFORMATION) + (sizeof(FLT_PORT_EA_NAME) - sizeof(ANSI_NULL)))
76
- #define FILTER_PORT_EA_VALUE_SIZE \
77
- RTL_SIZEOF_THROUGH_FIELD(FILTER_PORT_EA, Padding)
78
- //#define FILTER_PORT_EA_VALUE_OFFSET \
79
- // (FIELD_OFFSET(FILE_FULL_EA_INFORMATION, EaName) + sizeof(FLT_PORT_EA_NAME))
80
- //#define FILTER_PORT_EA_VALUE_SIZE \
81
- // (FIELD_OFFSET(FILTER_PORT_FULL_EA, EaValue.ConnectionContext) - FILTER_PORT_EA_VALUE_OFFSET)
82
-
83
- #ifdef _WIN64
84
- C_ASSERT (FILTER_PORT_EA_SIZE == 19 ); // 0x13
85
- C_ASSERT (FILTER_PORT_EA_VALUE_SIZE == 24 ); // 0x18
86
- C_ASSERT (FIELD_OFFSET (FILTER_PORT_FULL_EA , EaValue .PortName ) == 16 ); // 0x10
87
- C_ASSERT (FIELD_OFFSET (FILTER_PORT_FULL_EA , EaValue .PortName64 ) == 24 ); // 0x18
88
- C_ASSERT (FIELD_OFFSET (FILTER_PORT_FULL_EA , EaValue .SizeOfContext ) == 32 ); // 0x20
89
- C_ASSERT (FIELD_OFFSET (FILTER_PORT_FULL_EA , EaValue .ConnectionContext ) == 40 ); // 0x28
90
- #else
91
- C_ASSERT (FILTER_PORT_EA_SIZE == 19 ); // 0x13
92
- C_ASSERT (FILTER_PORT_EA_VALUE_SIZE == 16 ); // 0x18
93
- C_ASSERT (FIELD_OFFSET (FILTER_PORT_FULL_EA , EaValue .PortName ) == 16 ); // 0x10
94
- C_ASSERT (FIELD_OFFSET (FILTER_PORT_FULL_EA , EaValue .PortName64 ) == 20 ); // 0x14
95
- C_ASSERT (FIELD_OFFSET (FILTER_PORT_FULL_EA , EaValue .SizeOfContext ) == 24 ); // 0x18
96
- C_ASSERT (FIELD_OFFSET (FILTER_PORT_FULL_EA , EaValue .ConnectionContext ) == 32 ); // 0x20
97
- #endif
98
-
99
- typedef struct _FILTER_LOADUNLOAD
100
- {
101
- USHORT Length ;
102
- WCHAR Name [ANYSIZE_ARRAY ];
103
- } FILTER_LOADUNLOAD , * PFILTER_LOADUNLOAD ;
104
-
105
- #define FLT_CTL_LOAD CTL_CODE(FILE_DEVICE_DISK_FILE_SYSTEM, 1, METHOD_BUFFERED, FILE_WRITE_ACCESS)
106
- #define FLT_CTL_UNLOAD CTL_CODE(FILE_DEVICE_DISK_FILE_SYSTEM, 2, METHOD_BUFFERED, FILE_WRITE_ACCESS)
107
- #define FLT_CTL_CREATE CTL_CODE(FILE_DEVICE_DISK_FILE_SYSTEM, 3, METHOD_BUFFERED, FILE_READ_ACCESS)
108
- #define FLT_CTL_ATTACH CTL_CODE(FILE_DEVICE_DISK_FILE_SYSTEM, 4, METHOD_BUFFERED, FILE_WRITE_ACCESS)
109
- #define FLT_CTL_DETATCH CTL_CODE(FILE_DEVICE_DISK_FILE_SYSTEM, 5, METHOD_BUFFERED, FILE_WRITE_ACCESS)
110
- #define FLT_CTL_SEND_MESSAGE CTL_CODE(FILE_DEVICE_DISK_FILE_SYSTEM, 6, METHOD_NEITHER, FILE_WRITE_ACCESS)
111
- #define FLT_CTL_GET_MESSAGE CTL_CODE(FILE_DEVICE_DISK_FILE_SYSTEM, 7, METHOD_NEITHER, FILE_READ_ACCESS)
112
- #define FLT_CTL_REPLY_MESSAGE CTL_CODE(FILE_DEVICE_DISK_FILE_SYSTEM, 8, METHOD_NEITHER, FILE_WRITE_ACCESS)
113
- #define FLT_CTL_FIND_FIRST CTL_CODE(FILE_DEVICE_DISK_FILE_SYSTEM, 9, METHOD_BUFFERED, FILE_READ_ACCESS)
114
- #define FLT_CTL_FIND_NEXT CTL_CODE(FILE_DEVICE_DISK_FILE_SYSTEM, 10, METHOD_BUFFERED, FILE_READ_ACCESS)
115
- #define FLT_CTL_QUERY_INFORMATION CTL_CODE(FILE_DEVICE_DISK_FILE_SYSTEM, 11, METHOD_BUFFERED, FILE_READ_ACCESS)
116
-
117
49
/**
118
50
* \brief Wrapper which is essentially FilterpDeviceIoControl.
119
51
*
@@ -255,7 +187,7 @@ NTSTATUS KphFilterLoadUnload(
255
187
OBJECT_ATTRIBUTES objectAttributes ;
256
188
IO_STATUS_BLOCK ioStatusBlock ;
257
189
ULONG filterNameBufferLength ;
258
- PFILTER_LOADUNLOAD filterNameBuffer ;
190
+ PFLT_LOAD_PARAMETERS filterNameBuffer ;
259
191
SECURITY_QUALITY_OF_SERVICE filterSecurityQos =
260
192
{
261
193
sizeof (SECURITY_QUALITY_OF_SERVICE ),
@@ -264,7 +196,7 @@ NTSTATUS KphFilterLoadUnload(
264
196
TRUE
265
197
};
266
198
267
- RtlInitUnicodeString (& objectName , L"\\FileSystem\\Filters\\FltMgr" );
199
+ RtlInitUnicodeString (& objectName , FLT_MSG_DEVICE_NAME );
268
200
InitializeObjectAttributes (
269
201
& objectAttributes ,
270
202
& objectName ,
@@ -291,10 +223,10 @@ NTSTATUS KphFilterLoadUnload(
291
223
if (!NT_SUCCESS (status ))
292
224
return status ;
293
225
294
- filterNameBufferLength = UFIELD_OFFSET (FILTER_LOADUNLOAD , Name [ServiceName -> Length ]) + sizeof (UNICODE_NULL );
226
+ filterNameBufferLength = UFIELD_OFFSET (FLT_LOAD_PARAMETERS , FilterName [ServiceName -> Length ]) + sizeof (UNICODE_NULL );
295
227
filterNameBuffer = PhAllocateZero (filterNameBufferLength );
296
- filterNameBuffer -> Length = (USHORT )ServiceName -> Length ;
297
- RtlCopyMemory (filterNameBuffer -> Name , ServiceName -> Buffer , ServiceName -> Length );
228
+ filterNameBuffer -> FilterNameSize = (USHORT )ServiceName -> Length ;
229
+ RtlCopyMemory (filterNameBuffer -> FilterName , ServiceName -> Buffer , ServiceName -> Length );
298
230
299
231
status = NtDeviceIoControlFile (
300
232
fileHandle ,
@@ -430,7 +362,7 @@ NTSTATUS KphpFilterConnectCommunicationPort(
430
362
UNICODE_STRING64 portName64 ;
431
363
ULONG eaLength ;
432
364
PFILE_FULL_EA_INFORMATION ea ;
433
- PFILTER_PORT_EA eaValue ;
365
+ PFLT_CONNECT_CONTEXT eaValue ;
434
366
IO_STATUS_BLOCK isb ;
435
367
436
368
* Port = NULL ;
@@ -455,8 +387,8 @@ NTSTATUS KphpFilterConnectCommunicationPort(
455
387
// Build the filter EA, this contains the port name and the context.
456
388
//
457
389
458
- eaLength = FILTER_PORT_EA_SIZE
459
- + FILTER_PORT_EA_VALUE_SIZE
390
+ eaLength = FLT_PORT_FULL_EA_SIZE
391
+ + FLT_PORT_FULL_EA_VALUE_SIZE
460
392
+ SizeOfContext ;
461
393
462
394
ea = PhAllocateZeroSafe (eaLength );
@@ -467,7 +399,7 @@ NTSTATUS KphpFilterConnectCommunicationPort(
467
399
468
400
ea -> Flags = 0 ;
469
401
ea -> EaNameLength = sizeof (FLT_PORT_EA_NAME ) - sizeof (ANSI_NULL );
470
- ea -> EaValueLength = FILTER_PORT_EA_VALUE_SIZE + SizeOfContext ;
402
+ ea -> EaValueLength = FLT_PORT_FULL_EA_VALUE_SIZE + SizeOfContext ;
471
403
RtlCopyMemory (ea -> EaName , FLT_PORT_EA_NAME , sizeof (FLT_PORT_EA_NAME ));
472
404
eaValue = PTR_ADD_OFFSET (ea -> EaName , sizeof (FLT_PORT_EA_NAME ));
473
405
eaValue -> PortName = & portName ;
@@ -476,12 +408,12 @@ NTSTATUS KphpFilterConnectCommunicationPort(
476
408
477
409
if (SizeOfContext > 0 )
478
410
{
479
- RtlCopyMemory (eaValue -> ConnectionContext ,
411
+ RtlCopyMemory (eaValue -> Context ,
480
412
ConnectionContext ,
481
413
SizeOfContext );
482
414
}
483
415
484
- RtlInitUnicodeString (& objectName , L"\\FileSystem\\Filters\\FltMgrMsg" );
416
+ RtlInitUnicodeString (& objectName , FLT_MSG_DEVICE_NAME );
485
417
InitializeObjectAttributes (& objectAttributes ,
486
418
& objectName ,
487
419
OBJ_CASE_INSENSITIVE | (WindowsVersion < WINDOWS_10 ? 0 : OBJ_DONT_REPARSE ),
0 commit comments