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, <gedmur...@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 > > >
_______________________________________________ Ros-dev mailing list Ros-dev@reactos.org http://www.reactos.org/mailman/listinfo/ros-dev