Hi Alex,

 

Oh I wasn’t aware of that, that’s great.

Thanks for the tip 😊

 

Ged.

 

 

From: Ros-dev [mailto:ros-dev-bounces@reactos.org] On Behalf Of Alex Ionescu
Sent: 19 May 2017 16:28
To: ReactOS Development List <ros-dev@reactos.org>
Subject: Re: [ros-dev] [ros-diffs] [gedmurphy] 74590: [FLTMGR] - Add a rather messy header that I've been slowly building as I'm starting to understand the internals. - Mostly taken from the MS PDBs and info gained from OSR and Alex...

 

Hey Ged,

 

The full internal internal filter manager header was published by microsoft in the "minwin" folder of the TH1 and TH2 WDK+SDK. Same place where Timo and Thomas have been using "ntosp.h" from.


Best regards,
Alex Ionescu

 

On Fri, May 19, 2017 at 2:42 AM, <gedmurphy@svn.reactos.org> wrote:

Author: gedmurphy
Date: Fri May 19 09:42:00 2017
New Revision: 74590

URL: http://svn.reactos.org/svn/reactos?rev=74590&view=rev
Log:
[FLTMGR]
- Add a rather messy header that I've been slowly building as I'm starting to understand the internals.
- Mostly taken from the MS PDBs and info gained from OSR and Alex Carp's blog. (https://fsfilters.blogspot.co.uk)

Added:
    trunk/reactos/drivers/filters/fltmgr/fltmgrint.h   (with props)

