📄 filter.h
字号:
FilterStateUnspecified,
FilterInitialized,
FilterPausing,
FilterPaused,
FilterRunning,
FilterRestarting,
FilterDetaching
} FILTER_STATE;
typedef struct _FILTER_REQUEST
{
NDIS_OID_REQUEST Request;
NDIS_EVENT ReqEvent;
NDIS_STATUS Status;
} FILTER_REQUEST, *PFILTER_REQUEST;
//
// Define the filter struct
//
typedef struct _MS_FILTER
{
LIST_ENTRY FilterModuleLink;
//Reference to this filter
ULONG RefCount;
NDIS_HANDLE FilterHandle;
NDIS_STRING FilterModuleName;
NDIS_STRING MiniportFriendlyName;
NDIS_STRING MiniportName;
NET_IFINDEX MiniportIfIndex;
NDIS_STATUS Status;
NDIS_EVENT Event;
ULONG BackFillSize;
FILTER_LOCK Lock; // Lock for protection of state and outstanding sends and recvs
FILTER_STATE State; // Which state the filter is in
ULONG Flags; // contains the state of the filter
ULONG OutstandingSends;
ULONG OutstandingRequest;
ULONG OutstandingRcvs;
FILTER_LOCK SendLock;
FILTER_LOCK RcvLock;
QUEUE_HEADER SendNBLQueue;
QUEUE_HEADER RcvNBLQueue;
NDIS_STRING FilterName;
ULONG CallsRestart;
BOOLEAN TrackReceives;
BOOLEAN TrackSends;
#if DBG
BOOLEAN bIndicating;
#endif
PNDIS_OID_REQUEST PendingOidRequest;
}MS_FILTER, * PMS_FILTER;
typedef struct _FILTER_DEVICE_EXTENSION
{
ULONG Signature;
NDIS_HANDLE Handle;
} FILTER_DEVICE_EXTENSION, *PFILTER_DEVICE_EXTENSION;
//
// Macros to set the flags and clear the flags
//
#define FILTER_SET_FLAG(_pFilter, _flag) ((_pFilter)->Flags |= (_flag))
#define FILTER_CLEAR_FLAG(_pFilter, _flag) ((_pFilter)->Flags &= ~(_flag))
#define FILTER_TEST_FLAG(_pFilter, _flag) (((_pFilter)->Flags & (_flag)) != 0)
#define FILTER_READY_TO_PAUSE(_Filter) \
((_Filter)->State == FilterPausing)
//
// The driver should maintain a list of NDIS filter handles
//
typedef struct _FL_NDIS_FILTER_LIST
{
LIST_ENTRY Link;
NDIS_HANDLE ContextHandle;
NDIS_STRING FilterInstanceName;
} FL_NDIS_FILTER_LIST, *PFL_NDIS_FILTER_LIST;
//
// The context inside a cloned request
//
typedef struct _NDIS_OID_REQUEST *FILTER_REQUEST_CONTEXT,**PFILTER_REQUEST_CONTEXT;
//
// function prototypes
//
NDIS_STATUS
DriverEntry(
IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath
);
NDIS_STATUS
FilterRegisterOptions(
IN NDIS_HANDLE NdisFilterDriverHandle,
IN NDIS_HANDLE FilterDriverContext
);
NDIS_STATUS
FilterAttach(
IN NDIS_HANDLE NdisFilterHandle,
IN NDIS_HANDLE FilterDriverContext,
IN PNDIS_FILTER_ATTACH_PARAMETERS AttachParameters
);
VOID
FilterDetach(
IN NDIS_HANDLE FilterInstaceContext
);
DRIVER_UNLOAD FilterUnload;
VOID
FilterUnload(
IN PDRIVER_OBJECT DriverObject
);
NDIS_STATUS
FilterRestart(
IN NDIS_HANDLE FilterModuleContext,
IN PNDIS_FILTER_RESTART_PARAMETERS RestartParameters
);
NDIS_STATUS
FilterPause(
IN NDIS_HANDLE FilterModuleContext,
IN PNDIS_FILTER_PAUSE_PARAMETERS PauseParameters
);
NDIS_STATUS
FilterOidRequest(
IN NDIS_HANDLE FilterModuleContext,
IN PNDIS_OID_REQUEST Request
);
VOID
FilterCancelOidRequest(
IN NDIS_HANDLE FilterModuleContext,
IN PVOID RequestId
);
VOID
FilterStatus(
IN NDIS_HANDLE FilterModuleContext,
IN PNDIS_STATUS_INDICATION StatusIndication
);
VOID
FilterDevicePnPEventNotify(
IN NDIS_HANDLE FilterModuleContext,
IN PNET_DEVICE_PNP_EVENT NetDevicePnPEvent
);
NDIS_STATUS
FilterNetPnPEvent(
IN NDIS_HANDLE FilterModuleContext,
IN PNET_PNP_EVENT_NOTIFICATION NetPnPEventNotification
);
VOID
FilterOidRequestComplete(
IN NDIS_HANDLE FilterModuleContext,
IN PNDIS_OID_REQUEST Request,
IN NDIS_STATUS Status
);
VOID
FilterSendNetBufferLists(
IN NDIS_HANDLE FilterModuleContext,
IN PNET_BUFFER_LIST NetBufferLists,
IN NDIS_PORT_NUMBER PortNumber,
IN ULONG SendFlags
);
VOID
FilterReturnNetBufferLists(
IN NDIS_HANDLE FilterModuleContext,
IN PNET_BUFFER_LIST NetBufferLists,
IN ULONG ReturnFlags
);
VOID
FilterSendNetBufferListsComplete(
IN NDIS_HANDLE FilterModuleContext,
IN PNET_BUFFER_LIST NetBufferLists,
IN ULONG SendCompleteFlags
);
VOID
FilterReceiveNetBufferLists(
IN NDIS_HANDLE FilterModuleContext,
IN PNET_BUFFER_LIST NetBufferLists,
IN NDIS_PORT_NUMBER PortNumber,
IN ULONG NumberOfNetBufferLists,
IN ULONG ReceiveFlags
);
VOID
FilterCancelSendNetBufferLists(
IN NDIS_HANDLE FilterModuleContext,
IN PVOID CancelId
);
NDIS_STATUS
FilterSetModuleOptions(
IN NDIS_HANDLE FilterModuleContext
);
NDIS_STATUS
FilterRegisterDevice(
VOID
);
VOID
FilterDeregisterDevice(
VOID
);
DRIVER_DISPATCH FilterDispatch;
NTSTATUS
FilterDispatch(
IN PDEVICE_OBJECT DeviceObjet,
IN PIRP Irp
);
DRIVER_DISPATCH FilterDeviceIoControl;
NTSTATUS
FilterDeviceIoControl(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
PMS_FILTER
filterFindFilterModule(
IN PUCHAR FilterModuleName,
IN ULONG BufferLength
);
NDIS_STATUS
filterDoInternalRequest(
IN PMS_FILTER FilterModuleContext,
IN NDIS_REQUEST_TYPE RequestType,
IN NDIS_OID Oid,
IN PVOID InformationBuffer,
IN ULONG InformationBufferLength,
IN ULONG OutputBufferLength, OPTIONAL
IN ULONG MethodId, OPTIONAL
OUT PULONG pBytesProcessed
);
VOID
filterInternalRequestComplete(
IN NDIS_HANDLE FilterModuleContext,
IN PNDIS_OID_REQUEST NdisRequest,
IN NDIS_STATUS Status
);
#endif //_FILT_H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -