--- /dev/null
+/*\r
+ * COPYRIGHT: See COPYING in the top level directory\r
+ * PROJECT: ReactOS NDIS library\r
+ * FILE: include/net/ndis.h\r
+ * PURPOSE: Structures used by NDIS drivers\r
+ * DEFINES: i386 - Target platform is i386\r
+ * NDIS_WRAPPER - Define only for NDIS wrapper library\r
+ * NDIS_MINIPORT_DRIVER - Define only for NDIS miniport drivers\r
+ * BINARY_COMPATIBLE - 0 = Use macros for some features\r
+ * - 1 = Use imports for features not available\r
+ * NDIS40 - Use NDIS 4.0 structures by default\r
+ * NDIS50 - Use NDIS 5.0 structures by default\r
+ */\r
+#ifndef __NDIS_H\r
+#define __NDIS_H\r
+\r
+#ifdef __cplusplus\r
+extern "C"\r
+{\r
+#endif /* __cplusplus */\r
+\r
+#ifdef NDIS50\r
+#undef NDIS40\r
+#define NDIS40\r
+#endif\r
+\r
+\r
+/* Windows 9x compatibillity for miniports on x86 platform */\r
+#ifndef BINARY_COMPATIBLE\r
+#if defined(NDIS_MINIPORT_DRIVER) && defined(i386)\r
+#define BINARY_COMPATIBLE 1\r
+#else\r
+#define BINARY_COMPATIBLE 0\r
+#endif\r
+#endif\r
+\r
+#define UNALIGNED\r
+\r
+\r
+/* The NDIS library export functions. NDIS miniport drivers import functions */\r
+#ifdef NDIS_WRAPPER\r
+\r
+#ifdef _MSC_VER\r
+#define EXPIMP __declspec(dllexport)\r
+#else\r
+#define EXPIMP STDCALL\r
+#endif\r
+\r
+#else /* NDIS_WRAPPER */\r
+\r
+#ifdef _MSC_VER\r
+#define EXPIMP __declspec(dllimport)\r
+#else\r
+#define EXPIMP STDCALL\r
+#endif\r
+\r
+#endif /* NDIS_WRAPPER */\r
+\r
+\r
+\r
+#ifdef NDIS_MINIPORT_DRIVER\r
+\r
+#include "miniport.h"\r
+\r
+#else /* NDIS_MINIPORT_DRIVER */\r
+\r
+#ifdef _MSC_VER\r
+#include <ntddk.h>\r
+\r
+typedef ULONG ULONG_PTR, *PULONG_PTR;\r
+\r
+#else /* _MSC_VER */\r
+#include <ddk/ntddk.h>\r
+\r
+/* FIXME: Missed some definitions in there */\r
+\r
+typedef struct _DMA_CONFIGURATION_BYTE0\r
+{\r
+ UCHAR Channel:3;\r
+ UCHAR Reserved:3;\r
+ UCHAR Shared:1;\r
+ UCHAR MoreEntries:1;\r
+} DMA_CONFIGURATION_BYTE0;\r
+\r
+typedef struct _DMA_CONFIGURATION_BYTE1\r
+{\r
+ UCHAR Reserved0:2;\r
+ UCHAR TransferSize:2;\r
+ UCHAR Timing:2;\r
+ UCHAR Reserved1:2;\r
+} DMA_CONFIGURATION_BYTE1;\r
+\r
+\r
+typedef struct _CM_MCA_POS_DATA\r
+{\r
+ USHORT AdapterId;\r
+ UCHAR PosData1;\r
+ UCHAR PosData2;\r
+ UCHAR PosData3;\r
+ UCHAR PosData4;\r
+} CM_MCA_POS_DATA, *PCM_MCA_POS_DATA;\r
+\r
+typedef struct _EISA_MEMORY_TYPE\r
+{\r
+ UCHAR ReadWrite:1;\r
+ UCHAR Cached:1;\r
+ UCHAR Reserved0:1;\r
+ UCHAR Type:2;\r
+ UCHAR Shared:1;\r
+ UCHAR Reserved1:1;\r
+ UCHAR MoreEntries:1;\r
+} EISA_MEMORY_TYPE, *PEISA_MEMORY_TYPE;\r
+\r
+typedef struct _EISA_MEMORY_CONFIGURATION\r
+{\r
+ EISA_MEMORY_TYPE ConfigurationByte;\r
+ UCHAR DataSize;\r
+ USHORT AddressLowWord;\r
+ UCHAR AddressHighByte;\r
+ USHORT MemorySize;\r
+} EISA_MEMORY_CONFIGURATION, *PEISA_MEMORY_CONFIGURATION;\r
+\r
+\r
+typedef struct _EISA_IRQ_DESCRIPTOR\r
+{\r
+ UCHAR Interrupt:4;\r
+ UCHAR Reserved:1;\r
+ UCHAR LevelTriggered:1;\r
+ UCHAR Shared:1;\r
+ UCHAR MoreEntries:1;\r
+} EISA_IRQ_DESCRIPTOR, *PEISA_IRQ_DESCRIPTOR;\r
+\r
+typedef struct _EISA_IRQ_CONFIGURATION\r
+{\r
+ EISA_IRQ_DESCRIPTOR ConfigurationByte;\r
+ UCHAR Reserved;\r
+} EISA_IRQ_CONFIGURATION, *PEISA_IRQ_CONFIGURATION;\r
+\r
+typedef struct _EISA_DMA_CONFIGURATION\r
+{\r
+ DMA_CONFIGURATION_BYTE0 ConfigurationByte0;\r
+ DMA_CONFIGURATION_BYTE1 ConfigurationByte1;\r
+} EISA_DMA_CONFIGURATION, *PEISA_DMA_CONFIGURATION;\r
+\r
+\r
+typedef struct _EISA_PORT_DESCRIPTOR\r
+{\r
+ UCHAR NumberPorts:5;\r
+ UCHAR Reserved:1;\r
+ UCHAR Shared:1;\r
+ UCHAR MoreEntries:1;\r
+} EISA_PORT_DESCRIPTOR, *PEISA_PORT_DESCRIPTOR;\r
+\r
+typedef struct _EISA_PORT_CONFIGURATION\r
+{\r
+ EISA_PORT_DESCRIPTOR Configuration;\r
+ USHORT PortAddress;\r
+} EISA_PORT_CONFIGURATION, *PEISA_PORT_CONFIGURATION;\r
+\r
+typedef struct _CM_EISA_SLOT_INFORMATION\r
+{\r
+ UCHAR ReturnCode;\r
+ UCHAR ReturnFlags;\r
+ UCHAR MajorRevision;\r
+ UCHAR MinorRevision;\r
+ USHORT Checksum;\r
+ UCHAR NumberFunctions;\r
+ UCHAR FunctionInformation;\r
+ ULONG CompressedId;\r
+} CM_EISA_SLOT_INFORMATION, *PCM_EISA_SLOT_INFORMATION;\r
+\r
+typedef struct _CM_EISA_FUNCTION_INFORMATION\r
+{\r
+ ULONG CompressedId;\r
+ UCHAR IdSlotFlags1;\r
+ UCHAR IdSlotFlags2;\r
+ UCHAR MinorRevision;\r
+ UCHAR MajorRevision;\r
+ UCHAR Selections[26];\r
+ UCHAR FunctionFlags;\r
+ UCHAR TypeString[80];\r
+ EISA_MEMORY_CONFIGURATION EisaMemory[9];\r
+ EISA_IRQ_CONFIGURATION EisaIrq[7];\r
+ EISA_DMA_CONFIGURATION EisaDma[4];\r
+ EISA_PORT_CONFIGURATION EisaPort[20];\r
+ UCHAR InitializationData[60];\r
+} CM_EISA_FUNCTION_INFORMATION, *PCM_EISA_FUNCTION_INFORMATION;\r
+\r
+#endif /* _MSC_VER */\r
+\r
+/* FIXME: Missed some definitions in there */\r
+\r
+typedef CONST CHAR *PCSTR;\r
+\r
+/* Could be defined in tdi.h */\r
+#ifndef __TDI_H\r
+typedef signed int INT, *PINT;\r
+#endif /* __TDI_H */\r
+\r
+#endif /* NDIS_MINIPORT_DRIVER */\r
+\r
+#include "netevent.h"\r
+#include "ndisoid.h"\r
+\r
+\r
+\r
+/* More types */\r
+\r
+typedef ULONG ULONG_PTR, *PULONG_PTR;\r
+\r
+\r
+#if defined(NDIS_MINIPORT_DRIVER) || !defined(_MSC_VER)\r
+\r
+typedef struct _GUID {\r
+ ULONG Data1;\r
+ USHORT Data2;\r
+ USHORT Data3;\r
+ UCHAR Data4[8];\r
+} GUID;\r
+\r
+#endif /* NDIS_MINIPORT_DRIVER || _MSC_VER */\r
+\r
+\r
+/* NDIS base types */\r
+\r
+typedef struct _NDIS_SPIN_LOCK\r
+{\r
+ KSPIN_LOCK SpinLock;\r
+ KIRQL OldIrql;\r
+} NDIS_SPIN_LOCK, * PNDIS_SPIN_LOCK;\r
+\r
+typedef struct _NDIS_EVENT\r
+{\r
+ KEVENT Event;\r
+} NDIS_EVENT, *PNDIS_EVENT;\r
+\r
+typedef PVOID NDIS_HANDLE, *PNDIS_HANDLE;\r
+typedef int NDIS_STATUS, *PNDIS_STATUS;\r
+\r
+typedef UNICODE_STRING NDIS_STRING, *PNDIS_STRING;\r
+\r
+typedef PCSTR NDIS_ANSI_STRING, *PNDIS_ANSI_STRING;\r
+\r
+typedef MDL NDIS_BUFFER, *PNDIS_BUFFER;\r
+\r
+/* NDIS_STATUS constants */\r
+#define NDIS_STATUS_SUCCESS ((NDIS_STATUS)STATUS_SUCCESS)\r
+#define NDIS_STATUS_PENDING ((NDIS_STATUS)STATUS_PENDING)\r
+#define NDIS_STATUS_NOT_RECOGNIZED ((NDIS_STATUS)0x00010001L)\r
+#define NDIS_STATUS_NOT_COPIED ((NDIS_STATUS)0x00010002L)\r
+#define NDIS_STATUS_NOT_ACCEPTED ((NDIS_STATUS)0x00010003L)\r
+#define NDIS_STATUS_CALL_ACTIVE ((NDIS_STATUS)0x00010007L)\r
+\r
+#define NDIS_STATUS_ONLINE ((NDIS_STATUS)0x40010003L)\r
+#define NDIS_STATUS_RESET_START ((NDIS_STATUS)0x40010004L)\r
+#define NDIS_STATUS_RESET_END ((NDIS_STATUS)0x40010005L)\r
+#define NDIS_STATUS_RING_STATUS ((NDIS_STATUS)0x40010006L)\r
+#define NDIS_STATUS_CLOSED ((NDIS_STATUS)0x40010007L)\r
+#define NDIS_STATUS_WAN_LINE_UP ((NDIS_STATUS)0x40010008L)\r
+#define NDIS_STATUS_WAN_LINE_DOWN ((NDIS_STATUS)0x40010009L)\r
+#define NDIS_STATUS_WAN_FRAGMENT ((NDIS_STATUS)0x4001000AL)\r
+#define NDIS_STATUS_MEDIA_CONNECT ((NDIS_STATUS)0x4001000BL)\r
+#define NDIS_STATUS_MEDIA_DISCONNECT ((NDIS_STATUS)0x4001000CL)\r
+#define NDIS_STATUS_HARDWARE_LINE_UP ((NDIS_STATUS)0x4001000DL)\r
+#define NDIS_STATUS_HARDWARE_LINE_DOWN ((NDIS_STATUS)0x4001000EL)\r
+#define NDIS_STATUS_INTERFACE_UP ((NDIS_STATUS)0x4001000FL)\r
+#define NDIS_STATUS_INTERFACE_DOWN ((NDIS_STATUS)0x40010010L)\r
+#define NDIS_STATUS_MEDIA_BUSY ((NDIS_STATUS)0x40010011L)\r
+#define NDIS_STATUS_WW_INDICATION ((NDIS_STATUS)0x40010012L)\r
+#define NDIS_STATUS_TAPI_INDICATION ((NDIS_STATUS)0x40010080L)\r
+\r
+#define NDIS_STATUS_NOT_RESETTABLE ((NDIS_STATUS)0x80010001L)\r
+#define NDIS_STATUS_SOFT_ERRORS ((NDIS_STATUS)0x80010003L)\r
+#define NDIS_STATUS_HARD_ERRORS ((NDIS_STATUS)0x80010004L)\r
+#define NDIS_STATUS_BUFFER_OVERFLOW ((NDIS_STATUS)STATUS_BUFFER_OVERFLOW)\r
+\r
+#define NDIS_STATUS_FAILURE ((NDIS_STATUS)STATUS_UNSUCCESSFUL)\r
+#define NDIS_STATUS_RESOURCES ((NDIS_STATUS)STATUS_INSUFFICIENT_RESOURCES)\r
+#define NDIS_STATUS_CLOSING ((NDIS_STATUS)0xC0010002L)\r
+#define NDIS_STATUS_BAD_VERSION ((NDIS_STATUS)0xC0010004L)\r
+#define NDIS_STATUS_BAD_CHARACTERISTICS ((NDIS_STATUS)0xC0010005L)\r
+#define NDIS_STATUS_ADAPTER_NOT_FOUND ((NDIS_STATUS)0xC0010006L)\r
+#define NDIS_STATUS_OPEN_FAILED ((NDIS_STATUS)0xC0010007L)\r
+#define NDIS_STATUS_DEVICE_FAILED ((NDIS_STATUS)0xC0010008L)\r
+#define NDIS_STATUS_MULTICAST_FULL ((NDIS_STATUS)0xC0010009L)\r
+#define NDIS_STATUS_MULTICAST_EXISTS ((NDIS_STATUS)0xC001000AL)\r
+#define NDIS_STATUS_MULTICAST_NOT_FOUND ((NDIS_STATUS)0xC001000BL)\r
+#define NDIS_STATUS_REQUEST_ABORTED ((NDIS_STATUS)0xC001000CL)\r
+#define NDIS_STATUS_RESET_IN_PROGRESS ((NDIS_STATUS)0xC001000DL)\r
+#define NDIS_STATUS_CLOSING_INDICATING ((NDIS_STATUS)0xC001000EL)\r
+#define NDIS_STATUS_NOT_SUPPORTED ((NDIS_STATUS)STATUS_NOT_SUPPORTED)\r
+#define NDIS_STATUS_INVALID_PACKET ((NDIS_STATUS)0xC001000FL)\r
+#define NDIS_STATUS_OPEN_LIST_FULL ((NDIS_STATUS)0xC0010010L)\r
+#define NDIS_STATUS_ADAPTER_NOT_READY ((NDIS_STATUS)0xC0010011L)\r
+#define NDIS_STATUS_ADAPTER_NOT_OPEN ((NDIS_STATUS)0xC0010012L)\r
+#define NDIS_STATUS_NOT_INDICATING ((NDIS_STATUS)0xC0010013L)\r
+#define NDIS_STATUS_INVALID_LENGTH ((NDIS_STATUS)0xC0010014L)\r
+#define NDIS_STATUS_INVALID_DATA ((NDIS_STATUS)0xC0010015L)\r
+#define NDIS_STATUS_BUFFER_TOO_SHORT ((NDIS_STATUS)0xC0010016L)\r
+#define NDIS_STATUS_INVALID_OID ((NDIS_STATUS)0xC0010017L)\r
+#define NDIS_STATUS_ADAPTER_REMOVED ((NDIS_STATUS)0xC0010018L)\r
+#define NDIS_STATUS_UNSUPPORTED_MEDIA ((NDIS_STATUS)0xC0010019L)\r
+#define NDIS_STATUS_GROUP_ADDRESS_IN_USE ((NDIS_STATUS)0xC001001AL)\r
+#define NDIS_STATUS_FILE_NOT_FOUND ((NDIS_STATUS)0xC001001BL)\r
+#define NDIS_STATUS_ERROR_READING_FILE ((NDIS_STATUS)0xC001001CL)\r
+#define NDIS_STATUS_ALREADY_MAPPED ((NDIS_STATUS)0xC001001DL)\r
+#define NDIS_STATUS_RESOURCE_CONFLICT ((NDIS_STATUS)0xC001001EL)\r
+#define NDIS_STATUS_NO_CABLE ((NDIS_STATUS)0xC001001FL)\r
+\r
+#define NDIS_STATUS_INVALID_SAP ((NDIS_STATUS)0xC0010020L)\r
+#define NDIS_STATUS_SAP_IN_USE ((NDIS_STATUS)0xC0010021L)\r
+#define NDIS_STATUS_INVALID_ADDRESS ((NDIS_STATUS)0xC0010022L)\r
+#define NDIS_STATUS_VC_NOT_ACTIVATED ((NDIS_STATUS)0xC0010023L)\r
+#define NDIS_STATUS_DEST_OUT_OF_ORDER ((NDIS_STATUS)0xC0010024L)\r
+#define NDIS_STATUS_VC_NOT_AVAILABLE ((NDIS_STATUS)0xC0010025L)\r
+#define NDIS_STATUS_CELLRATE_NOT_AVAILABLE ((NDIS_STATUS)0xC0010026L)\r
+#define NDIS_STATUS_INCOMPATABLE_QOS ((NDIS_STATUS)0xC0010027L)\r
+#define NDIS_STATUS_AAL_PARAMS_UNSUPPORTED ((NDIS_STATUS)0xC0010028L)\r
+#define NDIS_STATUS_NO_ROUTE_TO_DESTINATION ((NDIS_STATUS)0xC0010029L)\r
+\r
+#define NDIS_STATUS_TOKEN_RING_OPEN_ERROR ((NDIS_STATUS)0xC0011000L)\r
+\r
+\r
+/* NDIS error codes for error logging */\r
+\r
+#define NDIS_ERROR_CODE ULONG\r
+\r
+#define NDIS_ERROR_CODE_RESOURCE_CONFLICT EVENT_NDIS_RESOURCE_CONFLICT\r
+#define NDIS_ERROR_CODE_OUT_OF_RESOURCES EVENT_NDIS_OUT_OF_RESOURCE\r
+#define NDIS_ERROR_CODE_HARDWARE_FAILURE EVENT_NDIS_HARDWARE_FAILURE\r
+#define NDIS_ERROR_CODE_ADAPTER_NOT_FOUND EVENT_NDIS_ADAPTER_NOT_FOUND\r
+#define NDIS_ERROR_CODE_INTERRUPT_CONNECT EVENT_NDIS_INTERRUPT_CONNECT\r
+#define NDIS_ERROR_CODE_DRIVER_FAILURE EVENT_NDIS_DRIVER_FAILURE\r
+#define NDIS_ERROR_CODE_BAD_VERSION EVENT_NDIS_BAD_VERSION\r
+#define NDIS_ERROR_CODE_TIMEOUT EVENT_NDIS_TIMEOUT\r
+#define NDIS_ERROR_CODE_NETWORK_ADDRESS EVENT_NDIS_NETWORK_ADDRESS\r
+#define NDIS_ERROR_CODE_UNSUPPORTED_CONFIGURATION EVENT_NDIS_UNSUPPORTED_CONFIGURATION\r
+#define NDIS_ERROR_CODE_INVALID_VALUE_FROM_ADAPTER EVENT_NDIS_INVALID_VALUE_FROM_ADAPTER\r
+#define NDIS_ERROR_CODE_MISSING_CONFIGURATION_PARAMETER EVENT_NDIS_MISSING_CONFIGURATION_PARAMETER\r
+#define NDIS_ERROR_CODE_BAD_IO_BASE_ADDRESS EVENT_NDIS_BAD_IO_BASE_ADDRESS\r
+#define NDIS_ERROR_CODE_RECEIVE_SPACE_SMALL EVENT_NDIS_RECEIVE_SPACE_SMALL\r
+#define NDIS_ERROR_CODE_ADAPTER_DISABLED EVENT_NDIS_ADAPTER_DISABLED\r
+\r
+\r
+/* Memory allocation flags. Used by Ndis(Allocate|Free)Memory */\r
+#define NDIS_MEMORY_CONTIGUOUS 0x00000001\r
+#define NDIS_MEMORY_NONCACHED 0x00000002\r
+\r
+/* NIC attribute flags. Used by NdisMSetAttributes(Ex) */\r
+#define NDIS_ATTRIBUTE_IGNORE_PACKET_TIMEOUT 0x00000001\r
+#define NDIS_ATTRIBUTE_IGNORE_REQUEST_TIMEOUT 0x00000002\r
+#define NDIS_ATTRIBUTE_IGNORE_TOKEN_RING_ERRORS 0x00000004\r
+#define NDIS_ATTRIBUTE_BUS_MASTER 0x00000008\r
+#define NDIS_ATTRIBUTE_INTERMEDIATE_DRIVER 0x00000010\r
+\r
+\r
+\r
+#define MAXIMUM_PROCESSORS 32\r
+\r
+\r
+\r
+/* Lock */\r
+\r
+typedef union _NDIS_RW_LOCK_REFCOUNT\r
+{\r
+ UINT RefCount;\r
+ UCHAR cacheLine[16];\r
+} NDIS_RW_LOCK_REFCOUNT;\r
+\r
+typedef struct _NDIS_RW_LOCK\r
+{\r
+ union\r
+ {\r
+ struct\r
+ {\r
+ KSPIN_LOCK SpinLock;\r
+ PVOID Context;\r
+ };\r
+ UCHAR Reserved[16];\r
+ };\r
+\r
+ NDIS_RW_LOCK_REFCOUNT RefCount[MAXIMUM_PROCESSORS];\r
+} NDIS_RW_LOCK, *PNDIS_RW_LOCK;\r
+\r
+typedef struct _LOCK_STATE\r
+{\r
+ USHORT LockState;\r
+ KIRQL OldIrql;\r
+} LOCK_STATE, *PLOCK_STATE;\r
+\r
+\r
+\r
+/* Timer */\r
+\r
+typedef VOID (*PNDIS_TIMER_FUNCTION)(\r
+ IN PVOID SystemSpecific1,\r
+ IN PVOID FunctionContext,\r
+ IN PVOID SystemSpecific2,\r
+ IN PVOID SystemSpecific3);\r
+\r
+typedef struct _NDIS_TIMER\r
+{\r
+ KTIMER Timer;\r
+ KDPC Dpc;\r
+} NDIS_TIMER, *PNDIS_TIMER;\r
+\r
+\r
+\r
+/* Hardware */\r
+\r
+typedef CM_MCA_POS_DATA NDIS_MCA_POS_DATA, *PNDIS_MCA_POS_DATA;\r
+typedef CM_EISA_SLOT_INFORMATION NDIS_EISA_SLOT_INFORMATION, *PNDIS_EISA_SLOT_INFORMATION;\r
+typedef CM_EISA_FUNCTION_INFORMATION NDIS_EISA_FUNCTION_INFORMATION, *PNDIS_EISA_FUNCTION_INFORMATION;\r
+typedef CM_PARTIAL_RESOURCE_LIST NDIS_RESOURCE_LIST, *PNDIS_RESOURCE_LIST;\r
+\r
+/* Hardware status codes (OID_GEN_HARDWARE_STATUS) */\r
+typedef enum _NDIS_HARDWARE_STATUS\r
+{\r
+ NdisHardwareStatusReady,\r
+ NdisHardwareStatusInitializing,\r
+ NdisHardwareStatusReset,\r
+ NdisHardwareStatusClosing,\r
+ NdisHardwareStatusNotReady\r
+} NDIS_HARDWARE_STATUS, *PNDIS_HARDWARE_STATUS;\r
+\r
+/* OID_GEN_GET_TIME_CAPS */\r
+typedef struct _GEN_GET_TIME_CAPS\r
+{\r
+ ULONG Flags;\r
+ ULONG ClockPrecision;\r
+} GEN_GET_TIME_CAPS, *PGEN_GET_TIME_CAPS;\r
+\r
+/* Flag bits */\r
+#define READABLE_LOCAL_CLOCK 0x00000001\r
+#define CLOCK_NETWORK_DERIVED 0x00000002\r
+#define CLOCK_PRECISION 0x00000004\r
+#define RECEIVE_TIME_INDICATION_CAPABLE 0x00000008\r
+#define TIMED_SEND_CAPABLE 0x00000010\r
+#define TIME_STAMP_CAPABLE 0x00000020\r
+\r
+/* OID_GEN_GET_NETCARD_TIME */\r
+typedef struct _GEN_GET_NETCARD_TIME\r
+{\r
+ ULONGLONG ReadTime;\r
+} GEN_GET_NETCARD_TIME, *PGEN_GET_NETCARD_TIME;\r
+\r
+/* NDIS driver medium (OID_GEN_MEDIA_SUPPORTED / OID_GEN_MEDIA_IN_USE) */\r
+typedef enum _NDIS_MEDIUM\r
+{\r
+ NdisMedium802_3,\r
+ NdisMedium802_5,\r
+ NdisMediumFddi,\r
+ NdisMediumWan,\r
+ NdisMediumLocalTalk,\r
+ NdisMediumDix, /* Defined for convenience, not a real medium */\r
+ NdisMediumArcnetRaw,\r
+ NdisMediumArcnet878_2,\r
+ NdisMediumAtm,\r
+ NdisMediumWirelessWan,\r
+ NdisMediumIrda,\r
+ NdisMediumBpc,\r
+ NdisMediumCoWan,\r
+ NdisMedium1394,\r
+ NdisMediumMax\r
+} NDIS_MEDIUM, *PNDIS_MEDIUM;\r
+\r
+/* NDIS packet filter bits (OID_GEN_CURRENT_PACKET_FILTER) */\r
+#define NDIS_PACKET_TYPE_DIRECTED 0x00000001\r
+#define NDIS_PACKET_TYPE_MULTICAST 0x00000002\r
+#define NDIS_PACKET_TYPE_ALL_MULTICAST 0x00000004\r
+#define NDIS_PACKET_TYPE_BROADCAST 0x00000008\r
+#define NDIS_PACKET_TYPE_SOURCE_ROUTING 0x00000010\r
+#define NDIS_PACKET_TYPE_PROMISCUOUS 0x00000020\r
+#define NDIS_PACKET_TYPE_SMT 0x00000040\r
+#define NDIS_PACKET_TYPE_ALL_LOCAL 0x00000080\r
+#define NDIS_PACKET_TYPE_GROUP 0x00001000\r
+#define NDIS_PACKET_TYPE_ALL_FUNCTIONAL 0x00002000\r
+#define NDIS_PACKET_TYPE_FUNCTIONAL 0x00004000\r
+#define NDIS_PACKET_TYPE_MAC_FRAME 0x00008000\r
+\r
+/* NDIS protocol option bits (OID_GEN_PROTOCOL_OPTIONS) */\r
+#define NDIS_PROT_OPTION_ESTIMATED_LENGTH 0x00000001\r
+#define NDIS_PROT_OPTION_NO_LOOPBACK 0x00000002\r
+#define NDIS_PROT_OPTION_NO_RSVD_ON_RCVPKT 0x00000004\r
+\r
+/* NDIS MAC option bits (OID_GEN_MAC_OPTIONS) */\r
+#define NDIS_MAC_OPTION_COPY_LOOKAHEAD_DATA 0x00000001\r
+#define NDIS_MAC_OPTION_RECEIVE_SERIALIZED 0x00000002\r
+#define NDIS_MAC_OPTION_TRANSFERS_NOT_PEND 0x00000004\r
+#define NDIS_MAC_OPTION_NO_LOOPBACK 0x00000008\r
+#define NDIS_MAC_OPTION_FULL_DUPLEX 0x00000010\r
+#define NDIS_MAC_OPTION_EOTX_INDICATION 0x00000020\r
+#define NDIS_MAC_OPTION_8021P_PRIORITY 0x00000040\r
+#define NDIS_MAC_OPTION_RESERVED 0x80000000\r
+\r
+/* State of the LAN media (OID_GEN_MEDIA_CONNECT_STATUS) */\r
+typedef enum _NDIS_MEDIA_STATE\r
+{\r
+ NdisMediaStateConnected,\r
+ NdisMediaStateDisconnected\r
+} NDIS_MEDIA_STATE, *PNDIS_MEDIA_STATE;\r
+\r
+/* OID_GEN_SUPPORTED_GUIDS */\r
+typedef struct _NDIS_GUID\r
+{\r
+ GUID Guid;\r
+ union\r
+ {\r
+ NDIS_OID Oid;\r
+ NDIS_STATUS Status;\r
+ };\r
+ ULONG Size;\r
+ ULONG Flags;\r
+} NDIS_GUID, *PNDIS_GUID;\r
+\r
+#define NDIS_GUID_TO_OID 0x00000001\r
+#define NDIS_GUID_TO_STATUS 0x00000002\r
+#define NDIS_GUID_ANSI_STRING 0x00000004\r
+#define NDIS_GUID_UNICODE_STRING 0x00000008\r
+#define NDIS_GUID_ARRAY 0x00000010\r
+\r
+\r
+\r
+typedef struct _NDIS_PACKET_POOL\r
+{\r
+ NDIS_SPIN_LOCK SpinLock;\r
+ struct _NDIS_PACKET *FreeList;\r
+ UINT PacketLength;\r
+ UCHAR Buffer[1];\r
+} NDIS_PACKET_POOL, * PNDIS_PACKET_POOL;\r
+\r
+typedef struct _NDIS_PACKET_PRIVATE\r
+{\r
+ UINT PhysicalCount;\r
+ UINT TotalLength;\r
+ PNDIS_BUFFER Head;\r
+ PNDIS_BUFFER Tail;\r
+ PNDIS_PACKET_POOL Pool;\r
+ UINT Count;\r
+ ULONG Flags; /* See fPACKET_xxx bits below */\r
+ BOOLEAN ValidCounts;\r
+ UCHAR NdisPacketFlags;\r
+ USHORT NdisPacketOobOffset;\r
+} NDIS_PACKET_PRIVATE, * PNDIS_PACKET_PRIVATE;\r
+\r
+#define fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO 0x40\r
+#define fPACKET_ALLOCATED_BY_NDIS 0x80\r
+\r
+typedef struct _NDIS_PACKET {\r
+ NDIS_PACKET_PRIVATE Private;\r
+ union {\r
+ struct {\r
+ UCHAR MiniportReserved[2*sizeof(PVOID)];\r
+ UCHAR WrapperReserved[2*sizeof(PVOID)];\r
+ };\r
+ struct {\r
+ UCHAR MiniportReservedEx[3*sizeof(PVOID)];\r
+ UCHAR WrapperReservedEx[sizeof(PVOID)];\r
+ };\r
+ struct {\r
+ UCHAR MacReserved[4*sizeof(PVOID)];\r
+ };\r
+ };\r
+ ULONG_PTR Reserved[2];\r
+ UCHAR ProtocolReserved[1];\r
+} NDIS_PACKET, *PNDIS_PACKET, **PPNDIS_PACKET;\r
+\r
+typedef struct _NDIS_PACKET_OOB_DATA {\r
+ union {\r
+ ULONGLONG TimeToSend;\r
+ ULONGLONG TimeSent;\r
+ };\r
+ ULONGLONG TimeReceived;\r
+ UINT HeaderSize;\r
+ UINT SizeMediaSpecificInfo;\r
+ PVOID MediaSpecificInformation;\r
+ NDIS_STATUS Status;\r
+} NDIS_PACKET_OOB_DATA, *PNDIS_PACKET_OOB_DATA;\r
+\r
+typedef struct _NDIS_PM_PACKET_PATTERN\r
+{\r
+ ULONG Priority;\r
+ ULONG Reserved;\r
+ ULONG MaskSize;\r
+ ULONG PatternOffset;\r
+ ULONG PatternSize;\r
+ ULONG PatternFlags;\r
+} NDIS_PM_PACKET_PATTERN, *PNDIS_PM_PACKET_PATTERN;\r
+\r
+\r
+/* Request types used by NdisRequest */\r
+typedef enum _NDIS_REQUEST_TYPE\r
+{\r
+ NdisRequestQueryInformation,\r
+ NdisRequestSetInformation,\r
+ NdisRequestQueryStatistics,\r
+ NdisRequestOpen,\r
+ NdisRequestClose,\r
+ NdisRequestSend,\r
+ NdisRequestTransferData,\r
+ NdisRequestReset,\r
+ NdisRequestGeneric1,\r
+ NdisRequestGeneric2,\r
+ NdisRequestGeneric3,\r
+ NdisRequestGeneric4\r
+} NDIS_REQUEST_TYPE, *PNDIS_REQUEST_TYPE;\r
+\r
+typedef struct _NDIS_REQUEST {\r
+ UCHAR MacReserved[16];\r
+ NDIS_REQUEST_TYPE RequestType;\r
+ union _DATA {\r
+ struct QUERY_INFORMATION {\r
+ NDIS_OID Oid;\r
+ PVOID InformationBuffer;\r
+ UINT InformationBufferLength;\r
+ UINT BytesWritten;\r
+ UINT BytesNeeded;\r
+ } QUERY_INFORMATION;\r
+ struct SET_INFORMATION {\r
+ NDIS_OID Oid;\r
+ PVOID InformationBuffer;\r
+ UINT InformationBufferLength;\r
+ UINT BytesRead;\r
+ UINT BytesNeeded;\r
+ } SET_INFORMATION;\r
+ } DATA;\r
+} NDIS_REQUEST, *PNDIS_REQUEST;\r
+\r
+\r
+\r
+/* Wide Area Networks definitions */\r
+\r
+typedef struct _NDIS_WAN_PACKET\r
+{\r
+ LIST_ENTRY WanPacketQueue;\r
+ PUCHAR CurrentBuffer;\r
+ ULONG CurrentLength;\r
+ PUCHAR StartBuffer;\r
+ PUCHAR EndBuffer;\r
+ PVOID ProtocolReserved1;\r
+ PVOID ProtocolReserved2;\r
+ PVOID ProtocolReserved3;\r
+ PVOID ProtocolReserved4;\r
+ PVOID MacReserved1;\r
+ PVOID MacReserved2;\r
+ PVOID MacReserved3;\r
+ PVOID MacReserved4;\r
+} NDIS_WAN_PACKET, *PNDIS_WAN_PACKET;\r
+\r
+\r
+\r
+/* DMA channel information */\r
+\r
+typedef struct _NDIS_DMA_DESCRIPTION\r
+{\r
+ BOOLEAN DemandMode;\r
+ BOOLEAN AutoInitialize;\r
+ BOOLEAN DmaChannelSpecified;\r
+ DMA_WIDTH DmaWidth;\r
+ DMA_SPEED DmaSpeed;\r
+ ULONG DmaPort;\r
+ ULONG DmaChannel;\r
+} NDIS_DMA_DESCRIPTION, *PNDIS_DMA_DESCRIPTION;\r
+\r
+typedef struct _NDIS_DMA_BLOCK\r
+{\r
+ PVOID MapRegisterBase;\r
+ KEVENT AllocationEvent;\r
+ PADAPTER_OBJECT SystemAdapterObject;\r
+ BOOLEAN InProgress;\r
+} NDIS_DMA_BLOCK, *PNDIS_DMA_BLOCK;\r
+\r
+\r
+/* Possible hardware architecture */\r
+typedef enum _NDIS_INTERFACE_TYPE\r
+{\r
+ NdisInterfaceInternal = Internal,\r
+ NdisInterfaceIsa = Isa,\r
+ NdisInterfaceEisa = Eisa,\r
+ NdisInterfaceMca = MicroChannel,\r
+ NdisInterfaceTurboChannel = TurboChannel,\r
+ NdisInterfacePci = PCIBus,\r
+ NdisInterfacePcMcia = PCMCIABus\r
+} NDIS_INTERFACE_TYPE, *PNDIS_INTERFACE_TYPE;\r
+\r
+#define NdisInterruptLatched Latched\r
+#define NdisInterruptLevelSensitive LevelSensitive\r
+typedef KINTERRUPT_MODE NDIS_INTERRUPT_MODE, *PNDIS_INTERRUPT_MODE;\r
+\r
+\r
+typedef enum _NDIS_PARAMETER_TYPE\r
+{\r
+ NdisParameterInteger,\r
+ NdisParameterHexInteger,\r
+ NdisParameterString,\r
+ NdisParameterMultiString\r
+} NDIS_PARAMETER_TYPE, *PNDIS_PARAMETER_TYPE;\r
+\r
+typedef struct _NDIS_CONFIGURATION_PARAMETER\r
+{\r
+ NDIS_PARAMETER_TYPE ParameterType;\r
+ union\r
+ {\r
+ ULONG IntegerData;\r
+ NDIS_STRING StringData;\r
+ } ParameterData;\r
+} NDIS_CONFIGURATION_PARAMETER, *PNDIS_CONFIGURATION_PARAMETER;\r
+\r
+\r
+typedef PHYSICAL_ADDRESS NDIS_PHYSICAL_ADDRESS, *PNDIS_PHYSICAL_ADDRESS;\r
+\r
+typedef struct _NDIS_PHYSICAL_ADDRESS_UNIT\r
+{\r
+ NDIS_PHYSICAL_ADDRESS PhysicalAddress;\r
+ UINT Length;\r
+} NDIS_PHYSICAL_ADDRESS_UNIT, *PNDIS_PHYSICAL_ADDRESS_UNIT;\r
+\r
+\r
+typedef VOID (*ADAPTER_SHUTDOWN_HANDLER)(\r
+ IN PVOID ShutdownContext);\r
+\r
+\r
+\r
+#if defined(NDIS_WRAPPER) || !defined(NDIS_MINIPORT_DRIVER)\r
+\r
+/* Structures available only to full MAC drivers */\r
+\r
+typedef BOOLEAN (*PNDIS_INTERRUPT_SERVICE)(\r
+ IN PVOID InterruptContext);\r
+\r
+typedef VOID (*PNDIS_DEFERRED_PROCESSING)(\r
+ IN PVOID SystemSpecific1,\r
+ IN PVOID InterruptContext,\r
+ IN PVOID SystemSpecific2,\r
+ IN PVOID SystemSpecific3);\r
+\r
+\r
+typedef struct _NDIS_INTERRUPT\r
+{\r
+ PKINTERRUPT InterruptObject;\r
+ KSPIN_LOCK DpcCountLock;\r
+ PNDIS_INTERRUPT_SERVICE MacIsr;\r
+ PNDIS_DEFERRED_PROCESSING MacDpc;\r
+ KDPC InterruptDpc;\r
+ PVOID InterruptContext;\r
+ UCHAR DpcCount;\r
+ BOOLEAN Removing;\r
+ /* Used to tell when all DPCs for the adapter are completed */\r
+ KEVENT DpcsCompletedEvent;\r
+} NDIS_INTERRUPT, *PNDIS_INTERRUPT;\r
+\r
+\r
+/* NDIS adapter information */\r
+\r
+typedef NDIS_STATUS (*PNDIS_ACTIVATE_CALLBACK)(\r
+ IN NDIS_HANDLE NdisAdatperHandle,\r
+ IN NDIS_HANDLE MacAdapterContext,\r
+ IN ULONG DmaChannel);\r
+\r
+typedef struct _NDIS_PORT_DESCRIPTOR\r
+{\r
+ ULONG InitialPort;\r
+ ULONG NumberOfPorts;\r
+ PVOID * PortOffset;\r
+} NDIS_PORT_DESCRIPTOR, *PNDIS_PORT_DESCRIPTOR;\r
+\r
+typedef struct _NDIS_ADAPTER_INFORMATION\r
+{\r
+ ULONG DmaChannel;\r
+ BOOLEAN Master;\r
+ BOOLEAN Dma32BitAddresses;\r
+ PNDIS_ACTIVATE_CALLBACK ActivateCallback;\r
+ NDIS_INTERFACE_TYPE AdapterType;\r
+ ULONG PhysicalMapRegistersNeeded;\r
+ ULONG MaximumPhysicalMapping;\r
+ ULONG NumberOfPortDescriptors;\r
+ NDIS_PORT_DESCRIPTOR PortDescriptors[1];\r
+} NDIS_ADAPTER_INFORMATION, *PNDIS_ADAPTER_INFORMATION;\r
+\r
+\r
+/* Prototypes for NDIS_MAC_CHARACTERISTICS */\r
+\r
+typedef NDIS_STATUS (*OPEN_ADAPTER_HANDLER)(\r
+ OUT PNDIS_STATUS OpenErrorStatus,\r
+ OUT NDIS_HANDLE * MacBindingHandle,\r
+ OUT PUINT SelectedMediumIndex,\r
+ IN PNDIS_MEDIUM MediumArray,\r
+ IN UINT MediumArraySize,\r
+ IN NDIS_HANDLE NdisBindingContext,\r
+ IN NDIS_HANDLE MacAdapterContext,\r
+ IN UINT OpenOptions,\r
+ IN PSTRING AddressingInformation OPTIONAL);\r
+\r
+typedef NDIS_STATUS (*CLOSE_ADAPTER_HANDLER)(\r
+ IN NDIS_HANDLE MacBindingHandle);\r
+\r
+typedef NDIS_STATUS (*SEND_HANDLER)(\r
+ IN NDIS_HANDLE MacBindingHandle,\r
+ IN PNDIS_PACKET Packet);\r
+\r
+typedef NDIS_STATUS (*WAN_SEND_HANDLER)(\r
+ IN NDIS_HANDLE MacBindingHandle,\r
+ IN PNDIS_WAN_PACKET Packet);\r
+\r
+typedef NDIS_STATUS (*TRANSFER_DATA_HANDLER)(\r
+ IN NDIS_HANDLE MacBindingHandle,\r
+ IN NDIS_HANDLE MacReceiveContext,\r
+ IN UINT ByteOffset,\r
+ IN UINT BytesToTransfer,\r
+ OUT PNDIS_PACKET Packet,\r
+ OUT PUINT BytesTransferred);\r
+\r
+typedef NDIS_STATUS (*WAN_TRANSFER_DATA_HANDLER)(\r
+ VOID);\r
+\r
+typedef NDIS_STATUS (*RESET_HANDLER)(\r
+ IN NDIS_HANDLE MacBindingHandle);\r
+\r
+typedef NDIS_STATUS (*REQUEST_HANDLER)(\r
+ IN NDIS_HANDLE MacBindingHandle,\r
+ IN PNDIS_REQUEST NdisRequest);\r
+\r
+typedef NDIS_STATUS (*QUERY_GLOBAL_STATISTICS_HANDLER)(\r
+ IN NDIS_HANDLE MacAdapterContext,\r
+ IN PNDIS_REQUEST NdisRequest);\r
+\r
+typedef VOID (*UNLOAD_MAC_HANDLER)(\r
+ IN NDIS_HANDLE MacMacContext);\r
+\r
+typedef NDIS_STATUS (*ADD_ADAPTER_HANDLER)(\r
+ IN NDIS_HANDLE MacMacContext,\r
+ IN NDIS_HANDLE WrapperConfigurationContext,\r
+ IN PNDIS_STRING AdapterName);\r
+\r
+typedef VOID (*REMOVE_ADAPTER_HANDLER)(\r
+ IN NDIS_HANDLE MacAdapterContext);\r
+\r
+typedef struct _NDIS_MAC_CHARACTERISTICS\r
+{\r
+ UCHAR MajorNdisVersion;\r
+ UCHAR MinorNdisVersion;\r
+ UINT Reserved;\r
+ OPEN_ADAPTER_HANDLER OpenAdapterHandler;\r
+ CLOSE_ADAPTER_HANDLER CloseAdapterHandler;\r
+ SEND_HANDLER SendHandler;\r
+ TRANSFER_DATA_HANDLER TransferDataHandler;\r
+ RESET_HANDLER ResetHandler;\r
+ REQUEST_HANDLER RequestHandler;\r
+ QUERY_GLOBAL_STATISTICS_HANDLER QueryGlobalStatisticsHandler;\r
+ UNLOAD_MAC_HANDLER UnloadMacHandler;\r
+ ADD_ADAPTER_HANDLER AddAdapterHandler;\r
+ REMOVE_ADAPTER_HANDLER RemoveAdapterHandler;\r
+ NDIS_STRING Name;\r
+} NDIS_MAC_CHARACTERISTICS, *PNDIS_MAC_CHARACTERISTICS;\r
+\r
+typedef NDIS_MAC_CHARACTERISTICS NDIS_WAN_MAC_CHARACTERISTICS;\r
+typedef NDIS_WAN_MAC_CHARACTERISTICS *PNDIS_WAN_MAC_CHARACTERISTICS;\r
+\r
+\r
+\r
+/* Functions available only to full MAC drivers */\r
+\r
+VOID\r
+EXPIMP\r
+NdisAllocateSharedMemory(\r
+ IN NDIS_HANDLE NdisAdapterHandle,\r
+ IN ULONG Length,\r
+ IN BOOLEAN Cached,\r
+ OUT PVOID *VirtualAddress,\r
+ OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);\r
+\r
+VOID\r
+EXPIMP\r
+NdisCompleteCloseAdapter(\r
+ IN NDIS_HANDLE NdisBindingContext,\r
+ IN NDIS_STATUS Status);\r
+\r
+VOID\r
+EXPIMP\r
+NdisCompleteOpenAdapter(\r
+ IN NDIS_HANDLE NdisBindingContext,\r
+ IN NDIS_STATUS Status,\r
+ IN NDIS_STATUS OpenErrorStatus);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisDeregisterAdapter(\r
+ IN NDIS_HANDLE NdisAdapterHandle);\r
+\r
+VOID\r
+EXPIMP\r
+NdisDeregisterAdapterShutdownHandler(\r
+ IN NDIS_HANDLE NdisAdapterHandle);\r
+\r
+VOID\r
+EXPIMP\r
+NdisFreeSharedMemory(\r
+ IN NDIS_HANDLE NdisAdapterHandle,\r
+ IN ULONG Length,\r
+ IN BOOLEAN Cached,\r
+ IN PVOID VirtualAddress,\r
+ IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);\r
+\r
+VOID\r
+EXPIMP\r
+NdisInitializeInterrupt(\r
+ OUT PNDIS_STATUS Status,\r
+ IN OUT PNDIS_INTERRUPT Interrupt,\r
+ IN NDIS_HANDLE NdisAdapterHandle,\r
+ IN PNDIS_INTERRUPT_SERVICE InterruptServiceRoutine,\r
+ IN PVOID InterruptContext,\r
+ IN PNDIS_DEFERRED_PROCESSING DeferredProcessingRoutine,\r
+ IN UINT InterruptVector,\r
+ IN UINT InterruptLevel,\r
+ IN BOOLEAN SharedInterrupt,\r
+ IN NDIS_INTERRUPT_MODE InterruptMode);\r
+\r
+VOID\r
+EXPIMP\r
+NdisMapIoSpace(\r
+ OUT PNDIS_STATUS Status,\r
+ OUT PVOID *VirtualAddress,\r
+ IN NDIS_HANDLE NdisAdapterHandle,\r
+ IN NDIS_PHYSICAL_ADDRESS PhysicalAddress,\r
+ IN UINT Length);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisRegisterAdapter(\r
+ OUT PNDIS_HANDLE NdisAdapterHandle,\r
+ IN NDIS_HANDLE NdisMacHandle,\r
+ IN NDIS_HANDLE MacAdapterContext,\r
+ IN NDIS_HANDLE WrapperConfigurationContext,\r
+ IN PNDIS_STRING AdapterName,\r
+ IN PVOID AdapterInformation);\r
+\r
+VOID\r
+EXPIMP\r
+NdisRegisterAdapterShutdownHandler(\r
+ IN NDIS_HANDLE NdisAdapterHandle,\r
+ IN PVOID ShutdownContext,\r
+ IN ADAPTER_SHUTDOWN_HANDLER ShutdownHandler);\r
+\r
+VOID\r
+EXPIMP\r
+NdisRegisterMac(\r
+ OUT PNDIS_STATUS Status,\r
+ OUT PNDIS_HANDLE NdisMacHandle,\r
+ IN NDIS_HANDLE NdisWrapperHandle,\r
+ IN NDIS_HANDLE MacMacContext,\r
+ IN PNDIS_MAC_CHARACTERISTICS MacCharacteristics,\r
+ IN UINT CharacteristicsLength);\r
+\r
+VOID\r
+EXPIMP\r
+NdisReleaseAdapterResources(\r
+ IN NDIS_HANDLE NdisAdapterHandle);\r
+\r
+VOID\r
+EXPIMP\r
+NdisRemoveInterrupt(\r
+ IN PNDIS_INTERRUPT Interrupt);\r
+\r
+#endif /* NDIS_WRAPPER || !NDIS_MINIPORT_DRIVER */\r
+\r
+\r
+\r
+#ifdef NDIS50\r
+\r
+typedef struct _ATM_ADDRESS ATM_ADDRESS, *PATM_ADDRESS;\r
+\r
+\r
+/* OID_GEN_NETWORK_LAYER_ADDRESSES */\r
+typedef struct _NETWORK_ADDRESS\r
+{\r
+ USHORT AddressLength; \r
+ USHORT AddressType; \r
+ UCHAR Address[1]; \r
+} NETWORK_ADDRESS, *PNETWORK_ADDRESS;\r
+\r
+typedef struct _NETWORK_ADDRESS_LIST \r
+{\r
+ LONG AddressCount; \r
+ USHORT AddressType; \r
+ NETWORK_ADDRESS Address[1]; \r
+} NETWORK_ADDRESS_LIST, *PNETWORK_ADDRESS_LIST;\r
+\r
+/* Protocol types supported by NDIS */\r
+#define NDIS_PROTOCOL_ID_DEFAULT 0x00\r
+#define NDIS_PROTOCOL_ID_TCP_IP 0x02\r
+#define NDIS_PROTOCOL_ID_IPX 0x06\r
+#define NDIS_PROTOCOL_ID_NBF 0x07\r
+#define NDIS_PROTOCOL_ID_MAX 0x0F\r
+#define NDIS_PROTOCOL_ID_MASK 0x0F\r
+\r
+/* OID_GEN_TRANSPORT_HEADER_OFFSET */\r
+typedef struct _TRANSPORT_HEADER_OFFSET\r
+{\r
+ USHORT ProtocolType; \r
+ USHORT HeaderOffset; \r
+} TRANSPORT_HEADER_OFFSET, *PTRANSPORT_HEADER_OFFSET;\r
+\r
+\r
+/* OID_GEN_CO_LINK_SPEED / OID_GEN_CO_MINIMUM_LINK_SPEED */\r
+typedef struct _NDIS_CO_LINK_SPEED\r
+{\r
+ ULONG Outbound;\r
+ ULONG Inbound;\r
+} NDIS_CO_LINK_SPEED, *PNDIS_CO_LINK_SPEED;\r
+\r
+\r
+typedef enum _NDIS_AF\r
+{\r
+ CO_ADDRESS_FAMILY_Q2931 = 1,\r
+ CO_ADDRESS_FAMILY_SPANS,\r
+} NDIS_AF, *PNDIS_AF;\r
+\r
+typedef struct\r
+{\r
+ NDIS_AF AddressFamily;\r
+ ULONG MajorVersion;\r
+ ULONG MinorVersion;\r
+} CO_ADDRESS_FAMILY, *PCO_ADDRESS_FAMILY;\r
+\r
+typedef enum\r
+{\r
+ BestEffortService,\r
+ PredictiveService,\r
+ GuaranteedService\r
+} GUARANTEE;\r
+\r
+typedef struct _CO_FLOW_PARAMETERS\r
+{\r
+ ULONG TokenRate; /* In Bytes/sec */\r
+ ULONG TokenBucketSize; /* In Bytes */\r
+ ULONG PeakBandwidth; /* In Bytes/sec */\r
+ ULONG Latency; /* In microseconds */\r
+ ULONG DelayVariation; /* In microseconds */\r
+ GUARANTEE LevelOfGuarantee; /* Guaranteed, Predictive or Best Effort */\r
+ ULONG CostOfCall; /* Reserved for future use, */\r
+ /* must be set to 0 now */\r
+ ULONG NetworkAvailability; /* read-only: 1 if accessible, 0 if not */\r
+ ULONG MaxSduSize; /* In Bytes */\r
+} CO_FLOW_PARAMETERS, *PCO_FLOW_PARAMETERS;\r
+\r
+typedef struct _CO_SPECIFIC_PARAMETERS\r
+{\r
+ ULONG ParamType;\r
+ ULONG Length;\r
+ UCHAR Parameters[1];\r
+} CO_SPECIFIC_PARAMETERS, *PCO_SPECIFIC_PARAMETERS;\r
+\r
+typedef struct _CO_CALL_MANAGER_PARAMETERS {\r
+ CO_FLOW_PARAMETERS Transmit;\r
+ CO_FLOW_PARAMETERS Receive;\r
+ CO_SPECIFIC_PARAMETERS CallMgrSpecific;\r
+} CO_CALL_MANAGER_PARAMETERS, *PCO_CALL_MANAGER_PARAMETERS;\r
+\r
+typedef struct _CO_MEDIA_PARAMETERS\r
+{\r
+ ULONG Flags;\r
+ ULONG ReceivePriority;\r
+ ULONG ReceiveSizeHint;\r
+ CO_SPECIFIC_PARAMETERS MediaSpecific;\r
+} CO_MEDIA_PARAMETERS, *PCO_MEDIA_PARAMETERS;\r
+\r
+/* Definitions for the flags in CO_MEDIA_PARAMETERS */\r
+#define RECEIVE_TIME_INDICATION 0x00000001\r
+#define USE_TIME_STAMPS 0x00000002\r
+#define TRANSMIT_VC 0x00000004\r
+#define RECEIVE_VC 0x00000008\r
+#define INDICATE_ERRED_PACKETS 0x00000010\r
+#define INDICATE_END_OF_TX 0x00000020\r
+#define RESERVE_RESOURCES_VC 0x00000040\r
+#define ROUND_DOWN_FLOW 0x00000080\r
+#define ROUND_UP_FLOW 0x00000100\r
+\r
+typedef struct _CO_CALL_PARAMETERS\r
+{\r
+ ULONG Flags;\r
+ PCO_CALL_MANAGER_PARAMETERS CallMgrParameters;\r
+ PCO_MEDIA_PARAMETERS MediaParameters;\r
+} CO_CALL_PARAMETERS, *PCO_CALL_PARAMETERS;\r
+\r
+typedef struct _CO_SAP {\r
+ ULONG SapType;\r
+ ULONG SapLength;\r
+ UCHAR Sap[1];\r
+} CO_SAP, *PCO_SAP;\r
+\r
+typedef struct _NDIS_IPSEC_PACKET_INFO\r
+{\r
+ union\r
+ {\r
+ struct\r
+ {\r
+ NDIS_HANDLE OffloadHandle;\r
+ NDIS_HANDLE NextOffloadHandle;\r
+ } Transmit;\r
+ \r
+ struct\r
+ {\r
+ ULONG SA_DELETE_REQ:1;\r
+ ULONG CRYPTO_DONE:1;\r
+ ULONG NEXT_CRYPTO_DONE:1;\r
+ ULONG CryptoStatus;\r
+ } Receive;\r
+ };\r
+} NDIS_IPSEC_PACKET_INFO, *PNDIS_IPSEC_PACKET_INFO;\r
+\r
+\r
+/* Plug and play and power management */\r
+\r
+/* PnP and PM event codes */\r
+typedef enum _NET_PNP_EVENT_CODE\r
+{\r
+ NetEventSetPower,\r
+ NetEventQueryPower,\r
+ NetEventQueryRemoveDevice,\r
+ NetEventCancelRemoveDevice,\r
+ NetEventReconfigure,\r
+ NetEventBindList,\r
+ NetEventBindsComplete,\r
+ NetEventPnPCapabilities,\r
+ NetEventMaximum\r
+} NET_PNP_EVENT_CODE, *PNET_PNP_EVENT_CODE;\r
+\r
+/* Networking PnP event indication structure */\r
+typedef struct _NET_PNP_EVENT\r
+{\r
+ /* Event code */\r
+ NET_PNP_EVENT_CODE NetEvent;\r
+ /* Event specific data */\r
+ PVOID Buffer;\r
+ /* Length of event specific data */\r
+ ULONG BufferLength;\r
+\r
+ /* Reserved areas */\r
+ ULONG_PTR NdisReserved[4];\r
+ ULONG_PTR TransportReserved[4];\r
+ ULONG_PTR TdiReserved[4];\r
+ ULONG_PTR TdiClientReserved[4];\r
+} NET_PNP_EVENT, *PNET_PNP_EVENT;\r
+\r
+/* Device power state structure */\r
+typedef enum _NET_DEVICE_POWER_STATE\r
+{\r
+ NetDeviceStateUnspecified = 0,\r
+ NetDeviceStateD0,\r
+ NetDeviceStateD1,\r
+ NetDeviceStateD2,\r
+ NetDeviceStateD3,\r
+ NetDeviceStateMaximum\r
+} NET_DEVICE_POWER_STATE, *PNET_DEVICE_POWER_STATE;\r
+\r
+\r
+\r
+/* Call Manager */\r
+\r
+typedef NDIS_STATUS (*CO_CREATE_VC_HANDLER)(\r
+ IN NDIS_HANDLE ProtocolAfContext,\r
+ IN NDIS_HANDLE NdisVcHandle,\r
+ OUT PNDIS_HANDLE ProtocolVcContext);\r
+\r
+typedef NDIS_STATUS (*CO_DELETE_VC_HANDLER)(\r
+ IN NDIS_HANDLE ProtocolVcContext);\r
+\r
+typedef NDIS_STATUS (*CO_REQUEST_HANDLER)(\r
+ IN NDIS_HANDLE ProtocolAfContext,\r
+ IN NDIS_HANDLE ProtocolVcContext OPTIONAL,\r
+ IN NDIS_HANDLE ProtocolPartyContext OPTIONAL,\r
+ IN OUT PNDIS_REQUEST NdisRequest);\r
+\r
+typedef VOID (*CO_REQUEST_COMPLETE_HANDLER)(\r
+ IN NDIS_STATUS Status,\r
+ IN NDIS_HANDLE ProtocolAfContext OPTIONAL,\r
+ IN NDIS_HANDLE ProtocolVcContext OPTIONAL,\r
+ IN NDIS_HANDLE ProtocolPartyContext OPTIONAL,\r
+ IN PNDIS_REQUEST NdisRequest);\r
+\r
+\r
+typedef NDIS_STATUS (*CM_OPEN_AF_HANDLER)(\r
+ IN NDIS_HANDLE CallMgrBindingContext,\r
+ IN PCO_ADDRESS_FAMILY AddressFamily,\r
+ IN NDIS_HANDLE NdisAfHandle,\r
+ OUT PNDIS_HANDLE CallMgrAfContext\r
+ );\r
+\r
+typedef\r
+NDIS_STATUS\r
+(*CM_CLOSE_AF_HANDLER)(\r
+ IN NDIS_HANDLE CallMgrAfContext\r
+ );\r
+\r
+typedef\r
+NDIS_STATUS\r
+(*CM_REG_SAP_HANDLER)(\r
+ IN NDIS_HANDLE CallMgrAfContext,\r
+ IN PCO_SAP Sap,\r
+ IN NDIS_HANDLE NdisSapHandle,\r
+ OUT PNDIS_HANDLE CallMgrSapContext\r
+ );\r
+\r
+typedef\r
+NDIS_STATUS\r
+(*CM_DEREG_SAP_HANDLER)(\r
+ IN NDIS_HANDLE CallMgrSapContext\r
+ );\r
+\r
+typedef\r
+NDIS_STATUS\r
+(*CM_MAKE_CALL_HANDLER)(\r
+ IN NDIS_HANDLE CallMgrVcContext,\r
+ IN OUT PCO_CALL_PARAMETERS CallParameters,\r
+ IN NDIS_HANDLE NdisPartyHandle OPTIONAL,\r
+ OUT PNDIS_HANDLE CallMgrPartyContext OPTIONAL\r
+ );\r
+\r
+typedef\r
+NDIS_STATUS\r
+(*CM_CLOSE_CALL_HANDLER)(\r
+ IN NDIS_HANDLE CallMgrVcContext,\r
+ IN NDIS_HANDLE CallMgrPartyContext OPTIONAL,\r
+ IN PVOID CloseData OPTIONAL,\r
+ IN UINT Size OPTIONAL\r
+ );\r
+\r
+typedef\r
+VOID\r
+(*CM_INCOMING_CALL_COMPLETE_HANDLER)(\r
+ IN NDIS_STATUS Status,\r
+ IN NDIS_HANDLE CallMgrVcContext,\r
+ IN PCO_CALL_PARAMETERS CallParameters\r
+ );\r
+\r
+typedef\r
+NDIS_STATUS\r
+(*CM_ADD_PARTY_HANDLER)(\r
+ IN NDIS_HANDLE CallMgrVcContext,\r
+ IN OUT PCO_CALL_PARAMETERS CallParameters,\r
+ IN NDIS_HANDLE NdisPartyHandle,\r
+ OUT PNDIS_HANDLE CallMgrPartyContext\r
+ );\r
+\r
+typedef\r
+NDIS_STATUS\r
+(*CM_DROP_PARTY_HANDLER)(\r
+ IN NDIS_HANDLE CallMgrPartyContext,\r
+ IN PVOID CloseData OPTIONAL,\r
+ IN UINT Size OPTIONAL\r
+ );\r
+\r
+typedef\r
+VOID\r
+(*CM_ACTIVATE_VC_COMPLETE_HANDLER)(\r
+ IN NDIS_STATUS Status,\r
+ IN NDIS_HANDLE CallMgrVcContext,\r
+ IN PCO_CALL_PARAMETERS CallParameters\r
+ );\r
+\r
+typedef\r
+VOID\r
+(*CM_DEACTIVATE_VC_COMPLETE_HANDLER)(\r
+ IN NDIS_STATUS Status,\r
+ IN NDIS_HANDLE CallMgrVcContext\r
+ );\r
+\r
+typedef\r
+NDIS_STATUS\r
+(*CM_MODIFY_CALL_QOS_HANDLER)(\r
+ IN NDIS_HANDLE CallMgrVcContext,\r
+ IN PCO_CALL_PARAMETERS CallParameters\r
+ );\r
+\r
+typedef struct _NDIS_CALL_MANAGER_CHARACTERISTICS\r
+{\r
+ UCHAR MajorVersion;\r
+ UCHAR MinorVersion;\r
+\r
+ USHORT Filler;\r
+ UINT Reserved;\r
+\r
+ CO_CREATE_VC_HANDLER CmCreateVcHandler;\r
+ CO_DELETE_VC_HANDLER CmDeleteVcHandler;\r
+ CM_OPEN_AF_HANDLER CmOpenAfHandler;\r
+ CM_CLOSE_AF_HANDLER CmCloseAfHandler;\r
+ CM_REG_SAP_HANDLER CmRegisterSapHandler;\r
+ CM_DEREG_SAP_HANDLER CmDeregisterSapHandler;\r
+ CM_MAKE_CALL_HANDLER CmMakeCallHandler;\r
+ CM_CLOSE_CALL_HANDLER CmCloseCallHandler;\r
+ CM_INCOMING_CALL_COMPLETE_HANDLER CmIncomingCallCompleteHandler;\r
+ CM_ADD_PARTY_HANDLER CmAddPartyHandler;\r
+ CM_DROP_PARTY_HANDLER CmDropPartyHandler;\r
+ CM_ACTIVATE_VC_COMPLETE_HANDLER CmActivateVcCompleteHandler;\r
+ CM_DEACTIVATE_VC_COMPLETE_HANDLER CmDeactivateVcCompleteHandler;\r
+ CM_MODIFY_CALL_QOS_HANDLER CmModifyCallQoSHandler;\r
+ CO_REQUEST_HANDLER CmRequestHandler;\r
+ CO_REQUEST_COMPLETE_HANDLER CmRequestCompleteHandler;\r
+} NDIS_CALL_MANAGER_CHARACTERISTICS, *PNDIS_CALL_MANAGER_CHARACTERISTICS;\r
+\r
+\r
+\r
+/* Call Manager clients */\r
+\r
+typedef VOID (*CL_OPEN_AF_COMPLETE_HANDLER)(\r
+ IN NDIS_STATUS Status,\r
+ IN NDIS_HANDLE ProtocolAfContext,\r
+ IN NDIS_HANDLE NdisAfHandle);\r
+\r
+typedef VOID (*CL_CLOSE_AF_COMPLETE_HANDLER)(\r
+ IN NDIS_STATUS Status,\r
+ IN NDIS_HANDLE ProtocolAfContext);\r
+\r
+typedef VOID (*CL_REG_SAP_COMPLETE_HANDLER)(\r
+ IN NDIS_STATUS Status,\r
+ IN NDIS_HANDLE ProtocolSapContext,\r
+ IN PCO_SAP Sap,\r
+ IN NDIS_HANDLE NdisSapHandle);\r
+\r
+typedef VOID (*CL_DEREG_SAP_COMPLETE_HANDLER)(\r
+ IN NDIS_STATUS Status,\r
+ IN NDIS_HANDLE ProtocolSapContext);\r
+\r
+typedef VOID (*CL_MAKE_CALL_COMPLETE_HANDLER)(\r
+ IN NDIS_STATUS Status,\r
+ IN NDIS_HANDLE ProtocolVcContext,\r
+ IN NDIS_HANDLE NdisPartyHandle OPTIONAL,\r
+ IN PCO_CALL_PARAMETERS CallParameters);\r
+\r
+typedef VOID (*CL_MODIFY_CALL_QOS_COMPLETE_HANDLER)(\r
+ IN NDIS_STATUS Status,\r
+ IN NDIS_HANDLE ProtocolVcContext,\r
+ IN PCO_CALL_PARAMETERS CallParameters);\r
+\r
+typedef VOID (*CL_CLOSE_CALL_COMPLETE_HANDLER)(\r
+ IN NDIS_STATUS Status,\r
+ IN NDIS_HANDLE ProtocolVcContext,\r
+ IN NDIS_HANDLE ProtocolPartyContext OPTIONAL);\r
+\r
+typedef VOID (*CL_ADD_PARTY_COMPLETE_HANDLER)(\r
+ IN NDIS_STATUS Status,\r
+ IN NDIS_HANDLE ProtocolPartyContext,\r
+ IN NDIS_HANDLE NdisPartyHandle,\r
+ IN PCO_CALL_PARAMETERS CallParameters);\r
+\r
+typedef VOID (*CL_DROP_PARTY_COMPLETE_HANDLER)(\r
+ IN NDIS_STATUS Status,\r
+ IN NDIS_HANDLE ProtocolPartyContext);\r
+\r
+typedef NDIS_STATUS (*CL_INCOMING_CALL_HANDLER)(\r
+ IN NDIS_HANDLE ProtocolSapContext,\r
+ IN NDIS_HANDLE ProtocolVcContext,\r
+ IN OUT PCO_CALL_PARAMETERS CallParameters);\r
+\r
+typedef VOID (*CL_INCOMING_CALL_QOS_CHANGE_HANDLER)(\r
+ IN NDIS_HANDLE ProtocolVcContext,\r
+ IN PCO_CALL_PARAMETERS CallParameters);\r
+\r
+typedef VOID (*CL_INCOMING_CLOSE_CALL_HANDLER)(\r
+ IN NDIS_STATUS CloseStatus,\r
+ IN NDIS_HANDLE ProtocolVcContext,\r
+ IN PVOID CloseData OPTIONAL,\r
+ IN UINT Size OPTIONAL);\r
+\r
+typedef VOID (*CL_INCOMING_DROP_PARTY_HANDLER)(\r
+ IN NDIS_STATUS DropStatus,\r
+ IN NDIS_HANDLE ProtocolPartyContext,\r
+ IN PVOID CloseData OPTIONAL,\r
+ IN UINT Size OPTIONAL);\r
+\r
+typedef VOID (*CL_CALL_CONNECTED_HANDLER)(\r
+ IN NDIS_HANDLE ProtocolVcContext);\r
+\r
+\r
+typedef struct _NDIS_CLIENT_CHARACTERISTICS\r
+{\r
+ UCHAR MajorVersion;\r
+ UCHAR MinorVersion;\r
+\r
+ USHORT Filler;\r
+ UINT Reserved;\r
+\r
+ CO_CREATE_VC_HANDLER ClCreateVcHandler;\r
+ CO_DELETE_VC_HANDLER ClDeleteVcHandler;\r
+ CO_REQUEST_HANDLER ClRequestHandler;\r
+ CO_REQUEST_COMPLETE_HANDLER ClRequestCompleteHandler;\r
+ CL_OPEN_AF_COMPLETE_HANDLER ClOpenAfCompleteHandler;\r
+ CL_CLOSE_AF_COMPLETE_HANDLER ClCloseAfCompleteHandler;\r
+ CL_REG_SAP_COMPLETE_HANDLER ClRegisterSapCompleteHandler;\r
+ CL_DEREG_SAP_COMPLETE_HANDLER ClDeregisterSapCompleteHandler;\r
+ CL_MAKE_CALL_COMPLETE_HANDLER ClMakeCallCompleteHandler;\r
+ CL_MODIFY_CALL_QOS_COMPLETE_HANDLER ClModifyCallQoSCompleteHandler;\r
+ CL_CLOSE_CALL_COMPLETE_HANDLER ClCloseCallCompleteHandler;\r
+ CL_ADD_PARTY_COMPLETE_HANDLER ClAddPartyCompleteHandler;\r
+ CL_DROP_PARTY_COMPLETE_HANDLER ClDropPartyCompleteHandler;\r
+ CL_INCOMING_CALL_HANDLER ClIncomingCallHandler;\r
+ CL_INCOMING_CALL_QOS_CHANGE_HANDLER ClIncomingCallQoSChangeHandler;\r
+ CL_INCOMING_CLOSE_CALL_HANDLER ClIncomingCloseCallHandler;\r
+ CL_INCOMING_DROP_PARTY_HANDLER ClIncomingDropPartyHandler;\r
+ CL_CALL_CONNECTED_HANDLER ClCallConnectedHandler;\r
+} NDIS_CLIENT_CHARACTERISTICS, *PNDIS_CLIENT_CHARACTERISTICS;\r
+\r
+#endif /* NDIS50 */\r
+\r
+\r
+\r
+/* NDIS protocol structures */\r
+\r
+/* Prototypes for NDIS 3.0 protocol characteristics */\r
+\r
+typedef VOID (*OPEN_ADAPTER_COMPLETE_HANDLER)(\r
+ IN NDIS_HANDLE ProtocolBindingContext,\r
+ IN NDIS_STATUS Status,\r
+ IN NDIS_STATUS OpenErrorStatus);\r
+\r
+typedef VOID (*CLOSE_ADAPTER_COMPLETE_HANDLER)(\r
+ IN NDIS_HANDLE ProtocolBindingContext,\r
+ IN NDIS_STATUS Status);\r
+\r
+typedef VOID (*RESET_COMPLETE_HANDLER)(\r
+ IN NDIS_HANDLE ProtocolBindingContext,\r
+ IN NDIS_STATUS Status);\r
+\r
+typedef VOID (*REQUEST_COMPLETE_HANDLER)(\r
+ IN NDIS_HANDLE ProtocolBindingContext,\r
+ IN PNDIS_REQUEST NdisRequest,\r
+ IN NDIS_STATUS Status);\r
+\r
+typedef VOID (*STATUS_HANDLER)(\r
+ IN NDIS_HANDLE ProtocolBindingContext,\r
+ IN NDIS_STATUS GeneralStatus,\r
+ IN PVOID StatusBuffer,\r
+ IN UINT StatusBufferSize);\r
+\r
+typedef VOID (*STATUS_COMPLETE_HANDLER)(\r
+ IN NDIS_HANDLE ProtocolBindingContext);\r
+\r
+typedef VOID (*SEND_COMPLETE_HANDLER)(\r
+ IN NDIS_HANDLE ProtocolBindingContext,\r
+ IN PNDIS_PACKET Packet,\r
+ IN NDIS_STATUS Status);\r
+\r
+typedef VOID (*WAN_SEND_COMPLETE_HANDLER)(\r
+ IN NDIS_HANDLE ProtocolBindingContext,\r
+ IN PNDIS_WAN_PACKET Packet,\r
+ IN NDIS_STATUS Status);\r
+\r
+typedef VOID (*TRANSFER_DATA_COMPLETE_HANDLER)(\r
+ IN NDIS_HANDLE ProtocolBindingContext,\r
+ IN PNDIS_PACKET Packet,\r
+ IN NDIS_STATUS Status,\r
+ IN UINT BytesTransferred);\r
+\r
+typedef VOID (*WAN_TRANSFER_DATA_COMPLETE_HANDLER)(\r
+ VOID);\r
+\r
+typedef NDIS_STATUS (*RECEIVE_HANDLER)(\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
+typedef NDIS_STATUS (*WAN_RECEIVE_HANDLER)(\r
+ IN NDIS_HANDLE NdisLinkHandle,\r
+ IN PUCHAR Packet,\r
+ IN ULONG PacketSize);\r
+\r
+typedef VOID (*RECEIVE_COMPLETE_HANDLER)(\r
+ IN NDIS_HANDLE ProtocolBindingContext);\r
+\r
+\r
+/* Protocol characteristics for NDIS 3.0 protocols */\r
+typedef struct _NDIS30_PROTOCOL_CHARACTERISTICS\r
+{\r
+ UCHAR MajorNdisVersion;\r
+ UCHAR MinorNdisVersion;\r
+ union\r
+ {\r
+ UINT Reserved;\r
+ UINT Flags;\r
+ };\r
+ OPEN_ADAPTER_COMPLETE_HANDLER OpenAdapterCompleteHandler;\r
+ CLOSE_ADAPTER_COMPLETE_HANDLER CloseAdapterCompleteHandler;\r
+ union\r
+ {\r
+ SEND_COMPLETE_HANDLER SendCompleteHandler;\r
+ WAN_SEND_COMPLETE_HANDLER WanSendCompleteHandler;\r
+ };\r
+ union\r
+ {\r
+ TRANSFER_DATA_COMPLETE_HANDLER TransferDataCompleteHandler;\r
+ WAN_TRANSFER_DATA_COMPLETE_HANDLER WanTransferDataCompleteHandler;\r
+ };\r
+\r
+ RESET_COMPLETE_HANDLER ResetCompleteHandler;\r
+ REQUEST_COMPLETE_HANDLER RequestCompleteHandler;\r
+ union\r
+ {\r
+ RECEIVE_HANDLER ReceiveHandler;\r
+ WAN_RECEIVE_HANDLER WanReceiveHandler;\r
+ };\r
+ RECEIVE_COMPLETE_HANDLER ReceiveCompleteHandler;\r
+ STATUS_HANDLER StatusHandler;\r
+ STATUS_COMPLETE_HANDLER StatusCompleteHandler;\r
+ NDIS_STRING Name;\r
+} NDIS30_PROTOCOL_CHARACTERISTICS;\r
+\r
+\r
+/* Prototypes for NDIS 4.0 protocol characteristics */\r
+\r
+typedef INT (*RECEIVE_PACKET_HANDLER)(\r
+ IN NDIS_HANDLE ProtocolBindingContext,\r
+ IN PNDIS_PACKET Packet);\r
+\r
+typedef VOID (*BIND_HANDLER)(\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
+typedef VOID (*UNBIND_HANDLER)(\r
+ OUT PNDIS_STATUS Status,\r
+ IN NDIS_HANDLE ProtocolBindingContext,\r
+ IN NDIS_HANDLE UnbindContext);\r
+\r
+typedef VOID (*TRANSLATE_HANDLER)(\r
+ OUT PNDIS_STATUS Status,\r
+ IN NDIS_HANDLE ProtocolBindingContext,\r
+ OUT PNET_PNP_ID IdList,\r
+ IN ULONG IdListLength,\r
+ OUT PULONG BytesReturned);\r
+\r
+typedef VOID (*UNLOAD_PROTOCOL_HANDLER)(\r
+ VOID);\r
+\r
+\r
+/* Protocol characteristics for NDIS 4.0 protocols */\r
+\r
+typedef struct _NDIS40_PROTOCOL_CHARACTERISTICS\r
+{\r
+ NDIS30_PROTOCOL_CHARACTERISTICS;\r
+\r
+ RECEIVE_PACKET_HANDLER ReceivePacketHandler;\r
+ BIND_HANDLER BindAdapterHandler;\r
+ UNBIND_HANDLER UnbindAdapterHandler;\r
+ TRANSLATE_HANDLER TranslateHandler;\r
+ UNLOAD_PROTOCOL_HANDLER UnloadHandler;\r
+} NDIS40_PROTOCOL_CHARACTERISTICS;\r
+\r
+\r
+\r
+/* Prototypes for NDIS 5.0 protocol characteristics */\r
+\r
+#ifdef NDIS50\r
+\r
+typedef VOID (*CO_SEND_COMPLETE_HANDLER)(\r
+ IN NDIS_STATUS Status,\r
+ IN NDIS_HANDLE ProtocolVcContext,\r
+ IN PNDIS_PACKET Packet);\r
+\r
+typedef VOID (*CO_STATUS_HANDLER)(\r
+ IN NDIS_HANDLE ProtocolBindingContext,\r
+ IN NDIS_HANDLE ProtocolVcContext OPTIONAL,\r
+ IN NDIS_STATUS GeneralStatus,\r
+ IN PVOID StatusBuffer,\r
+ IN UINT StatusBufferSize);\r
+\r
+typedef UINT (*CO_RECEIVE_PACKET_HANDLER)(\r
+ IN NDIS_HANDLE ProtocolBindingContext,\r
+ IN NDIS_HANDLE ProtocolVcContext,\r
+ IN PNDIS_PACKET Packet);\r
+\r
+typedef VOID (*CO_AF_REGISTER_NOTIFY_HANDLER)(\r
+ IN NDIS_HANDLE ProtocolBindingContext,\r
+ IN PCO_ADDRESS_FAMILY AddressFamily);\r
+\r
+\r
+typedef struct _NDIS50_PROTOCOL_CHARACTERISTICS\r
+{\r
+ NDIS40_PROTOCOL_CHARACTERISTICS;\r
+\r
+ PVOID ReservedHandlers[4];\r
+\r
+ CO_SEND_COMPLETE_HANDLER CoSendCompleteHandler;\r
+ CO_STATUS_HANDLER CoStatusHandler;\r
+ CO_RECEIVE_PACKET_HANDLER CoReceivePacketHandler;\r
+ CO_AF_REGISTER_NOTIFY_HANDLER CoAfRegisterNotifyHandler;\r
+} NDIS50_PROTOCOL_CHARACTERISTICS;\r
+\r
+#endif /* NDIS50 */\r
+\r
+\r
+#ifndef NDIS50\r
+#ifndef NDIS40\r
+typedef struct _NDIS30_PROTOCOL_CHARACTERISTICS NDIS_PROTOCOL_CHARACTERISTICS;\r
+#else /* NDIS40 */\r
+typedef struct _NDIS40_PROTOCOL_CHARACTERISTICS NDIS_PROTOCOL_CHARACTERISTICS;\r
+#endif /* NDIS40 */\r
+#else /* NDIS50 */\r
+typedef struct _NDIS50_PROTOCOL_CHARACTERISTICS NDIS_PROTOCOL_CHARACTERISTICS;\r
+#endif /* NDIS50 */\r
+\r
+typedef NDIS_PROTOCOL_CHARACTERISTICS *PNDIS_PROTOCOL_CHARACTERISTICS;\r
+\r
+\r
+\r
+/* Buffer management routines */\r
+\r
+VOID\r
+EXPIMP\r
+NdisAllocateBuffer(\r
+ OUT PNDIS_STATUS Status,\r
+ OUT PNDIS_BUFFER *Buffer,\r
+ IN NDIS_HANDLE PoolHandle,\r
+ IN PVOID VirtualAddress,\r
+ IN UINT Length);\r
+\r
+VOID\r
+EXPIMP\r
+NdisAllocateBufferPool(\r
+ OUT PNDIS_STATUS Status,\r
+ OUT PNDIS_HANDLE PoolHandle,\r
+ IN UINT NumberOfDescriptors);\r
+\r
+VOID\r
+EXPIMP\r
+NdisAllocatePacket(\r
+ OUT PNDIS_STATUS Status,\r
+ OUT PNDIS_PACKET *Packet,\r
+ IN NDIS_HANDLE PoolHandle);\r
+\r
+VOID\r
+EXPIMP\r
+NdisAllocatePacketPool(\r
+ OUT PNDIS_STATUS Status,\r
+ OUT PNDIS_HANDLE PoolHandle,\r
+ IN UINT NumberOfDescriptors,\r
+ IN UINT ProtocolReservedLength);\r
+\r
+VOID\r
+EXPIMP\r
+NdisCopyBuffer(\r
+ OUT PNDIS_STATUS Status,\r
+ OUT PNDIS_BUFFER *Buffer,\r
+ IN NDIS_HANDLE PoolHandle,\r
+ IN PVOID MemoryDescriptor,\r
+ IN UINT Offset,\r
+ IN UINT Length);\r
+\r
+VOID\r
+EXPIMP\r
+NdisCopyFromPacketToPacket(\r
+ IN PNDIS_PACKET Destination,\r
+ IN UINT DestinationOffset,\r
+ IN UINT BytesToCopy,\r
+ IN PNDIS_PACKET Source,\r
+ IN UINT SourceOffset,\r
+ OUT PUINT BytesCopied);\r
+\r
+VOID\r
+EXPIMP\r
+NdisDprAllocatePacket(\r
+ OUT PNDIS_STATUS Status,\r
+ OUT PNDIS_PACKET *Packet,\r
+ IN NDIS_HANDLE PoolHandle);\r
+\r
+VOID\r
+EXPIMP\r
+NdisDprAllocatePacketNonInterlocked(\r
+ OUT PNDIS_STATUS Status,\r
+ OUT PNDIS_PACKET *Packet,\r
+ IN NDIS_HANDLE PoolHandle);\r
+\r
+VOID\r
+EXPIMP\r
+NdisDprFreePacket(\r
+ IN PNDIS_PACKET Packet);\r
+\r
+VOID\r
+EXPIMP\r
+NdisDprFreePacketNonInterlocked(\r
+ IN PNDIS_PACKET Packet);\r
+\r
+VOID\r
+EXPIMP\r
+NdisFreeBufferPool(\r
+ IN NDIS_HANDLE PoolHandle);\r
+\r
+VOID\r
+EXPIMP\r
+NdisFreePacket(\r
+ IN PNDIS_PACKET Packet);\r
+\r
+VOID\r
+EXPIMP\r
+NdisFreePacketPool(\r
+ IN NDIS_HANDLE PoolHandle);\r
+\r
+VOID\r
+EXPIMP\r
+NdisReturnPackets(\r
+ IN PNDIS_PACKET *PacketsToReturn,\r
+ IN UINT NumberOfPackets);\r
+\r
+VOID\r
+EXPIMP\r
+NdisUnchainBufferAtBack(\r
+ IN OUT PNDIS_PACKET Packet,\r
+ OUT PNDIS_BUFFER *Buffer);\r
+\r
+VOID\r
+EXPIMP\r
+NdisUnchainBufferAtFront(\r
+ IN OUT PNDIS_PACKET Packet,\r
+ OUT PNDIS_BUFFER *Buffer);\r
+\r
+#if BINARY_COMPATIBLE\r
+\r
+VOID\r
+EXPIMP\r
+NdisAdjustBufferLength(\r
+ IN PNDIS_BUFFER Buffer,\r
+ IN UINT Length);\r
+\r
+ULONG\r
+EXPIMP\r
+NDIS_BUFFER_TO_SPAN_PAGES(\r
+ IN PNDIS_BUFFER Buffer);\r
+\r
+VOID\r
+EXPIMP\r
+NdisFreeBuffer(\r
+ IN PNDIS_BUFFER Buffer);\r
+\r
+VOID\r
+EXPIMP\r
+NdisGetBufferPhysicalArraySize(\r
+ IN PNDIS_BUFFER Buffer,\r
+ OUT PUINT ArraySize);\r
+\r
+VOID\r
+EXPIMP\r
+NdisGetFirstBufferFromPacket(\r
+ IN PNDIS_PACKET _Packet,\r
+ OUT PNDIS_BUFFER *_FirstBuffer,\r
+ OUT PVOID *_FirstBufferVA,\r
+ OUT PUINT _FirstBufferLength,\r
+ OUT PUINT _TotalBufferLength);\r
+\r
+VOID\r
+EXPIMP\r
+NdisQueryBuffer(\r
+ IN PNDIS_BUFFER Buffer,\r
+ OUT PVOID *VirtualAddress OPTIONAL,\r
+ OUT PUINT Length);\r
+\r
+VOID\r
+EXPIMP\r
+NdisQueryBufferOffset(\r
+ IN PNDIS_BUFFER Buffer,\r
+ OUT PUINT Offset,\r
+ OUT PUINT Length);\r
+\r
+#else /* BINARY_COMPATIBLE */\r
+\r
+/*\r
+ * PVOID NdisAdjustBufferLength(\r
+ * IN PNDIS_BUFFER Buffer,\r
+ * IN UINT Length);\r
+ */\r
+#define NdisAdjustBufferLength(Buffer, \\r
+ Length) \\r
+{ \\r
+ (Buffer)->ByteCount = (Length); \\r
+}\r
+\r
+\r
+/*\r
+ * ULONG NDIS_BUFFER_TO_SPAN_PAGES(\r
+ * IN PNDIS_BUFFER Buffer);\r
+ */\r
+#define NDIS_BUFFER_TO_SPAN_PAGES(Buffer) \\r
+( \\r
+ MmGetMdlByteCount(Buffer) == 0 ? \\r
+ 1 : \\r
+ ADDRESS_AND_SIZE_TO_SPAN_PAGES( \\r
+ MmGetMdlVirtualAddress(Buffer), \\r
+ MmGetMdlByteCount(Buffer)) \\r
+)\r
+\r
+\r
+#if 0\r
+\r
+/*\r
+ * VOID NdisFreeBuffer(\r
+ * IN PNDIS_BUFFER Buffer);\r
+ */\r
+#define NdisFreeBuffer(Buffer) \\r
+{ \\r
+ IoFreeMdl(Buffer) /* ??? */ \\r
+}\r
+\r
+#else\r
+\r
+VOID\r
+EXPIMP\r
+NdisFreeBuffer(\r
+ IN PNDIS_BUFFER Buffer);\r
+\r
+#endif\r
+\r
+\r
+/*\r
+ * VOID NdisGetBufferPhysicalArraySize(\r
+ * IN PNDIS_BUFFER Buffer,\r
+ * OUT PUINT ArraySize);\r
+ */\r
+#define NdisGetBufferPhysicalArraySize(Buffer, \\r
+ ArraySize) \\r
+{ \\r
+}\r
+\r
+\r
+/*\r
+ * VOID NdisGetFirstBufferFromPacket(\r
+ * IN PNDIS_PACKET _Packet,\r
+ * OUT PNDIS_BUFFER * _FirstBuffer,\r
+ * OUT PVOID * _FirstBufferVA,\r
+ * OUT PUINT _FirstBufferLength,\r
+ * OUT PUINT _TotalBufferLength)\r
+ */\r
+#define NdisGetFirstBufferFromPacket(Packet, \\r
+ FirstBuffer, \\r
+ FirstBufferVA, \\r
+ FirstBufferLength, \\r
+ TotalBufferLength) \\r
+{ \\r
+ PNDIS_BUFFER _Buffer; \\r
+ \\r
+ _Buffer = (Packet)->Private.Head; \\r
+ *(FirstBuffer) = _Buffer; \\r
+ *(FirstBufferVA) = MmGetMdlVirtualAddress(_Buffer); \\r
+ if (_Buffer != NULL) { \\r
+ *(FirstBufferLength) = MmGetMdlByteCount(_Buffer); \\r
+ _Buffer = _Buffer->Next; \\r
+ } else \\r
+ *(FirstBufferLength) = 0; \\r
+ *(TotalBufferLength) = *(FirstBufferLength); \\r
+ while (_Buffer != NULL) { \\r
+ *(TotalBufferLength) += MmGetMdlByteCount(_Buffer); \\r
+ _Buffer = _Buffer->Next; \\r
+ } \\r
+}\r
+\r
+/*\r
+ * VOID NdisQueryBuffer(\r
+ * IN PNDIS_BUFFER Buffer,\r
+ * OUT PVOID *VirtualAddress OPTIONAL,\r
+ * OUT PUINT Length)\r
+ */\r
+#define NdisQueryBuffer(Buffer, \\r
+ VirtualAddress, \\r
+ Length) \\r
+{ \\r
+ if (VirtualAddress != NULL) \\r
+ *(PVOID*)(VirtualAddress) = MmGetSystemAddressForMdl(Buffer); \\r
+ \\r
+ *(Length) = MmGetMdlByteCount(Buffer); \\r
+}\r
+\r
+\r
+/*\r
+ * VOID NdisQueryBufferOffset(\r
+ * IN PNDIS_BUFFER Buffer,\r
+ * OUT PUINT Offset,\r
+ * OUT PUINT Length);\r
+ */\r
+#define NdisQueryBufferOffset(Buffer, \\r
+ Offset, \\r
+ Length) \\r
+{ \\r
+ *(PUINT)(Offset) = MmGetMdlByteOffset(Buffer); \\r
+ *(PUINT)(Length) = MmGetMdlByteCount(Buffer); \\r
+}\r
+\r
+#endif /* BINARY_COMPATIBLE */\r
+\r
+\r
+/*\r
+ * PVOID NDIS_BUFFER_LINKAGE(\r
+ * IN PNDIS_BUFFER Buffer);\r
+ */\r
+#define NDIS_BUFFER_LINKAGE(Buffer) \\r
+{ \\r
+ (Buffer)->Next; \\r
+}\r
+\r
+\r
+/*\r
+ * VOID NdisChainBufferAtBack(\r
+ * IN OUT PNDIS_PACKET Packet,\r
+ * IN OUT PNDIS_BUFFER Buffer)\r
+ */\r
+#define NdisChainBufferAtBack(Packet, \\r
+ Buffer) \\r
+{ \\r
+ PNDIS_BUFFER NdisBuffer = (Buffer); \\r
+ \\r
+ while (NdisBuffer->Next != NULL) \\r
+ NdisBuffer = NdisBuffer->Next; \\r
+ \\r
+ NdisBuffer->Next = NULL; \\r
+ \\r
+ if ((Packet)->Private.Head != NULL) \\r
+ (Packet)->Private.Tail->Next = (Buffer); \\r
+ else \\r
+ (Packet)->Private.Head = (Buffer); \\r
+ \\r
+ (Packet)->Private.Tail = NdisBuffer; \\r
+ (Packet)->Private.ValidCounts = FALSE; \\r
+}\r
+\r
+\r
+/*\r
+ * VOID NdisChainBufferAtFront(\r
+ * IN OUT PNDIS_PACKET Packet,\r
+ * IN OUT PNDIS_BUFFER Buffer)\r
+ */\r
+#define NdisChainBufferAtFront(Packet, \\r
+ Buffer) \\r
+{ \\r
+ PNDIS_BUFFER _NdisBuffer = (Buffer); \\r
+ \\r
+ while (_NdisBuffer->Next != NULL) \\r
+ _NdisBuffer = _NdisBuffer->Next; \\r
+ \\r
+ if ((Packet)->Private.Head == NULL) \\r
+ (Packet)->Private.Tail = _NdisBuffer; \\r
+ \\r
+ _NdisBuffer->Next = (Packet)->Private.Head; \\r
+ (Packet)->Private.Head = (Buffer); \\r
+ (Packet)->Private.ValidCounts = FALSE; \\r
+}\r
+\r
+\r
+/*\r
+ * VOID NdisGetNextBuffer(\r
+ * IN PNDIS_BUFFER CurrentBuffer,\r
+ * OUT PNDIS_BUFFER * NextBuffer)\r
+ */\r
+#define NdisGetNextBuffer(CurrentBuffer, \\r
+ NextBuffer) \\r
+{ \\r
+ *(NextBuffer) = (CurrentBuffer)->Next; \\r
+}\r
+\r
+\r
+/*\r
+ * UINT NdisGetPacketFlags(\r
+ * IN PNDIS_PACKET Packet); \r
+ */\r
+#define NdisGetPacketFlags(Packet) \\r
+{ \\r
+ (Packet)->Private.Flags; \\r
+}\r
+\r
+\r
+/*\r
+ * UINT NDIS_GET_PACKET_HEADER_SIZE(\r
+ * IN PNDIS_PACKET Packet);\r
+ */\r
+#define NDIS_GET_PACKET_HEADER_SIZE(Packet) \\r
+{ \\r
+}\r
+\r
+\r
+/*\r
+ * VOID NDIS_GET_PACKET_MEDIA_SPECIFIC_INFO(\r
+ * IN PNDIS_PACKET Packet,\r
+ * IN PPVOID pMediaSpecificInfo,\r
+ * IN PUINT pSizeMediaSpecificInfo);\r
+ */\r
+#define NDIS_GET_PACKET_MEDIA_SPECIFIC_INFO(Packet, \\r
+ pMediaSpecificInfo, \\r
+ pSizeMediaSpecificInfo) \\r
+{ \\r
+}\r
+\r
+\r
+/*\r
+ * VOID NDIS_STATUS NDIS_GET_PACKET_STATUS(\r
+ * IN PNDIS_PACKET Packet);\r
+ */\r
+#define NDIS_GET_PACKET_STATUS (Packet) \\r
+{ \\r
+}\r
+\r
+\r
+/*\r
+ * ULONGLONG NDIS_GET_PACKET_TIME_RECEIVED(\r
+ * IN PNDIS_PACKET Packet);\r
+ */\r
+#define NDIS_GET_PACKET_TIME_RECEIVED(Packet) \\r
+{ \\r
+}\r
+\r
+\r
+/*\r
+ * ULONGLONG NDIS_GET_PACKET_TIME_SENT(\r
+ * IN PNDIS_PACKET Packet);\r
+ */\r
+#define NDIS_GET_PACKET_TIME_SENT(Packet) \\r
+{ \\r
+}\r
+\r
+\r
+/*\r
+ * ULONGLONG NDIS_GET_PACKET_TIME_TO_SEND(\r
+ * IN PNDIS_PACKET Packet);\r
+ */\r
+#define NDIS_GET_PACKET_TIME_TO_SEND(Packet) \\r
+{ \\r
+}\r
+\r
+\r
+/*\r
+ * PNDIS_PACKET_OOB_DATA NDIS_OOB_DATA_FROM_PACKET(\r
+ * IN PNDIS_PACKET _Packet);\r
+ */\r
+#define NDIS_OOB_DATA_FROM_PACKET(_Packet) \\r
+{ \\r
+}\r
+\r
+ \r
+/*\r
+ * VOID NdisQueryPacket(\r
+ * IN PNDIS_PACKET Packet,\r
+ * OUT PUINT PhysicalBufferCount OPTIONAL,\r
+ * OUT PUINT BufferCount OPTIONAL,\r
+ * OUT PNDIS_BUFFER *FirstBuffer OPTIONAL,\r
+ * OUT PUINT TotalPacketLength OPTIONAL);\r
+ */\r
+#define NdisQueryPacket(Packet, \\r
+ PhysicalBufferCount, \\r
+ BufferCount, \\r
+ FirstBuffer, \\r
+ TotalPacketLength) \\r
+{ \\r
+ if ((FirstBuffer) != NULL) \\r
+ *(FirstBuffer) = (Packet)->Private.Head; \\r
+ if ((TotalPacketLength) || (BufferCount) || (PhysicalBufferCount)) { \\r
+ if (!(Packet)->Private.ValidCounts) { \\r
+ UINT _Offset; \\r
+ UINT _PacketLength; \\r
+ PNDIS_BUFFER _NdisBuffer; \\r
+ UINT _PhysicalBufferCount = 0; \\r
+ UINT _TotalPacketLength = 0; \\r
+ UINT _Count = 0; \\r
+ \\r
+ for (_NdisBuffer = (Packet)->Private.Head; \\r
+ _NdisBuffer != (PNDIS_BUFFER)NULL; \\r
+ _NdisBuffer = _NdisBuffer->Next) { \\r
+ _PhysicalBufferCount += NDIS_BUFFER_TO_SPAN_PAGES(_NdisBuffer); \\r
+ NdisQueryBufferOffset(_NdisBuffer, &_Offset, &_PacketLength); \\r
+ _TotalPacketLength += _PacketLength; \\r
+ _Count++; \\r
+ } \\r
+ (Packet)->Private.PhysicalCount = _PhysicalBufferCount; \\r
+ (Packet)->Private.TotalLength = _TotalPacketLength; \\r
+ (Packet)->Private.Count = _Count; \\r
+ (Packet)->Private.ValidCounts = TRUE; \\r
+ } \\r
+ \\r
+ if (PhysicalBufferCount) \\r
+ *(PUINT)(PhysicalBufferCount) = (Packet)->Private.PhysicalCount; \\r
+ \\r
+ if (BufferCount) \\r
+ *(PUINT)(BufferCount) = (Packet)->Private.Count; \\r
+ \\r
+ if (TotalPacketLength) \\r
+ *(PUINT)(TotalPacketLength) = (Packet)->Private.TotalLength; \\r
+ } \\r
+}\r
+\r
+/*\r
+ * VOID NdisRecalculatePacketCounts(\r
+ * IN OUT PNDIS_PACKET Packet);\r
+ */\r
+#define NdisRecalculatePacketCounts(Packet) \\r
+{ \\r
+}\r
+\r
+\r
+/*\r
+ * VOID NdisReinitializePacket(\r
+ * IN OUT PNDIS_PACKET Packet);\r
+ */\r
+#define NdisReinitializePacketCounts(Packet) \\r
+{ \\r
+}\r
+\r
+\r
+/*\r
+ * VOID NdisSetPacketFlags(\r
+ * IN PNDIS_PACKET Packet,\r
+ * IN UINT Flags); \r
+ */\r
+#define NdisSetPacketFlags(Packet, Flags) \\r
+ (Packet)->Private.Flags = (Flags);\r
+\r
+\r
+/*\r
+ * NDIS_SET_PACKET_HEADER_SIZE(\r
+ * IN PNDIS_PACKET Packet,\r
+ * IN UINT HdrSize);\r
+ */\r
+#define NDIS_SET_PACKET_HEADER_SIZE(Packet, \\r
+ HdrSize) \\r
+{ \\r
+}\r
+\r
+\r
+/*\r
+ * NDIS_SET_PACKET_MEDIA_SPECIFIC_INFO(\r
+ * IN PNDIS_PACKET Packet,\r
+ * IN PVOID MediaSpecificInfo,\r
+ * IN UINT SizeMediaSpecificInfo);\r
+ */\r
+#define NDIS_SET_PACKET_MEDIA_SPECIFIC_INFO(Packet, \\r
+ MediaSpecificInfo, \\r
+ SizeMediaSpecificInfo) \\r
+{ \\r
+}\r
+\r
+\r
+/*\r
+ * NDIS_SET_PACKET_STATUS(\r
+ * IN PNDIS_PACKET Packet,\r
+ * IN NDIS_STATUS Status);\r
+ */\r
+#define NDIS_SET_PACKET_STATUS(Packet, \\r
+ Status) \\r
+{ \\r
+}\r
+\r
+\r
+/*\r
+ * NDIS_SET_PACKET_TIME_RECEIVED(\r
+ * IN PNDIS_PACKET Packet,\r
+ * IN ULONGLONG TimeReceived);\r
+ */\r
+#define NDIS_SET_PACKET_TIME_RECEIVED(Packet) \\r
+ TimeReceived) \\r
+{ \\r
+}\r
+\r
+\r
+/*\r
+ * NDIS_SET_PACKET_TIME_SENT(\r
+ * IN PNDIS_PACKET Packet,\r
+ * IN ULONGLONG TimeSent);\r
+ */\r
+#define NDIS_SET_PACKET_TIME_SENT(Packet, \\r
+ TimeSent) \\r
+{ \\r
+}\r
+\r
+\r
+/*\r
+ *\r
+ * NDIS_SET_PACKET_TIME_TO_SEND(\r
+ * IN PNDIS_PACKET Packet,\r
+ * IN ULONGLONG TimeToSend);\r
+ */\r
+#define NDIS_SET_PACKET_TIME_TO_SEND(Packet, \\r
+ TimeToSend) \\r
+{ \\r
+}\r
+\r
+\r
+/*\r
+ * VOID NdisSetSendFlags(\r
+ * IN PNDIS_PACKET Packet,\r
+ * IN UINT Flags);\r
+ */\r
+#define NdisSetSendFlags(Packet, Flags)( \\r
+ NdisSetPacketFlags((Packet), (Flags)))\r
+\r
+\r
+\r
+/* Memory management routines */\r
+\r
+VOID\r
+EXPIMP\r
+NdisCreateLookaheadBufferFromSharedMemory(\r
+ IN PVOID pSharedMemory,\r
+ IN UINT LookaheadLength,\r
+ OUT PVOID *pLookaheadBuffer);\r
+\r
+VOID\r
+EXPIMP\r
+NdisDestroyLookaheadBufferFromSharedMemory(\r
+ IN PVOID pLookaheadBuffer);\r
+\r
+VOID\r
+EXPIMP\r
+NdisMoveFromMappedMemory(\r
+ OUT PVOID Destination,\r
+ IN PVOID Source,\r
+ IN ULONG Length);\r
+\r
+VOID\r
+EXPIMP\r
+NdisMoveMappedMemory(\r
+ OUT PVOID Destination,\r
+ IN PVOID Source,\r
+ IN ULONG Length);\r
+\r
+VOID\r
+EXPIMP\r
+NdisMoveToMappedMemory(\r
+ OUT PVOID Destination,\r
+ IN PVOID Source,\r
+ IN ULONG Length);\r
+\r
+VOID\r
+EXPIMP\r
+NdisMUpdateSharedMemory(\r
+ IN NDIS_HANDLE MiniportAdapterHandle,\r
+ IN ULONG Length,\r
+ IN PVOID VirtualAddress,\r
+ IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisAllocateMemory(\r
+ OUT PVOID *VirtualAddress,\r
+ IN UINT Length,\r
+ IN UINT MemoryFlags,\r
+ IN NDIS_PHYSICAL_ADDRESS HighestAcceptableAddress);\r
+\r
+VOID\r
+EXPIMP\r
+NdisFreeMemory(\r
+ IN PVOID VirtualAddress,\r
+ IN UINT Length,\r
+ IN UINT MemoryFlags);\r
+\r
+VOID\r
+EXPIMP\r
+NdisImmediateReadSharedMemory(\r
+ IN NDIS_HANDLE WrapperConfigurationContext,\r
+ IN ULONG SharedMemoryAddress,\r
+ OUT PUCHAR Buffer,\r
+ IN ULONG Length);\r
+\r
+VOID\r
+EXPIMP\r
+NdisImmediateWriteSharedMemory(\r
+ IN NDIS_HANDLE WrapperConfigurationContext,\r
+ IN ULONG SharedMemoryAddress,\r
+ IN PUCHAR Buffer,\r
+ IN ULONG Length);\r
+\r
+VOID\r
+EXPIMP\r
+NdisMAllocateSharedMemory(\r
+ IN NDIS_HANDLE MiniportAdapterHandle,\r
+ IN ULONG Length,\r
+ IN BOOLEAN Cached,\r
+ OUT PVOID *VirtualAddress,\r
+ OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisMAllocateSharedMemoryAsync(\r
+ IN NDIS_HANDLE MiniportAdapterHandle,\r
+ IN ULONG Length,\r
+ IN BOOLEAN Cached,\r
+ IN PVOID Context);\r
+\r
+VOID\r
+EXPIMP\r
+NdisMFreeSharedMemory(\r
+ IN NDIS_HANDLE MiniportAdapterHandle,\r
+ IN ULONG Length,\r
+ IN BOOLEAN Cached,\r
+ IN PVOID VirtualAddress,\r
+ IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);\r
+\r
+VOID\r
+EXPIMP\r
+NdisUpdateSharedMemory(\r
+ IN NDIS_HANDLE NdisAdapterHandle,\r
+ IN ULONG Length,\r
+ IN PVOID VirtualAddress,\r
+ IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);\r
+\r
+\r
+/*\r
+ * ULONG NdisGetPhysicalAddressHigh(\r
+ * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);\r
+ */\r
+#define NdisGetPhysicalAddressHigh(PhysicalAddress) \\r
+ ((PhysicalAddress).HighPart)\r
+\r
+/*\r
+ * VOID NdisSetPhysicalAddressHigh(\r
+ * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress,\r
+ * IN ULONG Value);\r
+ */\r
+#define NdisSetPhysicalAddressHigh(PhysicalAddress, Value) \\r
+ ((PhysicalAddress).HighPart) = (Value)\r
+\r
+/*\r
+ * ULONG NdisGetPhysicalAddressLow(\r
+ * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);\r
+ */\r
+#define NdisGetPhysicalAddressLow(PhysicalAddress) \\r
+ ((PhysicalAddress).LowPart)\r
+\r
+\r
+/*\r
+ * VOID NdisSetPhysicalAddressLow(\r
+ * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress,\r
+ * IN ULONG Value);\r
+ */\r
+#define NdisSetPhysicalAddressLow(PhysicalAddress, Value) \\r
+ ((PhysicalAddress).LowPart) = (Value)\r
+\r
+/*\r
+ * VOID NDIS_PHYSICAL_ADDRESS_CONST(\r
+ * IN ULONG Low,\r
+ * IN LONG High); \r
+ */\r
+#define NDIS_PHYSICAL_ADDRESS_CONST(Low, High) \\r
+ { {(ULONG)(Low), (LONG)(High)} }\r
+\r
+\r
+/*\r
+ * VOID NdisMoveMemory(\r
+ * OUT PVOID Destination,\r
+ * IN PVOID Source,\r
+ * IN ULONG Length);\r
+ */\r
+#define NdisMoveMemory(Destination, Source, Length) \\r
+ RtlCopyMemory(Destination, Source, Length)\r
+\r
+\r
+/*\r
+ * VOID NdisRetrieveUlong(\r
+ * IN PULONG DestinationAddress,\r
+ * IN PULONG SourceAddress);\r
+ */\r
+#define NdisRetrieveUlong(DestinationAddress, SourceAddress) \\r
+ RtlRetrieveUlong(DestinationAddress, SourceAddress)\r
+\r
+\r
+/*\r
+ * VOID NdisStoreUlong(\r
+ * IN PULONG DestinationAddress,\r
+ * IN ULONG Value); \r
+ */\r
+#define NdisStoreUlong(DestinationAddress, Value) \\r
+ RtlStoreUlong(DestinationAddress, Value)\r
+\r
+\r
+/*\r
+ * VOID NdisZeroMemory(\r
+ * IN PVOID Destination,\r
+ * IN ULONG Length)\r
+ */\r
+#define NdisZeroMemory(Destination, Length) \\r
+ RtlZeroMemory(Destination, Length)\r
+\r
+\r
+\r
+/* String management routines */\r
+\r
+#if BINARY_COMPATIBLE\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisAnsiStringToUnicodeString(\r
+ IN OUT PNDIS_STRING DestinationString,\r
+ IN PNDIS_ANSI_STRING SourceString);\r
+\r
+BOOLEAN\r
+EXPIMP\r
+NdisEqualString(\r
+ IN PNDIS_STRING String1,\r
+ IN PNDIS_STRING String2,\r
+ IN BOOLEAN CaseInsensitive);\r
+\r
+VOID\r
+EXPIMP\r
+NdisInitAnsiString(\r
+ IN OUT PNDIS_ANSI_STRING DestinationString,\r
+ IN PCSTR SourceString);\r
+\r
+VOID\r
+EXPIMP\r
+NdisInitUnicodeString(\r
+ IN OUT PNDIS_STRING DestinationString,\r
+ IN PCWSTR SourceString);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisUnicodeStringToAnsiString(\r
+ IN OUT PNDIS_ANSI_STRING DestinationString,\r
+ IN PNDIS_STRING SourceString);\r
+\r
+#else /* BINARY_COMPATIBLE */\r
+\r
+/*\r
+ * NDIS_STATUS NdisAnsiStringToUnicodeString(\r
+ * IN OUT PNDIS_STRING DestinationString,\r
+ * IN PNDIS_ANSI_STRING SourceString);\r
+ */\r
+#define NdisAnsiStringToUnicodeString(DestinationString, \\r
+ SourceString) \\r
+ RtlAnsiStringToUnicodeString((DestinationString), (SourceString), FALSE)\r
+\r
+/*\r
+ * BOOLEAN NdisEqualString(\r
+ * IN PNDIS_STRING String1,\r
+ * IN PNDIS_STRING String2,\r
+ * IN BOOLEAN CaseInsensitive)\r
+ */\r
+#define NdisEqualString(String1, \\r
+ String2, \\r
+ CaseInsensitive) \\r
+ RtlEqualUnicodeString((String1), (String2), (CaseInsensitive))\r
+\r
+/*\r
+ * VOID NdisInitAnsiString(\r
+ * IN OUT PNDIS_ANSI_STRING DestinationString,\r
+ * IN PCSTR SourceString)\r
+ */\r
+#define NdisInitAnsiString(DestinationString, \\r
+ SourceString) \\r
+ RtlInitString((DestinationString), (SourceString))\r
+\r
+/*\r
+ * VOID NdisInitUnicodeString(\r
+ * IN OUT PNDIS_STRING DestinationString,\r
+ * IN PCWSTR SourceString)\r
+ */\r
+#define NdisInitUnicodeString(DestinationString, \\r
+ SourceString) \\r
+ RtlInitUnicodeString((DestinationString), (SourceString))\r
+\r
+/*\r
+ * NDIS_STATUS NdisUnicodeStringToAnsiString(\r
+ * IN OUT PNDIS_ANSI_STRING DestinationString,\r
+ * IN PNDIS_STRING SourceString)\r
+ */\r
+#define NdisUnicodeStringToAnsiString(DestinationString, \\r
+ SourceString) \\r
+ RtlUnicodeStringToAnsiString((DestinationString), (SourceString), FALSE)\r
+\r
+#endif /* BINARY_COMPATIBLE */\r
+\r
+#define NdisFreeString(_s) NdisFreeMemory((s).Buffer, (s).MaximumLength, 0)\r
+#define NdisPrintString(_s) DbgPrint("%ls", (s).Buffer)\r
+\r
+\r
+\r
+/* I/O routines */\r
+\r
+/*\r
+ * VOID NdisRawReadPortBufferUchar(\r
+ * IN ULONG Port,\r
+ * OUT PUCHAR Buffer,\r
+ * IN ULONG Length);\r
+ */\r
+#define NdisRawReadPortBufferUchar(Port, Buffer, Length) \\r
+ READ_PORT_BUFFER_UCHAR((PUCHAR)(Port), (PUCHAR)(Buffer), (Length))\r
+\r
+/*\r
+ * VOID NdisRawReadPortBufferUlong(\r
+ * IN ULONG Port,\r
+ * OUT PULONG Buffer,\r
+ * IN ULONG Length);\r
+ */\r
+#define NdisRawReadPortBufferUlong(Port, Buffer, Length) \\r
+ READ_PORT_BUFFER_ULONG((PULONG)(Port), (PULONG)(Buffer), (Length))\r
+\r
+/*\r
+ * VOID NdisRawReadPortBufferUshort(\r
+ * IN ULONG Port,\r
+ * OUT PUSHORT Buffer,\r
+ * IN ULONG Length);\r
+ */\r
+#define NdisRawReadPortBufferUshort(Port, Buffer, Length) \\r
+ READ_PORT_BUFFER_USHORT((PUSHORT)(Port), (PUSHORT)(Buffer), (Length))\r
+\r
+\r
+/*\r
+ * VOID NdisRawReadPortUchar(\r
+ * IN ULONG Port,\r
+ * OUT PUCHAR Data);\r
+ */\r
+#define NdisRawReadPortUchar(Port, Data) \\r
+ *(Data) = READ_PORT_UCHAR((PUCHAR)(Port))\r
+\r
+/*\r
+ * VOID NdisRawReadPortUlong(\r
+ * IN ULONG Port,\r
+ * OUT PULONG Data);\r
+ */\r
+#define NdisRawReadPortUlong(Port, Data) \\r
+ *(Data) = READ_PORT_ULONG((PULONG)(Port))\r
+\r
+/*\r
+ * VOID NdisRawReadPortUshort(\r
+ * IN ULONG Port,\r
+ * OUT PUSHORT Data);\r
+ */\r
+#define NdisRawReadPortUshort(Port, Data) \\r
+ *(Data) = READ_PORT_USHORT((PUSHORT)(Port))\r
+\r
+\r
+/*\r
+ * VOID NdisRawWritePortBufferUchar(\r
+ * IN ULONG Port,\r
+ * IN PUCHAR Buffer,\r
+ * IN ULONG Length);\r
+ */\r
+#define NdisRawWritePortBufferUchar(Port, Buffer, Length) \\r
+ WRITE_PORT_BUFFER_UCHAR((PUCHAR)(Port), (PUCHAR)(Buffer), (Length))\r
+\r
+/*\r
+ * VOID NdisRawWritePortBufferUlong(\r
+ * IN ULONG Port,\r
+ * IN PULONG Buffer,\r
+ * IN ULONG Length);\r
+ */\r
+#define NdisRawWritePortBufferUlong(Port, Buffer, Length) \\r
+ WRITE_PORT_BUFFER_ULONG((PULONG)(Port), (PULONG)(Buffer), (Length))\r
+\r
+/*\r
+ * VOID NdisRawWritePortBufferUshort(\r
+ * IN ULONG Port,\r
+ * IN PUSHORT Buffer,\r
+ * IN ULONG Length);\r
+ */\r
+#define NdisRawWritePortBufferUshort(Port, Buffer, Length) \\r
+ WRITE_PORT_BUFFER_USHORT((PUSHORT)(Port), (PUSHORT)(Buffer), (Length))\r
+\r
+\r
+/*\r
+ * VOID NdisRawWritePortUchar(\r
+ * IN ULONG Port,\r
+ * IN UCHAR Data);\r
+ */\r
+#define NdisRawWritePortUchar(Port, Data) \\r
+ WRITE_PORT_UCHAR((PUCHAR)(Port), (UCHAR)(Data))\r
+\r
+/*\r
+ * VOID NdisRawWritePortUlong(\r
+ * IN ULONG Port,\r
+ * IN ULONG Data);\r
+ */\r
+#define NdisRawWritePortUlong(Port, Data) \\r
+ WRITE_PORT_ULONG((PULONG)(Port), (ULONG)(Data))\r
+\r
+/*\r
+ * VOID NdisRawWritePortUshort(\r
+ * IN ULONG Port,\r
+ * IN USHORT Data);\r
+ */\r
+#define NdisRawWritePortUshort(Port, Data) \\r
+ WRITE_PORT_USHORT((PUSHORT)(Port), (USHORT)(Data))\r
+\r
+\r
+/*\r
+ * VOID NdisReadRegisterUchar(\r
+ * IN PUCHAR Register,\r
+ * OUT PUCHAR Data);\r
+ */\r
+#define NdisReadRegisterUchar(Register, Data) \\r
+ *((PUCHAR)(Data)) = *(Register)\r
+\r
+/*\r
+ * VOID NdisReadRegisterUlong(\r
+ * IN PULONG Register,\r
+ * OUT PULONG Data);\r
+ */\r
+#define NdisReadRegisterUlong(Register, Data) \\r
+ *((PULONG)(Data)) = *(Register)\r
+\r
+/*\r
+ * VOID NdisReadRegisterUshort(\r
+ * IN PUSHORT Register,\r
+ * OUT PUSHORT Data);\r
+ */\r
+#define NdisReadRegisterUshort(Register, Data) \\r
+ *((PUSHORT)(Data)) = *(Register)\r
+\r
+\r
+/*\r
+ * VOID NdisReadRegisterUchar(\r
+ * IN PUCHAR Register,\r
+ * IN UCHAR Data);\r
+ */\r
+#define NdisWriteRegisterUchar(Register, Data) \\r
+ WRITE_REGISTER_UCHAR((Register), (Data))\r
+\r
+/*\r
+ * VOID NdisReadRegisterUlong(\r
+ * IN PULONG Register,\r
+ * IN ULONG Data);\r
+ */\r
+#define NdisWriteRegisterUlong(Register, Data) \\r
+ WRITE_REGISTER_ULONG((Register), (Data))\r
+\r
+/*\r
+ * VOID NdisReadRegisterUshort(\r
+ * IN PUSHORT Register,\r
+ * IN USHORT Data);\r
+ */\r
+#define NdisWriteRegisterUshort(Register, Data) \\r
+ WRITE_REGISTER_USHORT((Register), (Data))\r
+\r
+\r
+\r
+VOID\r
+EXPIMP\r
+NdisCloseAdapter(\r
+ OUT PNDIS_STATUS Status,\r
+ IN NDIS_HANDLE NdisBindingHandle);\r
+\r
+VOID\r
+EXPIMP\r
+NdisCloseConfiguration(\r
+ IN NDIS_HANDLE ConfigurationHandle);\r
+\r
+VOID\r
+EXPIMP\r
+NdisCompleteBindAdapter(\r
+ IN NDIS_HANDLE BindAdapterContext,\r
+ IN NDIS_STATUS Status,\r
+ IN NDIS_STATUS OpenStatus);\r
+\r
+VOID\r
+EXPIMP\r
+NdisCompleteUnbindAdapter(\r
+ IN NDIS_HANDLE UnbindAdapterContext,\r
+ IN NDIS_STATUS Status);\r
+\r
+VOID\r
+EXPIMP\r
+NdisDeregisterProtocol(\r
+ OUT PNDIS_STATUS Status,\r
+ IN NDIS_HANDLE NdisProtocolHandle);\r
+\r
+VOID\r
+EXPIMP\r
+NdisInitializeListHead(\r
+ IN PLIST_ENTRY ListHead);\r
+\r
+VOID\r
+EXPIMP\r
+NdisInterlockedAddUlong(\r
+ IN PULONG Addend,\r
+ IN ULONG Increment,\r
+ IN PNDIS_SPIN_LOCK SpinLock);\r
+\r
+PLIST_ENTRY\r
+EXPIMP\r
+NdisInterlockedInsertHeadList(\r
+ IN PLIST_ENTRY ListHead,\r
+ IN PLIST_ENTRY ListEntry,\r
+ IN PNDIS_SPIN_LOCK SpinLock);\r
+\r
+PLIST_ENTRY\r
+EXPIMP\r
+NdisInterlockedInsertTailList(\r
+ IN PLIST_ENTRY ListHead,\r
+ IN PLIST_ENTRY ListEntry,\r
+ IN PNDIS_SPIN_LOCK SpinLock); \r
+\r
+PLIST_ENTRY\r
+EXPIMP\r
+NdisInterlockedRemoveHeadList(\r
+ IN PLIST_ENTRY ListHead,\r
+ IN PNDIS_SPIN_LOCK SpinLock); \r
+\r
+VOID\r
+EXPIMP\r
+NdisOpenAdapter(\r
+ OUT PNDIS_STATUS Status,\r
+ OUT PNDIS_STATUS OpenErrorStatus,\r
+ OUT PNDIS_HANDLE NdisBindingHandle,\r
+ OUT PUINT SelectedMediumIndex,\r
+ IN PNDIS_MEDIUM MediumArray,\r
+ IN UINT MediumArraySize,\r
+ IN NDIS_HANDLE NdisProtocolHandle,\r
+ IN NDIS_HANDLE ProtocolBindingContext,\r
+ IN PNDIS_STRING AdapterName,\r
+ IN UINT OpenOptions,\r
+ IN PSTRING AddressingInformation);\r
+\r
+VOID\r
+EXPIMP\r
+NdisOpenProtocolConfiguration(\r
+ OUT PNDIS_STATUS Status,\r
+ OUT PNDIS_HANDLE ConfigurationHandle,\r
+ IN PNDIS_STRING ProtocolSection);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisQueryReceiveInformation(\r
+ IN NDIS_HANDLE NdisBindingHandle,\r
+ IN NDIS_HANDLE MacContext,\r
+ OUT PLONGLONG TimeSent OPTIONAL,\r
+ OUT PLONGLONG TimeReceived OPTIONAL,\r
+ IN PUCHAR Buffer,\r
+ IN UINT BufferSize,\r
+ OUT PUINT SizeNeeded);\r
+\r
+VOID\r
+EXPIMP\r
+NdisReadConfiguration(\r
+ OUT PNDIS_STATUS Status,\r
+ OUT PNDIS_CONFIGURATION_PARAMETER *ParameterValue,\r
+ IN NDIS_HANDLE ConfigurationHandle,\r
+ IN PNDIS_STRING Keyword,\r
+ IN NDIS_PARAMETER_TYPE ParameterType);\r
+\r
+VOID\r
+EXPIMP\r
+NdisRegisterProtocol(\r
+ OUT PNDIS_STATUS Status,\r
+ OUT PNDIS_HANDLE NdisProtocolHandle,\r
+ IN PNDIS_PROTOCOL_CHARACTERISTICS ProtocolCharacteristics,\r
+ IN UINT CharacteristicsLength);\r
+\r
+VOID\r
+EXPIMP\r
+NdisRequest(\r
+ OUT PNDIS_STATUS Status,\r
+ IN NDIS_HANDLE NdisBindingHandle,\r
+ IN PNDIS_REQUEST NdisRequest);\r
+\r
+VOID\r
+EXPIMP\r
+NdisReset(\r
+ OUT PNDIS_STATUS Status,\r
+ IN NDIS_HANDLE NdisBindingHandle);\r
+\r
+VOID\r
+EXPIMP\r
+NdisReturnPackets(\r
+ IN PNDIS_PACKET *PacketsToReturn,\r
+ IN UINT NumberOfPackets);\r
+\r
+VOID\r
+EXPIMP\r
+NdisSend(\r
+ OUT PNDIS_STATUS Status,\r
+ IN NDIS_HANDLE NdisBindingHandle,\r
+ IN PNDIS_PACKET Packet);\r
+\r
+VOID\r
+EXPIMP\r
+NdisSendPackets(\r
+ IN NDIS_HANDLE NdisBindingHandle,\r
+ IN PPNDIS_PACKET PacketArray,\r
+ IN UINT NumberOfPackets);\r
+\r
+VOID\r
+EXPIMP\r
+NdisTransferData(\r
+ OUT PNDIS_STATUS Status,\r
+ IN NDIS_HANDLE NdisBindingHandle,\r
+ IN NDIS_HANDLE MacReceiveContext,\r
+ IN UINT ByteOffset,\r
+ IN UINT BytesToTransfer,\r
+ IN OUT PNDIS_PACKET Packet,\r
+ OUT PUINT BytesTransferred);\r
+\r
+VOID\r
+EXPIMP\r
+NdisWriteConfiguration(\r
+ OUT PNDIS_STATUS Status,\r
+ IN NDIS_HANDLE WrapperConfigurationContext,\r
+ IN PNDIS_STRING Keyword,\r
+ IN PNDIS_CONFIGURATION_PARAMETER *ParameterValue);\r
+\r
+/*\r
+VOID\r
+EXPIMP\r
+NdisWriteErrorLogEntry(\r
+ IN NDIS_HANDLE NdisAdapterHandle,\r
+ IN NDIS_ERROR_CODE ErrorCode,\r
+ IN ULONG NumberOfErrorValues,\r
+ IN ULONG ...);\r
+*/\r
+\r
+\r
+\r
+/*\r
+ * VOID NdisStallExecution(\r
+ * IN UINT MicrosecondsToStall)\r
+ */\r
+#define NdisStallExecution(MicroSecondsToStall) \\r
+ KeStallExecutionProcessor(MicroSecondsToStall)\r
+\r
+\r
+\r
+/* NDIS helper macros */\r
+\r
+/*\r
+ * NDIS_INIT_FUNCTION(FunctionName)\r
+ */\r
+#define NDIS_INIT_FUNCTION(FunctionName) \\r
+ alloc_text(init, FunctionName)\r
+\r
+/*\r
+ * NDIS_PAGABLE_FUNCTION(FunctionName) \r
+ */\r
+#define NDIS_PAGABLE_FUNCTION(FunctionName) \\r
+ alloc_text(page, FunctionName)\r
+\r
+\r
+\r
+/* NDIS 4.0 extensions */\r
+\r
+#ifdef NDIS40\r
+\r
+VOID\r
+EXPIMP\r
+NdisMFreeSharedMemory(\r
+ IN NDIS_HANDLE MiniportAdapterHandle,\r
+ IN ULONG Length,\r
+ IN BOOLEAN Cached,\r
+ IN PVOID VirtualAddress,\r
+ IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);\r
+\r
+VOID\r
+EXPIMP\r
+NdisMWanIndicateReceive(\r
+ OUT PNDIS_STATUS Status,\r
+ IN NDIS_HANDLE MiniportAdapterHandle,\r
+ IN NDIS_HANDLE NdisLinkContext,\r
+ IN PUCHAR PacketBuffer,\r
+ IN UINT PacketSize);\r
+\r
+VOID\r
+EXPIMP\r
+NdisMWanIndicateReceiveComplete(\r
+ IN NDIS_HANDLE MiniportAdapterHandle);\r
+\r
+VOID\r
+EXPIMP\r
+NdisMWanSendComplete(\r
+ IN NDIS_HANDLE MiniportAdapterHandle,\r
+ IN PNDIS_WAN_PACKET Packet,\r
+ IN NDIS_STATUS Status);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisPciAssignResources(\r
+ IN NDIS_HANDLE NdisMacHandle,\r
+ IN NDIS_HANDLE NdisWrapperHandle,\r
+ IN NDIS_HANDLE WrapperConfigurationContext,\r
+ IN ULONG SlotNumber,\r
+ OUT PNDIS_RESOURCE_LIST *AssignedResources);\r
+\r
+VOID\r
+EXPIMP\r
+NdisReadEisaSlotInformationEx(\r
+ OUT PNDIS_STATUS Status,\r
+ IN NDIS_HANDLE WrapperConfigurationContext,\r
+ OUT PUINT SlotNumber,\r
+ OUT PNDIS_EISA_FUNCTION_INFORMATION *EisaData,\r
+ OUT PUINT NumberOfFunctions);\r
+\r
+VOID\r
+EXPIMP\r
+NdisReadMcaPosInformation(\r
+ OUT PNDIS_STATUS Status,\r
+ IN NDIS_HANDLE WrapperConfigurationContext,\r
+ IN PUINT ChannelNumber,\r
+ OUT PNDIS_MCA_POS_DATA McaData);\r
+\r
+#endif /* NDIS40 */\r
+\r
+\r
+\r
+/* NDIS 5.0 extensions */\r
+\r
+#ifdef NDIS50\r
+\r
+VOID\r
+EXPIMP\r
+NdisAcquireReadWriteLock(\r
+ IN PNDIS_RW_LOCK Lock,\r
+ IN BOOLEAN fWrite,\r
+ IN PLOCK_STATE LockState);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisAllocateMemoryWithTag(\r
+ OUT PVOID *VirtualAddress,\r
+ IN UINT Length,\r
+ IN ULONG Tag);\r
+\r
+VOID\r
+EXPIMP\r
+NdisAllocatePacketPoolEx(\r
+ OUT PNDIS_STATUS Status,\r
+ OUT PNDIS_HANDLE PoolHandle,\r
+ IN UINT NumberOfDescriptors,\r
+ IN UINT NumberOfOverflowDescriptors,\r
+ IN UINT ProtocolReservedLength);\r
+\r
+ULONG\r
+EXPIMP\r
+NdisBufferLength(\r
+ IN PNDIS_BUFFER Buffer);\r
+\r
+PVOID\r
+EXPIMP\r
+NdisBufferVirtualAddress(\r
+ IN PNDIS_BUFFER Buffer);\r
+\r
+VOID\r
+EXPIMP\r
+NdisCompletePnPEvent(\r
+ IN NDIS_STATUS Status,\r
+ IN NDIS_HANDLE NdisBindingHandle,\r
+ IN PNET_PNP_EVENT NetPnPEvent);\r
+\r
+VOID\r
+EXPIMP\r
+NdisConvertStringToAtmAddress(\r
+ OUT PNDIS_STATUS Status,\r
+ IN PNDIS_STRING String,\r
+ OUT PATM_ADDRESS AtmAddress);\r
+\r
+VOID\r
+EXPIMP\r
+NdisGetCurrentProcessorCounts(\r
+ OUT PULONG pIdleCount,\r
+ OUT PULONG pKernelAndUser,\r
+ OUT PULONG pIndex);\r
+\r
+VOID\r
+EXPIMP\r
+NdisGetDriverHandle(\r
+ IN PNDIS_HANDLE NdisBindingHandle,\r
+ OUT PNDIS_HANDLE NdisDriverHandle);\r
+\r
+PNDIS_PACKET\r
+EXPIMP\r
+NdisGetReceivedPacket(\r
+ IN PNDIS_HANDLE NdisBindingHandle,\r
+ IN PNDIS_HANDLE MacContext);\r
+\r
+VOID\r
+EXPIMP\r
+NdisGetSystemUptime(\r
+ OUT PULONG pSystemUpTime);\r
+\r
+VOID\r
+EXPIMP\r
+NdisInitializeReadWriteLock(\r
+ IN PNDIS_RW_LOCK Lock);\r
+\r
+LONG\r
+EXPIMP\r
+NdisInterlockedDecrement(\r
+ IN PLONG Addend);\r
+\r
+LONG\r
+EXPIMP\r
+NdisInterlockedIncrement(\r
+ IN PLONG Addend);\r
+\r
+PSINGLE_LIST_ENTRY\r
+EXPIMP\r
+NdisInterlockedPopEntrySList(\r
+ IN PSLIST_HEADER ListHead,\r
+ IN PKSPIN_LOCK Lock);\r
+\r
+PSINGLE_LIST_ENTRY\r
+EXPIMP\r
+NdisInterlockedPushEntrySList(\r
+ IN PSLIST_HEADER ListHead,\r
+ IN PSINGLE_LIST_ENTRY ListEntry,\r
+ IN PKSPIN_LOCK Lock);\r
+\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisMDeregisterDevice(\r
+ IN NDIS_HANDLE NdisDeviceHandle);\r
+\r
+VOID\r
+EXPIMP\r
+NdisMGetDeviceProperty(\r
+ IN NDIS_HANDLE MiniportAdapterHandle,\r
+ IN OUT PDEVICE_OBJECT *PhysicalDeviceObject OPTIONAL,\r
+ IN OUT PDEVICE_OBJECT *FunctionalDeviceObject OPTIONAL,\r
+ IN OUT PDEVICE_OBJECT *NextDeviceObject OPTIONAL,\r
+ IN OUT PCM_RESOURCE_LIST *AllocatedResources OPTIONAL,\r
+ IN OUT PCM_RESOURCE_LIST *AllocatedResourcesTranslated OPTIONAL);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisMInitializeScatterGatherDma(\r
+ IN NDIS_HANDLE MiniportAdapterHandle,\r
+ IN BOOLEAN Dma64BitAddresses,\r
+ IN ULONG MaximumPhysicalMapping);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisMPromoteMiniport(\r
+ IN NDIS_HANDLE MiniportAdapterHandle);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisMQueryAdapterInstanceName(\r
+ OUT PNDIS_STRING AdapterInstanceName,\r
+ IN NDIS_HANDLE MiniportAdapterHandle);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisMRegisterDevice(\r
+ IN NDIS_HANDLE NdisWrapperHandle,\r
+ IN PNDIS_STRING DeviceName,\r
+ IN PNDIS_STRING SymbolicName,\r
+ IN PDRIVER_DISPATCH MajorFunctions[],\r
+ OUT PDEVICE_OBJECT *pDeviceObject,\r
+ OUT NDIS_HANDLE *NdisDeviceHandle);\r
+\r
+VOID\r
+EXPIMP\r
+NdisMRegisterUnloadHandler(\r
+ IN NDIS_HANDLE NdisWrapperHandle,\r
+ IN PDRIVER_UNLOAD UnloadHandler);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisMRemoveMiniport(\r
+ IN NDIS_HANDLE MiniportAdapterHandle);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisMSetMiniportSecondary(\r
+ IN NDIS_HANDLE MiniportAdapterHandle,\r
+ IN NDIS_HANDLE PrimaryMiniportAdapterHandle);\r
+\r
+VOID\r
+EXPIMP\r
+NdisOpenConfigurationKeyByIndex(\r
+ OUT PNDIS_STATUS Status,\r
+ IN NDIS_HANDLE ConfigurationHandle,\r
+ IN ULONG Index,\r
+ OUT PNDIS_STRING KeyName,\r
+ OUT PNDIS_HANDLE KeyHandle);\r
+\r
+VOID\r
+EXPIMP\r
+NdisOpenConfigurationKeyByName(\r
+ OUT PNDIS_STATUS Status,\r
+ IN NDIS_HANDLE ConfigurationHandle,\r
+ IN PNDIS_STRING SubKeyName,\r
+ OUT PNDIS_HANDLE SubKeyHandle);\r
+\r
+UINT\r
+EXPIMP\r
+NdisPacketPoolUsage(\r
+ IN NDIS_HANDLE PoolHandle);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisQueryAdapterInstanceName(\r
+ OUT PNDIS_STRING AdapterInstanceName,\r
+ IN NDIS_HANDLE NdisBindingHandle);\r
+\r
+VOID\r
+EXPIMP\r
+NdisQueryBufferSafe(\r
+ IN PNDIS_BUFFER Buffer,\r
+ OUT PVOID *VirtualAddress OPTIONAL,\r
+ OUT PUINT Length,\r
+ IN UINT Priority);\r
+\r
+ULONG\r
+EXPIMP\r
+NdisReadPcmciaAttributeMemory(\r
+ IN NDIS_HANDLE NdisAdapterHandle,\r
+ IN ULONG Offset,\r
+ IN PVOID Buffer,\r
+ IN ULONG Length);\r
+\r
+VOID\r
+EXPIMP\r
+NdisReleaseReadWriteLock(\r
+ IN PNDIS_RW_LOCK Lock,\r
+ IN PLOCK_STATE LockState);\r
+\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisWriteEventLogEntry(\r
+ IN PVOID LogHandle,\r
+ IN NDIS_STATUS EventCode,\r
+ IN ULONG UniqueEventValue,\r
+ IN USHORT NumStrings,\r
+ IN PVOID StringsList OPTIONAL,\r
+ IN ULONG DataSize,\r
+ IN PVOID Data OPTIONAL);\r
+\r
+ULONG\r
+EXPIMP\r
+NdisWritePcmciaAttributeMemory(\r
+ IN NDIS_HANDLE NdisAdapterHandle,\r
+ IN ULONG Offset,\r
+ IN PVOID Buffer,\r
+ IN ULONG Length);\r
+\r
+\r
+/* Connectionless services */\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisClAddParty(\r
+ IN NDIS_HANDLE NdisVcHandle,\r
+ IN NDIS_HANDLE ProtocolPartyContext,\r
+ IN OUT PCO_CALL_PARAMETERS CallParameters,\r
+ OUT PNDIS_HANDLE NdisPartyHandle);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisClCloseAddressFamily(\r
+ IN NDIS_HANDLE NdisAfHandle);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisClCloseCall(\r
+ IN NDIS_HANDLE NdisVcHandle,\r
+ IN NDIS_HANDLE NdisPartyHandle OPTIONAL,\r
+ IN PVOID Buffer OPTIONAL,\r
+ IN UINT Size);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisClDeregisterSap(\r
+ IN NDIS_HANDLE NdisSapHandle);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisClDropParty(\r
+ IN NDIS_HANDLE NdisPartyHandle,\r
+ IN PVOID Buffer OPTIONAL,\r
+ IN UINT Size);\r
+\r
+VOID\r
+EXPIMP\r
+NdisClIncomingCallComplete(\r
+ IN NDIS_STATUS Status,\r
+ IN NDIS_HANDLE NdisVcHandle,\r
+ IN PCO_CALL_PARAMETERS CallParameters);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisClMakeCall(\r
+ IN NDIS_HANDLE NdisVcHandle,\r
+ IN OUT PCO_CALL_PARAMETERS CallParameters,\r
+ IN NDIS_HANDLE ProtocolPartyContext OPTIONAL,\r
+ OUT PNDIS_HANDLE NdisPartyHandle OPTIONAL);\r
+\r
+NDIS_STATUS \r
+EXPIMP\r
+NdisClModifyCallQoS(\r
+ IN NDIS_HANDLE NdisVcHandle,\r
+ IN PCO_CALL_PARAMETERS CallParameters);\r
+\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisClOpenAddressFamily(\r
+ IN NDIS_HANDLE NdisBindingHandle,\r
+ IN PCO_ADDRESS_FAMILY AddressFamily,\r
+ IN NDIS_HANDLE ProtocolAfContext,\r
+ IN PNDIS_CLIENT_CHARACTERISTICS ClCharacteristics,\r
+ IN UINT SizeOfClCharacteristics,\r
+ OUT PNDIS_HANDLE NdisAfHandle);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisClRegisterSap(\r
+ IN NDIS_HANDLE NdisAfHandle,\r
+ IN NDIS_HANDLE ProtocolSapContext,\r
+ IN PCO_SAP Sap,\r
+ OUT PNDIS_HANDLE NdisSapHandle);\r
+\r
+\r
+/* Call Manager services */\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisCmActivateVc(\r
+ IN NDIS_HANDLE NdisVcHandle,\r
+ IN OUT PCO_CALL_PARAMETERS CallParameters);\r
+\r
+VOID\r
+EXPIMP\r
+NdisCmAddPartyComplete(\r
+ IN NDIS_STATUS Status,\r
+ IN NDIS_HANDLE NdisPartyHandle,\r
+ IN NDIS_HANDLE CallMgrPartyContext OPTIONAL,\r
+ IN PCO_CALL_PARAMETERS CallParameters);\r
+\r
+VOID\r
+EXPIMP\r
+NdisCmCloseAddressFamilyComplete(\r
+ IN NDIS_STATUS Status,\r
+ IN NDIS_HANDLE NdisAfHandle);\r
+\r
+VOID\r
+EXPIMP\r
+NdisCmCloseCallComplete(\r
+ IN NDIS_STATUS Status,\r
+ IN NDIS_HANDLE NdisVcHandle,\r
+ IN NDIS_HANDLE NdisPartyHandle OPTIONAL);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisCmDeactivateVc(\r
+ IN NDIS_HANDLE NdisVcHandle);\r
+\r
+VOID\r
+EXPIMP\r
+NdisCmDeregisterSapComplete(\r
+ IN NDIS_STATUS Status,\r
+ IN NDIS_HANDLE NdisSapHandle);\r
+\r
+VOID\r
+EXPIMP\r
+NdisCmDispatchCallConnected(\r
+ IN NDIS_HANDLE NdisVcHandle);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisCmDispatchIncomingCall(\r
+ IN NDIS_HANDLE NdisSapHandle,\r
+ IN NDIS_HANDLE NdisVcHandle,\r
+ IN PCO_CALL_PARAMETERS CallParameters);\r
+\r
+VOID\r
+EXPIMP\r
+NdisCmDispatchIncomingCallQoSChange(\r
+ IN NDIS_HANDLE NdisVcHandle,\r
+ IN PCO_CALL_PARAMETERS CallParameters);\r
+\r
+VOID\r
+EXPIMP\r
+NdisCmDispatchIncomingCloseCall(\r
+ IN NDIS_STATUS CloseStatus,\r
+ IN NDIS_HANDLE NdisVcHandle,\r
+ IN PVOID Buffer OPTIONAL,\r
+ IN UINT Size);\r
+\r
+VOID\r
+EXPIMP\r
+NdisCmDispatchIncomingDropParty(\r
+ IN NDIS_STATUS DropStatus,\r
+ IN NDIS_HANDLE NdisPartyHandle,\r
+ IN PVOID Buffer OPTIONAL,\r
+ IN UINT Size);\r
+\r
+VOID\r
+EXPIMP\r
+NdisCmDropPartyComplete(\r
+ IN NDIS_STATUS Status,\r
+ IN NDIS_HANDLE NdisPartyHandle);\r
+\r
+VOID\r
+EXPIMP\r
+NdisCmMakeCallComplete(\r
+ IN NDIS_STATUS Status,\r
+ IN NDIS_HANDLE NdisVcHandle,\r
+ IN NDIS_HANDLE NdisPartyHandle OPTIONAL,\r
+ IN NDIS_HANDLE CallMgrPartyContext OPTIONAL,\r
+ IN PCO_CALL_PARAMETERS CallParameters);\r
+\r
+VOID\r
+EXPIMP\r
+NdisCmModifyCallQoSComplete(\r
+ IN NDIS_STATUS Status,\r
+ IN NDIS_HANDLE NdisVcHandle,\r
+ IN PCO_CALL_PARAMETERS CallParameters);\r
+\r
+VOID\r
+EXPIMP\r
+NdisCmOpenAddressFamilyComplete(\r
+ IN NDIS_STATUS Status,\r
+ IN NDIS_HANDLE NdisAfHandle,\r
+ IN NDIS_HANDLE CallMgrAfContext);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisCmRegisterAddressFamily(\r
+ IN NDIS_HANDLE NdisBindingHandle,\r
+ IN PCO_ADDRESS_FAMILY AddressFamily,\r
+ IN PNDIS_CALL_MANAGER_CHARACTERISTICS CmCharacteristics,\r
+ IN UINT SizeOfCmCharacteristics);\r
+\r
+VOID\r
+EXPIMP\r
+NdisCmRegisterSapComplete(\r
+ IN NDIS_STATUS Status,\r
+ IN NDIS_HANDLE NdisSapHandle,\r
+ IN NDIS_HANDLE CallMgrSapContext);\r
+\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisMCmActivateVc(\r
+ IN NDIS_HANDLE NdisVcHandle,\r
+ IN PCO_CALL_PARAMETERS CallParameters);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisMCmCreateVc(\r
+ IN NDIS_HANDLE MiniportAdapterHandle,\r
+ IN NDIS_HANDLE NdisAfHandle,\r
+ IN NDIS_HANDLE MiniportVcContext,\r
+ OUT PNDIS_HANDLE NdisVcHandle);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisMCmDeactivateVc(\r
+ IN NDIS_HANDLE NdisVcHandle);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisMCmDeleteVc(\r
+ IN NDIS_HANDLE NdisVcHandle);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisMCmRegisterAddressFamily(\r
+ IN NDIS_HANDLE MiniportAdapterHandle,\r
+ IN PCO_ADDRESS_FAMILY AddressFamily,\r
+ IN PNDIS_CALL_MANAGER_CHARACTERISTICS CmCharacteristics,\r
+ IN UINT SizeOfCmCharacteristics);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisMCmRequest(\r
+ IN NDIS_HANDLE NdisAfHandle,\r
+ IN NDIS_HANDLE NdisVcHandle OPTIONAL,\r
+ IN NDIS_HANDLE NdisPartyHandle OPTIONAL,\r
+ IN OUT PNDIS_REQUEST NdisRequest);\r
+\r
+\r
+/* Connection-oriented services */\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisCoCreateVc(\r
+ IN NDIS_HANDLE NdisBindingHandle,\r
+ IN NDIS_HANDLE NdisAfHandle OPTIONAL,\r
+ IN NDIS_HANDLE ProtocolVcContext,\r
+ IN OUT PNDIS_HANDLE NdisVcHandle);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisCoDeleteVc(\r
+ IN NDIS_HANDLE NdisVcHandle);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisCoRequest(\r
+ IN NDIS_HANDLE NdisBindingHandle,\r
+ IN NDIS_HANDLE NdisAfHandle OPTIONAL,\r
+ IN NDIS_HANDLE NdisVcHandle OPTIONAL,\r
+ IN NDIS_HANDLE NdisPartyHandle OPTIONAL,\r
+ IN OUT PNDIS_REQUEST NdisRequest);\r
+\r
+VOID\r
+EXPIMP\r
+NdisCoRequestComplete(\r
+ IN NDIS_STATUS Status,\r
+ IN NDIS_HANDLE NdisAfHandle,\r
+ IN NDIS_HANDLE NdisVcHandle OPTIONAL,\r
+ IN NDIS_HANDLE NdisPartyHandle OPTIONAL,\r
+ IN PNDIS_REQUEST NdisRequest);\r
+\r
+VOID\r
+EXPIMP\r
+NdisCoSendPackets(\r
+ IN NDIS_HANDLE NdisVcHandle,\r
+ IN PPNDIS_PACKET PacketArray,\r
+ IN UINT NumberOfPackets);\r
+\r
+\r
+VOID\r
+EXPIMP\r
+NdisMCoActivateVcComplete(\r
+ IN NDIS_STATUS Status,\r
+ IN NDIS_HANDLE NdisVcHandle,\r
+ IN PCO_CALL_PARAMETERS CallParameters);\r
+\r
+VOID\r
+EXPIMP\r
+NdisMCoDeactivateVcComplete(\r
+ IN NDIS_STATUS Status,\r
+ IN NDIS_HANDLE NdisVcHandle);\r
+\r
+VOID\r
+EXPIMP\r
+NdisMCoIndicateReceivePacket(\r
+ IN NDIS_HANDLE NdisVcHandle,\r
+ IN PPNDIS_PACKET PacketArray,\r
+ IN UINT NumberOfPackets);\r
+\r
+VOID\r
+EXPIMP\r
+NdisMCoIndicateStatus(\r
+ IN NDIS_HANDLE MiniportAdapterHandle,\r
+ IN NDIS_HANDLE NdisVcHandle OPTIONAL,\r
+ IN NDIS_STATUS GeneralStatus,\r
+ IN PVOID StatusBuffer OPTIONAL,\r
+ IN ULONG StatusBufferSize);\r
+\r
+VOID\r
+EXPIMP\r
+NdisMCoReceiveComplete(\r
+ IN NDIS_HANDLE MiniportAdapterHandle);\r
+\r
+VOID\r
+EXPIMP\r
+NdisMCoRequestComplete(\r
+ IN NDIS_STATUS Status,\r
+ IN NDIS_HANDLE MiniportAdapterHandle,\r
+ IN PNDIS_REQUEST Request);\r
+\r
+VOID \r
+EXPIMP\r
+NdisMCoSendComplete(\r
+ IN NDIS_STATUS Status,\r
+ IN NDIS_HANDLE NdisVcHandle,\r
+ IN PNDIS_PACKET Packet);\r
+\r
+\r
+/* NDIS 5.0 extensions for intermediate drivers */\r
+\r
+VOID\r
+EXPIMP\r
+NdisIMAssociateMiniport(\r
+ IN NDIS_HANDLE DriverHandle,\r
+ IN NDIS_HANDLE ProtocolHandle);\r
+\r
+NDIS_STATUS \r
+EXPIMP\r
+NdisIMCancelInitializeDeviceInstance(\r
+ IN NDIS_HANDLE DriverHandle,\r
+ IN PNDIS_STRING DeviceInstance);\r
+\r
+VOID\r
+EXPIMP\r
+NdisIMCopySendCompletePerPacketInfo(\r
+ IN PNDIS_PACKET DstPacket,\r
+ IN PNDIS_PACKET SrcPacket);\r
+\r
+VOID\r
+EXPIMP\r
+NdisIMCopySendPerPacketInfo(\r
+ IN PNDIS_PACKET DstPacket,\r
+ IN PNDIS_PACKET SrcPacket);\r
+\r
+VOID\r
+EXPIMP\r
+NdisIMDeregisterLayeredMiniport(\r
+ IN NDIS_HANDLE DriverHandle);\r
+\r
+NDIS_HANDLE\r
+EXPIMP\r
+NdisIMGetBindingContext(\r
+ IN NDIS_HANDLE NdisBindingHandle);\r
+\r
+NDIS_HANDLE\r
+EXPIMP\r
+NdisIMGetDeviceContext(\r
+ IN NDIS_HANDLE MiniportAdapterHandle);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisIMInitializeDeviceInstanceEx(\r
+ IN NDIS_HANDLE DriverHandle,\r
+ IN PNDIS_STRING DriverInstance,\r
+ IN NDIS_HANDLE DeviceContext OPTIONAL);\r
+\r
+#endif /* NDIS50 */\r
+\r
+\r
+\r
+/* NDIS structures available only to miniport drivers */\r
+\r
+#if defined(NDIS_WRAPPER) || defined(NDIS_MINIPORT_DRIVER)\r
+\r
+/* Obsolete technology specific defines */\r
+\r
+#define DECLARE_UNKNOWN_STRUCT(BaseName) \\r
+ typedef struct _##BaseName BaseName, *P##BaseName;\r
+\r
+#define DECLARE_UNKNOWN_PROTOTYPE(Name) \\r
+ typedef VOID (*##Name)(VOID);\r
+\r
+\r
+/* ARCnet */\r
+\r
+DECLARE_UNKNOWN_STRUCT(ARC_FILTER)\r
+\r
+\r
+VOID\r
+EXPIMP\r
+ArcFilterDprIndicateReceive(\r
+ IN PARC_FILTER Filter,\r
+ IN PUCHAR pRawHeader,\r
+ IN PUCHAR pData,\r
+ IN UINT Length);\r
+\r
+VOID\r
+EXPIMP\r
+ArcFilterDprIndicateReceiveComplete(\r
+ IN PARC_FILTER Filter);\r
+\r
+\r
+/* Ethernet */\r
+\r
+#define ETH_LENGTH_OF_ADDRESS 6\r
+\r
+DECLARE_UNKNOWN_STRUCT(ETH_FILTER)\r
+\r
+DECLARE_UNKNOWN_PROTOTYPE(ETH_ADDRESS_CHANGE)\r
+DECLARE_UNKNOWN_PROTOTYPE(ETH_FILTER_CHANGE)\r
+DECLARE_UNKNOWN_PROTOTYPE(ETH_DEFERRED_CLOSE)\r
+\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+EthChangeFilterAddresses(\r
+ IN PETH_FILTER Filter,\r
+ IN NDIS_HANDLE NdisFilterHandle,\r
+ IN PNDIS_REQUEST NdisRequest,\r
+ IN UINT AddressCount,\r
+ IN CHAR Addresses[] [ETH_LENGTH_OF_ADDRESS],\r
+ IN BOOLEAN Set);\r
+\r
+BOOLEAN\r
+EXPIMP\r
+EthCreateFilter(\r
+ IN UINT MaximumMulticastAddresses,\r
+ IN ETH_ADDRESS_CHANGE AddressChangeAction,\r
+ IN ETH_FILTER_CHANGE FilterChangeAction,\r
+ IN ETH_DEFERRED_CLOSE CloseAction,\r
+ IN PUCHAR AdapterAddress,\r
+ IN PNDIS_SPIN_LOCK Lock,\r
+ OUT PETH_FILTER *Filter);\r
+\r
+VOID\r
+EXPIMP\r
+EthDeleteFilter(\r
+ IN PETH_FILTER Filter);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+EthDeleteFilterOpenAdapter(\r
+ IN PETH_FILTER Filter,\r
+ IN NDIS_HANDLE NdisFilterHandle,\r
+ IN PNDIS_REQUEST NdisRequest);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+EthFilterAdjust(\r
+ IN PETH_FILTER Filter,\r
+ IN NDIS_HANDLE NdisFilterHandle,\r
+ IN PNDIS_REQUEST NdisRequest,\r
+ IN UINT FilterClasses,\r
+ IN BOOLEAN Set);\r
+\r
+VOID\r
+EXPIMP\r
+EthFilterIndicateReceive(\r
+ IN PETH_FILTER Filter,\r
+ IN NDIS_HANDLE MacReceiveContext,\r
+ IN PCHAR Address,\r
+ IN PVOID HeaderBuffer,\r
+ IN UINT HeaderBufferSize,\r
+ IN PVOID LookaheadBuffer,\r
+ IN UINT LookaheadBufferSize,\r
+ IN UINT PacketSize);\r
+\r
+VOID\r
+EXPIMP\r
+EthFilterIndicateReceiveComplete(\r
+ IN PETH_FILTER Filter);\r
+\r
+BOOLEAN\r
+EXPIMP\r
+EthNoteFilterOpenAdapter(\r
+ IN PETH_FILTER Filter,\r
+ IN NDIS_HANDLE MacBindingHandle,\r
+ IN NDIS_HANDLE NdisBindingContext,\r
+ OUT PNDIS_HANDLE NdisFilterHandle);\r
+\r
+UINT\r
+EXPIMP\r
+EthNumberOfOpenFilterAddresses(\r
+ IN PETH_FILTER Filter,\r
+ IN NDIS_HANDLE NdisFilterHandle);\r
+\r
+VOID\r
+EXPIMP\r
+EthQueryGlobalFilterAddresses (\r
+ OUT PNDIS_STATUS Status,\r
+ IN PETH_FILTER Filter,\r
+ IN UINT SizeOfArray,\r
+ OUT PUINT NumberOfAddresses,\r
+ IN OUT CHAR AddressArray[] [ETH_LENGTH_OF_ADDRESS]);\r
+\r
+VOID\r
+EXPIMP\r
+EthQueryOpenFilterAddresses(\r
+ OUT PNDIS_STATUS Status,\r
+ IN PETH_FILTER Filter,\r
+ IN NDIS_HANDLE NdisFilterHandle,\r
+ IN UINT SizeOfArray,\r
+ OUT PUINT NumberOfAddresses,\r
+ IN OUT CHAR AddressArray[] [ETH_LENGTH_OF_ADDRESS]);\r
+\r
+BOOLEAN\r
+EXPIMP\r
+EthShouldAddressLoopBack(\r
+ IN PETH_FILTER Filter,\r
+ IN CHAR Address[ETH_LENGTH_OF_ADDRESS]);\r
+\r
+\r
+/* FDDI */\r
+\r
+#define FDDI_LENGTH_OF_LONG_ADDRESS 6\r
+#define FDDI_LENGTH_OF_SHORT_ADDRESS 2\r
+\r
+DECLARE_UNKNOWN_STRUCT(FDDI_FILTER)\r
+\r
+DECLARE_UNKNOWN_PROTOTYPE(FDDI_ADDRESS_CHANGE)\r
+DECLARE_UNKNOWN_PROTOTYPE(FDDI_FILTER_CHANGE)\r
+DECLARE_UNKNOWN_PROTOTYPE(FDDI_DEFERRED_CLOSE)\r
+\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+FddiChangeFilterLongAddresses(\r
+ IN PFDDI_FILTER Filter,\r
+ IN NDIS_HANDLE NdisFilterHandle,\r
+ IN PNDIS_REQUEST NdisRequest,\r
+ IN UINT AddressCount,\r
+ IN CHAR Addresses[] [FDDI_LENGTH_OF_LONG_ADDRESS],\r
+ IN BOOLEAN Set);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+FddiChangeFilterShortAddresses(\r
+ IN PFDDI_FILTER Filter,\r
+ IN NDIS_HANDLE NdisFilterHandle,\r
+ IN PNDIS_REQUEST NdisRequest,\r
+ IN UINT AddressCount,\r
+ IN CHAR Addresses[] [FDDI_LENGTH_OF_SHORT_ADDRESS],\r
+ IN BOOLEAN Set);\r
+\r
+BOOLEAN\r
+EXPIMP\r
+FddiCreateFilter(\r
+ IN UINT MaximumMulticastLongAddresses,\r
+ IN UINT MaximumMulticastShortAddresses,\r
+ IN FDDI_ADDRESS_CHANGE AddressChangeAction,\r
+ IN FDDI_FILTER_CHANGE FilterChangeAction,\r
+ IN FDDI_DEFERRED_CLOSE CloseAction,\r
+ IN PUCHAR AdapterLongAddress,\r
+ IN PUCHAR AdapterShortAddress,\r
+ IN PNDIS_SPIN_LOCK Lock,\r
+ OUT PFDDI_FILTER *Filter);\r
+\r
+VOID\r
+EXPIMP\r
+FddiDeleteFilter(\r
+ IN PFDDI_FILTER Filter);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+FddiDeleteFilterOpenAdapter(\r
+ IN PFDDI_FILTER Filter,\r
+ IN NDIS_HANDLE NdisFilterHandle,\r
+ IN PNDIS_REQUEST NdisRequest);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+FddiFilterAdjust(\r
+ IN PFDDI_FILTER Filter,\r
+ IN NDIS_HANDLE NdisFilterHandle,\r
+ IN PNDIS_REQUEST NdisRequest,\r
+ IN UINT FilterClasses,\r
+ IN BOOLEAN Set);\r
+\r
+VOID\r
+EXPIMP\r
+FddiFilterIndicateReceive(\r
+ IN PFDDI_FILTER Filter,\r
+ IN NDIS_HANDLE MacReceiveContext,\r
+ IN PCHAR Address,\r
+ IN UINT AddressLength,\r
+ IN PVOID HeaderBuffer,\r
+ IN UINT HeaderBufferSize,\r
+ IN PVOID LookaheadBuffer,\r
+ IN UINT LookaheadBufferSize,\r
+ IN UINT PacketSize);\r
+\r
+VOID\r
+EXPIMP\r
+FddiFilterIndicateReceiveComplete(\r
+ IN PFDDI_FILTER Filter);\r
+\r
+BOOLEAN\r
+EXPIMP\r
+FddiNoteFilterOpenAdapter(\r
+ IN PFDDI_FILTER Filter,\r
+ IN NDIS_HANDLE MacBindingHandle,\r
+ IN NDIS_HANDLE NdisBindingContext,\r
+ OUT PNDIS_HANDLE NdisFilterHandle);\r
+\r
+UINT\r
+EXPIMP\r
+FddiNumberOfOpenFilterLongAddresses(\r
+ IN PFDDI_FILTER Filter,\r
+ IN NDIS_HANDLE NdisFilterHandle);\r
+\r
+UINT\r
+EXPIMP\r
+FddiNumberOfOpenFilterShortAddresses(\r
+ IN PFDDI_FILTER Filter,\r
+ IN NDIS_HANDLE NdisFilterHandle);\r
+\r
+VOID\r
+EXPIMP\r
+FddiQueryGlobalFilterLongAddresses(\r
+ OUT PNDIS_STATUS Status,\r
+ IN PFDDI_FILTER Filter,\r
+ IN UINT SizeOfArray,\r
+ OUT PUINT NumberOfAddresses,\r
+ IN OUT CHAR AddressArray[] [FDDI_LENGTH_OF_LONG_ADDRESS]);\r
+\r
+VOID\r
+EXPIMP\r
+FddiQueryGlobalFilterShortAddresses(\r
+ OUT PNDIS_STATUS Status,\r
+ IN PFDDI_FILTER Filter,\r
+ IN UINT SizeOfArray,\r
+ OUT PUINT NumberOfAddresses,\r
+ IN OUT CHAR AddressArray[] [FDDI_LENGTH_OF_SHORT_ADDRESS]);\r
+\r
+VOID\r
+EXPIMP\r
+FddiQueryOpenFilterLongAddresses(\r
+ OUT PNDIS_STATUS Status,\r
+ IN PFDDI_FILTER Filter,\r
+ IN NDIS_HANDLE NdisFilterHandle,\r
+ IN UINT SizeOfArray,\r
+ OUT PUINT NumberOfAddresses,\r
+ IN OUT CHAR AddressArray[] [FDDI_LENGTH_OF_LONG_ADDRESS]);\r
+\r
+VOID\r
+EXPIMP\r
+FddiQueryOpenFilterShortAddresses(\r
+ OUT PNDIS_STATUS Status,\r
+ IN PFDDI_FILTER Filter,\r
+ IN NDIS_HANDLE NdisFilterHandle,\r
+ IN UINT SizeOfArray,\r
+ OUT PUINT NumberOfAddresses,\r
+ IN OUT CHAR AddressArray[] [FDDI_LENGTH_OF_SHORT_ADDRESS]);\r
+\r
+BOOLEAN\r
+EXPIMP\r
+FddiShouldAddressLoopBack(\r
+ IN PFDDI_FILTER Filter,\r
+ IN CHAR Address[],\r
+ IN UINT LengthOfAddress);\r
+\r
+\r
+/* Token Ring */\r
+\r
+#define TR_LENGTH_OF_FUNCTIONAL 4\r
+#define TR_LENGTH_OF_ADDRESS 6\r
+\r
+DECLARE_UNKNOWN_STRUCT(TR_FILTER)\r
+\r
+DECLARE_UNKNOWN_PROTOTYPE(TR_ADDRESS_CHANGE)\r
+DECLARE_UNKNOWN_PROTOTYPE(TR_GROUP_CHANGE)\r
+DECLARE_UNKNOWN_PROTOTYPE(TR_FILTER_CHANGE)\r
+DECLARE_UNKNOWN_PROTOTYPE(TR_DEFERRED_CLOSE)\r
+\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+TrChangeFunctionalAddress(\r
+ IN PTR_FILTER Filter,\r
+ IN NDIS_HANDLE NdisFilterHandle,\r
+ IN PNDIS_REQUEST NdisRequest,\r
+ IN CHAR FunctionalAddressArray[TR_LENGTH_OF_FUNCTIONAL],\r
+ IN BOOLEAN Set);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+TrChangeGroupAddress(\r
+ IN PTR_FILTER Filter,\r
+ IN NDIS_HANDLE NdisFilterHandle,\r
+ IN PNDIS_REQUEST NdisRequest,\r
+ IN CHAR GroupAddressArray[TR_LENGTH_OF_FUNCTIONAL],\r
+ IN BOOLEAN Set);\r
+\r
+BOOLEAN\r
+EXPIMP\r
+TrCreateFilter(\r
+ IN TR_ADDRESS_CHANGE AddressChangeAction,\r
+ IN TR_GROUP_CHANGE GroupChangeAction,\r
+ IN TR_FILTER_CHANGE FilterChangeAction,\r
+ IN TR_DEFERRED_CLOSE CloseAction,\r
+ IN PUCHAR AdapterAddress,\r
+ IN PNDIS_SPIN_LOCK Lock,\r
+ OUT PTR_FILTER *Filter);\r
+\r
+VOID\r
+EXPIMP\r
+TrDeleteFilter(\r
+ IN PTR_FILTER Filter);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+TrDeleteFilterOpenAdapter (\r
+ IN PTR_FILTER Filter,\r
+ IN NDIS_HANDLE NdisFilterHandle,\r
+ IN PNDIS_REQUEST NdisRequest);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+TrFilterAdjust(\r
+ IN PTR_FILTER Filter,\r
+ IN NDIS_HANDLE NdisFilterHandle,\r
+ IN PNDIS_REQUEST NdisRequest,\r
+ IN UINT FilterClasses,\r
+ IN BOOLEAN Set);\r
+\r
+VOID\r
+EXPIMP\r
+TrFilterIndicateReceive(\r
+ IN PTR_FILTER Filter,\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
+VOID\r
+EXPIMP\r
+TrFilterIndicateReceiveComplete(\r
+ IN PTR_FILTER Filter);\r
+\r
+BOOLEAN\r
+EXPIMP\r
+TrNoteFilterOpenAdapter(\r
+ IN PTR_FILTER Filter,\r
+ IN NDIS_HANDLE MacBindingHandle,\r
+ IN NDIS_HANDLE NdisBindingContext,\r
+ OUT PNDIS_HANDLE NdisFilterHandle);\r
+\r
+BOOLEAN\r
+EXPIMP\r
+TrShouldAddressLoopBack(\r
+ IN PTR_FILTER Filter,\r
+ IN CHAR DestinationAddress[TR_LENGTH_OF_ADDRESS],\r
+ IN CHAR SourceAddress[TR_LENGTH_OF_ADDRESS]);\r
+\r
+\r
+\r
+/* Prototypes for NDIS_MINIPORT_CHARACTERISTICS */\r
+\r
+typedef BOOLEAN (*W_CHECK_FOR_HANG_HANDLER)(\r
+ IN NDIS_HANDLE MiniportAdapterContext);\r
+\r
+typedef VOID (*W_DISABLE_INTERRUPT_HANDLER)(\r
+ IN NDIS_HANDLE MiniportAdapterContext);\r
+\r
+typedef VOID (*W_ENABLE_INTERRUPT_HANDLER)(\r
+ IN NDIS_HANDLE MiniportAdapterContext);\r
+\r
+typedef VOID (*W_HALT_HANDLER)(\r
+ IN NDIS_HANDLE MiniportAdapterContext);\r
+\r
+typedef VOID (*W_HANDLE_INTERRUPT_HANDLER)(\r
+ IN NDIS_HANDLE MiniportAdapterContext);\r
+\r
+typedef NDIS_STATUS (*W_INITIALIZE_HANDLER)(\r
+ OUT PNDIS_STATUS OpenErrorStatus,\r
+ OUT PUINT SelectedMediumIndex,\r
+ IN PNDIS_MEDIUM MediumArray,\r
+ IN UINT MediumArraySize,\r
+ IN NDIS_HANDLE MiniportAdapterContext,\r
+ IN NDIS_HANDLE WrapperConfigurationContext);\r
+\r
+typedef VOID (*W_ISR_HANDLER)(\r
+ OUT PBOOLEAN InterruptRecognized,\r
+ OUT PBOOLEAN QueueMiniportHandleInterrupt,\r
+ IN NDIS_HANDLE MiniportAdapterContext);\r
+\r
+typedef NDIS_STATUS (*W_QUERY_INFORMATION_HANDLER)(\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
+typedef NDIS_STATUS (*W_RECONFIGURE_HANDLER)(\r
+ OUT PNDIS_STATUS OpenErrorStatus,\r
+ IN NDIS_HANDLE MiniportAdapterContext,\r
+ IN NDIS_HANDLE WrapperConfigurationContext);\r
+\r
+typedef NDIS_STATUS (*W_RESET_HANDLER)(\r
+ OUT PBOOLEAN AddressingReset,\r
+ IN NDIS_HANDLE MiniportAdapterContext);\r
+\r
+typedef NDIS_STATUS (*W_SEND_HANDLER)(\r
+ IN NDIS_HANDLE MiniportAdapterContext,\r
+ IN PNDIS_PACKET Packet,\r
+ IN UINT Flags);\r
+\r
+typedef NDIS_STATUS (*WM_SEND_HANDLER)(\r
+ IN NDIS_HANDLE MiniportAdapterContext,\r
+ IN NDIS_HANDLE NdisLinkHandle,\r
+ IN PNDIS_WAN_PACKET Packet);\r
+\r
+typedef NDIS_STATUS (*W_SET_INFORMATION_HANDLER)(\r
+ IN NDIS_HANDLE MiniportAdapterContext,\r
+ IN NDIS_OID Oid,\r
+ IN PVOID InformationBuffer,\r
+ IN ULONG InformationBufferLength,\r
+ OUT PULONG BytesRead,\r
+ OUT PULONG BytesNeeded);\r
+\r
+typedef NDIS_STATUS (*W_TRANSFER_DATA_HANDLER)(\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
+typedef NDIS_STATUS (*WM_TRANSFER_DATA_HANDLER)(\r
+ VOID);\r
+\r
+typedef struct _NDIS30_MINIPORT_CHARACTERISTICS\r
+{\r
+ UCHAR MajorNdisVersion;\r
+ UCHAR MinorNdisVersion;\r
+ UINT Reserved;\r
+ W_CHECK_FOR_HANG_HANDLER CheckForHangHandler;\r
+ W_DISABLE_INTERRUPT_HANDLER DisableInterruptHandler;\r
+ W_ENABLE_INTERRUPT_HANDLER EnableInterruptHandler;\r
+ W_HALT_HANDLER HaltHandler;\r
+ W_HANDLE_INTERRUPT_HANDLER HandleInterruptHandler;\r
+ W_INITIALIZE_HANDLER InitializeHandler;\r
+ W_ISR_HANDLER ISRHandler;\r
+ W_QUERY_INFORMATION_HANDLER QueryInformationHandler;\r
+ W_RECONFIGURE_HANDLER ReconfigureHandler;\r
+ W_RESET_HANDLER ResetHandler;\r
+ union\r
+ {\r
+ W_SEND_HANDLER SendHandler;\r
+ WM_SEND_HANDLER WanSendHandler;\r
+ };\r
+ W_SET_INFORMATION_HANDLER SetInformationHandler;\r
+ union\r
+ {\r
+ W_TRANSFER_DATA_HANDLER TransferDataHandler;\r
+ WM_TRANSFER_DATA_HANDLER WanTransferDataHandler;\r
+ };\r
+} NDIS30_MINIPORT_CHARACTERISTICS;\r
+\r
+\r
+/* Extensions for NDIS 4.0 miniports */\r
+#ifdef NDIS40\r
+\r
+typedef VOID (*W_RETURN_PACKET_HANDLER)(\r
+ IN NDIS_HANDLE MiniportAdapterContext,\r
+ IN PNDIS_PACKET Packet);\r
+\r
+typedef VOID (*W_SEND_PACKETS_HANDLER)(\r
+ IN NDIS_HANDLE MiniportAdapterContext,\r
+ IN PPNDIS_PACKET PacketArray,\r
+ IN UINT NumberOfPackets);\r
+\r
+typedef VOID (*W_ALLOCATE_COMPLETE_HANDLER)(\r
+ IN NDIS_HANDLE MiniportAdapterContext,\r
+ IN PVOID VirtualAddress,\r
+ IN PNDIS_PHYSICAL_ADDRESS PhysicalAddress,\r
+ IN ULONG Length,\r
+ IN PVOID Context);\r
+\r
+typedef struct _NDIS40_MINIPORT_CHARACTERISTICS\r
+{\r
+ NDIS30_MINIPORT_CHARACTERISTICS;\r
+\r
+ W_RETURN_PACKET_HANDLER ReturnPacketHandler;\r
+ W_SEND_PACKETS_HANDLER SendPacketsHandler;\r
+ W_ALLOCATE_COMPLETE_HANDLER AllocateCompleteHandler;\r
+} NDIS40_MINIPORT_CHARACTERISTICS;\r
+\r
+#endif /* NDIS40 */\r
+\r
+/* Extensions for NDIS 5.0 miniports */\r
+\r
+#ifdef NDIS50\r
+\r
+typedef NDIS_STATUS (*W_CO_CREATE_VC_HANDLER)(\r
+ IN NDIS_HANDLE MiniportAdapterContext,\r
+ IN NDIS_HANDLE NdisVcHandle,\r
+ OUT PNDIS_HANDLE MiniportVcContext);\r
+\r
+typedef NDIS_STATUS (*W_CO_DELETE_VC_HANDLER)(\r
+ IN NDIS_HANDLE MiniportVcContext);\r
+\r
+typedef NDIS_STATUS (*W_CO_ACTIVATE_VC_HANDLER)(\r
+ IN NDIS_HANDLE MiniportVcContext,\r
+ IN OUT PCO_CALL_PARAMETERS CallParameters);\r
+\r
+typedef NDIS_STATUS (*W_CO_DEACTIVATE_VC_HANDLER)(\r
+ IN NDIS_HANDLE MiniportVcContext);\r
+\r
+typedef VOID (*W_CO_SEND_PACKETS_HANDLER)(\r
+ IN NDIS_HANDLE MiniportVcContext,\r
+ IN PPNDIS_PACKET PacketArray,\r
+ IN UINT NumberOfPackets);\r
+\r
+typedef NDIS_STATUS (*W_CO_REQUEST_HANDLER)(\r
+ IN NDIS_HANDLE MiniportAdapterContext,\r
+ IN NDIS_HANDLE MiniportVcContext OPTIONAL,\r
+ IN OUT PNDIS_REQUEST NdisRequest);\r
+\r
+typedef struct _NDIS50_MINIPORT_CHARACTERISTICS\r
+{\r
+ NDIS40_MINIPORT_CHARACTERISTICS;\r
+\r
+ W_CO_CREATE_VC_HANDLER CoCreateVcHandler;\r
+ W_CO_DELETE_VC_HANDLER CoDeleteVcHandler;\r
+ W_CO_ACTIVATE_VC_HANDLER CoActivateVcHandler;\r
+ W_CO_DEACTIVATE_VC_HANDLER CoDeactivateVcHandler;\r
+ W_CO_SEND_PACKETS_HANDLER CoSendPacketsHandler;\r
+ W_CO_REQUEST_HANDLER CoRequestHandler;\r
+} NDIS50_MINIPORT_CHARACTERISTICS;\r
+\r
+#endif /* NDIS50 */\r
+\r
+\r
+#ifndef NDIS50\r
+#ifndef NDIS40\r
+typedef struct _NDIS30_MINIPORT_CHARACTERISTICS NDIS_MINIPORT_CHARACTERISTICS;\r
+#else /* NDIS40 */\r
+typedef struct _NDIS40_MINIPORT_CHARACTERISTICS NDIS_MINIPORT_CHARACTERISTICS;\r
+#endif /* NDIS40 */\r
+#else /* NDIS50 */\r
+typedef struct _NDIS50_MINIPORT_CHARACTERISTICS NDIS_MINIPORT_CHARACTERISTICS;\r
+#endif /* NDIS50 */\r
+\r
+typedef NDIS_MINIPORT_CHARACTERISTICS *PNDIS_MINIPORT_CHARACTERISTICS;\r
+\r
+\r
+typedef struct _NDIS_MINIPORT_BLOCK NDIS_MINIPORT_BLOCK, *PNDIS_MINIPORT_BLOCK;\r
+\r
+\r
+typedef struct _NDIS_MINIPORT_INTERRUPT\r
+{\r
+ PKINTERRUPT InterruptObject;\r
+ KSPIN_LOCK DpcCountLock;\r
+ PVOID MiniportIdField;\r
+ W_ISR_HANDLER MiniportIsr;\r
+ W_HANDLE_INTERRUPT_HANDLER MiniportDpc;\r
+ KDPC InterruptDpc;\r
+ PNDIS_MINIPORT_BLOCK Miniport;\r
+\r
+ UCHAR DpcCount;\r
+ BOOLEAN Filler1;\r
+\r
+ KEVENT DpcsCompletedEvent;\r
+\r
+ BOOLEAN SharedInterrupt;\r
+ BOOLEAN IsrRequested;\r
+} NDIS_MINIPORT_INTERRUPT, *PNDIS_MINIPORT_INTERRUPT;\r
+\r
+\r
+typedef struct _NDIS_MINIPORT_TIMER\r
+{\r
+ KTIMER Timer;\r
+ KDPC Dpc;\r
+ PNDIS_TIMER_FUNCTION MiniportTimerFunction;\r
+ PVOID MiniportTimerContext;\r
+ PNDIS_MINIPORT_BLOCK Miniport;\r
+ struct _NDIS_MINIPORT_TIMER *NextDeferredTimer;\r
+} NDIS_MINIPORT_TIMER, *PNDIS_MINIPORT_TIMER;\r
+\r
+\r
+\r
+/* NDIS intermediate miniport structures */\r
+\r
+typedef VOID (*W_MINIPORT_CALLBACK)(\r
+ IN NDIS_HANDLE MiniportAdapterContext,\r
+ IN PVOID CallbackContext);\r
+\r
+\r
+/* Routines for NDIS miniport drivers */\r
+\r
+VOID\r
+EXPIMP\r
+NdisMCloseLog(\r
+ IN NDIS_HANDLE LogHandle);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisMCreateLog(\r
+ IN NDIS_HANDLE MiniportAdapterHandle,\r
+ IN UINT Size,\r
+ OUT PNDIS_HANDLE LogHandle);\r
+\r
+VOID\r
+EXPIMP\r
+NdisMDeregisterAdapterShutdownHandler(\r
+ IN NDIS_HANDLE MiniportHandle);\r
+\r
+VOID\r
+EXPIMP\r
+NdisMFlushLog(\r
+ IN NDIS_HANDLE LogHandle);\r
+\r
+VOID\r
+EXPIMP\r
+NdisMIndicateStatus(\r
+ IN NDIS_HANDLE MiniportAdapterHandle,\r
+ IN NDIS_STATUS GeneralStatus,\r
+ IN PVOID StatusBuffer,\r
+ IN UINT StatusBufferSize);\r
+\r
+VOID\r
+EXPIMP\r
+NdisMIndicateStatusComplete(\r
+ IN NDIS_HANDLE MiniportAdapterHandle);\r
+\r
+VOID\r
+EXPIMP\r
+NdisInitializeWrapper(\r
+ OUT PNDIS_HANDLE NdisWrapperHandle,\r
+ IN PVOID SystemSpecific1,\r
+ IN PVOID SystemSpecific2,\r
+ IN PVOID SystemSpecific3);\r
+\r
+/*\r
+ * VOID NdisMInitializeWrapper(\r
+ * OUT PNDIS_HANDLE NdisWrapperHandle,\r
+ * IN PVOID SystemSpecific1,\r
+ * IN PVOID SystemSpecific2,\r
+ * IN PVOID SystemSpecific3);\r
+ */\r
+#define NdisMInitializeWrapper(n, s1, s2, s3) \\r
+ NdisInitializeWrapper((n),(s1),(s2),(s3))\r
+\r
+VOID\r
+EXPIMP\r
+NdisMRegisterAdapterShutdownHandler(\r
+ IN NDIS_HANDLE MiniportHandle,\r
+ IN PVOID ShutdownContext,\r
+ IN ADAPTER_SHUTDOWN_HANDLER ShutdownHandler);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisMRegisterMiniport(\r
+ IN NDIS_HANDLE NdisWrapperHandle,\r
+ IN PNDIS_MINIPORT_CHARACTERISTICS MiniportCharacteristics,\r
+ IN UINT CharacteristicsLength);\r
+\r
+VOID\r
+EXPIMP\r
+NdisMResetComplete(\r
+ IN NDIS_HANDLE MiniportAdapterHandle,\r
+ IN NDIS_STATUS Status,\r
+ IN BOOLEAN AddressingReset);\r
+\r
+VOID\r
+EXPIMP\r
+NdisMSendComplete(\r
+ IN NDIS_HANDLE MiniportAdapterHandle,\r
+ IN PNDIS_PACKET Packet,\r
+ IN NDIS_STATUS Status);\r
+\r
+VOID\r
+EXPIMP\r
+NdisMSendResourcesAvailable(\r
+ IN NDIS_HANDLE MiniportAdapterHandle);\r
+\r
+VOID\r
+EXPIMP\r
+NdisMSetAttributes(\r
+ IN NDIS_HANDLE MiniportAdapterHandle,\r
+ IN NDIS_HANDLE MiniportAdapterContext,\r
+ IN BOOLEAN BusMaster,\r
+ IN NDIS_INTERFACE_TYPE AdapterType);\r
+\r
+VOID \r
+EXPIMP\r
+NdisMSetAttributesEx(\r
+ IN NDIS_HANDLE MiniportAdapterHandle,\r
+ IN NDIS_HANDLE MiniportAdapterContext,\r
+ IN UINT CheckForHangTimeInSeconds OPTIONAL,\r
+ IN ULONG AttributeFlags,\r
+ IN NDIS_INTERFACE_TYPE AdapterType); \r
+\r
+VOID\r
+EXPIMP\r
+NdisMSleep(\r
+ IN ULONG MicrosecondsToSleep);\r
+\r
+BOOLEAN\r
+EXPIMP\r
+NdisMSynchronizeWithInterrupt(\r
+ IN PNDIS_MINIPORT_INTERRUPT Interrupt,\r
+ IN PVOID SynchronizeFunction,\r
+ IN PVOID SynchronizeContext);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisMWriteLogData(\r
+ IN NDIS_HANDLE LogHandle,\r
+ IN PVOID LogBuffer,\r
+ IN UINT LogBufferSize);\r
+\r
+VOID\r
+EXPIMP\r
+NdisTerminateWrapper(\r
+ IN NDIS_HANDLE NdisWrapperHandle,\r
+ IN PVOID SystemSpecific);\r
+\r
+\r
+\r
+/* Routines for intermediate miniport drivers */\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisIMDeInitializeDeviceInstance(\r
+ IN NDIS_HANDLE NdisMiniportHandle);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisIMInitializeDeviceInstance(\r
+ IN NDIS_HANDLE DriverHandle,\r
+ IN PNDIS_STRING DeviceInstance);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisIMQueueMiniportCallback(\r
+ IN NDIS_HANDLE MiniportAdapterHandle,\r
+ IN W_MINIPORT_CALLBACK CallbackRoutine,\r
+ IN PVOID CallbackContext);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisIMRegisterLayeredMiniport(\r
+ IN NDIS_HANDLE NdisWrapperHandle,\r
+ IN PNDIS_MINIPORT_CHARACTERISTICS MiniportCharacteristics,\r
+ IN UINT CharacteristicsLength,\r
+ OUT PNDIS_HANDLE DriverHandle);\r
+\r
+VOID\r
+EXPIMP\r
+NdisIMRevertBack(\r
+ IN NDIS_HANDLE MiniportAdapterHandle,\r
+ IN NDIS_HANDLE SwitchHandle);\r
+\r
+BOOLEAN\r
+EXPIMP\r
+NdisIMSwitchToMiniport(\r
+ IN NDIS_HANDLE MiniportAdapterHandle,\r
+ OUT PNDIS_HANDLE SwitchHandle);\r
+\r
+\r
+VOID\r
+EXPIMP\r
+NdisMSetResetTimeout(\r
+ IN NDIS_HANDLE MiniportAdapterHandle,\r
+ IN UINT TimeInSeconds);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisMAllocateMapRegisters(\r
+ IN NDIS_HANDLE MiniportAdapterHandle,\r
+ IN UINT DmaChannel,\r
+ IN BOOLEAN Dma32BitAddresses,\r
+ IN ULONG PhysicalMapRegistersNeeded,\r
+ IN ULONG MaximumPhysicalMapping);\r
+\r
+VOID\r
+EXPIMP\r
+NdisMFreeMapRegisters(\r
+ IN NDIS_HANDLE MiniportAdapterHandle);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisMRegisterIoPortRange(\r
+ OUT PVOID * PortOffset,\r
+ IN NDIS_HANDLE MiniportAdapterHandle,\r
+ IN UINT InitialPort,\r
+ IN UINT NumberOfPorts);\r
+\r
+VOID\r
+EXPIMP\r
+NdisMDeregisterIoPortRange(\r
+ IN NDIS_HANDLE MiniportAdapterHandle,\r
+ IN UINT InitialPort,\r
+ IN UINT NumberOfPorts,\r
+ IN PVOID PortOffset);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisMMapIoSpace(\r
+ OUT PVOID * VirtualAddress,\r
+ IN NDIS_HANDLE MiniportAdapterHandle,\r
+ IN NDIS_PHYSICAL_ADDRESS PhysicalAddress,\r
+ IN UINT Length);\r
+\r
+VOID\r
+EXPIMP\r
+NdisMUnmapIoSpace(\r
+ IN NDIS_HANDLE MiniportAdapterHandle,\r
+ IN PVOID VirtualAddress,\r
+ IN UINT Length);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisMRegisterInterrupt(\r
+ OUT PNDIS_MINIPORT_INTERRUPT Interrupt,\r
+ IN NDIS_HANDLE MiniportAdapterHandle,\r
+ IN UINT InterruptVector,\r
+ IN UINT InterruptLevel,\r
+ IN BOOLEAN RequestIsr,\r
+ IN BOOLEAN SharedInterrupt,\r
+ IN NDIS_INTERRUPT_MODE InterruptMode);\r
+\r
+VOID\r
+EXPIMP\r
+NdisMDeregisterInterrupt(\r
+ IN PNDIS_MINIPORT_INTERRUPT Interrupt);\r
+\r
+BOOLEAN\r
+EXPIMP\r
+NdisMSynchronizeWithInterrupt(\r
+ IN PNDIS_MINIPORT_INTERRUPT Interrupt,\r
+ IN PVOID SynchronizeFunction,\r
+ IN PVOID SynchronizeContext);\r
+\r
+VOID\r
+EXPIMP\r
+NdisMQueryAdapterResources(\r
+ OUT PNDIS_STATUS Status,\r
+ IN NDIS_HANDLE WrapperConfigurationContext,\r
+ OUT PNDIS_RESOURCE_LIST ResourceList,\r
+ IN OUT PUINT BufferSize);\r
+\r
+\r
+/* Functions obsoleted by NDIS 5.0 */\r
+\r
+VOID\r
+EXPIMP\r
+NdisFreeDmaChannel(\r
+ IN PNDIS_HANDLE NdisDmaHandle);\r
+\r
+VOID\r
+EXPIMP\r
+NdisFreeSharedMemory(\r
+ IN NDIS_HANDLE NdisAdapterHandle,\r
+ IN ULONG Length,\r
+ IN BOOLEAN Cached,\r
+ IN PVOID VirtualAddress,\r
+ IN NDIS_PHYSICAL_ADDRESS PhysicalAddress); \r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisIMQueueMiniportCallback(\r
+ IN NDIS_HANDLE MiniportAdapterHandle,\r
+ IN W_MINIPORT_CALLBACK CallbackRoutine,\r
+ IN PVOID CallbackContext);\r
+\r
+VOID\r
+EXPIMP\r
+NdisIMRevertBack(\r
+ IN NDIS_HANDLE MiniportAdapterHandle,\r
+ IN NDIS_HANDLE SwitchHandle);\r
+\r
+BOOLEAN\r
+EXPIMP\r
+NdisIMSwitchToMiniport(\r
+ IN NDIS_HANDLE MiniportAdapterHandle,\r
+ OUT PNDIS_HANDLE SwitchHandle);\r
+\r
+VOID\r
+EXPIMP\r
+NdisSetupDmaTransfer(\r
+ OUT PNDIS_STATUS Status,\r
+ IN PNDIS_HANDLE NdisDmaHandle,\r
+ IN PNDIS_BUFFER Buffer,\r
+ IN ULONG Offset,\r
+ IN ULONG Length,\r
+ IN BOOLEAN WriteToDevice);\r
+\r
+NTSTATUS\r
+EXPIMP\r
+NdisUpcaseUnicodeString(\r
+ OUT PUNICODE_STRING DestinationString, \r
+ IN PUNICODE_STRING SourceString);\r
+\r
+VOID\r
+EXPIMP\r
+NdisUpdateSharedMemory(\r
+ IN NDIS_HANDLE NdisAdapterHandle,\r
+ IN ULONG Length,\r
+ IN PVOID VirtualAddress,\r
+ IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);\r
+\r
+#endif /* NDIS_WRAPPER || NDIS_MINIPORT_DRIVER */\r
+\r
+#ifdef __cplusplus\r
+};\r
+#endif /* __cplusplus */\r
+\r
+#endif /* __NDIS_H */\r
+\r
+/* EOF */\r
--- /dev/null
+/*\r
+ * COPYRIGHT: See COPYING in the top level directory\r
+ * PROJECT: ReactOS TDI library\r
+ * FILE: include/net/tdikrnl.h\r
+ * PURPOSE: TDI definitions for kernel mode drivers\r
+ */\r
+#ifndef __TDIKRNL_H\r
+#define __TDIKRNL_H\r
+\r
+#include "tdi.h"\r
+\r
+#ifndef STDCALL\r
+#define STDCALL\r
+#endif\r
+\r
+typedef struct _TDI_REQUEST_KERNEL\r
+{\r
+ ULONG RequestFlags;\r
+ PTDI_CONNECTION_INFORMATION RequestConnectionInformation;\r
+ PTDI_CONNECTION_INFORMATION ReturnConnectionInformation;\r
+ PVOID RequestSpecific;\r
+} TDI_REQUEST_KERNEL, *PTDI_REQUEST_KERNEL;\r
+\r
+/* Request codes */\r
+#define TDI_ASSOCIATE_ADDRESS 0x01\r
+#define TDI_DISASSOCIATE_ADDRESS 0x02\r
+#define TDI_CONNECT 0x03\r
+#define TDI_LISTEN 0x04\r
+#define TDI_ACCEPT 0x05\r
+#define TDI_DISCONNECT 0x06\r
+#define TDI_SEND 0x07\r
+#define TDI_RECEIVE 0x08\r
+#define TDI_SEND_DATAGRAM 0x09\r
+#define TDI_RECEIVE_DATAGRAM 0x0A\r
+#define TDI_SET_EVENT_HANDLER 0x0B\r
+#define TDI_QUERY_INFORMATION 0x0C\r
+#define TDI_SET_INFORMATION 0x0D\r
+#define TDI_ACTION 0x0E\r
+\r
+#define TDI_DIRECT_SEND 0x27\r
+#define TDI_DIRECT_SEND_DATAGRAM 0x29\r
+\r
+\r
+#define TDI_TRANSPORT_ADDRESS_FILE 1\r
+#define TDI_CONNECTION_FILE 2\r
+#define TDI_CONTROL_CHANNEL_FILE 3\r
+\r
+/* Internal TDI IOCTLS */\r
+#define IOCTL_TDI_QUERY_DIRECT_SEND_HANDLER TDI_CONTROL_CODE(0x80, METHOD_NEITHER)\r
+#define IOCTL_TDI_QUERY_DIRECT_SENDDG_HANDLER TDI_CONTROL_CODE(0x81, METHOD_NEITHER)\r
+\r
+/* TdiAssociateAddress */\r
+typedef struct _TDI_REQUEST_KERNEL_ASSOCIATE\r
+{\r
+ HANDLE AddressHandle;\r
+} TDI_REQUEST_KERNEL_ASSOCIATE, *PTDI_REQUEST_KERNEL_ASSOCIATE;\r
+\r
+/* TdiDisassociateAddress */\r
+typedef TDI_REQUEST_KERNEL TDI_REQUEST_KERNEL_DISASSOCIATE,\r
+ *PTDI_REQUEST_KERNEL_DISASSOCIATE;\r
+\r
+/* TdiAccept */\r
+typedef struct _TDI_REQUEST_KERNEL_ACCEPT\r
+{\r
+ PTDI_CONNECTION_INFORMATION RequestConnectionInformation;\r
+ PTDI_CONNECTION_INFORMATION ReturnConnectionInformation;\r
+} TDI_REQUEST_KERNEL_ACCEPT, *PTDI_REQUEST_KERNEL_ACCEPT;\r
+\r
+/* TdiReceive */\r
+typedef struct _TDI_REQUEST_KERNEL_RECEIVE\r
+{\r
+ ULONG ReceiveLength;\r
+ ULONG ReceiveFlags;\r
+} TDI_REQUEST_KERNEL_RECEIVE, *PTDI_REQUEST_KERNEL_RECEIVE;\r
+\r
+/* TdiReceiveDatagram */\r
+typedef struct _TDI_REQUEST_KERNEL_RECEIVEDG\r
+{\r
+ ULONG ReceiveLength;\r
+ PTDI_CONNECTION_INFORMATION ReceiveDatagramInformation;\r
+ PTDI_CONNECTION_INFORMATION ReturnDatagramInformation;\r
+ ULONG ReceiveFlags;\r
+} TDI_REQUEST_KERNEL_RECEIVEDG, *PTDI_REQUEST_KERNEL_RECEIVEDG;\r
+\r
+/* TdiSend */\r
+typedef struct _TDI_REQUEST_KERNEL_SEND\r
+{\r
+ ULONG SendLength;\r
+ ULONG SendFlags;\r
+} TDI_REQUEST_KERNEL_SEND, *PTDI_REQUEST_KERNEL_SEND;\r
+\r
+/* TdiSendDatagram */\r
+typedef struct _TDI_REQUEST_KERNEL_SENDDG\r
+{\r
+ ULONG SendLength;\r
+ PTDI_CONNECTION_INFORMATION SendDatagramInformation;\r
+} TDI_REQUEST_KERNEL_SENDDG, *PTDI_REQUEST_KERNEL_SENDDG;\r
+\r
+/* TdiSetEventHandler */\r
+typedef struct _TDI_REQUEST_KERNEL_SET_EVENT\r
+{\r
+ LONG EventType;\r
+ PVOID EventHandler;\r
+ PVOID EventContext;\r
+} TDI_REQUEST_KERNEL_SET_EVENT, *PTDI_REQUEST_KERNEL_SET_EVENT;\r
+\r
+/* TdiQueryInformation */\r
+typedef struct _TDI_REQUEST_KERNEL_QUERY_INFO\r
+{\r
+ LONG QueryType;\r
+ PTDI_CONNECTION_INFORMATION RequestConnectionInformation;\r
+} TDI_REQUEST_KERNEL_QUERY_INFORMATION, *PTDI_REQUEST_KERNEL_QUERY_INFORMATION;\r
+\r
+/* TdiSetInformation */\r
+typedef struct _TDI_REQUEST_KERNEL_SET_INFO\r
+{\r
+ LONG SetType;\r
+ PTDI_CONNECTION_INFORMATION RequestConnectionInformation;\r
+} TDI_REQUEST_KERNEL_SET_INFORMATION, *PTDI_REQUEST_KERNEL_SET_INFORMATION;\r
+\r
+\r
+/* Event types */\r
+#define TDI_EVENT_CONNECT 0\r
+#define TDI_EVENT_DISCONNECT 1\r
+#define TDI_EVENT_ERROR 2\r
+#define TDI_EVENT_RECEIVE 3\r
+#define TDI_EVENT_RECEIVE_DATAGRAM 4\r
+#define TDI_EVENT_RECEIVE_EXPEDITED 5\r
+#define TDI_EVENT_SEND_POSSIBLE 6\r
+#define TDI_EVENT_CHAINED_RECEIVE 7\r
+#define TDI_EVENT_CHAINED_RECEIVE_DATAGRAM 8\r
+#define TDI_EVENT_CHAINED_RECEIVE_EXPEDITED 9\r
+\r
+typedef NTSTATUS (*PTDI_IND_CONNECT)(\r
+ IN PVOID TdiEventContext,\r
+ IN LONG RemoteAddressLength,\r
+ IN PVOID RemoteAddress,\r
+ IN LONG UserDataLength,\r
+ IN PVOID UserData,\r
+ IN LONG OptionsLength,\r
+ IN PVOID Options,\r
+ OUT CONNECTION_CONTEXT *ConnectionContext,\r
+ OUT PIRP *AcceptIrp);\r
+\r
+NTSTATUS STDCALL TdiDefaultConnectHandler(\r
+ IN PVOID TdiEventContext,\r
+ IN LONG RemoteAddressLength,\r
+ IN PVOID RemoteAddress,\r
+ IN LONG UserDataLength,\r
+ IN PVOID UserData,\r
+ IN LONG OptionsLength,\r
+ IN PVOID Options,\r
+ OUT CONNECTION_CONTEXT *ConnectionContext,\r
+ OUT PIRP *AcceptIrp);\r
+\r
+typedef NTSTATUS (*PTDI_IND_DISCONNECT)(\r
+ IN PVOID TdiEventContext,\r
+ IN CONNECTION_CONTEXT ConnectionContext,\r
+ IN LONG DisconnectDataLength,\r
+ IN PVOID DisconnectData,\r
+ IN LONG DisconnectInformationLength,\r
+ IN PVOID DisconnectInformation,\r
+ IN ULONG DisconnectFlags);\r
+\r
+NTSTATUS STDCALL TdiDefaultDisconnectHandler(\r
+ IN PVOID TdiEventContext,\r
+ IN CONNECTION_CONTEXT ConnectionContext,\r
+ IN LONG DisconnectDataLength,\r
+ IN PVOID DisconnectData,\r
+ IN LONG DisconnectInformationLength,\r
+ IN PVOID DisconnectInformation,\r
+ IN ULONG DisconnectFlags);\r
+\r
+typedef NTSTATUS (*PTDI_IND_ERROR)(\r
+ IN PVOID TdiEventContext,\r
+ IN NTSTATUS Status);\r
+\r
+NTSTATUS STDCALL TdiDefaultErrorHandler(\r
+ IN PVOID TdiEventContext,\r
+ IN NTSTATUS Status);\r
+\r
+typedef NTSTATUS (*PTDI_IND_RECEIVE)(\r
+ IN PVOID TdiEventContext,\r
+ IN CONNECTION_CONTEXT ConnectionContext,\r
+ IN ULONG ReceiveFlags,\r
+ IN ULONG BytesIndicated,\r
+ IN ULONG BytesAvailable,\r
+ OUT ULONG *BytesTaken,\r
+ IN PVOID Tsdu,\r
+ OUT PIRP *IoRequestPacket);\r
+\r
+NTSTATUS STDCALL TdiDefaultReceiveHandler(\r
+ IN PVOID TdiEventContext,\r
+ IN CONNECTION_CONTEXT ConnectionContext,\r
+ IN ULONG ReceiveFlags,\r
+ IN ULONG BytesIndicated,\r
+ IN ULONG BytesAvailable,\r
+ OUT ULONG *BytesTaken,\r
+ IN PVOID Tsdu,\r
+ OUT PIRP *IoRequestPacket);\r
+\r
+typedef NTSTATUS (*PTDI_IND_RECEIVE_DATAGRAM)(\r
+ IN PVOID TdiEventContext,\r
+ IN LONG SourceAddressLength,\r
+ IN PVOID SourceAddress,\r
+ IN LONG OptionsLength,\r
+ IN PVOID Options,\r
+ IN ULONG ReceiveDatagramFlags,\r
+ IN ULONG BytesIndicated,\r
+ IN ULONG BytesAvailable,\r
+ OUT ULONG *BytesTaken,\r
+ IN PVOID Tsdu,\r
+ OUT PIRP *IoRequestPacket);\r
+\r
+NTSTATUS STDCALL TdiDefaultRcvDatagramHandler(\r
+ IN PVOID TdiEventContext,\r
+ IN LONG SourceAddressLength,\r
+ IN PVOID SourceAddress,\r
+ IN LONG OptionsLength,\r
+ IN PVOID Options,\r
+ IN ULONG ReceiveDatagramFlags,\r
+ IN ULONG BytesIndicated,\r
+ IN ULONG BytesAvailable,\r
+ OUT ULONG *BytesTaken,\r
+ IN PVOID Tsdu,\r
+ OUT PIRP *IoRequestPacket);\r
+\r
+typedef NTSTATUS (*PTDI_IND_RECEIVE_EXPEDITED)(\r
+ IN PVOID TdiEventContext,\r
+ IN CONNECTION_CONTEXT ConnectionContext,\r
+ IN ULONG ReceiveFlags,\r
+ IN ULONG BytesIndicated,\r
+ IN ULONG BytesAvailable,\r
+ OUT ULONG *BytesTaken,\r
+ IN PVOID Tsdu,\r
+ OUT PIRP *IoRequestPacket);\r
+\r
+NTSTATUS STDCALL TdiDefaultRcvExpeditedHandler(\r
+ IN PVOID TdiEventContext,\r
+ IN CONNECTION_CONTEXT ConnectionContext,\r
+ IN ULONG ReceiveFlags,\r
+ IN ULONG BytesIndicated,\r
+ IN ULONG BytesAvailable,\r
+ OUT ULONG *BytesTaken,\r
+ IN PVOID Tsdu,\r
+ OUT PIRP *IoRequestPacket);\r
+\r
+typedef NTSTATUS (*PTDI_IND_CHAINED_RECEIVE)(\r
+ IN PVOID TdiEventContext,\r
+ IN CONNECTION_CONTEXT ConnectionContext,\r
+ IN ULONG ReceiveFlags,\r
+ IN ULONG ReceiveLength,\r
+ IN ULONG StartingOffset,\r
+ IN PMDL Tsdu,\r
+ IN PVOID TsduDescriptor);\r
+\r
+NTSTATUS STDCALL TdiDefaultChainedReceiveHandler(\r
+ IN PVOID TdiEventContext,\r
+ IN CONNECTION_CONTEXT ConnectionContext,\r
+ IN ULONG ReceiveFlags,\r
+ IN ULONG ReceiveLength,\r
+ IN ULONG StartingOffset,\r
+ IN PMDL Tsdu,\r
+ IN PVOID TsduDescriptor);\r
+\r
+typedef NTSTATUS (*PTDI_IND_CHAINED_RECEIVE_DATAGRAM)(\r
+ IN PVOID TdiEventContext,\r
+ IN LONG SourceAddressLength,\r
+ IN PVOID SourceAddress,\r
+ IN LONG OptionsLength,\r
+ IN PVOID Options,\r
+ IN ULONG ReceiveDatagramFlags,\r
+ IN ULONG ReceiveDatagramLength,\r
+ IN ULONG StartingOffset,\r
+ IN PMDL Tsdu,\r
+ IN PVOID TsduDescriptor);\r
+\r
+NTSTATUS STDCALL TdiDefaultChainedRcvDatagramHandler(\r
+ IN PVOID TdiEventContext,\r
+ IN LONG SourceAddressLength,\r
+ IN PVOID SourceAddress,\r
+ IN LONG OptionsLength,\r
+ IN PVOID Options,\r
+ IN ULONG ReceiveDatagramFlags,\r
+ IN ULONG ReceiveDatagramLength,\r
+ IN ULONG StartingOffset,\r
+ IN PMDL Tsdu,\r
+ IN PVOID TsduDescriptor);\r
+\r
+typedef NTSTATUS (*PTDI_IND_CHAINED_RECEIVE_EXPEDITED)(\r
+ IN PVOID TdiEventContext,\r
+ IN CONNECTION_CONTEXT ConnectionContext,\r
+ IN ULONG ReceiveFlags,\r
+ IN ULONG ReceiveLength,\r
+ IN ULONG StartingOffset,\r
+ IN PMDL Tsdu,\r
+ IN PVOID TsduDescriptor);\r
+\r
+NTSTATUS STDCALL TdiDefaultChainedRcvExpeditedHandler(\r
+ IN PVOID TdiEventContext,\r
+ IN CONNECTION_CONTEXT ConnectionContext,\r
+ IN ULONG ReceiveFlags,\r
+ IN ULONG ReceiveLength,\r
+ IN ULONG StartingOffset,\r
+ IN PMDL Tsdu,\r
+ IN PVOID TsduDescriptor);\r
+\r
+typedef NTSTATUS (*PTDI_IND_SEND_POSSIBLE)(\r
+ IN PVOID TdiEventContext,\r
+ IN PVOID ConnectionContext,\r
+ IN ULONG BytesAvailable);\r
+\r
+NTSTATUS STDCALL TdiDefaultSendPossibleHandler(\r
+ IN PVOID TdiEventContext,\r
+ IN PVOID ConnectionContext,\r
+ IN ULONG BytesAvailable);\r
+\r
+\r
+\r
+/* Macros and functions to build IRPs */\r
+\r
+#define TdiBuildBaseIrp( \\r
+ Irp, DevObj, FileObj, CompRoutine, Contxt, IrpSp, Minor) \\r
+{ \\r
+ IrpSp = IoGetNextIrpStackLocation(Irp); \\r
+ IrpSp->MajorFunction = IRP_MJ_INTERNAL_DEVICE_CONTROL; \\r
+ IrpSp->MinorFunction = (Minor); \\r
+ IrpSp->DeviceObject = (DevObj); \\r
+ IrpSp->FileObject = (FileObj); \\r
+ \\r
+ if (CompRoutine) \\r
+ IoSetCompletionRoutine(Irp, CompRoutine, Contxt, TRUE, TRUE, TRUE) \\r
+ else \\r
+ IoSetCompletionRoutine(Irp, NULL, NULL, FALSE, FALSE, FALSE); \\r
+}\r
+\r
+/*\r
+ * VOID TdiBuildAccept(\r
+ * IN PIRP Irp,\r
+ * IN PDEVICE_OBJECT DevObj,\r
+ * IN PFILE_OBJECT FileObj,\r
+ * IN PVOID CompRoutine,\r
+ * IN PVOID Contxt,\r
+ * IN PTDI_CONNECTION_INFORMATION RequestConnectionInfo,\r
+ * OUT PTDI_CONNECTION_INFORMATION ReturnConnectionInfo);\r
+ */\r
+#define TdiBuildAccept( \\r
+ Irp, DevObj, FileObj, CompRoutine, Contxt, \\r
+ RequestConnectionInfo, ReturnConnectionInfo) \\r
+ { \\r
+ PTDI_REQUEST_KERNEL_ACCEPT _Request; \\r
+ PIO_STACK_LOCATION _IrpSp; \\r
+ \\r
+ _IrpSp = IoGetNextIrpStackLocation(Irp); \\r
+ \\r
+ TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \\r
+ Contxt, _IrpSp, TDI_ACCEPT); \\r
+ \\r
+ _Request = (PTDI_REQUEST_KERNEL_ACCEPT)&_IrpSp->Parameters; \\r
+ _Request->RequestConnectionInformation = (RequestConnectionInfo); \\r
+ _Request->ReturnConnectionInformation = (ReturnConnectionInfo); \\r
+}\r
+\r
+/*\r
+ * VOID TdiBuildAction(\r
+ * IN PIRP Irp,\r
+ * IN PDEVICE_OBJECT DevObj,\r
+ * IN PFILE_OBJECT FileObj,\r
+ * IN PVOID CompRoutine,\r
+ * IN PVOID Contxt,\r
+ * IN PMDL MdlAddr);\r
+ */\r
+#define TdiBuildAction( \\r
+ Irp, DevObj, FileObj, CompRoutine, Contxt, MdlAddr) \\r
+{ \\r
+ PIO_STACK_LOCATION _IrpSp; \\r
+ \\r
+ _IrpSp = IoGetNextIrpStackLocation(Irp); \\r
+ \\r
+ TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \\r
+ Contxt, _IrpSp, TDI_ACTION); \\r
+ \\r
+ (Irp)->MdlAddress = (MdlAddr); \\r
+}\r
+\r
+/*\r
+ * VOID TdiBuildAssociateAddress(\r
+ * IN PIRP Irp,\r
+ * IN PDEVICE_OBJECT DevObj,\r
+ * IN PFILE_OBJECT FileObj,\r
+ * IN PVOID CompRoutine,\r
+ * IN PVOID Contxt,\r
+ * IN HANDLE AddrHandle);\r
+ */\r
+#define TdiBuildAssociateAddress( \\r
+ Irp, DevObj, FileObj, CompRoutine, Contxt, AddrHandle) \\r
+{ \\r
+ PTDI_REQUEST_KERNEL_ASSOCIATE _Request; \\r
+ PIO_STACK_LOCATION _IrpSp; \\r
+ \\r
+ _IrpSp = IoGetNextIrpStackLocation(Irp); \\r
+ \\r
+ TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \\r
+ Contxt, _IrpSp, TDI_ASSOCIATE_ADDRESS); \\r
+ \\r
+ _Request = (PTDI_REQUEST_KERNEL_ASSOCIATE)&_IrpSp->Parameters; \\r
+ _Request->AddressHandle = (HANDLE)(AddrHandle); \\r
+}\r
+\r
+/*\r
+ * VOID TdiBuildConnect(\r
+ * IN PIRP Irp,\r
+ * IN PDEVICE_OBJECT DevObj,\r
+ * IN PFILE_OBJECT FileObj,\r
+ * IN PVOID CompRoutine,\r
+ * IN PVOID Contxt,\r
+ * IN PLARGE_INTEGER Time,\r
+ * IN PTDI_CONNECTION_INFORMATION RequestConnectionInfo,\r
+ * OUT PTDI_CONNECTION_INFORMATION ReturnConnectionInfo); \r
+ */\r
+#define TdiBuildConnect( \\r
+ Irp, DevObj, FileObj, CompRoutine, Contxt, \\r
+ Time, RequestConnectionInfo, ReturnConnectionInfo) \\r
+{ \\r
+ PTDI_REQUEST_KERNEL _Request; \\r
+ PIO_STACK_LOCATION _IrpSp; \\r
+ \\r
+ _IrpSp = IoGetNextIrpStackLocation(Irp); \\r
+ \\r
+ TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \\r
+ Contxt, _IrpSp, TDI_CONNECT); \\r
+ \\r
+ _Request = (PTDI_REQUEST_KERNEL)&_IrpSp->Parameters; \\r
+ _Request->RequestConnectionInformation = (RequestConnectionInfo); \\r
+ _Request->ReturnConnectionInformation = (ReturnConnectionInfo); \\r
+ _Request->RequestSpecific = (PVOID)(Time); \\r
+}\r
+\r
+/*\r
+ * VOID TdiBuildDisassociateAddress(\r
+ * IN PIRP Irp,\r
+ * IN PDEVICE_OBJECT DevObj,\r
+ * IN PFILE_OBJECT FileObj,\r
+ * IN PVOID CompRoutine,\r
+ * IN PVOID Contxt);\r
+ */\r
+#define TdiBuildDisassociateAddress( \\r
+ Irp, DevObj, FileObj, CompRoutine, Contxt) \\r
+{ \\r
+ PIO_STACK_LOCATION _IrpSp; \\r
+ \\r
+ _IrpSp = IoGetNextIrpStackLocation(Irp); \\r
+ \\r
+ TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \\r
+ Contxt, _IrpSp, TDI_DISASSOCIATE_ADDRESS); \\r
+}\r
+\r
+/*\r
+ * VOID TdiBuildDisconnect(\r
+ * IN PIRP Irp,\r
+ * IN PDEVICE_OBJECT DevObj,\r
+ * IN PFILE_OBJECT FileObj,\r
+ * IN PVOID CompRoutine,\r
+ * IN PVOID Contxt,\r
+ * IN PLARGE_INTEGER Time,\r
+ * IN PULONG Flags,\r
+ * IN PTDI_CONNECTION_INFORMATION RequestConnectionInfo,\r
+ * OUT PTDI_CONNECTION_INFORMATION ReturnConnectionInfo); \r
+ */\r
+#define TdiBuildDisconnect( \\r
+ Irp, DevObj, FileObj, CompRoutine, Contxt, Time, \\r
+ Flags, RequestConnectionInfo, ReturnConnectionInfo) \\r
+{ \\r
+ PTDI_REQUEST_KERNEL _Request; \\r
+ PIO_STACK_LOCATION _IrpSp; \\r
+ \\r
+ _IrpSp = IoGetNextIrpStackLocation(Irp); \\r
+ \\r
+ TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \\r
+ Contxt, _IrpSp, TDI_DISCONNECT); \\r
+ \\r
+ _Request = (PTDI_REQUEST_KERNEL)&_IrpSp->Parameters; \\r
+ _Request->RequestConnectionInformation = (RequestConnectionInfo); \\r
+ _Request->ReturnConnectionInformation = (ReturnConnectionInfo); \\r
+ _Request->RequestSpecific = (PVOID)(Time); \\r
+ _Request->RequestFlags = (Flags); \\r
+}\r
+\r
+/*\r
+ * PIRP TdiBuildInternalDeviceControlIrp(\r
+ * IN CCHAR IrpSubFunction,\r
+ * IN PDEVICE_OBJECT DeviceObject,\r
+ * IN PFILE_OBJECT FileObject,\r
+ * IN PKEVENT Event,\r
+ * IN PIO_STATUS_BLOCK IoStatusBlock);\r
+ */\r
+#define TdiBuildInternalDeviceControlIrp( \\r
+ IrpSubFunction, DeviceObject, \\r
+ FileObject, Event, IoStatusBlock) \\r
+ IoBuildDeviceIoControlRequest( \\r
+ 0x00000003, DeviceObject, \\r
+ NULL, 0, NULL, 0, \\r
+ TRUE, Event, IoStatusBlock)\r
+\r
+/*\r
+ * VOID TdiBuildListen(\r
+ * IN PIRP Irp,\r
+ * IN PDEVICE_OBJECT DevObj,\r
+ * IN PFILE_OBJECT FileObj,\r
+ * IN PVOID CompRoutine,\r
+ * IN PVOID Contxt,\r
+ * IN ULONG Flags,\r
+ * IN PTDI_CONNECTION_INFORMATION RequestConnectionInfo,\r
+ * OUT PTDI_CONNECTION_INFORMATION ReturnConnectionInfo); \r
+ */\r
+#define TdiBuildListen( \\r
+ Irp, DevObj, FileObj, CompRoutine, Contxt, \\r
+ Flags, RequestConnectionInfo, ReturnConnectionInfo) \\r
+{ \\r
+ PTDI_REQUEST_KERNEL _Request; \\r
+ PIO_STACK_LOCATION _IrpSp; \\r
+ \\r
+ _IrpSp = IoGetNextIrpStackLocation(Irp); \\r
+ \\r
+ TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \\r
+ Contxt, _IrpSp, TDI_LISTEN); \\r
+ \\r
+ _Request = (PTDI_REQUEST_KERNEL)&_IrpSp->Parameters; \\r
+ _Request->RequestConnectionInformation = (RequestConnectionInfo); \\r
+ _Request->ReturnConnectionInformation = (ReturnConnectionInfo); \\r
+ _Request->RequestFlags = (Flags); \\r
+}\r
+\r
+VOID STDCALL TdiBuildNetbiosAddress(\r
+ IN PUCHAR NetbiosName,\r
+ IN BOOLEAN IsGroupName,\r
+ IN OUT PTA_NETBIOS_ADDRESS NetworkName);\r
+\r
+NTSTATUS STDCALL TdiBuildNetbiosAddressEa(\r
+ IN PUCHAR Buffer,\r
+ IN BOOLEAN IsGroupName,\r
+ IN PUCHAR NetbiosName);\r
+\r
+/*\r
+ * VOID TdiBuildQueryInformation(\r
+ * IN PIRP Irp,\r
+ * IN PDEVICE_OBJECT DevObj,\r
+ * IN PFILE_OBJECT FileObj,\r
+ * IN PVOID CompRoutine,\r
+ * IN PVOID Contxt,\r
+ * IN UINT QType,\r
+ * IN PMDL MdlAddr);\r
+ */\r
+#define TdiBuildQueryInformation( \\r
+ Irp, DevObj, FileObj, CompRoutine, Contxt, QType, MdlAddr) \\r
+{ \\r
+ PTDI_REQUEST_KERNEL_QUERY_INFORMATION _Request; \\r
+ PIO_STACK_LOCATION _IrpSp; \\r
+ \\r
+ _IrpSp = IoGetNextIrpStackLocation(Irp); \\r
+ \\r
+ TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \\r
+ Contxt, _IrpSp, TDI_QUERY_INFORMATION); \\r
+ \\r
+ _Request = (PTDI_REQUEST_KERNEL_QUERY_INFORMATION)&_IrpSp->Parameters; \\r
+ _Request->RequestConnectionInformation = NULL; \\r
+ _Request->QueryType = (ULONG)(QType); \\r
+ (Irp)->MdlAddress = (MdlAddr); \\r
+}\r
+\r
+/*\r
+ * VOID TdiBuildReceive(\r
+ * IN PIRP Irp,\r
+ * IN PDEVICE_OBJECT DevObj,\r
+ * IN PFILE_OBJECT FileObj,\r
+ * IN PVOID CompRoutine,\r
+ * IN PVOID Contxt,\r
+ * IN PMDL MdlAddr,\r
+ * IN ULONG InFlags, \r
+ * IN ULONG ReceiveLen); \r
+ */\r
+#define TdiBuildReceive( \\r
+ Irp, DevObj, FileObj, CompRoutine, Contxt, \\r
+ MdlAddr, InFlags, ReceiveLen) \\r
+{ \\r
+ PTDI_REQUEST_KERNEL_RECEIVE _Request; \\r
+ PIO_STACK_LOCATION _IrpSp; \\r
+ \\r
+ _IrpSp = IoGetNextIrpStackLocation(Irp); \\r
+ \\r
+ TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \\r
+ Contxt, _IrpSp, TDI_RECEIVE); \\r
+ \\r
+ _Request = (PTDI_REQUEST_KERNEL_RECEIVE)&_IrpSp->Parameters; \\r
+ _Request->ReceiveFlags = (InFlags); \\r
+ _Request->ReceiveLength = (ReceiveLen); \\r
+ (Irp)->MdlAddress = (MdlAddr); \\r
+}\r
+\r
+/*\r
+ * VOID TdiBuildReceiveDatagram(\r
+ * IN PIRP Irp,\r
+ * IN PDEVICE_OBJECT DevObj,\r
+ * IN PFILE_OBJECT FileObj,\r
+ * IN PVOID CompRoutine,\r
+ * IN PVOID Contxt,\r
+ * IN PMDL MdlAddr,\r
+ * IN ULONG ReceiveLen,\r
+ * IN PTDI_CONNECTION_INFORMATION ReceiveDatagramInfo,\r
+ * OUT PTDI_CONNECTION_INFORMATION ReturnInfo,\r
+ * ULONG InFlags); \r
+ */\r
+#define TdiBuildReceiveDatagram( \\r
+ Irp, DevObj, FileObj, CompRoutine, Contxt, MdlAddr, \\r
+ ReceiveLen, ReceiveDatagramInfo, ReturnInfo, InFlags) \\r
+{ \\r
+ PTDI_REQUEST_KERNEL_RECEIVEDG _Request; \\r
+ PIO_STACK_LOCATION _IrpSp; \\r
+ \\r
+ _IrpSp = IoGetNextIrpStackLocation(Irp); \\r
+ \\r
+ TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \\r
+ Contxt, _IrpSp, TDI_RECEIVE_DATAGRAM); \\r
+ \\r
+ _Request = (PTDI_REQUEST_KERNEL_RECEIVEDG)&_IrpSp->Parameters; \\r
+ _Request->ReceiveDatagramInformation = (ReceiveDatagramInfo); \\r
+ _Request->ReturnDatagramInformation = (ReturnInfo); \\r
+ _Request->ReceiveLength = (ReceiveLen); \\r
+ _Request->ReceiveFlags = (InFlags); \\r
+ (Irp)->MdlAddress = (MdlAddr); \\r
+}\r
+\r
+/*\r
+ * VOID TdiBuildSend(\r
+ * IN PIRP Irp,\r
+ * IN PDEVICE_OBJECT DevObj,\r
+ * IN PFILE_OBJECT FileObj,\r
+ * IN PVOID CompRoutine,\r
+ * IN PVOID Contxt,\r
+ * IN PMDL MdlAddr,\r
+ * IN ULONG InFlags,\r
+ * IN ULONG SendLen);\r
+ */\r
+#define TdiBuildSend( \\r
+ Irp, DevObj, FileObj, CompRoutine, Contxt, \\r
+ MdlAddr, InFlags, SendLen) \\r
+{ \\r
+ PTDI_REQUEST_KERNEL_SEND _Request; \\r
+ PIO_STACK_LOCATION _IrpSp; \\r
+ \\r
+ _IrpSp = IoGetNextIrpStackLocation(Irp); \\r
+ \\r
+ TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \\r
+ Contxt, _IrpSp, TDI_SEND); \\r
+ \\r
+ _Request = (PTDI_REQUEST_KERNEL_SEND)&_IrpSp->Parameters; \\r
+ _Request->SendFlags = (InFlags); \\r
+ _Request->SendLength = (SendLen); \\r
+ (Irp)->MdlAddress = (MdlAddr); \\r
+}\r
+\r
+/*\r
+ * VOID TdiBuildSendDatagram(\r
+ * IN PIRP Irp,\r
+ * IN PDEVICE_OBJECT DevObj,\r
+ * IN PFILE_OBJECT FileObj,\r
+ * IN PVOID CompRoutine,\r
+ * IN PVOID Contxt,\r
+ * IN PMDL MdlAddr,\r
+ * IN ULONG SendLen,\r
+ * IN PTDI_CONNECTION_INFORMATION SendDatagramInfo); \r
+ */\r
+#define TdiBuildSendDatagram( \\r
+ Irp, DevObj, FileObj, CompRoutine, Contxt, \\r
+ MdlAddr, SendLen, SendDatagramInfo) \\r
+{ \\r
+ PTDI_REQUEST_KERNEL_SENDDG _Request; \\r
+ PIO_STACK_LOCATION _IrpSp; \\r
+ \\r
+ _IrpSp = IoGetNextIrpStackLocation(Irp); \\r
+ \\r
+ TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \\r
+ Contxt, _IrpSp, TDI_SEND_DATAGRAM); \\r
+ \\r
+ _Request = (PTDI_REQUEST_KERNEL_SENDDG)&_IrpSp->Parameters; \\r
+ _Request->SendDatagramInformation = (SendDatagramInfo); \\r
+ _Request->SendLength = (SendLen); \\r
+ (Irp)->MdlAddress = (MdlAddr); \\r
+}\r
+\r
+/*\r
+ * VOID TdiBuildSetEventHandler(\r
+ * IN PIRP Irp,\r
+ * IN PDEVICE_OBJECT DevObj,\r
+ * IN PFILE_OBJECT FileObj,\r
+ * IN PVOID CompRoutine,\r
+ * IN PVOID Contxt,\r
+ * IN INT InEventType,\r
+ * IN PVOID InEventHandler,\r
+ * IN PVOID InEventContext);\r
+ */\r
+#define TdiBuildSetEventHandler( \\r
+ Irp, DevObj, FileObj, CompRoutine, Contxt, \\r
+ InEventType, InEventHandler, InEventContext) \\r
+{ \\r
+ PTDI_REQUEST_KERNEL_SET_EVENT _Request; \\r
+ PIO_STACK_LOCATION _IrpSp; \\r
+ \\r
+ _IrpSp = IoGetNextIrpStackLocation(Irp); \\r
+ \\r
+ TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \\r
+ Contxt, _IrpSp, TDI_SET_EVENT_HANDLER); \\r
+ \\r
+ _Request = (PTDI_REQUEST_KERNEL_SET_EVENT)&_IrpSp->Parameters; \\r
+ _Request->EventType = (InEventType); \\r
+ _Request->EventHandler = (PVOID)(InEventHandler); \\r
+ _Request->EventContext = (PVOID)(InEventContext); \\r
+}\r
+\r
+/*\r
+ * VOID TdiBuildSetInformation(\r
+ * IN PIRP Irp,\r
+ * IN PDEVICE_OBJECT DevObj,\r
+ * IN PFILE_OBJECT FileObj,\r
+ * IN PVOID CompRoutine,\r
+ * IN PVOID Contxt,\r
+ * IN UINT SType,\r
+ * IN PMDL MdlAddr);\r
+ */\r
+#define TdiBuildSetInformation( \\r
+ Irp, DevObj, FileObj, CompRoutine, Contxt, SType, MdlAddr) \\r
+{ \\r
+ PTDI_REQUEST_KERNEL_SET_INFORMATION _Request; \\r
+ PIO_STACK_LOCATION _IrpSp; \\r
+ \\r
+ _IrpSp = IoGetNextIrpStackLocation(Irp); \\r
+ \\r
+ TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine, \\r
+ Contxt, _IrpSp, TDI_SET_INFORMATION); \\r
+ \\r
+ _Request = (PTDI_REQUEST_KERNEL_SET_INFORMATION)&_IrpSp->Parameters; \\r
+ _Request->RequestConnectionInformation = NULL; \\r
+ _Request->SetType = (ULONG)(SType); \\r
+ (Irp)->MdlAddress = (MdlAddr); \\r
+}\r
+\r
+\r
+\r
+/* TDI functions */\r
+\r
+/*\r
+ * VOID TdiCompleteRequest(\r
+ * IN PIRP Irp,\r
+ * IN NTSTATUS Status);\r
+ */\r
+#define TdiCompleteRequest(Irp, Status) \\r
+{ \\r
+ (Irp)->IoStatus.Status = (Status); \\r
+ IoCompleteRequest((Irp), IO_NETWORK_INCREMENT); \\r
+}\r
+\r
+NTSTATUS STDCALL TdiCopyBufferToMdl(\r
+ IN PVOID SourceBuffer,\r
+ IN ULONG SourceOffset,\r
+ IN ULONG SourceBytesToCopy,\r
+ IN PMDL DestinationMdlChain,\r
+ IN ULONG DestinationOffset,\r
+ IN PULONG BytesCopied);\r
+\r
+/*\r
+ * VOID TdiCopyLookaheadData(\r
+ * IN PVOID Destination,\r
+ * IN PVOID Source,\r
+ * IN ULONG Length,\r
+ * IN ULONG ReceiveFlags);\r
+ */\r
+#define TdiCopyLookaheadData(Destination, Source, Length, ReceiveFlags) \\r
+ RtlCopyMemory(Destination, Source, Length)\r
+\r
+NTSTATUS STDCALL TdiCopyMdlToBuffer(\r
+ IN PMDL SourceMdlChain,\r
+ IN ULONG SourceOffset,\r
+ IN PVOID DestinationBuffer,\r
+ IN ULONG DestinationOffset,\r
+ IN ULONG DestinationBufferSize,\r
+ OUT PULONG BytesCopied);\r
+\r
+VOID STDCALL TdiMapBuffer(\r
+ IN PMDL MdlChain);\r
+\r
+NTSTATUS STDCALL TdiMapUserRequest(\r
+ IN PDEVICE_OBJECT DeviceObject,\r
+ IN PIRP Irp,\r
+ IN PIO_STACK_LOCATION IrpSp);\r
+\r
+VOID STDCALL TdiReturnChainedReceives(\r
+ IN PVOID *TsduDescriptors,\r
+ IN ULONG NumberOfTsdus);\r
+\r
+VOID STDCALL TdiUnmapBuffer(\r
+ IN PMDL MdlChain);\r
+\r
+#endif /* __TDIKRNL_H */\r
+\r
+/* EOF */\r