Added: trunk/reactos/drivers/filters/fltmgr/fltmgrint.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/filters/fltmgr/fltmgrint.h?rev=74590
==============================================================================
--- trunk/reactos/drivers/filters/fltmgr/fltmgrint.h    (added)
+++ trunk/reactos/drivers/filters/fltmgr/fltmgrint.h    [iso-8859-1] Fri May 19 09:42:00 2017
@@ -0,0 +1,284 @@
+#ifndef _FLTMGR_INTERNAL_H
+#define _FLTMGR_INTERNAL_H
+
+
+#define MAX_CONTEXT_TYPES   6
+
+
+typedef enum _FLT_OBJECT_FLAGS
+{
+    FLT_OBFL_DRAINING = 1,
+    FLT_OBFL_ZOMBIED = 2,
+    FLT_OBFL_TYPE_INSTANCE = 0x1000000,
+    FLT_OBFL_TYPE_FILTER = 0x2000000,
+    FLT_OBFL_TYPE_VOLUME = 0x4000000
+
+} FLT_OBJECT_FLAGS, *PFLT_OBJECT_FLAGS;
+
+typedef enum _FLT_FILTER_FLAGS
+{
+    FLTFL_MANDATORY_UNLOAD_IN_PROGRESS = 1,
+    FLTFL_FILTERING_INITIATED = 2
+
+} FLT_FILTER_FLAGS, *PFLT_FILTER_FLAGS;
+
+typedef struct _FLT_OBJECT   // size = 0x14
+{
+    volatile FLT_OBJECT_FLAGS Flags;
+    ULONG PointerCount;
+    EX_RUNDOWN_REF RundownRef;
+    LIST_ENTRY PrimaryLink;
+
+} FLT_OBJECT, *PFLT_OBJECT;
+
+typedef struct _ALLOCATE_CONTEXT_HEADER
+{
+    PFLT_FILTER Filter;
+    PFLT_CONTEXT_CLEANUP_CALLBACK ContextCleanupCallback;
+    struct _ALLOCATE_CONTEXT_HEADER *Next;
+    FLT_CONTEXT_TYPE ContextType;
+    char Flags;
+    char AllocationType;
+
+} ALLOCATE_CONTEXT_HEADER, *PALLOCATE_CONTEXT_HEADER;
+
+typedef struct _FLT_RESOURCE_LIST_HEAD
+{
+    ERESOURCE rLock;
+    LIST_ENTRY rList;
+    ULONG rCount;
+
+} FLT_RESOURCE_LIST_HEAD, *PFLT_RESOURCE_LIST_HEAD;
+
+typedef struct _FLT_MUTEX_LIST_HEAD
+{
+    FAST_MUTEX mLock;
+    LIST_ENTRY mList;
+    ULONG mCount;
+
+} FLT_MUTEX_LIST_HEAD, *PFLT_MUTEX_LIST_HEAD;
+
+typedef struct _FLT_FILTER   // size = 0x120
+{
+    FLT_OBJECT Base;
+    PVOID Frame;  //FLTP_FRAME
+    UNICODE_STRING Name;
+    UNICODE_STRING DefaultAltitude;
+    FLT_FILTER_FLAGS Flags;
+    PDRIVER_OBJECT DriverObject;
+    FLT_RESOURCE_LIST_HEAD InstanceList;
+    PVOID VerifierExtension;
+    PFLT_FILTER_UNLOAD_CALLBACK FilterUnload;
+    PFLT_INSTANCE_SETUP_CALLBACK InstanceSetup;
+    PFLT_INSTANCE_QUERY_TEARDOWN_CALLBACK InstanceQueryTeardown;
+    PFLT_INSTANCE_TEARDOWN_CALLBACK InstanceTeardownStart;
+    PFLT_INSTANCE_TEARDOWN_CALLBACK InstanceTeardownComplete;
+    PALLOCATE_CONTEXT_HEADER SupportedContextsListHead;
+    PALLOCATE_CONTEXT_HEADER SupportedContexts[MAX_CONTEXT_TYPES];
+    PVOID PreVolumeMount;
+    PVOID PostVolumeMount;
+    PFLT_GENERATE_FILE_NAME GenerateFileName;
+    PFLT_NORMALIZE_NAME_COMPONENT NormalizeNameComponent;
+    PFLT_NORMALIZE_CONTEXT_CLEANUP NormalizeContextCleanup;
+    PFLT_OPERATION_REGISTRATION Operations;
+    PFLT_FILTER_UNLOAD_CALLBACK OldDriverUnload;
+    FLT_MUTEX_LIST_HEAD ActiveOpens;
+    FLT_MUTEX_LIST_HEAD ConnectionList;
+    FLT_MUTEX_LIST_HEAD PortList;
+    EX_PUSH_LOCK PortLock;
+
+}  FLT_FILTER, *PFLT_FILTER;
+
+typedef enum _FLT_yINSTANCE_FLAGS
+{
+    INSFL_CAN_BE_DETACHED = 0x01,
+    INSFL_DELETING = 0x02,
+    INSFL_INITING = 0x04
+
+} FLT_INSTANCE_FLAGS, *PFLT_INSTANCE_FLAGS;
+
+typedef struct _FLT_TYPE
+{
+    USHORT Signature;
+    USHORT Size;
+
+} FLT_TYPE, *PFLT_TYPE;
+
+typedef struct _FLT_INSTANCE   // size = 0x144 (324)
+{
+    FLT_OBJECT Base;
+    ULONG OperationRundownRef;
+    PVOID Volume; //PFLT_VOLUME
+    PFLT_FILTER Filter;
+    FLT_INSTANCE_FLAGS Flags;
+    UNICODE_STRING Altitude;
+    UNICODE_STRING Name;
+    LIST_ENTRY FilterLink;
+    ERESOURCE ContextLock;
+    PVOID Context; //PCONTEXT_NODE
+    PVOID TrackCompletionNodes; //PRACK_COMPLETION_NODES
+    PVOID CallbackNodes[50]; //PCALLBACK_NODE
+
+} FLT_INSTANCE, *PFLT_INSTANCE;
+
+// http://fsfilters.blogspot.co.uk/2010/02/filter-manager-concepts-part-1.html
+typedef struct _FLTP_FRAME
+{
+    FLT_TYPE Type;
+    LIST_ENTRY Links;
+    unsigned int FrameID;
+    ERESOURCE AltitudeLock;
+    UNICODE_STRING AltitudeIntervalLow;
+    UNICODE_STRING AltitudeIntervalHigh;
+    char LargeIrpCtrlStackSize;
+    char SmallIrpCtrlStackSize;
+    FLT_RESOURCE_LIST_HEAD RegisteredFilters;
+    FLT_RESOURCE_LIST_HEAD AttachedVolumes;
+    LIST_ENTRY MountingVolumes;
+    FLT_MUTEX_LIST_HEAD AttachedFileSystems;
+    FLT_MUTEX_LIST_HEAD ZombiedFltObjectContexts;
+    ERESOURCE FilterUnloadLock;
+    FAST_MUTEX DeviceObjectAttachLock;
+    //FLT_PRCB *Prcb;
+    void *PrcbPoolToFree;
+    void *LookasidePoolToFree;
+    //FLTP_IRPCTRL_STACK_PROFILER IrpCtrlStackProfiler;
+    NPAGED_LOOKASIDE_LIST SmallIrpCtrlLookasideList;
+    NPAGED_LOOKASIDE_LIST LargeIrpCtrlLookasideList;
+    //STATIC_IRP_CONTROL GlobalSIC;
+
+} FLTP_FRAME, *PFLTP_FRAME;
+
+
+// http://fsfilters.blogspot.co.uk/2010/02/filter-manager-concepts-part-6.html
+typedef struct _STREAM_LIST_CTRL // size = 0xC8 (200)
+{
+    FLT_TYPE Type;
+    FSRTL_PER_STREAM_CONTEXT ContextCtrl;
+    LIST_ENTRY VolumeLink;
+    //STREAM_LIST_CTRL_FLAGS Flags;
+    int UseCount;
+    ERESOURCE ContextLock;
+    //CONTEXT_LIST_CTRL StreamContexts;
+    //CONTEXT_LIST_CTRL StreamHandleContexts;
+    ERESOURCE NameCacheLock;
+    LARGE_INTEGER LastRenameCompleted;
+    //NAME_CACHE_LIST_CTRL NormalizedNameCache;
+   // NAME_CACHE_LIST_CTRL ShortNameCache;
+   // NAME_CACHE_LIST_CTRL OpenedNameCache;
+    int AllNameContextsTemporary;
+
+} STREAM_LIST_CTRL, *PSTREAM_LIST_CTRL;
+
+
+typedef struct _FLT_SERVER_PORT_OBJECT
+{
+    LIST_ENTRY FilterLink;
+    PFLT_CONNECT_NOTIFY ConnectNotify;
+    PFLT_DISCONNECT_NOTIFY DisconnectNotify;
+    PFLT_MESSAGE_NOTIFY MessageNotify;
+    PFLT_FILTER Filter;
+    PVOID Cookie;
+    ULONG Flags;
+    LONG NumberOfConnections;
+    LONG MaxConnections;
+
+} FLT_SERVER_PORT_OBJECT, *PFLT_SERVER_PORT_OBJECT;
+
+
+typedef struct _FLT_PORT_OBJECT
+{
+    LIST_ENTRY FilterLink;
+    PFLT_SERVER_PORT_OBJECT ServerPort;
+    PVOID Cookie;
+    EX_RUNDOWN_REF MsgNotifRundownRef;
+    FAST_MUTEX Lock;
+    PVOID MsgQ; // FLT_MESSAGE_WAITER_QUEUE MsgQ;
+    ULONGLONG MessageId;
+    KEVENT DisconnectEvent;
+    BOOLEAN Disconnected;
+
+} FLT_PORT_OBJECT, *PFLT_PORT_OBJECT;
+
+
+
+
+
+VOID
+FltpExInitializeRundownProtection(
+    _Out_ PEX_RUNDOWN_REF RundownRef
+);
+
+BOOLEAN
+FltpExAcquireRundownProtection(
+    _Inout_ PEX_RUNDOWN_REF RundownRef
+);
+
+BOOLEAN
+FltpExReleaseRundownProtection(
+    _Inout_ PEX_RUNDOWN_REF RundownRef
+);
+
+NTSTATUS
+NTAPI
+FltpObjectRundownWait(
+    _Inout_ PEX_RUNDOWN_REF RundownRef
+);
+
+BOOLEAN
+FltpExRundownCompleted(
+    _Inout_ PEX_RUNDOWN_REF RundownRef
+);
+
+
+NTSTATUS
+FltpGetBaseDeviceObjectName(
+    _In_ PDEVICE_OBJECT DeviceObject,
+    _Inout_ PUNICODE_STRING ObjectName
+);
+
+NTSTATUS
+FltpGetObjectName(
+    _In_ PVOID Object,
+    _Inout_ PUNICODE_STRING ObjectName
+);
+
+ULONG
+FltpObjectPointerReference(
+    _In_ PFLT_OBJECT Object
+);
+
+VOID
+FltpObjectPointerDereference(
+    _In_ PFLT_OBJECT Object
+);
+
+NTSTATUS
+FltpReallocateUnicodeString(
+    _In_ PUNICODE_STRING String,
+    _In_ SIZE_T NewLength,
+    _In_ BOOLEAN CopyExisting
+);
+
+VOID
+FltpFreeUnicodeString(
+    _In_ PUNICODE_STRING String
+);
+
+
+
+NTSTATUS
+FltpDeviceControlHandler(
+    _In_ PDEVICE_OBJECT DeviceObject,
+    _Inout_ PIRP Irp
+);
+
+NTSTATUS
+FltpDispatchHandler(
+    _In_ PDEVICE_OBJECT DeviceObject,
+    _Inout_ PIRP Irp
+);
+
+
+
+#endif /* _FLTMGR_INTERNAL_H */

Propchange: trunk/reactos/drivers/filters/fltmgr/fltmgrint.h
------------------------------------------------------------------------------
    svn:eol-style = native