⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 filter.h

📁 ndis filter 驱动程序源代码,需要的朋友可以看看
💻 H
📖 第 1 页 / 共 2 页
字号:
    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 + -