--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mingw-5.1.4/win32/include/ddk/ndis.h Fri Apr 03 17:16:45 2009 +0100
@@ -0,0 +1,5227 @@
+/*
+ * ndis.h
+ *
+ * Network Device Interface Specification definitions
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * DEFINES: i386 - Target platform is i386
+ * _NDIS_ - Define only for NDIS library
+ * NDIS_MINIPORT_DRIVER - Define only for NDIS miniport drivers
+ * NDIS40 - Use NDIS 4.0 structures by default
+ * NDIS50 - Use NDIS 5.0 structures by default
+ * NDIS50_MINIPORT - Building NDIS 5.0 miniport driver
+ * NDIS51_MINIPORT - Building NDIS 5.1 miniport driver
+ */
+#ifndef __NDIS_H
+#define __NDIS_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ntddk.h"
+#include "ntddndis.h"
+#include "netpnp.h"
+#include "netevent.h"
+#include <winsock2.h>
+
+#if defined(_NDIS_)
+ #define NDISAPI DECLSPEC_EXPORT
+#else
+ #define NDISAPI DECLSPEC_IMPORT
+#endif
+
+#if defined(NDIS50_MINIPORT)
+#ifndef NDIS50
+#define NDIS50
+#endif
+#endif /* NDIS50_MINIPORT */
+
+#if defined(NDIS51_MINIPORT)
+#ifndef NDIS51
+#define NDIS51
+#endif
+#endif /* NDIS51_MINIPORT */
+
+/* NDIS 3.0 is default */
+#if !defined(NDIS30) || !defined(NDIS40) || !defined(NDIS50) || !defined(NDIS51)
+#define NDIS30
+#endif /* !NDIS30 || !NDIS40 || !NDIS50 || !NDIS51 */
+
+#if 1
+/* FIXME: */
+typedef PVOID QUEUED_CLOSE;
+#endif
+
+typedef ULONG NDIS_OID, *PNDIS_OID;
+
+typedef struct _X_FILTER FDDI_FILTER, *PFDDI_FILTER;
+typedef struct _X_FILTER TR_FILTER, *PTR_FILTER;
+typedef struct _X_FILTER NULL_FILTER, *PNULL_FILTER;
+
+typedef struct _REFERENCE {
+ KSPIN_LOCK SpinLock;
+ USHORT ReferenceCount;
+ BOOLEAN Closing;
+} REFERENCE, * PREFERENCE;
+
+
+/* NDIS base types */
+
+typedef struct _NDIS_SPIN_LOCK {
+ KSPIN_LOCK SpinLock;
+ KIRQL OldIrql;
+} NDIS_SPIN_LOCK, * PNDIS_SPIN_LOCK;
+
+typedef struct _NDIS_EVENT {
+ KEVENT Event;
+} NDIS_EVENT, *PNDIS_EVENT;
+
+typedef PVOID NDIS_HANDLE, *PNDIS_HANDLE;
+typedef int NDIS_STATUS, *PNDIS_STATUS;
+
+typedef ANSI_STRING NDIS_ANSI_STRING, *PNDIS_ANSI_STRING;
+typedef UNICODE_STRING NDIS_STRING, *PNDIS_STRING;
+
+typedef MDL NDIS_BUFFER, *PNDIS_BUFFER;
+typedef ULONG NDIS_ERROR_CODE, *PNDIS_ERROR_CODE;
+
+
+/* NDIS_STATUS constants */
+#define NDIS_STATUS_SUCCESS ((NDIS_STATUS)STATUS_SUCCESS)
+#define NDIS_STATUS_PENDING ((NDIS_STATUS)STATUS_PENDING)
+#define NDIS_STATUS_NOT_RECOGNIZED ((NDIS_STATUS)0x00010001L)
+#define NDIS_STATUS_NOT_COPIED ((NDIS_STATUS)0x00010002L)
+#define NDIS_STATUS_NOT_ACCEPTED ((NDIS_STATUS)0x00010003L)
+#define NDIS_STATUS_CALL_ACTIVE ((NDIS_STATUS)0x00010007L)
+#define NDIS_STATUS_ONLINE ((NDIS_STATUS)0x40010003L)
+#define NDIS_STATUS_RESET_START ((NDIS_STATUS)0x40010004L)
+#define NDIS_STATUS_RESET_END ((NDIS_STATUS)0x40010005L)
+#define NDIS_STATUS_RING_STATUS ((NDIS_STATUS)0x40010006L)
+#define NDIS_STATUS_CLOSED ((NDIS_STATUS)0x40010007L)
+#define NDIS_STATUS_WAN_LINE_UP ((NDIS_STATUS)0x40010008L)
+#define NDIS_STATUS_WAN_LINE_DOWN ((NDIS_STATUS)0x40010009L)
+#define NDIS_STATUS_WAN_FRAGMENT ((NDIS_STATUS)0x4001000AL)
+#define NDIS_STATUS_MEDIA_CONNECT ((NDIS_STATUS)0x4001000BL)
+#define NDIS_STATUS_MEDIA_DISCONNECT ((NDIS_STATUS)0x4001000CL)
+#define NDIS_STATUS_HARDWARE_LINE_UP ((NDIS_STATUS)0x4001000DL)
+#define NDIS_STATUS_HARDWARE_LINE_DOWN ((NDIS_STATUS)0x4001000EL)
+#define NDIS_STATUS_INTERFACE_UP ((NDIS_STATUS)0x4001000FL)
+#define NDIS_STATUS_INTERFACE_DOWN ((NDIS_STATUS)0x40010010L)
+#define NDIS_STATUS_MEDIA_BUSY ((NDIS_STATUS)0x40010011L)
+#define NDIS_STATUS_MEDIA_SPECIFIC_INDICATION ((NDIS_STATUS)0x40010012L)
+#define NDIS_STATUS_WW_INDICATION NDIS_STATUS_MEDIA_SPECIFIC_INDICATION
+#define NDIS_STATUS_LINK_SPEED_CHANGE ((NDIS_STATUS)0x40010013L)
+#define NDIS_STATUS_WAN_GET_STATS ((NDIS_STATUS)0x40010014L)
+#define NDIS_STATUS_WAN_CO_FRAGMENT ((NDIS_STATUS)0x40010015L)
+#define NDIS_STATUS_WAN_CO_LINKPARAMS ((NDIS_STATUS)0x40010016L)
+
+#define NDIS_STATUS_NOT_RESETTABLE ((NDIS_STATUS)0x80010001L)
+#define NDIS_STATUS_SOFT_ERRORS ((NDIS_STATUS)0x80010003L)
+#define NDIS_STATUS_HARD_ERRORS ((NDIS_STATUS)0x80010004L)
+#define NDIS_STATUS_BUFFER_OVERFLOW ((NDIS_STATUS)STATUS_BUFFER_OVERFLOW)
+
+#define NDIS_STATUS_FAILURE ((NDIS_STATUS)STATUS_UNSUCCESSFUL)
+#define NDIS_STATUS_RESOURCES ((NDIS_STATUS)STATUS_INSUFFICIENT_RESOURCES)
+#define NDIS_STATUS_CLOSING ((NDIS_STATUS)0xC0010002L)
+#define NDIS_STATUS_BAD_VERSION ((NDIS_STATUS)0xC0010004L)
+#define NDIS_STATUS_BAD_CHARACTERISTICS ((NDIS_STATUS)0xC0010005L)
+#define NDIS_STATUS_ADAPTER_NOT_FOUND ((NDIS_STATUS)0xC0010006L)
+#define NDIS_STATUS_OPEN_FAILED ((NDIS_STATUS)0xC0010007L)
+#define NDIS_STATUS_DEVICE_FAILED ((NDIS_STATUS)0xC0010008L)
+#define NDIS_STATUS_MULTICAST_FULL ((NDIS_STATUS)0xC0010009L)
+#define NDIS_STATUS_MULTICAST_EXISTS ((NDIS_STATUS)0xC001000AL)
+#define NDIS_STATUS_MULTICAST_NOT_FOUND ((NDIS_STATUS)0xC001000BL)
+#define NDIS_STATUS_REQUEST_ABORTED ((NDIS_STATUS)0xC001000CL)
+#define NDIS_STATUS_RESET_IN_PROGRESS ((NDIS_STATUS)0xC001000DL)
+#define NDIS_STATUS_CLOSING_INDICATING ((NDIS_STATUS)0xC001000EL)
+#define NDIS_STATUS_NOT_SUPPORTED ((NDIS_STATUS)STATUS_NOT_SUPPORTED)
+#define NDIS_STATUS_INVALID_PACKET ((NDIS_STATUS)0xC001000FL)
+#define NDIS_STATUS_OPEN_LIST_FULL ((NDIS_STATUS)0xC0010010L)
+#define NDIS_STATUS_ADAPTER_NOT_READY ((NDIS_STATUS)0xC0010011L)
+#define NDIS_STATUS_ADAPTER_NOT_OPEN ((NDIS_STATUS)0xC0010012L)
+#define NDIS_STATUS_NOT_INDICATING ((NDIS_STATUS)0xC0010013L)
+#define NDIS_STATUS_INVALID_LENGTH ((NDIS_STATUS)0xC0010014L)
+#define NDIS_STATUS_INVALID_DATA ((NDIS_STATUS)0xC0010015L)
+#define NDIS_STATUS_BUFFER_TOO_SHORT ((NDIS_STATUS)0xC0010016L)
+#define NDIS_STATUS_INVALID_OID ((NDIS_STATUS)0xC0010017L)
+#define NDIS_STATUS_ADAPTER_REMOVED ((NDIS_STATUS)0xC0010018L)
+#define NDIS_STATUS_UNSUPPORTED_MEDIA ((NDIS_STATUS)0xC0010019L)
+#define NDIS_STATUS_GROUP_ADDRESS_IN_USE ((NDIS_STATUS)0xC001001AL)
+#define NDIS_STATUS_FILE_NOT_FOUND ((NDIS_STATUS)0xC001001BL)
+#define NDIS_STATUS_ERROR_READING_FILE ((NDIS_STATUS)0xC001001CL)
+#define NDIS_STATUS_ALREADY_MAPPED ((NDIS_STATUS)0xC001001DL)
+#define NDIS_STATUS_RESOURCE_CONFLICT ((NDIS_STATUS)0xC001001EL)
+#define NDIS_STATUS_NO_CABLE ((NDIS_STATUS)0xC001001FL)
+
+#define NDIS_STATUS_INVALID_SAP ((NDIS_STATUS)0xC0010020L)
+#define NDIS_STATUS_SAP_IN_USE ((NDIS_STATUS)0xC0010021L)
+#define NDIS_STATUS_INVALID_ADDRESS ((NDIS_STATUS)0xC0010022L)
+#define NDIS_STATUS_VC_NOT_ACTIVATED ((NDIS_STATUS)0xC0010023L)
+#define NDIS_STATUS_DEST_OUT_OF_ORDER ((NDIS_STATUS)0xC0010024L)
+#define NDIS_STATUS_VC_NOT_AVAILABLE ((NDIS_STATUS)0xC0010025L)
+#define NDIS_STATUS_CELLRATE_NOT_AVAILABLE ((NDIS_STATUS)0xC0010026L)
+#define NDIS_STATUS_INCOMPATABLE_QOS ((NDIS_STATUS)0xC0010027L)
+#define NDIS_STATUS_AAL_PARAMS_UNSUPPORTED ((NDIS_STATUS)0xC0010028L)
+#define NDIS_STATUS_NO_ROUTE_TO_DESTINATION ((NDIS_STATUS)0xC0010029L)
+
+#define NDIS_STATUS_TOKEN_RING_OPEN_ERROR ((NDIS_STATUS)0xC0011000L)
+#define NDIS_STATUS_INVALID_DEVICE_REQUEST ((NDIS_STATUS)STATUS_INVALID_DEVICE_REQUEST)
+#define NDIS_STATUS_NETWORK_UNREACHABLE ((NDIS_STATUS)STATUS_NETWORK_UNREACHABLE)
+
+
+/* NDIS error codes for error logging */
+
+#define NDIS_ERROR_CODE_RESOURCE_CONFLICT EVENT_NDIS_RESOURCE_CONFLICT
+#define NDIS_ERROR_CODE_OUT_OF_RESOURCES EVENT_NDIS_OUT_OF_RESOURCE
+#define NDIS_ERROR_CODE_HARDWARE_FAILURE EVENT_NDIS_HARDWARE_FAILURE
+#define NDIS_ERROR_CODE_ADAPTER_NOT_FOUND EVENT_NDIS_ADAPTER_NOT_FOUND
+#define NDIS_ERROR_CODE_INTERRUPT_CONNECT EVENT_NDIS_INTERRUPT_CONNECT
+#define NDIS_ERROR_CODE_DRIVER_FAILURE EVENT_NDIS_DRIVER_FAILURE
+#define NDIS_ERROR_CODE_BAD_VERSION EVENT_NDIS_BAD_VERSION
+#define NDIS_ERROR_CODE_TIMEOUT EVENT_NDIS_TIMEOUT
+#define NDIS_ERROR_CODE_NETWORK_ADDRESS EVENT_NDIS_NETWORK_ADDRESS
+#define NDIS_ERROR_CODE_UNSUPPORTED_CONFIGURATION EVENT_NDIS_UNSUPPORTED_CONFIGURATION
+#define NDIS_ERROR_CODE_INVALID_VALUE_FROM_ADAPTER EVENT_NDIS_INVALID_VALUE_FROM_ADAPTER
+#define NDIS_ERROR_CODE_MISSING_CONFIGURATION_PARAMETER EVENT_NDIS_MISSING_CONFIGURATION_PARAMETER
+#define NDIS_ERROR_CODE_BAD_IO_BASE_ADDRESS EVENT_NDIS_BAD_IO_BASE_ADDRESS
+#define NDIS_ERROR_CODE_RECEIVE_SPACE_SMALL EVENT_NDIS_RECEIVE_SPACE_SMALL
+#define NDIS_ERROR_CODE_ADAPTER_DISABLED EVENT_NDIS_ADAPTER_DISABLED
+
+
+/* Memory allocation flags. Used by Ndis[Allocate|Free]Memory */
+#define NDIS_MEMORY_CONTIGUOUS 0x00000001
+#define NDIS_MEMORY_NONCACHED 0x00000002
+
+/* NIC attribute flags. Used by NdisMSetAttributes(Ex) */
+#define NDIS_ATTRIBUTE_IGNORE_PACKET_TIMEOUT 0x00000001
+#define NDIS_ATTRIBUTE_IGNORE_REQUEST_TIMEOUT 0x00000002
+#define NDIS_ATTRIBUTE_IGNORE_TOKEN_RING_ERRORS 0x00000004
+#define NDIS_ATTRIBUTE_BUS_MASTER 0x00000008
+#define NDIS_ATTRIBUTE_INTERMEDIATE_DRIVER 0x00000010
+#define NDIS_ATTRIBUTE_DESERIALIZE 0x00000020
+#define NDIS_ATTRIBUTE_NO_HALT_ON_SUSPEND 0x00000040
+#define NDIS_ATTRIBUTE_SURPRISE_REMOVE_OK 0x00000080
+#define NDIS_ATTRIBUTE_NOT_CO_NDIS 0x00000100
+#define NDIS_ATTRIBUTE_USES_SAFE_BUFFER_APIS 0x00000200
+
+
+/* Lock */
+
+typedef union _NDIS_RW_LOCK_REFCOUNT {
+ UINT RefCount;
+ UCHAR cacheLine[16];
+} NDIS_RW_LOCK_REFCOUNT;
+
+typedef struct _NDIS_RW_LOCK {
+ union {
+ struct {
+ KSPIN_LOCK SpinLock;
+ PVOID Context;
+ } s;
+ UCHAR Reserved[16];
+ } u;
+
+ NDIS_RW_LOCK_REFCOUNT RefCount[MAXIMUM_PROCESSORS];
+} NDIS_RW_LOCK, *PNDIS_RW_LOCK;
+
+typedef struct _LOCK_STATE {
+ USHORT LockState;
+ KIRQL OldIrql;
+} LOCK_STATE, *PLOCK_STATE;
+
+
+
+/* Timer */
+
+typedef VOID DDKAPI
+(*PNDIS_TIMER_FUNCTION)(
+ /*IN*/ PVOID SystemSpecific1,
+ /*IN*/ PVOID FunctionContext,
+ /*IN*/ PVOID SystemSpecific2,
+ /*IN*/ PVOID SystemSpecific3);
+
+typedef struct _NDIS_TIMER {
+ KTIMER Timer;
+ KDPC Dpc;
+} NDIS_TIMER, *PNDIS_TIMER;
+
+
+
+/* Hardware */
+
+typedef CM_MCA_POS_DATA NDIS_MCA_POS_DATA, *PNDIS_MCA_POS_DATA;
+typedef CM_EISA_SLOT_INFORMATION NDIS_EISA_SLOT_INFORMATION, *PNDIS_EISA_SLOT_INFORMATION;
+typedef CM_EISA_FUNCTION_INFORMATION NDIS_EISA_FUNCTION_INFORMATION, *PNDIS_EISA_FUNCTION_INFORMATION;
+typedef CM_PARTIAL_RESOURCE_LIST NDIS_RESOURCE_LIST, *PNDIS_RESOURCE_LIST;
+
+/* Hardware status codes (OID_GEN_HARDWARE_STATUS) */
+typedef enum _NDIS_HARDWARE_STATUS {
+ NdisHardwareStatusReady,
+ NdisHardwareStatusInitializing,
+ NdisHardwareStatusReset,
+ NdisHardwareStatusClosing,
+ NdisHardwareStatusNotReady
+} NDIS_HARDWARE_STATUS, *PNDIS_HARDWARE_STATUS;
+
+/* OID_GEN_GET_TIME_CAPS */
+typedef struct _GEN_GET_TIME_CAPS {
+ ULONG Flags;
+ ULONG ClockPrecision;
+} GEN_GET_TIME_CAPS, *PGEN_GET_TIME_CAPS;
+
+/* Flag bits */
+#define READABLE_LOCAL_CLOCK 0x00000001
+#define CLOCK_NETWORK_DERIVED 0x00000002
+#define CLOCK_PRECISION 0x00000004
+#define RECEIVE_TIME_INDICATION_CAPABLE 0x00000008
+#define TIMED_SEND_CAPABLE 0x00000010
+#define TIME_STAMP_CAPABLE 0x00000020
+
+/* OID_GEN_GET_NETCARD_TIME */
+typedef struct _GEN_GET_NETCARD_TIME {
+ ULONGLONG ReadTime;
+} GEN_GET_NETCARD_TIME, *PGEN_GET_NETCARD_TIME;
+
+/* NDIS driver medium (OID_GEN_MEDIA_SUPPORTED / OID_GEN_MEDIA_IN_USE) */
+typedef enum _NDIS_MEDIUM {
+ NdisMedium802_3,
+ NdisMedium802_5,
+ NdisMediumFddi,
+ NdisMediumWan,
+ NdisMediumLocalTalk,
+ NdisMediumDix,
+ NdisMediumArcnetRaw,
+ NdisMediumArcnet878_2,
+ NdisMediumAtm,
+ NdisMediumWirelessWan,
+ NdisMediumIrda,
+ NdisMediumBpc,
+ NdisMediumCoWan,
+ NdisMedium1394,
+ NdisMediumMax
+} NDIS_MEDIUM, *PNDIS_MEDIUM;
+
+/* NDIS packet filter bits (OID_GEN_CURRENT_PACKET_FILTER) */
+#define NDIS_PACKET_TYPE_DIRECTED 0x00000001
+#define NDIS_PACKET_TYPE_MULTICAST 0x00000002
+#define NDIS_PACKET_TYPE_ALL_MULTICAST 0x00000004
+#define NDIS_PACKET_TYPE_BROADCAST 0x00000008
+#define NDIS_PACKET_TYPE_SOURCE_ROUTING 0x00000010
+#define NDIS_PACKET_TYPE_PROMISCUOUS 0x00000020
+#define NDIS_PACKET_TYPE_SMT 0x00000040
+#define NDIS_PACKET_TYPE_ALL_LOCAL 0x00000080
+#define NDIS_PACKET_TYPE_GROUP 0x00001000
+#define NDIS_PACKET_TYPE_ALL_FUNCTIONAL 0x00002000
+#define NDIS_PACKET_TYPE_FUNCTIONAL 0x00004000
+#define NDIS_PACKET_TYPE_MAC_FRAME 0x00008000
+
+/* NDIS protocol option bits (OID_GEN_PROTOCOL_OPTIONS) */
+#define NDIS_PROT_OPTION_ESTIMATED_LENGTH 0x00000001
+#define NDIS_PROT_OPTION_NO_LOOPBACK 0x00000002
+#define NDIS_PROT_OPTION_NO_RSVD_ON_RCVPKT 0x00000004
+
+/* NDIS MAC option bits (OID_GEN_MAC_OPTIONS) */
+#define NDIS_MAC_OPTION_COPY_LOOKAHEAD_DATA 0x00000001
+#define NDIS_MAC_OPTION_RECEIVE_SERIALIZED 0x00000002
+#define NDIS_MAC_OPTION_TRANSFERS_NOT_PEND 0x00000004
+#define NDIS_MAC_OPTION_NO_LOOPBACK 0x00000008
+#define NDIS_MAC_OPTION_FULL_DUPLEX 0x00000010
+#define NDIS_MAC_OPTION_EOTX_INDICATION 0x00000020
+#define NDIS_MAC_OPTION_8021P_PRIORITY 0x00000040
+#define NDIS_MAC_OPTION_RESERVED 0x80000000
+
+/* State of the LAN media (OID_GEN_MEDIA_CONNECT_STATUS) */
+typedef enum _NDIS_MEDIA_STATE {
+ NdisMediaStateConnected,
+ NdisMediaStateDisconnected
+} NDIS_MEDIA_STATE, *PNDIS_MEDIA_STATE;
+
+/* OID_GEN_SUPPORTED_GUIDS */
+typedef struct _NDIS_GUID {
+ GUID Guid;
+ union {
+ NDIS_OID Oid;
+ NDIS_STATUS Status;
+ } u;
+ ULONG Size;
+ ULONG Flags;
+} NDIS_GUID, *PNDIS_GUID;
+
+#define NDIS_GUID_TO_OID 0x00000001
+#define NDIS_GUID_TO_STATUS 0x00000002
+#define NDIS_GUID_ANSI_STRING 0x00000004
+#define NDIS_GUID_UNICODE_STRING 0x00000008
+#define NDIS_GUID_ARRAY 0x00000010
+
+
+typedef struct _NDIS_PACKET_POOL {
+ NDIS_SPIN_LOCK SpinLock;
+ struct _NDIS_PACKET *FreeList;
+ UINT PacketLength;
+ UCHAR Buffer[1];
+} NDIS_PACKET_POOL, * PNDIS_PACKET_POOL;
+
+/* NDIS_PACKET_PRIVATE.Flags constants */
+#define fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO 0x40
+#define fPACKET_ALLOCATED_BY_NDIS 0x80
+
+typedef struct _NDIS_PACKET_PRIVATE {
+ UINT PhysicalCount;
+ UINT TotalLength;
+ PNDIS_BUFFER Head;
+ PNDIS_BUFFER Tail;
+ PNDIS_PACKET_POOL Pool;
+ UINT Count;
+ ULONG Flags;
+ BOOLEAN ValidCounts;
+ UCHAR NdisPacketFlags;
+ USHORT NdisPacketOobOffset;
+} NDIS_PACKET_PRIVATE, * PNDIS_PACKET_PRIVATE;
+
+typedef struct _NDIS_PACKET {
+ NDIS_PACKET_PRIVATE Private;
+ union {
+ struct {
+ UCHAR MiniportReserved[2 * sizeof(PVOID)];
+ UCHAR WrapperReserved[2 * sizeof(PVOID)];
+ } s1;
+ struct {
+ UCHAR MiniportReservedEx[3 * sizeof(PVOID)];
+ UCHAR WrapperReservedEx[sizeof(PVOID)];
+ } s2;
+ struct {
+ UCHAR MacReserved[4 * sizeof(PVOID)];
+ } s3;
+ } u;
+ ULONG_PTR Reserved[2];
+ UCHAR ProtocolReserved[1];
+} NDIS_PACKET, *PNDIS_PACKET, **PPNDIS_PACKET;
+
+typedef enum _NDIS_CLASS_ID {
+ NdisClass802_3Priority,
+ NdisClassWirelessWanMbxMailbox,
+ NdisClassIrdaPacketInfo,
+ NdisClassAtmAALInfo
+} NDIS_CLASS_ID;
+
+typedef struct MediaSpecificInformation {
+ UINT NextEntryOffset;
+ NDIS_CLASS_ID ClassId;
+ UINT Size;
+ UCHAR ClassInformation[1];
+} MEDIA_SPECIFIC_INFORMATION;
+
+typedef struct _NDIS_PACKET_OOB_DATA {
+ _ANONYMOUS_UNION union {
+ ULONGLONG TimeToSend;
+ ULONGLONG TimeSent;
+ } DUMMYUNIONNAME;
+ ULONGLONG TimeReceived;
+ UINT HeaderSize;
+ UINT SizeMediaSpecificInfo;
+ PVOID MediaSpecificInformation;
+ NDIS_STATUS Status;
+} NDIS_PACKET_OOB_DATA, *PNDIS_PACKET_OOB_DATA;
+
+typedef struct _NDIS_PM_PACKET_PATTERN {
+ ULONG Priority;
+ ULONG Reserved;
+ ULONG MaskSize;
+ ULONG PatternOffset;
+ ULONG PatternSize;
+ ULONG PatternFlags;
+} NDIS_PM_PACKET_PATTERN, *PNDIS_PM_PACKET_PATTERN;
+
+
+/* Request types used by NdisRequest */
+typedef enum _NDIS_REQUEST_TYPE {
+ NdisRequestQueryInformation,
+ NdisRequestSetInformation,
+ NdisRequestQueryStatistics,
+ NdisRequestOpen,
+ NdisRequestClose,
+ NdisRequestSend,
+ NdisRequestTransferData,
+ NdisRequestReset,
+ NdisRequestGeneric1,
+ NdisRequestGeneric2,
+ NdisRequestGeneric3,
+ NdisRequestGeneric4
+} NDIS_REQUEST_TYPE, *PNDIS_REQUEST_TYPE;
+
+typedef struct _NDIS_REQUEST {
+ UCHAR MacReserved[4 * sizeof(PVOID)];
+ NDIS_REQUEST_TYPE RequestType;
+ union _DATA {
+ struct QUERY_INFORMATION {
+ NDIS_OID Oid;
+ PVOID InformationBuffer;
+ UINT InformationBufferLength;
+ UINT BytesWritten;
+ UINT BytesNeeded;
+ } QUERY_INFORMATION;
+ struct SET_INFORMATION {
+ NDIS_OID Oid;
+ PVOID InformationBuffer;
+ UINT InformationBufferLength;
+ UINT BytesRead;
+ UINT BytesNeeded;
+ } SET_INFORMATION;
+ } DATA;
+#if (defined(NDIS50) || defined(NDIS51))
+ UCHAR NdisReserved[9 * sizeof(PVOID)];
+ union {
+ UCHAR CallMgrReserved[2 * sizeof(PVOID)];
+ UCHAR ProtocolReserved[2 * sizeof(PVOID)];
+ };
+ UCHAR MiniportReserved[2 * sizeof(PVOID)];
+#endif
+} NDIS_REQUEST, *PNDIS_REQUEST;
+
+
+
+/* Wide Area Networks definitions */
+
+typedef struct _NDIS_WAN_PACKET {
+ LIST_ENTRY WanPacketQueue;
+ PUCHAR CurrentBuffer;
+ ULONG CurrentLength;
+ PUCHAR StartBuffer;
+ PUCHAR EndBuffer;
+ PVOID ProtocolReserved1;
+ PVOID ProtocolReserved2;
+ PVOID ProtocolReserved3;
+ PVOID ProtocolReserved4;
+ PVOID MacReserved1;
+ PVOID MacReserved2;
+ PVOID MacReserved3;
+ PVOID MacReserved4;
+} NDIS_WAN_PACKET, *PNDIS_WAN_PACKET;
+
+
+
+/* DMA channel information */
+
+typedef struct _NDIS_DMA_DESCRIPTION {
+ BOOLEAN DemandMode;
+ BOOLEAN AutoInitialize;
+ BOOLEAN DmaChannelSpecified;
+ DMA_WIDTH DmaWidth;
+ DMA_SPEED DmaSpeed;
+ ULONG DmaPort;
+ ULONG DmaChannel;
+} NDIS_DMA_DESCRIPTION, *PNDIS_DMA_DESCRIPTION;
+
+typedef struct _NDIS_DMA_BLOCK {
+ PVOID MapRegisterBase;
+ KEVENT AllocationEvent;
+ PADAPTER_OBJECT SystemAdapterObject;
+ PVOID Miniport;
+ BOOLEAN InProgress;
+} NDIS_DMA_BLOCK, *PNDIS_DMA_BLOCK;
+
+
+/* Possible hardware architecture */
+typedef enum _NDIS_INTERFACE_TYPE {
+ NdisInterfaceInternal = Internal,
+ NdisInterfaceIsa = Isa,
+ NdisInterfaceEisa = Eisa,
+ NdisInterfaceMca = MicroChannel,
+ NdisInterfaceTurboChannel = TurboChannel,
+ NdisInterfacePci = PCIBus,
+ NdisInterfacePcMcia = PCMCIABus,
+ NdisInterfaceCBus = CBus,
+ NdisInterfaceMPIBus = MPIBus,
+ NdisInterfaceMPSABus = MPSABus,
+ NdisInterfaceProcessorInternal = ProcessorInternal,
+ NdisInterfaceInternalPowerBus = InternalPowerBus,
+ NdisInterfacePNPISABus = PNPISABus,
+ NdisInterfacePNPBus = PNPBus,
+ NdisMaximumInterfaceType
+} NDIS_INTERFACE_TYPE, *PNDIS_INTERFACE_TYPE;
+
+#define NdisInterruptLevelSensitive LevelSensitive
+#define NdisInterruptLatched Latched
+typedef KINTERRUPT_MODE NDIS_INTERRUPT_MODE, *PNDIS_INTERRUPT_MODE;
+
+
+typedef enum _NDIS_PARAMETER_TYPE {
+ NdisParameterInteger,
+ NdisParameterHexInteger,
+ NdisParameterString,
+ NdisParameterMultiString,
+ NdisParameterBinary
+} NDIS_PARAMETER_TYPE, *PNDIS_PARAMETER_TYPE;
+
+typedef struct {
+ USHORT Length;
+ PVOID Buffer;
+} BINARY_DATA;
+
+typedef struct _NDIS_CONFIGURATION_PARAMETER {
+ NDIS_PARAMETER_TYPE ParameterType;
+ union {
+ ULONG IntegerData;
+ NDIS_STRING StringData;
+ BINARY_DATA BinaryData;
+ } ParameterData;
+} NDIS_CONFIGURATION_PARAMETER, *PNDIS_CONFIGURATION_PARAMETER;
+
+
+typedef PHYSICAL_ADDRESS NDIS_PHYSICAL_ADDRESS, *PNDIS_PHYSICAL_ADDRESS;
+
+typedef struct _NDIS_PHYSICAL_ADDRESS_UNIT {
+ NDIS_PHYSICAL_ADDRESS PhysicalAddress;
+ UINT Length;
+} NDIS_PHYSICAL_ADDRESS_UNIT, *PNDIS_PHYSICAL_ADDRESS_UNIT;
+
+typedef struct _NDIS_WAN_LINE_DOWN {
+ UCHAR RemoteAddress[6];
+ UCHAR LocalAddress[6];
+} NDIS_WAN_LINE_DOWN, *PNDIS_WAN_LINE_DOWN;
+
+typedef struct _NDIS_WAN_LINE_UP {
+ ULONG LinkSpeed;
+ ULONG MaximumTotalSize;
+ NDIS_WAN_QUALITY Quality;
+ USHORT SendWindow;
+ UCHAR RemoteAddress[6];
+ /*OUT*/ UCHAR LocalAddress[6];
+ ULONG ProtocolBufferLength;
+ PUCHAR ProtocolBuffer;
+ USHORT ProtocolType;
+ NDIS_STRING DeviceName;
+} NDIS_WAN_LINE_UP, *PNDIS_WAN_LINE_UP;
+
+
+typedef VOID DDKAPI
+(*ADAPTER_SHUTDOWN_HANDLER)(
+ /*IN*/ PVOID ShutdownContext);
+
+
+typedef struct _OID_LIST OID_LIST, *POID_LIST;
+
+/* PnP state */
+
+typedef enum _NDIS_PNP_DEVICE_STATE {
+ NdisPnPDeviceAdded,
+ NdisPnPDeviceStarted,
+ NdisPnPDeviceQueryStopped,
+ NdisPnPDeviceStopped,
+ NdisPnPDeviceQueryRemoved,
+ NdisPnPDeviceRemoved,
+ NdisPnPDeviceSurpriseRemoved
+} NDIS_PNP_DEVICE_STATE;
+
+#define NDIS_DEVICE_NOT_STOPPABLE 0x00000001
+#define NDIS_DEVICE_NOT_REMOVEABLE 0x00000002
+#define NDIS_DEVICE_NOT_SUSPENDABLE 0x00000004
+#define NDIS_DEVICE_DISABLE_PM 0x00000008
+#define NDIS_DEVICE_DISABLE_WAKE_UP 0x00000010
+#define NDIS_DEVICE_DISABLE_WAKE_ON_RECONNECT 0x00000020
+#define NDIS_DEVICE_RESERVED 0x00000040
+#define NDIS_DEVICE_DISABLE_WAKE_ON_MAGIC_PACKET 0x00000080
+#define NDIS_DEVICE_DISABLE_WAKE_ON_PATTERN_MATCH 0x00000100
+
+
+/* OID_GEN_NETWORK_LAYER_ADDRESSES */
+typedef struct _NETWORK_ADDRESS {
+ USHORT AddressLength;
+ USHORT AddressType;
+ UCHAR Address[1];
+} NETWORK_ADDRESS, *PNETWORK_ADDRESS;
+
+typedef struct _NETWORK_ADDRESS_LIST {
+ LONG AddressCount;
+ USHORT AddressType;
+ NETWORK_ADDRESS Address[1];
+} NETWORK_ADDRESS_LIST, *PNETWORK_ADDRESS_LIST;
+
+/* Protocol types supported by NDIS */
+#define NDIS_PROTOCOL_ID_DEFAULT 0x00
+#define NDIS_PROTOCOL_ID_TCP_IP 0x02
+#define NDIS_PROTOCOL_ID_IPX 0x06
+#define NDIS_PROTOCOL_ID_NBF 0x07
+#define NDIS_PROTOCOL_ID_MAX 0x0F
+#define NDIS_PROTOCOL_ID_MASK 0x0F
+
+
+/* OID_GEN_TRANSPORT_HEADER_OFFSET */
+typedef struct _TRANSPORT_HEADER_OFFSET {
+ USHORT ProtocolType;
+ USHORT HeaderOffset;
+} TRANSPORT_HEADER_OFFSET, *PTRANSPORT_HEADER_OFFSET;
+
+
+/* OID_GEN_CO_LINK_SPEED / OID_GEN_CO_MINIMUM_LINK_SPEED */
+typedef struct _NDIS_CO_LINK_SPEED {
+ ULONG Outbound;
+ ULONG Inbound;
+} NDIS_CO_LINK_SPEED, *PNDIS_CO_LINK_SPEED;
+
+typedef ULONG NDIS_AF, *PNDIS_AF;
+#define CO_ADDRESS_FAMILY_Q2931 ((NDIS_AF)0x1)
+#define CO_ADDRESS_FAMILY_PSCHED ((NDIS_AF)0x2)
+#define CO_ADDRESS_FAMILY_L2TP ((NDIS_AF)0x3)
+#define CO_ADDRESS_FAMILY_IRDA ((NDIS_AF)0x4)
+#define CO_ADDRESS_FAMILY_1394 ((NDIS_AF)0x5)
+#define CO_ADDRESS_FAMILY_PPP ((NDIS_AF)0x6)
+#define CO_ADDRESS_FAMILY_TAPI ((NDIS_AF)0x800)
+#define CO_ADDRESS_FAMILY_TAPI_PROXY ((NDIS_AF)0x801)
+
+#define CO_ADDRESS_FAMILY_PROXY 0x80000000
+
+typedef struct {
+ NDIS_AF AddressFamily;
+ ULONG MajorVersion;
+ ULONG MinorVersion;
+} CO_ADDRESS_FAMILY, *PCO_ADDRESS_FAMILY;
+
+typedef struct _CO_FLOW_PARAMETERS {
+ ULONG TokenRate;
+ ULONG TokenBucketSize;
+ ULONG PeakBandwidth;
+ ULONG Latency;
+ ULONG DelayVariation;
+ SERVICETYPE ServiceType;
+ ULONG MaxSduSize;
+ ULONG MinimumPolicedSize;
+} CO_FLOW_PARAMETERS, *PCO_FLOW_PARAMETERS;
+
+typedef struct _CO_SPECIFIC_PARAMETERS {
+ ULONG ParamType;
+ ULONG Length;
+ UCHAR Parameters[1];
+} CO_SPECIFIC_PARAMETERS, *PCO_SPECIFIC_PARAMETERS;
+
+typedef struct _CO_CALL_MANAGER_PARAMETERS {
+ CO_FLOW_PARAMETERS Transmit;
+ CO_FLOW_PARAMETERS Receive;
+ CO_SPECIFIC_PARAMETERS CallMgrSpecific;
+} CO_CALL_MANAGER_PARAMETERS, *PCO_CALL_MANAGER_PARAMETERS;
+
+/* CO_MEDIA_PARAMETERS.Flags constants */
+#define RECEIVE_TIME_INDICATION 0x00000001
+#define USE_TIME_STAMPS 0x00000002
+#define TRANSMIT_VC 0x00000004
+#define RECEIVE_VC 0x00000008
+#define INDICATE_ERRED_PACKETS 0x00000010
+#define INDICATE_END_OF_TX 0x00000020
+#define RESERVE_RESOURCES_VC 0x00000040
+#define ROUND_DOWN_FLOW 0x00000080
+#define ROUND_UP_FLOW 0x00000100
+
+typedef struct _CO_MEDIA_PARAMETERS {
+ ULONG Flags;
+ ULONG ReceivePriority;
+ ULONG ReceiveSizeHint;
+ CO_SPECIFIC_PARAMETERS MediaSpecific;
+} CO_MEDIA_PARAMETERS, *PCO_MEDIA_PARAMETERS;
+
+/* CO_CALL_PARAMETERS.Flags constants */
+#define PERMANENT_VC 0x00000001
+#define CALL_PARAMETERS_CHANGED 0x00000002
+#define QUERY_CALL_PARAMETERS 0x00000004
+#define BROADCAST_VC 0x00000008
+#define MULTIPOINT_VC 0x00000010
+
+typedef struct _CO_CALL_PARAMETERS {
+ ULONG Flags;
+ PCO_CALL_MANAGER_PARAMETERS CallMgrParameters;
+ PCO_MEDIA_PARAMETERS MediaParameters;
+} CO_CALL_PARAMETERS, *PCO_CALL_PARAMETERS;
+
+typedef struct _CO_SAP {
+ ULONG SapType;
+ ULONG SapLength;
+ UCHAR Sap[1];
+} CO_SAP, *PCO_SAP;
+
+typedef struct _NDIS_IPSEC_PACKET_INFO {
+ _ANONYMOUS_UNION union {
+ struct {
+ NDIS_HANDLE OffloadHandle;
+ NDIS_HANDLE NextOffloadHandle;
+ } Transmit;
+ struct {
+ ULONG SA_DELETE_REQ : 1;
+ ULONG CRYPTO_DONE : 1;
+ ULONG NEXT_CRYPTO_DONE : 1;
+ ULONG CryptoStatus;
+ } Receive;
+ } DUMMYUNIONNAME;
+} NDIS_IPSEC_PACKET_INFO, *PNDIS_IPSEC_PACKET_INFO;
+
+/* NDIS_MAC_FRAGMENT.Errors constants */
+#define WAN_ERROR_CRC 0x00000001
+#define WAN_ERROR_FRAMING 0x00000002
+#define WAN_ERROR_HARDWAREOVERRUN 0x00000004
+#define WAN_ERROR_BUFFEROVERRUN 0x00000008
+#define WAN_ERROR_TIMEOUT 0x00000010
+#define WAN_ERROR_ALIGNMENT 0x00000020
+
+typedef struct _NDIS_MAC_FRAGMENT {
+ NDIS_HANDLE NdisLinkContext;
+ ULONG Errors;
+} NDIS_MAC_FRAGMENT, *PNDIS_MAC_FRAGMENT;
+
+typedef struct _NDIS_MAC_LINE_DOWN {
+ NDIS_HANDLE NdisLinkContext;
+} NDIS_MAC_LINE_DOWN, *PNDIS_MAC_LINE_DOWN;
+
+typedef struct _NDIS_MAC_LINE_UP {
+ ULONG LinkSpeed;
+ NDIS_WAN_QUALITY Quality;
+ USHORT SendWindow;
+ NDIS_HANDLE ConnectionWrapperID;
+ NDIS_HANDLE NdisLinkHandle;
+ NDIS_HANDLE NdisLinkContext;
+} NDIS_MAC_LINE_UP, *PNDIS_MAC_LINE_UP;
+
+typedef struct _NDIS_PACKET_8021Q_INFO {
+ _ANONYMOUS_UNION union {
+ struct {
+ UINT32 UserPriority : 3;
+ UINT32 CanonicalFormatId : 1;
+ UINT32 VlanId : 12;
+ UINT32 Reserved : 16;
+ } TagHeader;
+ PVOID Value;
+ } DUMMYUNIONNAME;
+} NDIS_PACKET_8021Q_INFO, *PNDIS_PACKET_8021Q_INFO;
+
+typedef enum _NDIS_PER_PACKET_INFO {
+ TcpIpChecksumPacketInfo,
+ IpSecPacketInfo,
+ TcpLargeSendPacketInfo,
+ ClassificationHandlePacketInfo,
+ NdisReserved,
+ ScatterGatherListPacketInfo,
+ Ieee8021QInfo,
+ OriginalPacketInfo,
+ PacketCancelId,
+ MaxPerPacketInfo
+} NDIS_PER_PACKET_INFO, *PNDIS_PER_PACKET_INFO;
+
+typedef struct _NDIS_PACKET_EXTENSION {
+ PVOID NdisPacketInfo[MaxPerPacketInfo];
+} NDIS_PACKET_EXTENSION, *PNDIS_PACKET_EXTENSION;
+
+/*
+ * PNDIS_PACKET
+ * NDIS_GET_ORIGINAL_PACKET(
+ * IN PNDIS_PACKET Packet);
+ */
+#define NDIS_GET_ORIGINAL_PACKET(Packet) \
+ NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, OriginalPacketInfo)
+
+/*
+ * PVOID
+ * NDIS_GET_PACKET_CANCEL_ID(
+ * IN PNDIS_PACKET Packet);
+ */
+#define NDIS_GET_PACKET_CANCEL_ID(Packet) \
+ NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, PacketCancelId)
+
+/*
+ * PNDIS_PACKET_EXTENSION
+ * NDIS_PACKET_EXTENSION_FROM_PACKET(
+ * IN PNDIS_PACKET Packet);
+ */
+#define NDIS_PACKET_EXTENSION_FROM_PACKET(Packet) \
+ ((PNDIS_PACKET_EXTENSION)((PUCHAR)(Packet) \
+ + (Packet)->Private.NdisPacketOobOffset + sizeof(NDIS_PACKET_OOB_DATA)))
+
+/*
+ * PVOID
+ * NDIS_PER_PACKET_INFO_FROM_PACKET(
+ * IN OUT PNDIS_PACKET Packet,
+ * IN NDIS_PER_PACKET_INFO InfoType);
+ */
+#define NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, InfoType) \
+ ((PNDIS_PACKET_EXTENSION)((PUCHAR)(Packet) + (Packet)->Private.NdisPacketOobOffset \
+ + sizeof(NDIS_PACKET_OOB_DATA)))->NdisPacketInfo[(InfoType)]
+
+/*
+ * VOID
+ * NDIS_SET_ORIGINAL_PACKET(
+ * IN OUT PNDIS_PACKET Packet,
+ * IN PNDIS_PACKET OriginalPacket);
+ */
+#define NDIS_SET_ORIGINAL_PACKET(Packet, OriginalPacket) \
+ NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, OriginalPacketInfo) = (OriginalPacket)
+
+/*
+ * VOID
+ * NDIS_SET_PACKET_CANCEL_ID(
+ * IN PNDIS_PACKET Packet
+ * IN ULONG_PTR CancelId);
+ */
+#define NDIS_SET_PACKET_CANCEL_ID(Packet, CancelId) \
+ NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, PacketCancelId) = (CancelId)
+
+typedef enum _NDIS_TASK {
+ TcpIpChecksumNdisTask,
+ IpSecNdisTask,
+ TcpLargeSendNdisTask,
+ MaxNdisTask
+} NDIS_TASK, *PNDIS_TASK;
+
+typedef struct _NDIS_TASK_IPSEC {
+ struct {
+ ULONG AH_ESP_COMBINED;
+ ULONG TRANSPORT_TUNNEL_COMBINED;
+ ULONG V4_OPTIONS;
+ ULONG RESERVED;
+ } Supported;
+
+ struct {
+ ULONG MD5 : 1;
+ ULONG SHA_1 : 1;
+ ULONG Transport : 1;
+ ULONG Tunnel : 1;
+ ULONG Send : 1;
+ ULONG Receive : 1;
+ } V4AH;
+
+ struct {
+ ULONG DES : 1;
+ ULONG RESERVED : 1;
+ ULONG TRIPLE_DES : 1;
+ ULONG NULL_ESP : 1;
+ ULONG Transport : 1;
+ ULONG Tunnel : 1;
+ ULONG Send : 1;
+ ULONG Receive : 1;
+ } V4ESP;
+} NDIS_TASK_IPSEC, *PNDIS_TASK_IPSEC;
+
+typedef struct _NDIS_TASK_OFFLOAD {
+ ULONG Version;
+ ULONG Size;
+ NDIS_TASK Task;
+ ULONG OffsetNextTask;
+ ULONG TaskBufferLength;
+ UCHAR TaskBuffer[1];
+} NDIS_TASK_OFFLOAD, *PNDIS_TASK_OFFLOAD;
+
+/* NDIS_TASK_OFFLOAD_HEADER.Version constants */
+#define NDIS_TASK_OFFLOAD_VERSION 1
+
+typedef enum _NDIS_ENCAPSULATION {
+ UNSPECIFIED_Encapsulation,
+ NULL_Encapsulation,
+ IEEE_802_3_Encapsulation,
+ IEEE_802_5_Encapsulation,
+ LLC_SNAP_ROUTED_Encapsulation,
+ LLC_SNAP_BRIDGED_Encapsulation
+} NDIS_ENCAPSULATION;
+
+typedef struct _NDIS_ENCAPSULATION_FORMAT {
+ NDIS_ENCAPSULATION Encapsulation;
+ struct {
+ ULONG FixedHeaderSize : 1;
+ ULONG Reserved : 31;
+ } Flags;
+ ULONG EncapsulationHeaderSize;
+} NDIS_ENCAPSULATION_FORMAT, *PNDIS_ENCAPSULATION_FORMAT;
+
+typedef struct _NDIS_TASK_TCP_IP_CHECKSUM {
+ struct {
+ ULONG IpOptionsSupported:1;
+ ULONG TcpOptionsSupported:1;
+ ULONG TcpChecksum:1;
+ ULONG UdpChecksum:1;
+ ULONG IpChecksum:1;
+ } V4Transmit;
+
+ struct {
+ ULONG IpOptionsSupported : 1;
+ ULONG TcpOptionsSupported : 1;
+ ULONG TcpChecksum : 1;
+ ULONG UdpChecksum : 1;
+ ULONG IpChecksum : 1;
+ } V4Receive;
+
+ struct {
+ ULONG IpOptionsSupported : 1;
+ ULONG TcpOptionsSupported : 1;
+ ULONG TcpChecksum : 1;
+ ULONG UdpChecksum : 1;
+ } V6Transmit;
+
+ struct {
+ ULONG IpOptionsSupported : 1;
+ ULONG TcpOptionsSupported : 1;
+ ULONG TcpChecksum : 1;
+ ULONG UdpChecksum : 1;
+ } V6Receive;
+} NDIS_TASK_TCP_IP_CHECKSUM, *PNDIS_TASK_TCP_IP_CHECKSUM;
+
+typedef struct _NDIS_TASK_TCP_LARGE_SEND {
+ ULONG Version;
+ ULONG MaxOffLoadSize;
+ ULONG MinSegmentCount;
+ BOOLEAN TcpOptions;
+ BOOLEAN IpOptions;
+} NDIS_TASK_TCP_LARGE_SEND, *PNDIS_TASK_TCP_LARGE_SEND;
+
+typedef struct _NDIS_TCP_IP_CHECKSUM_PACKET_INFO {
+ _ANONYMOUS_UNION union {
+ struct {
+ ULONG NdisPacketChecksumV4 : 1;
+ ULONG NdisPacketChecksumV6 : 1;
+ ULONG NdisPacketTcpChecksum : 1;
+ ULONG NdisPacketUdpChecksum : 1;
+ ULONG NdisPacketIpChecksum : 1;
+ } Transmit;
+
+ struct {
+ ULONG NdisPacketTcpChecksumFailed : 1;
+ ULONG NdisPacketUdpChecksumFailed : 1;
+ ULONG NdisPacketIpChecksumFailed : 1;
+ ULONG NdisPacketTcpChecksumSucceeded : 1;
+ ULONG NdisPacketUdpChecksumSucceeded : 1;
+ ULONG NdisPacketIpChecksumSucceeded : 1;
+ ULONG NdisPacketLoopback : 1;
+ } Receive;
+ ULONG Value;
+ } DUMMYUNIONNAME;
+} NDIS_TCP_IP_CHECKSUM_PACKET_INFO, *PNDIS_TCP_IP_CHECKSUM_PACKET_INFO;
+
+typedef struct _NDIS_WAN_CO_FRAGMENT {
+ ULONG Errors;
+} NDIS_WAN_CO_FRAGMENT, *PNDIS_WAN_CO_FRAGMENT;
+
+typedef struct _NDIS_WAN_FRAGMENT {
+ UCHAR RemoteAddress[6];
+ UCHAR LocalAddress[6];
+} NDIS_WAN_FRAGMENT, *PNDIS_WAN_FRAGMENT;
+
+typedef struct _WAN_CO_LINKPARAMS {
+ ULONG TransmitSpeed;
+ ULONG ReceiveSpeed;
+ ULONG SendWindow;
+} WAN_CO_LINKPARAMS, *PWAN_CO_LINKPARAMS;
+
+
+/* Call Manager */
+
+typedef VOID DDKAPI
+(*CM_ACTIVATE_VC_COMPLETE_HANDLER)(
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE CallMgrVcContext,
+ /*IN*/ PCO_CALL_PARAMETERS CallParameters);
+
+typedef NDIS_STATUS DDKAPI
+(*CM_ADD_PARTY_HANDLER)(
+ /*IN*/ NDIS_HANDLE CallMgrVcContext,
+ /*IN OUT*/ PCO_CALL_PARAMETERS CallParameters,
+ /*IN*/ NDIS_HANDLE NdisPartyHandle,
+ /*OUT*/ PNDIS_HANDLE CallMgrPartyContext);
+
+typedef NDIS_STATUS DDKAPI
+(*CM_CLOSE_AF_HANDLER)(
+ /*IN*/ NDIS_HANDLE CallMgrAfContext);
+
+typedef NDIS_STATUS DDKAPI
+(*CM_CLOSE_CALL_HANDLER)(
+ /*IN*/ NDIS_HANDLE CallMgrVcContext,
+ /*IN*/ NDIS_HANDLE CallMgrPartyContext /*OPTIONAL*/,
+ /*IN*/ PVOID CloseData /*OPTIONAL*/,
+ /*IN*/ UINT Size /*OPTIONAL*/);
+
+typedef NDIS_STATUS DDKAPI
+(*CM_DEREG_SAP_HANDLER)(
+ /*IN*/ NDIS_HANDLE CallMgrSapContext);
+
+typedef VOID DDKAPI
+(*CM_DEACTIVATE_VC_COMPLETE_HANDLER)(
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE CallMgrVcContext);
+
+typedef NDIS_STATUS DDKAPI
+(*CM_DROP_PARTY_HANDLER)(
+ /*IN*/ NDIS_HANDLE CallMgrPartyContext,
+ /*IN*/ PVOID CloseData /*OPTIONAL*/,
+ /*IN*/ UINT Size /*OPTIONAL*/);
+
+typedef VOID DDKAPI
+(*CM_INCOMING_CALL_COMPLETE_HANDLER)(
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE CallMgrVcContext,
+ /*IN*/ PCO_CALL_PARAMETERS CallParameters);
+
+typedef NDIS_STATUS DDKAPI
+(*CM_MAKE_CALL_HANDLER)(
+ /*IN*/ NDIS_HANDLE CallMgrVcContext,
+ /*IN OUT*/ PCO_CALL_PARAMETERS CallParameters,
+ /*IN*/ NDIS_HANDLE NdisPartyHandle /*OPTIONAL*/,
+ /*OUT*/ PNDIS_HANDLE CallMgrPartyContext /*OPTIONAL*/);
+
+typedef NDIS_STATUS DDKAPI
+(*CM_MODIFY_CALL_QOS_HANDLER)(
+ /*IN*/ NDIS_HANDLE CallMgrVcContext,
+ /*IN*/ PCO_CALL_PARAMETERS CallParameters);
+
+typedef NDIS_STATUS DDKAPI
+(*CM_OPEN_AF_HANDLER)(
+ /*IN*/ NDIS_HANDLE CallMgrBindingContext,
+ /*IN*/ PCO_ADDRESS_FAMILY AddressFamily,
+ /*IN*/ NDIS_HANDLE NdisAfHandle,
+ /*OUT*/ PNDIS_HANDLE CallMgrAfContext);
+
+typedef NDIS_STATUS DDKAPI
+(*CM_REG_SAP_HANDLER)(
+ /*IN*/ NDIS_HANDLE CallMgrAfContext,
+ /*IN*/ PCO_SAP Sap,
+ /*IN*/ NDIS_HANDLE NdisSapHandle,
+ /*OUT*/ PNDIS_HANDLE CallMgrSapContext);
+
+typedef NDIS_STATUS DDKAPI
+(*CO_CREATE_VC_HANDLER)(
+ /*IN*/ NDIS_HANDLE ProtocolAfContext,
+ /*IN*/ NDIS_HANDLE NdisVcHandle,
+ /*OUT*/ PNDIS_HANDLE ProtocolVcContext);
+
+typedef NDIS_STATUS DDKAPI
+(*CO_DELETE_VC_HANDLER)(
+ /*IN*/ NDIS_HANDLE ProtocolVcContext);
+
+typedef VOID DDKAPI
+(*CO_REQUEST_COMPLETE_HANDLER)(
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE ProtocolAfContext /*OPTIONAL*/,
+ /*IN*/ NDIS_HANDLE ProtocolVcContext /*OPTIONAL*/,
+ /*IN*/ NDIS_HANDLE ProtocolPartyContext /*OPTIONAL*/,
+ /*IN*/ PNDIS_REQUEST NdisRequest);
+
+typedef NDIS_STATUS DDKAPI
+(*CO_REQUEST_HANDLER)(
+ /*IN*/ NDIS_HANDLE ProtocolAfContext,
+ /*IN*/ NDIS_HANDLE ProtocolVcContext /*OPTIONAL*/,
+ /*IN*/ NDIS_HANDLE ProtocolPartyContext /*OPTIONAL*/,
+ /*IN OUT*/ PNDIS_REQUEST NdisRequest);
+
+typedef struct _NDIS_CALL_MANAGER_CHARACTERISTICS {
+ UCHAR MajorVersion;
+ UCHAR MinorVersion;
+ USHORT Filler;
+ UINT Reserved;
+ CO_CREATE_VC_HANDLER CmCreateVcHandler;
+ CO_DELETE_VC_HANDLER CmDeleteVcHandler;
+ CM_OPEN_AF_HANDLER CmOpenAfHandler;
+ CM_CLOSE_AF_HANDLER CmCloseAfHandler;
+ CM_REG_SAP_HANDLER CmRegisterSapHandler;
+ CM_DEREG_SAP_HANDLER CmDeregisterSapHandler;
+ CM_MAKE_CALL_HANDLER CmMakeCallHandler;
+ CM_CLOSE_CALL_HANDLER CmCloseCallHandler;
+ CM_INCOMING_CALL_COMPLETE_HANDLER CmIncomingCallCompleteHandler;
+ CM_ADD_PARTY_HANDLER CmAddPartyHandler;
+ CM_DROP_PARTY_HANDLER CmDropPartyHandler;
+ CM_ACTIVATE_VC_COMPLETE_HANDLER CmActivateVcCompleteHandler;
+ CM_DEACTIVATE_VC_COMPLETE_HANDLER CmDeactivateVcCompleteHandler;
+ CM_MODIFY_CALL_QOS_HANDLER CmModifyCallQoSHandler;
+ CO_REQUEST_HANDLER CmRequestHandler;
+ CO_REQUEST_COMPLETE_HANDLER CmRequestCompleteHandler;
+} NDIS_CALL_MANAGER_CHARACTERISTICS, *PNDIS_CALL_MANAGER_CHARACTERISTICS;
+
+
+
+/* Call Manager clients */
+
+typedef VOID (*CL_OPEN_AF_COMPLETE_HANDLER)(
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE ProtocolAfContext,
+ /*IN*/ NDIS_HANDLE NdisAfHandle);
+
+typedef VOID DDKAPI
+(*CL_CLOSE_AF_COMPLETE_HANDLER)(
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE ProtocolAfContext);
+
+typedef VOID DDKAPI
+(*CL_REG_SAP_COMPLETE_HANDLER)(
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE ProtocolSapContext,
+ /*IN*/ PCO_SAP Sap,
+ /*IN*/ NDIS_HANDLE NdisSapHandle);
+
+typedef VOID DDKAPI
+(*CL_DEREG_SAP_COMPLETE_HANDLER)(
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE ProtocolSapContext);
+
+typedef VOID DDKAPI
+(*CL_MAKE_CALL_COMPLETE_HANDLER)(
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE ProtocolVcContext,
+ /*IN*/ NDIS_HANDLE NdisPartyHandle /*OPTIONAL*/,
+ /*IN*/ PCO_CALL_PARAMETERS CallParameters);
+
+typedef VOID DDKAPI
+(*CL_MODIFY_CALL_QOS_COMPLETE_HANDLER)(
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE ProtocolVcContext,
+ /*IN*/ PCO_CALL_PARAMETERS CallParameters);
+
+typedef VOID DDKAPI
+(*CL_CLOSE_CALL_COMPLETE_HANDLER)(
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE ProtocolVcContext,
+ /*IN*/ NDIS_HANDLE ProtocolPartyContext /*OPTIONAL*/);
+
+typedef VOID DDKAPI
+(*CL_ADD_PARTY_COMPLETE_HANDLER)(
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE ProtocolPartyContext,
+ /*IN*/ NDIS_HANDLE NdisPartyHandle,
+ /*IN*/ PCO_CALL_PARAMETERS CallParameters);
+
+typedef VOID DDKAPI
+(*CL_DROP_PARTY_COMPLETE_HANDLER)(
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE ProtocolPartyContext);
+
+typedef NDIS_STATUS DDKAPI
+(*CL_INCOMING_CALL_HANDLER)(
+ /*IN*/ NDIS_HANDLE ProtocolSapContext,
+ /*IN*/ NDIS_HANDLE ProtocolVcContext,
+ /*IN OUT*/ PCO_CALL_PARAMETERS CallParameters);
+
+typedef VOID DDKAPI
+(*CL_INCOMING_CALL_QOS_CHANGE_HANDLER)(
+ /*IN*/ NDIS_HANDLE ProtocolVcContext,
+ /*IN*/ PCO_CALL_PARAMETERS CallParameters);
+
+typedef VOID DDKAPI
+(*CL_INCOMING_CLOSE_CALL_HANDLER)(
+ /*IN*/ NDIS_STATUS CloseStatus,
+ /*IN*/ NDIS_HANDLE ProtocolVcContext,
+ /*IN*/ PVOID CloseData /*OPTIONAL*/,
+ /*IN*/ UINT Size /*OPTIONAL*/);
+
+typedef VOID DDKAPI
+(*CL_INCOMING_DROP_PARTY_HANDLER)(
+ /*IN*/ NDIS_STATUS DropStatus,
+ /*IN*/ NDIS_HANDLE ProtocolPartyContext,
+ /*IN*/ PVOID CloseData /*OPTIONAL*/,
+ /*IN*/ UINT Size /*OPTIONAL*/);
+
+typedef VOID DDKAPI
+(*CL_CALL_CONNECTED_HANDLER)(
+ /*IN*/ NDIS_HANDLE ProtocolVcContext);
+
+
+typedef struct _NDIS_CLIENT_CHARACTERISTICS {
+ UCHAR MajorVersion;
+ UCHAR MinorVersion;
+ USHORT Filler;
+ UINT Reserved;
+ CO_CREATE_VC_HANDLER ClCreateVcHandler;
+ CO_DELETE_VC_HANDLER ClDeleteVcHandler;
+ CO_REQUEST_HANDLER ClRequestHandler;
+ CO_REQUEST_COMPLETE_HANDLER ClRequestCompleteHandler;
+ CL_OPEN_AF_COMPLETE_HANDLER ClOpenAfCompleteHandler;
+ CL_CLOSE_AF_COMPLETE_HANDLER ClCloseAfCompleteHandler;
+ CL_REG_SAP_COMPLETE_HANDLER ClRegisterSapCompleteHandler;
+ CL_DEREG_SAP_COMPLETE_HANDLER ClDeregisterSapCompleteHandler;
+ CL_MAKE_CALL_COMPLETE_HANDLER ClMakeCallCompleteHandler;
+ CL_MODIFY_CALL_QOS_COMPLETE_HANDLER ClModifyCallQoSCompleteHandler;
+ CL_CLOSE_CALL_COMPLETE_HANDLER ClCloseCallCompleteHandler;
+ CL_ADD_PARTY_COMPLETE_HANDLER ClAddPartyCompleteHandler;
+ CL_DROP_PARTY_COMPLETE_HANDLER ClDropPartyCompleteHandler;
+ CL_INCOMING_CALL_HANDLER ClIncomingCallHandler;
+ CL_INCOMING_CALL_QOS_CHANGE_HANDLER ClIncomingCallQoSChangeHandler;
+ CL_INCOMING_CLOSE_CALL_HANDLER ClIncomingCloseCallHandler;
+ CL_INCOMING_DROP_PARTY_HANDLER ClIncomingDropPartyHandler;
+ CL_CALL_CONNECTED_HANDLER ClCallConnectedHandler;
+} NDIS_CLIENT_CHARACTERISTICS, *PNDIS_CLIENT_CHARACTERISTICS;
+
+
+/* NDIS protocol structures */
+
+/* Prototypes for NDIS 3.0 protocol characteristics */
+
+typedef VOID DDKAPI
+(*OPEN_ADAPTER_COMPLETE_HANDLER)(
+ /*IN*/ NDIS_HANDLE ProtocolBindingContext,
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ NDIS_STATUS OpenErrorStatus);
+
+typedef VOID DDKAPI
+(*CLOSE_ADAPTER_COMPLETE_HANDLER)(
+ /*IN*/ NDIS_HANDLE ProtocolBindingContext,
+ /*IN*/ NDIS_STATUS Status);
+
+typedef VOID DDKAPI
+(*RESET_COMPLETE_HANDLER)(
+ /*IN*/ NDIS_HANDLE ProtocolBindingContext,
+ /*IN*/ NDIS_STATUS Status);
+
+typedef VOID DDKAPI
+(*REQUEST_COMPLETE_HANDLER)(
+ /*IN*/ NDIS_HANDLE ProtocolBindingContext,
+ /*IN*/ PNDIS_REQUEST NdisRequest,
+ /*IN*/ NDIS_STATUS Status);
+
+typedef VOID DDKAPI
+(*STATUS_HANDLER)(
+ /*IN*/ NDIS_HANDLE ProtocolBindingContext,
+ /*IN*/ NDIS_STATUS GeneralStatus,
+ /*IN*/ PVOID StatusBuffer,
+ /*IN*/ UINT StatusBufferSize);
+
+typedef VOID DDKAPI
+(*STATUS_COMPLETE_HANDLER)(
+ /*IN*/ NDIS_HANDLE ProtocolBindingContext);
+
+typedef VOID DDKAPI
+(*SEND_COMPLETE_HANDLER)(
+ /*IN*/ NDIS_HANDLE ProtocolBindingContext,
+ /*IN*/ PNDIS_PACKET Packet,
+ /*IN*/ NDIS_STATUS Status);
+
+typedef VOID DDKAPI
+(*WAN_SEND_COMPLETE_HANDLER)(
+ /*IN*/ NDIS_HANDLE ProtocolBindingContext,
+ /*IN*/ PNDIS_WAN_PACKET Packet,
+ /*IN*/ NDIS_STATUS Status);
+
+typedef VOID DDKAPI
+(*TRANSFER_DATA_COMPLETE_HANDLER)(
+ /*IN*/ NDIS_HANDLE ProtocolBindingContext,
+ /*IN*/ PNDIS_PACKET Packet,
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ UINT BytesTransferred);
+
+typedef VOID DDKAPI
+(*WAN_TRANSFER_DATA_COMPLETE_HANDLER)(
+ VOID);
+
+
+typedef NDIS_STATUS DDKAPI
+(*RECEIVE_HANDLER)(
+ /*IN*/ NDIS_HANDLE ProtocolBindingContext,
+ /*IN*/ NDIS_HANDLE MacReceiveContext,
+ /*IN*/ PVOID HeaderBuffer,
+ /*IN*/ UINT HeaderBufferSize,
+ /*IN*/ PVOID LookAheadBuffer,
+ /*IN*/ UINT LookaheadBufferSize,
+ /*IN*/ UINT PacketSize);
+
+typedef NDIS_STATUS DDKAPI
+(*WAN_RECEIVE_HANDLER)(
+ /*IN*/ NDIS_HANDLE NdisLinkHandle,
+ /*IN*/ PUCHAR Packet,
+ /*IN*/ ULONG PacketSize);
+
+typedef VOID DDKAPI
+(*RECEIVE_COMPLETE_HANDLER)(
+ /*IN*/ NDIS_HANDLE ProtocolBindingContext);
+
+
+/* Protocol characteristics for NDIS 3.0 protocols */
+
+#define NDIS30_PROTOCOL_CHARACTERISTICS_S \
+ UCHAR MajorNdisVersion; \
+ UCHAR MinorNdisVersion; \
+ _ANONYMOUS_UNION union { \
+ UINT Reserved; \
+ UINT Flags; \
+ } DUMMYUNIONNAME; \
+ OPEN_ADAPTER_COMPLETE_HANDLER OpenAdapterCompleteHandler; \
+ CLOSE_ADAPTER_COMPLETE_HANDLER CloseAdapterCompleteHandler; \
+ _ANONYMOUS_UNION union { \
+ SEND_COMPLETE_HANDLER SendCompleteHandler; \
+ WAN_SEND_COMPLETE_HANDLER WanSendCompleteHandler; \
+ } DUMMYUNIONNAME2; \
+ _ANONYMOUS_UNION union { \
+ TRANSFER_DATA_COMPLETE_HANDLER TransferDataCompleteHandler; \
+ WAN_TRANSFER_DATA_COMPLETE_HANDLER WanTransferDataCompleteHandler; \
+ } DUMMYUNIONNAME3; \
+ RESET_COMPLETE_HANDLER ResetCompleteHandler; \
+ REQUEST_COMPLETE_HANDLER RequestCompleteHandler; \
+ _ANONYMOUS_UNION union { \
+ RECEIVE_HANDLER ReceiveHandler; \
+ WAN_RECEIVE_HANDLER WanReceiveHandler; \
+ } DUMMYUNIONNAME4; \
+ RECEIVE_COMPLETE_HANDLER ReceiveCompleteHandler; \
+ STATUS_HANDLER StatusHandler; \
+ STATUS_COMPLETE_HANDLER StatusCompleteHandler; \
+ NDIS_STRING Name;
+
+typedef struct _NDIS30_PROTOCOL_CHARACTERISTICS {
+ NDIS30_PROTOCOL_CHARACTERISTICS_S
+} NDIS30_PROTOCOL_CHARACTERISTICS, *PNDIS30_PROTOCOL_CHARACTERISTICS;
+
+
+/* Prototypes for NDIS 4.0 protocol characteristics */
+
+typedef INT DDKAPI
+(*RECEIVE_PACKET_HANDLER)(
+ /*IN*/ NDIS_HANDLE ProtocolBindingContext,
+ /*IN*/ PNDIS_PACKET Packet);
+
+typedef VOID DDKAPI
+(*BIND_HANDLER)(
+ /*OUT*/ PNDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE BindContext,
+ /*IN*/ PNDIS_STRING DeviceName,
+ /*IN*/ PVOID SystemSpecific1,
+ /*IN*/ PVOID SystemSpecific2);
+
+typedef VOID DDKAPI
+(*UNBIND_HANDLER)(
+ /*OUT*/ PNDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE ProtocolBindingContext,
+ /*IN*/ NDIS_HANDLE UnbindContext);
+
+typedef NDIS_STATUS DDKAPI
+(*PNP_EVENT_HANDLER)(
+ /*IN*/ NDIS_HANDLE ProtocolBindingContext,
+ /*IN*/ PNET_PNP_EVENT NetPnPEvent);
+
+typedef VOID DDKAPI
+(*UNLOAD_PROTOCOL_HANDLER)(
+ VOID);
+
+
+/* Protocol characteristics for NDIS 4.0 protocols */
+
+#ifdef __cplusplus
+
+#define NDIS40_PROTOCOL_CHARACTERISTICS_S \
+ NDIS30_PROTOCOL_CHARACTERISTICS Ndis30Chars; \
+ RECEIVE_PACKET_HANDLER ReceivePacketHandler; \
+ BIND_HANDLER BindAdapterHandler; \
+ UNBIND_HANDLER UnbindAdapterHandler; \
+ PNP_EVENT_HANDLER PnPEventHandler; \
+ UNLOAD_PROTOCOL_HANDLER UnloadHandler;
+
+#else /* !__cplusplus */
+
+#define NDIS40_PROTOCOL_CHARACTERISTICS_S \
+ NDIS30_PROTOCOL_CHARACTERISTICS_S \
+ RECEIVE_PACKET_HANDLER ReceivePacketHandler; \
+ BIND_HANDLER BindAdapterHandler; \
+ UNBIND_HANDLER UnbindAdapterHandler; \
+ PNP_EVENT_HANDLER PnPEventHandler; \
+ UNLOAD_PROTOCOL_HANDLER UnloadHandler;
+
+#endif /* __cplusplus */
+
+typedef struct _NDIS40_PROTOCOL_CHARACTERISTICS {
+ NDIS40_PROTOCOL_CHARACTERISTICS_S
+} NDIS40_PROTOCOL_CHARACTERISTICS, *PNDIS40_PROTOCOL_CHARACTERISTICS;
+
+/* Prototypes for NDIS 5.0 protocol characteristics */
+
+typedef VOID DDKAPI
+(*CO_SEND_COMPLETE_HANDLER)(
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE ProtocolVcContext,
+ /*IN*/ PNDIS_PACKET Packet);
+
+typedef VOID DDKAPI
+(*CO_STATUS_HANDLER)(
+ /*IN*/ NDIS_HANDLE ProtocolBindingContext,
+ /*IN*/ NDIS_HANDLE ProtocolVcContext /*OPTIONAL*/,
+ /*IN*/ NDIS_STATUS GeneralStatus,
+ /*IN*/ PVOID StatusBuffer,
+ /*IN*/ UINT StatusBufferSize);
+
+typedef UINT DDKAPI
+(*CO_RECEIVE_PACKET_HANDLER)(
+ /*IN*/ NDIS_HANDLE ProtocolBindingContext,
+ /*IN*/ NDIS_HANDLE ProtocolVcContext,
+ /*IN*/ PNDIS_PACKET Packet);
+
+typedef VOID DDKAPI
+(*CO_AF_REGISTER_NOTIFY_HANDLER)(
+ /*IN*/ NDIS_HANDLE ProtocolBindingContext,
+ /*IN*/ PCO_ADDRESS_FAMILY AddressFamily);
+
+#ifdef __cplusplus \
+
+#define NDIS50_PROTOCOL_CHARACTERISTICS_S \
+ NDIS40_PROTOCOL_CHARACTERISTICS Ndis40Chars; \
+ PVOID ReservedHandlers[4]; \
+ CO_SEND_COMPLETE_HANDLER CoSendCompleteHandler; \
+ CO_STATUS_HANDLER CoStatusHandler; \
+ CO_RECEIVE_PACKET_HANDLER CoReceivePacketHandler; \
+ CO_AF_REGISTER_NOTIFY_HANDLER CoAfRegisterNotifyHandler;
+
+#else /* !__cplusplus */
+
+#define NDIS50_PROTOCOL_CHARACTERISTICS_S \
+ NDIS40_PROTOCOL_CHARACTERISTICS_S \
+ PVOID ReservedHandlers[4]; \
+ CO_SEND_COMPLETE_HANDLER CoSendCompleteHandler; \
+ CO_STATUS_HANDLER CoStatusHandler; \
+ CO_RECEIVE_PACKET_HANDLER CoReceivePacketHandler; \
+ CO_AF_REGISTER_NOTIFY_HANDLER CoAfRegisterNotifyHandler;
+
+#endif /* !__cplusplus */
+
+typedef struct _NDIS50_PROTOCOL_CHARACTERISTICS {
+ NDIS50_PROTOCOL_CHARACTERISTICS_S
+} NDIS50_PROTOCOL_CHARACTERISTICS, *PNDIS50_PROTOCOL_CHARACTERISTICS;
+
+#if defined(NDIS50) || defined(NDIS51)
+typedef struct _NDIS_PROTOCOL_CHARACTERISTICS {
+ NDIS50_PROTOCOL_CHARACTERISTICS_S;
+} NDIS_PROTOCOL_CHARACTERISTICS, *PNDIS_PROTOCOL_CHARACTERISTICS;
+#elif defined(NDIS40)
+typedef struct _NDIS_PROTOCOL_CHARACTERISTICS {
+ NDIS40_PROTOCOL_CHARACTERISTICS_S;
+} NDIS_PROTOCOL_CHARACTERISTICS, *PNDIS_PROTOCOL_CHARACTERISTICS;
+#elif defined(NDIS30)
+typedef struct _NDIS_PROTOCOL_CHARACTERISTICS {
+ NDIS30_PROTOCOL_CHARACTERISTICS_S
+} NDIS_PROTOCOL_CHARACTERISTICS, *PNDIS_PROTOCOL_CHARACTERISTICS;
+#else
+#error Define an NDIS version
+#endif /* NDIS30 */
+
+
+
+/* Buffer management routines */
+
+NDISAPI
+VOID
+DDKAPI
+NdisAllocateBuffer(
+ /*OUT*/ PNDIS_STATUS Status,
+ /*OUT*/ PNDIS_BUFFER *Buffer,
+ /*IN*/ NDIS_HANDLE PoolHandle,
+ /*IN*/ PVOID VirtualAddress,
+ /*IN*/ UINT Length);
+
+
+NDISAPI
+VOID
+DDKAPI
+NdisAllocateBufferPool(
+ /*OUT*/ PNDIS_STATUS Status,
+ /*OUT*/ PNDIS_HANDLE PoolHandle,
+ /*IN*/ UINT NumberOfDescriptors);
+
+NDISAPI
+VOID
+DDKAPI
+NdisAllocatePacket(
+ /*OUT*/ PNDIS_STATUS Status,
+ /*OUT*/ PNDIS_PACKET *Packet,
+ /*IN*/ NDIS_HANDLE PoolHandle);
+
+NDISAPI
+VOID
+DDKAPI
+NdisAllocatePacketPool(
+ /*OUT*/ PNDIS_STATUS Status,
+ /*OUT*/ PNDIS_HANDLE PoolHandle,
+ /*IN*/ UINT NumberOfDescriptors,
+ /*IN*/ UINT ProtocolReservedLength);
+
+NDISAPI
+VOID
+DDKAPI
+NdisCopyBuffer(
+ /*OUT*/ PNDIS_STATUS Status,
+ /*OUT*/ PNDIS_BUFFER *Buffer,
+ /*IN*/ NDIS_HANDLE PoolHandle,
+ /*IN*/ PVOID MemoryDescriptor,
+ /*IN*/ UINT Offset,
+ /*IN*/ UINT Length);
+
+NDISAPI
+VOID
+DDKAPI
+NdisCopyFromPacketToPacket(
+ /*IN*/ PNDIS_PACKET Destination,
+ /*IN*/ UINT DestinationOffset,
+ /*IN*/ UINT BytesToCopy,
+ /*IN*/ PNDIS_PACKET Source,
+ /*IN*/ UINT SourceOffset,
+ /*OUT*/ PUINT BytesCopied);
+
+NDISAPI
+VOID
+DDKAPI
+NdisDprAllocatePacket(
+ /*OUT*/ PNDIS_STATUS Status,
+ /*OUT*/ PNDIS_PACKET *Packet,
+ /*IN*/ NDIS_HANDLE PoolHandle);
+
+NDISAPI
+VOID
+DDKAPI
+NdisDprAllocatePacketNonInterlocked(
+ /*OUT*/ PNDIS_STATUS Status,
+ /*OUT*/ PNDIS_PACKET *Packet,
+ /*IN*/ NDIS_HANDLE PoolHandle);
+
+NDISAPI
+VOID
+DDKAPI
+NdisDprFreePacket(
+ /*IN*/ PNDIS_PACKET Packet);
+
+NDISAPI
+VOID
+DDKAPI
+NdisDprFreePacketNonInterlocked(
+ /*IN*/ PNDIS_PACKET Packet);
+
+NDISAPI
+VOID
+DDKAPI
+NdisFreeBufferPool(
+ /*IN*/ NDIS_HANDLE PoolHandle);
+
+NDISAPI
+VOID
+DDKAPI
+NdisFreePacket(
+ /*IN*/ PNDIS_PACKET Packet);
+
+NDISAPI
+VOID
+DDKAPI
+NdisFreePacketPool(
+ /*IN*/ NDIS_HANDLE PoolHandle);
+
+NDISAPI
+VOID
+DDKAPI
+NdisReturnPackets(
+ /*IN*/ PNDIS_PACKET *PacketsToReturn,
+ /*IN*/ UINT NumberOfPackets);
+
+NDISAPI
+VOID
+DDKAPI
+NdisUnchainBufferAtBack(
+ /*IN OUT*/ PNDIS_PACKET Packet,
+ /*OUT*/ PNDIS_BUFFER *Buffer);
+
+NDISAPI
+VOID
+DDKAPI
+NdisUnchainBufferAtFront(
+ /*IN OUT*/ PNDIS_PACKET Packet,
+ /*OUT*/ PNDIS_BUFFER *Buffer);
+
+NDISAPI
+VOID
+DDKAPI
+NdisAdjustBufferLength(
+ /*IN*/ PNDIS_BUFFER Buffer,
+ /*IN*/ UINT Length);
+
+NDISAPI
+ULONG
+DDKAPI
+NdisBufferLength(
+ /*IN*/ PNDIS_BUFFER Buffer);
+
+NDISAPI
+PVOID
+DDKAPI
+NdisBufferVirtualAddress(
+ /*IN*/ PNDIS_BUFFER Buffer);
+
+NDISAPI
+ULONG
+DDKAPI
+NDIS_BUFFER_TO_SPAN_PAGES(
+ /*IN*/ PNDIS_BUFFER Buffer);
+
+NDISAPI
+VOID
+DDKAPI
+NdisFreeBuffer(
+ /*IN*/ PNDIS_BUFFER Buffer);
+
+NDISAPI
+VOID
+DDKAPI
+NdisGetBufferPhysicalArraySize(
+ /*IN*/ PNDIS_BUFFER Buffer,
+ /*OUT*/ PUINT ArraySize);
+
+NDISAPI
+VOID
+DDKAPI
+NdisGetFirstBufferFromPacket(
+ /*IN*/ PNDIS_PACKET _Packet,
+ /*OUT*/ PNDIS_BUFFER *_FirstBuffer,
+ /*OUT*/ PVOID *_FirstBufferVA,
+ /*OUT*/ PUINT _FirstBufferLength,
+ /*OUT*/ PUINT _TotalBufferLength);
+
+NDISAPI
+VOID
+DDKAPI
+NdisQueryBuffer(
+ /*IN*/ PNDIS_BUFFER Buffer,
+ /*OUT*/ PVOID *VirtualAddress /*OPTIONAL*/,
+ /*OUT*/ PUINT Length);
+
+NDISAPI
+VOID
+DDKAPI
+NdisQueryBufferOffset(
+ /*IN*/ PNDIS_BUFFER Buffer,
+ /*OUT*/ PUINT Offset,
+ /*OUT*/ PUINT Length);
+
+NDISAPI
+VOID
+DDKAPI
+NdisFreeBuffer(
+ /*IN*/ PNDIS_BUFFER Buffer);
+
+
+/*
+ * VOID
+ * NdisGetBufferPhysicalArraySize(
+ * IN PNDIS_BUFFER Buffer,
+ * OUT PUINT ArraySize);
+ */
+#define NdisGetBufferPhysicalArraySize(Buffer, \
+ ArraySize) \
+{ \
+ (*(ArraySize) = NDIS_BUFFER_TO_SPAN_PAGES(Buffer)) \
+}
+
+
+/*
+ * VOID
+ * NdisGetFirstBufferFromPacket(
+ * IN PNDIS_PACKET _Packet,
+ * OUT PNDIS_BUFFER * _FirstBuffer,
+ * OUT PVOID * _FirstBufferVA,
+ * OUT PUINT _FirstBufferLength,
+ * OUT PUINT _TotalBufferLength)
+ */
+#define NdisGetFirstBufferFromPacket(_Packet, \
+ _FirstBuffer, \
+ _FirstBufferVA, \
+ _FirstBufferLength, \
+ _TotalBufferLength) \
+{ \
+ PNDIS_BUFFER _Buffer; \
+ \
+ _Buffer = (_Packet)->Private.Head; \
+ *(_FirstBuffer) = _Buffer; \
+ if (_Buffer != NULL) \
+ { \
+ *(_FirstBufferVA) = MmGetSystemAddressForMdl(_Buffer); \
+ *(_FirstBufferLength) = MmGetMdlByteCount(_Buffer); \
+ _Buffer = _Buffer->Next; \
+ *(_TotalBufferLength) = *(_FirstBufferLength); \
+ while (_Buffer != NULL) { \
+ *(_TotalBufferLength) += MmGetMdlByteCount(_Buffer); \
+ _Buffer = _Buffer->Next; \
+ } \
+ } \
+ else \
+ { \
+ *(_FirstBufferVA) = 0; \
+ *(_FirstBufferLength) = 0; \
+ *(_TotalBufferLength) = 0; \
+ } \
+}
+
+/*
+ * VOID
+ * NdisQueryBuffer(
+ * IN PNDIS_BUFFER Buffer,
+ * OUT PVOID *VirtualAddress OPTIONAL,
+ * OUT PUINT Length)
+ */
+#define NdisQueryBuffer(Buffer, \
+ VirtualAddress, \
+ Length) \
+{ \
+ if (VirtualAddress) \
+ *((PVOID*)VirtualAddress) = MmGetSystemAddressForMdl(Buffer); \
+ \
+ *((PUINT)Length) = MmGetMdlByteCount(Buffer); \
+}
+
+
+/*
+ * VOID
+ * NdisQueryBufferOffset(
+ * IN PNDIS_BUFFER Buffer,
+ * OUT PUINT Offset,
+ * OUT PUINT Length);
+ */
+#define NdisQueryBufferOffset(Buffer, \
+ Offset, \
+ Length) \
+{ \
+ *((PUINT)Offset) = MmGetMdlByteOffset(Buffer); \
+ *((PUINT)Length) = MmGetMdlByteCount(Buffer); \
+}
+
+
+/*
+ * PVOID
+ * NDIS_BUFFER_LINKAGE(
+ * IN PNDIS_BUFFER Buffer);
+ */
+#define NDIS_BUFFER_LINKAGE(Buffer)(Buffer)->Next;
+
+
+/*
+ * VOID
+ * NdisChainBufferAtBack(
+ * IN OUT PNDIS_PACKET Packet,
+ * IN OUT PNDIS_BUFFER Buffer)
+ */
+#define NdisChainBufferAtBack(Packet, \
+ Buffer) \
+{ \
+ PNDIS_BUFFER NdisBuffer = (Buffer); \
+ \
+ while (NdisBuffer->Next != NULL) \
+ NdisBuffer = NdisBuffer->Next; \
+ \
+ NdisBuffer->Next = NULL; \
+ \
+ if ((Packet)->Private.Head != NULL) \
+ (Packet)->Private.Tail->Next = (Buffer); \
+ else \
+ (Packet)->Private.Head = (Buffer); \
+ \
+ (Packet)->Private.Tail = NdisBuffer; \
+ (Packet)->Private.ValidCounts = FALSE; \
+}
+
+
+/*
+ * VOID
+ * NdisChainBufferAtFront(
+ * IN OUT PNDIS_PACKET Packet,
+ * IN OUT PNDIS_BUFFER Buffer)
+ */
+#define NdisChainBufferAtFront(Packet, \
+ Buffer) \
+{ \
+ PNDIS_BUFFER _NdisBuffer = (Buffer); \
+ \
+ while (_NdisBuffer->Next != NULL) \
+ _NdisBuffer = _NdisBuffer->Next; \
+ \
+ if ((Packet)->Private.Head == NULL) \
+ (Packet)->Private.Tail = _NdisBuffer; \
+ \
+ _NdisBuffer->Next = (Packet)->Private.Head; \
+ (Packet)->Private.Head = (Buffer); \
+ (Packet)->Private.ValidCounts = FALSE; \
+}
+
+
+/*
+ * VOID
+ * NdisGetNextBuffer(
+ * IN PNDIS_BUFFER CurrentBuffer,
+ * OUT PNDIS_BUFFER * NextBuffer)
+ */
+#define NdisGetNextBuffer(CurrentBuffer, \
+ NextBuffer) \
+{ \
+ *(NextBuffer) = (CurrentBuffer)->Next; \
+}
+
+
+/*
+ * UINT
+ * NdisGetPacketFlags(
+ * IN PNDIS_PACKET Packet);
+ */
+#define NdisGetPacketFlags(Packet)(Packet)->Private.Flags;
+
+
+/*
+ * VOID
+ * NdisClearPacketFlags(
+ * IN PNDIS_PACKET Packet,
+ * IN UINT Flags);
+ */
+#define NdisClearPacketFlags(Packet, Flags) \
+ (Packet)->Private.Flags &= ~(Flags)
+
+
+/*
+ * VOID
+ * NDIS_GET_PACKET_MEDIA_SPECIFIC_INFO(
+ * IN PNDIS_PACKET Packet,
+ * IN PPVOID pMediaSpecificInfo,
+ * IN PUINT pSizeMediaSpecificInfo);
+ */
+#define NDIS_GET_PACKET_MEDIA_SPECIFIC_INFO(_Packet, \
+ _pMediaSpecificInfo, \
+ _pSizeMediaSpecificInfo) \
+{ \
+ if (!((_Packet)->Private.NdisPacketFlags & fPACKET_ALLOCATED_BY_NDIS) || \
+ !((_Packet)->Private.NdisPacketFlags & fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO)) \
+ { \
+ *(_pMediaSpecificInfo) = NULL; \
+ *(_pSizeMediaSpecificInfo) = 0; \
+ } \
+ else \
+ { \
+ *(_pMediaSpecificInfo) = ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
+ (_Packet)->Private.NdisPacketOobOffset))->MediaSpecificInformation; \
+ *(_pSizeMediaSpecificInfo) = ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
+ (_Packet)->Private.NdisPacketOobOffset))->SizeMediaSpecificInfo; \
+ } \
+}
+
+
+/*
+ * ULONG
+ * NDIS_GET_PACKET_PROTOCOL_TYPE(
+ * IN PNDIS_PACKET Packet);
+ */
+#define NDIS_GET_PACKET_PROTOCOL_TYPE(_Packet) \
+ ((_Packet)->Private.Flags & NDIS_PROTOCOL_ID_MASK)
+
+/*
+ * ULONG
+ * NDIS_GET_PACKET_HEADER_SIZE(
+ * IN PNDIS_PACKET Packet);
+ */
+#define NDIS_GET_PACKET_HEADER_SIZE(_Packet) \
+ ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
+ (_Packet)->Private.NdisPacketOobOffset))->HeaderSize
+
+
+/*
+ * NDIS_STATUS
+ * NDIS_GET_PACKET_STATUS(
+ * IN PNDIS_PACKET Packet);
+ */
+#define NDIS_GET_PACKET_STATUS(_Packet) \
+ ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
+ (_Packet)->Private.NdisPacketOobOffset))->Status
+
+
+/*
+ * ULONGLONG
+ * NDIS_GET_PACKET_TIME_RECEIVED(
+ * IN PNDIS_PACKET Packet);
+ */
+#define NDIS_GET_PACKET_TIME_RECEIVED(_Packet) \
+ ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
+ (_Packet)->Private.NdisPacketOobOffset))->TimeReceived
+
+
+/*
+ * ULONGLONG
+ * NDIS_GET_PACKET_TIME_SENT(
+ * IN PNDIS_PACKET Packet);
+ */
+#define NDIS_GET_PACKET_TIME_SENT(_Packet) \
+ ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
+ (_Packet)->Private.NdisPacketOobOffset))->TimeSent
+
+
+/*
+ * ULONGLONG
+ * NDIS_GET_PACKET_TIME_TO_SEND(
+ * IN PNDIS_PACKET Packet);
+ */
+#define NDIS_GET_PACKET_TIME_TO_SEND(_Packet) \
+ ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
+ (_Packet)->Private.NdisPacketOobOffset))->TimeToSend
+
+
+/*
+ * PNDIS_PACKET_OOB_DATA
+ * NDIS_OOB_DATA_FROM_PACKET(
+ * IN PNDIS_PACKET Packet);
+ */
+#define NDIS_OOB_DATA_FROM_PACKET(_Packet) \
+ (PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
+ (_Packet)->Private.NdisPacketOobOffset)
+
+
+/*
+ * VOID
+ * NdisQueryPacket(
+ * IN PNDIS_PACKET Packet,
+ * OUT PUINT PhysicalBufferCount OPTIONAL,
+ * OUT PUINT BufferCount OPTIONAL,
+ * OUT PNDIS_BUFFER *FirstBuffer OPTIONAL,
+ * OUT PUINT TotalPacketLength OPTIONAL);
+ */
+#define NdisQueryPacket(Packet, \
+ PhysicalBufferCount, \
+ BufferCount, \
+ FirstBuffer, \
+ TotalPacketLength) \
+{ \
+ if (FirstBuffer) \
+ *((PNDIS_BUFFER*)FirstBuffer) = (Packet)->Private.Head; \
+ if ((TotalPacketLength) || (BufferCount) || (PhysicalBufferCount)) \
+ { \
+ if (!(Packet)->Private.ValidCounts) { \
+ UINT _Offset; \
+ UINT _PacketLength; \
+ PNDIS_BUFFER _NdisBuffer; \
+ UINT _PhysicalBufferCount = 0; \
+ UINT _TotalPacketLength = 0; \
+ UINT _Count = 0; \
+ \
+ for (_NdisBuffer = (Packet)->Private.Head; \
+ _NdisBuffer != (PNDIS_BUFFER)NULL; \
+ _NdisBuffer = _NdisBuffer->Next) \
+ { \
+ _PhysicalBufferCount += NDIS_BUFFER_TO_SPAN_PAGES(_NdisBuffer); \
+ NdisQueryBufferOffset(_NdisBuffer, &_Offset, &_PacketLength); \
+ _TotalPacketLength += _PacketLength; \
+ _Count++; \
+ } \
+ (Packet)->Private.PhysicalCount = _PhysicalBufferCount; \
+ (Packet)->Private.TotalLength = _TotalPacketLength; \
+ (Packet)->Private.Count = _Count; \
+ (Packet)->Private.ValidCounts = TRUE; \
+ } \
+ \
+ if (PhysicalBufferCount) \
+ *((PUINT)PhysicalBufferCount) = (Packet)->Private.PhysicalCount; \
+ \
+ if (BufferCount) \
+ *((PUINT)BufferCount) = (Packet)->Private.Count; \
+ \
+ if (TotalPacketLength) \
+ *((PUINT)TotalPacketLength) = (Packet)->Private.TotalLength; \
+ } \
+}
+
+/*
+ * VOID
+ * NdisQueryPacketLength(
+ * IN PNDIS_PACKET Packet,
+ * OUT PUINT PhysicalBufferCount OPTIONAL,
+ * OUT PUINT BufferCount OPTIONAL,
+ * OUT PNDIS_BUFFER *FirstBuffer OPTIONAL,
+ * OUT PUINT TotalPacketLength OPTIONAL);
+ */
+#define NdisQueryPacketLength(Packet, \
+ TotalPacketLength) \
+{ \
+ if ((TotalPacketLength)) \
+ { \
+ if (!(Packet)->Private.ValidCounts) { \
+ UINT _Offset; \
+ UINT _PacketLength; \
+ PNDIS_BUFFER _NdisBuffer; \
+ UINT _PhysicalBufferCount = 0; \
+ UINT _TotalPacketLength = 0; \
+ UINT _Count = 0; \
+ \
+ for (_NdisBuffer = (Packet)->Private.Head; \
+ _NdisBuffer != (PNDIS_BUFFER)NULL; \
+ _NdisBuffer = _NdisBuffer->Next) \
+ { \
+ _PhysicalBufferCount += NDIS_BUFFER_TO_SPAN_PAGES(_NdisBuffer); \
+ NdisQueryBufferOffset(_NdisBuffer, &_Offset, &_PacketLength); \
+ _TotalPacketLength += _PacketLength; \
+ _Count++; \
+ } \
+ (Packet)->Private.PhysicalCount = _PhysicalBufferCount; \
+ (Packet)->Private.TotalLength = _TotalPacketLength; \
+ (Packet)->Private.Count = _Count; \
+ (Packet)->Private.ValidCounts = TRUE; \
+ } \
+ \
+ if (TotalPacketLength) \
+ *((PUINT)TotalPacketLength) = (Packet)->Private.TotalLength; \
+ } \
+}
+
+
+/*
+ * VOID
+ * NdisRecalculatePacketCounts(
+ * IN OUT PNDIS_PACKET Packet);
+ */
+#define NdisRecalculatePacketCounts(Packet) \
+{ \
+ PNDIS_BUFFER _Buffer = (Packet)->Private.Head; \
+ if (_Buffer != NULL) \
+ { \
+ while (_Buffer->Next != NULL) \
+ { \
+ ´_Buffer = _Buffer->Next; \
+ } \
+ (Packet)->Private.Tail = _Buffer; \
+ } \
+ (Packet)->Private.ValidCounts = FALSE; \
+}
+
+
+/*
+ * VOID
+ * NdisReinitializePacket(
+ * IN OUT PNDIS_PACKET Packet);
+ */
+#define NdisReinitializePacketCounts(Packet) \
+{ \
+ (Packet)->Private.Head = (PNDIS_BUFFER)NULL; \
+ (Packet)->Private.ValidCounts = FALSE; \
+}
+
+
+/*
+ * VOID
+ * NdisSetPacketFlags(
+ * IN PNDIS_PACKET Packet,
+ * IN UINT Flags);
+ */
+#define NdisSetPacketFlags(Packet, Flags) \
+ (Packet)->Private.Flags |= (Flags);
+
+
+/*
+ * VOID
+ * NDIS_SET_PACKET_HEADER_SIZE(
+ * IN PNDIS_PACKET Packet,
+ * IN UINT HdrSize);
+ */
+#define NDIS_SET_PACKET_HEADER_SIZE(_Packet, _HdrSize) \
+ ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
+ (_Packet)->Private.NdisPacketOobOffset))->HeaderSize = (_HdrSize)
+
+
+/*
+ * VOID
+ * NDIS_SET_PACKET_MEDIA_SPECIFIC_INFO(
+ * IN PNDIS_PACKET Packet,
+ * IN PVOID MediaSpecificInfo,
+ * IN UINT SizeMediaSpecificInfo);
+ */
+#define NDIS_SET_PACKET_MEDIA_SPECIFIC_INFO(_Packet, \
+ _MediaSpecificInfo, \
+ _SizeMediaSpecificInfo) \
+{ \
+ if ((_Packet)->Private.NdisPacketFlags & fPACKET_ALLOCATED_BY_NDIS) \
+ { \
+ (_Packet)->Private.NdisPacketFlags |= fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO; \
+ ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
+ (_Packet)->Private.NdisPacketOobOffset))->MediaSpecificInformation = \
+ (_MediaSpecificInfo); \
+ ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
+ (_Packet)->Private.NdisPacketOobOffset))->SizeMediaSpecificInfo = \
+ (_SizeMediaSpecificInfo); \
+ } \
+}
+
+
+/*
+ * VOID
+ * NDIS_SET_PACKET_STATUS(
+ * IN PNDIS_PACKET Packet,
+ * IN NDIS_STATUS Status);
+ */
+#define NDIS_SET_PACKET_STATUS(_Packet, _Status) \
+ ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
+ (_Packet)->Private.NdisPacketOobOffset))->Status = (_Status)
+
+
+/*
+ * VOID
+ * NDIS_SET_PACKET_TIME_RECEIVED(
+ * IN PNDIS_PACKET Packet,
+ * IN ULONGLONG TimeReceived);
+ */
+#define NDIS_SET_PACKET_TIME_RECEIVED(_Packet, _TimeReceived) \
+ ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
+ (_Packet)->Private.NdisPacketOobOffset))->TimeReceived = (_TimeReceived)
+
+
+/*
+ * VOID
+ * NDIS_SET_PACKET_TIME_SENT(
+ * IN PNDIS_PACKET Packet,
+ * IN ULONGLONG TimeSent);
+ */
+#define NDIS_SET_PACKET_TIME_SENT(_Packet, _TimeSent) \
+ ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
+ (_Packet)->Private.NdisPacketOobOffset))->TimeSent = (_TimeSent)
+
+
+/*
+ * VOID
+ * NDIS_SET_PACKET_TIME_TO_SEND(
+ * IN PNDIS_PACKET Packet,
+ * IN ULONGLONG TimeToSend);
+ */
+#define NDIS_SET_PACKET_TIME_TO_SEND(_Packet, _TimeToSend) \
+ ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
+ (_Packet)->Private.NdisPacketOobOffset))->TimeToSend = (_TimeToSend)
+
+
+/*
+ * VOID
+ * NdisSetSendFlags(
+ * IN PNDIS_PACKET Packet,
+ * IN UINT Flags);
+ */
+#define NdisSetSendFlags(_Packet,_Flags)(_Packet)->Private.Flags = (_Flags)
+
+
+
+/* Memory management routines */
+
+/*
+ * VOID
+ * NdisCreateLookaheadBufferFromSharedMemory(
+ * IN PVOID pSharedMemory,
+ * IN UINT LookaheadLength,
+ * OUT PVOID *pLookaheadBuffer)
+ */
+#define NdisCreateLookaheadBufferFromSharedMemory(_pSharedMemory, \
+ _LookaheadLength, \
+ _pLookaheadBuffer) \
+ ((*(_pLookaheadBuffer)) = (_pSharedMemory))
+
+/*
+ * VOID
+ * NdisDestroyLookaheadBufferFromSharedMemory(
+ * IN PVOID pLookaheadBuffer)
+ */
+#define NdisDestroyLookaheadBufferFromSharedMemory(_pLookaheadBuffer)
+
+#if defined(i386)
+
+/*
+ * VOID
+ * NdisMoveFromMappedMemory(
+ * OUT PVOID Destination,
+ * IN PVOID Source,
+ * IN ULONG Length);
+ */
+#define NdisMoveFromMappedMemory(Destination, Source, Length) \
+ NdisMoveMappedMemory(Destination, Source, Length)
+
+/*
+ * VOID
+ * NdisMoveMappedMemory(
+ * OUT PVOID Destination,
+ * IN PVOID Source,
+ * IN ULONG Length);
+ */
+#define NdisMoveMappedMemory(Destination, Source, Length) \
+ RtlCopyMemory(Destination, Source, Length)
+
+/*
+ * VOID
+ * NdisMoveToMappedMemory(
+ * OUT PVOID Destination,
+ * IN PVOID Source,
+ * IN ULONG Length);
+ */
+#define NdisMoveToMappedMemory(Destination, Source, Length) \
+ NdisMoveMappedMemory(Destination, Source, Length)
+
+#endif /* i386 */
+
+/*
+ * VOID
+ * NdisMUpdateSharedMemory(
+ * IN NDIS_HANDLE MiniportAdapterHandle,
+ * IN ULONG Length,
+ * IN PVOID VirtualAddress,
+ * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
+ */
+#define NdisMUpdateSharedMemory(_H, _L, _V, _P) \
+ NdisUpdateSharedMemory(_H, _L, _V, _P)
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisAllocateMemory(
+ /*OUT*/ PVOID *VirtualAddress,
+ /*IN*/ UINT Length,
+ /*IN*/ UINT MemoryFlags,
+ /*IN*/ NDIS_PHYSICAL_ADDRESS HighestAcceptableAddress);
+
+NDISAPI
+VOID
+DDKAPI
+NdisFreeMemory(
+ /*IN*/ PVOID VirtualAddress,
+ /*IN*/ UINT Length,
+ /*IN*/ UINT MemoryFlags);
+
+NDISAPI
+VOID
+DDKAPI
+NdisImmediateReadSharedMemory(
+ /*IN*/ NDIS_HANDLE WrapperConfigurationContext,
+ /*IN*/ ULONG SharedMemoryAddress,
+ /*OUT*/ PUCHAR Buffer,
+ /*IN*/ ULONG Length);
+
+NDISAPI
+VOID
+DDKAPI
+NdisImmediateWriteSharedMemory(
+ /*IN*/ NDIS_HANDLE WrapperConfigurationContext,
+ /*IN*/ ULONG SharedMemoryAddress,
+ /*IN*/ PUCHAR Buffer,
+ /*IN*/ ULONG Length);
+
+NDISAPI
+VOID
+DDKAPI
+NdisMAllocateSharedMemory(
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
+ /*IN*/ ULONG Length,
+ /*IN*/ BOOLEAN Cached,
+ /*OUT*/ PVOID *VirtualAddress,
+ /*OUT*/ PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisMAllocateSharedMemoryAsync(
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
+ /*IN*/ ULONG Length,
+ /*IN*/ BOOLEAN Cached,
+ /*IN*/ PVOID Context);
+
+#if defined(NDIS50)
+
+#define NdisUpdateSharedMemory(NdisAdapterHandle, \
+ Length, \
+ VirtualAddress, \
+ PhysicalAddress)
+
+#else
+
+NDISAPI
+VOID
+DDKAPI
+NdisUpdateSharedMemory(
+ /*IN*/ NDIS_HANDLE NdisAdapterHandle,
+ /*IN*/ ULONG Length,
+ /*IN*/ PVOID VirtualAddress,
+ /*IN*/ NDIS_PHYSICAL_ADDRESS PhysicalAddress);
+
+#endif /* defined(NDIS50) */
+
+/*
+ * ULONG
+ * NdisGetPhysicalAddressHigh(
+ * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
+ */
+#define NdisGetPhysicalAddressHigh(PhysicalAddress) \
+ ((PhysicalAddress).HighPart)
+
+/*
+ * VOID
+ * NdisSetPhysicalAddressHigh(
+ * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress,
+ * IN ULONG Value);
+ */
+#define NdisSetPhysicalAddressHigh(PhysicalAddress, Value) \
+ ((PhysicalAddress).HighPart) = (Value)
+
+/*
+ * ULONG
+ * NdisGetPhysicalAddressLow(
+ * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
+ */
+#define NdisGetPhysicalAddressLow(PhysicalAddress) \
+ ((PhysicalAddress).LowPart)
+
+
+/*
+ * VOID
+ * NdisSetPhysicalAddressLow(
+ * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress,
+ * IN ULONG Value);
+ */
+#define NdisSetPhysicalAddressLow(PhysicalAddress, Value) \
+ ((PhysicalAddress).LowPart) = (Value)
+
+/*
+ * VOID
+ * NDIS_PHYSICAL_ADDRESS_CONST(
+ * IN ULONG Low,
+ * IN LONG High);
+ */
+#define NDIS_PHYSICAL_ADDRESS_CONST(Low, High) \
+ { {(ULONG)(Low), (LONG)(High)} }
+
+/*
+ * ULONG
+ * NdisEqualMemory(
+ * IN CONST VOID *Source1,
+ * IN CONST VOID *Source2,
+ * IN ULONG Length);
+ */
+#define NdisEqualMemory(Source1, Source2, Length) \
+ RtlEqualMemory(Source1, Source2, Length)
+
+/*
+ * VOID
+ * NdisFillMemory(
+ * IN PVOID Destination,
+ * IN ULONG Length,
+ * IN UCHAR Fill);
+ */
+#define NdisFillMemory(Destination, Length, Fill) \
+ RtlFillMemory(Destination, Length, Fill)
+
+/*
+ * VOID
+ * NdisZeroMappedMemory(
+ * IN PVOID Destination,
+ * IN ULONG Length);
+ */
+#define NdisZeroMappedMemory(Destination, Length) \
+ RtlZeroMemory(Destination, Length)
+
+/*
+ * VOID
+ * NdisMoveMemory(
+ * OUT PVOID Destination,
+ * IN PVOID Source,
+ * IN ULONG Length);
+ */
+#define NdisMoveMemory(Destination, Source, Length) \
+ RtlCopyMemory(Destination, Source, Length)
+
+
+/*
+ * VOID
+ * NdisRetrieveUlong(
+ * IN PULONG DestinationAddress,
+ * IN PULONG SourceAddress);
+ */
+#define NdisRetrieveUlong(DestinationAddress, SourceAddress) \
+ RtlRetrieveUlong(DestinationAddress, SourceAddress)
+
+
+/*
+ * VOID
+ * NdisStoreUlong(
+ * IN PULONG DestinationAddress,
+ * IN ULONG Value);
+ */
+#define NdisStoreUlong(DestinationAddress, Value) \
+ RtlStoreUlong(DestinationAddress, Value)
+
+
+/*
+ * VOID
+ * NdisZeroMemory(
+ * IN PVOID Destination,
+ * IN ULONG Length)
+ */
+#define NdisZeroMemory(Destination, Length) \
+ RtlZeroMemory(Destination, Length)
+
+
+
+/* Configuration routines */
+
+NDISAPI
+VOID
+DDKAPI
+NdisOpenConfiguration(
+ /*OUT*/ PNDIS_STATUS Status,
+ /*OUT*/ PNDIS_HANDLE ConfigurationHandle,
+ /*IN*/ NDIS_HANDLE WrapperConfigurationContext);
+
+NDISAPI
+VOID
+DDKAPI
+NdisReadNetworkAddress(
+ /*OUT*/ PNDIS_STATUS Status,
+ /*OUT*/ PVOID *NetworkAddress,
+ /*OUT*/ PUINT NetworkAddressLength,
+ /*IN*/ NDIS_HANDLE ConfigurationHandle);
+
+NDISAPI
+VOID
+DDKAPI
+NdisReadEisaSlotInformation(
+ /*OUT*/ PNDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE WrapperConfigurationContext,
+ /*OUT*/ PUINT SlotNumber,
+ /*OUT*/ PNDIS_EISA_FUNCTION_INFORMATION EisaData);
+
+NDISAPI
+VOID
+DDKAPI
+NdisReadEisaSlotInformationEx(
+ /*OUT*/ PNDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE WrapperConfigurationContext,
+ /*OUT*/ PUINT SlotNumber,
+ /*OUT*/ PNDIS_EISA_FUNCTION_INFORMATION *EisaData,
+ /*OUT*/ PUINT NumberOfFunctions);
+
+NDISAPI
+ULONG
+DDKAPI
+NdisReadPciSlotInformation(
+ /*IN*/ NDIS_HANDLE NdisAdapterHandle,
+ /*IN*/ ULONG SlotNumber,
+ /*IN*/ ULONG Offset,
+ /*IN*/ PVOID Buffer,
+ /*IN*/ ULONG Length);
+
+NDISAPI
+ULONG
+DDKAPI
+NdisWritePciSlotInformation(
+ /*IN*/ NDIS_HANDLE NdisAdapterHandle,
+ /*IN*/ ULONG SlotNumber,
+ /*IN*/ ULONG Offset,
+ /*IN*/ PVOID Buffer,
+ /*IN*/ ULONG Length);
+
+
+
+/* String management routines */
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisAnsiStringToUnicodeString(
+ /*IN OUT*/ PNDIS_STRING DestinationString,
+ /*IN*/ PNDIS_ANSI_STRING SourceString);
+
+/*
+ * BOOLEAN
+ * NdisEqualString(
+ * IN PNDIS_STRING String1,
+ * IN PNDIS_STRING String2,
+ * IN BOOLEAN CaseInsensitive);
+ */
+#define NdisEqualString(_String1, _String2, _CaseInsensitive) \
+ RtlEqualUnicodeString(_String1, _String2, _CaseInsensitive)
+
+NDISAPI
+VOID
+DDKAPI
+NdisInitAnsiString(
+ /*IN OUT*/ PNDIS_ANSI_STRING DestinationString,
+ /*IN*/ PCSTR SourceString);
+
+NDISAPI
+VOID
+DDKAPI
+NdisInitUnicodeString(
+ /*IN OUT*/ PNDIS_STRING DestinationString,
+ /*IN*/ PCWSTR SourceString);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisUnicodeStringToAnsiString(
+ /*IN OUT*/ PNDIS_ANSI_STRING DestinationString,
+ /*IN*/ PNDIS_STRING SourceString);
+
+#define NdisFreeString(_s) NdisFreeMemory((_s).Buffer, (_s).MaximumLength, 0)
+#define NdisPrintString(_s) DbgPrint("%ls", (_s).Buffer)
+
+
+/* Spin lock reoutines */
+
+/*
+ * VOID
+ * NdisAllocateSpinLock(
+ * IN PNDIS_SPIN_LOCK SpinLock);
+ */
+#define NdisAllocateSpinLock(_SpinLock) \
+ KeInitializeSpinLock(&(_SpinLock)->SpinLock)
+
+/*
+ * VOID
+ * NdisFreeSpinLock(
+ * IN PNDIS_SPIN_LOCK SpinLock);
+ */
+#define NdisFreeSpinLock(_SpinLock)
+
+/*
+ * VOID
+ * NdisAcquireSpinLock(
+ * IN PNDIS_SPIN_LOCK SpinLock);
+ */
+#define NdisAcquireSpinLock(_SpinLock) \
+ KeAcquireSpinLock(&(_SpinLock)->SpinLock, &(_SpinLock)->OldIrql)
+
+/*
+ * VOID
+ * NdisReleaseSpinLock(
+ * IN PNDIS_SPIN_LOCK SpinLock);
+ */
+#define NdisReleaseSpinLock(_SpinLock) \
+ KeReleaseSpinLock(&(_SpinLock)->SpinLock, (_SpinLock)->OldIrql)
+
+/*
+ * VOID
+ * NdisDprAcquireSpinLock(
+ * IN PNDIS_SPIN_LOCK SpinLock);
+ */
+#define NdisDprAcquireSpinLock(_SpinLock) \
+{ \
+ KeAcquireSpinLockAtDpcLevel(&(_SpinLock)->SpinLock); \
+ (_SpinLock)->OldIrql = DISPATCH_LEVEL; \
+}
+
+/*
+ * VOID
+ * NdisDprReleaseSpinLock(
+ * IN PNDIS_SPIN_LOCK SpinLock);
+ */
+#define NdisDprReleaseSpinLock(_SpinLock) \
+ KeReleaseSpinLockFromDpcLevel(&(_SpinLock)->SpinLock)
+
+
+
+/* I/O routines */
+
+/*
+ * VOID
+ * NdisRawReadPortBufferUchar(
+ * IN ULONG Port,
+ * OUT PUCHAR Buffer,
+ * IN ULONG Length);
+ */
+#define NdisRawReadPortBufferUchar(Port, Buffer, Length) \
+ READ_PORT_BUFFER_UCHAR((PUCHAR)(Port), (PUCHAR)(Buffer), (Length))
+
+/*
+ * VOID
+ * NdisRawReadPortBufferUlong(
+ * IN ULONG Port,
+ * OUT PULONG Buffer,
+ * IN ULONG Length);
+ */
+#define NdisRawReadPortBufferUlong(Port, Buffer, Length) \
+ READ_PORT_BUFFER_ULONG((PULONG)(Port), (PULONG)(Buffer), (Length))
+
+/*
+ * VOID
+ * NdisRawReadPortBufferUshort(
+ * IN ULONG Port,
+ * OUT PUSHORT Buffer,
+ * IN ULONG Length);
+ */
+#define NdisRawReadPortBufferUshort(Port, Buffer, Length) \
+ READ_PORT_BUFFER_USHORT((PUSHORT)(Port), (PUSHORT)(Buffer), (Length))
+
+
+/*
+ * VOID
+ * NdisRawReadPortUchar(
+ * IN ULONG Port,
+ * OUT PUCHAR Data);
+ */
+#define NdisRawReadPortUchar(Port, Data) \
+ *(Data) = READ_PORT_UCHAR((PUCHAR)(Port))
+
+/*
+ * VOID
+ * NdisRawReadPortUlong(
+ * IN ULONG Port,
+ * OUT PULONG Data);
+ */
+#define NdisRawReadPortUlong(Port, Data) \
+ *(Data) = READ_PORT_ULONG((PULONG)(Port))
+
+/*
+ * VOID
+ * NdisRawReadPortUshort(
+ * IN ULONG Port,
+ * OUT PUSHORT Data);
+ */
+#define NdisRawReadPortUshort(Port, Data) \
+ *(Data) = READ_PORT_USHORT((PUSHORT)(Port))
+
+
+/*
+ * VOID
+ * NdisRawWritePortBufferUchar(
+ * IN ULONG Port,
+ * IN PUCHAR Buffer,
+ * IN ULONG Length);
+ */
+#define NdisRawWritePortBufferUchar(Port, Buffer, Length) \
+ WRITE_PORT_BUFFER_UCHAR((PUCHAR)(Port), (PUCHAR)(Buffer), (Length))
+
+/*
+ * VOID
+ * NdisRawWritePortBufferUlong(
+ * IN ULONG Port,
+ * IN PULONG Buffer,
+ * IN ULONG Length);
+ */
+#define NdisRawWritePortBufferUlong(Port, Buffer, Length) \
+ WRITE_PORT_BUFFER_ULONG((PULONG)(Port), (PULONG)(Buffer), (Length))
+
+/*
+ * VOID
+ * NdisRawWritePortBufferUshort(
+ * IN ULONG Port,
+ * IN PUSHORT Buffer,
+ * IN ULONG Length);
+ */
+#define NdisRawWritePortBufferUshort(Port, Buffer, Length) \
+ WRITE_PORT_BUFFER_USHORT((PUSHORT)(Port), (PUSHORT)(Buffer), (Length))
+
+
+/*
+ * VOID
+ * NdisRawWritePortUchar(
+ * IN ULONG Port,
+ * IN UCHAR Data);
+ */
+#define NdisRawWritePortUchar(Port, Data) \
+ WRITE_PORT_UCHAR((PUCHAR)(Port), (UCHAR)(Data))
+
+/*
+ * VOID
+ * NdisRawWritePortUlong(
+ * IN ULONG Port,
+ * IN ULONG Data);
+ */
+#define NdisRawWritePortUlong(Port, Data) \
+ WRITE_PORT_ULONG((PULONG)(Port), (ULONG)(Data))
+
+/*
+ * VOID
+ * NdisRawWritePortUshort(
+ * IN ULONG Port,
+ * IN USHORT Data);
+ */
+#define NdisRawWritePortUshort(Port, Data) \
+ WRITE_PORT_USHORT((PUSHORT)(Port), (USHORT)(Data))
+
+
+/*
+ * VOID
+ * NdisReadRegisterUchar(
+ * IN PUCHAR Register,
+ * OUT PUCHAR Data);
+ */
+#define NdisReadRegisterUchar(Register, Data) \
+ *(Data) = *(Register)
+
+/*
+ * VOID
+ * NdisReadRegisterUlong(
+ * IN PULONG Register,
+ * OUT PULONG Data);
+ */
+#define NdisReadRegisterUlong(Register, Data) \
+ *(Data) = *(Register)
+
+/*
+ * VOID
+ * NdisReadRegisterUshort(
+ * IN PUSHORT Register,
+ * OUT PUSHORT Data);
+ */
+#define NdisReadRegisterUshort(Register, Data) \
+ *(Data) = *(Register)
+
+/*
+ * VOID
+ * NdisReadRegisterUchar(
+ * IN PUCHAR Register,
+ * IN UCHAR Data);
+ */
+#define NdisWriteRegisterUchar(Register, Data) \
+ WRITE_REGISTER_UCHAR((Register), (Data))
+
+/*
+ * VOID
+ * NdisReadRegisterUlong(
+ * IN PULONG Register,
+ * IN ULONG Data);
+ */
+#define NdisWriteRegisterUlong(Register, Data) \
+ WRITE_REGISTER_ULONG((Register), (Data))
+
+/*
+ * VOID
+ * NdisReadRegisterUshort(
+ * IN PUSHORT Register,
+ * IN USHORT Data);
+ */
+#define NdisWriteRegisterUshort(Register, Data) \
+ WRITE_REGISTER_USHORT((Register), (Data))
+
+
+/* Linked lists */
+
+/*
+ * VOID
+ * NdisInitializeListHead(
+ * IN PLIST_ENTRY ListHead);
+ */
+#define NdisInitializeListHead(_ListHead) \
+ InitializeListHead(_ListHead)
+
+/*
+ * PLIST_ENTRY
+ * NdisInterlockedInsertHeadList(
+ * IN PLIST_ENTRY ListHead,
+ * IN PLIST_ENTRY ListEntry,
+ * IN PNDIS_SPIN_LOCK SpinLock);
+ */
+#define NdisInterlockedInsertHeadList(_ListHead, _ListEntry, _SpinLock) \
+ ExInterlockedInsertHeadList(_ListHead, _ListEntry, &(_SpinLock)->SpinLock)
+
+/*
+ * PLIST_ENTRY
+ * NdisInterlockedInsertTailList(
+ * IN PLIST_ENTRY ListHead,
+ * IN PLIST_ENTRY ListEntry,
+ * IN PNDIS_SPIN_LOCK SpinLock);
+ */
+#define NdisInterlockedInsertTailList(_ListHead, _ListEntry, _SpinLock) \
+ ExInterlockedInsertTailList(_ListHead, _ListEntry, &(_SpinLock)->SpinLock)
+
+/*
+ * PLIST_ENTRY
+ * NdisInterlockedRemoveHeadList(
+ * IN PLIST_ENTRY ListHead,
+ * IN PNDIS_SPIN_LOCK SpinLock);
+*/
+#define NdisInterlockedRemoveHeadList(_ListHead, _SpinLock) \
+ ExInterlockedRemoveHeadList(_ListHead, &(_SpinLock)->SpinLock)
+
+/*
+ * VOID
+ * NdisInitializeSListHead(
+ * IN PSLIST_HEADER SListHead);
+ */
+#define NdisInitializeSListHead(SListHead) ExInitializeSListHead(SListHead)
+
+/*
+ * USHORT NdisQueryDepthSList(
+ * IN PSLIST_HEADER SListHead);
+ */
+#define NdisQueryDepthSList(SListHead) ExQueryDepthSList(SListHead)
+
+
+
+/* Interlocked routines */
+
+/*
+ * LONG
+ * NdisInterlockedDecrement(
+ * IN PLONG Addend);
+ */
+#define NdisInterlockedDecrement(Addend) InterlockedDecrement(Addend)
+
+/*
+ * LONG
+ * NdisInterlockedIncrement(
+ * IN PLONG Addend);
+ */
+#define NdisInterlockedIncrement(Addend) InterlockedIncrement(Addend)
+
+/*
+ * VOID
+ * NdisInterlockedAddUlong(
+ * IN PULONG Addend,
+ * IN ULONG Increment,
+ * IN PNDIS_SPIN_LOCK SpinLock);
+ */
+#define NdisInterlockedAddUlong(_Addend, _Increment, _SpinLock) \
+ ExInterlockedAddUlong(_Addend, _Increment, &(_SpinLock)->SpinLock)
+
+
+
+/* Miscellaneous routines */
+
+NDISAPI
+VOID
+DDKAPI
+NdisCloseConfiguration(
+ /*IN*/ NDIS_HANDLE ConfigurationHandle);
+
+NDISAPI
+VOID
+DDKAPI
+NdisReadConfiguration(
+ /*OUT*/ PNDIS_STATUS Status,
+ /*OUT*/ PNDIS_CONFIGURATION_PARAMETER *ParameterValue,
+ /*IN*/ NDIS_HANDLE ConfigurationHandle,
+ /*IN*/ PNDIS_STRING Keyword,
+ /*IN*/ NDIS_PARAMETER_TYPE ParameterType);
+
+NDISAPI
+VOID
+DDKAPI
+NdisWriteConfiguration(
+ /*OUT*/ PNDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE WrapperConfigurationContext,
+ /*IN*/ PNDIS_STRING Keyword,
+ /*IN*/ PNDIS_CONFIGURATION_PARAMETER *ParameterValue);
+
+NDISAPI
+VOID
+DDKCDECLAPI
+NdisWriteErrorLogEntry(
+ /*IN*/ NDIS_HANDLE NdisAdapterHandle,
+ /*IN*/ NDIS_ERROR_CODE ErrorCode,
+ /*IN*/ ULONG NumberOfErrorValues,
+ /*IN*/ ...);
+
+/*
+ * VOID
+ * NdisStallExecution(
+ * IN UINT MicrosecondsToStall)
+ */
+#define NdisStallExecution KeStallExecutionProcessor
+
+/*
+ * VOID
+ * NdisGetCurrentSystemTime(
+ * IN PLARGE_INTEGER pSystemTime);
+ */
+#define NdisGetCurrentSystemTime KeQuerySystemTime
+
+NDISAPI
+VOID
+DDKAPI
+NdisGetCurrentProcessorCpuUsage(
+ /*OUT*/ PULONG pCpuUsage);
+
+
+
+/* NDIS helper macros */
+
+/*
+ * VOID
+ * NDIS_INIT_FUNCTION(FunctionName)
+ */
+#define NDIS_INIT_FUNCTION(FunctionName) \
+ alloc_text(init, FunctionName)
+
+/*
+ * VOID
+ * NDIS_PAGABLE_FUNCTION(FunctionName)
+ */
+#define NDIS_PAGEABLE_FUNCTION(FunctionName) \
+ alloc_text(page, FunctionName)
+
+#define NDIS_PAGABLE_FUNCTION NDIS_PAGEABLE_FUNCTION
+
+
+/* NDIS 4.0 extensions */
+
+NDISAPI
+VOID
+DDKAPI
+NdisMFreeSharedMemory(
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
+ /*IN*/ ULONG Length,
+ /*IN*/ BOOLEAN Cached,
+ /*IN*/ PVOID VirtualAddress,
+ /*IN*/ NDIS_PHYSICAL_ADDRESS PhysicalAddress);
+
+NDISAPI
+VOID
+DDKAPI
+NdisMWanIndicateReceive(
+ /*OUT*/ PNDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
+ /*IN*/ NDIS_HANDLE NdisLinkContext,
+ /*IN*/ PUCHAR PacketBuffer,
+ /*IN*/ UINT PacketSize);
+
+NDISAPI
+VOID
+DDKAPI
+NdisMWanIndicateReceiveComplete(
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle);
+
+NDISAPI
+VOID
+DDKAPI
+NdisMWanSendComplete(
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
+ /*IN*/ PNDIS_WAN_PACKET Packet,
+ /*IN*/ NDIS_STATUS Status);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisPciAssignResources(
+ /*IN*/ NDIS_HANDLE NdisMacHandle,
+ /*IN*/ NDIS_HANDLE NdisWrapperHandle,
+ /*IN*/ NDIS_HANDLE WrapperConfigurationContext,
+ /*IN*/ ULONG SlotNumber,
+ /*OUT*/ PNDIS_RESOURCE_LIST *AssignedResources);
+
+
+/* NDIS 5.0 extensions */
+
+NDISAPI
+VOID
+DDKAPI
+NdisAcquireReadWriteLock(
+ /*IN*/ PNDIS_RW_LOCK Lock,
+ /*IN*/ BOOLEAN fWrite,
+ /*IN*/ PLOCK_STATE LockState);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisAllocateMemoryWithTag(
+ /*OUT*/ PVOID *VirtualAddress,
+ /*IN*/ UINT Length,
+ /*IN*/ ULONG Tag);
+
+NDISAPI
+VOID
+DDKAPI
+NdisAllocatePacketPoolEx(
+ /*OUT*/ PNDIS_STATUS Status,
+ /*OUT*/ PNDIS_HANDLE PoolHandle,
+ /*IN*/ UINT NumberOfDescriptors,
+ /*IN*/ UINT NumberOfOverflowDescriptors,
+ /*IN*/ UINT ProtocolReservedLength);
+
+NDISAPI
+VOID
+DDKAPI
+NdisCompletePnPEvent(
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE NdisBindingHandle,
+ /*IN*/ PNET_PNP_EVENT NetPnPEvent);
+
+NDISAPI
+VOID
+DDKAPI
+NdisGetCurrentProcessorCounts(
+ /*OUT*/ PULONG pIdleCount,
+ /*OUT*/ PULONG pKernelAndUser,
+ /*OUT*/ PULONG pIndex);
+
+NDISAPI
+VOID
+DDKAPI
+NdisGetDriverHandle(
+ /*IN*/ PNDIS_HANDLE NdisBindingHandle,
+ /*OUT*/ PNDIS_HANDLE NdisDriverHandle);
+
+NDISAPI
+PNDIS_PACKET
+DDKAPI
+NdisGetReceivedPacket(
+ /*IN*/ PNDIS_HANDLE NdisBindingHandle,
+ /*IN*/ PNDIS_HANDLE MacContext);
+
+NDISAPI
+VOID
+DDKAPI
+NdisGetSystemUptime(
+ /*OUT*/ PULONG pSystemUpTime);
+
+NDISAPI
+VOID
+DDKAPI
+NdisInitializeReadWriteLock(
+ /*IN*/ PNDIS_RW_LOCK Lock);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisMDeregisterDevice(
+ /*IN*/ NDIS_HANDLE NdisDeviceHandle);
+
+NDISAPI
+VOID
+DDKAPI
+NdisMGetDeviceProperty(
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
+ /*IN OUT*/ PDEVICE_OBJECT *PhysicalDeviceObject /*OPTIONAL*/,
+ /*IN OUT*/ PDEVICE_OBJECT *FunctionalDeviceObject /*OPTIONAL*/,
+ /*IN OUT*/ PDEVICE_OBJECT *NextDeviceObject /*OPTIONAL*/,
+ /*IN OUT*/ PCM_RESOURCE_LIST *AllocatedResources /*OPTIONAL*/,
+ /*IN OUT*/ PCM_RESOURCE_LIST *AllocatedResourcesTranslated /*OPTIONAL*/);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisMInitializeScatterGatherDma(
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
+ /*IN*/ BOOLEAN Dma64BitAddresses,
+ /*IN*/ ULONG MaximumPhysicalMapping);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisMPromoteMiniport(
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisMQueryAdapterInstanceName(
+ /*OUT*/ PNDIS_STRING AdapterInstanceName,
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisMRegisterDevice(
+ /*IN*/ NDIS_HANDLE NdisWrapperHandle,
+ /*IN*/ PNDIS_STRING DeviceName,
+ /*IN*/ PNDIS_STRING SymbolicName,
+ /*IN*/ PDRIVER_DISPATCH MajorFunctions[],
+ /*OUT*/ PDEVICE_OBJECT *pDeviceObject,
+ /*OUT*/ NDIS_HANDLE *NdisDeviceHandle);
+
+NDISAPI
+VOID
+DDKAPI
+NdisMRegisterUnloadHandler(
+ /*IN*/ NDIS_HANDLE NdisWrapperHandle,
+ /*IN*/ PDRIVER_UNLOAD UnloadHandler);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisMRemoveMiniport(
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisMSetMiniportSecondary(
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
+ /*IN*/ NDIS_HANDLE PrimaryMiniportAdapterHandle);
+
+NDISAPI
+VOID
+DDKAPI
+NdisOpenConfigurationKeyByIndex(
+ /*OUT*/ PNDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE ConfigurationHandle,
+ /*IN*/ ULONG Index,
+ /*OUT*/ PNDIS_STRING KeyName,
+ /*OUT*/ PNDIS_HANDLE KeyHandle);
+
+NDISAPI
+VOID
+DDKAPI
+NdisOpenConfigurationKeyByName(
+ /*OUT*/ PNDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE ConfigurationHandle,
+ /*IN*/ PNDIS_STRING SubKeyName,
+ /*OUT*/ PNDIS_HANDLE SubKeyHandle);
+
+NDISAPI
+UINT
+DDKAPI
+NdisPacketPoolUsage(
+ /*IN*/ NDIS_HANDLE PoolHandle);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisQueryAdapterInstanceName(
+ /*OUT*/ PNDIS_STRING AdapterInstanceName,
+ /*IN*/ NDIS_HANDLE NdisBindingHandle);
+
+NDISAPI
+ULONG
+DDKAPI
+NdisReadPcmciaAttributeMemory(
+ /*IN*/ NDIS_HANDLE NdisAdapterHandle,
+ /*IN*/ ULONG Offset,
+ /*IN*/ PVOID Buffer,
+ /*IN*/ ULONG Length);
+
+NDISAPI
+VOID
+DDKAPI
+NdisReleaseReadWriteLock(
+ /*IN*/ PNDIS_RW_LOCK Lock,
+ /*IN*/ PLOCK_STATE LockState);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisWriteEventLogEntry(
+ /*IN*/ PVOID LogHandle,
+ /*IN*/ NDIS_STATUS EventCode,
+ /*IN*/ ULONG UniqueEventValue,
+ /*IN*/ USHORT NumStrings,
+ /*IN*/ PVOID StringsList /*OPTIONAL*/,
+ /*IN*/ ULONG DataSize,
+ /*IN*/ PVOID Data /*OPTIONAL*/);
+
+NDISAPI
+ULONG
+DDKAPI
+NdisWritePcmciaAttributeMemory(
+ /*IN*/ NDIS_HANDLE NdisAdapterHandle,
+ /*IN*/ ULONG Offset,
+ /*IN*/ PVOID Buffer,
+ /*IN*/ ULONG Length);
+
+
+/* Connectionless services */
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisClAddParty(
+ /*IN*/ NDIS_HANDLE NdisVcHandle,
+ /*IN*/ NDIS_HANDLE ProtocolPartyContext,
+ /*IN OUT*/ PCO_CALL_PARAMETERS CallParameters,
+ /*OUT*/ PNDIS_HANDLE NdisPartyHandle);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisClCloseAddressFamily(
+ /*IN*/ NDIS_HANDLE NdisAfHandle);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisClCloseCall(
+ /*IN*/ NDIS_HANDLE NdisVcHandle,
+ /*IN*/ NDIS_HANDLE NdisPartyHandle /*OPTIONAL*/,
+ /*IN*/ PVOID Buffer /*OPTIONAL*/,
+ /*IN*/ UINT Size);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisClDeregisterSap(
+ /*IN*/ NDIS_HANDLE NdisSapHandle);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisClDropParty(
+ /*IN*/ NDIS_HANDLE NdisPartyHandle,
+ /*IN*/ PVOID Buffer /*OPTIONAL*/,
+ /*IN*/ UINT Size);
+
+NDISAPI
+VOID
+DDKAPI
+NdisClIncomingCallComplete(
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE NdisVcHandle,
+ /*IN*/ PCO_CALL_PARAMETERS CallParameters);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisClMakeCall(
+ /*IN*/ NDIS_HANDLE NdisVcHandle,
+ /*IN OUT*/ PCO_CALL_PARAMETERS CallParameters,
+ /*IN*/ NDIS_HANDLE ProtocolPartyContext /*OPTIONAL*/,
+ /*OUT*/ PNDIS_HANDLE NdisPartyHandle /*OPTIONAL*/);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisClModifyCallQoS(
+ /*IN*/ NDIS_HANDLE NdisVcHandle,
+ /*IN*/ PCO_CALL_PARAMETERS CallParameters);
+
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisClOpenAddressFamily(
+ /*IN*/ NDIS_HANDLE NdisBindingHandle,
+ /*IN*/ PCO_ADDRESS_FAMILY AddressFamily,
+ /*IN*/ NDIS_HANDLE ProtocolAfContext,
+ /*IN*/ PNDIS_CLIENT_CHARACTERISTICS ClCharacteristics,
+ /*IN*/ UINT SizeOfClCharacteristics,
+ /*OUT*/ PNDIS_HANDLE NdisAfHandle);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisClRegisterSap(
+ /*IN*/ NDIS_HANDLE NdisAfHandle,
+ /*IN*/ NDIS_HANDLE ProtocolSapContext,
+ /*IN*/ PCO_SAP Sap,
+ /*OUT*/ PNDIS_HANDLE NdisSapHandle);
+
+
+/* Call Manager services */
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisCmActivateVc(
+ /*IN*/ NDIS_HANDLE NdisVcHandle,
+ /*IN OUT*/ PCO_CALL_PARAMETERS CallParameters);
+
+NDISAPI
+VOID
+DDKAPI
+NdisCmAddPartyComplete(
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE NdisPartyHandle,
+ /*IN*/ NDIS_HANDLE CallMgrPartyContext /*OPTIONAL*/,
+ /*IN*/ PCO_CALL_PARAMETERS CallParameters);
+
+NDISAPI
+VOID
+DDKAPI
+NdisCmCloseAddressFamilyComplete(
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE NdisAfHandle);
+
+NDISAPI
+VOID
+DDKAPI
+NdisCmCloseCallComplete(
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE NdisVcHandle,
+ /*IN*/ NDIS_HANDLE NdisPartyHandle /*OPTIONAL*/);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisCmDeactivateVc(
+ /*IN*/ NDIS_HANDLE NdisVcHandle);
+
+NDISAPI
+VOID
+DDKAPI
+NdisCmDeregisterSapComplete(
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE NdisSapHandle);
+
+NDISAPI
+VOID
+DDKAPI
+NdisCmDispatchCallConnected(
+ /*IN*/ NDIS_HANDLE NdisVcHandle);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisCmDispatchIncomingCall(
+ /*IN*/ NDIS_HANDLE NdisSapHandle,
+ /*IN*/ NDIS_HANDLE NdisVcHandle,
+ /*IN*/ PCO_CALL_PARAMETERS CallParameters);
+
+NDISAPI
+VOID
+DDKAPI
+NdisCmDispatchIncomingCallQoSChange(
+ /*IN*/ NDIS_HANDLE NdisVcHandle,
+ /*IN*/ PCO_CALL_PARAMETERS CallParameters);
+
+NDISAPI
+VOID
+DDKAPI
+NdisCmDispatchIncomingCloseCall(
+ /*IN*/ NDIS_STATUS CloseStatus,
+ /*IN*/ NDIS_HANDLE NdisVcHandle,
+ /*IN*/ PVOID Buffer /*OPTIONAL*/,
+ /*IN*/ UINT Size);
+
+NDISAPI
+VOID
+DDKAPI
+NdisCmDispatchIncomingDropParty(
+ /*IN*/ NDIS_STATUS DropStatus,
+ /*IN*/ NDIS_HANDLE NdisPartyHandle,
+ /*IN*/ PVOID Buffer /*OPTIONAL*/,
+ /*IN*/ UINT Size);
+
+NDISAPI
+VOID
+DDKAPI
+NdisCmDropPartyComplete(
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE NdisPartyHandle);
+
+NDISAPI
+VOID
+DDKAPI
+NdisCmMakeCallComplete(
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE NdisVcHandle,
+ /*IN*/ NDIS_HANDLE NdisPartyHandle /*OPTIONAL*/,
+ /*IN*/ NDIS_HANDLE CallMgrPartyContext /*OPTIONAL*/,
+ /*IN*/ PCO_CALL_PARAMETERS CallParameters);
+
+NDISAPI
+VOID
+DDKAPI
+NdisCmModifyCallQoSComplete(
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE NdisVcHandle,
+ /*IN*/ PCO_CALL_PARAMETERS CallParameters);
+
+NDISAPI
+VOID
+DDKAPI
+NdisCmOpenAddressFamilyComplete(
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE NdisAfHandle,
+ /*IN*/ NDIS_HANDLE CallMgrAfContext);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisCmRegisterAddressFamily(
+ /*IN*/ NDIS_HANDLE NdisBindingHandle,
+ /*IN*/ PCO_ADDRESS_FAMILY AddressFamily,
+ /*IN*/ PNDIS_CALL_MANAGER_CHARACTERISTICS CmCharacteristics,
+ /*IN*/ UINT SizeOfCmCharacteristics);
+
+NDISAPI
+VOID
+DDKAPI
+NdisCmRegisterSapComplete(
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE NdisSapHandle,
+ /*IN*/ NDIS_HANDLE CallMgrSapContext);
+
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisMCmActivateVc(
+ /*IN*/ NDIS_HANDLE NdisVcHandle,
+ /*IN*/ PCO_CALL_PARAMETERS CallParameters);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisMCmCreateVc(
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
+ /*IN*/ NDIS_HANDLE NdisAfHandle,
+ /*IN*/ NDIS_HANDLE MiniportVcContext,
+ /*OUT*/ PNDIS_HANDLE NdisVcHandle);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisMCmDeactivateVc(
+ /*IN*/ NDIS_HANDLE NdisVcHandle);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisMCmDeleteVc(
+ /*IN*/ NDIS_HANDLE NdisVcHandle);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisMCmRegisterAddressFamily(
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
+ /*IN*/ PCO_ADDRESS_FAMILY AddressFamily,
+ /*IN*/ PNDIS_CALL_MANAGER_CHARACTERISTICS CmCharacteristics,
+ /*IN*/ UINT SizeOfCmCharacteristics);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisMCmRequest(
+ /*IN*/ NDIS_HANDLE NdisAfHandle,
+ /*IN*/ NDIS_HANDLE NdisVcHandle /*OPTIONAL*/,
+ /*IN*/ NDIS_HANDLE NdisPartyHandle /*OPTIONAL*/,
+ /*IN OUT*/ PNDIS_REQUEST NdisRequest);
+
+
+/* Connection-oriented services */
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisCoCreateVc(
+ /*IN*/ NDIS_HANDLE NdisBindingHandle,
+ /*IN*/ NDIS_HANDLE NdisAfHandle /*OPTIONAL*/,
+ /*IN*/ NDIS_HANDLE ProtocolVcContext,
+ /*IN OUT*/ PNDIS_HANDLE NdisVcHandle);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisCoDeleteVc(
+ /*IN*/ NDIS_HANDLE NdisVcHandle);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisCoRequest(
+ /*IN*/ NDIS_HANDLE NdisBindingHandle,
+ /*IN*/ NDIS_HANDLE NdisAfHandle /*OPTIONAL*/,
+ /*IN*/ NDIS_HANDLE NdisVcHandle /*OPTIONAL*/,
+ /*IN*/ NDIS_HANDLE NdisPartyHandle /*OPTIONAL*/,
+ /*IN OUT*/ PNDIS_REQUEST NdisRequest);
+
+NDISAPI
+VOID
+DDKAPI
+NdisCoRequestComplete(
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE NdisAfHandle,
+ /*IN*/ NDIS_HANDLE NdisVcHandle /*OPTIONAL*/,
+ /*IN*/ NDIS_HANDLE NdisPartyHandle /*OPTIONAL*/,
+ /*IN*/ PNDIS_REQUEST NdisRequest);
+
+NDISAPI
+VOID
+DDKAPI
+NdisCoSendPackets(
+ /*IN*/ NDIS_HANDLE NdisVcHandle,
+ /*IN*/ PPNDIS_PACKET PacketArray,
+ /*IN*/ UINT NumberOfPackets);
+
+NDISAPI
+VOID
+DDKAPI
+NdisMCoActivateVcComplete(
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE NdisVcHandle,
+ /*IN*/ PCO_CALL_PARAMETERS CallParameters);
+
+NDISAPI
+VOID
+DDKAPI
+NdisMCoDeactivateVcComplete(
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE NdisVcHandle);
+
+NDISAPI
+VOID
+DDKAPI
+NdisMCoIndicateReceivePacket(
+ /*IN*/ NDIS_HANDLE NdisVcHandle,
+ /*IN*/ PPNDIS_PACKET PacketArray,
+ /*IN*/ UINT NumberOfPackets);
+
+NDISAPI
+VOID
+DDKAPI
+NdisMCoIndicateStatus(
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
+ /*IN*/ NDIS_HANDLE NdisVcHandle /*OPTIONAL*/,
+ /*IN*/ NDIS_STATUS GeneralStatus,
+ /*IN*/ PVOID StatusBuffer /*OPTIONAL*/,
+ /*IN*/ ULONG StatusBufferSize);
+
+NDISAPI
+VOID
+DDKAPI
+NdisMCoReceiveComplete(
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle);
+
+NDISAPI
+VOID
+DDKAPI
+NdisMCoRequestComplete(
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
+ /*IN*/ PNDIS_REQUEST Request);
+
+NDISAPI
+VOID
+DDKAPI
+NdisMCoSendComplete(
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE NdisVcHandle,
+ /*IN*/ PNDIS_PACKET Packet);
+
+
+/* NDIS 5.0 extensions for intermediate drivers */
+
+NDISAPI
+VOID
+DDKAPI
+NdisIMAssociateMiniport(
+ /*IN*/ NDIS_HANDLE DriverHandle,
+ /*IN*/ NDIS_HANDLE ProtocolHandle);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisIMCancelInitializeDeviceInstance(
+ /*IN*/ NDIS_HANDLE DriverHandle,
+ /*IN*/ PNDIS_STRING DeviceInstance);
+
+NDISAPI
+VOID
+DDKAPI
+NdisIMCopySendCompletePerPacketInfo(
+ /*IN*/ PNDIS_PACKET DstPacket,
+ /*IN*/ PNDIS_PACKET SrcPacket);
+
+NDISAPI
+VOID
+DDKAPI
+NdisIMCopySendPerPacketInfo(
+ /*IN*/ PNDIS_PACKET DstPacket,
+ /*IN*/ PNDIS_PACKET SrcPacket);
+
+NDISAPI
+VOID
+DDKAPI
+NdisIMDeregisterLayeredMiniport(
+ /*IN*/ NDIS_HANDLE DriverHandle);
+
+NDISAPI
+NDIS_HANDLE
+DDKAPI
+NdisIMGetBindingContext(
+ /*IN*/ NDIS_HANDLE NdisBindingHandle);
+
+NDISAPI
+NDIS_HANDLE
+DDKAPI
+NdisIMGetDeviceContext(
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisIMInitializeDeviceInstanceEx(
+ /*IN*/ NDIS_HANDLE DriverHandle,
+ /*IN*/ PNDIS_STRING DriverInstance,
+ /*IN*/ NDIS_HANDLE DeviceContext /*OPTIONAL*/);
+
+NDISAPI
+PSINGLE_LIST_ENTRY
+DDKAPI
+NdisInterlockedPopEntrySList(
+ /*IN*/ PSLIST_HEADER ListHead,
+ /*IN*/ PKSPIN_LOCK Lock);
+
+NDISAPI
+PSINGLE_LIST_ENTRY
+DDKAPI
+NdisInterlockedPushEntrySList(
+ /*IN*/ PSLIST_HEADER ListHead,
+ /*IN*/ PSINGLE_LIST_ENTRY ListEntry,
+ /*IN*/ PKSPIN_LOCK Lock);
+
+NDISAPI
+VOID
+DDKAPI
+NdisQueryBufferSafe(
+ /*IN*/ PNDIS_BUFFER Buffer,
+ /*OUT*/ PVOID *VirtualAddress /*OPTIONAL*/,
+ /*OUT*/ PUINT Length,
+ /*IN*/ UINT Priority);
+
+
+/* Prototypes for NDIS_MINIPORT_CHARACTERISTICS */
+
+typedef BOOLEAN DDKAPI
+(*W_CHECK_FOR_HANG_HANDLER)(
+ /*IN*/ NDIS_HANDLE MiniportAdapterContext);
+
+typedef VOID DDKAPI
+(*W_DISABLE_INTERRUPT_HANDLER)(
+ /*IN*/ NDIS_HANDLE MiniportAdapterContext);
+
+typedef VOID DDKAPI
+(*W_ENABLE_INTERRUPT_HANDLER)(
+ /*IN*/ NDIS_HANDLE MiniportAdapterContext);
+
+typedef VOID DDKAPI
+(*W_HALT_HANDLER)(
+ /*IN*/ NDIS_HANDLE MiniportAdapterContext);
+
+typedef VOID DDKAPI
+(*W_HANDLE_INTERRUPT_HANDLER)(
+ /*IN*/ NDIS_HANDLE MiniportAdapterContext);
+
+typedef NDIS_STATUS DDKAPI
+(*W_INITIALIZE_HANDLER)(
+ /*OUT*/ PNDIS_STATUS OpenErrorStatus,
+ /*OUT*/ PUINT SelectedMediumIndex,
+ /*IN*/ PNDIS_MEDIUM MediumArray,
+ /*IN*/ UINT MediumArraySize,
+ /*IN*/ NDIS_HANDLE MiniportAdapterContext,
+ /*IN*/ NDIS_HANDLE WrapperConfigurationContext);
+
+typedef VOID DDKAPI
+(*W_ISR_HANDLER)(
+ /*OUT*/ PBOOLEAN InterruptRecognized,
+ /*OUT*/ PBOOLEAN QueueMiniportHandleInterrupt,
+ /*IN*/ NDIS_HANDLE MiniportAdapterContext);
+
+typedef NDIS_STATUS DDKAPI
+(*W_QUERY_INFORMATION_HANDLER)(
+ /*IN*/ NDIS_HANDLE MiniportAdapterContext,
+ /*IN*/ NDIS_OID Oid,
+ /*IN*/ PVOID InformationBuffer,
+ /*IN*/ ULONG InformationBufferLength,
+ /*OUT*/ PULONG BytesWritten,
+ /*OUT*/ PULONG BytesNeeded);
+
+typedef NDIS_STATUS DDKAPI
+(*W_RECONFIGURE_HANDLER)(
+ /*OUT*/ PNDIS_STATUS OpenErrorStatus,
+ /*IN*/ NDIS_HANDLE MiniportAdapterContext,
+ /*IN*/ NDIS_HANDLE WrapperConfigurationContext);
+
+typedef NDIS_STATUS DDKAPI
+(*W_RESET_HANDLER)(
+ /*OUT*/ PBOOLEAN AddressingReset,
+ /*IN*/ NDIS_HANDLE MiniportAdapterContext);
+
+typedef NDIS_STATUS DDKAPI
+(*W_SEND_HANDLER)(
+ /*IN*/ NDIS_HANDLE MiniportAdapterContext,
+ /*IN*/ PNDIS_PACKET Packet,
+ /*IN*/ UINT Flags);
+
+typedef NDIS_STATUS DDKAPI
+(*WM_SEND_HANDLER)(
+ /*IN*/ NDIS_HANDLE MiniportAdapterContext,
+ /*IN*/ NDIS_HANDLE NdisLinkHandle,
+ /*IN*/ PNDIS_WAN_PACKET Packet);
+
+typedef NDIS_STATUS DDKAPI
+(*W_SET_INFORMATION_HANDLER)(
+ /*IN*/ NDIS_HANDLE MiniportAdapterContext,
+ /*IN*/ NDIS_OID Oid,
+ /*IN*/ PVOID InformationBuffer,
+ /*IN*/ ULONG InformationBufferLength,
+ /*OUT*/ PULONG BytesRead,
+ /*OUT*/ PULONG BytesNeeded);
+
+typedef NDIS_STATUS DDKAPI
+(*W_TRANSFER_DATA_HANDLER)(
+ /*OUT*/ PNDIS_PACKET Packet,
+ /*OUT*/ PUINT BytesTransferred,
+ /*IN*/ NDIS_HANDLE MiniportAdapterContext,
+ /*IN*/ NDIS_HANDLE MiniportReceiveContext,
+ /*IN*/ UINT ByteOffset,
+ /*IN*/ UINT BytesToTransfer);
+
+typedef NDIS_STATUS DDKAPI
+(*WM_TRANSFER_DATA_HANDLER)(
+ VOID);
+
+
+/* NDIS structures available only to miniport drivers */
+
+#define NDIS30_MINIPORT_CHARACTERISTICS_S \
+ UCHAR MajorNdisVersion; \
+ UCHAR MinorNdisVersion; \
+ UINT Reserved; \
+ W_CHECK_FOR_HANG_HANDLER CheckForHangHandler; \
+ W_DISABLE_INTERRUPT_HANDLER DisableInterruptHandler; \
+ W_ENABLE_INTERRUPT_HANDLER EnableInterruptHandler; \
+ W_HALT_HANDLER HaltHandler; \
+ W_HANDLE_INTERRUPT_HANDLER HandleInterruptHandler; \
+ W_INITIALIZE_HANDLER InitializeHandler; \
+ W_ISR_HANDLER ISRHandler; \
+ W_QUERY_INFORMATION_HANDLER QueryInformationHandler; \
+ W_RECONFIGURE_HANDLER ReconfigureHandler; \
+ W_RESET_HANDLER ResetHandler; \
+ _ANONYMOUS_UNION union { \
+ W_SEND_HANDLER SendHandler; \
+ WM_SEND_HANDLER WanSendHandler; \
+ } _UNION_NAME(u1); \
+ W_SET_INFORMATION_HANDLER SetInformationHandler; \
+ _ANONYMOUS_UNION union { \
+ W_TRANSFER_DATA_HANDLER TransferDataHandler; \
+ WM_TRANSFER_DATA_HANDLER WanTransferDataHandler; \
+ } _UNION_NAME(u2);
+
+typedef struct _NDIS30_MINIPORT_CHARACTERISTICS {
+ NDIS30_MINIPORT_CHARACTERISTICS_S
+} NDIS30_MINIPORT_CHARACTERISTICS, *PSNDIS30_MINIPORT_CHARACTERISTICS;
+
+
+/* Extensions for NDIS 4.0 miniports */
+
+typedef VOID DDKAPI
+(*W_SEND_PACKETS_HANDLER)(
+ /*IN*/ NDIS_HANDLE MiniportAdapterContext,
+ /*IN*/ PPNDIS_PACKET PacketArray,
+ /*IN*/ UINT NumberOfPackets);
+
+typedef VOID DDKAPI
+(*W_RETURN_PACKET_HANDLER)(
+ /*IN*/ NDIS_HANDLE MiniportAdapterContext,
+ /*IN*/ PNDIS_PACKET Packet);
+
+typedef VOID DDKAPI
+(*W_ALLOCATE_COMPLETE_HANDLER)(
+ /*IN*/ NDIS_HANDLE MiniportAdapterContext,
+ /*IN*/ PVOID VirtualAddress,
+ /*IN*/ PNDIS_PHYSICAL_ADDRESS PhysicalAddress,
+ /*IN*/ ULONG Length,
+ /*IN*/ PVOID Context);
+
+#ifdef __cplusplus
+
+#define NDIS40_MINIPORT_CHARACTERISTICS_S \
+ NDIS30_MINIPORT_CHARACTERISTICS Ndis30Chars; \
+ W_RETURN_PACKET_HANDLER ReturnPacketHandler; \
+ W_SEND_PACKETS_HANDLER SendPacketsHandler; \
+ W_ALLOCATE_COMPLETE_HANDLER AllocateCompleteHandler;
+
+#else /* !__cplusplus */
+
+#define NDIS40_MINIPORT_CHARACTERISTICS_S \
+ NDIS30_MINIPORT_CHARACTERISTICS_S \
+ W_RETURN_PACKET_HANDLER ReturnPacketHandler; \
+ W_SEND_PACKETS_HANDLER SendPacketsHandler; \
+ W_ALLOCATE_COMPLETE_HANDLER AllocateCompleteHandler;
+
+#endif /* !__cplusplus */
+
+typedef struct _NDIS40_MINIPORT_CHARACTERISTICS {
+ NDIS40_MINIPORT_CHARACTERISTICS_S
+} NDIS40_MINIPORT_CHARACTERISTICS, *PNDIS40_MINIPORT_CHARACTERISTICS;
+
+
+/* Extensions for NDIS 5.0 miniports */
+
+typedef NDIS_STATUS DDKAPI
+(*W_CO_CREATE_VC_HANDLER)(
+ /*IN*/ NDIS_HANDLE MiniportAdapterContext,
+ /*IN*/ NDIS_HANDLE NdisVcHandle,
+ /*OUT*/ PNDIS_HANDLE MiniportVcContext);
+
+typedef NDIS_STATUS DDKAPI
+(*W_CO_DELETE_VC_HANDLER)(
+ /*IN*/ NDIS_HANDLE MiniportVcContext);
+
+typedef NDIS_STATUS DDKAPI
+(*W_CO_ACTIVATE_VC_HANDLER)(
+ /*IN*/ NDIS_HANDLE MiniportVcContext,
+ /*IN OUT*/ PCO_CALL_PARAMETERS CallParameters);
+
+typedef NDIS_STATUS DDKAPI
+(*W_CO_DEACTIVATE_VC_HANDLER)(
+ /*IN*/ NDIS_HANDLE MiniportVcContext);
+
+typedef VOID DDKAPI
+(*W_CO_SEND_PACKETS_HANDLER)(
+ /*IN*/ NDIS_HANDLE MiniportVcContext,
+ /*IN*/ PPNDIS_PACKET PacketArray,
+ /*IN*/ UINT NumberOfPackets);
+
+typedef NDIS_STATUS DDKAPI
+(*W_CO_REQUEST_HANDLER)(
+ /*IN*/ NDIS_HANDLE MiniportAdapterContext,
+ /*IN*/ NDIS_HANDLE MiniportVcContext /*OPTIONAL*/,
+ /*IN OUT*/ PNDIS_REQUEST NdisRequest);
+
+#ifdef __cplusplus
+
+#define NDIS50_MINIPORT_CHARACTERISTICS_S \
+ NDIS40_MINIPORT_CHARACTERISTICS Ndis40Chars; \
+ W_CO_CREATE_VC_HANDLER CoCreateVcHandler; \
+ W_CO_DELETE_VC_HANDLER CoDeleteVcHandler; \
+ W_CO_ACTIVATE_VC_HANDLER CoActivateVcHandler; \
+ W_CO_DEACTIVATE_VC_HANDLER CoDeactivateVcHandler; \
+ W_CO_SEND_PACKETS_HANDLER CoSendPacketsHandler; \
+ W_CO_REQUEST_HANDLER CoRequestHandler;
+
+#else /* !__cplusplus */
+
+#define NDIS50_MINIPORT_CHARACTERISTICS_S \
+ NDIS40_MINIPORT_CHARACTERISTICS_S \
+ W_CO_CREATE_VC_HANDLER CoCreateVcHandler; \
+ W_CO_DELETE_VC_HANDLER CoDeleteVcHandler; \
+ W_CO_ACTIVATE_VC_HANDLER CoActivateVcHandler; \
+ W_CO_DEACTIVATE_VC_HANDLER CoDeactivateVcHandler; \
+ W_CO_SEND_PACKETS_HANDLER CoSendPacketsHandler; \
+ W_CO_REQUEST_HANDLER CoRequestHandler;
+
+#endif /* !__cplusplus */
+
+typedef struct _NDIS50_MINIPORT_CHARACTERISTICS {
+ NDIS50_MINIPORT_CHARACTERISTICS_S
+} NDIS50_MINIPORT_CHARACTERISTICS, *PSNDIS50_MINIPORT_CHARACTERISTICS;
+
+
+/* Extensions for NDIS 5.1 miniports */
+
+typedef VOID DDKAPI
+(*W_CANCEL_SEND_PACKETS_HANDLER)(
+ /*IN*/ NDIS_HANDLE MiniportAdapterContext,
+ /*IN*/ PVOID CancelId);
+
+
+#if defined(NDIS51)
+typedef struct _NDIS_MINIPORT_CHARACTERISTICS {
+ NDIS50_MINIPORT_CHARACTERISTICS_S
+} NDIS_MINIPORT_CHARACTERISTICS, *PNDIS_MINIPORT_CHARACTERISTICS;
+#elif defined(NDIS50)
+typedef struct _NDIS_MINIPORT_CHARACTERISTICS {
+ NDIS50_MINIPORT_CHARACTERISTICS_S
+} NDIS_MINIPORT_CHARACTERISTICS, *PNDIS_MINIPORT_CHARACTERISTICS;
+#elif defined(NDIS40)
+typedef struct _NDIS_MINIPORT_CHARACTERISTICS {
+ NDIS40_MINIPORT_CHARACTERISTICS_S
+} NDIS_MINIPORT_CHARACTERISTICS, *PNDIS_MINIPORT_CHARACTERISTICS;
+#elif defined(NDIS30)
+typedef struct _NDIS_MINIPORT_CHARACTERISTICS {
+ NDIS30_MINIPORT_CHARACTERISTICS_S
+} NDIS_MINIPORT_CHARACTERISTICS, *PNDIS_MINIPORT_CHARACTERISTICS;
+#endif /* NDIS30 */
+
+
+typedef NDIS_STATUS DDKAPI
+(*SEND_HANDLER)(
+ /*IN*/ NDIS_HANDLE MacBindingHandle,
+ /*IN*/ PNDIS_PACKET Packet);
+
+typedef NDIS_STATUS DDKAPI
+(*TRANSFER_DATA_HANDLER)(
+ /*IN*/ NDIS_HANDLE MacBindingHandle,
+ /*IN*/ NDIS_HANDLE MacReceiveContext,
+ /*IN*/ UINT ByteOffset,
+ /*IN*/ UINT BytesToTransfer,
+ /*OUT*/ PNDIS_PACKET Packet,
+ /*OUT*/ PUINT BytesTransferred);
+
+typedef NDIS_STATUS DDKAPI
+(*RESET_HANDLER)(
+ /*IN*/ NDIS_HANDLE MacBindingHandle);
+
+typedef NDIS_STATUS DDKAPI
+(*REQUEST_HANDLER)(
+ /*IN*/ NDIS_HANDLE MacBindingHandle,
+ /*IN*/ PNDIS_REQUEST NdisRequest);
+
+
+
+/* Structures available only to full MAC drivers */
+
+typedef BOOLEAN DDKAPI
+(*PNDIS_INTERRUPT_SERVICE)(
+ /*IN*/ PVOID InterruptContext);
+
+typedef VOID DDKAPI
+(*PNDIS_DEFERRED_PROCESSING)(
+ /*IN*/ PVOID SystemSpecific1,
+ /*IN*/ PVOID InterruptContext,
+ /*IN*/ PVOID SystemSpecific2,
+ /*IN*/ PVOID SystemSpecific3);
+
+
+
+typedef struct _NDIS_MINIPORT_BLOCK NDIS_MINIPORT_BLOCK, *PNDIS_MINIPORT_BLOCK;
+typedef struct _NDIS_PROTOCOL_BLOCK NDIS_PROTOCOL_BLOCK, *PNDIS_PROTOCOL_BLOCK;
+typedef struct _NDIS_OPEN_BLOCK NDIS_OPEN_BLOCK, *PNDIS_OPEN_BLOCK;
+typedef struct _NDIS_M_DRIVER_BLOCK NDIS_M_DRIVER_BLOCK, *PNDIS_M_DRIVER_BLOCK;
+typedef struct _NDIS_AF_LIST NDIS_AF_LIST, *PNDIS_AF_LIST;
+
+
+typedef struct _NDIS_MINIPORT_INTERRUPT {
+ PKINTERRUPT InterruptObject;
+ KSPIN_LOCK DpcCountLock;
+ PVOID MiniportIdField;
+ W_ISR_HANDLER MiniportIsr;
+ W_HANDLE_INTERRUPT_HANDLER MiniportDpc;
+ KDPC InterruptDpc;
+ PNDIS_MINIPORT_BLOCK Miniport;
+ UCHAR DpcCount;
+ BOOLEAN Filler1;
+ KEVENT DpcsCompletedEvent;
+ BOOLEAN SharedInterrupt;
+ BOOLEAN IsrRequested;
+} NDIS_MINIPORT_INTERRUPT, *PNDIS_MINIPORT_INTERRUPT;
+
+typedef struct _NDIS_MINIPORT_TIMER {
+ KTIMER Timer;
+ KDPC Dpc;
+ PNDIS_TIMER_FUNCTION MiniportTimerFunction;
+ PVOID MiniportTimerContext;
+ PNDIS_MINIPORT_BLOCK Miniport;
+ struct _NDIS_MINIPORT_TIMER *NextDeferredTimer;
+} NDIS_MINIPORT_TIMER, *PNDIS_MINIPORT_TIMER;
+
+typedef struct _NDIS_INTERRUPT {
+ PKINTERRUPT InterruptObject;
+ KSPIN_LOCK DpcCountLock;
+ PNDIS_INTERRUPT_SERVICE MacIsr;
+ PNDIS_DEFERRED_PROCESSING MacDpc;
+ KDPC InterruptDpc;
+ PVOID InterruptContext;
+ UCHAR DpcCount;
+ BOOLEAN Removing;
+ KEVENT DpcsCompletedEvent;
+} NDIS_INTERRUPT, *PNDIS_INTERRUPT;
+
+
+typedef struct _MAP_REGISTER_ENTRY {
+ PVOID MapRegister;
+ BOOLEAN WriteToDevice;
+} MAP_REGISTER_ENTRY, *PMAP_REGISTER_ENTRY;
+
+
+typedef enum _NDIS_WORK_ITEM_TYPE {
+ NdisWorkItemRequest,
+ NdisWorkItemSend,
+ NdisWorkItemReturnPackets,
+ NdisWorkItemResetRequested,
+ NdisWorkItemResetInProgress,
+ NdisWorkItemHalt,
+ NdisWorkItemSendLoopback,
+ NdisWorkItemMiniportCallback,
+ NdisMaxWorkItems
+} NDIS_WORK_ITEM_TYPE, *PNDIS_WORK_ITEM_TYPE;
+
+#define NUMBER_OF_WORK_ITEM_TYPES NdisMaxWorkItems
+#define NUMBER_OF_SINGLE_WORK_ITEMS 6
+
+typedef struct _NDIS_MINIPORT_WORK_ITEM {
+ SINGLE_LIST_ENTRY Link;
+ NDIS_WORK_ITEM_TYPE WorkItemType;
+ PVOID WorkItemContext;
+} NDIS_MINIPORT_WORK_ITEM, *PNDIS_MINIPORT_WORK_ITEM;
+
+
+typedef struct _NDIS_BIND_PATHS {
+ UINT Number;
+ NDIS_STRING Paths[1];
+} NDIS_BIND_PATHS, *PNDIS_BIND_PATHS;
+
+#define DECLARE_UNKNOWN_STRUCT(BaseName) \
+ typedef struct _##BaseName BaseName, *P##BaseName;
+
+#define DECLARE_UNKNOWN_PROTOTYPE(Name) \
+ typedef VOID (*(Name))(VOID);
+
+#define ETH_LENGTH_OF_ADDRESS 6
+
+DECLARE_UNKNOWN_STRUCT(ETH_BINDING_INFO)
+
+DECLARE_UNKNOWN_PROTOTYPE(ETH_ADDRESS_CHANGE)
+DECLARE_UNKNOWN_PROTOTYPE(ETH_FILTER_CHANGE)
+DECLARE_UNKNOWN_PROTOTYPE(ETH_DEFERRED_CLOSE)
+
+typedef struct _ETH_FILTER {
+ PNDIS_SPIN_LOCK Lock;
+ CHAR (*MCastAddressBuf)[ETH_LENGTH_OF_ADDRESS];
+ struct _NDIS_MINIPORT_BLOCK *Miniport;
+ UINT CombinedPacketFilter;
+ PETH_BINDING_INFO OpenList;
+ ETH_ADDRESS_CHANGE AddressChangeAction;
+ ETH_FILTER_CHANGE FilterChangeAction;
+ ETH_DEFERRED_CLOSE CloseAction;
+ UINT MaxMulticastAddresses;
+ UINT NumAddresses;
+ UCHAR AdapterAddress[ETH_LENGTH_OF_ADDRESS];
+ UINT OldCombinedPacketFilter;
+ CHAR (*OldMCastAddressBuf)[ETH_LENGTH_OF_ADDRESS];
+ UINT OldNumAddresses;
+ PETH_BINDING_INFO DirectedList;
+ PETH_BINDING_INFO BMList;
+ PETH_BINDING_INFO MCastSet;
+#if defined(_NDIS_)
+ UINT NumOpens;
+ PVOID BindListLock;
+#endif
+} ETH_FILTER, *PETH_FILTER;
+
+typedef VOID DDKAPI
+(*ETH_RCV_COMPLETE_HANDLER)(
+ /*IN*/ PETH_FILTER Filter);
+
+typedef VOID DDKAPI
+(*ETH_RCV_INDICATE_HANDLER)(
+ /*IN*/ PETH_FILTER Filter,
+ /*IN*/ NDIS_HANDLE MacReceiveContext,
+ /*IN*/ PCHAR Address,
+ /*IN*/ PVOID HeaderBuffer,
+ /*IN*/ UINT HeaderBufferSize,
+ /*IN*/ PVOID LookaheadBuffer,
+ /*IN*/ UINT LookaheadBufferSize,
+ /*IN*/ UINT PacketSize);
+
+typedef VOID DDKAPI
+(*FDDI_RCV_COMPLETE_HANDLER)(
+ /*IN*/ PFDDI_FILTER Filter);
+
+typedef VOID DDKAPI
+(*FDDI_RCV_INDICATE_HANDLER)(
+ /*IN*/ PFDDI_FILTER Filter,
+ /*IN*/ NDIS_HANDLE MacReceiveContext,
+ /*IN*/ PCHAR Address,
+ /*IN*/ UINT AddressLength,
+ /*IN*/ PVOID HeaderBuffer,
+ /*IN*/ UINT HeaderBufferSize,
+ /*IN*/ PVOID LookaheadBuffer,
+ /*IN*/ UINT LookaheadBufferSize,
+ /*IN*/ UINT PacketSize);
+
+typedef VOID DDKAPI
+(*FILTER_PACKET_INDICATION_HANDLER)(
+ /*IN*/ NDIS_HANDLE Miniport,
+ /*IN*/ PPNDIS_PACKET PacketArray,
+ /*IN*/ UINT NumberOfPackets);
+
+typedef VOID DDKAPI
+(*TR_RCV_COMPLETE_HANDLER)(
+ /*IN*/ PTR_FILTER Filter);
+
+typedef VOID DDKAPI
+(*TR_RCV_INDICATE_HANDLER)(
+ /*IN*/ PTR_FILTER Filter,
+ /*IN*/ NDIS_HANDLE MacReceiveContext,
+ /*IN*/ PVOID HeaderBuffer,
+ /*IN*/ UINT HeaderBufferSize,
+ /*IN*/ PVOID LookaheadBuffer,
+ /*IN*/ UINT LookaheadBufferSize,
+ /*IN*/ UINT PacketSize);
+
+typedef VOID DDKAPI
+(*WAN_RCV_COMPLETE_HANDLER)(
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
+ /*IN*/ NDIS_HANDLE NdisLinkContext);
+
+typedef VOID DDKAPI
+(*WAN_RCV_HANDLER)(
+ /*OUT*/ PNDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
+ /*IN*/ NDIS_HANDLE NdisLinkContext,
+ /*IN*/ PUCHAR Packet,
+ /*IN*/ ULONG PacketSize);
+
+typedef VOID DDKFASTAPI
+(*NDIS_M_DEQUEUE_WORK_ITEM)(
+ /*IN*/ PNDIS_MINIPORT_BLOCK Miniport,
+ /*IN*/ NDIS_WORK_ITEM_TYPE WorkItemType,
+ /*OUT*/ PVOID *WorkItemContext);
+
+typedef NDIS_STATUS DDKFASTAPI
+(*NDIS_M_QUEUE_NEW_WORK_ITEM)(
+ /*IN*/ PNDIS_MINIPORT_BLOCK Miniport,
+ /*IN*/ NDIS_WORK_ITEM_TYPE WorkItemType,
+ /*IN*/ PVOID WorkItemContext);
+
+typedef NDIS_STATUS DDKFASTAPI
+(*NDIS_M_QUEUE_WORK_ITEM)(
+ /*IN*/ PNDIS_MINIPORT_BLOCK Miniport,
+ /*IN*/ NDIS_WORK_ITEM_TYPE WorkItemType,
+ /*IN*/ PVOID WorkItemContext);
+
+typedef VOID DDKAPI
+(*NDIS_M_REQ_COMPLETE_HANDLER)(
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
+ /*IN*/ NDIS_STATUS Status);
+
+typedef VOID DDKAPI
+(*NDIS_M_RESET_COMPLETE_HANDLER)(
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ BOOLEAN AddressingReset);
+
+typedef VOID DDKAPI
+(*NDIS_M_SEND_COMPLETE_HANDLER)(
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
+ /*IN*/ PNDIS_PACKET Packet,
+ /*IN*/ NDIS_STATUS Status);
+
+typedef VOID DDKAPI
+(*NDIS_M_SEND_RESOURCES_HANDLER)(
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle);
+
+typedef BOOLEAN DDKFASTAPI
+(*NDIS_M_START_SENDS)(
+ /*IN*/ PNDIS_MINIPORT_BLOCK Miniport);
+
+typedef VOID DDKAPI
+(*NDIS_M_STATUS_HANDLER)(
+ /*IN*/ NDIS_HANDLE MiniportHandle,
+ /*IN*/ NDIS_STATUS GeneralStatus,
+ /*IN*/ PVOID StatusBuffer,
+ /*IN*/ UINT StatusBufferSize);
+
+typedef VOID DDKAPI
+(*NDIS_M_STS_COMPLETE_HANDLER)(
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle);
+
+typedef VOID DDKAPI
+(*NDIS_M_TD_COMPLETE_HANDLER)(
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
+ /*IN*/ PNDIS_PACKET Packet,
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ UINT BytesTransferred);
+
+typedef VOID (DDKAPI *NDIS_WM_SEND_COMPLETE_HANDLER)(
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
+ /*IN*/ PVOID Packet,
+ /*IN*/ NDIS_STATUS Status);
+
+
+#if ARCNET
+
+#define ARC_SEND_BUFFERS 8
+#define ARC_HEADER_SIZE 4
+
+typedef struct _NDIS_ARC_BUF {
+ NDIS_HANDLE ArcnetBufferPool;
+ PUCHAR ArcnetLookaheadBuffer;
+ UINT NumFree;
+ ARC_BUFFER_LIST ArcnetBuffers[ARC_SEND_BUFFERS];
+} NDIS_ARC_BUF, *PNDIS_ARC_BUF;
+
+#endif /* ARCNET */
+
+#define NDIS_MINIPORT_WORK_QUEUE_SIZE 10
+
+typedef struct _NDIS_LOG {
+ PNDIS_MINIPORT_BLOCK Miniport;
+ KSPIN_LOCK LogLock;
+ PIRP Irp;
+ UINT TotalSize;
+ UINT CurrentSize;
+ UINT InPtr;
+ UINT OutPtr;
+ UCHAR LogBuf[1];
+} NDIS_LOG, *PNDIS_LOG;
+
+typedef struct _FILTERDBS {
+ _ANONYMOUS_UNION union {
+ PETH_FILTER EthDB;
+ PNULL_FILTER NullDB;
+ } DUMMYUNIONNAME;
+ PTR_FILTER TrDB;
+ PFDDI_FILTER FddiDB;
+#if ARCNET
+ PARC_FILTER ArcDB;
+#else /* !ARCNET */
+ PVOID XXXDB;
+#endif /* !ARCNET */
+} FILTERDBS, *PFILTERDBS;
+
+
+struct _NDIS_MINIPORT_BLOCK {
+ PVOID Signature;
+ PNDIS_MINIPORT_BLOCK NextMiniport;
+ PNDIS_M_DRIVER_BLOCK DriverHandle;
+ NDIS_HANDLE MiniportAdapterContext;
+ UNICODE_STRING MiniportName;
+ PNDIS_BIND_PATHS BindPaths;
+ NDIS_HANDLE OpenQueue;
+ REFERENCE Ref;
+ NDIS_HANDLE DeviceContext;
+ UCHAR Padding1;
+ UCHAR LockAcquired;
+ UCHAR PmodeOpens;
+ UCHAR AssignedProcessor;
+ KSPIN_LOCK Lock;
+ PNDIS_REQUEST MediaRequest;
+ PNDIS_MINIPORT_INTERRUPT Interrupt;
+ ULONG Flags;
+ ULONG PnPFlags;
+ LIST_ENTRY PacketList;
+ PNDIS_PACKET FirstPendingPacket;
+ PNDIS_PACKET ReturnPacketsQueue;
+ ULONG RequestBuffer;
+ PVOID SetMCastBuffer;
+ PNDIS_MINIPORT_BLOCK PrimaryMiniport;
+ PVOID WrapperContext;
+ PVOID BusDataContext;
+ ULONG PnPCapabilities;
+ PCM_RESOURCE_LIST Resources;
+ NDIS_TIMER WakeUpDpcTimer;
+ UNICODE_STRING BaseName;
+ UNICODE_STRING SymbolicLinkName;
+ ULONG CheckForHangSeconds;
+ USHORT CFHangTicks;
+ USHORT CFHangCurrentTick;
+ NDIS_STATUS ResetStatus;
+ NDIS_HANDLE ResetOpen;
+ FILTERDBS FilterDbs;
+ FILTER_PACKET_INDICATION_HANDLER PacketIndicateHandler;
+ NDIS_M_SEND_COMPLETE_HANDLER SendCompleteHandler;
+ NDIS_M_SEND_RESOURCES_HANDLER SendResourcesHandler;
+ NDIS_M_RESET_COMPLETE_HANDLER ResetCompleteHandler;
+ NDIS_MEDIUM MediaType;
+ ULONG BusNumber;
+ NDIS_INTERFACE_TYPE BusType;
+ NDIS_INTERFACE_TYPE AdapterType;
+ PDEVICE_OBJECT DeviceObject;
+ PDEVICE_OBJECT PhysicalDeviceObject;
+ PDEVICE_OBJECT NextDeviceObject;
+ PMAP_REGISTER_ENTRY MapRegisters;
+ PNDIS_AF_LIST CallMgrAfList;
+ PVOID MiniportThread;
+ PVOID SetInfoBuf;
+ USHORT SetInfoBufLen;
+ USHORT MaxSendPackets;
+ NDIS_STATUS FakeStatus;
+ PVOID LockHandler;
+ PUNICODE_STRING pAdapterInstanceName;
+ PNDIS_MINIPORT_TIMER TimerQueue;
+ UINT MacOptions;
+ PNDIS_REQUEST PendingRequest;
+ UINT MaximumLongAddresses;
+ UINT MaximumShortAddresses;
+ UINT CurrentLookahead;
+ UINT MaximumLookahead;
+ W_HANDLE_INTERRUPT_HANDLER HandleInterruptHandler;
+ W_DISABLE_INTERRUPT_HANDLER DisableInterruptHandler;
+ W_ENABLE_INTERRUPT_HANDLER EnableInterruptHandler;
+ W_SEND_PACKETS_HANDLER SendPacketsHandler;
+ NDIS_M_START_SENDS DeferredSendHandler;
+ ETH_RCV_INDICATE_HANDLER EthRxIndicateHandler;
+ TR_RCV_INDICATE_HANDLER TrRxIndicateHandler;
+ FDDI_RCV_INDICATE_HANDLER FddiRxIndicateHandler;
+ ETH_RCV_COMPLETE_HANDLER EthRxCompleteHandler;
+ TR_RCV_COMPLETE_HANDLER TrRxCompleteHandler;
+ FDDI_RCV_COMPLETE_HANDLER FddiRxCompleteHandler;
+ NDIS_M_STATUS_HANDLER StatusHandler;
+ NDIS_M_STS_COMPLETE_HANDLER StatusCompleteHandler;
+ NDIS_M_TD_COMPLETE_HANDLER TDCompleteHandler;
+ NDIS_M_REQ_COMPLETE_HANDLER QueryCompleteHandler;
+ NDIS_M_REQ_COMPLETE_HANDLER SetCompleteHandler;
+ NDIS_WM_SEND_COMPLETE_HANDLER WanSendCompleteHandler;
+ WAN_RCV_HANDLER WanRcvHandler;
+ WAN_RCV_COMPLETE_HANDLER WanRcvCompleteHandler;
+#if defined(_NDIS_)
+ PNDIS_MINIPORT_BLOCK NextGlobalMiniport;
+ SINGLE_LIST_ENTRY WorkQueue[NUMBER_OF_WORK_ITEM_TYPES];
+ SINGLE_LIST_ENTRY SingleWorkItems[NUMBER_OF_SINGLE_WORK_ITEMS];
+ UCHAR SendFlags;
+ UCHAR TrResetRing;
+ UCHAR ArcnetAddress;
+ UCHAR XState;
+ _ANONYMOUS_UNION union {
+#if ARCNET
+ PNDIS_ARC_BUF ArcBuf;
+#endif
+ PVOID BusInterface;
+ } DUMMYUNIONNAME;
+ PNDIS_LOG Log;
+ ULONG SlotNumber;
+ PCM_RESOURCE_LIST AllocatedResources;
+ PCM_RESOURCE_LIST AllocatedResourcesTranslated;
+ SINGLE_LIST_ENTRY PatternList;
+ NDIS_PNP_CAPABILITIES PMCapabilities;
+ DEVICE_CAPABILITIES DeviceCaps;
+ ULONG WakeUpEnable;
+ DEVICE_POWER_STATE CurrentDevicePowerState;
+ PIRP pIrpWaitWake;
+ SYSTEM_POWER_STATE WaitWakeSystemState;
+ LARGE_INTEGER VcIndex;
+ KSPIN_LOCK VcCountLock;
+ LIST_ENTRY WmiEnabledVcs;
+ PNDIS_GUID pNdisGuidMap;
+ PNDIS_GUID pCustomGuidMap;
+ USHORT VcCount;
+ USHORT cNdisGuidMap;
+ USHORT cCustomGuidMap;
+ USHORT CurrentMapRegister;
+ PKEVENT AllocationEvent;
+ USHORT BaseMapRegistersNeeded;
+ USHORT SGMapRegistersNeeded;
+ ULONG MaximumPhysicalMapping;
+ NDIS_TIMER MediaDisconnectTimer;
+ USHORT MediaDisconnectTimeOut;
+ USHORT InstanceNumber;
+ NDIS_EVENT OpenReadyEvent;
+ NDIS_PNP_DEVICE_STATE PnPDeviceState;
+ NDIS_PNP_DEVICE_STATE OldPnPDeviceState;
+ PGET_SET_DEVICE_DATA SetBusData;
+ PGET_SET_DEVICE_DATA GetBusData;
+ KDPC DeferredDpc;
+#if 0
+ /* FIXME: */
+ NDIS_STATS NdisStats;
+#else
+ ULONG NdisStats;
+#endif
+ PNDIS_PACKET IndicatedPacket[MAXIMUM_PROCESSORS];
+ PKEVENT RemoveReadyEvent;
+ PKEVENT AllOpensClosedEvent;
+ PKEVENT AllRequestsCompletedEvent;
+ ULONG InitTimeMs;
+ NDIS_MINIPORT_WORK_ITEM WorkItemBuffer[NUMBER_OF_SINGLE_WORK_ITEMS];
+ PDMA_ADAPTER SystemAdapterObject;
+ ULONG DriverVerifyFlags;
+ POID_LIST OidList;
+ USHORT InternalResetCount;
+ USHORT MiniportResetCount;
+ USHORT MediaSenseConnectCount;
+ USHORT MediaSenseDisconnectCount;
+ PNDIS_PACKET *xPackets;
+ ULONG UserModeOpenReferences;
+ _ANONYMOUS_UNION union {
+ PVOID SavedSendHandler;
+ PVOID SavedWanSendHandler;
+ } DUMMYUNIONNAME2;
+ PVOID SavedSendPacketsHandler;
+ PVOID SavedCancelSendPacketsHandler;
+ W_SEND_PACKETS_HANDLER WSendPacketsHandler;
+ ULONG MiniportAttributes;
+ PDMA_ADAPTER SavedSystemAdapterObject;
+ USHORT NumOpens;
+ USHORT CFHangXTicks;
+ ULONG RequestCount;
+ ULONG IndicatedPacketsCount;
+ ULONG PhysicalMediumType;
+ PNDIS_REQUEST LastRequest;
+ LONG DmaAdapterRefCount;
+ PVOID FakeMac;
+ ULONG LockDbg;
+ ULONG LockDbgX;
+ PVOID LockThread;
+ ULONG InfoFlags;
+ KSPIN_LOCK TimerQueueLock;
+ PKEVENT ResetCompletedEvent;
+ PKEVENT QueuedBindingCompletedEvent;
+ PKEVENT DmaResourcesReleasedEvent;
+ FILTER_PACKET_INDICATION_HANDLER SavedPacketIndicateHandler;
+ ULONG RegisteredInterrupts;
+ PNPAGED_LOOKASIDE_LIST SGListLookasideList;
+ ULONG ScatterGatherListSize;
+#endif /* _NDIS_ */
+};
+
+
+/* Handler prototypes for NDIS_OPEN_BLOCK */
+
+typedef NDIS_STATUS (DDKAPI *WAN_SEND_HANDLER)(
+ /*IN*/ NDIS_HANDLE MacBindingHandle,
+ /*IN*/ NDIS_HANDLE LinkHandle,
+ /*IN*/ PVOID Packet);
+
+/* NDIS 4.0 extension */
+
+typedef VOID (DDKAPI *SEND_PACKETS_HANDLER)(
+ /*IN*/ NDIS_HANDLE MiniportAdapterContext,
+ /*IN*/ PPNDIS_PACKET PacketArray,
+ /*IN*/ UINT NumberOfPackets);
+
+
+typedef struct _NDIS_COMMON_OPEN_BLOCK {
+ PVOID MacHandle;
+ NDIS_HANDLE BindingHandle;
+ PNDIS_MINIPORT_BLOCK MiniportHandle;
+ PNDIS_PROTOCOL_BLOCK ProtocolHandle;
+ NDIS_HANDLE ProtocolBindingContext;
+ PNDIS_OPEN_BLOCK MiniportNextOpen;
+ PNDIS_OPEN_BLOCK ProtocolNextOpen;
+ NDIS_HANDLE MiniportAdapterContext;
+ BOOLEAN Reserved1;
+ BOOLEAN Reserved2;
+ BOOLEAN Reserved3;
+ BOOLEAN Reserved4;
+ PNDIS_STRING BindDeviceName;
+ KSPIN_LOCK Reserved5;
+ PNDIS_STRING RootDeviceName;
+ _ANONYMOUS_UNION union {
+ SEND_HANDLER SendHandler;
+ WAN_SEND_HANDLER WanSendHandler;
+ } DUMMYUNIONNAME;
+ TRANSFER_DATA_HANDLER TransferDataHandler;
+ SEND_COMPLETE_HANDLER SendCompleteHandler;
+ TRANSFER_DATA_COMPLETE_HANDLER TransferDataCompleteHandler;
+ RECEIVE_HANDLER ReceiveHandler;
+ RECEIVE_COMPLETE_HANDLER ReceiveCompleteHandler;
+ WAN_RECEIVE_HANDLER WanReceiveHandler;
+ REQUEST_COMPLETE_HANDLER RequestCompleteHandler;
+ RECEIVE_PACKET_HANDLER ReceivePacketHandler;
+ SEND_PACKETS_HANDLER SendPacketsHandler;
+ RESET_HANDLER ResetHandler;
+ REQUEST_HANDLER RequestHandler;
+ RESET_COMPLETE_HANDLER ResetCompleteHandler;
+ STATUS_HANDLER StatusHandler;
+ STATUS_COMPLETE_HANDLER StatusCompleteHandler;
+#if defined(_NDIS_)
+ ULONG Flags;
+ ULONG References;
+ KSPIN_LOCK SpinLock;
+ NDIS_HANDLE FilterHandle;
+ ULONG ProtocolOptions;
+ USHORT CurrentLookahead;
+ USHORT ConnectDampTicks;
+ USHORT DisconnectDampTicks;
+ W_SEND_HANDLER WSendHandler;
+ W_TRANSFER_DATA_HANDLER WTransferDataHandler;
+ W_SEND_PACKETS_HANDLER WSendPacketsHandler;
+ W_CANCEL_SEND_PACKETS_HANDLER CancelSendPacketsHandler;
+ ULONG WakeUpEnable;
+ PKEVENT CloseCompleteEvent;
+ QUEUED_CLOSE QC;
+ ULONG AfReferences;
+ PNDIS_OPEN_BLOCK NextGlobalOpen;
+#endif /* _NDIS_ */
+} NDIS_COMMON_OPEN_BLOCK;
+
+struct _NDIS_OPEN_BLOCK
+{
+ NDIS_COMMON_OPEN_BLOCK NdisCommonOpenBlock;
+#if defined(_NDIS_)
+ struct _NDIS_OPEN_CO
+ {
+ struct _NDIS_CO_AF_BLOCK * NextAf;
+ W_CO_CREATE_VC_HANDLER MiniportCoCreateVcHandler;
+ W_CO_REQUEST_HANDLER MiniportCoRequestHandler;
+ CO_CREATE_VC_HANDLER CoCreateVcHandler;
+ CO_DELETE_VC_HANDLER CoDeleteVcHandler;
+ PVOID CmActivateVcCompleteHandler;
+ PVOID CmDeactivateVcCompleteHandler;
+ PVOID CoRequestCompleteHandler;
+ LIST_ENTRY ActiveVcHead;
+ LIST_ENTRY InactiveVcHead;
+ LONG PendingAfNotifications;
+ PKEVENT AfNotifyCompleteEvent;
+ };
+#endif /* _NDIS_ */
+};
+
+
+
+/* Routines for NDIS miniport drivers */
+
+NDISAPI
+VOID
+DDKAPI
+NdisInitializeWrapper(
+ /*OUT*/ PNDIS_HANDLE NdisWrapperHandle,
+ /*IN*/ PVOID SystemSpecific1,
+ /*IN*/ PVOID SystemSpecific2,
+ /*IN*/ PVOID SystemSpecific3);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisMAllocateMapRegisters(
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
+ /*IN*/ UINT DmaChannel,
+ /*IN*/ BOOLEAN Dma32BitAddresses,
+ /*IN*/ ULONG PhysicalMapRegistersNeeded,
+ /*IN*/ ULONG MaximumPhysicalMapping);
+
+/*
+ * VOID
+ * NdisMArcIndicateReceive(
+ * IN NDIS_HANDLE MiniportAdapterHandle,
+ * IN PUCHAR HeaderBuffer,
+ * IN PUCHAR DataBuffer,
+ * IN UINT Length);
+ */
+#define NdisMArcIndicateReceive(MiniportAdapterHandle, \
+ HeaderBuffer, \
+ DataBuffer, \
+ Length) \
+{ \
+ ArcFilterDprIndicateReceive( \
+ (((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FilterDbs.ArcDB), \
+ (HeaderBuffer), \
+ (DataBuffer), \
+ (Length)); \
+}
+
+/*
+ * VOID
+ * NdisMArcIndicateReceiveComplete(
+ * IN NDIS_HANDLE MiniportAdapterHandle);
+ */
+#define NdisMArcIndicateReceiveComplete(MiniportAdapterHandle) \
+{ \
+ if (((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->EthDB) \
+ { \
+ NdisMEthIndicateReceiveComplete(_H); \
+ } \
+ \
+ ArcFilterDprIndicateReceiveComplete( \
+ ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->ArcDB); \
+}
+
+NDISAPI
+VOID
+DDKAPI
+NdisMCloseLog(
+ /*IN*/ NDIS_HANDLE LogHandle);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisMCreateLog(
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
+ /*IN*/ UINT Size,
+ /*OUT*/ PNDIS_HANDLE LogHandle);
+
+NDISAPI
+VOID
+DDKAPI
+NdisMDeregisterAdapterShutdownHandler(
+ /*IN*/ NDIS_HANDLE MiniportHandle);
+
+NDISAPI
+VOID
+DDKAPI
+NdisMDeregisterInterrupt(
+ /*IN*/ PNDIS_MINIPORT_INTERRUPT Interrupt);
+
+NDISAPI
+VOID
+DDKAPI
+NdisMDeregisterIoPortRange(
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
+ /*IN*/ UINT InitialPort,
+ /*IN*/ UINT NumberOfPorts,
+ /*IN*/ PVOID PortOffset);
+
+/*
+ * VOID
+ * NdisMEthIndicateReceive(
+ * IN NDIS_HANDLE MiniportAdapterHandle,
+ * IN NDIS_HANDLE MiniportReceiveContext,
+ * IN PVOID HeaderBuffer,
+ * IN UINT HeaderBufferSize,
+ * IN PVOID LookaheadBuffer,
+ * IN UINT LookaheadBufferSize,
+ * IN UINT PacketSize);
+ */
+#define NdisMEthIndicateReceive(MiniportAdapterHandle, \
+ MiniportReceiveContext, \
+ HeaderBuffer, \
+ HeaderBufferSize, \
+ LookaheadBuffer, \
+ LookaheadBufferSize, \
+ PacketSize) \
+{ \
+ (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->EthRxIndicateHandler)( \
+ (((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FilterDbs.EthDB), \
+ (MiniportReceiveContext), \
+ (HeaderBuffer), \
+ (HeaderBuffer), \
+ (HeaderBufferSize), \
+ (LookaheadBuffer), \
+ (LookaheadBufferSize), \
+ (PacketSize)); \
+}
+
+/*
+ * VOID
+ * NdisMEthIndicateReceiveComplete(
+ * IN NDIS_HANDLE MiniportAdapterHandle);
+ */
+#define NdisMEthIndicateReceiveComplete(MiniportAdapterHandle) \
+{ \
+ (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->EthRxCompleteHandler)( \
+ ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->FilterDbs.EthDB); \
+}
+
+/*
+ * VOID
+ * NdisMFddiIndicateReceive(
+ * IN NDIS_HANDLE MiniportAdapterHandle,
+ * IN NDIS_HANDLE MiniportReceiveContext,
+ * IN PVOID HeaderBuffer,
+ * IN UINT HeaderBufferSize,
+ * IN PVOID LookaheadBuffer,
+ * IN UINT LookaheadBufferSize,
+ * IN UINT PacketSize);
+ */
+#define NdisMFddiIndicateReceive(MiniportAdapterHandle, \
+ MiniportReceiveContext, \
+ HeaderBuffer, \
+ HeaderBufferSize, \
+ LookaheadBuffer, \
+ LookaheadBufferSize, \
+ PacketSize) \
+{ \
+ (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FddiRxIndicateHandler)( \
+ (((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FilterDbs.FddiDB), \
+ (MiniportReceiveContext), \
+ (PUCHAR)(HeaderBuffer) + 1, \
+ (((*(PUCHAR*)(HeaderBuffer)) & 0x40) ? \
+ FDDI_LENGTH_OF_LONG_ADDRESS : \
+ FDDI_LENGTH_OF_SHORT_ADDRESS), \
+ (HeaderBuffer), \
+ (HeaderBufferSize), \
+ (LookaheadBuffer), \
+ (LookaheadBufferSize), \
+ (PacketSize)); \
+}
+
+
+
+/*
+ * VOID
+ * NdisMFddiIndicateReceiveComplete(
+ * IN NDIS_HANDLE MiniportAdapterHandle);
+ */
+#define NdisMFddiIndicateReceiveComplete(MiniportAdapterHandle) \
+{ \
+ (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FddiRxCompleteHandler)( \
+ ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->FilterDbs.FddiDB); \
+}
+
+NDISAPI
+VOID
+DDKAPI
+NdisMFlushLog(
+ /*IN*/ NDIS_HANDLE LogHandle);
+
+NDISAPI
+VOID
+DDKAPI
+NdisMFreeMapRegisters(
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle);
+
+/*
+ * VOID
+ * NdisMIndicateStatus(
+ * IN NDIS_HANDLE MiniportAdapterHandle,
+ * IN NDIS_STATUS GeneralStatus,
+ * IN PVOID StatusBuffer,
+ * IN UINT StatusBufferSize);
+ */
+
+#define NdisMIndicateStatus(MiniportAdapterHandle, \
+ GeneralStatus, StatusBuffer, StatusBufferSize) \
+ (*((PNDIS_MINIPORT_BLOCK)(_M))->StatusHandler)( \
+ MiniportAdapterHandle, GeneralStatus, StatusBuffer, StatusBufferSize)
+
+/*
+ * VOID
+ * NdisMIndicateStatusComplete(
+ * IN NDIS_HANDLE MiniportAdapterHandle);
+ */
+#define NdisMIndicateStatusComplete(MiniportAdapterHandle) \
+ (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->StatusCompleteHandler)( \
+ MiniportAdapterHandle)
+
+/*
+ * VOID
+ * NdisMInitializeWrapper(
+ * OUT PNDIS_HANDLE NdisWrapperHandle,
+ * IN PVOID SystemSpecific1,
+ * IN PVOID SystemSpecific2,
+ * IN PVOID SystemSpecific3);
+ */
+#define NdisMInitializeWrapper(NdisWrapperHandle, \
+ SystemSpecific1, \
+ SystemSpecific2, \
+ SystemSpecific3) \
+ NdisInitializeWrapper((NdisWrapperHandle), \
+ (SystemSpecific1), \
+ (SystemSpecific2), \
+ (SystemSpecific3))
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisMMapIoSpace(
+ /*OUT*/ PVOID *VirtualAddress,
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
+ /*IN*/ NDIS_PHYSICAL_ADDRESS PhysicalAddress,
+ /*IN*/ UINT Length);
+
+/*
+ * VOID
+ * NdisMQueryInformationComplete(
+ * IN NDIS_HANDLE MiniportAdapterHandle,
+ * IN NDIS_STATUS Status);
+ */
+#define NdisMQueryInformationComplete(MiniportAdapterHandle, Status) \
+ (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->QueryCompleteHandler)(MiniportAdapterHandle, Status)
+
+NDISAPI
+VOID
+DDKAPI
+NdisMRegisterAdapterShutdownHandler(
+ /*IN*/ NDIS_HANDLE MiniportHandle,
+ /*IN*/ PVOID ShutdownContext,
+ /*IN*/ ADAPTER_SHUTDOWN_HANDLER ShutdownHandler);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisMRegisterInterrupt(
+ /*OUT*/ PNDIS_MINIPORT_INTERRUPT Interrupt,
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
+ /*IN*/ UINT InterruptVector,
+ /*IN*/ UINT InterruptLevel,
+ /*IN*/ BOOLEAN RequestIsr,
+ /*IN*/ BOOLEAN SharedInterrupt,
+ /*IN*/ NDIS_INTERRUPT_MODE InterruptMode);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisMRegisterIoPortRange(
+ /*OUT*/ PVOID *PortOffset,
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
+ /*IN*/ UINT InitialPort,
+ /*IN*/ UINT NumberOfPorts);
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisMRegisterMiniport(
+ /*IN*/ NDIS_HANDLE NdisWrapperHandle,
+ /*IN*/ PNDIS_MINIPORT_CHARACTERISTICS MiniportCharacteristics,
+ /*IN*/ UINT CharacteristicsLength);
+
+
+#if !defined(_NDIS_)
+
+/*
+ * VOID
+ * NdisMResetComplete(
+ * IN NDIS_HANDLE MiniportAdapterHandle,
+ * IN NDIS_STATUS Status,
+ * IN BOOLEAN AddressingReset);
+ */
+#define NdisMResetComplete(MiniportAdapterHandle, \
+ Status, \
+ AddressingReset) \
+{ \
+ (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->ResetCompleteHandler)( \
+ MiniportAdapterHandle, Status, AddressingReset); \
+}
+
+/*
+ * VOID
+ * NdisMSendComplete(
+ * IN NDIS_HANDLE MiniportAdapterHandle,
+ * IN PNDIS_PACKET Packet,
+ * IN NDIS_STATUS Status);
+ */
+#define NdisMSendComplete(MiniportAdapterHandle, \
+ Packet, \
+ Status) \
+{ \
+ (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->SendCompleteHandler)( \
+ MiniportAdapterHandle, Packet, Status); \
+}
+
+/*
+ * VOID
+ * NdisMSendResourcesAvailable(
+ * IN NDIS_HANDLE MiniportAdapterHandle);
+ */
+#define NdisMSendResourcesAvailable(MiniportAdapterHandle) \
+{ \
+ (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->SendResourcesHandler)( \
+ MiniportAdapterHandle); \
+}
+
+/*
+ * VOID
+ * NdisMTransferDataComplete(
+ * IN NDIS_HANDLE MiniportAdapterHandle,
+ * IN PNDIS_PACKET Packet,
+ * IN NDIS_STATUS Status,
+ * IN UINT BytesTransferred);
+ */
+#define NdisMTransferDataComplete(MiniportAdapterHandle, \
+ Packet, \
+ Status, \
+ BytesTransferred) \
+{ \
+ (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->TDCompleteHandler)( \
+ MiniportAdapterHandle, Packet, Status, BytesTransferred) \
+}
+
+#endif /* !_NDIS_ */
+
+
+/*
+ * VOID
+ * NdisMSetAttributes(
+ * IN NDIS_HANDLE MiniportAdapterHandle,
+ * IN NDIS_HANDLE MiniportAdapterContext,
+ * IN BOOLEAN BusMaster,
+ * IN NDIS_INTERFACE_TYPE AdapterType);
+ */
+#define NdisMSetAttributes(MiniportAdapterHandle, \
+ MiniportAdapterContext, \
+ BusMaster, \
+ AdapterType) \
+ NdisMSetAttributesEx(MiniportAdapterHandle, \
+ MiniportAdapterContext, \
+ 0, \
+ (BusMaster) ? NDIS_ATTRIBUTE_BUS_MASTER : 0, \
+ AdapterType)
+
+NDISAPI
+VOID
+DDKAPI
+NdisMSetAttributesEx(
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
+ /*IN*/ NDIS_HANDLE MiniportAdapterContext,
+ /*IN*/ UINT CheckForHangTimeInSeconds /*OPTIONAL*/,
+ /*IN*/ ULONG AttributeFlags,
+ /*IN*/ NDIS_INTERFACE_TYPE AdapterType);
+
+/*
+ * VOID
+ * NdisMSetInformationComplete(
+ * IN NDIS_HANDLE MiniportAdapterHandle,
+ * IN NDIS_STATUS Status);
+ */
+#define NdisMSetInformationComplete(MiniportAdapterHandle, \
+ Status) \
+ (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->SetCompleteHandler)( \
+ MiniportAdapterHandle, Status)
+
+NDISAPI
+VOID
+DDKAPI
+NdisMSleep(
+ /*IN*/ ULONG MicrosecondsToSleep);
+
+NDISAPI
+BOOLEAN
+DDKAPI
+NdisMSynchronizeWithInterrupt(
+ /*IN*/ PNDIS_MINIPORT_INTERRUPT Interrupt,
+ /*IN*/ PVOID SynchronizeFunction,
+ /*IN*/ PVOID SynchronizeContext);
+
+/*
+ * VOID
+ * NdisMTrIndicateReceive(
+ * IN NDIS_HANDLE MiniportAdapterHandle,
+ * IN NDIS_HANDLE MiniportReceiveContext,
+ * IN PVOID HeaderBuffer,
+ * IN UINT HeaderBufferSize,
+ * IN PVOID LookaheadBuffer,
+ * IN UINT LookaheadBufferSize,
+ * IN UINT PacketSize);
+ */
+#define NdisMTrIndicateReceive(MiniportAdapterHandle, \
+ MiniportReceiveContext, \
+ HeaderBuffer, \
+ HeaderBufferSize, \
+ LookaheadBuffer, \
+ LookaheadBufferSize, \
+ PacketSize) \
+{ \
+ (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->TrRxIndicateHandler)( \
+ (((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FilterDbs.TrDB), \
+ (MiniportReceiveContext), \
+ (HeaderBuffer), \
+ (HeaderBuffer), \
+ (HeaderBufferSize), \
+ (LookaheadBuffer), \
+ (LookaheadBufferSize), \
+ (PacketSize)); \
+}
+
+/*
+ * VOID
+ * NdisMTrIndicateReceiveComplete(
+ * IN NDIS_HANDLE MiniportAdapterHandle);
+ */
+#define NdisMTrIndicateReceiveComplete(MiniportAdapterHandle) \
+{ \
+ (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->TrRxCompleteHandler)( \
+ ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->FilterDbs.TrDB); \
+}
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisMWriteLogData(
+ /*IN*/ NDIS_HANDLE LogHandle,
+ /*IN*/ PVOID LogBuffer,
+ /*IN*/ UINT LogBufferSize);
+
+NDISAPI
+VOID
+DDKAPI
+NdisMQueryAdapterResources(
+ /*OUT*/ PNDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE WrapperConfigurationContext,
+ /*OUT*/ PNDIS_RESOURCE_LIST ResourceList,
+ /*IN OUT*/ PUINT BufferSize);
+
+NDISAPI
+VOID
+DDKAPI
+NdisTerminateWrapper(
+ /*IN*/ NDIS_HANDLE NdisWrapperHandle,
+ /*IN*/ PVOID SystemSpecific);
+
+NDISAPI
+VOID
+DDKAPI
+NdisMUnmapIoSpace(
+ /*IN*/ NDIS_HANDLE MiniportAdapterHandle,
+ /*IN*/ PVOID VirtualAddress,
+ /*IN*/ UINT Length);
+
+
+
+/* NDIS intermediate miniport structures */
+
+typedef VOID (DDKAPI *W_MINIPORT_CALLBACK)(
+ /*IN*/ NDIS_HANDLE MiniportAdapterContext,
+ /*IN*/ PVOID CallbackContext);
+
+
+
+/* Routines for intermediate miniport drivers */
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisIMDeInitializeDeviceInstance(
+ /*IN*/ NDIS_HANDLE NdisMiniportHandle);
+
+/*
+ * NDIS_STATUS
+ * NdisIMInitializeDeviceInstance(
+ * IN NDIS_HANDLE DriverHandle,
+ * IN PNDIS_STRING DeviceInstance);
+ */
+#define NdisIMInitializeDeviceInstance(DriverHandle, DeviceInstance) \
+ NdisIMInitializeDeviceInstanceEx(DriverHandle, DeviceInstance, NULL)
+
+NDISAPI
+NDIS_STATUS
+DDKAPI
+NdisIMRegisterLayeredMiniport(
+ /*IN*/ NDIS_HANDLE NdisWrapperHandle,
+ /*IN*/ PNDIS_MINIPORT_CHARACTERISTICS MiniportCharacteristics,
+ /*IN*/ UINT CharacteristicsLength,
+ /*OUT*/ PNDIS_HANDLE DriverHandle);
+
+
+/* Functions obsoleted by NDIS 5.0 */
+
+NDISAPI
+VOID
+DDKAPI
+NdisFreeDmaChannel(
+ /*IN*/ PNDIS_HANDLE NdisDmaHandle);
+
+NDISAPI
+VOID
+DDKAPI
+NdisSetupDmaTransfer(
+ /*OUT*/ PNDIS_STATUS Status,
+ /*IN*/ PNDIS_HANDLE NdisDmaHandle,
+ /*IN*/ PNDIS_BUFFER Buffer,
+ /*IN*/ ULONG Offset,
+ /*IN*/ ULONG Length,
+ /*IN*/ BOOLEAN WriteToDevice);
+
+NDISAPI
+NTSTATUS
+DDKAPI
+NdisUpcaseUnicodeString(
+ /*OUT*/ PUNICODE_STRING DestinationString,
+ /*IN*/ PUNICODE_STRING SourceString);
+
+
+/* Routines for NDIS protocol drivers */
+
+NDISAPI
+VOID
+DDKAPI
+NdisRequest(
+ /*OUT*/ PNDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE NdisBindingHandle,
+ /*IN*/ PNDIS_REQUEST NdisRequest);
+
+NDISAPI
+VOID
+DDKAPI
+NdisReset(
+ /*OUT*/ PNDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE NdisBindingHandle);
+
+NDISAPI
+VOID
+DDKAPI
+NdisSend(
+ /*OUT*/ PNDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE NdisBindingHandle,
+ /*IN*/ PNDIS_PACKET Packet);
+
+NDISAPI
+VOID
+DDKAPI
+NdisSendPackets(
+ /*IN*/ NDIS_HANDLE NdisBindingHandle,
+ /*IN*/ PPNDIS_PACKET PacketArray,
+ /*IN*/ UINT NumberOfPackets);
+
+NDISAPI
+VOID
+DDKAPI
+NdisTransferData(
+ /*OUT*/ PNDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE NdisBindingHandle,
+ /*IN*/ NDIS_HANDLE MacReceiveContext,
+ /*IN*/ UINT ByteOffset,
+ /*IN*/ UINT BytesToTransfer,
+ /*IN OUT*/ PNDIS_PACKET Packet,
+ /*OUT*/ PUINT BytesTransferred);
+
+NDISAPI
+VOID
+DDKAPI
+NdisCloseAdapter(
+ /*OUT*/ PNDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE NdisBindingHandle);
+
+NDISAPI
+VOID
+DDKAPI
+NdisCompleteBindAdapter(
+ /*IN*/ NDIS_HANDLE BindAdapterContext,
+ /*IN*/ NDIS_STATUS Status,
+ /*IN*/ NDIS_STATUS OpenStatus);
+
+NDISAPI
+VOID
+DDKAPI
+NdisCompleteUnbindAdapter(
+ /*IN*/ NDIS_HANDLE UnbindAdapterContext,
+ /*IN*/ NDIS_STATUS Status);
+
+NDISAPI
+VOID
+DDKAPI
+NdisDeregisterProtocol(
+ /*OUT*/ PNDIS_STATUS Status,
+ /*IN*/ NDIS_HANDLE NdisProtocolHandle);
+
+NDISAPI
+VOID
+DDKAPI
+NdisOpenAdapter(
+ /*OUT*/ PNDIS_STATUS Status,
+ /*OUT*/ PNDIS_STATUS OpenErrorStatus,
+ /*OUT*/ PNDIS_HANDLE NdisBindingHandle,
+ /*OUT*/ PUINT SelectedMediumIndex,
+ /*IN*/ PNDIS_MEDIUM MediumArray,
+ /*IN*/ UINT MediumArraySize,
+ /*IN*/ NDIS_HANDLE NdisProtocolHandle,
+ /*IN*/ NDIS_HANDLE ProtocolBindingContext,
+ /*IN*/ PNDIS_STRING AdapterName,
+ /*IN*/ UINT OpenOptions,
+ /*IN*/ PSTRING AddressingInformation);
+
+NDISAPI
+VOID
+DDKAPI
+NdisOpenProtocolConfiguration(
+ /*OUT*/ PNDIS_STATUS Status,
+ /*OUT*/ PNDIS_HANDLE ConfigurationHandle,
+ /*IN*/ PNDIS_STRING ProtocolSection);
+
+NDISAPI
+VOID
+DDKAPI
+NdisRegisterProtocol(
+ /*OUT*/ PNDIS_STATUS Status,
+ /*OUT*/ PNDIS_HANDLE NdisProtocolHandle,
+ /*IN*/ PNDIS_PROTOCOL_CHARACTERISTICS ProtocolCharacteristics,
+ /*IN*/ UINT CharacteristicsLength);
+
+/* Obsoleted in Windows XP */
+
+/* Prototypes for NDIS_MAC_CHARACTERISTICS */
+
+typedef NDIS_STATUS (*OPEN_ADAPTER_HANDLER)(
+ /*OUT*/ PNDIS_STATUS OpenErrorStatus,
+ /*OUT*/ NDIS_HANDLE *MacBindingHandle,
+ /*OUT*/ PUINT SelectedMediumIndex,
+ /*IN*/ PNDIS_MEDIUM MediumArray,
+ /*IN*/ UINT MediumArraySize,
+ /*IN*/ NDIS_HANDLE NdisBindingContext,
+ /*IN*/ NDIS_HANDLE MacAdapterContext,
+ /*IN*/ UINT OpenOptions,
+ /*IN*/ PSTRING AddressingInformation /*OPTIONAL*/);
+
+typedef NDIS_STATUS (DDKAPI *CLOSE_ADAPTER_HANDLER)(
+ /*IN*/ NDIS_HANDLE MacBindingHandle);
+
+typedef NDIS_STATUS (DDKAPI *WAN_TRANSFER_DATA_HANDLER)(
+ VOID);
+
+typedef NDIS_STATUS (DDKAPI *QUERY_GLOBAL_STATISTICS_HANDLER)(
+ /*IN*/ NDIS_HANDLE MacAdapterContext,
+ /*IN*/ PNDIS_REQUEST NdisRequest);
+
+typedef VOID (DDKAPI *UNLOAD_MAC_HANDLER)(
+ /*IN*/ NDIS_HANDLE MacMacContext);
+
+typedef NDIS_STATUS (DDKAPI *ADD_ADAPTER_HANDLER)(
+ /*IN*/ NDIS_HANDLE MacMacContext,
+ /*IN*/ NDIS_HANDLE WrapperConfigurationContext,
+ /*IN*/ PNDIS_STRING AdapterName);
+
+typedef VOID (*REMOVE_ADAPTER_HANDLER)(
+ /*IN*/ NDIS_HANDLE MacAdapterContext);
+
+typedef struct _NDIS_MAC_CHARACTERISTICS {
+ UCHAR MajorNdisVersion;
+ UCHAR MinorNdisVersion;
+ UINT Reserved;
+ OPEN_ADAPTER_HANDLER OpenAdapterHandler;
+ CLOSE_ADAPTER_HANDLER CloseAdapterHandler;
+ SEND_HANDLER SendHandler;
+ TRANSFER_DATA_HANDLER TransferDataHandler;
+ RESET_HANDLER ResetHandler;
+ REQUEST_HANDLER RequestHandler;
+ QUERY_GLOBAL_STATISTICS_HANDLER QueryGlobalStatisticsHandler;
+ UNLOAD_MAC_HANDLER UnloadMacHandler;
+ ADD_ADAPTER_HANDLER AddAdapterHandler;
+ REMOVE_ADAPTER_HANDLER RemoveAdapterHandler;
+ NDIS_STRING Name;
+} NDIS_MAC_CHARACTERISTICS, *PNDIS_MAC_CHARACTERISTICS;
+
+typedef NDIS_MAC_CHARACTERISTICS NDIS_WAN_MAC_CHARACTERISTICS;
+typedef NDIS_WAN_MAC_CHARACTERISTICS *PNDIS_WAN_MAC_CHARACTERISTICS;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __NDIS_H */
+
+/* EOF */