+++ /dev/null
-/*++\r
-\r
-Copyright (c) 1992-2000 Microsoft Corporation\r
-\r
-Module Name:\r
-\r
- passthru.h\r
-\r
-Abstract:\r
-\r
- Ndis Intermediate Miniport driver sample. This is a passthru driver.\r
-\r
-Author:\r
-\r
-Environment:\r
-\r
-\r
-Revision History:\r
-\r
- \r
---*/\r
-\r
-#ifdef NDIS51_MINIPORT\r
-#define PASSTHRU_MAJOR_NDIS_VERSION 5\r
-#define PASSTHRU_MINOR_NDIS_VERSION 1\r
-#else\r
-#define PASSTHRU_MAJOR_NDIS_VERSION 4\r
-#define PASSTHRU_MINOR_NDIS_VERSION 0\r
-#endif\r
-\r
-#ifdef NDIS51\r
-#define PASSTHRU_PROT_MAJOR_NDIS_VERSION 5\r
-#define PASSTHRU_PROT_MINOR_NDIS_VERSION 0\r
-#else\r
-#define PASSTHRU_PROT_MAJOR_NDIS_VERSION 4\r
-#define PASSTHRU_PROT_MINOR_NDIS_VERSION 0\r
-#endif\r
-\r
-#define MAX_BUNDLEID_LENGTH 50\r
-\r
-#define TAG 'ImPa'\r
-#define WAIT_INFINITE 0\r
-\r
-\r
-\r
-//advance declaration\r
-typedef struct _ADAPT ADAPT, *PADAPT;\r
-\r
-DRIVER_INITIALIZE DriverEntry;\r
-extern\r
-NTSTATUS\r
-DriverEntry(\r
- IN PDRIVER_OBJECT DriverObject,\r
- IN PUNICODE_STRING RegistryPath\r
- );\r
-\r
-DRIVER_DISPATCH PtDispatch;\r
-NTSTATUS\r
-PtDispatch(\r
- IN PDEVICE_OBJECT DeviceObject,\r
- IN PIRP Irp\r
- );\r
-\r
-DRIVER_DISPATCH DevIoControl;\r
-NTSTATUS\r
-DevIoControl(\r
- IN PDEVICE_OBJECT pDeviceObject,\r
- IN PIRP pIrp\r
- );\r
-\r
-NDIS_STATUS\r
-PtRegisterDevice(\r
- VOID\r
- );\r
-\r
-NDIS_STATUS\r
-PtDeregisterDevice(\r
- VOID\r
- );\r
-\r
-DRIVER_UNLOAD PtUnload;\r
-VOID\r
-PtUnloadProtocol(\r
- VOID\r
- );\r
-\r
-//\r
-// Protocol proto-types\r
-//\r
-extern\r
-VOID\r
-PtOpenAdapterComplete(\r
- IN NDIS_HANDLE ProtocolBindingContext,\r
- IN NDIS_STATUS Status,\r
- IN NDIS_STATUS OpenErrorStatus\r
- );\r
-\r
-extern\r
-VOID\r
-PtCloseAdapterComplete(\r
- IN NDIS_HANDLE ProtocolBindingContext,\r
- IN NDIS_STATUS Status\r
- );\r
-\r
-extern\r
-VOID\r
-PtResetComplete(\r
- IN NDIS_HANDLE ProtocolBindingContext,\r
- IN NDIS_STATUS Status\r
- );\r
-\r
-extern\r
-VOID\r
-PtRequestComplete(\r
- IN NDIS_HANDLE ProtocolBindingContext,\r
- IN PNDIS_REQUEST NdisRequest,\r
- IN NDIS_STATUS Status\r
- );\r
-\r
-extern\r
-VOID\r
-PtStatus(\r
- IN NDIS_HANDLE ProtocolBindingContext,\r
- IN NDIS_STATUS GeneralStatus,\r
- IN PVOID StatusBuffer,\r
- IN UINT StatusBufferSize\r
- );\r
-\r
-extern\r
-VOID\r
-PtStatusComplete(\r
- IN NDIS_HANDLE ProtocolBindingContext\r
- );\r
-\r
-extern\r
-VOID\r
-PtSendComplete(\r
- IN NDIS_HANDLE ProtocolBindingContext,\r
- IN PNDIS_PACKET Packet,\r
- IN NDIS_STATUS Status\r
- );\r
-\r
-extern\r
-VOID\r
-PtTransferDataComplete(\r
- IN NDIS_HANDLE ProtocolBindingContext,\r
- IN PNDIS_PACKET Packet,\r
- IN NDIS_STATUS Status,\r
- IN UINT BytesTransferred\r
- );\r
-\r
-extern\r
-NDIS_STATUS\r
-PtReceive(\r
- IN NDIS_HANDLE ProtocolBindingContext,\r
- IN NDIS_HANDLE MacReceiveContext,\r
- IN PVOID HeaderBuffer,\r
- IN UINT HeaderBufferSize,\r
- IN PVOID LookAheadBuffer,\r
- IN UINT LookaheadBufferSize,\r
- IN UINT PacketSize\r
- );\r
-\r
-extern\r
-VOID\r
-PtReceiveComplete(\r
- IN NDIS_HANDLE ProtocolBindingContext\r
- );\r
-\r
-extern\r
-INT\r
-PtReceivePacket(\r
- IN NDIS_HANDLE ProtocolBindingContext,\r
- IN PNDIS_PACKET Packet\r
- );\r
-\r
-extern\r
-VOID\r
-PtBindAdapter(\r
- OUT PNDIS_STATUS Status,\r
- IN NDIS_HANDLE BindContext,\r
- IN PNDIS_STRING DeviceName,\r
- IN PVOID SystemSpecific1,\r
- IN PVOID SystemSpecific2\r
- );\r
-\r
-extern\r
-VOID\r
-PtUnbindAdapter(\r
- OUT PNDIS_STATUS Status,\r
- IN NDIS_HANDLE ProtocolBindingContext,\r
- IN NDIS_HANDLE UnbindContext\r
- );\r
- \r
-VOID\r
-PtUnload(\r
- IN PDRIVER_OBJECT DriverObject\r
- );\r
-\r
-\r
-\r
-extern \r
-NDIS_STATUS\r
-PtPNPHandler(\r
- IN NDIS_HANDLE ProtocolBindingContext,\r
- IN PNET_PNP_EVENT pNetPnPEvent\r
- );\r
-\r
-\r
-\r
-\r
-NDIS_STATUS\r
-PtPnPNetEventReconfigure(\r
- IN PADAPT pAdapt,\r
- IN PNET_PNP_EVENT pNetPnPEvent\r
- ); \r
-\r
-NDIS_STATUS \r
-PtPnPNetEventSetPower (\r
- IN PADAPT pAdapt,\r
- IN PNET_PNP_EVENT pNetPnPEvent\r
- );\r
- \r
-\r
-//\r
-// Miniport proto-types\r
-//\r
-NDIS_STATUS\r
-MPInitialize(\r
- OUT PNDIS_STATUS OpenErrorStatus,\r
- OUT PUINT SelectedMediumIndex,\r
- IN PNDIS_MEDIUM MediumArray,\r
- IN UINT MediumArraySize,\r
- IN NDIS_HANDLE MiniportAdapterHandle,\r
- IN NDIS_HANDLE WrapperConfigurationContext\r
- );\r
-\r
-VOID\r
-MPSendPackets(\r
- IN NDIS_HANDLE MiniportAdapterContext,\r
- IN PPNDIS_PACKET PacketArray,\r
- IN UINT NumberOfPackets\r
- );\r
-\r
-NDIS_STATUS\r
-MPSend(\r
- IN NDIS_HANDLE MiniportAdapterContext,\r
- IN PNDIS_PACKET Packet,\r
- IN UINT Flags\r
- );\r
-\r
-NDIS_STATUS\r
-MPQueryInformation(\r
- IN NDIS_HANDLE MiniportAdapterContext,\r
- IN NDIS_OID Oid,\r
- IN PVOID InformationBuffer,\r
- IN ULONG InformationBufferLength,\r
- OUT PULONG BytesWritten,\r
- OUT PULONG BytesNeeded\r
- );\r
-\r
-NDIS_STATUS\r
-MPSetInformation(\r
- IN NDIS_HANDLE MiniportAdapterContext,\r
- IN NDIS_OID Oid,\r
- __in_bcount(InformationBufferLength) IN PVOID InformationBuffer,\r
- IN ULONG InformationBufferLength,\r
- OUT PULONG BytesRead,\r
- OUT PULONG BytesNeeded\r
- );\r
-\r
-VOID\r
-MPReturnPacket(\r
- IN NDIS_HANDLE MiniportAdapterContext,\r
- IN PNDIS_PACKET Packet\r
- );\r
-\r
-NDIS_STATUS\r
-MPTransferData(\r
- OUT PNDIS_PACKET Packet,\r
- OUT PUINT BytesTransferred,\r
- IN NDIS_HANDLE MiniportAdapterContext,\r
- IN NDIS_HANDLE MiniportReceiveContext,\r
- IN UINT ByteOffset,\r
- IN UINT BytesToTransfer\r
- );\r
-\r
-VOID\r
-MPHalt(\r
- IN NDIS_HANDLE MiniportAdapterContext\r
- );\r
-\r
-\r
-VOID\r
-MPQueryPNPCapabilities( \r
- OUT PADAPT MiniportProtocolContext, \r
- OUT PNDIS_STATUS Status\r
- );\r
-\r
-\r
-#ifdef NDIS51_MINIPORT\r
-\r
-VOID\r
-MPCancelSendPackets(\r
- IN NDIS_HANDLE MiniportAdapterContext,\r
- IN PVOID CancelId\r
- );\r
-\r
-VOID\r
-MPAdapterShutdown(\r
- IN NDIS_HANDLE MiniportAdapterContext\r
- );\r
-\r
-VOID\r
-MPDevicePnPEvent(\r
- IN NDIS_HANDLE MiniportAdapterContext,\r
- IN NDIS_DEVICE_PNP_EVENT DevicePnPEvent,\r
- IN PVOID InformationBuffer,\r
- IN ULONG InformationBufferLength\r
- );\r
-\r
-#endif // NDIS51_MINIPORT\r
-\r
-VOID\r
-MPFreeAllPacketPools(\r
- IN PADAPT pAdapt\r
- );\r
-\r
-\r
-VOID\r
-MPProcessSetPowerOid(\r
- IN OUT PNDIS_STATUS pNdisStatus,\r
- IN PADAPT pAdapt,\r
- __in_bcount(InformationBufferLength) IN PVOID InformationBuffer,\r
- IN ULONG InformationBufferLength,\r
- OUT PULONG BytesRead,\r
- OUT PULONG BytesNeeded\r
- );\r
-\r
-VOID\r
-PtReferenceAdapt(\r
- IN PADAPT pAdapt\r
- );\r
-\r
-BOOLEAN\r
-PtDereferenceAdapt(\r
- IN PADAPT pAdapt\r
- );\r
-\r
-//\r
-// There should be no DbgPrint's in the Free version of the driver\r
-//\r
-#if DBG\r
-\r
-#define DBGPRINT(Fmt) \\r
- { \\r
- DbgPrint("Passthru: "); \
- DbgPrint Fmt; \\r
- }\r
-\r
-#else // if DBG\r
-\r
-#define DBGPRINT(Fmt) \r
-\r
-#endif // if DBG \r
-\r
-#define NUM_PKTS_IN_POOL 256\r
-\r
-\r
-//\r
-// Protocol reserved part of a sent packet that is allocated by us.\r
-//\r
-typedef struct _SEND_RSVD\r
-{\r
- PNDIS_PACKET OriginalPkt;\r
- struct mbuf* pMbuf; // IPFW extension, reference to the mbuf\r
-} SEND_RSVD, *PSEND_RSVD;\r
-\r
-//\r
-// Miniport reserved part of a received packet that is allocated by\r
-// us. Note that this should fit into the MiniportReserved space\r
-// in an NDIS_PACKET.\r
-//\r
-typedef struct _RECV_RSVD\r
-{\r
- PNDIS_PACKET OriginalPkt;\r
- struct mbuf* pMbuf; // IPFW extension, reference to the mbuf\r
-} RECV_RSVD, *PRECV_RSVD;\r
-\r
-C_ASSERT(sizeof(RECV_RSVD) <= sizeof(((PNDIS_PACKET)0)->MiniportReserved));\r
-\r
-//\r
-// Event Codes related to the PassthruEvent Structure\r
-//\r
-\r
-typedef enum \r
-{\r
- Passthru_Invalid,\r
- Passthru_SetPower,\r
- Passthru_Unbind\r
-\r
-} PASSSTHRU_EVENT_CODE, *PPASTHRU_EVENT_CODE; \r
-\r
-//\r
-// Passthru Event with a code to state why they have been state\r
-//\r
-\r
-typedef struct _PASSTHRU_EVENT\r
-{\r
- NDIS_EVENT Event;\r
- PASSSTHRU_EVENT_CODE Code;\r
-\r
-} PASSTHRU_EVENT, *PPASSTHRU_EVENT;\r
-\r
-\r
-//\r
-// Structure used by both the miniport as well as the protocol part of the intermediate driver\r
-// to represent an adapter and its corres. lower bindings\r
-//\r
-typedef struct _ADAPT\r
-{\r
- struct _ADAPT * Next;\r
- \r
- NDIS_HANDLE BindingHandle; // To the lower miniport\r
- NDIS_HANDLE MiniportHandle; // NDIS Handle to for miniport up-calls\r
- NDIS_HANDLE SendPacketPoolHandle;\r
- NDIS_HANDLE RecvPacketPoolHandle;\r
- NDIS_STATUS Status; // Open Status\r
- NDIS_EVENT Event; // Used by bind/halt for Open/Close Adapter synch.\r
- NDIS_MEDIUM Medium;\r
- NDIS_REQUEST Request; // This is used to wrap a request coming down\r
- // to us. This exploits the fact that requests\r
- // are serialized down to us.\r
- PULONG BytesNeeded;\r
- PULONG BytesReadOrWritten;\r
- BOOLEAN ReceivedIndicationFlags[32];\r
- \r
- BOOLEAN OutstandingRequests; // TRUE iff a request is pending\r
- // at the miniport below\r
- BOOLEAN QueuedRequest; // TRUE iff a request is queued at\r
- // this IM miniport\r
-\r
- BOOLEAN StandingBy; // True - When the miniport or protocol is transitioning from a D0 to Standby (>D0) State\r
- BOOLEAN UnbindingInProcess;\r
- NDIS_SPIN_LOCK Lock;\r
- // False - At all other times, - Flag is cleared after a transition to D0\r
-\r
- NDIS_DEVICE_POWER_STATE MPDeviceState; // Miniport's Device State \r
- NDIS_DEVICE_POWER_STATE PTDeviceState; // Protocol's Device State \r
- NDIS_STRING DeviceName; // For initializing the miniport edge\r
- NDIS_EVENT MiniportInitEvent; // For blocking UnbindAdapter while\r
- // an IM Init is in progress.\r
- BOOLEAN MiniportInitPending; // TRUE iff IMInit in progress\r
- NDIS_STATUS LastIndicatedStatus; // The last indicated media status\r
- NDIS_STATUS LatestUnIndicateStatus; // The latest suppressed media status\r
- ULONG OutstandingSends;\r
- LONG RefCount;\r
- BOOLEAN MiniportIsHalted;\r
-} ADAPT, *PADAPT;\r
-\r
-extern NDIS_HANDLE ProtHandle, DriverHandle;\r
-extern NDIS_MEDIUM MediumArray[4];\r
-extern PADAPT pAdaptList;\r
-extern NDIS_SPIN_LOCK GlobalLock;\r
-\r
-\r
-#define ADAPT_MINIPORT_HANDLE(_pAdapt) ((_pAdapt)->MiniportHandle)\r
-#define ADAPT_DECR_PENDING_SENDS(_pAdapt) \\r
- { \\r
- NdisAcquireSpinLock(&(_pAdapt)->Lock); \\r
- (_pAdapt)->OutstandingSends--; \\r
- NdisReleaseSpinLock(&(_pAdapt)->Lock); \\r
- }\r
-\r
-//\r
-// Custom Macros to be used by the passthru driver \r
-//\r
-/*\r
-BOOLEAN\r
-IsIMDeviceStateOn(\r
- PADAPT \r
- )\r
-\r
-*/\r
-#define IsIMDeviceStateOn(_pP) ((_pP)->MPDeviceState == NdisDeviceStateD0 && (_pP)->PTDeviceState == NdisDeviceStateD0 ) \r
-\r
-#include "winmissing.h"\r
-\r
-int ipfw_module_init(void);\r
-void ipfw_module_exit(void);\r
-int ipfw2_qhandler_w32(PNDIS_PACKET pNdisPacket, int direction,\r
- NDIS_HANDLE Context);\r
-int ipfw2_qhandler_w32_oldstyle(int direction, NDIS_HANDLE ProtocolBindingContext,\r
- unsigned char* HeaderBuffer, unsigned int HeaderBufferSize,\r
- unsigned char* LookAheadBuffer, unsigned int LookAheadBufferSize,\r
- unsigned int PacketSize);\r
-void CleanupReinjected(PNDIS_PACKET Packet, struct mbuf* m, PADAPT pAdapt);\r
-void hexdump(PUCHAR,int, const char *);\r
-void my_init();\r
-void my_exit();
\ No newline at end of file