This repository has been archived on 2024-12-16. You can view files and clone it, but cannot push or open issues or pull requests.
CodeBlocksPortable/WATCOM/h/nt/ddk/ndis.h

5335 lines
238 KiB
C

/*
* ndis.h Network Driver Interface Specification (NDIS) functions
*
* =========================================================================
*
* Open Watcom Project
*
* Copyright (c) 2004-2010 The Open Watcom Contributors. All Rights Reserved.
*
* This file is automatically generated. Do not edit directly.
*
* =========================================================================
*/
#ifndef _NDIS_
#define _NDIS_
#ifndef _ENABLE_AUTODEPEND
#pragma read_only_file;
#endif
#include <ntddk.h>
#include <ntstatus.h>
#include <netevent.h>
#include <xfilter.h>
#include <qos.h>
#ifdef __cplusplus
extern "C" {
#endif
#ifndef NDIS_WRAPPER
#ifdef NDIS_MINIPORT_DRIVER
#if defined( NDIS620_MINIPORT )
#define NDIS_MINIPORT_MAJOR_VERSION 6
#define NDIS_MINIPORT_MINOR_VERSION 20
#elif defined( NDIS61_MINIPORT )
#define NDIS_MINIPORT_MAJOR_VERSION 6
#define NDIS_MINIPORT_MINOR_VERSION 1
#elif defined( NDIS60_MINIPORT )
#define NDIS_MINIPORT_MAJOR_VERSION 6
#define NDIS_MINIPORT_MINOR_VERSION 0
#elif defined( NDIS51_MINIPORT )
#define NDIS_MINIPORT_MAJOR_VERSION 5
#define NDIS_MINIPORT_MINOR_VERSION 1
#elif defined( NDIS50_MINIPORT )
#define NDIS_MINIPORT_MAJOR_VERSION 5
#define NDIS_MINIPORT_MINOR_VERSION 0
#endif
#endif
#if defined( NDIS620 )
#define NDIS_PROTOCOL_MAJOR_VERSION 6
#define NDIS_PROTOCOL_MINOR_VERSION 20
#define NDIS_FILTER_MAJOR_VERSION 6
#define NDIS_FILTER_MINOR_VERSION 20
#elif defined( NDIS61 )
#define NDIS_PROTOCOL_MAJOR_VERSION 6
#define NDIS_PROTOCOL_MINOR_VERSION 1
#define NDIS_FILTER_MAJOR_VERSION 6
#define NDIS_FILTER_MINOR_VERSION 1
#elif defined( NDIS60 )
#define NDIS_PROTOCOL_MAJOR_VERSION 6
#define NDIS_PROTOCOL_MINOR_VERSION 0
#define NDIS_FILTER_MAJOR_VERSION 6
#define NDIS_FILTER_MINOR_VERSION 0
#elif defined( NDIS51 )
#define NDIS_PROTOCOL_MAJOR_VERSION 5
#define NDIS_PROTOCOL_MINOR_VERSION 1
#elif defined( NDIS50 )
#define NDIS_PROTOCOL_MAJOR_VERSION 5
#define NDIS_PROTOCOL_MINOR_VERSION 0
#elif defined( NDIS40 )
#define NDIS_PROTOCOL_MAJOR_VERSION 4
#define NDIS_PROTOCOL_MINOR_VERSION 0
#else
#define NDIS40
#define NDIS_PROTOCOL_MAJOR_VERSION 4
#define NDIS_PROTOCOL_MINOR_VERSION 0
#endif
#endif
#ifndef NDIS_LEGACY_MINIPORT
#if defined( NDIS_MINIPORT_DRIVER ) && ((NDIS_MINIPORT_MAJOR_VERSION < 6) || \
NDIS_WRAPPER)
#define NDIS_LEGACY_MINIPORT 1
#else
#define NDIS_LEGACY_MINIPORT 0
#endif
#endif
#ifndef NDIS_LEGACY_PROTOCOL
#if defined( NDIS_PROTOCOL_MAJOR_VERSION ) && ((NDIS_PROTOCOL_MAJOR_VERSION < 6) || \
NDIS_WRAPPER)
#define NDIS_LEGACY_PROTOCOL 1
#else
#define NDIS_LEGACY_PROTOCOL 0
#endif
#endif
#ifndef NDIS_LEGACY_DRIVER
#if NDIS_LEGACY_MINIPORT || NDIS_LEGACY_PROTOCOL || NDIS_WRAPPER
#define NDIS_LEGACY_DRIVER 1
#else
#define NDIS_LEGACY_DRIVER 0
#endif
#endif
#ifndef NDIS_SUPPORT_NDIS6
#if (defined( NDIS_MINIPORT_MAJOR_VERSION ) && \
(NDIS_MINIPORT_MAJOR_VERSION >= 6)) || defined( NDIS60 ) || NDIS_WRAPPER
#define NDIS_SUPPORT_NDIS6 1
#else
#define NDIS_SUPPORT_NDIS6 0
#endif
#endif
#ifndef NDIS_SUPPORT_NDIS61
#if (defined( NDIS_MINIPORT_MAJOR_VERSION ) && \
(NDIS_MINIPORT_MAJOR_VERSION >= 6) && defined( NDIS_MINIPORT_MINOR_VERSION ) && \
(NDIS_MINIPORT_MINOR_VERSION >= 1)) || defined( NDIS61 ) || NDIS_WRAPPER
#define NDIS_SUPPORT_NDIS61 1
#else
#define NDIS_SUPPORT_NDIS61 0
#endif
#endif
#ifndef NDIS_SUPPORT_NDIS620
#if (defined( NDIS_MINIPORT_MAJOR_VERSION ) && \
(NDIS_MINIPORT_MAJOR_VERSION >= 6) && defined( NDIS_MINIPORT_MINOR_VERSION ) && \
(NDIS_MINIPORT_MINOR_VERSION >= 20)) || defined( NDIS620 ) || NDIS_WRAPPER
#define NDIS_SUPPORT_NDIS620 1
#else
#define NDIS_SUPPORT_NDIS620 0
#endif
#endif
#if NDIS_SUPPORT_NDIS620
#undef NDIS_SUPPORT_NDIS61
#define NDIS_SUPPORT_NDIS61 1
#endif
#if NDIS_SUPPORT_NDIS61
#undef NDIS_SUPPORT_NDIS6
#define NDIS_SUPPORT_NDIS6 1
#endif
#if defined( NDIS61_MINIPORT ) || defined( NDIS60_MINIPORT ) || defined( NDIS61 ) || \
defined( NDIS60 ) || defined( NDIS_WRAPPER ) || defined( NDIS_LEGACY_DRIVER )
#define NDIS_SUPPORT_60_COMPATIBLE_API 1
#else
#define NDIS_SUPPORT_60_COMPATIBLE_API 0
#endif
/* Macro to specify NDIS functions */
#ifdef NDIS_WRAPPER
#define EXPORT
#else
#define EXPORT DECLSPEC_IMPORT
#endif
/* Primitive data types */
typedef signed int INT;
typedef signed int *PINT;
typedef unsigned int UINT;
typedef unsigned int *PUINT;
typedef UNICODE_STRING NDIS_STRING;
typedef UNICODE_STRING *PNDIS_STRING;
typedef PVOID NDIS_HANDLE;
typedef PVOID *PNDIS_HANDLE;
typedef int NDIS_STATUS;
typedef int *PNDIS_STATUS;
typedef CM_MCA_POS_DATA NDIS_MCA_POS_DATA;
typedef CM_MCA_POS_DATA *PNDIS_MCA_POS_DATA;
typedef CM_EISA_SLOT_INFORMATION NDIS_EISA_SLOT_INFORMATION;
typedef CM_EISA_SLOT_INFORMATION *PNDIS_EISA_SLOT_INFORMATION;
typedef CM_EISA_FUNCTION_INFORMATION NDIS_EISA_FUNCTION_INFORMATION;
typedef CM_EISA_FUNCTION_INFORMATION *PNDIS_EISA_FUNCTION_INFORMATION;
typedef KINTERRUPT_MODE NDIS_INTERRUPT_MODE;
typedef KINTERRUPT_MODE *PNDIS_INTERRUPT_MODE;
typedef CM_PARTIAL_RESOURCE_LIST NDIS_RESOURCE_LIST;
typedef CM_PARTIAL_RESOURCE_LIST *PNDIS_RESOURCE_LIST;
typedef MDL NDIS_BUFFER;
typedef MDL *PNDIS_BUFFER;
typedef ULONG NDIS_AF;
typedef ULONG *PNDIS_AF;
typedef PHYSICAL_ADDRESS NDIS_PHYSICAL_ADDRESS;
typedef PHYSICAL_ADDRESS *PNDIS_PHYSICAL_ADDRESS;
typedef UCHAR NDIS_DMA_SIZE;
#if NDIS_LEGACY_DRIVER
typedef NDIS_HANDLE PNDIS_PACKET_POOL;
typedef UINT IEEE8021PPRIORITY;
#endif
#if !NDIS_LEGACY_DRIVER
typedef struct _NDIS_CALL_MANAGER_CHARACTERISTICS *PNDIS_CALL_MANAGER_CHARACTERISTICS;
#endif
#if NDIS_SUPPORT_NDIS6
typedef USHORT NET_FRAME_TYPE;
typedef USHORT *PNET_FRAME_TYPE;
typedef KMUTEX NDIS_MUTEX;
typedef KMUTEX *PNDIS_MUTEX;
#endif
#if NDIS_SUPPORT_NDIS61
typedef ULONG IPSEC_OFFLOAD_V2_SPI_TYPE;
#endif
/* NDIS error code data type */
#define NDIS_ERROR_CODE ULONG
#include <ntddndis.h>
#if NDIS_SUPPORT_NDIS6
#include <windot11.h>
#endif
/* Macro to make NDIS string constants */
#define NDIS_STRING_CONST( x ) { sizeof( L##x ) - 2, sizeof( L##x ), L##x }
/* Macro to make NDIS physical addresses */
#define NDIS_PHYSICAL_ADDRESS_CONST( p1, p2 ) { (ULONG)(p1), (LONG)(p2) }
/* NDIS interrupt modes */
#define NdisInterruptLatched Latched
#define NdisInterruptLevelSensitive LevelSensitive
/* NDIS packet flags */
#if NDIS_LEGACY_DRIVER
#define NDIS_FLAGS_PROTOCOL_ID_MASK 0x0000000FL
#define NDIS_FLAGS_MULTICAST_PACKET 0x00000010L
#define NDIS_FLAGS_DONT_LOOPBACK 0x00000080L
#define NDIS_FLAGS_IS_LOOPBACK_PACKET 0x00000100L
#define NDIS_FLAGS_LOOPBACK_ONLY 0x00000200L
#define NDIS_FLAGS_DOUBLE_BUFFERED 0x00000800L
#define NDIS_FLAGS_SENT_AT_DPC 0x00001000L
#define NDIS_FLAGS_USES_SG_BUFFER_LIST 0x00002000L
#define NDIS_FLAGS_USES_ORIGINAL_PACKET 0x00004000L
#define NDIS_FLAGS_PADDED 0x00010000L
#define NDIS_FLAGS_XLATE_AT_TOP 0x00020000L
#endif
/* NDIS reserved packet flags */
#if NDIS_LEGACY_DRIVER
#define fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO 0x40
#define fPACKET_ALLOCATED_BY_NDIS 0x80
#endif
/* NDIS address families */
#define CO_ADDRESS_FAMILY_Q2931 0x00000001L
#define CO_ADDRESS_FAMILY_PSCHED 0x00000002L
#define CO_ADDRESS_FAMILY_L2TP 0x00000003L
#define CO_ADDRESS_FAMILY_IRDA 0x00000004L
#define CO_ADDRESS_FAMILY_1394 0x00000005L
#define CO_ADDRESS_FAMILY_PPP 0x00000006L
#define CO_ADDRESS_FAMILY_INFINIBAND 0x00000007L
#define CO_ADDRESS_FAMILY_TAPI 0x00000800L
#define CO_ADDRESS_FAMILY_TAPI_PROXY 0x00000801L
#define CO_ADDRESS_FAMILY_PROXY 0x80000000L
/* NDIS memory types */
#define NDIS_MEMORY_CONTIGUOUS 0x00000001L
#define NDIS_MEMORY_NONCACHED 0x00000002L
/* NDIS open flags */
#define NDIS_OPEN_RECEIVE_NOT_REENTRANT 0x00000001L
/* NDIS status codes */
#define NDIS_STATUS_ONLINE 0x40010003L
#define NDIS_STATUS_RESET_START 0x40010004L
#define NDIS_STATUS_RESET_END 0x40010005L
#define NDIS_STATUS_RING_STATUS 0x40010006L
#define NDIS_STATUS_CLOSED 0x40010007L
#define NDIS_STATUS_WAN_LINE_UP 0x40010008L
#define NDIS_STATUS_WAN_LINE_DOWN 0x40010009L
#define NDIS_STATUS_WAN_FRAGMENT 0x4001000AL
#define NDIS_STATUS_MEDIA_CONNECT 0x4001000BL
#define NDIS_STATUS_MEDIA_DISCONNECT 0x4001000CL
#define NDIS_STATUS_HARDWARE_LINE_UP 0x4001000DL
#define NDIS_STATUS_HARDWARE_LINE_DOWN 0x4001000EL
#define NDIS_STATUS_INTERFACE_UP 0x4001000FL
#define NDIS_STATUS_INTERFACE_DOWN 0x40010010L
#define NDIS_STATUS_MEDIA_BUSY 0x40010011L
#define NDIS_STATUS_MEDIA_SPECIFIC_INDICATION 0x40010012L
#define NDIS_STATUS_WW_INDICATION \
NDIS_STATUS_MEDIA_SPECIFIC_INDICATION
#define NDIS_STATUS_LINK_SPEED_CHANGE 0x40010013L
#define NDIS_STATUS_WAN_GET_STATS 0x40010014L
#define NDIS_STATUS_WAN_CO_FRAGMENT 0x40010015L
#define NDIS_STATUS_WAN_CO_LINKPARAMS 0x40010016L
#define NDIS_STATUS_WAN_CO_MTULINKPARAMS 0x40010025L
#if NDIS_SUPPORT_NDIS6
#define NDIS_STATUS_LINK_STATE 0x40010017L
#define NDIS_STATUS_NETWORK_CHANGE 0x40010018L
#define NDIS_STATUS_MEDIA_SPECIFIC_INDICATION_EX 0x40010019L
#define NDIS_STATUS_PORT_STATE 0x40010022L
#define NDIS_STATUS_OPER_STATUS 0x40010023L
#define NDIS_STATUS_PACKET_FILTER 0x40010024L
#define NDIS_STATUS_IP_OPER_STATUS 0x40010026L
#define NDIS_STATUS_OFFLOAD_PAUSE 0x40020001L
#define NDIS_STATUS_UPLOAD_ALL 0x40020002L
#define NDIS_STATUS_OFFLOAD_RESUME 0x40020003L
#define NDIS_STATUS_OFFLOAD_PARTIAL_SUCCESS 0x40020004L
#define NDIS_STATUS_OFFLOAD_STATE_INVALID 0x40020005L
#define NDIS_STATUS_TASK_OFFLOAD_CURRENT_CONFIG 0x40020006L
#define NDIS_STATUS_TASK_OFFLOAD_HARDWARE_CAPABILITIES 0x40020007L
#define NDIS_STATUS_OFFLOAD_ENCAPSULATION_CHANGE 0x40020008L
#define NDIS_STATUS_TCP_CONNECTION_OFFLOAD_HARDWARE_CAPABILITIES 0x4002000BL
#define NDIS_STATUS_DOT11_SCAN_CONFIRM 0x40030000L
#define NDIS_STATUS_DOT11_MPDU_MAX_LENGTH_CHANGED 0x40030001L
#define NDIS_STATUS_DOT11_ASSOCIATION_START 0x40030002L
#define NDIS_STATUS_DOT11_ASSOCIATION_COMPLETION 0x40030003L
#define NDIS_STATUS_DOT11_CONNECTION_START 0x40030004L
#define NDIS_STATUS_DOT11_CONNECTION_COMPLETION 0x40030005L
#define NDIS_STATUS_DOT11_ROAMING_START 0x40030006L
#define NDIS_STATUS_DOT11_ROAMING_COMPLETION 0x40030007L
#define NDIS_STATUS_DOT11_DISASSOCIATION 0x40030008L
#define NDIS_STATUS_DOT11_TKIPMIC_FAILURE 0x40030009L
#define NDIS_STATUS_DOT11_PMKID_CANDIDATE_LIST 0x4003000AL
#define NDIS_STATUS_DOT11_PHY_STATE_CHANGED 0x4003000BL
#define NDIS_STATUS_DOT11_LINK_QUALITY 0x4003000CL
#define NDIS_STATUS_DOT11_INCOMING_ASSOC_STARTED 0x4003000DL
#define NDIS_STATUS_DOT11_INCOMING_ASSOC_REQUEST_RECEIVED 0x4003000EL
#define NDIS_STATUS_DOT11_INCOMING_ASSOC_COMPLETION 0x4003000FL
#define NDIS_STATUS_DOT11_STOP_AP 0x40030010L
#define NDIS_STATUS_DOT11_PHY_FREQUENCY_ADOPTED 0x40030011L
#define NDIS_STATUS_DOT11_CAN_SUSTAIN_AP 0x40030012L
#define NDIS_STATUS_WWAN_DEVICE_CAPS 0x40041000L
#define NDIS_STATUS_WWAN_READY_INFO 0x40041001L
#define NDIS_STATUS_WWAN_RADIO_STATE 0x40041002L
#define NDIS_STATUS_WWAN_PIN_INFO 0x40041003L
#define NDIS_STATUS_WWAN_PIN_LIST 0x40041004L
#define NDIS_STATUS_WWAN_HOME_PROVIDER 0x40041005L
#define NDIS_STATUS_WWAN_PREFERRED_PROVIDERS 0x40041006L
#define NDIS_STATUS_WWAN_VISIBLE_PROVIDERS 0x40041007L
#define NDIS_STATUS_WWAN_REGISTER_STATE 0x40041008L
#define NDIS_STATUS_WWAN_PACKET_SERVICE 0x40041009L
#define NDIS_STATUS_WWAN_SIGNAL_STATE 0x4004100AL
#define NDIS_STATUS_WWAN_CONTEXT_STATE 0x4004100BL
#define NDIS_STATUS_WWAN_PROVISIONED_CONTEXTS 0x4004100CL
#define NDIS_STATUS_WWAN_SERVICE_ACTIVATION 0x4004100DL
#define NDIS_STATUS_WWAN_SMS_CONFIGURATION 0x4004100EL
#define NDIS_STATUS_WWAN_SMS_RECEIVE 0x4004100FL
#define NDIS_STATUS_WWAN_SMS_SEND 0x40041010L
#define NDIS_STATUS_WWAN_SMS_DELETE 0x40041011L
#define NDIS_STATUS_WWAN_SMS_STATUS 0x40041012L
#define NDIS_STATUS_WWAN_DNS_ADDRESS 0x40041013L
#define NDIS_STATUS_WWAN_VENDOR_SPECIFIC 0x40043000L
#endif
#if NDIS_SUPPORT_NDIS61
#define NDIS_STATUS_HD_SPLIT_CURRENT_CONFIG 0x4002000CL
#endif
#if NDIS_SUPPORT_NDIS620
#define NDIS_STATUS_RECEIVE_QUEUE_STATE 0x4002000DL
#define NDIS_STATUS_PM_WOL_PATTERN_REJECTED 0x40030051L
#define NDIS_STATUS_PM_OFFLOAD_REJECTED 0x40030052L
#define NDIS_STATUS_PM_CAPABILITIES_CHANGE 0x40030053L
#endif
#define NDIS_STATUS_SUCCESS STATUS_SUCCESS
#define NDIS_STATUS_PENDING STATUS_PENDING
#define NDIS_STATUS_NOT_RECOGNIZED 0x00010001L
#define NDIS_STATUS_NOT_COPIED 0x00010002L
#define NDIS_STATUS_NOT_ACCEPTED 0x00010003L
#define NDIS_STATUS_CALL_ACTIVE 0x00010007L
#define NDIS_STATUS_INDICATION_REQUIRED STATUS_NDIS_INDICATION_REQUIRED
#define NDIS_STATUS_NOT_RESETTABLE 0x80010001L
#define NDIS_STATUS_SOFT_ERRORS 0x80010003L
#define NDIS_STATUS_HARD_ERRORS 0x80010004L
#define NDIS_STATUS_BUFFER_OVERFLOW STATUS_BUFFER_OVERFLOW
#define NDIS_STATUS_FAILURE STATUS_UNSUCCESSFUL
#define NDIS_STATUS_RESOURCES STATUS_INSUFFICIENT_RESOURCES
#define NDIS_STATUS_CLOSING 0xC0010002L
#define NDIS_STATUS_BAD_VERSION 0xC0010004L
#define NDIS_STATUS_BAD_CHARACTERISTICS 0xC0010005L
#define NDIS_STATUS_ADAPTER_NOT_FOUND 0xC0010006L
#define NDIS_STATUS_OPEN_FAILED 0xC0010007L
#define NDIS_STATUS_DEVICE_FAILED 0xC0010008L
#define NDIS_STATUS_MULTICAST_FULL 0xC0010009L
#define NDIS_STATUS_MULTICAST_EXISTS 0xC001000AL
#define NDIS_STATUS_MULTICAST_NOT_FOUND 0xC001000BL
#define NDIS_STATUS_REQUEST_ABORTED 0xC001000CL
#define NDIS_STATUS_RESET_IN_PROGRESS 0xC001000DL
#define NDIS_STATUS_CLOSING_INDICATING 0xC001000EL
#define NDIS_STATUS_NOT_SUPPORTED STATUS_NOT_SUPPORTED
#define NDIS_STATUS_INVALID_PACKET 0xC001000FL
#define NDIS_STATUS_OPEN_LIST_FULL 0xC0010010L
#define NDIS_STATUS_ADAPTER_NOT_READY 0xC0010011L
#define NDIS_STATUS_ADAPTER_NOT_OPEN 0xC0010012L
#define NDIS_STATUS_NOT_INDICATING 0xC0010013L
#define NDIS_STATUS_INVALID_LENGTH 0xC0010014L
#define NDIS_STATUS_INVALID_DATA 0xC0010015L
#define NDIS_STATUS_BUFFER_TOO_SHORT 0xC0010016L
#define NDIS_STATUS_INVALID_OID 0xC0010017L
#define NDIS_STATUS_ADAPTER_REMOVED 0xC0010018L
#define NDIS_STATUS_UNSUPPORTED_MEDIA 0xC0010019L
#define NDIS_STATUS_GROUP_ADDRESS_IN_USE 0xC001001AL
#define NDIS_STATUS_FILE_NOT_FOUND 0xC001001BL
#define NDIS_STATUS_ERROR_READING_FILE 0xC001001CL
#define NDIS_STATUS_ALREADY_MAPPED 0xC001001DL
#define NDIS_STATUS_RESOURCE_CONFLICT 0xC001001EL
#define NDIS_STATUS_NO_CABLE 0xC001001FL
#define NDIS_STATUS_INVALID_DEVICE_REQUEST STATUS_INVALID_DEVICE_REQUEST
#define NDIS_STATUS_NETWORK_UNREACHABLE STATUS_NETWORK_UNREACHABLE
#define NDIS_STATUS_INVALID_SAP 0xC0010020L
#define NDIS_STATUS_SAP_IN_USE 0xC0010021L
#define NDIS_STATUS_INVALID_ADDRESS 0xC0010022L
#define NDIS_STATUS_VC_NOT_ACTIVATED 0xC0010023L
#define NDIS_STATUS_DEST_OUT_OF_ORDER 0xC0010024L
#define NDIS_STATUS_VC_NOT_AVAILABLE 0xC0010025L
#define NDIS_STATUS_CELLRATE_NOT_AVAILABLE 0xC0010026L
#define NDIS_STATUS_INCOMPATABLE_QOS 0xC0010027L
#define NDIS_STATUS_AAL_PARAMS_UNSUPPORTED 0xC0010028L
#define NDIS_STATUS_NO_ROUTE_TO_DESTINATION 0xC0010029L
#define NDIS_STATUS_TOKEN_RING_OPEN_ERROR 0xC0011000L
#if NDIS_SUPPORT_NDIS6
#define NDIS_STATUS_SEND_ABORTED STATUS_NDIS_REQUEST_ABORTED
#define NDIS_STATUS_PAUSED STATUS_NDIS_PAUSED
#define NDIS_STATUS_INTERFACE_NOT_FOUND STATUS_NDIS_INTERFACE_NOT_FOUND
#define NDIS_STATUS_INVALID_PARAMETER STATUS_INVALID_PARAMETER
#define NDIS_STATUS_UNSUPPORTED_REVISION STATUS_NDIS_UNSUPPORTED_REVISION
#define NDIS_STATUS_INVALID_PORT STATUS_NDIS_INVALID_PORT
#define NDIS_STATUS_INVALID_PORT_STATE STATUS_NDIS_INVALID_PORT_STATE
#define NDIS_STATUS_INVALID_STATE STATUS_INVALID_DEVICE_STATE
#define NDIS_STATUS_MEDIA_DISCONNECTED STATUS_NDIS_MEDIA_DISCONNECTED
#define NDIS_STATUS_LOW_POWER_STATE STATUS_NDIS_LOW_POWER_STATE
#define NDIS_STATUS_DOT11_AUTO_CONFIG_ENABLED \
STATUS_NDIS_DOT11_AUTO_CONFIG_ENABLED
#define NDIS_STATUS_DOT11_MEDIA_IN_USE STATUS_NDIS_DOT11_MEDIA_IN_USE
#define NDIS_STATUS_DOT11_POWER_STATE_INVALID \
STATUS_NDIS_DOT11_POWER_STATE_INVALID
#define NDIS_STATUS_UPLOAD_IN_PROGRESS 0xC0231001L
#define NDIS_STATUS_REQUEST_UPLOAD 0xC0231002L
#define NDIS_STATUS_UPLOAD_REQUESTED 0xC0231003L
#define NDIS_STATUS_OFFLOAD_TCP_ENTRIES 0xC0231004L
#define NDIS_STATUS_OFFLOAD_PATH_ENTRIES 0xC0231005L
#define NDIS_STATUS_OFFLOAD_NEIGHBOR_ENTRIES 0xC0231006L
#define NDIS_STATUS_OFFLOAD_IP_ADDRESS_ENTRIES 0xC0231007L
#define NDIS_STATUS_OFFLOAD_HW_ADDRESS_ENTRIES 0xC0231008L
#define NDIS_STATUS_OFFLOAD_VLAN_ENTRIES 0xC0231009L
#define NDIS_STATUS_OFFLOAD_TCP_XMIT_BUFFER 0xC023100AL
#define NDIS_STATUS_OFFLOAD_TCP_RCV_BUFFER 0xC023100BL
#define NDIS_STATUS_OFFLOAD_TCP_RCV_WINDOW 0xC023100CL
#define NDIS_STATUS_OFFLOAD_VLAN_MISMATCH 0xC023100DL
#define NDIS_STATUS_OFFLOAD_DATA_NOT_ACCEPTED 0xC023100EL
#define NDIS_STATUS_OFFLOAD_POLICY 0xC023100FL
#define NDIS_STATUS_OFFLOAD_DATA_PARTIALLY_ACCEPTED 0xC0231010L
#define NDIS_STATUS_OFFLOAD_REQUEST_RESET 0xC0231011L
#endif
#if NDIS_SUPPORT_NDIS620
#define NDIS_STATUS_PM_WOL_PATTERN_LIST_FULL \
STATUS_NDIS_PM_WOL_PATTERN_LIST_FULL
#define NDIS_STATUS_PM_PROTOCOL_OFFLOAD_LIST_FULL \
STATUS_NDIS_PM_PROTOCOL_OFFLOAD_LIST_FULL
#define NDIS_STATUS_OFFLOAD_CONNECTION_REJECTED \
STATUS_NDIS_OFFLOAD_CONNECTION_REJECTED
#endif
/* NDIS error codes */
#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
/* NDIS read/write lock flags */
#if NDIS_SUPPORT_NDIS620
#define NDIS_RWL_AT_DISPATCH_LEVEL 1
#endif
/* NDIS buffer macros */
#define NDIS_BUFFER_TO_SPAN_PAGES( x ) \
(MmGetMdlByteCount( x ) == 0 ? 1 : (ADDRESS_AND_SIZE_TO_SPAN_PAGES( \
MmGetMdlVirtualAddress( x ), MmGetMdlByteCount( x ) )))
#define NDIS_BUFFER_LINKAGE( x ) ((x)->Next)
/* NDIS maximum processor count */
#if NDIS_SUPPORT_60_COMPATIBLE_API && !defined( NDIS_WRAPPER )
#define NDIS_MAX_PROCESSOR_COUNT 32
#endif
/* Macros that alias kernel functions */
#if NDIS_SUPPORT_NDIS6
#if NDIS_SUPPORT_60_COMPATIBLE_API
#define NDIS_CURRENT_PROCESSOR_NUMBER KeGetCurrentProcessorNumber()
#endif
#define NDIS_CURRENT_IRQL() KeGetCurrentIrql()
#define NDIS_RAISE_IRQL_TO_DISPATCH( x ) KeRaiseIrql( DISPATCH_LEVEL, x )
#define NDIS_LOWER_IRQL( p1, p2 ) \
{ \
if( (p1) != (p2) ) { \
KeLowerIrql( p1 ); \
} \
}
#define NDIS_INIT_MUTEX( x ) KeInitializeMutex( x, 0xFFFF )
#define NDIS_RELEASE_MUTEX( x ) KeReleaseMutex( x, FALSE )
#define NDIS_WAIT_FOR_MUTEX( x ) \
KeWaitForSingleObject( x, Executive, KernelMode, FALSE, NULL );
#endif
/* NDIS configuration object revision number */
#if NDIS_SUPPORT_NDIS6
#define NDIS_CONFIGURATION_OBJECT_REVISION_1 1
#endif
/* NDIS configuration flags */
#if NDIS_SUPPORT_NDIS6
#define NDIS_CONFIG_FLAG_FILTER_INSTANCE_CONFIGURATION 0x00000001L
#endif
/* Network Plug and Play event flags */
#if NDIS_SUPPORT_NDIS6
#define NET_EVENT_HALT_MINIPORT_ON_LOW_POWER 0x00000001L
#endif
/* Network Plug and Play event notification revision number */
#if NDIS_SUPPORT_NDIS6
#define NET_PNP_EVENT_NOTIFICATION_REVISION_1 1
#endif
/* NDIS object identifier request constants */
#if NDIS_SUPPORT_NDIS6
#define NDIS_OID_REQUEST_REVISION_1 1
#define NDIS_OID_REQUEST_TIMEOUT_INFINITE 0
#define NDIS_OID_REQUEST_NDIS_RESERVED_SIZE 16
#endif
/* NDIS status indication flags */
#if NDIS_SUPPORT_NDIS6
#define NDIS_STATUS_INDICATION_FLAGS_MEDIA_CONNECT_TO_CONNECT 0x1000
#endif
/* NDIS status indication revision number */
#if NDIS_SUPPORT_NDIS6
#define NDIS_STATUS_INDICATION_REVISION_1 1
#endif
/* NDIS timer characteristics revision number */
#if NDIS_SUPPORT_NDIS6
#define NDIS_TIMER_CHARACTERISTICS_REVISION_1 1
#endif
/* NDIS lookahead size special value */
#if NDIS_SUPPORT_NDIS620
#define NDIS_MAX_LOOKAHEAD_SIZE_ACCESSED_UNDEFINED (-1)
#endif
/* NDIS restart general attributes flags */
#if NDIS_SUPPORT_NDIS620
#define NDIS_RESTART_GENERAL_ATTRIBUTES_MAX_LOOKAHEAD_ACCESSED_DEFINED 0x00000001L
#endif
/* NDIS restart general attributes revision number */
#if NDIS_SUPPORT_NDIS6
#define NDIS_RESTART_GENERAL_ATTRIBUTES_REVISION_1 1
#endif
#if NDIS_SUPPORT_NDIS620
#define NDIS_RESTART_GENERAL_ATTRIBUTES_REVISION_2 2
#endif
/* NDIS system processor information revision number */
#if NDIS_SUPPORT_NDIS6 && NDIS_SUPPORT_60_COMPATIBLE_API
#define NDIS_SYSTEM_PROCESSOR_INFO_REVISION_1 1
#endif
/* NDIS pause parameters */
#if NDIS_SUPPORT_NDIS6
#define NDIS_PAUSE_NDIS_INTERNAL 0x00000001L
#define NDIS_PAUSE_LOW_POWER 0x00000002L
#define NDIS_PAUSE_BIND_PROTOCOL 0x00000004L
#define NDIS_PAUSE_UNBIND_PROTOCOL 0x00000008L
#define NDIS_PAUSE_ATTACH_FILTER 0x00000010L
#define NDIS_PAUSE_DETACH_FILTER 0x00000020L
#define NDIS_PAUSE_FILTER_RESTART_STACK 0x00000040L
#define NDIS_PAUSE_MINIPORT_DEVICE_REMOVE 0x00000080L
#endif
/* NDIS filter interface flags */
#if (NTDDI_VERSION == 0x06000000) && (NDIS_LEGACY_DRIVER || NDIS_SUPPORT_NDIS6)
#define NDIS_FILTER_INTERFACE_IM_FILTER 0x00000001L
#define NDIS_FILTER_INTERFACE_LW_FILTER 0x00000002L
#endif
/* NDIS filter interface revision number */
#if (NTDDI_VERSION == 0x06000000) && (NDIS_LEGACY_DRIVER || NDIS_SUPPORT_NDIS6)
#define NDIS_FILTER_INTERFACE_REVISION_1 1
#endif
/* NDIS enumerate filters revision number */
#if (NTDDI_VERSION == 0x06000000) && (NDIS_LEGACY_DRIVER || NDIS_SUPPORT_NDIS6)
#define NDIS_ENUM_FILTERS_REVISION_1 1
#endif
/* NDIS device object attributes revision number */
#if (NTDDI_VERSION == 0x06000000) && (NDIS_LEGACY_DRIVER || NDIS_SUPPORT_NDIS6)
#define NDIS_DEVICE_OBJECT_ATTRIBUTES_REVISION_1 1
#endif
/* NDIS object type device wrapper revision number */
#if (NTDDI_VERSION == 0x06000000) && (NDIS_LEGACY_DRIVER || NDIS_SUPPORT_NDIS6)
#define NDIS_OBJECT_TYPE_DRIVER_WRAPPER_REVISION_1 1
#endif
/* NDIS shared memory parameters flags */
#if NDIS_SUPPORT_NDIS620
#define NDIS_SHARED_MEM_PARAMETERS_CONTIGUOUS 0x00000001L
#endif
/* NDIS shared memory handle special value */
#if NDIS_SUPPORT_NDIS620
#define NDIS_SHARED_MEM_HANDLE_HAL_ALLOCATED NULL
#endif
/* NDIS shared memory parameters revision number */
#if NDIS_SUPPORT_NDIS620
#define NDIS_SHARED_MEMORY_PARAMETERS_REVISION_1 1
#endif
/* NDIS shared memory provider characteristics revision number */
#if NDIS_SUPPORT_NDIS620
#define NDIS_SHARED_MEMORY_PROVIDER_CHARACTERISTICS_REVISION_1 1
#endif
/* NDIS receive queue state revision number */
#if NDIS_SUPPORT_NDIS620
#define NDIS_RECEIVE_QUEUE_STATE_REVISION_1 1
#endif
/* NDIS scatter/gather list parameters revision number */
#if NDIS_SUPPORT_NDIS620
#define NDIS_SCATTER_GATHER_LIST_PARAMETERS_REVISION_1 1
#endif
/* NDIS NBL media-specific information revision number */
#if NDIS_SUPPORT_NDIS620
#define NDIS_NBL_MEDIA_SPECIFIC_INFO_REVISION_1 1
#endif
/* NDIS media-specific information tags */
#if NDIS_SUPPORT_NDIS6 || NDIS60
#define NDIS_MEDIA_SPECIFIC_INFO_TUNDL 0x00010001L
#define NDIS_MEDIA_SPECIFIC_INFO_FCOE 0x80010000L
#define NDIS_MEDIA_SPECIFIC_INFO_EAPOL 0x80010001L
#define NDIS_MEDIA_SPECIFIC_INFO_LLDP 0x80010002L
#define NDIS_MEDIA_SPECIFIC_INFO_TIMESYNC 0x80010003L
#endif
/* Network buffer list flags */
#if NDIS_SUPPORT_NDIS6 || NDIS60
#define NBL_FLAGS_PROTOCOL_RESERVED 0xFFF00000L
#define NBL_FLAGS_MINIPORT_RESERVED 0x0000F000L
#define NBL_FLAGS_SCRATCH 0x000F0000L
#define NBL_FLAGS_NDIS_RESERVED 0x00000FFFL
#define NDIS_PROT_RSVD_FLAGS NBL_FLAGS_PROTOCOL_RESERVED
#define NDIS_NBL_FLAGS_SEND_READ_ONLY 0x00000001L
#define NDIS_NBL_FLAGS_RECV_READ_ONLY 0x00000002L
#define NDIS_NBL_FLAGS_IS_LOOPBACK_PACKET 0x00008000L
#endif
#if NDIS_SUPPORT_NDIS61
#define NDIS_NBL_FLAGS_HD_SPLIT 0x00000100L
#define NDIS_NBL_FLAGS_IS_IPV4 0x00000200L
#define NDIS_NBL_FLAGS_IS_IPV6 0x00000400L
#define NDIS_NBL_FLAGS_IS_TCP 0x00000800L
#define NDIS_NBL_FLAGS_IS_UDP 0x00001000L
#define NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_HEADER 0x00002000L
#define NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_PAYLOAD 0x00004000L
#endif
/* Macros to manipulate network buffer list flags */
#if NDIS_SUPPORT_NDIS6 || NDIS60
#define NBL_TEST_FLAG( x, p ) (((x)->Flags & (p)) != 0)
#define NBL_SET_FLAG( x, p ) ((x)->Flags |= (p))
#define NBL_CLEAR_FLAG( x, p ) ((x)->Flags &= ~(p))
#define NBL_SET_PROTOCOL_RSVD_FLAG( x, p ) \
((x)->Flags |= ((p) & NBL_FLAGS_PROTOCOL_RESERVED))
#define NBL_CLEAR_PROTOCOL_RSVD_FLAG( x, p ) \
((x)->Flags &= ~((p) & NBL_FLAGS_PROTOCOL_RESERVED))
#define NBL_TEST_PROTOCOL_RSVD_FLAG( x , p ) \
(((x)->Flags & ((p) & NBL_FLAGS_PROTOCOL_RESERVED)) != 0)
#define NBL_SET_PROT_RSVD_FLAG( x, p ) NBL_SET_PROTOCOL_RSVD_FLAG( x, p )
#define NBL_CLEAR_PROT_RSVD_FLAG( x, p ) NBL_CLEAR_PROTOCOL_RSVD_FLAG( x, p )
#define NBL_TEST_PROT_RSVD_FLAG( x, p ) NBL_TEST_PROTOCOL_RSVD_FLAG( x, p )
#endif
/* Network buffer list pool parameters revision number */
#if NDIS_SUPPORT_NDIS6 || NDIS60
#define NET_BUFFER_LIST_POOL_PARAMETERS_REVISION_1 1
#endif
/* Network buffer pool parameters revision number */
#if NDIS_SUPPORT_NDIS6 || NDIS60
#define NET_BUFFER_POOL_PARAMETERS_REVISION_1 1
#endif
/* NDIS send flags */
#if NDIS_SUPPORT_NDIS6 || NDIS60
#define NDIS_SEND_FLAGS_DISPATCH_LEVEL 0x00000001L
#define NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK 0x00000002L
#endif
#if NDIS_SUPPORT_NDIS620
#define NDIS_SEND_FLAGS_SINGLE_QUEUE 0x00000004L
#endif
/* Macros to manipulate send flags */
#if NDIS_SUPPORT_NDIS6 || NDIS60
#define NDIS_TEST_SEND_FLAG( x, p ) (((x) & (p)) == (p))
#define NDIS_SET_SEND_FLAG( x, p ) ((x) |= (p))
#define NDIS_TEST_SEND_AT_DISPATCH_LEVEL( x ) \
NDIS_TEST_SEND_FLAG( x, NDIS_SEND_FLAGS_DISPATCH_LEVEL )
#endif
/* NDIS send complete flags */
#if NDIS_SUPPORT_NDIS6 || NDIS60
#define NDIS_SEND_COMPLETE_FLAGS_DISPATCH_LEVEL 0x00000001L
#endif
#if NDIS_SUPPORT_NDIS620
#define NDIS_SEND_COMPLETE_FLAGS_SINGLE_QUEUE 0x00000002L
#endif
/* Macros to manipulate send complete flags */
#if NDIS_SUPPORT_NDIS6 || NDIS60
#define NDIS_TEST_SEND_COMPLETE_FLAG( x, p ) (((x) & (p)) == (p))
#define NDIS_SET_SEND_COMPLETE_FLAG( x, p ) ((x) |= (p))
#define NDIS_TEST_SEND_COMPLETE_AT_DISPATCH_LEVEL( x ) \
NDIS_TEST_SEND_COMPLETE_FLAG( x, NDIS_SEND_COMPLETE_FLAGS_DISPATCH_LEVEL )
#endif
/* NDIS receive flags */
#if NDIS_SUPPORT_NDIS6 || NDIS60
#define NDIS_RECEIVE_FLAGS_DISPATCH_LEVEL 0x00000001L
#define NDIS_RECEIVE_FLAGS_RESOURCES 0x00000002L
#define NDIS_RECEIVE_FLAGS_SINGLE_ETHER_TYPE 0x00000100L
#define NDIS_RECEIVE_FLAGS_SINGLE_VLAN 0x00000200L
#define NDIS_RECEIVE_FLAGS_PERFECT_FILTERED 0x00000400L
#endif
#if NDIS_SUPPORT_NDIS620
#define NDIS_RECEIVE_FLAGS_SINGLE_QUEUE 0x00000800L
#define NDIS_RECEIVE_FLAGS_SHARED_MEMORY_INFO_VALID 0x00001000L
#define NDIS_RECEIVE_FLAGS_MORE_NBLS 0x00002000L
#endif
/* Macros to manipulate receive flags */
#if NDIS_SUPPORT_NDIS6 || NDIS60
#define NDIS_TEST_RECEIVE_FLAG( x, p ) (((x) & (p)) == (p))
#define NDIS_SET_RECEIVE_FLAG( x, p ) ((x) |= (p))
#define NDIS_TEST_RECEIVE_AT_DISPATCH_LEVEL( x ) \
NDIS_TEST_RECEIVE_FLAG( x, NDIS_RECEIVE_FLAGS_DISPATCH_LEVEL )
#define NDIS_TEST_RECEIVE_CANNOT_PEND( x ) \
NDIS_TEST_RECEIVE_FLAG( x, NDIS_RECEIVE_FLAGS_RESOURCES )
#define NDIS_TEST_RECEIVE_CAN_PEND( x ) (((x) & NDIS_RECEIVE_FLAGS_RESOURCES) == 0)
#endif
/* NDIS return flags */
#if NDIS_SUPPORT_NDIS6 || NDIS60
#define NDIS_RETURN_FLAGS_DISPATCH_LEVEL 0x00000001L
#endif
#if NDIS_SUPPORT_NDIS620
#define NDIS_RETURN_FLAGS_SINGLE_QUEUE 0x00000002L
#endif
/* Macros to manipulate return flags */
#if NDIS_SUPPORT_NDIS6 || NDIS60
#define NDIS_TEST_RETURN_FLAG( x, p ) (((x) & (p)) == (p))
#define NDIS_SET_RETURN_FLAG( x, p ) ((x) |= (p))
#define NDIS_TEST_RETURN_AT_DISPATCH_LEVEL( x ) \
NDIS_TEST_RETURN_FLAG( x, NDIS_RETURN_FLAGS_DISPATCH_LEVEL )
#endif
/* NDIS clone flags */
#if NDIS_SUPPORT_NDIS6 || NDIS60
#define NDIS_CLONE_FLAGS_USE_ORIGINAL_MDLS 0x00000002L
#endif
/* Macro to manipulate clone flags */
#if NDIS_SUPPORT_NDIS6 || NDIS60
#define NDIS_TEST_CLONE_FLAG( x, p ) (((x) & (p)) == (p))
#define NDIS_SET_CLONE_FLAG( x, p ) ((x) |= (p))
#define NDIS_CLEAR_CLONE_FLAG( x, p ) ((x) &= ~(p))
#endif
/* NDIS task offload version number */
#define NDIS_TASK_OFFLOAD_VERSION 1
/* Hash constants */
#define MAX_HASHES 4
#define TRUNCATED_HASH_LEN 12
/* Cryptographic status codes */
#define CRYPTO_SUCCESS 0
#define CRYPTO_GENERIC_ERROR 1
#define CRYPTO_TRANSPORT_AH_AUTH_FAILED 2
#define CRYPTO_TRANSPORT_ESP_AUTH_FAILED 3
#define CRYPTO_TUNNEL_AH_AUTH_FAILED 4
#define CRYPTO_TUNNEL_ESP_AUTH_FAILED 5
#define CRYPTO_INVALID_PACKET_SYNTAX 6
#define CRYPTO_INVALID_PROTOCOL 7
/* NDIS task TCP large send version number */
#if NDIS_LEGACY_DRIVER
#define NDIS_TASK_TCP_LARGE_SEND_V0 0
#endif
/* IPsec flags */
#define IPSEC_TPT_UDPESP_ENCAPTYPE_IKE 0x00000001L
#define IPSEC_TUN_UDPESP_ENCAPTYPE_IKE 0x00000002L
#define IPSEC_TPTOVERTUN_UDPESP_ENCAPTYPE_IKE 0x00000004L
#define IPSEC_TPT_UDPESP_OVER_PURE_TUN_ENCAPTYPE_IKE 0x00000008L
#define IPSEC_TPT_UDPESP_ENCAPTYPE_OTHER 0x00000010L
#define IPSEC_TUN_UDPESP_ENCAPTYPE_OTHER 0x00000020L
#define IPSEC_TPTOVERTUN_UDPESP_ENCAPTYPE_OTHER 0x00000040L
#define IPSEC_TPT_UDPESP_OVER_PURE_TUN_ENCAPTYPE_OTHER 0x00000080L
/* NDIS large send offload constants */
#if NDIS_SUPPORT_NDIS6 || NDIS60
#define NDIS_TCP_LARGE_SEND_OFFLOAD_V1_TYPE 0
#define NDIS_TCP_LARGE_SEND_OFFLOAD_V2_TYPE 1
#define NDIS_TCP_LARGE_SEND_OFFLOAD_IPv4 0
#define NDIS_TCP_LARGE_SEND_OFFLOAD_IPv6 1
#define NDIS_LARGE_SEND_OFFLOAD_MAX_HEADER_LENGTH 128
#endif
/* NDIS offload encapsulation revision number */
#if NDIS_SUPPORT_NDIS6 || NDIS60
#define NDIS_OFFLOAD_ENCAPSULATION_REVISION_1 1
#endif
/* Maximum number of extension headers */
#if NDIS_SUPPORT_NDIS61
#define IPSEC_OFFLOAD_V2_MAX_EXTENSION_HEADERS 2
#endif
/* IPsec offload (version 2) flags */
#if NDIS_SUPPORT_NDIS61
#define IPSEC_OFFLOAD_V2_UDP_ESP_ENCAPSULATION_NONE 0x00000000L
#define IPSEC_OFFLOAD_V2_UDP_ESP_ENCAPSULATION_TRANSPORT 0x00000001L
#define IPSEC_OFFLOAD_V2_UDP_ESP_ENCAPSULATION_TUNNEL 0x00000002L
#define IPSEC_OFFLOAD_V2_TRANSPORT_OVER_UDP_ESP_ENCAPSULATION_TUNNEL 0x00000004L
#define IPSEC_OFFLOAD_V2_UDP_ESP_ENCAPSULATION_TRANSPORT_OVER_TUNNEL 0x00000008L
#endif
/* IPsec offload (version 2) security association flags */
#if NDIS_SUPPORT_NDIS61
#define IPSEC_OFFLOAD_V2_ESN_SA 0x00000001L
#endif
/* IPsec offload (version 2) add security association flags */
#if NDIS_SUPPORT_NDIS61
#define IPSEC_OFFLOAD_V2_INBOUND 0x00000001L
#define IPSEC_OFFLOAD_V2_IPv6 0x00000010L
#endif
/* IPsec offload (version 2) add security association revision number */
#if NDIS_SUPPORT_NDIS61
#define NDIS_IPSEC_OFFLOAD_V2_ADD_SA_REVISION_1 1
#endif
/* IPsec offload (version 2) delete security association revision number */
#if NDIS_SUPPORT_NDIS61
#define NDIS_IPSEC_OFFLOAD_V2_DELETE_SA_REVISION_1 1
#endif
/* IPsec offload (version 2) update security association revision number */
#if NDIS_SUPPORT_NDIS61
#define NDIS_IPSEC_OFFLOAD_V2_UPDATE_SA_REVISION_1 1
#endif
/* Protocol reserved size in packet */
#if NDIS_LEGACY_DRIVER
#define PROTOCOL_RESERVED_SIZE_IN_PACKET (4 * sizeof( PVOID ))
#endif
/* NDIS bind parameters revision numbers */
#if NDIS_SUPORT_NDIS6 || NDIS60
#define NDIS_BIND_PARAMETERS_REVISION_1 1
#endif
#if NDIS_SUPPORT_NDIS61
#define NDIS_BIND_PARAMETERS_REVISION_2 2
#endif
#if NDIS_SUPPORT_NDIS620
#define NDIS_BIND_PARAMETERS_REVISION_3 3
#endif
/* NDIS protocol CO characteristics revision number */
#if NDIS_SUPPORT_NDIS6 || NDIS60
#define NDIS_PROTOCOL_CO_CHARACTERISTICS_REVISION_1 1
#endif
/* NDIS protocol driver characteristics revision number */
#if NDIS_SUPPORT_NDIS6 || NDIS60
#define NDIS_PROTOCOL_DRIVER_CHARACTERISTICS_REVISION_1 1
#endif
#if NDIS_SUPPORT_NDIS61
#define NDIS_PROTOCOL_DRIVER_CHARACTERISTICS_REVISION_2 2
#endif
/* NDIS open parameters revision number */
#if NDIS_SUPPORT_NDIS6 || NDIS60
#define NDIS_OPEN_PARAMETERS_REVISION_1 1
#endif
/* NDIS protocol pause parameters revision number */
#if NDIS_SUPPORT_NDIS6 || NDIS60
#define NDIS_PROTOCOL_PAUSE_PARAMETERS_REVISION_1 1
#endif
/* NDIS protocol restart parameters revision number */
#if NDIS_SUPPORT_NDIS6 || NDIS60
#define NDIS_PROTOCOL_RESTART_PARAMETERS_REVISION_1 1
#endif
/* NDIS maximum lookahead */
#define NDIS_M_MAX_LOOKAHEAD 526
/* NDIS miniport interrupt revision number */
#if NDIS_SUPPORT_NDIS6
#define NDIS_MINIPORT_INTERRUPT_REVISION_1 1
#endif
/* NDIS miniport Plug and Play characteristics revision number */
#if NDIS_SUPPORT_NDIS6
#define NDIS_MINIPORT_PNP_CHARACTERISTICS_REVISION_1 1
#endif
/* NDIS scatter/gather DMA description flags */
#if NDIS_SUPPORT_NDIS6
#define NDIS_SG_DMA_64_BIT_ADDRESS 0x00000001L
#endif
/* NDIS scatter/gather DMA description revision number */
#if NDIS_SUPPORT_NDIS6
#define NDIS_SG_DMA_DESCRIPTION_REVISION_1 1
#endif
/* NDIS miniport initialization parameters revision number */
#if NDIS_SUPPORT_NDIS6
#define NDIS_MINIPORT_INIT_PARAMETERS_REVISION_1 1
#endif
/* NDIS miniport restart parameters revision number */
#if NDIS_SUPPORT_NDIS6
#define NDIS_MINIPORT_RESTART_PARAMETERS_REVISION_1 1
#endif
/* NDIS miniport adapter registration attributes revision number */
#if NDIS_SUPPORT_NDIS6
#define NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES_REVISION_1 1
#endif
/* NDIS supported statistics flags */
#if NDIS_SUPPORT_NDIS6
#define NDIS_STATISTICS_XMIT_OK_SUPPORTED 0x00000001L
#define NDIS_STATISTICS_RCV_OK_SUPPORTED 0x00000002L
#define NDIS_STATISTICS_XMIT_ERROR_SUPPORTED 0x00000004L
#define NDIS_STATISTICS_RCV_ERROR_SUPPORTED 0x00000008L
#define NDIS_STATISTICS_RCV_NO_BUFFER_SUPPORTED 0x00000010L
#define NDIS_STATISTICS_DIRECTED_BYTES_XMIT_SUPPORTED 0x00000020L
#define NDIS_STATISTICS_DIRECTED_FRAMES_XMIT_SUPPORTED 0x00000040L
#define NDIS_STATISTICS_MULTICAST_BYTES_XMIT_SUPPORTED 0x00000080L
#define NDIS_STATISTICS_MULTICAST_FRAMES_XMIT_SUPPORTED 0x00000100L
#define NDIS_STATISTICS_BROADCAST_BYTES_XMIT_SUPPORTED 0x00000200L
#define NDIS_STATISTICS_BROADCAST_FRAMES_XMIT_SUPPORTED 0x00000400L
#define NDIS_STATISTICS_DIRECTED_BYTES_RCV_SUPPORTED 0x00000800L
#define NDIS_STATISTICS_DIRECTED_FRAMES_RCV_SUPPORTED 0x00001000L
#define NDIS_STATISTICS_MULTICAST_BYTES_RCV_SUPPORTED 0x00002000L
#define NDIS_STATISTICS_MULTICAST_FRAMES_RCV_SUPPORTED 0x00004000L
#define NDIS_STATISTICS_BROADCAST_BYTES_RCV_SUPPORTED 0x00008000L
#define NDIS_STATISTICS_BROADCAST_FRAMES_RCV_SUPPORTED 0x00010000L
#define NDIS_STATISTICS_RCV_CRC_ERROR_SUPPORTED 0x00020000L
#define NDIS_STATISTICS_TRANSMIT_QUEUE_LENGTH_SUPPORTED 0x00040000L
#define NDIS_STATISTICS_BYTES_RCV_SUPPORTED 0x00080000L
#define NDIS_STATISTICS_BYTES_XMIT_SUPPORTED 0x00100000L
#define NDIS_STATISTICS_RCV_DISCARDS_SUPPORTED 0x00200000L
#define NDIS_STATISTICS_GEN_STATISTICS_SUPPORTED 0x00400000L
#define NDIS_STATISTICS_XMIT_DISCARDS_SUPPORTED 0x08000000L
#endif
/* NDIS miniport add device registration attributes revision number */
#if NDIS_SUPPORT_NDIS6
#define NDIS_MINIPORT_ADD_DEVICE_REGISTRATION_ATTRIBUTES_REVISION_1 1
#endif
/* NDIS miniport adapter general attributes revision numbers */
#if NDIS_SUPPORT_NDIS6
#define NDIS_MINIPORT_ADAPTER_GENERAL_ATTRIBUTES_REVISION_1 1
#endif
#if NDIS_SUPPORT_NDIS620
#define NDIS_MINIPORT_ADAPTER_GENERAL_ATTRIBUTES_REVISION_2 2
#endif
/* NDIS header/data split attributes revision number */
#if NDIS_SUPPORT_NDIS61
#define NDIS_HD_SPLIT_ATTRIBUTES_REVISION_1 1
#endif
/* NDIS miniport adapter hardware assist attributes revision number */
#if NDIS_SUPPORT_NDIS61
#define NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES_REVISION_1 1
#endif
#if NDIS_SUPPORT_NDIS620
#define NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES_REVISION_2 2
#endif
/* NDIS miniport adapter offload attributes revision number */
#if NDIS_SUPPORT_NDIS6
#define NDIS_MINIPORT_ADAPTER_OFFLOAD_ATTRIBUTES_REVISION_1 1
#endif
/* NDIS miniport adapter 802.11 attributes revision numbers */
#if NDIS_SUPPORT_NDIS6
#define NDIS_MINIPORT_ADAPTER_802_11_ATTRIBUTES_REVISION_1 1
#define NDIS_MINIPORT_ADAPTER_802_11_ATTRIBUTES_REVISION_2 2
#endif
/* NDIS miniport attributes */
#if NDIS_SUPPORT_NDIS6
#define NDIS_MINIPORT_ATTRIBUTES_HARDWARE_DEVICE 0x00000001L
#define NDIS_MINIPORT_ATTRIBUTES_NDIS_WDM 0x00000002L
#define NDIS_MINIPORT_ATTRIBUTES_SURPRISE_REMOVE_OK 0x00000004L
#define NDIS_MINIPORT_ATTRIBUTES_NOT_CO_NDIS 0x00000008L
#define NDIS_MINIPORT_ATTRIBUTES_DO_NOT_BIND_TO_ALL_CO 0x00000010L
#define NDIS_MINIPORT_ATTRIBUTES_NO_HALT_ON_SUSPEND 0x00000020L
#define NDIS_MINIPORT_ATTRIBUTES_BUS_MASTER 0x00000040L
#define NDIS_MINIPORT_ATTRIBUTES_CONTROLS_DEFAULT_PORT 0x00000080L
#endif
/* NDIS miniport pause parameters revision number */
#if NDIS_SUPPORT_NDIS6
#define NDIS_MINIPORT_PAUSE_PARAMETERS_REVISION_1 1
#endif
/* Network device Plug and Play event revision number */
#if NDIS_SUPPORT_NDIS6
#define NET_DEVICE_PNP_EVENT_REVISION_1 1
#endif
/* NDIS 6.0 miniport characteristic flags */
#if NDIS_SUPPORT_NDIS6
#define NDIS_INTERMEDIATE_DRIVER 0x00000001L
#define NDIS_WDM_DRIVER 0x00000002L
#endif
/* NDIS miniport driver characteristics revision number */
#if NDIS_SUPPORT_NDIS6
#define NDIS_MINIPORT_DRIVER_CHARACTERISTICS_REVISION_1 1
#endif
#if NDIS_SUPPORT_NDIS61
#define NDIS_MINIPORT_DRIVER_CHARACTERISTICS_REVISION_2 2
#endif
/* NDIS miniport CO characteristics revision number */
#if NDIS_SUPPORT_NDIS6
#define NDIS_MINIPORT_CO_CHARACTERISTICS_REVISION_1 1
#endif
/* NDIS DMA sizes */
#define NDIS_DMA_24BITS 0
#define NDIS_DMA_32BITS 1
#define NDIS_DMA_64BITS 2
/* NDIS attributes */
#if NDIS_LEGACY_MINIPORT
#define NDIS_ATTRIBUTE_IGNORE_PACKET_TIMEOUT 0x00000001L
#define NDIS_ATTRIBUTE_IGNORE_REQUEST_TIMEOUT 0x00000002L
#define NDIS_ATTRIBUTE_IGNORE_TOKEN_RING_ERRORS 0x00000004L
#define NDIS_ATTRIBUTE_BUS_MASTER 0x00000008L
#define NDIS_ATTRIBUTE_INTERMEDIATE_DRIVER 0x00000010L
#define NDIS_ATTRIBUTE_DESERIALIZE 0x00000020L
#define NDIS_ATTRIBUTE_NO_HALT_ON_SUSPEND 0x00000040L
#define NDIS_ATTRIBUTE_SURPRISE_REMOVE_OK 0x00000080L
#define NDIS_ATTRIBUTE_NOT_CO_NDIS 0x00000100L
#define NDIS_ATTRIBUTE_USES_SAFE_BUFFER_APIS 0x00000200L
#define NDIS_ATTRIBUTE_DO_NOT_BIND_TO_ALL_CO 0x00000400L
#define NDIS_ATTRIBUTE_MINIPORT_PADS_SHORT_PACKETS 0x00000800L
#endif
/* NDIS MSIX configuration parameters revision number */
#if NDIS_SUPPORT_NDIS61
#define NDIS_MSIX_CONFIG_PARAMETERS_REVISION_1 1
#endif
/* NdisMAllocateNetBufferSGList() flags */
#if NDIS_SUPPORT_NDIS6
#define NDIS_SG_LIST_WRITE_TO_DEVICE 0x00000001L
#endif
/* CO send flags */
#define CO_SEND_FLAG_SET_DISCARD_ELIBILITY 0x00000001L
/* CO media parameter flags */
#define RECEIVE_TIME_INDICATION 0x00000001L
#define USE_TIME_STAMPS 0x00000002L
#define TRANSMIT_VC 0x00000004L
#define RECEIVE_VC 0x00000008L
#define INDICATE_ERRED_PACKETS 0x00000010L
#define INDICATE_END_OF_TX 0x00000020L
#define RESERVE_RESOURCES_VC 0x00000040L
#define ROUND_DOWN_FLOW 0x00000080L
#define ROUND_UP_FLOW 0x00000100L
/* Erred packet indication */
#define ERRED_PACKET_INDICATION 0x00000001L
/* CO call parameter flags */
#define PERMANENT_VC 0x00000001L
#define CALL_PARAMETERS_CHANGED 0x00000002L
#define QUERY_CALL_PARAMETERS 0x00000004L
#define BROADCAST_VC 0x00000008L
#define MULTIPOINT_VC 0x00000010L
/* String formats */
#ifndef __NDISTAPI_STRINGFORMATS_DEFINED
#define __NDISTAPI_STRINGFORMATS_DEFINED
#define STRINGFORMAT_ASCII 0x00000001L
#define STRINGFORMAT_DBCS 0x00000002L
#define STRINGFORMAT_UNICODE 0x00000003L
#define STRINGFORMAT_BINARY 0x00000004L
#endif
/* NDIS CO client optional handlers revision number */
#if NDIS_SUPPORT_NDIS6
#define NDIS_CO_CLIENT_OPTIONAL_HANDLERS_REVISION_1 1
#endif
/* NDIS CO call manager optional handlers revision number */
#if NDIS_SUPPORT_NDIS6
#define NDIS_CO_CALL_MANAGER_OPTIONAL_HANDLERS_REVISION_1 1
#endif
/* NDIS filter attach flags */
#if NDIS_SUPPORT_NDIS6
#define NDIS_FILTER_ATTACH_FLAGS_IGNORE_MANDATORY 0x00000001L
#endif
/* NDIS filter attach parameters revision numbers */
#if NDIS_SUPPORT_NDIS6
#define NDIS_FILTER_ATTACH_PARAMETERS_REVISION_1 1
#endif
#if NDIS_SUPPORT_NDIS61
#define NDIS_FILTER_ATTACH_PARAMETERS_REVISION_2 2
#endif
#if NDIS_SUPPORT_NDIS620
#define NDIS_FILTER_ATTACH_PARAMETERS_REVISION_3 3
#endif
/* NDIS filter restart parameters revision number */
#if NDIS_SUPPORT_NDIS6
#define NDIS_FILTER_RESTART_PARAMETERS_REVISION_1 1
#endif
/* NDIS filter pause parameters revision number */
#if NDIS_SUPPORT_NDIS6
#define NDIS_FILTER_PAUSE_PARAMETERS_REVISION_1 1
#endif
/* NDIS filter partial characteristics revision number */
#if NDIS_SUPPORT_NDIS6
#define NDIS_FILTER_PARTIAL_CHARACTERISTICS_REVISION_1 1
#endif
/* NDIS filter driver mandatory */
#if NDIS_SUPPORT_NDIS6
#define NDIS_FILTER_DRIVER_MANDATORY 0x00000001L
#endif
/* NDIS filter characteristics revision numbers */
#if NDIS_SUPPORT_NDIS6
#define NDIS_FILTER_CHARACTERISTICS_REVISION_1 1
#endif
#if NDIS_SUPPORT_NDIS61
#define NDIS_FILTER_CHARACTERISTICS_REVISION_2 2
#endif
/* NDIS filter attributes revision number */
#if NDIS_SUPPORT_NDIS6
#define NDIS_FILTER_ATTRIBUTES_REVISION_1 1
#endif
/* Opaque data types */
#if NDIS_SUPPORT_NDIS620
typedef struct _NDIS_RW_LOCK_EX NDIS_RW_LOCK_EX;
typedef struct _NDIS_RW_LOCK_EX *PNDIS_RW_LOCK_EX;
#endif
typedef struct _NDIS_WRAPPER_HANDLE NDIS_WRAPPER_HANDLE;
typedef struct _NDIS_WRAPPER_HANDLE *PNDIS_WRAPPER_HANDLE;
typedef struct _NDIS_PROTOCOL_BLOCK NDIS_PROTOCOL_BLOCK;
typedef struct _NDIS_PROTOCOL_BLOCK *PNDIS_PROTOCOL_BLOCK;
typedef struct _NDIS_M_DRIVER_BLOCK NDIS_M_DRIVER_BLOCK;
typedef struct _NDIS_M_DRIVER_BLOCK *PNDIS_M_DRIVER_BLOCK;
typedef struct _CO_CALL_PARAMETERS CO_CALL_PARAMETERS;
typedef struct _CO_CALL_PARAMETERS *PCO_CALL_PARAMETERS;
typedef struct _CO_MEDIA_PARAMETERS CO_MEDIA_PARAMETERS;
typedef struct _CO_MEDIA_PARAMETERS *PCO_MEDIA_PARAMETERS;
#if (NTDDI_VERSION < 0x06000000) && !NDIS_SUPPORT_NDIS6
typedef struct _NDIS_OFFLOAD NDIS_OFFLOAD;
typedef struct _NDIS_OFFLOAD *PNDIS_OFFLOAD;
#endif
typedef struct _NDIS_AF_LIST NDIS_AF_LIST;
typedef struct _NDIS_AF_LIST *PNDIS_AF_LIST;
typedef struct _X_FILTER ETH_FILTER;
typedef struct _X_FILTER *PETH_FILTER;
typedef struct _X_FILTER TR_FILTER;
typedef struct _X_FILTER *PTR_FILTER;
typedef struct _X_FILTER NULL_FILTER;
typedef struct _X_FILTER *PNULL_FILTER;
/* Network Plug and Play event codes */
typedef enum _NET_PNP_EVENT_CODE {
NetEventSetPower = 0,
NetEventQueryPower = 1,
NetEventQueryRemoveDevice = 2,
NetEventCancelRemoveDevice = 3,
NetEventReconfigure = 4,
NetEventBindList = 5,
NetEventBindsComplete = 6,
NetEventPnPCapabilities = 7,
NetEventPause = 8,
NetEventRestart = 9,
NetEventPortActivation = 10,
NetEventPortDeactivation = 11,
NetEventIMReEnableDevice = 12,
NetEventMaximum = 13
} NET_PNP_EVENT_CODE;
typedef NET_PNP_EVENT_CODE *PNET_PNP_EVENT_CODE;
/* Network Plug and Play event */
typedef struct _NET_PNP_EVENT {
NET_PNP_EVENT_CODE NetEvent;
PVOID Buffer;
ULONG BufferLength;
ULONG_PTR NdisReserved[4];
ULONG_PTR TransportReserved[4];
ULONG_PTR TdiReserved[4];
ULONG_PTR TdiClientReserved[4];
} NET_PNP_EVENT;
typedef NET_PNP_EVENT *PNET_PNP_EVENT;
/* Network device power states */
typedef enum _NET_DEVICE_POWER_STATE {
NetDeviceStateUnspecified = 0,
NetDeviceStateD0 = 1,
NetDeviceStateD1 = 2,
NetDeviceStateD2 = 3,
NetDeviceStateD3 = 4,
NetDeviceStateMaximum = 5
} NET_DEVICE_POWER_STATE;
typedef NET_DEVICE_POWER_STATE *PNET_DEVICE_POWER_STATE;
/* NDIS generic object */
#if NDIS_SUPPORT_NDIS6
typedef struct _NDIS_GENERIC_OBJECT {
NDIS_OBJECT_HEADER Header;
PVOID Caller;
PVOID CallersCaller;
PDRIVER_OBJECT DriverObject;
} NDIS_GENERIC_OBJECT;
typedef NDIS_GENERIC_OBJECT *PNDIS_GENERIC_OBJECT;
#endif
/* NDIS spin lock */
typedef struct _NDIS_SPIN_LOCK {
KSPIN_LOCK SpinLock;
KIRQL OldIrql;
} NDIS_SPIN_LOCK;
typedef NDIS_SPIN_LOCK *PNDIS_SPIN_LOCK;
/* NDIS event */
typedef struct _NDIS_EVENT {
KEVENT Event;
} NDIS_EVENT;
typedef NDIS_EVENT *PNDIS_EVENT;
/* NDIS procedure */
typedef VOID (NTAPI *NDIS_PROC)( struct _NDIS_WORK_ITEM *, PVOID );
/* NDIS work item */
typedef struct _NDIS_WORK_ITEM {
PVOID Context;
NDIS_PROC Routine;
UCHAR WrapperReserved[8 * sizeof( PVOID )];
} NDIS_WORK_ITEM;
typedef NDIS_WORK_ITEM *PNDIS_WORK_ITEM;
/* NDIS parameter types */
typedef enum _NDIS_PARAMETER_TYPE {
NdisParameterInteger = 0,
NdisParameterHexInteger = 1,
NdisParameterString = 2,
NdisParameterMultiString = 3,
NdisParameterBinary = 4
} NDIS_PARAMETER_TYPE;
typedef NDIS_PARAMETER_TYPE *PNDIS_PARAMETER_TYPE;
/* Binary data */
typedef struct {
USHORT Length;
PVOID Buffer;
} BINARY_DATA;
/* NDIS configuration parameter */
typedef struct _NDIS_CONFIGURATION_PARAMETER {
NDIS_PARAMETER_TYPE ParameterType;
union {
ULONG IntegerData;
NDIS_STRING StringData;
BINARY_DATA BinaryData;
} ParameterData;
} NDIS_CONFIGURATION_PARAMETER;
typedef NDIS_CONFIGURATION_PARAMETER *PNDIS_CONFIGURATION_PARAMETER;
/* NDIS processor types */
typedef enum _NDIS_PROCESSOR_TYPE {
NdisProcessorX86 = 0,
NdisProcessorMips = 1,
NdisProcessorAlpha = 2,
NdisProcessorPpc = 3,
NdisProcessorAmd64 = 4,
NdisProcessorIA64 = 5
} NDIS_PROCESSOR_TYPE;
typedef NDIS_PROCESSOR_TYPE *PNDIS_PROCESSOR_TYPE;
/* NDIS environment types */
typedef enum _NDIS_ENVIRONMENT_TYPE {
NdisEnvironmentWindows = 0,
NdisEnvironmentWindowsNt = 1
} NDIS_ENVIRONMENT_TYPE;
typedef NDIS_ENVIRONMENT_TYPE *PNDIS_ENVIRONMENT_TYPE;
/* NDIS interface types */
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,
NdisInterfaceUSB = 16,
NdisInterfaceIrda = 17,
NdisInterface1394 = 18,
NdisMaximumInterfaceType = 19
} NDIS_INTERFACE_TYPE;
typedef NDIS_INTERFACE_TYPE *PNDIS_INTERFACE_TYPE;
/* NDIS WAN line up */
typedef struct _NDIS_WAN_LINE_UP {
ULONG LinkSpeed;
ULONG MaximumTotalSize;
NDIS_WAN_QUALITY Quality;
USHORT SendWindow;
UCHAR RemoteAddress[6];
UCHAR LocalAddress[6];
ULONG ProtocolBufferLength;
PUCHAR ProtocolBuffer;
USHORT ProtocolType;
NDIS_STRING DeviceName;
} NDIS_WAN_LINE_UP;
typedef NDIS_WAN_LINE_UP *PNDIS_WAN_LINE_UP;
/* NDIS WAN line down */
typedef struct _NDIS_WAN_LINE_DOWN {
UCHAR RemoteAddress[6];
UCHAR LocalAddress[6];
} NDIS_WAN_LINE_DOWN;
typedef NDIS_WAN_LINE_DOWN *PNDIS_WAN_LINE_DOWN;
/* NDIS WAN fragment */
typedef struct _NDIS_WAN_FRAGMENT {
UCHAR RemoteAddress[6];
UCHAR LocalAddress[6];
} NDIS_WAN_FRAGMENT;
typedef NDIS_WAN_FRAGMENT *PNDIS_WAN_FRAGMENT;
/* NDIS WAN get statistics */
typedef struct _NDIS_WAN_GET_STATS {
UCHAR LocalAddress[6];
ULONG BytesSent;
ULONG BytesRcvd;
ULONG FramesSent;
ULONG FramesRcvd;
ULONG CRCErrors;
ULONG TimeoutErrors;
ULONG AlignmentErrors;
ULONG SerialOverrunErrors;
ULONG FramingErrors;
ULONG BufferOverrunErrors;
ULONG BytesTransmittedUncompressed;
ULONG BytesReceivedUncompressed;
ULONG BytesTransmittedCompressed;
ULONG BytesReceivedCompressed;
} NDIS_WAN_GET_STATS;
typedef NDIS_WAN_GET_STATS *PNDIS_WAN_GET_STATS;
/* NDIS private packet */
#if NDIS_LEGACY_DRIVER
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;
typedef NDIS_PACKET_PRIVATE *PNDIS_PACKET_PRIVATE;
#endif
/* NDIS class identifiers */
typedef enum _NDIS_CLASS_ID {
NdisClass802_3Priority = 0,
NdisClassWirelessWanMbxMailbox = 1,
NdisClassIrdaPacketInfo = 2,
NdisClassAtmAALInfo = 3
} NDIS_CLASS_ID;
/* Media specific information */
typedef struct _MEDIA_SPECIFIC_INFORMATION {
UINT NextEntryOffset;
NDIS_CLASS_ID ClassId;
UINT Size;
UCHAR ClassInformation[1];
} MEDIA_SPECIFIC_INFORMATION;
typedef MEDIA_SPECIFIC_INFORMATION *PMEDIA_SPECIFIC_INFORMATION;
/* NDIS packet OOB data */
#if NDIS_LEGACY_DRIVER
typedef struct _NDIS_PACKET_OOB_DATA {
union {
ULONGLONG TimeToSend;
ULONGLONG TimeSent;
};
ULONGLONG TimeReceived;
UINT HeaderSize;
UINT SizeMediaSpecificInfo;
PVOID MediaSpecificInformation;
NDIS_STATUS Status;
} NDIS_PACKET_OOB_DATA;
typedef NDIS_PACKET_OOB_DATA *PNDIS_PACKET_OOB_DATA;
#endif
/* NDIS packet */
#if NDIS_LEGACY_DRIVER
typedef struct _NDIS_PACKET {
NDIS_PACKET_PRIVATE Private;
union {
struct {
UCHAR MiniportReserved[2 * sizeof( PVOID )];
UCHAR WrapperReserved[2 * sizeof( PVOID )];
};
struct {
UCHAR MiniportReservedEx[3 * sizeof( PVOID )];
UCHAR WrapperReservedEx[sizeof( PVOID )];
};
struct {
UCHAR MacReserved[4 * sizeof( PVOID )];
};
};
ULONG_PTR Reserved[2];
UCHAR ProtocolReserved[1];
} NDIS_PACKET;
typedef NDIS_PACKET *PNDIS_PACKET;
typedef NDIS_PACKET **PPNDIS_PACKET;
#endif
/* NDIS per packet information */
typedef enum _NDIS_PER_PACKET_INFO {
TcpIpChecksumPacketInfo = 0,
IpSecPacketInfo = 1,
TcpLargeSendPacketInfo = 2,
ClassificationHandlePacketInfo = 3,
ScatterGatherListPacketInfo = 5,
Ieee8021QInfo = 6,
OriginalPacketInfo = 7,
PacketCancelId = 8,
OriginalNetBufferList = 9,
CachedNetBufferList = 10,
ShortPacketPaddingInfo = 11,
MaxPerPacketInfo = 12
} NDIS_PER_PACKET_INFO;
typedef NDIS_PER_PACKET_INFO *PNDIS_PER_PACKET_INFO;
#if NDIS_LEGACY_DRIVER
#define Ieee8021pPriority Ieee8021QInfo
#endif
/* NDIS packet extension */
#if NDIS_LEGACY_DRIVER
typedef struct _NDIS_PACKET_EXTENSION {
PVOID NdisPacketInfo[MaxPerPacketInfo];
} NDIS_PACKET_EXTENSION;
typedef NDIS_PACKET_EXTENSION *PNDIS_PACKET_EXTENSION;
#endif
/* NDIS packet stack */
#if NDIS_LEGACY_DRIVER
typedef struct _NDIS_PACKET_STACK {
ULONG_PTR IMReserved[2];
ULONG_PTR NdisReserved[4];
} NDIS_PACKET_STACK;
typedef NDIS_PACKET_STACK *PNDIS_PACKET_STACK;
#endif
/* NDIS TCP/IP checksum packet information */
typedef struct _NDIS_TCP_IP_CHECKSUM_PACKET_INFO {
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;
};
} NDIS_TCP_IP_CHECKSUM_PACKET_INFO;
typedef NDIS_TCP_IP_CHECKSUM_PACKET_INFO *PNDIS_TCP_IP_CHECKSUM_PACKET_INFO;
/* NDIS packet 8021Q information */
typedef struct _NDIS_PACKET_8021Q_INFO {
union {
struct {
UINT32 UserPriority : 3;
UINT32 CanonicalFormatId : 1;
UINT32 VlanId : 12;
UINT32 Reserved : 16;
} TagHeader;
PVOID Value;
};
} NDIS_PACKET_8021Q_INFO;
typedef NDIS_PACKET_8021Q_INFO *PNDIS_PACKET_8021Q_INFO;
/* NDIS WAN packet */
#if NDIS_LEGACY_DRIVER
typedef struct _NDIS_WAN_PACKET {
LIST_ENTRY WanPocketQueue;
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;
typedef NDIS_WAN_PACKET *PNDIS_WAN_PACKET;
#endif
/* NDIS request types */
typedef enum _NDIS_REQUEST_TYPE {
NdisRequestQueryInformation = 0,
NdisRequestSetInformation = 1,
NdisRequestQueryStatistics = 2,
NdisRequestOpen = 3,
NdisRequestClose = 4,
NdisRequestSend = 5,
NdisRequestTransferData = 6,
NdisRequestReset = 7,
NdisRequestGeneric1 = 8,
NdisRequestGeneric2 = 9,
NdisRequestGeneric3 = 10,
#if NDIS_SUPPORT_NDIS6
NdisRequestGeneric4 = 11,
NdisRequestMethod = 12
#else
NdisRequestGeneric4 = 11
#endif
} NDIS_REQUEST_TYPE;
typedef NDIS_REQUEST_TYPE *PNDIS_REQUEST_TYPE;
/* NDIS request */
#if NDIS_LEGACY_DRIVER
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 ) || defined( NDIS50_MINIPORT ) || \
defined( NDIS51_MINIPORT )
UCHAR NdisReserved[9 * sizeof( PVOID )];
union {
UCHAR CallMgrReserved[2 * sizeof( PVOID )];
UCHAR ProtocolReserved[2 * sizeof( PVOID )];
};
UCHAR MiniportReserved[2 * sizeof( PVOID )];
#endif
} NDIS_REQUEST;
typedef NDIS_REQUEST *PNDIS_REQUEST;
#endif
/* CO address family */
typedef struct {
NDIS_AF AddressFamily;
ULONG MajorVersion;
ULONG MinorVersion;
} CO_ADDRESS_FAMILY;
typedef CO_ADDRESS_FAMILY *PCO_ADDRESS_FAMILY;
/* CO sap */
typedef struct {
ULONG SapType;
ULONG SapLength;
UCHAR Sap[1];
} CO_SAP;
typedef CO_SAP *PCO_SAP;
/* NDIS physical address unit */
typedef struct _NDIS_PHYSICAL_ADDRESS_UNIT {
NDIS_PHYSICAL_ADDRESS PhysicalAddress;
UINT Length;
} NDIS_PHYSICAL_ADDRESS_UNIT;
typedef NDIS_PHYSICAL_ADDRESS_UNIT *PNDIS_PHYSICAL_ADDRESS_UNIT;
/* Reference */
typedef struct _REFERENCE {
KSPIN_LOCK SpinLock;
USHORT ReferenceCount;
BOOLEAN Closing;
} REFERENCE;
typedef REFERENCE *PREFERENCE;
/* NDIS read/write lock reference count */
#if NDIS_SUPPORT_60_COMPATIBLE_API
typedef struct _NDIS_RW_LOCK_REFCOUNT {
ULONG RefCount;
UCHAR cacheLine[16];
} NDIS_RW_LOCK_REFCOUNT;
typedef NDIS_RW_LOCK_REFCOUNT *PNDIS_RW_LOCK_REFCOUNT;
#endif
/* NDIS read/write lock */
#if NDIS_SUPPORT_60_COMPATIBLE_API
typedef struct _NDIS_RW_LOCK {
union {
struct {
KSPIN_LOCK SpinLock;
PVOID Context;
};
UCHAR Reserved[16];
};
union {
NDIS_RW_LOCK_REFCOUNT RefCount[MAXIMUM_PROCESSORS];
ULONG RefCountEx[sizeof( NDIS_RW_LOCK_REFCOUNT ) /
sizeof( ULONG ) * MAXIMUM_PROCESSORS];
struct {
KSPIN_LOCK RefCountLock;
volatile ULONG SharedRefCount;
volatile BOOLEAN WriterWaiting;
};
};
} NDIS_RW_LOCK;
typedef NDIS_RW_LOCK *PNDIS_RW_LOCK;
#endif
/* Lock state */
#if NDIS_SUPPORT_60_COMPATIBLE_API
typedef struct _LOCK_STATE {
USHORT LockState;
KIRQL OldIrql;
} LOCK_STATE;
typedef LOCK_STATE *PLOCK_STATE;
#endif
/* Lock state (extended version) */
#if NDIS_SUPPORT_NDIS620
typedef struct _LOCK_STATE_EX {
KIRQL OldIrql;
UCHAR LockState;
UCHAR Flags;
} LOCK_STATE_EX;
typedef LOCK_STATE_EX *PLOCK_STATE_EX;
#endif
/* NDIS timer callback */
typedef VOID (NTAPI NDIS_TIMER_FUNCTION)( PVOID, PVOID, PVOID, PVOID );
typedef NDIS_TIMER_FUNCTION *PNDIS_TIMER_FUNCTION;
/* NDIS timer */
typedef struct _NDIS_TIMER {
KTIMER Timer;
KDPC Dpc;
} NDIS_TIMER;
typedef NDIS_TIMER *PNDIS_TIMER;
/* NDIS restart attributes */
#if NDIS_SUPPORT_NDIS6
typedef struct _NDIS_RESTART_ATTRIBUTES {
struct _NDIS_RESTART_ATTRIBUTES *Next;
NDIS_OID Oid;
ULONG DataLength;
UCHAR Data[1];
} NDIS_RESTART_ATTRIBUTES;
typedef NDIS_RESTART_ATTRIBUTES *PNDIS_RESTART_ATTRIBUTES;
#endif
/* NDIS handlers */
#if NDIS_SUPPORT_NDIS6
typedef NDIS_STATUS (NTAPI SET_OPTIONS)( NDIS_HANDLE, NDIS_HANDLE );
typedef SET_OPTIONS *SET_OPTIONS_HANDLER;
typedef SET_OPTIONS MINIPORT_SET_OPTIONS;
typedef SET_OPTIONS PROTOCOL_SET_OPTIONS;
typedef SET_OPTIONS FILTER_SET_OPTIONS;
#endif
#if NDIS_LEGACY_DRIVER
typedef NDIS_STATUS (NTAPI *WAN_SEND_HANDLER)( NDIS_HANDLE, NDIS_HANDLE, PVOID );
typedef NDIS_STATUS (NTAPI *SEND_HANDLER)( NDIS_HANDLE, PNDIS_PACKET );
typedef NDIS_STATUS (NTAPI *TRANSFER_DATA_HANDLER)( NDIS_HANDLE, NDIS_HANDLE, UINT, UINT, PNDIS_PACKET, PUINT );
typedef NDIS_STATUS (NTAPI *RESET_HANDLER)( NDIS_HANDLE );
typedef NDIS_STATUS (NTAPI *REQUEST_HANDLER)( NDIS_HANDLE, PNDIS_REQUEST );
typedef VOID (NTAPI *SEND_PACKETS_HANDLER)( NDIS_HANDLE, PPNDIS_PACKET, UINT );
#endif
/* NDIS configuration object */
#if NDIS_SUPPORT_NDIS6
typedef struct _NDIS_CONFIGURATION_OBJECT {
NDIS_OBJECT_HEADER Header;
NDIS_HANDLE NdisHandle;
ULONG Flags;
} NDIS_CONFIGURATION_OBJECT;
typedef NDIS_CONFIGURATION_OBJECT *PNDIS_CONFIGURATION_OBJECT;
#endif
/* NDIS driver optional handlers */
#if NDIS_SUPPORT_NDIS6
typedef struct _NDIS_DRIVER_OPTIONAL_HANDLERS {
NDIS_OBJECT_HEADER Header;
} NDIS_DRIVER_OPTIONAL_HANDLERS;
typedef NDIS_DRIVER_OPTIONAL_HANDLERS *PNDIS_DRIVER_OPTIONAL_HANDLERS;
#endif
/* Network Plug and Play event notification */
#if NDIS_SUPPORT_NDIS6
typedef struct _NET_PNP_EVENT_NOTIFICATION {
NDIS_OBJECT_HEADER Header;
NDIS_PORT_NUMBER PortNumber;
NET_PNP_EVENT NetPnPEvent;
ULONG Flags;
} NET_PNP_EVENT_NOTIFICATION;
typedef NET_PNP_EVENT_NOTIFICATION *PNET_PNP_EVENT_NOTIFICATION;
#endif
/* NDIS object identifier request */
#if NDIS_SUPPORT_NDIS6
typedef struct _NDIS_OID_REQUEST {
NDIS_OBJECT_HEADER Header;
NDIS_REQUEST_TYPE RequestType;
NDIS_PORT_NUMBER PortNumber;
UINT Timeout;
PVOID RequestId;
NDIS_HANDLE RequestHandle;
union _REQUEST_DATA {
struct _QUERY {
NDIS_OID Oid;
PVOID InformationBuffer;
UINT InformationBufferLength;
UINT BytesWritten;
UINT BytesNeeded;
} QUERY_INFORMATION;
struct _SET {
NDIS_OID Oid;
PVOID InformationBuffer;
UINT InformationBufferLength;
UINT BytesRead;
UINT BytesNeeded;
} SET_INFORMATION;
struct _METHOD {
NDIS_OID Oid;
PVOID InformationBuffer;
ULONG InputBufferLength;
ULONG OutputBufferLength;
ULONG MethodId;
UINT BytesWritten;
UINT BytesRead;
UINT BytesNeeded;
} METHOD_INFORMATION;
} DATA;
UCHAR NdisReserved[NDIS_OID_REQUEST_NDIS_RESERVED_SIZE * sizeof( PVOID )];
UCHAR MiniportReserved[2 * sizeof( PVOID )];
UCHAR SourceReserved[2 * sizeof( PVOID )];
UCHAR SupportedRevision;
UCHAR Reserved1;
USHORT Reserved2;
} NDIS_OID_REQUEST;
typedef NDIS_OID_REQUEST *PNDIS_OID_REQUEST;
#endif
/* NDIS status indication */
#if NDIS_SUPPORT_NDIS6
typedef struct _NDIS_STATUS_INDICATION {
NDIS_OBJECT_HEADER Header;
NDIS_HANDLE SourceHandle;
NDIS_PORT_NUMBER PortNumber;
NDIS_STATUS StatusCode;
ULONG Flags;
NDIS_HANDLE DestinationHandle;
PVOID RequestId;
PVOID StatusBuffer;
ULONG StatusBufferSize;
GUID Guid;
PVOID NdisReserved[4];
} NDIS_STATUS_INDICATION;
typedef NDIS_STATUS_INDICATION *PNDIS_STATUS_INDICATION;
#endif
/* NDIS timer characteristics */
#if NDIS_SUPPORT_NDIS6
typedef struct _NDIS_TIMER_CHARACTERISTICS {
NDIS_OBJECT_HEADER Header;
ULONG AllocationTag;
PNDIS_TIMER_FUNCTION TimerFunction;
PVOID FunctionContext;
} NDIS_TIMER_CHARACTERISTICS;
typedef NDIS_TIMER_CHARACTERISTICS *PNDIS_TIMER_CHARACTERISTICS;
#endif
/* NDIS restart general attributes */
#if NDIS_SUPPORT_NDIS6
typedef struct _NDIS_RESTART_GENERAL_ATTRIBUTES {
NDIS_OBJECT_HEADER Header;
ULONG MtuSize;
ULONG64 MaxXmitLinkSpeed;
ULONG64 MaxRcvLinkSpeed;
ULONG LookaheadSize;
ULONG MacOptions;
ULONG SupportedPacketFilters;
ULONG MaxMulticastListSize;
PNDIS_RECEIVE_SCALE_CAPABILITIES RecvScaleCapabilities;
NET_IF_ACCESS_TYPE AccessType;
ULONG Flags;
NET_IF_CONNECTION_TYPE ConnectionType;
ULONG SupportedStatistics;
ULONG DataBackFillSize;
ULONG ContextBackFillSize;
PNDIS_OID SupportedOidList;
ULONG SupportedOidListLength;
#if NDIS_SUPPORT_NDIS620
ULONG MaxLookaheadSizeAccessed;
#endif
} NDIS_RESTART_GENERAL_ATTRIBUTES;
typedef NDIS_RESTART_GENERAL_ATTRIBUTES *PNDIS_RESTART_GENERAL_ATTRIBUTES;
#endif
/* NDIS processor information */
#if NDIS_SUPPORT_NDIS6 && NDIS_SUPPORT_60_COMPATIBLE_API
typedef struct _NDIS_PROCESSOR_INFO {
ULONG CpuNumber;
ULONG PhysicalPackageId;
ULONG CoreId;
ULONG HyperThreadID;
} NDIS_PROCESSOR_INFO;
typedef NDIS_PROCESSOR_INFO *PNDIS_PROCESSOR_INFO;
#endif
/* NDIS system processor information */
#if NDIS_SUPPORT_NDIS6 && NDIS_SUPPORT_60_COMPATIBLE_API
typedef struct _NDIS_SYSTEM_PROCESSOR_INFO {
NDIS_OBJECT_HEADER Header;
ULONG Flags;
NDIS_PROCESSOR_VENDOR ProcessorVendor;
ULONG NumPhysicalPackages;
ULONG NumCores;
ULONG NumCoresPerPhysicalPackage;
ULONG MaxHyperThreadingCpusPerCore;
ULONG RssBaseCpu;
ULONG RssCpuCount;
PUCHAR RssProcessors;
NDIS_PROCESSOR_INFO CpuInfo[MAXIMUM_PROC_PER_GROUP];
} NDIS_SYSTEM_PROCESSOR_INFO;
typedef NDIS_SYSTEM_PROCESSOR_INFO *PNDIS_SYSTEM_PROCESSOR_INFO;
#endif
/* NDIS filter interface */
#if (NTDDI_VERSION == 0x06000000) && (NDIS_LEGACY_DRIVER || NDIS_SUPPORT_NDIS6)
typedef struct _NDIS_FILTER_INTERFACE {
NDIS_OBJECT_HEADER Header;
ULONG Flags;
ULONG FilterType;
ULONG FilterRunType;
NET_IFINDEX IfIndex;
NET_LUID NetLuid;
NDIS_STRING FilterClass;
NDIS_STRING FilterInstanceName;
} NDIS_FILTER_INTERFACE;
typedef NDIS_FILTER_INTERFACE *PNDIS_FILTER_INTERFACE;
#endif
/* NDIS enumerate filters */
#if (NTDDI_VERSION == 0x06000000) && (NDIS_LEGACY_DRIVER || NDIS_SUPPORT_NDIS6)
typedef struct _NDIS_ENUM_FILTERS {
NDIS_OBJECT_HEADER Header;
ULONG Flags;
ULONG NumberOfFilters;
ULONG OffsetFirstFilter;
NDIS_FILTER_INTERFACE Filter[1];
} NDIS_ENUM_FILTERS;
typedef NDIS_ENUM_FILTERS *PNDIS_ENUM_FILTERS;
#endif
/* NDIS device object attributes */
#if (NTDDI_VERSION == 0x06000000) && (NDIS_LEGACY_DRIVER || NDIS_SUPPORT_NDIS6)
typedef struct _NDIS_DEVICE_OBJECT_ATTRIBUTES {
NDIS_OBJECT_HEADER Header;
PNDIS_STRING DeviceName;
PNDIS_STRING SymbolicName;
PDRIVER_DISPATCH *MajorFunctions;
ULONG ExtensionSize;
PCUNICODE_STRING DefaultSDDLString;
LPCGUID DeviceClassGuid;
} NDIS_DEVICE_OBJECT_ATTRIBUTES;
typedef NDIS_DEVICE_OBJECT_ATTRIBUTES *PNDIS_DEVICE_OBJECT_ATTRIBUTES;
#endif
/* NDIS driver wrapper handle */
#if (NTDDI_VERSION == 0x06000000) && (NDIS_LEGACY_DRIVER || NDIS_SUPPORT_NDIS6)
typedef struct _NDIS_DRIVER_WRAPPER_HANDLE {
NDIS_OBJECT_HEADER Header;
NDIS_HANDLE NdisWrapperHandle;
} NDIS_DRIVER_WRAPPER_HANDLE;
typedef NDIS_DRIVER_WRAPPER_HANDLE *PNDIS_DRIVER_WRAPPER_HANDLE;
#endif
/* NDIS shared memory usage values */
#if NDIS_SUPPORT_NDIS620
typedef enum _NDIS_SHARED_MEMORY_USAGE {
NdisSharedMemoryUsageUndefined = 0,
NdisSharedMemoryUsageXmit = 1,
NdisSharedMemoryUsageXmitHeader = 2,
NdisSharedMemoryUsageXmitData = 3,
NdisSharedMemoryUsageReceive = 4,
NdisSharedMemoryUsageReceiveLookahead = 5,
NdisSharedMemoryUsageReceivePostLookahead = 6,
NdisSharedMemoryUsageReceiveHeader = 7,
NdisSharedMemoryUsageReceiveData = 8,
NdisSharedMemoryUsageOther = 9,
NdisSharedMemoryUsageMax = 10
} NDIS_SHARED_MEMORY_USAGE;
typedef NDIS_SHARED_MEMORY_USAGE *PNDIS_SHARED_MEMORY_USAGE;
#endif
/* NDIS shared memory parameters */
#if NDIS_SUPPORT_NDIS620
typedef struct _NDIS_SHARED_MEMORY_PARAMETERS {
NDIS_OBJECT_HEADER Header;
ULONG Flags;
NDIS_RECEIVE_QUEUE_ID QueueId;
NDIS_HANDLE SharedMemoryHandle;
NODE_REQUIREMENT PreferredNode;
NDIS_SHARED_MEMORY_USAGE Usage;
ULONG Length;
PVOID VirtualAddress;
ULONG SGListBufferLength;
PSCATTER_GATHER_LIST SGListBuffer;
} NDIS_SHARED_MEMORY_PARAMETERS;
typedef NDIS_SHARED_MEMORY_PARAMETERS *PNDIS_SHARED_MEMORY_PARAMETERS;
#endif
/* Shared memory callbacks */
#if NDIS_SUPPORT_NDIS620
typedef NDIS_STATUS (NTAPI *ALLOCATE_SHARED_MEMORY_HANDLER)( NDIS_HANDLE, PNDIS_SHARED_MEMORY_PARAMETERS );
typedef VOID (NTAPI *FREE_SHARED_MEMORY_HANDLER)( NDIS_HANDLE, NDIS_HANDLE );
#endif
/* NDIS shared memory provider characteristics */
#if NDIS_SUPPORT_NDIS620
typedef struct _NDIS_SHARED_MEMORY_PROVIDER_CHARACTERISTICS {
NDIS_OBJECT_HEADER Header;
ULONG Flags;
NDIS_HANDLE ProviderContext;
ALLOCATE_SHARED_MEMORY_HANDLER AllocateSharedMemoryHandler;
FREE_SHARED_MEMORY_HANDLER FreeSharedMemoryHandler;
} NDIS_SHARED_MEMORY_PROVIDER_CHARACTERISTICS;
typedef NDIS_SHARED_MEMORY_PROVIDER_CHARACTERISTICS *PNDIS_SHARED_MEMORY_PROVIDER_CHARACTERISTICS;
#endif
/* NDIS receive queue state */
#if NDIS_SUPPORT_NDIS620
typedef struct _NDIS_RECEIVE_QUEUE_STATE {
NDIS_OBJECT_HEADER Header;
ULONG Flags;
NDIS_RECEIVE_QUEUE_ID QueueId;
NDIS_RECEIVE_QUEUE_OPERATIONAL_STATE QueueState;
} NDIS_RECEIVE_QUEUE_STATE;
typedef NDIS_RECEIVE_QUEUE_STATE *PNDIS_RECEIVE_QUEUE_STATE;
#endif
/* NDIS process scatter/gather list handler */
#if NDIS_SUPPORT_NDIS620
typedef VOID (NTAPI NDIS_PROCESS_SG_LIST)( PDEVICE_OBJECT, PVOID, PSCATTER_GATHER_LIST, PVOID );
typedef NDIS_PROCESS_SG_LIST *NDIS_PROCESS_SG_LIST_HANDLER;
#endif
/* NDIS scatter/gather list parameters */
#if NDIS_SUPPORT_NDIS620
typedef struct _NDIS_SCATTER_GATHER_LIST_PARAMETERS {
NDIS_OBJECT_HEADER Header;
ULONG Flags;
NDIS_RECEIVE_QUEUE_ID QueueId;
NDIS_SHARED_MEMORY_USAGE SharedMemoryUsage;
PMDL Mdl;
PVOID CurrentVa;
ULONG Length;
NDIS_PROCESS_SG_LIST_HANDLER ProcessSGListHandler;
PVOID Context;
PSCATTER_GATHER_LIST ScatterGatherListBuffer;
ULONG ScatterGatherListBufferSize;
ULONG ScatterGatherListBufferSizeNeeded;
} NDIS_SCATTER_GATHER_LIST_PARAMETERS;
typedef NDIS_SCATTER_GATHER_LIST_PARAMETERS *PNDIS_SCATTER_GATHER_LIST_PARAMETERS;
#endif
/* Network buffer data length */
#if NDIS_SUPPORT_NDIS6 || NDIS60
typedef union _NET_BUFFER_DATA_LENGTH {
ULONG DataLength;
SIZE_T stDataLength;
} NET_BUFFER_DATA_LENGTH;
typedef NET_BUFFER_DATA_LENGTH *PNET_BUFFER_DATA_LENGTH;
#endif
/* Network buffer data */
#if NDIS_SUPPORT_NDIS6 || NDIS60
typedef struct _NET_BUFFER_DATA {
struct _NET_BUFFER *Next;
PMDL CurrentMdl;
ULONG CurrentMdlOffset;
#ifdef __cplusplus
NET_BUFFER_DATA_LENGTH NbDataLength;
#else
NET_BUFFER_DATA_LENGTH;
#endif
PMDL MdlChain;
ULONG DataOffset;
} NET_BUFFER_DATA;
typedef NET_BUFFER_DATA *PNET_BUFFER_DATA;
#endif
/* Network buffer header */
#if NDIS_SUPPORT_NDIS6 || NDIS60
typedef union _NET_BUFFER_HEADER {
#ifdef __cplusplus
NET_BUFFER_DATA NetBufferData;
#else
NET_BUFFER_DATA;
#endif
SLIST_HEADER Link;
} NET_BUFFER_HEADER;
typedef NET_BUFFER_HEADER *PNET_BUFFER_HEADER;
#endif
/* Network buffer shared memory */
#if NDIS_SUPPORT_NDIS620
typedef struct _NET_BUFFER_SHARED_MEMORY {
struct _NET_BUFFER_SHARED_MEMORY *NextSharedMemorySegment;
ULONG SharedMemoryFlags;
NDIS_HANDLE SharedMemoryHandle;
ULONG SharedMemoryOffset;
ULONG SharedMemoryLength;
} NET_BUFFER_SHARED_MEMORY;
typedef NET_BUFFER_SHARED_MEMORY *PNET_BUFFER_SHARED_MEMORY;
#endif
/* Network buffer */
#if NDIS_SUPPORT_NDIS6 || NDIS60
typedef struct _NET_BUFFER {
#ifdef __cplusplus
NET_BUFFER_HEADER NetBufferHeader;
#else
NET_BUFFER_HEADER;
#endif
USHORT ChecksumBias;
USHORT Reserved;
NDIS_HANDLE NdisPoolHandle;
PVOID NdisReserved[2];
PVOID ProtocolReserved[6];
PVOID MiniportReserved[4];
NDIS_PHYSICAL_ADDRESS DataPhysicalAddress;
#if NDIS_SUPPORT_NDIS620
union {
PNET_BUFFER_SHARED_MEMORY SharedMemoryInfo;
PSCATTER_GATHER_LIST ScatterGatherList;
};
#endif
} NET_BUFFER;
typedef NET_BUFFER *PNET_BUFFER;
#endif
/* Network buffer list context */
#if NDIS_SUPPORT_NDIS6 || NDIS60
typedef struct _NET_BUFFER_LIST_CONTEXT {
struct _NET_BUFFER_LIST_CONTEXT *Next;
USHORT Size;
USHORT Offset;
UCHAR ContextData[];
} NET_BUFFER_LIST_CONTEXT;
typedef NET_BUFFER_LIST_CONTEXT *PNET_BUFFER_LIST_CONTEXT;
#endif
/* NDIS network buffer list information */
#if NDIS_SUPPORT_NDIS6 || NDIS60
typedef enum _NDIS_NET_BUFFER_LIST_INFO {
TcpIpChecksumNetBufferListInfo = 0,
TcpOffloadBytesTransferred = TcpIpChecksumNetBufferListInfo,
IPsecOffloadV1NetBufferListInfo = 1,
#if NDIS_SUPPORT_NDIS61
IPsecOffloadV2NetBufferListInfo = IPsecOffloadV1NetBufferListInfo,
#endif
TcpLargeSendNetBufferListInfo = 2,
TcpReceiveNoPush = TcpLargeSendNetBufferListInfo,
ClassificationHandleNetBufferListInfo = 3,
Ieee8021QNetBufferListInfo = 4,
NetBufferListCancelId = 5,
MediaSpecificInformation = 6,
NetBufferListFrameType = 7,
NetBufferListProtocolId = NetBufferListFrameType,
NetBufferListHashValue = 8,
NetBufferListHashInfo = 9,
WfpNetBufferListInfo = 10,
#if NDIS_SUPPORT_NDIS61
IPsecOffloadV2TunnelNetBufferListInfo = 11,
IPsecOffloadV2HeaderNetBufferListInfo = 12,
#endif
#if NDIS_SUPPORT_NDIS620
NetBufferListCorrelationId = 13,
NetBufferListFilteringInfo = 14,
MediaSpecificInformationEx = 15,
NblOriginalInterfaceIfIndex = 16,
NblReAuthWfpFlowContext = NblOriginalInterfaceIfIndex,
TcpReceiveBytesTransferred = 17,
#endif
MaxNetBufferListInfo = 18
} NDIS_NET_BUFFER_LIST_INFO;
typedef NDIS_NET_BUFFER_LIST_INFO *PNDIS_NET_BUFFER_LIST_INFO;
#endif
/* Network buffer list data */
#if NDIS_SUPPORT_NDIS6 || NDIS60
typedef struct _NET_BUFFER_LIST_DATA {
struct _NET_BUFFER_LIST *Next;
PNET_BUFFER FirstNetBuffer;
} NET_BUFFER_LIST_DATA;
typedef NET_BUFFER_LIST_DATA *PNET_BUFFER_LIST_DATA;
#endif
/* Network buffer list header */
#if NDIS_SUPPORT_NDIS6 || NDIS60
typedef union _NET_BUFFER_LIST_HEADER {
#ifdef __cplusplus
NET_BUFFER_LIST_DATA NetBufferListData;
#else
NET_BUFFER_LIST_DATA;
#endif
SLIST_HEADER Link;
} NET_BUFFER_LIST_HEADER;
typedef NET_BUFFER_LIST_HEADER *PNET_BUFFER_LIST_HEADER;
#endif
/* Network buffer list */
#if NDIS_SUPPORT_NDIS6 || NDIS60
typedef struct _NET_BUFFER_LIST {
#ifdef __cplusplus
NET_BUFFER_LIST_HEADER NetBufferListHeader;
#else
NET_BUFFER_LIST_HEADER;
#endif
PNET_BUFFER_LIST_CONTEXT Context;
struct _NET_BUFFER_LIST *ParentNetBufferList;
NDIS_HANDLE NdisPoolHandle;
PVOID NdisReserved[2];
PVOID ProtocolReserved[4];
PVOID MiniportReserved[2];
PVOID Scratch;
NDIS_HANDLE SourceHandle;
ULONG NblFlags;
LONG ChildRefCount;
ULONG Flags;
NDIS_STATUS Status;
PVOID NetBufferListInfo[MaxNetBufferListInfo];
} NET_BUFFER_LIST;
typedef NET_BUFFER_LIST *PNET_BUFFER_LIST;
#endif
/* NDIS network buffer list 8021Q information */
#if NDIS_SUPPORT_NDIS6 || NDIS60
typedef struct _NDIS_NET_BUFFER_LIST_8021Q_INFO {
union {
struct {
UINT32 UserPriority : 3;
UINT32 CanonicalFormatId : 1;
UINT32 VlanId : 12;
UINT32 Reserved : 16;
} TagHeader;
struct {
UINT32 UserPriority : 3;
UINT32 CanonicalFormatId : 1;
UINT32 VlanId : 12;
UINT32 WMMInfo : 4;
UINT32 Reserved : 12;
} WLanTagHeader;
PVOID Value;
};
} NDIS_NET_BUFFER_LIST_8021Q_INFO;
typedef NDIS_NET_BUFFER_LIST_8021Q_INFO *PNDIS_NET_BUFFER_LIST_8021Q_INFO;
#endif
/* NDIS network buffer list media-specific information */
#if NDIS_SUPPORT_NDIS6 || NDIS60
typedef struct _NDIS_NET_BUFFER_LIST_MEDIA_SPECIFIC_INFO {
union {
PVOID MediaSpecificInfo;
PVOID NativeWifiSpecificInfo;
PVOID Value;
};
} NDIS_NET_BUFFER_LIST_MEDIA_SPECIFIC_INFO;
typedef NDIS_NET_BUFFER_LIST_MEDIA_SPECIFIC_INFO *PNDIS_NET_BUFFER_LIST_MEDIA_SPECIFIC_INFO;
#endif
/* NDIS NBL media-specific information */
#if NDIS_SUPPORT_NDIS6 || NDIS60
typedef struct _NDIS_NBL_MEDIA_SPECIFIC_INFORMATION {
struct _NDIS_NBL_MEDIA_SPECIFIC_INFORMATION *NextEntry;
ULONG Tag;
UCHAR Data[1];
} NDIS_NBL_MEDIA_SPECIFIC_INFORMATION;
typedef NDIS_NBL_MEDIA_SPECIFIC_INFORMATION *PNDIS_NBL_MEDIA_SPECIFIC_INFORMATION;
#endif
/* NDIS NBL media-specific information (extended version) */
#if NDIS_SUPPORT_NDIS620
typedef struct _NDIS_NBL_MEDIA_SPECIFIC_INFORMATION_EX {
NDIS_OBJECT_HEADER Header;
struct _NDIS_NBL_MEDIA_SPECIFIC_INFORMATION_EX *NextEntry;
ULONG Tag;
PVOID Data;
} NDIS_NBL_MEDIA_SPECIFIC_INFORMATION_EX;
typedef NDIS_NBL_MEDIA_SPECIFIC_INFORMATION_EX *PNDIS_NBL_MEDIA_SPECIFIC_INFORMATION_EX;
#endif
/* NDIS network buffer list filtering information */
#if NDIS_SUPPORT_NDIS620
typedef struct _NDIS_NET_BUFFER_LIST_FILTERING_INFO {
union {
struct {
USHORT FilterId;
USHORT QueueId;
} FilteringInfo;
PVOID Value;
};
} NDIS_NET_BUFFER_LIST_FILTERING_INFO;
typedef NDIS_NET_BUFFER_LIST_FILTERING_INFO *PNDIS_NET_BUFFER_LIST_FILTERING_INFO;
#endif
/* Network buffer list pool parameters */
#if NDIS_SUPPORT_NDIS6 || NDIS60
typedef struct _NET_BUFFER_LIST_POOL_PARAMETERS {
NDIS_OBJECT_HEADER Header;
UCHAR ProtocolId;
BOOLEAN fAllocateNetBuffer;
USHORT ContextSize;
ULONG PoolTag;
ULONG DataSize;
} NET_BUFFER_LIST_POOL_PARAMETERS;
typedef NET_BUFFER_LIST_POOL_PARAMETERS *PNET_BUFFER_LIST_POOL_PARAMETERS;
#endif
/* Network buffer pool parameters */
#if NDIS_SUPPORT_NDIS6 || NDIS60
typedef struct _NET_BUFFER_POOL_PARAMETERS {
NDIS_OBJECT_HEADER Header;
ULONG PoolTag;
ULONG DataSize;
} NET_BUFFER_POOL_PARAMETERS;
typedef NET_BUFFER_POOL_PARAMETERS *PNET_BUFFER_POOL_PARAMETERS;
#endif
/* Network buffer callbacks */
#if NDIS_SUPPORT_NDIS6 || NDIS60
typedef PMDL (NTAPI *NET_BUFFER_ALLOCATE_MDL_HANDLER)( PULONG );
typedef VOID (NTAPI *NET_BUFFER_FREE_MDL_HANDLER)( PMDL );
#endif
/* NDIS IPsec packet information */
#if NDIS_SUPPORT_NDIS6 || NDIS60
typedef struct _NDIS_IPSEC_PACKET_INFO {
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;
};
} NDIS_IPSEC_PACKET_INFO;
typedef NDIS_IPSEC_PACKET_INFO *PNDIS_IPSEC_PACKET_INFO;
#endif
/* NDIS IPsec offload network buffer list information (version 1) */
#if NDIS_SUPPORT_NDIS6 || NDIS60
typedef struct _NDIS_IPSEC_OFFLOAD_V1_NET_BUFFER_LIST_INFO {
union {
struct {
NDIS_HANDLE OffloadHandle;
} Transmit;
struct {
USHORT SaDeleteReq : 1;
USHORT CryptoDone : 1;
USHORT NextCryptoDone : 1;
USHORT Pad : 13;
USHORT CryptoStatus;
} Receive;
};
} NDIS_IPSEC_OFFLOAD_V1_NET_BUFFER_LIST_INFO;
typedef NDIS_IPSEC_OFFLOAD_V1_NET_BUFFER_LIST_INFO *PNDIS_IPSEC_OFFLOAD_V1_NET_BUFFER_LIST_INFO;
#endif
/* NDIS tasks */
#if NDIS_LEGACY_DRIVER
typedef enum _NDIS_TASK {
TcpIpChecksumNdisTask = 0,
IpSecNdisTask = 1,
TcpLargeSendNdisTask = 2,
MaxNdisTask = 3
} NDIS_TASK;
typedef NDIS_TASK *PNDIS_TASK;
#endif
/* NDIS encapsulation values */
#if NDIS_LEGACY_DRIVER
typedef enum _NDIS_ENCAPSULATION {
UNSPECIFIED_Encapsulation = 0,
NULL_Encapsulation = 1,
IEEE_802_3_Encapsulation = 2,
IEEE_802_5_Encapsulation = 3,
LLC_SNAP_ROUTED_Encapsulation = 4,
LLC_SNAP_BRIDGED_Encapsulation = 5
} NDIS_ENCAPSULATION;
#endif
/* NDIS encapsulation format */
#if NDIS_LEGACY_DRIVER
typedef struct _NDIS_ENCAPSULATION_FORMAT {
NDIS_ENCAPSULATION Encapsulation;
struct {
ULONG FixedHeaderSize : 1;
ULONG Reserved : 31;
} Flags;
ULONG EncapsulationHeaderSize;
} NDIS_ENCAPSULATION_FORMAT;
typedef NDIS_ENCAPSULATION_FORMAT *PNDIS_ENCAPSULATION_FORMAT;
#endif
/* NDIS task offload header */
#if NDIS_LEGACY_DRIVER
typedef struct _NDIS_TASK_OFFLOAD_HEADER {
ULONG Version;
ULONG Size;
ULONG Reserved;
ULONG OffsetFirstTask;
NDIS_ENCAPSULATION_FORMAT EncapsulationFormat;
} NDIS_TASK_OFFLOAD_HEADER;
typedef NDIS_TASK_OFFLOAD_HEADER *PNDIS_TASK_OFFLOAD_HEADER;
#endif
/* NDIS task offload */
#if NDIS_LEGACY_DRIVER
typedef struct _NDIS_TASK_OFFLOAD {
ULONG Version;
ULONG Size;
NDIS_TASK Task;
ULONG OffsetNextTask;
ULONG TaskBufferLength;
UCHAR TaskBuffer[1];
} NDIS_TASK_OFFLOAD;
typedef NDIS_TASK_OFFLOAD *PNDIS_TASK_OFFLOAD;
#endif
/* NDIS task TCP/IP checksum */
#if NDIS_LEGACY_DRIVER
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;
typedef NDIS_TASK_TCP_IP_CHECKSUM *PNDIS_TASK_TCP_IP_CHECKSUM;
#endif
/* NDIS task TCP large send */
#if NDIS_LEGACY_DRIVER
typedef struct _NDIS_TASK_TCP_LARGE_SEND {
ULONG Version;
ULONG MaxOffLoadSize;
ULONG MinSegmentCount;
BOOLEAN TcpOptions;
BOOLEAN IpOptions;
} NDIS_TASK_TCP_LARGE_SEND;
typedef NDIS_TASK_TCP_LARGE_SEND *PNDIS_TASK_TCP_LARGE_SEND;
#endif
/* NDIS task IPsec */
#if NDIS_LEGACY_DRIVER
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;
typedef NDIS_TASK_IPSEC *PNDIS_TASK_IPSEC;
#endif
/* NDIS TCP large send offload network buffer list information */
#if NDIS_SUPPORT_NDIS6 || NDIS60
typedef struct _NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO {
union {
struct {
ULONG Unused : 30;
ULONG Type : 1;
ULONG Reserved2 : 1;
} Transmit;
struct {
ULONG MSS : 20;
ULONG TcpHeaderOffset : 10;
ULONG Type : 1;
ULONG Reserved2 : 1;
} LsoV1Transmit;
struct {
ULONG TcpPayload : 30;
ULONG Type : 1;
ULONG Reserved2 : 1;
} LsoV1TransmitComplete;
struct {
ULONG MSS : 20;
ULONG TcpHeaderOffset : 10;
ULONG Type : 1;
ULONG IPVersion : 1;
} LsoV2Transmit;
struct {
ULONG Reserved : 30;
ULONG Type : 1;
ULONG Reserved2 : 1;
} LsoV2TransmitComplete;
PVOID Value;
};
} NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO;
typedef NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO *PNDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_INFO;
#endif
/* NDIS TCP/IP checksum network buffer list information */
#if NDIS_SUPPORT_NDIS6 || NDIS60
typedef struct _NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO {
union {
struct {
ULONG IsIPv4 : 1;
ULONG IsIPv6 : 1;
ULONG TcpChecksum : 1;
ULONG UdpChecksum : 1;
ULONG IpHeaderChecksum : 1;
ULONG Reserved : 11;
ULONG TcpHeaderChecksum : 10;
} Transmit;
struct {
ULONG TcpChecksumFailed : 1;
ULONG UdpChecksumFailed : 1;
ULONG IpChecksumFailed : 1;
ULONG TcpChecksumSucceeded : 1;
ULONG UdpChecksumSucceeded : 1;
ULONG IpChecksumSucceeded : 1;
ULONG Loopback : 1;
} Receive;
PVOID Value;
};
} NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO;
typedef NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO *PNDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO;
#endif
/* NDIS offload encapsulation */
#if NDIS_SUPPORT_NDIS6 || NDIS60
typedef struct _NDIS_OFFLOAD_ENCAPSULATION {
NDIS_OBJECT_HEADER Header;
struct {
ULONG Enabled;
ULONG EncapsulationType;
ULONG HeaderSize;
} IPv4;
struct {
ULONG Enabled;
ULONG EncapsulationType;
ULONG HeaderSize;
} IPv6;
} NDIS_OFFLOAD_ENCAPSULATION;
typedef NDIS_OFFLOAD_ENCAPSULATION *PNDIS_OFFLOAD_ENCAPSULATION;
#endif
/* NDIS IPsec offload (version 2) network buffer list information */
#if NDIS_SUPPORT_NDIS61
typedef struct _NDIS_IPSEC_OFFLOAD_V2_NET_BUFFER_LIST_INFO {
union {
struct {
PVOID OffloadHandle;
} Transmit;
struct {
ULONG SaDeleteReq : 1;
ULONG CryptoDone : 1;
ULONG NextCryptoDone : 1;
ULONG Reserved : 13;
ULONG CryptoStatus : 16;
} Receive;
};
} NDIS_IPSEC_OFFLOAD_V2_NET_BUFFER_LIST_INFO;
typedef NDIS_IPSEC_OFFLOAD_V2_NET_BUFFER_LIST_INFO *PNDIS_IPSEC_OFFLOAD_V2_NET_BUFFER_LIST_INFO;
#endif
/* NDIS IPsec offload (version 2) tunnel network buffer list information */
#if NDIS_SUPPORT_NDIS61
typedef struct _NDIS_IPSEC_OFFLOAD_V2_TUNNEL_NET_BUFFER_LIST_INFO {
struct {
NDIS_HANDLE TunnelHandle;
} Transmit;
} NDIS_IPSEC_OFFLOAD_V2_TUNNEL_NET_BUFFER_LIST_INFO;
typedef NDIS_IPSEC_OFFLOAD_V2_TUNNEL_NET_BUFFER_LIST_INFO *PNDIS_IPSEC_OFFLOAD_V2_TUNNEL_NET_BUFFER_LIST_INFO;
#endif
/* NDIS IPsec offload (version 2) header network buffer list information */
#if NDIS_SUPPORT_NDIS61
typedef struct _NDIS_IPSEC_OFFLOAD_V2_HEADER_NET_BUFFER_LIST_INFO {
union {
struct {
ULONG NextHeader : 8;
ULONG PadLength : 8;
ULONG AhHeaderOffset : 8;
ULONG EspHeaderOffset : 8;
} Transmit;
struct {
ULONG NextHeader : 8;
ULONG PadLength : 8;
ULONG HeaderInfoSet : 1;
} Receive;
};
} NDIS_IPSEC_OFFLOAD_V2_HEADER_NET_BUFFER_LIST_INFO;
typedef NDIS_IPSEC_OFFLOAD_V2_HEADER_NET_BUFFER_LIST_INFO *PNDIS_IPSEC_OFFLOAD_V2_HEADER_NET_BUFFER_INFO;
#endif
/* IPsec offload (version 2) operations */
#if NDIS_SUPPORT_NDIS61
typedef enum _IPSEC_OFFLOAD_V2_OPERATION {
IPsecOffloadV2Ah = 1,
IPsecOffloadV2Esp = 2,
IPsecOffloadV2Max = 3
} IPSEC_OFFLOAD_V2_OPERATION;
typedef IPSEC_OFFLOAD_V2_OPERATION *PIPSEC_OFFLOAD_V2_OPERATION;
#endif
/* IPsec offload (version 2) algorithm information */
#if NDIS_SUPPORT_NDIS61
typedef struct _IPSEC_OFFLOAD_V2_ALGORITHM_INFO {
ULONG Identifier;
ULONG KeyLength;
ULONG KeyOffsetBytes;
ULONG AdditionalInfo;
} IPSEC_OFFLOAD_V2_ALGORITHM_INFO;
typedef IPSEC_OFFLOAD_V2_ALGORITHM_INFO *PIPSEC_OFFLOAD_V2_ALGORITHM_INFO;
#endif
/* IPsec offload (version 2) security association */
#if NDIS_SUPPORT_NDIS61
typedef struct _IPSEC_OFFLOAD_V2_SECURITY_ASSOCIATION {
ULONG Flags;
IPSEC_OFFLOAD_V2_OPERATION Operation;
IPSEC_OFFLOAD_V2_SPI_TYPE Spi;
IPSEC_OFFLOAD_V2_ALGORITHM_INFO AuthenticationAlgorithm;
IPSEC_OFFLOAD_V2_ALGORITHM_INFO EncryptionAlgorithm;
ULONG SequenceNumberHighOrder;
} IPSEC_OFFLOAD_V2_SECURITY_ASSOCIATION;
typedef IPSEC_OFFLOAD_V2_SECURITY_ASSOCIATION *PIPSEC_OFFLOAD_V2_SECURITY_ASSOCIATION;
#endif
/* IPsec offload (version 2) add security association */
#if NDIS_SUPPORT_NDIS61
typedef struct _IPSEC_OFFLOAD_V2_ADD_SA {
NDIS_OBJECT_HEADER Header;
struct _IPSEC_OFFLOAD_V2_ADD_SA *Next;
ULONG NumExtHdrs;
ULONG Flags;
union {
struct {
IPAddr SrcAddr;
IPAddr DestAddr;
} IPv4Endpoints;
struct {
UCHAR SrcAddr[16];
UCHAR DestAddr[16];
} IPv6Endpoints;
};
NDIS_HANDLE OffloadHandle;
ULONG UdpEspEncapsulation;
IPSEC_OFFLOAD_V2_SECURITY_ASSOCIATION SecAssoc[IPSEC_OFFLOAD_V2_MAX_EXTENSION_HEADERS];
ULONG KeyLength;
UCHAR KeyData[1];
} IPSEC_OFFLOAD_V2_ADD_SA;
typedef IPSEC_OFFLOAD_V2_ADD_SA *PIPSEC_OFFLOAD_V2_ADD_SA;
#endif
/* IPsec offload (version 2) delete security association */
#if NDIS_SUPPORT_NDIS61
typedef struct _IPSEC_OFFLOAD_V2_DELETE_SA {
NDIS_OBJECT_HEADER Header;
struct _IPSEC_OFFLOAD_V2_DELETE_SA *Next;
NDIS_HANDLE OffloadHandle;
} IPSEC_OFFLOAD_V2_DELETE_SA;
typedef IPSEC_OFFLOAD_V2_DELETE_SA *PIPSEC_OFFLOAD_V2_DELETE_SA;
#endif
/* IPsec offload (version 2) update security association */
#if NDIS_SUPPORT_NDIS61
typedef struct _IPSEC_OFFLOAD_V2_UPDATE_SA {
NDIS_OBJECT_HEADER Header;
NDIS_HANDLE OffloadHandle;
IPSEC_OFFLOAD_V2_OPERATION Operation;
IPSEC_OFFLOAD_V2_SPI_TYPE Spi;
ULONG SequenceNumberHighOrder;
} IPSEC_OFFLOAD_V2_UPDATE_SA;
typedef IPSEC_OFFLOAD_V2_UPDATE_SA *PIPSEC_OFFLOAD_V2_UPDATE_SA;
#endif
/* NDIS 4.0 protocol characteristics callbacks */
#if NDIS_LEGACY_PROTOCOL
typedef VOID (NTAPI *OPEN_ADAPTER_COMPLETE_HANDLER)( NDIS_HANDLE, NDIS_STATUS, NDIS_STATUS );
typedef VOID (NTAPI *CLOSE_ADAPTER_COMPLETE_HANDLER)( NDIS_HANDLE, NDIS_STATUS );
typedef VOID (NTAPI *RESET_COMPLETE_HANDLER)( NDIS_HANDLE, NDIS_STATUS );
typedef VOID (NTAPI *REQUEST_COMPLETE_HANDLER)( NDIS_HANDLE, PNDIS_REQUEST, NDIS_STATUS );
typedef VOID (NTAPI *STATUS_HANDLER)( NDIS_HANDLE, NDIS_STATUS, PVOID, UINT );
typedef VOID (NTAPI *STATUS_COMPLETE_HANDLER)( NDIS_HANDLE );
typedef VOID (NTAPI *SEND_COMPLETE_HANDLER)( NDIS_HANDLE, PNDIS_PACKET, NDIS_STATUS );
typedef VOID (NTAPI *WAN_SEND_COMPLETE_HANDLER)( NDIS_HANDLE, PNDIS_WAN_PACKET, NDIS_STATUS );
typedef VOID (NTAPI *TRANSFER_DATA_COMPLETE_HANDLER)( NDIS_HANDLE, PNDIS_PACKET, NDIS_STATUS, UINT );
typedef VOID (NTAPI *WAN_TRANSFER_DATA_COMPLETE_HANDLER)( VOID );
typedef NDIS_STATUS (NTAPI *RECEIVE_HANDLER)( NDIS_HANDLE, NDIS_HANDLE, PVOID, UINT, PVOID, UINT, UINT );
typedef NDIS_STATUS (NTAPI *WAN_RECEIVE_HANDLER)( NDIS_HANDLE, PUCHAR, ULONG );
typedef VOID (NTAPI *RECEIVE_COMPLETE_HANDLER)( NDIS_HANDLE );
typedef INT (NTAPI *RECEIVE_PACKET_HANDLER)( NDIS_HANDLE, PNDIS_PACKET );
typedef VOID (NTAPI *BIND_HANDLER)( PNDIS_STATUS, NDIS_HANDLE, PNDIS_STRING, PVOID, PVOID );
typedef VOID (NTAPI *UNBIND_HANDLER)( PNDIS_STATUS, NDIS_HANDLE, NDIS_HANDLE );
typedef NDIS_STATUS (NTAPI *PNP_EVENT_HANDLER)( NDIS_HANDLE, PNET_PNP_EVENT );
typedef VOID (NTAPI *UNLOAD_PROTOCOL_HANDLER)( VOID );
#endif
/* NDIS 4.0 protocol characteristics */
#if NDIS_LEGACY_PROTOCOL
typedef struct _NDIS40_PROTOCOL_CHARACTERISTICS {
UCHAR MajorNdisVersion;
UCHAR MinorNdisVersion;
USHORT Filler;
union {
UINT Reserved;
UINT Flags;
};
OPEN_ADAPTER_COMPLETE_HANDLER OpenAdapterCompleteHandler;
CLOSE_ADAPTER_COMPLETE_HANDLER CloseAdapterCompleteHandler;
union {
SEND_COMPLETE_HANDLER SendCompleteHandler;
WAN_SEND_COMPLETE_HANDLER WanSendCompleteHandler;
};
union {
TRANSFER_DATA_COMPLETE_HANDLER TransferDataCompleteHandler;
WAN_TRANSFER_DATA_COMPLETE_HANDLER WanTransferDataCompleteHandler;
};
RESET_COMPLETE_HANDLER ResetCompleteHandler;
REQUEST_COMPLETE_HANDLER RequestCompleteHandler;
union {
RECEIVE_HANDLER ReceiveHandler;
WAN_RECEIVE_HANDLER WanReceiveHandler;
};
RECEIVE_COMPLETE_HANDLER ReceiveCompleteHandler;
STATUS_HANDLER StatusHandler;
STATUS_COMPLETE_HANDLER StatusCompleteHandler;
NDIS_STRING Name;
RECEIVE_PACKET_HANDLER ReceivePacketHandler;
BIND_HANDLER BindAdapterHandler;
UNBIND_HANDLER UnbindAdapterHandler;
PNP_EVENT_HANDLER PnPEventHandler;
UNLOAD_PROTOCOL_HANDLER UnloadHandler;
} NDIS40_PROTOCOL_CHARACTERISTICS;
#endif
/* NDIS 5.0 protocol characteristics callbacks */
#if NDIS_LEGACY_DRIVER
typedef VOID (NTAPI *CO_SEND_COMPLETE_HANDLER)( NDIS_STATUS, NDIS_HANDLE, PNDIS_PACKET );
typedef VOID (NTAPI *CO_STATUS_HANDLER)( NDIS_HANDLE, NDIS_HANDLE, NDIS_STATUS, PVOID, UINT );
typedef UINT (NTAPI *CO_RECEIVE_PACKET_HANDLER)( NDIS_HANDLE, NDIS_HANDLE, PNDIS_PACKET );
typedef NDIS_STATUS (NTAPI *CO_REQUEST_HANDLER)( NDIS_HANDLE, NDIS_HANDLE, NDIS_HANDLE, PNDIS_REQUEST );
typedef VOID (NTAPI *CO_REQUEST_COMPLETE_HANDLER)( NDIS_STATUS, NDIS_HANDLE, NDIS_HANDLE, NDIS_HANDLE, PNDIS_REQUEST );
#endif
#if NDIS_SUPPORT_NDIS6 || NDIS60
typedef NDIS_STATUS (NTAPI PROTOCOL_CO_OID_REQUEST)( NDIS_HANDLE, NDIS_HANDLE, NDIS_HANDLE, PNDIS_OID_REQUEST );
typedef VOID (NTAPI PROTOCOL_CO_OID_REQUEST_COMPLETE)( NDIS_HANDLE, NDIS_HANDLE, NDIS_HANDLE, PNDIS_OID_REQUEST, NDIS_STATUS );
typedef PROTOCOL_CO_OID_REQUEST *CO_OID_REQUEST_HANDLER;
typedef PROTOCOL_CO_OID_REQUEST_COMPLETE *CO_OID_REQUEST_COMPLETE_HANDLER;
#endif
typedef NDIS_STATUS (NTAPI PROTOCOL_CO_CREATE_VC)( NDIS_HANDLE, NDIS_HANDLE, PNDIS_HANDLE );
typedef NDIS_STATUS (NTAPI PROTOCOL_CO_DELETE_VC)( NDIS_HANDLE );
typedef VOID (NTAPI PROTOCOL_CO_AF_REGISTER_NOTIFY)( NDIS_HANDLE, PCO_ADDRESS_FAMILY );
typedef PROTOCOL_CO_CREATE_VC *CO_CREATE_VC_HANDLER;
typedef PROTOCOL_CO_DELETE_VC *CO_DELETE_VC_HANDLER;
typedef PROTOCOL_CO_AF_REGISTER_NOTIFY *CO_AF_REGISTER_NOTIFY_HANDLER;
/* NDIS 5.0 protocol characteristics */
#if NDIS_LEGACY_PROTOCOL
typedef struct _NDIS50_PROTOCOL_CHARACTERISTICS {
#ifdef __cplusplus
NDIS40_PROTOCOL_CHARACTERISTICS Ndis40Chars;
#else
NDIS40_PROTOCOL_CHARACTERISTICS;
#endif
PVOID ReservedHandlers[4];
CO_SEND_COMPLETE_HANDLER CoSendCompleteHandler;
CO_STATUS_HANDLER CoStatusHandler;
CO_RECEIVE_PACKET_HANDLER CoReceivePacketHandler;
CO_AF_REGISTER_NOTIFY_HANDLER CoAfRegisterNotifyHandler;
} NDIS50_PROTOCOL_CHARACTERISTICS;
#endif
/* NDIS 6.0 protocol characteristics callbacks */
#if NDIS_SUPPORT_NDIS6 || NDIS60
typedef VOID (NTAPI PROTOCOL_CO_RECEIVE_NET_BUFFER_LISTS)( NDIS_HANDLE, NDIS_HANDLE, PNET_BUFFER_LIST, ULONG, ULONG );
typedef VOID (NTAPI PROTOCOL_CO_SEND_NET_BUFFER_LISTS_COMPLETE)( NDIS_HANDLE, PNET_BUFFER_LIST, ULONG );
typedef VOID (NTAPI PROTOCOL_CO_STATUS_EX)( NDIS_HANDLE, NDIS_HANDLE, PNDIS_STATUS_INDICATION );
typedef NDIS_STATUS (NTAPI PROTOCOL_CL_NOTIFY_CLOSE_AF)( NDIS_HANDLE );
typedef VOID (NTAPI PROTOCOL_CL_OPEN_AF_COMPLETE_EX)( NDIS_HANDLE, NDIS_HANDLE, NDIS_STATUS );
typedef VOID (NTAPI PROTOCOL_CM_NOTIFY_CLOSE_AF_COMPLETE)( NDIS_HANDLE, NDIS_STATUS );
typedef PROTOCOL_CO_RECEIVE_NET_BUFFER_LISTS *CO_RECEIVE_NET_BUFFER_LISTS_HANDLER;
typedef PROTOCOL_CO_SEND_NET_BUFFER_LISTS_COMPLETE *CO_SEND_NET_BUFFER_LISTS_COMPLETE_HANDLER;
typedef PROTOCOL_CO_STATUS_EX *CO_STATUS_HANDLER_EX;
typedef PROTOCOL_CL_NOTIFY_CLOSE_AF *CL_NOTIFY_CLOSE_AF_HANDLER;
typedef PROTOCOL_CL_OPEN_AF_COMPLETE_EX *CL_OPEN_AF_COMPLETE_HANDLER_EX;
typedef PROTOCOL_CM_NOTIFY_CLOSE_AF_COMPLETE *CM_NOTIFY_CLOSE_AF_COMPLETE_HANDLER;
#endif
/* TDI callbacks */
typedef NTSTATUS (NTAPI *TDI_REGISTER_CALLBACK)( PUNICODE_STRING, HANDLE * );
typedef NTSTATUS (NTAPI *TDI_PNP_HANDLER)( PUNICODE_STRING, PUNICODE_STRING, PUNICODE_STRING, PVOID, UINT, UINT );
/* NDIS bind parameters */
#if NDIS_SUPPORT_NDIS6 || NDIS60
typedef struct _NDIS_BIND_PARAMETERS {
NDIS_OBJECT_HEADER Header;
PNDIS_STRING ProtocolSection;
PNDIS_STRING AdapterName;
PDEVICE_OBJECT PhysicalDeviceObject;
NDIS_MEDIUM MediaType;
ULONG MtuSize;
ULONG64 MaxXmitLinkSpeed;
ULONG64 XmitLinkSpeed;
ULONG64 MaxRcvLinkSpeed;
ULONG64 RcvLinkSpeed;
NDIS_MEDIA_CONNECT_STATE MediaConnectState;
NDIS_MEDIA_DUPLEX_STATE MediaDuplexState;
ULONG LookaheadSize;
PNDIS_PNP_CAPABILITIES PowerManagementCapabilities;
ULONG SupportedPacketFilters;
ULONG MaxMulticastListSize;
USHORT MacAddressLength;
UCHAR CurrentMacAddress[NDIS_MAX_PHYS_ADDRESS_LENGTH];
NDIS_PHYSICAL_MEDIUM PhysicalMediumType;
PNDIS_RECEIVE_SCALE_CAPABILITIES RcvScaleCapabilities;
NET_LUID BoundIfNetluid;
NET_IFINDEX BoundIfIndex;
NET_LUID LowestIfNetluid;
NET_IFINDEX LowestIfIndex;
NET_IF_ACCESS_TYPE AccessType;
NET_IF_DIRECTION_TYPE DirectionType;
NET_IF_CONNECTION_TYPE ConnectionType;
NET_IFTYPE IfType;
BOOLEAN IfConnectorPresent;
PNDIS_PORT ActivePorts;
ULONG DataBackFillSize;
ULONG ContextBackFillSize;
ULONG MacOptions;
NET_IF_COMPARTMENT_ID CompartmentId;
PNDIS_OFFLOAD DefaultOffloadConfiguration;
PNDIS_TCP_CONNECTION_OFFLOAD TcpConnectionOffloadCapabilities;
PNDIS_STRING BoundAdapterName;
#if NDIS_SUPPORT_NDIS61
PNDIS_HD_SPLIT_CURRENT_CONFIG HDSplitCurrentConfig;
#endif
#if NDIS_SUPPORT_NDIS620
PNDIS_RECEIVE_FILTER_CAPABILITIES ReceiveFilterCapabilities;
PNDIS_PM_CAPABILITIES PowerManagementCapabilitiesEx;
PNDIS_NIC_SWITCH_CAPABILITIES NicSwitchCapabilities;
#endif
} NDIS_BIND_PARAMETERS;
typedef NDIS_BIND_PARAMETERS *PNDIS_BIND_PARAMETERS;
#endif
/* NDIS 6.0 protocol entry points */
#if NDIS_SUPPORT_NDIS6 || NDIS60
typedef VOID (NTAPI PROTOCOL_OID_REQUEST_COMPLETE)( NDIS_HANDLE, PNDIS_OID_REQUEST, NDIS_STATUS );
typedef VOID (NTAPI PROTOCOL_RECEIVE_NET_BUFFER_LISTS)( NDIS_HANDLE, PNET_BUFFER_LIST, NDIS_PORT_NUMBER, ULONG, ULONG );
typedef VOID (NTAPI PROTOCOL_SEND_NET_BUFFER_LISTS_COMPLETE)( NDIS_HANDLE, PNET_BUFFER_LIST, ULONG );
typedef NDIS_STATUS (NTAPI PROTOCOL_BIND_ADAPTER_EX)( NDIS_HANDLE, NDIS_HANDLE, PNDIS_BIND_PARAMETERS );
typedef NDIS_STATUS (NTAPI PROTOCOL_UNBIND_ADAPTER_EX)( NDIS_HANDLE, NDIS_HANDLE );
typedef VOID (NTAPI PROTOCOL_OPEN_ADAPTER_COMPLETE_EX)( NDIS_HANDLE, NDIS_STATUS );
typedef VOID (NTAPI PROTOCOL_CLOSE_ADAPTER_COMPLETE_EX)( NDIS_HANDLE );
typedef VOID (NTAPI PROTOCOL_STATUS_EX)( NDIS_HANDLE, PNDIS_STATUS_INDICATION );
typedef NDIS_STATUS (NTAPI PROTOCOL_NET_PNP_EVENT)( NDIS_HANDLE, PNET_PNP_EVENT_NOTIFICATION );
typedef VOID (NTAPI PROTOCOL_UNINSTALL)( VOID );
typedef PROTOCOL_OID_REQUEST_COMPLETE *OID_REQUEST_COMPLETE_HANDLER;
typedef PROTOCOL_RECEIVE_NET_BUFFER_LISTS *RECEIVE_NET_BUFFER_LISTS_HANDLER;
typedef PROTOCOL_SEND_NET_BUFFER_LISTS_COMPLETE *SEND_NET_BUFFER_LISTS_COMPLETE_HANDLER;
typedef PROTOCOL_BIND_ADAPTER_EX *BIND_HANDLER_EX;
typedef PROTOCOL_UNBIND_ADAPTER_EX *UNBIND_HANDLER_EX;
typedef PROTOCOL_OPEN_ADAPTER_COMPLETE_EX *OPEN_ADAPTER_COMPLETE_HANDLER_EX;
typedef PROTOCOL_CLOSE_ADAPTER_COMPLETE_EX *CLOSE_ADAPTER_COMPLETE_HANDLER_EX;
typedef PROTOCOL_STATUS_EX *STATUS_HANDLER_EX;
typedef PROTOCOL_NET_PNP_EVENT *NET_PNP_EVENT_HANDLER;
typedef PROTOCOL_UNINSTALL *UNINSTALL_PROTOCOL_HANDLER;
#endif
#if NDIS_SUPPORT_NDIS61
typedef VOID (NTAPI PROTOCOL_DIRECT_OID_REQUEST_COMPLETE)( NDIS_HANDLE, PNDIS_OID_REQUEST, NDIS_STATUS );
typedef PROTOCOL_DIRECT_OID_REQUEST_COMPLETE *DIRECT_OID_REQUEST_COMPLETE_HANDLER;
#endif
/* NDIS protocol CO characteristics */
#if NDIS_SUPPORT_NDIS6 || NDIS60
typedef struct _NDIS_PROTOCOL_CO_CHARACTERISTICS {
NDIS_OBJECT_HEADER Header;
ULONG Flags;
CO_STATUS_HANDLER_EX CoStatusHandlerEx;
CO_AF_REGISTER_NOTIFY_HANDLER CoAfRegisterNotifyHandler;
CO_RECEIVE_NET_BUFFER_LISTS_HANDLER CoReceiveNetBufferListsHandler;
CO_SEND_NET_BUFFER_LISTS_COMPLETE_HANDLER CoSendNetBufferListsCompleteHandler;
} NDIS_PROTOCOL_CO_CHARACTERISTICS;
typedef NDIS_PROTOCOL_CO_CHARACTERISTICS *PNDIS_PROTOCOL_CO_CHARACTERISTICS;
#endif
/* NDIS protocol driver characteristics */
#if NDIS_SUPPORT_NDIS6 || NDIS60
typedef struct _NDIS_PROTOCOL_DRIVER_CHARACTERISTICS {
NDIS_OBJECT_HEADER Header;
UCHAR MajorNdisVersion;
UCHAR MinorNdisVersion;
UCHAR MajorDriverVersion;
UCHAR MinorDriverVersion;
ULONG Flags;
NDIS_STRING Name;
SET_OPTIONS_HANDLER SetOptionsHandler;
BIND_HANDLER_EX BindAdapterHandlerEx;
UNBIND_HANDLER_EX UnbindAdapterHandlerEx;
OPEN_ADAPTER_COMPLETE_HANDLER_EX OpenAdapterCompleteHandlerEx;
CLOSE_ADAPTER_COMPLETE_HANDLER_EX CloseAdapterCompleteHandlerEx;
NET_PNP_EVENT_HANDLER NetPnPEventHandler;
UNINSTALL_PROTOCOL_HANDLER UninstallHandler;
OID_REQUEST_COMPLETE_HANDLER OidRequestCompleteHandler;
STATUS_HANDLER_EX StatusHandlerEx;
RECEIVE_NET_BUFFER_LISTS_HANDLER ReceiveNetBufferListsHandler;
SEND_NET_BUFFER_LISTS_COMPLETE_HANDLER SendNetBufferListsCompleteHandler;
#if NDIS_SUPPORT_NDIS61
DIRECT_OID_REQUEST_COMPLETE_HANDLER DirectOidRequestCompleteHandler;
#endif
} NDIS_PROTOCOL_DRIVER_CHARACTERISTICS;
typedef NDIS_PROTOCOL_DRIVER_CHARACTERISTICS *PNDIS_PROTOCOL_DRIVER_CHARACTERISTICS;
#endif
/* NDIS protocol characteristics */
#if NDIS_LEGACY_PROTOCOL
#if defined( NDIS50 ) || defined( NDIS51 )
typedef NDIS50_PROTOCOL_CHARACTERISTICS NDIS_PROTOCOL_CHARACTERISTICS;
#else
typedef NDIS40_PROTOCOL_CHARACTERISTICS NDIS_PROTOCOL_CHARACTERISTICS;
#endif
typedef NDIS_PROTOCOL_CHARACTERISTICS *PNDIS_PROTOCOL_CHARACTERISTICS;
#endif
/* NDIS open parameters */
#if NDIS_SUPPORT_NDIS6 || NDIS60
typedef struct _NDIS_OPEN_PARAMETERS {
NDIS_OBJECT_HEADER Header;
PNDIS_STRING AdapterName;
PNDIS_MEDIUM MediumArray;
UINT MediumArraySize;
PUINT SelectedMediumIndex;
PNET_FRAME_TYPE FrameTypeArray;
UINT FrameTypeArraySize;
} NDIS_OPEN_PARAMETERS;
typedef NDIS_OPEN_PARAMETERS *PNDIS_OPEN_PARAMETERS;
#endif
/* NDIS protocol pause parameters */
#if NDIS_SUPPORT_NDIS6 || NDIS60
typedef struct _NDIS_PROTOCOL_PAUSE_PARAMETERS {
NDIS_OBJECT_HEADER Header;
ULONG Flags;
ULONG PauseReason;
} NDIS_PROTOCOL_PAUSE_PARAMETERS;
typedef NDIS_PROTOCOL_PAUSE_PARAMETERS *PNDIS_PROTOCOL_PAUSE_PARAMETERS;
#endif
/* NDIS protocol restart parameters */
#if NDIS_SUPPORT_NDIS6 || NDIS60
typedef struct _NDIS_PROTOCOL_RESTART_PARAMETERS {
NDIS_OBJECT_HEADER Header;
PUCHAR FilterModuleNameBuffer;
ULONG FilterModuleNameBufferLength;
PNDIS_RESTART_ATTRIBUTES RestartAttributes;
NET_IFINDEX BoundIfIndex;
NET_LUID BoundIfNetluid;
ULONG Flags;
} NDIS_PROTOCOL_RESTART_PARAMETERS;
typedef NDIS_PROTOCOL_RESTART_PARAMETERS *PNDIS_PROTOCOL_RESTART_PARAMETERS;
#endif
/* NDIS common open block */
#if !defined( NDIS_WRAPPER ) && NDIS_LEGACY_PROTOCOL
typedef struct _NDIS_COMMON_OPEN_BLOCK {
PVOID MacHandle;
NDIS_HANDLE BindingHandle;
NDIS_HANDLE Reserved6;
NDIS_HANDLE Reserved7;
NDIS_HANDLE Reserved8;
PVOID Reserved9;
NDIS_HANDLE Reserved10;
NDIS_HANDLE Reserved11;
BOOLEAN Reserved12;
BOOLEAN Reserved2;
BOOLEAN Reserved3;
BOOLEAN Reserved4;
PVOID Reserved13;
KSPIN_LOCK Reserved5;
NDIS_HANDLE Reserved14;
union {
SEND_HANDLER SendHandler;
WAN_SEND_HANDLER WanSendHandler;
};
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;
} NDIS_COMMON_OPEN_BLOCK;
typedef NDIS_COMMON_OPEN_BLOCK *PNDIS_COMMON_OPEN_BLOCK;
#endif
/* NDIS open block */
#if !defined( NDIS_WRAPPER ) && NDIS_LEGACY_PROTOCOL
typedef struct _NDIS_OPEN_BLOCK {
#ifdef __cplusplus
NDIS_COMMON_OPEN_BLOCK NdisCommonOpenBlock;
#else
NDIS_COMMON_OPEN_BLOCK;
#endif
} NDIS_OPEN_BLOCK;
typedef NDIS_OPEN_BLOCK *PNDIS_OPEN_BLOCK;
#endif
/* NDIS miniport characteristics callbacks */
#if NDIS_LEGACY_MINIPORT
typedef BOOLEAN (NTAPI *W_CHECK_FOR_HANG_HANDLER)( NDIS_HANDLE );
typedef VOID (NTAPI *W_DISABLE_INTERRUPT_HANDLER)( NDIS_HANDLE );
typedef VOID (NTAPI *W_ENABLE_INTERRUPT_HANDLER)( NDIS_HANDLE );
typedef VOID (NTAPI *W_HALT_HANDLER)( NDIS_HANDLE );
typedef VOID (NTAPI *W_HANDLE_INTERRUPT_HANDLER)( NDIS_HANDLE );
typedef NDIS_STATUS (NTAPI *W_INITIALIZE_HANDLER)( PNDIS_STATUS, PUINT, PNDIS_MEDIUM, UINT, NDIS_HANDLE, NDIS_HANDLE );
typedef VOID (NTAPI *W_ISR_HANDLER)( PBOOLEAN, PBOOLEAN, NDIS_HANDLE );
typedef NDIS_STATUS (NTAPI *W_QUERY_INFORMATION_HANDLER)( NDIS_HANDLE, NDIS_OID, PVOID, ULONG, PULONG, PULONG );
typedef NDIS_STATUS (NTAPI *W_RECONFIGURE_HANDLER)( PNDIS_STATUS, NDIS_HANDLE, NDIS_HANDLE );
typedef NDIS_STATUS (NTAPI *W_RESET_HANDLER)( PBOOLEAN, NDIS_HANDLE );
typedef NDIS_STATUS (NTAPI *W_SEND_HANDLER)( NDIS_HANDLE, PNDIS_PACKET, UINT );
typedef NDIS_STATUS (NTAPI *WM_SEND_HANDLER)( NDIS_HANDLE, NDIS_HANDLE, PNDIS_WAN_PACKET );
typedef NDIS_STATUS (NTAPI *W_SET_INFORMATION_HANDLER)( NDIS_HANDLE, NDIS_OID, PVOID, ULONG, PULONG, PULONG );
typedef NDIS_STATUS (NTAPI *W_TRANSFER_DATA_HANDLER)( PNDIS_PACKET, PUINT, NDIS_HANDLE, NDIS_HANDLE, UINT, UINT );
typedef NDIS_STATUS (NTAPI *WM_TRANSFER_DATA_HANDLER)( VOID );
typedef VOID (NTAPI *ADAPTER_SHUTDOWN_HANDLER)( PVOID );
typedef VOID (NTAPI *W_RETURN_PACKET_HANDLER)( NDIS_HANDLE, PNDIS_PACKET );
typedef VOID (NTAPI *W_SEND_PACKETS_HANDLER)( NDIS_HANDLE, PPNDIS_PACKET, UINT );
typedef VOID (NTAPI *W_ALLOCATE_COMPLETE_HANDLER)( NDIS_HANDLE, PVOID, PNDIS_PHYSICAL_ADDRESS, ULONG, PVOID );
#endif
typedef NDIS_STATUS (NTAPI MINIPORT_CO_CREATE_VC)( NDIS_HANDLE, NDIS_HANDLE, PNDIS_HANDLE );
typedef NDIS_STATUS (NTAPI MINIPORT_CO_DELETE_VC)( NDIS_HANDLE );
typedef NDIS_STATUS (NTAPI MINIPORT_CO_ACTIVATE_VC)( NDIS_HANDLE, PCO_CALL_PARAMETERS );
typedef NDIS_STATUS (NTAPI MINIPORT_CO_DEACTIVATE_VC)( NDIS_HANDLE );
typedef MINIPORT_CO_CREATE_VC *W_CO_CREATE_VC_HANDLER;
typedef MINIPORT_CO_DELETE_VC *W_CO_DELETE_VC_HANDLER;
typedef MINIPORT_CO_ACTIVATE_VC *W_CO_ACTIVATE_VC_HANDLER;
typedef MINIPORT_CO_DEACTIVATE_VC *W_CO_DEACTIVATE_VC_HANDLER;
#if NDIS_LEGACY_MINIPORT
typedef VOID (NTAPI *W_CO_SEND_PACKETS_HANDLER)( NDIS_HANDLE, PPNDIS_PACKET, UINT );
typedef NDIS_STATUS (NTAPI *W_CO_REQUEST_HANDLER)( NDIS_HANDLE, NDIS_HANDLE, PNDIS_REQUEST );
#endif
#if NDIS_SUPPORT_NDIS6
typedef VOID (NTAPI MINIPORT_CO_SEND_NET_BUFFER_LISTS)( NDIS_HANDLE, PNET_BUFFER_LIST, ULONG );
typedef NDIS_STATUS (NTAPI MINIPORT_CO_OID_REQUEST)( NDIS_HANDLE, NDIS_HANDLE, PNDIS_OID_REQUEST );
typedef MINIPORT_CO_SEND_NET_BUFFER_LISTS *W_CO_SEND_NET_BUFFER_LISTS_HANDLER;
typedef MINIPORT_CO_OID_REQUEST *W_CO_OID_REQUEST_HANDLER;
#endif
/* NDIS device Plug and Play events */
typedef enum _NDIS_DEVICE_PNP_EVENT {
NdisDevicePnPEventQueryRemoved = 0,
NdisDevicePnPEventRemoved = 1,
NdisDevicePnPEventSurpriseRemoved = 2,
NdisDevicePnPEventQueryStopped = 3,
NdisDevicePnPEventStopped = 4,
NdisDevicePnPEventPowerProfileChanged = 5,
#if NDIS_SUPPORT_NDIS6
NdisDevicePnPEventFilterListChanged = 6,
NdisDevicePnPEventMaximum = 7
#else
NdisDevicePnPEventMaximum = 6
#endif
} NDIS_DEVICE_PNP_EVENT;
typedef NDIS_DEVICE_PNP_EVENT *PNDIS_DEVICE_PNP_EVENT;
/* NDIS power profiles */
typedef enum _NDIS_POWER_PROFILE {
NdisPowerProfileBattery = 0,
NdisPowerProfileAcOnLine = 1
} NDIS_POWER_PROFILE;
typedef NDIS_POWER_PROFILE *PNDIS_POWER_PROFILE;
/* NDIS 5.0 miniport characteristics */
#if NDIS_LEGACY_MINIPORT
typedef struct _NDIS50_MINIPORT_CHARACTERISTICS {
UCHAR MajorNdisVersion;
UCHAR MinorNdisVersion;
USHORT Filler;
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;
union {
W_SEND_HANDLER SendHandler;
WM_SEND_HANDLER WanSendHandler;
};
W_SET_INFORMATION_HANDLER SetInformationHandler;
union {
W_TRANSFER_DATA_HANDLER TransferDataHandler;
WM_TRANSFER_DATA_HANDLER WanTransferDataHandler;
};
W_RETURN_PACKET_HANDLER ReturnPacketHandler;
W_SEND_PACKETS_HANDLER SendPacketsHandler;
W_ALLOCATE_COMPLETE_HANDLER AllocateCompleteHandler;
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;
} NDIS50_MINIPORT_CHARACTERISTICS;
#endif
/* NDIS 5.1 miniport characteristics callbacks */
#if NDIS_LEGACY_MINIPORT
#if ((NDIS_MINIPORT_MAJOR_VERSION == 5) && (NDIS_MINIPORT_MINOR_VERSION == 1)) || \
NDIS_WRAPPER
typedef VOID (NTAPI *W_CANCEL_SEND_PACKETS_HANDLER)( NDIS_HANDLE, PVOID );
typedef VOID (NTAPI *W_PNP_EVENT_NOTIFY_HANDLER)( NDIS_HANDLE, NDIS_DEVICE_PNP_EVENT, PVOID, ULONG );
typedef VOID (NTAPI *W_MINIPORT_SHUTDOWN_HANDLER)( NDIS_HANDLE );
#endif
#endif
/* NDIS receive throttle parameters */
#if NDIS_SUPPORT_NDIS620
typedef struct _NDIS_RECEIVE_THROTTLE_PARAMETERS {
ULONG MaxNblsToIndicate;
ULONG MoreNblsPending : 1;
} NDIS_RECEIVE_THROTTLE_PARAMETERS;
typedef NDIS_RECEIVE_THROTTLE_PARAMETERS *PNDIS_RECEIVE_THROTTLE_PARAMETERS;
#endif
/* NDIS 6.0 miniport interrupt characteristics callbacks */
#if NDIS_SUPPORT_NDIS6
typedef BOOLEAN (NTAPI MINIPORT_ISR)( NDIS_HANDLE, PBOOLEAN, PULONG );
typedef VOID (NTAPI MINIPORT_INTERRUPT_DPC)( NDIS_HANDLE, PVOID, PVOID, PVOID );
typedef VOID (NTAPI MINIPORT_DISABLE_INTERRUPT)( NDIS_HANDLE );
typedef VOID (NTAPI MINIPORT_ENABLE_INTERRUPT)( NDIS_HANDLE );
typedef BOOLEAN (NTAPI MINIPORT_MESSAGE_INTERRUPT)( NDIS_HANDLE, ULONG, PBOOLEAN, PULONG );
#if NDIS_SUPPORT_NDIS620
typedef VOID (NTAPI MINIPORT_MESSAGE_INTERRUPT_DPC)( NDIS_HANDLE, ULONG, PVOID, PVOID, PVOID );
#else
typedef VOID (NTAPI MINIPORT_MESSAGE_INTERRUPT_DPC)( NDIS_HANDLE, ULONG, PVOID, PULONG, PULONG );
#endif
typedef VOID (NTAPI MINIPORT_DISABLE_MESSAGE_INTERRUPT)( NDIS_HANDLE, ULONG );
typedef VOID (NTAPI MINIPORT_ENABLE_MESSAGE_INTERRUPT)( NDIS_HANDLE, ULONG );
typedef BOOLEAN (NTAPI MINIPORT_SYNCHRONIZE_INTERRUPT)( NDIS_HANDLE );
typedef MINIPORT_ISR *MINIPORT_ISR_HANDLER;
typedef MINIPORT_INTERRUPT_DPC *MINIPORT_INTERRUPT_DPC_HANDLER;
typedef MINIPORT_DISABLE_INTERRUPT *MINIPORT_DISABLE_INTERRUPT_HANDLER;
typedef MINIPORT_ENABLE_INTERRUPT *MINIPORT_ENABLE_INTERRUPT_HANDLER;
typedef MINIPORT_MESSAGE_INTERRUPT *MINIPORT_MSI_ISR_HANDLER;
typedef MINIPORT_MESSAGE_INTERRUPT_DPC *MINIPORT_MSI_INTERRUPT_DPC_HANDLER;
typedef MINIPORT_DISABLE_MESSAGE_INTERRUPT *MINIPORT_DISABLE_MSI_INTERRUPT_HANDLER;
typedef MINIPORT_ENABLE_MESSAGE_INTERRUPT *MINIPORT_ENABLE_MSI_INTERRUPT_HANDLER;
typedef MINIPORT_SYNCHRONIZE_INTERRUPT *MINIPORT_SYNCHRONIZE_INTERRUPT_HANDLER;
typedef MINIPORT_SYNCHRONIZE_INTERRUPT MINIPORT_SYNCHRONIZE_MESSAGE_INTERRUPT;
typedef MINIPORT_SYNCHRONIZE_MESSAGE_INTERRUPT *MINIPORT_SYNCHRONIZE_MSI_INTERRUPT_HANDLER;
#endif
/* NDIS interrupt types */
#if NDIS_SUPPORT_NDIS6
typedef enum _NDIS_INTERRUPT_TYPE {
NDIS_CONNECT_LINE_BASED = 1,
NDIS_CONNECT_MESSAGE_BASED = 2
} NDIS_INTERRUPT_TYPE;
typedef NDIS_INTERRUPT_TYPE *PNDIS_INTERRUPT_TYPE;
#endif
/* NDIS miniport interrupt characteristics */
#if NDIS_SUPPORT_NDIS6
typedef struct _NDIS_MINIPORT_INTERRUPT_CHARACTERISTICS {
NDIS_OBJECT_HEADER Header;
MINIPORT_ISR_HANDLER InterruptHandler;
MINIPORT_INTERRUPT_DPC_HANDLER InterruptDpcHandler;
MINIPORT_DISABLE_INTERRUPT_HANDLER DisableInterruptHandler;
MINIPORT_ENABLE_INTERRUPT_HANDLER EnableInterruptHandler;
BOOLEAN MsiSupported;
BOOLEAN MsiSyncWithAllMessages;
MINIPORT_MSI_ISR_HANDLER MessageInterruptHandler;
MINIPORT_MSI_INTERRUPT_DPC_HANDLER MessageInterruptDpcHandler;
MINIPORT_DISABLE_MSI_INTERRUPT_HANDLER DisableMessageInterruptHandler;
MINIPORT_ENABLE_MSI_INTERRUPT_HANDLER EnableMessageInterruptHandler;
NDIS_INTERRUPT_TYPE InterruptType;
PIO_INTERRUPT_MESSAGE_INFO MessageInfoTable;
} NDIS_MINIPORT_INTERRUPT_CHARACTERISTICS;
typedef NDIS_MINIPORT_INTERRUPT_CHARACTERISTICS *PNDIS_MINIPORT_INTERRUPT_CHARACTERISTICS;
#endif
/* NDIS miniport Plug and Play characteristics callbacks */
#if NDIS_SUPPORT_NDIS6
typedef NDIS_STATUS (NTAPI MINIPORT_ADD_DEVICE)( NDIS_HANDLE, NDIS_HANDLE );
typedef VOID (NTAPI MINIPORT_REMOVE_DEVICE)( NDIS_HANDLE );
typedef NDIS_STATUS (NTAPI MINIPORT_PNP_IRP)( NDIS_HANDLE, PIRP );
typedef MINIPORT_ADD_DEVICE *MINIPORT_ADD_DEVICE_HANDLER;
typedef MINIPORT_REMOVE_DEVICE *MINIPORT_REMOVE_DEVICE_HANDLER;
typedef MINIPORT_PNP_IRP *MINIPORT_PNP_IRP_HANDLER;
typedef MINIPORT_PNP_IRP MINIPORT_START_DEVICE;
typedef MINIPORT_PNP_IRP *MINIPORT_START_DEVICE_HANDLER;
typedef MINIPORT_PNP_IRP MINIPORT_FILTER_RESOURCE_REQUIREMENTS;
typedef MINIPORT_PNP_IRP *MINIPORT_FILTER_RESOURCE_REQUIREMENTS_HANDLER;
#endif
/* NDIS miniport Plug and Play characteristics */
#if NDIS_SUPPORT_NDIS6
typedef struct _NDIS_MINIPORT_PNP_CHARACTERISTICS {
NDIS_OBJECT_HEADER Header;
MINIPORT_ADD_DEVICE_HANDLER MiniportAddDeviceHandler;
MINIPORT_REMOVE_DEVICE_HANDLER MiniportRemoveDeviceHandler;
MINIPORT_FILTER_RESOURCE_REQUIREMENTS_HANDLER MiniportFilterResourceRequirementsHandler;
MINIPORT_START_DEVICE_HANDLER MiniportStartDeviceHandler;
ULONG Flags;
} NDIS_MINIPORT_PNP_CHARACTERISTICS;
typedef NDIS_MINIPORT_PNP_CHARACTERISTICS *PNDIS_MINIPORT_PNP_CHARACTERISTICS;
#endif
/* NDIS 5.1 miniport characteristics */
#if NDIS_LEGACY_MINIPORT
#if ((NDIS_MINIPORT_MAJOR_VERSION == 5) && (NDIS_MINIPORT_MINOR_VERSION == 1)) || \
NDIS_WRAPPER
typedef struct _NDIS51_MINIPORT_CHARACTERISTICS {
#ifdef __cplusplus
NDIS50_MINIPORT_CHARACTERISTICS Ndis50Chars;
#else
NDIS50_MINIPORT_CHARACTERISTICS;
#endif
W_CANCEL_SEND_PACKETS_HANDLER CancelSendPacketsHandler;
W_PNP_EVENT_NOTIFY_HANDLER PnPEventNotifyHandler;
W_MINIPORT_SHUTDOWN_HANDLER AdapterShutdownHandler;
PVOID Reserved1;
PVOID Reserved2;
PVOID Reserved3;
PVOID Reserved4;
} NDIS51_MINIPORT_CHARACTERISTICS;
#endif
#endif
/* NDIS miniport interrupt */
#if NDIS_LEGACY_MINIPORT
typedef struct _NDIS_MINIPORT_INTERRUPT {
PKINTERRUPT InterruptObject;
KSPIN_LOCK DpcCountLock;
PVOID Reserved;
W_ISR_HANDLER MiniportIsr;
W_HANDLE_INTERRUPT_HANDLER MiniportDpc;
KDPC InterruptDpc;
struct _NDIS_MINIPORT_BLOCK *Miniport;
UCHAR DpcCount;
BOOLEAN Filler1;
KEVENT DpcsCompletedEvent;
BOOLEAN SharedInterrupt;
BOOLEAN IsrRequested;
} NDIS_MINIPORT_INTERRUPT;
typedef NDIS_MINIPORT_INTERRUPT *PNDIS_MINIPORT_INTERRUPT;
#endif
/* NDIS miniport timer */
typedef struct _NDIS_MINIPORT_TIMER {
KTIMER Timer;
KDPC Dpc;
PNDIS_TIMER_FUNCTION MiniportTimerFunction;
PVOID MiniportTimerContext;
struct _NDIS_MINIPORT_BLOCK *Miniport;
struct _NDIS_MINIPORT_TIMER *NextTimer;
} NDIS_MINIPORT_TIMER;
typedef NDIS_MINIPORT_TIMER *PNDIS_MINIPORT_TIMER;
/* NDIS miniport block callbacks */
#if NDIS_LEGACY_MINIPORT
typedef VOID (NTAPI *ETH_RCV_INDICATE_HANDLER)( PETH_FILTER, NDIS_HANDLE, PCHAR, PVOID, UINT, PVOID, UINT, UINT );
typedef VOID (NTAPI *ETH_RCV_COMPLETE_HANDLER)( PETH_FILTER );
typedef VOID (NTAPI *TR_RCV_INDICATE_HANDLER)( PTR_FILTER, NDIS_HANDLE, PVOID, UINT, PVOID, UINT, UINT );
typedef VOID (NTAPI *TR_RCV_COMPLETE_HANDLER)( PTR_FILTER );
typedef VOID (NTAPI *WAN_RCV_HANDLER)( PNDIS_STATUS, NDIS_HANDLE, NDIS_HANDLE, PUCHAR, ULONG );
typedef VOID (NTAPI *WAN_RCV_COMPLETE_HANDLER)( NDIS_HANDLE, NDIS_HANDLE );
typedef VOID (NTAPI *NDIS_M_SEND_COMPLETE_HANDLER)( NDIS_HANDLE, PNDIS_PACKET, NDIS_STATUS );
typedef VOID (NTAPI *NDIS_WM_SEND_COMPLETE_HANDLER)( NDIS_HANDLE, PVOID, NDIS_STATUS );
typedef VOID (NTAPI *NDIS_M_TD_COMPLETE_HANDLER)( NDIS_HANDLE, PNDIS_PACKET, NDIS_STATUS, UINT );
typedef VOID (NTAPI *NDIS_M_SEND_RESOURCES_HANDLER)( NDIS_HANDLE );
typedef VOID (NTAPI *NDIS_M_STATUS_HANDLER)( NDIS_HANDLE, NDIS_STATUS, PVOID, UINT );
typedef VOID (NTAPI *NDIS_M_STS_COMPLETE_HANDLER)( NDIS_HANDLE );
typedef VOID (NTAPI *NDIS_M_REQ_COMPLETE_HANDLER)( NDIS_HANDLE, NDIS_STATUS );
typedef VOID (NTAPI *NDIS_M_RESET_COMPLETE_HANDLER)( NDIS_HANDLE, NDIS_STATUS, BOOLEAN );
typedef BOOLEAN (FASTCALL *NDIS_M_START_SENDS)( struct _NDIS_MINIPORT_BLOCK * );
#endif
/* Callbacks for NdisMRegisterScatterGatherDma() */
#if NDIS_SUPPORT_NDIS6
typedef VOID (NTAPI MINIPORT_PROCESS_SG_LIST)( PDEVICE_OBJECT, PVOID, PSCATTER_GATHER_LIST, PVOID );
typedef VOID (NTAPI MINIPORT_ALLOCATE_SHARED_MEM_COMPLETE)( NDIS_HANDLE, PVOID, PNDIS_PHYSICAL_ADDRESS, ULONG, PVOID );
typedef MINIPORT_PROCESS_SG_LIST *MINIPORT_PROCESS_SG_LIST_HANDLER;
typedef MINIPORT_ALLOCATE_SHARED_MEM_COMPLETE *MINIPORT_ALLOCATE_SHARED_MEM_COMPLETE_HANDLER;
#endif
/* NDIS DMA description */
typedef struct _NDIS_DMA_DESCRIPTION {
BOOLEAN DemandMode;
BOOLEAN AutoInitialize;
BOOLEAN DmaChannelSpecified;
DMA_WIDTH DmaWidth;
DMA_SPEED DmaSpeed;
ULONG DmaPort;
ULONG DmaChannel;
} NDIS_DMA_DESCRIPTION;
typedef NDIS_DMA_DESCRIPTION *PNDIS_DMA_DESCRIPTION;
/* NDIS DMA block */
typedef struct _NDIS_DMA_BLOCK {
PVOID MapRegisterBase;
KEVENT AllocationEvent;
PVOID SystemAdapterObject;
PVOID Miniport;
BOOLEAN InProgress;
} NDIS_DMA_BLOCK;
typedef NDIS_DMA_BLOCK *PNDIS_DMA_BLOCK;
/* NDIS scatter/gather DMA description */
#if NDIS_SUPPORT_NDIS6
typedef struct _NDIS_SG_DMA_DESCRIPTION {
NDIS_OBJECT_HEADER Header;
ULONG Flags;
ULONG MaximumPhysicalMapping;
MINIPORT_PROCESS_SG_LIST_HANDLER ProcessSGListHandler;
MINIPORT_ALLOCATE_SHARED_MEM_COMPLETE_HANDLER SharedMemAllocateCompleteHandler;
ULONG ScatterGatherListSize;
} NDIS_SG_DMA_DESCRIPTION;
typedef NDIS_SG_DMA_DESCRIPTION *PNDIS_SG_DMA_DESCRIPTION;
#endif
/* NDIS miniport initialization parameters */
#if NDIS_SUPPORT_NDIS6
typedef struct _NDIS_MINIPORT_INIT_PARAMETERS {
NDIS_OBJECT_HEADER Header;
ULONG Flags;
PNDIS_RESOURCE_LIST AllocatedResources;
NDIS_HANDLE IMDeviceInstanceContext;
NDIS_HANDLE MiniportAddDeviceContext;
NET_IFINDEX IfIndex;
NET_LUID NetLuid;
PNDIS_PORT_AUTHENTICATION_PARAMETERS DefaultPortAuthStates;
PNDIS_PCI_DEVICE_CUSTOM_PROPERTIES PciDeviceCustomProperties;
} NDIS_MINIPORT_INIT_PARAMETERS;
typedef NDIS_MINIPORT_INIT_PARAMETERS *PNDIS_MINIPORT_INIT_PARAMETERS;
#endif
/* NDIS miniport restart parameters */
#if NDIS_SUPPORT_NDIS6
typedef struct _NDIS_MINIPORT_RESTART_PARAMETERS {
NDIS_OBJECT_HEADER Header;
PNDIS_RESTART_ATTRIBUTES RestartAttributes;
ULONG Flags;
} NDIS_MINIPORT_RESTART_PARAMETERS;
typedef NDIS_MINIPORT_RESTART_PARAMETERS *PNDIS_MINIPORT_RESTART_PARAMETERS;
#endif
/* NDIS miniport adapter registration attributes */
#if NDIS_SUPPORT_NDIS6
typedef struct _NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES {
NDIS_OBJECT_HEADER Header;
NDIS_HANDLE MiniportAdapterContext;
ULONG AttributeFlags;
UINT CheckForHangTimeInSeconds;
NDIS_INTERFACE_TYPE InterfaceType;
} NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES;
typedef NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES *PNDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES;
#endif
/* NDIS miniport add device registration attributes */
#if NDIS_SUPPORT_NDIS6
typedef struct _NDIS_MINIPORT_ADD_DEVICE_REGISTRATION_ATTRIBUTES {
NDIS_OBJECT_HEADER Header;
NDIS_HANDLE MiniportAddDeviceContext;
ULONG Flags;
} NDIS_MINIPORT_ADD_DEVICE_REGISTRATION_ATTRIBUTES;
typedef NDIS_MINIPORT_ADD_DEVICE_REGISTRATION_ATTRIBUTES *PNDIS_MINIPORT_ADD_DEVICE_REGISTRATION_ATTRIBUTES;
#endif
/* NDIS miniport adapter general attributes */
#if NDIS_SUPPORT_NDIS6
typedef struct _NDIS_MINIPORT_ADAPTER_GENERAL_ATTRIBUTES {
NDIS_OBJECT_HEADER Header;
ULONG Flags;
NDIS_MEDIUM MediaType;
NDIS_PHYSICAL_MEDIUM PhysicalMediumType;
ULONG MtuSize;
ULONG64 MaxXmitLinkSpeed;
ULONG64 XmitLinkSpeed;
ULONG64 MaxRcvLinkSpeed;
ULONG64 RcvLinkSpeed;
NDIS_MEDIA_CONNECT_STATE MediaConnectState;
NDIS_MEDIA_DUPLEX_STATE MediaDuplexState;
ULONG LookaheadSize;
PNDIS_PNP_CAPABILITIES PowerManagementCapabilities;
ULONG MacOptions;
ULONG SupportedPacketFilters;
ULONG MaxMulticastListSize;
USHORT MacAddressLength;
UCHAR PermanentMacAddress[NDIS_MAX_PHYS_ADDRESS_LENGTH];
UCHAR CurrentMacAddress[NDIS_MAX_PHYS_ADDRESS_LENGTH];
PNDIS_RECEIVE_SCALE_CAPABILITIES RecvScaleCapabilities;
NET_IF_ACCESS_TYPE AccessType;
NET_IF_DIRECTION_TYPE DirectionType;
NET_IF_CONNECTION_TYPE ConnectionType;
NET_IFTYPE IfType;
BOOLEAN IfConnectorPresent;
ULONG SupportedStatistics;
ULONG SupportedPauseFunctions;
ULONG DataBackFillSize;
ULONG ContextBackFillSize;
PNDIS_OID SupportedOidList;
ULONG SupportedOidListLength;
ULONG AutoNegotiationFlags;
#if NDIS_SUPPORT_NDIS620
PNDIS_PM_CAPABILITIES PowerManagementCapabilitiesEx;
#endif
} NDIS_MINIPORT_ADAPTER_GENERAL_ATTRIBUTES;
typedef NDIS_MINIPORT_ADAPTER_GENERAL_ATTRIBUTES *PNDIS_MINIPORT_ADAPTER_GENERAL_ATTRIBUTES;
#endif
/* NDIS header/data split attributes */
#if NDIS_SUPPORT_NDIS61
typedef struct _NDIS_HD_SPLIT_ATTRIBUTES {
NDIS_OBJECT_HEADER Header;
ULONG HardwareCapabilities;
ULONG CurrentCapabilities;
ULONG HDSplitFlags;
ULONG BackfillSize;
ULONG MaxHeaderSize;
} NDIS_HD_SPLIT_ATTRIBUTES;
typedef NDIS_HD_SPLIT_ATTRIBUTES *PNDIS_HD_SPLIT_ATTRIBUTES;
#endif
/* NDIS miniport adapter hardware assist attributes */
#if NDIS_SUPPORT_NDIS61
typedef struct _NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES {
NDIS_OBJECT_HEADER Header;
PNDIS_HD_SPLIT_ATTRIBUTES HDSplitAttributes;
#if NDIS_SUPPORT_NDIS620
PNDIS_RECEIVE_FILTER_CAPABILITIES HardwareReceiveFilterCapabilities;
PNDIS_RECEIVE_FILTER_CAPABILITIES CurrentReceiveFilterCapabilities;
PNDIS_NIC_SWITCH_CAPABILITIES HardwareNicSwitchCapabilities;
PNDIS_NIC_SWITCH_CAPABILITIES CurrentNicSwitchCapabilities;
#endif
} NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES;
typedef NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES *PNDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES;
#endif
/* NDIS miniport adapter offload attributes */
#if NDIS_SUPPORT_NDIS6
typedef struct _NDIS_MINIPORT_ADAPTER_OFFLOAD_ATTRIBUTES {
NDIS_OBJECT_HEADER Header;
PNDIS_OFFLOAD DefaultOffloadConfiguration;
PNDIS_OFFLOAD HardwareOffloadCapabilities;
PNDIS_TCP_CONNECTION_OFFLOAD DefaultTcpConnectionOffloadConfiguration;
PNDIS_TCP_CONNECTION_OFFLOAD TcpConnectionOffloadHardwareCapabilities;
} NDIS_MINIPORT_ADAPTER_OFFLOAD_ATTRIBUTES;
typedef NDIS_MINIPORT_ADAPTER_OFFLOAD_ATTRIBUTES *PNDIS_MINIPORT_ADAPTER_OFFLOAD_ATTRIBUTES;
#endif
/* NDIS miniport adapter native 802.11 attributes */
#if NDIS_SUPPORT_NDIS6
typedef struct _NDIS_MINIPORT_ADAPTER_NATIVE_802_11_ATTRIBUTES {
NDIS_OBJECT_HEADER Header;
ULONG OpModeCapability;
ULONG NumOfTXBuffers;
ULONG NumOfRXBuffers;
BOOLEAN MultiDomainCapabilityImplemented;
ULONG NumSupportedPhys;
PDOT11_PHY_ATTRIBUTES SupportedPhyAttributes;
PDOT11_EXTSTA_ATTRIBUTES ExtSTAAttributes;
#if NDIS_SUPPORT_NDIS620
PDOT11_VWIFI_ATTRIBUTES VWiFiAttributes;
PDOT11_EXTAP_ATTRIBUTES ExtAPAttributes;
#endif
} NDIS_MINIPORT_ADAPTER_NATIVE_802_11_ATTRIBUTES;
typedef NDIS_MINIPORT_ADAPTER_NATIVE_802_11_ATTRIBUTES *PNDIS_MINIPORT_ADAPTER_NATIVE_802_11_ATTRIBUTES;
#endif
/* NDIS miniport adapter attributes */
#if NDIS_SUPPORT_NDIS6
typedef union _NDIS_MINIPORT_ADAPTER_ATTRIBUTES {
NDIS_MINIPORT_ADD_DEVICE_REGISTRATION_ATTRIBUTES AddDeviceRegistrationAttributes;
NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES RegistrationAttributes;
NDIS_MINIPORT_ADAPTER_GENERAL_ATTRIBUTES GeneralAttributes;
NDIS_MINIPORT_ADAPTER_OFFLOAD_ATTRIBUTES OffloadAttributes;
NDIS_MINIPORT_ADAPTER_NATIVE_802_11_ATTRIBUTES Native_802_11_Attributes;
#if NDIS_SUPPORT_NDIS61
NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES HardwareAssistAttributes;
#endif
} NDIS_MINIPORT_ADAPTER_ATTRIBUTES;
typedef NDIS_MINIPORT_ADAPTER_ATTRIBUTES *PNDIS_MINIPORT_ADAPTER_ATTRIBUTES;
#endif
/* NDIS halt actions */
#if NDIS_SUPPORT_NDIS6
typedef enum _NDIS_HALT_ACTION {
NdisHaltDeviceDisabled = 0,
NdisHaltDeviceInstanceDeInitialized = 1,
NdisHaltDevicePoweredDown = 2,
NdisHaltDeviceSurpriseRemoved = 3,
NdisHaltDeviceFailed = 4,
NdisHaltDeviceInitializationFailed = 5,
NdisHaltDeviceStopped = 6
} NDIS_HALT_ACTION;
typedef NDIS_HALT_ACTION *PNDIS_HALT_ACTION;
#endif
/* NDIS miniport pause parameters */
#if NDIS_SUPPORT_NDIS6
typedef struct _NDIS_MINIPORT_PAUSE_PARAMETERS {
NDIS_OBJECT_HEADER Header;
ULONG Flags;
ULONG PauseReason;
} NDIS_MINIPORT_PAUSE_PARAMETERS;
typedef NDIS_MINIPORT_PAUSE_PARAMETERS *PNDIS_MINIPORT_PAUSE_PARAMETERS;
#endif
/* NDIS shutdown actions */
#if NDIS_SUPPORT_NDIS6
typedef enum _NDIS_SHUTDOWN_ACTION {
NdisShutdownPowerOff = 0,
NdisShutdownBugCheck = 1
} NDIS_SHUTDOWN_ACTION;
typedef NDIS_SHUTDOWN_ACTION *PNDIS_SHUTDOWN_ACTION;
#endif
/* Network device Plug and Play event */
#if NDIS_SUPPORT_NDIS6
typedef struct _NET_DEVICE_PNP_EVENT {
NDIS_OBJECT_HEADER Header;
NDIS_PORT_NUMBER PortNumber;
NDIS_DEVICE_PNP_EVENT DevicePnPEvent;
PVOID InformationBuffer;
ULONG InformationBufferLength;
UCHAR NdisReserved[2 * sizeof( PVOID )];
} NET_DEVICE_PNP_EVENT;
typedef NET_DEVICE_PNP_EVENT *PNET_DEVICE_PNP_EVENT;
#endif
/* Miniport handlers */
#if NDIS_SUPPORT_NDIS6
typedef NDIS_STATUS (NTAPI MINIPORT_INITIALIZE)( NDIS_HANDLE, NDIS_HANDLE, PNDIS_MINIPORT_INIT_PARAMETERS );
typedef VOID (NTAPI MINIPORT_HALT)( NDIS_HANDLE, NDIS_HALT_ACTION );
typedef NDIS_STATUS (NTAPI MINIPORT_PAUSE)( NDIS_HANDLE, PNDIS_MINIPORT_PAUSE_PARAMETERS );
typedef NDIS_STATUS (NTAPI MINIPORT_RESTART)( NDIS_HANDLE, PNDIS_MINIPORT_RESTART_PARAMETERS );
typedef NDIS_STATUS (NTAPI MINIPORT_OID_REQUEST)( NDIS_HANDLE, PNDIS_OID_REQUEST );
typedef VOID (NTAPI MINIPORT_UNLOAD)( PDRIVER_OBJECT );
typedef VOID (NTAPI MINIPORT_SHUTDOWN)( NDIS_HANDLE, NDIS_SHUTDOWN_ACTION );
typedef VOID (NTAPI MINIPORT_DEVICE_PNP_EVENT_NOTIFY)( NDIS_HANDLE, PNET_DEVICE_PNP_EVENT );
typedef VOID (NTAPI MINIPORT_CANCEL_SEND)( NDIS_HANDLE, PVOID );
typedef BOOLEAN (NTAPI MINIPORT_CHECK_FOR_HANG)( NDIS_HANDLE );
typedef NDIS_STATUS (NTAPI MINIPORT_RESET)( NDIS_HANDLE, PBOOLEAN );
typedef VOID (NTAPI MINIPORT_CANCEL_OID_REQUEST)( NDIS_HANDLE, PVOID );
typedef VOID (NTAPI MINIPORT_SEND_NET_BUFFER_LISTS)( NDIS_HANDLE, PNET_BUFFER_LIST, NDIS_PORT_NUMBER, ULONG );
typedef VOID (NTAPI MINIPORT_RETURN_NET_BUFFER_LISTS)( NDIS_HANDLE, PNET_BUFFER_LIST, ULONG );
typedef MINIPORT_INITIALIZE *MINIPORT_INITIALIZE_HANDLER;
typedef MINIPORT_HALT *MINIPORT_HALT_HANDLER;
typedef MINIPORT_PAUSE *MINIPORT_PAUSE_HANDLER;
typedef MINIPORT_RESTART *MINIPORT_RESTART_HANDLER;
typedef MINIPORT_OID_REQUEST *MINIPORT_OID_REQUEST_HANDLER;
typedef MINIPORT_UNLOAD *MINIPORT_DRIVER_UNLOAD;
typedef MINIPORT_SHUTDOWN *MINIPORT_SHUTDOWN_HANDLER;
typedef MINIPORT_DEVICE_PNP_EVENT_NOTIFY *MINIPORT_DEVICE_PNP_EVENT_NOTIFY_HANDLER;
typedef MINIPORT_CANCEL_SEND *MINIPORT_CANCEL_SEND_HANDLER;
typedef MINIPORT_CHECK_FOR_HANG *MINIPORT_CHECK_FOR_HANG_HANDLER;
typedef MINIPORT_RESET *MINIPORT_RESET_HANDLER;
typedef MINIPORT_CANCEL_OID_REQUEST *MINIPORT_CANCEL_OID_REQUEST_HANDLER;
typedef MINIPORT_SEND_NET_BUFFER_LISTS *MINIPORT_SEND_NET_BUFFER_LISTS_HANDLER;
typedef MINIPORT_RETURN_NET_BUFFER_LISTS *MINIPORT_RETURN_NET_BUFFER_LISTS_HANDLER;
#endif
#if NDIS_SUPPORT_NDIS61
typedef NDIS_STATUS (NTAPI MINIPORT_DIRECT_OID_REQUEST)( NDIS_HANDLE, PNDIS_OID_REQUEST );
typedef VOID (NTAPI MINIPORT_CANCEL_DIRECT_OID_REQUEST)( NDIS_HANDLE, PVOID );
typedef MINIPORT_DIRECT_OID_REQUEST *MINIPORT_DIRECT_OID_REQUEST_HANDLER;
typedef MINIPORT_CANCEL_DIRECT_OID_REQUEST *MINIPORT_CANCEL_DIRECT_OID_REQUEST_HANDLER;
#endif
/* NDIS miniport driver characteristics */
#if NDIS_SUPPORT_NDIS6
typedef struct _NDIS_MINIPORT_DRIVER_CHARACTERISTICS {
NDIS_OBJECT_HEADER Header;
UCHAR MajorNdisVersion;
UCHAR MinorNdisVersion;
UCHAR MajorDriverVersion;
UCHAR MinorDriverVersion;
ULONG Flags;
SET_OPTIONS_HANDLER SetOptionsHandler;
MINIPORT_INITIALIZE_HANDLER InitializeHandlerEx;
MINIPORT_HALT_HANDLER HaltHandlerEx;
MINIPORT_DRIVER_UNLOAD UnloadHandler;
MINIPORT_PAUSE_HANDLER PauseHandler;
MINIPORT_RESTART_HANDLER RestartHandler;
MINIPORT_OID_REQUEST_HANDLER OidRequestHandler;
MINIPORT_SEND_NET_BUFFER_LISTS_HANDLER SendNetBufferListsHandler;
MINIPORT_RETURN_NET_BUFFER_LISTS_HANDLER ReturnNetBufferListsHandler;
MINIPORT_CANCEL_SEND_HANDLER CancelSendHandler;
MINIPORT_CHECK_FOR_HANG_HANDLER CheckForHangHandlerEx;
MINIPORT_RESET_HANDLER ResetHandlerEx;
MINIPORT_DEVICE_PNP_EVENT_NOTIFY_HANDLER DevicePnPEventNotifyHandler;
MINIPORT_SHUTDOWN_HANDLER ShutdownHandlerEx;
MINIPORT_CANCEL_OID_REQUEST_HANDLER CancelOidRequestHandler;
#if NDIS_SUPPORT_NDIS61
MINIPORT_DIRECT_OID_REQUEST_HANDLER DirectOidRequestHandler;
MINIPORT_CANCEL_DIRECT_OID_REQUEST_HANDLER CancelDirectOidRequestHandler;
#endif
} NDIS_MINIPORT_DRIVER_CHARACTERISTICS;
typedef NDIS_MINIPORT_DRIVER_CHARACTERISTICS *PNDIS_MINIPORT_DRIVER_CHARACTERISTICS;
#endif
/* NDIS miniport CO characteristics */
#if NDIS_SUPPORT_NDIS6
typedef struct _NDIS_MINIPORT_CO_CHARACTERISTICS {
NDIS_OBJECT_HEADER Header;
ULONG Flags;
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_NET_BUFFER_LISTS_HANDLER CoSendNetBufferListsHandler;
W_CO_OID_REQUEST_HANDLER CoOidRequestHandler;
} NDIS_MINIPORT_CO_CHARACTERISTICS;
typedef NDIS_MINIPORT_CO_CHARACTERISTICS *PNDIS_MINIPORT_CO_CHARACTERISTICS;
#endif
/* FilterDBS */
typedef struct {
union {
PETH_FILTER EthDB;
PNULL_FILTER NullDB;
};
PTR_FILTER TrDB;
PVOID YYYDB;
PVOID XXXDB;
} FILTERDBS;
typedef FILTERDBS *PFILTERDBS;
/* Filter packet indication handler */
#if NDIS_LEGACY_MINIPORT
typedef VOID (NTAPI *FILTER_PACKET_INDICATION_HANDLER)( NDIS_HANDLE, PPNDIS_PACKET, UINT );
#endif
/* NDIS miniport block */
#if !NDIS_WRAPPER && NDIS_LEGACY_MINIPORT
typedef struct _NDIS_MINIPORT_BLOCK {
NDIS_OBJECT_HEADER Header;
struct _NDIS_MINIPORT_BLOCK *NextMiniport;
struct _NDIS_MINIPORT_BLOCK *BaseMiniport;
NDIS_HANDLE MiniportAdapterContext;
UNICODE_STRING Reserved4;
PVOID Reserved10;
NDIS_HANDLE OpenQueue;
REFERENCE ShortRef;
NDIS_HANDLE Reserved12;
UCHAR Padding1;
UCHAR LockAcquired;
UCHAR PmodeOpens;
UCHAR Reserved23;
KSPIN_LOCK Lock;
PNDIS_REQUEST MediaRequest;
PVOID Interrupt;
ULONG Flags;
ULONG PnPFlags;
LIST_ENTRY PacketList;
PNDIS_PACKET FirstPendingPacket;
PNDIS_PACKET ReturnPacketsQueue;
ULONG RequestBuffer;
PVOID SetMCastBuffer;
struct _NDIS_MINIPORT_BLOCK *PrimaryMiniport;
PVOID Reserved11;
PVOID BusDataContext;
ULONG Reserved3;
PCM_RESOURCE_LIST Resources;
NDIS_TIMER WakeUpDpcTimer;
UNICODE_STRING Reserved20;
UNICODE_STRING SymbolicLinkName;
ULONG CheckForHandSeconds;
USHORT CFHangTicks;
USHORT CFHangCurrentTick;
NDIS_STATUS ResetStatus;
NDIS_HANDLE ResetOpen;
#ifdef __cplusplus
FILTERDBS FilterDbs;
#else
FILTERDBS;
#endif
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 Reserved6;
PDEVICE_OBJECT Reserved7;
PDEVICE_OBJECT Reserved8;
PVOID MiniportSGDmaBlock;
PNDIS_AF_LIST CallMgrAfList;
PVOID MiniportThread;
PVOID SetInfoBuf;
USHORT SetInfoBufLen;
USHORT MaxSendPackets;
NDIS_STATUS FakeStatus;
PVOID Reserved24;
PUNICODE_STRING Reserved9;
PVOID Reserved21;
UINT MacOptions;
PNDIS_REQUEST PendingRequest;
UINT MaximumLongAddresses;
UINT MaximumShortAddresses;
UINT CurrentLookahead;
UINT MaximumLookahead;
ULONG_PTR Reserved1;
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;
PVOID Reserved2;
ETH_RCV_COMPLETE_HANDLER EthRxCompleteHandler;
TR_RCV_COMPLETE_HANDLER TrRxCompleteHandler;
PVOID Reserved22;
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;
} NDIS_MINIPORT_BLOCK;
#else
typedef struct _NDIS_MINIPORT_BLOCK NDIS_MINIPORT_BLOCK;
#endif
typedef NDIS_MINIPORT_BLOCK *PNDIS_MINIPORT_BLOCK;
/* NDIS miniport characteristics */
#if NDIS_LEGACY_MINIPORT
#ifdef NDIS51_MINIPORT
typedef struct _NDIS51_MINIPORT_CHARACTERISTICS NDIS_MINIPORT_CHARACTERISTICS;
#else
#ifdef NDIS50_MINIPORT
typedef struct _NDIS50_MINIPORT_CHARACTERISTICS NDIS_MINIPORT_CHARACTERISTICS;
#else
#ifdef NDIS40_MINIPORT
typedef struct _NDIS40_MINIPORT_CHARACTERISTICS NDIS_MINIPORT_CHARACTERISTICS;
#else
typedef struct _NDIS30_MINIPORT_CHARACTERISTICS NDIS_MINIPORT_CHARACTERISTICS;
#endif
#endif
#endif
typedef NDIS_MINIPORT_CHARACTERISTICS *PNDIS_MINIPORT_CHARACTERISTICS;
typedef NDIS_MINIPORT_CHARACTERISTICS NDIS_WAN_MINIPORT_CHARACTERISTICS;
typedef NDIS_WAN_MINIPORT_CHARACTERISTICS *PNDIS_WAN_MINIPORT_CHARACTERISTICS;
#endif
/* NDIS I/O work item routine */
#if NDIS_SUPPORT_NDIS6
typedef VOID (NTAPI NDIS_IO_WORKITEM_FUNCTION)( PVOID, NDIS_HANDLE );
typedef NDIS_IO_WORKITEM_FUNCTION *NDIS_IO_WORKITEM_ROUTINE;
#endif
/* NDIS MSIX table configuration operations */
#if NDIS_SUPPORT_NDIS61
typedef enum _NDIS_MSIX_TABLE_CONFIG {
NdisMSIXTableConfigSetTableEntry = 0,
NdisMSIXTableConfigMaskTableEntry = 1,
NdisMSIXTableConfigUnmaskTableEntry = 2,
NdisMSIXTableConfigMax = 3
} NDIS_MSIX_TABLE_OPERATION;
typedef NDIS_MSIX_TABLE_OPERATION *PNDIS_MSIX_TABLE_OPERATION;
#endif
/* NDIS MSIX configuration parameters */
#if NDIS_SUPPORT_NDIS61
typedef struct _NDIS_MSIX_CONFIG_PARAMETERS {
NDIS_OBJECT_HEADER Header;
NDIS_MSIX_TABLE_OPERATION ConfigOperation;
ULONG TableEntry;
ULONG MessageNumber;
} NDIS_MSIX_CONFIG_PARAMETERS;
typedef NDIS_MSIX_CONFIG_PARAMETERS *PNDIS_MSIX_CONFIG_PARAMETERS;
#endif
/* Client handlers */
typedef VOID (NTAPI PROTOCOL_CL_OPEN_AF_COMPLETE)( NDIS_STATUS, NDIS_HANDLE, NDIS_HANDLE );
typedef VOID (NTAPI PROTOCOL_CL_CLOSE_AF_COMPLETE)( NDIS_STATUS, NDIS_HANDLE );
typedef VOID (NTAPI PROTOCOL_CL_REGISTER_SAP_COMPLETE)( NDIS_STATUS, NDIS_HANDLE, PCO_SAP, NDIS_HANDLE );
typedef VOID (NTAPI PROTOCOL_CL_DEREGISTER_SAP_COMPLETE)( NDIS_STATUS, NDIS_HANDLE );
typedef VOID (NTAPI PROTOCOL_CL_MAKE_CALL_COMPLETE)( NDIS_STATUS, NDIS_HANDLE, NDIS_HANDLE, PCO_CALL_PARAMETERS );
typedef VOID (NTAPI PROTOCOL_CL_CLOSE_CALL_COMPLETE)( NDIS_STATUS, NDIS_HANDLE, NDIS_HANDLE );
typedef VOID (NTAPI PROTOCOL_CL_ADD_PARTY_COMPLETE)( NDIS_STATUS, NDIS_HANDLE, NDIS_HANDLE, PCO_CALL_PARAMETERS );
typedef VOID (NTAPI PROTOCOL_CL_DROP_PARTY_COMPLETE)( NDIS_STATUS, NDIS_HANDLE );
typedef NDIS_STATUS (NTAPI PROTOCOL_CL_INCOMING_CALL)( NDIS_STATUS, NDIS_STATUS, PCO_CALL_PARAMETERS );
typedef VOID (NTAPI PROTOCOL_CL_CALL_CONNECTED)( NDIS_HANDLE );
typedef VOID (NTAPI PROTOCOL_CL_INCOMING_CLOSE_CALL)( NDIS_STATUS, NDIS_HANDLE, PVOID, UINT );
typedef VOID (NTAPI PROTOCOL_CL_INCOMING_DROP_PARTY)( NDIS_STATUS, NDIS_HANDLE, PVOID, UINT );
typedef VOID (NTAPI PROTOCOL_CL_MODIFY_CALL_QOS_COMPLETE)( NDIS_STATUS, NDIS_HANDLE, PCO_CALL_PARAMETERS );
typedef VOID (NTAPI PROTOCOL_CL_INCOMING_CALL_QOS_CHANGE)( NDIS_HANDLE, PCO_CALL_PARAMETERS );
typedef PROTOCOL_CL_OPEN_AF_COMPLETE *CL_OPEN_AF_COMPLETE_HANDLER;
typedef PROTOCOL_CL_CLOSE_AF_COMPLETE *CL_CLOSE_AF_COMPLETE_HANDLER;
typedef PROTOCOL_CL_REGISTER_SAP_COMPLETE *CL_REG_SAP_COMPLETE_HANDLER;
typedef PROTOCOL_CL_DEREGISTER_SAP_COMPLETE *CL_DEREG_SAP_COMPLETE_HANDLER;
typedef PROTOCOL_CL_MAKE_CALL_COMPLETE *CL_MAKE_CALL_COMPLETE_HANDLER;
typedef PROTOCOL_CL_CLOSE_CALL_COMPLETE *CL_CLOSE_CALL_COMPLETE_HANDLER;
typedef PROTOCOL_CL_ADD_PARTY_COMPLETE *CL_ADD_PARTY_COMPLETE_HANDLER;
typedef PROTOCOL_CL_DROP_PARTY_COMPLETE *CL_DROP_PARTY_COMPLETE_HANDLER;
typedef PROTOCOL_CL_INCOMING_CALL *CL_INCOMING_CALL_HANDLER;
typedef PROTOCOL_CL_CALL_CONNECTED *CL_CALL_CONNECTED_HANDLER;
typedef PROTOCOL_CL_INCOMING_CLOSE_CALL *CL_INCOMING_CLOSE_CALL_HANDLER;
typedef PROTOCOL_CL_INCOMING_DROP_PARTY *CL_INCOMING_DROP_PARTY_HANDLER;
typedef PROTOCOL_CL_MODIFY_CALL_QOS_COMPLETE *CL_MODIFY_CALL_QOS_COMPLETE_HANDLER;
typedef PROTOCOL_CL_INCOMING_CALL_QOS_CHANGE *CL_INCOMING_CALL_QOS_CHANGE_HANDLER;
/* NDIS client characteristics */
#if NDIS_LEGACY_PROTOCOL
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;
typedef NDIS_CLIENT_CHARACTERISTICS *PNDIS_CLIENT_CHARACTERISTICS;
#endif
/* Call manager handlers */
typedef NDIS_STATUS (NTAPI PROTOCOL_CM_OPEN_AF)( NDIS_HANDLE, PCO_ADDRESS_FAMILY, NDIS_HANDLE, PNDIS_HANDLE );
typedef NDIS_STATUS (NTAPI PROTOCOL_CM_CLOSE_AF)( NDIS_HANDLE );
typedef NDIS_STATUS (NTAPI PROTOCOL_CM_REG_SAP)( NDIS_HANDLE, PCO_SAP, NDIS_HANDLE, PNDIS_HANDLE );
typedef NDIS_STATUS (NTAPI PROTOCOL_CM_DEREGISTER_SAP)( NDIS_HANDLE );
typedef NDIS_STATUS (NTAPI PROTOCOL_CM_MAKE_CALL)( NDIS_HANDLE, PCO_CALL_PARAMETERS, NDIS_HANDLE, PNDIS_HANDLE );
typedef NDIS_STATUS (NTAPI PROTOCOL_CM_CLOSE_CALL)( NDIS_HANDLE, NDIS_HANDLE, PVOID, UINT );
typedef NDIS_STATUS (NTAPI PROTOCOL_CM_MODIFY_QOS_CALL)( NDIS_HANDLE, PCO_CALL_PARAMETERS );
typedef VOID (NTAPI PROTOCOL_CM_INCOMING_CALL_COMPLETE)( NDIS_STATUS, NDIS_HANDLE, PCO_CALL_PARAMETERS );
typedef VOID (NTAPI PROTOCOL_CM_ACTIVATE_VC_COMPLETE)( NDIS_STATUS, NDIS_HANDLE, PCO_CALL_PARAMETERS );
typedef VOID (NTAPI PROTOCOL_CM_DEACTIVATE_VC_COMPLETE)( NDIS_STATUS, NDIS_HANDLE );
typedef NDIS_STATUS (NTAPI PROTOCOL_CM_ADD_PARTY)( NDIS_HANDLE, PCO_CALL_PARAMETERS, NDIS_HANDLE, PNDIS_HANDLE );
typedef NDIS_STATUS (NTAPI PROTOCOL_CM_DROP_PARTY)( NDIS_HANDLE, PVOID, UINT );
typedef PROTOCOL_CM_OPEN_AF *CM_OPEN_AF_HANDLER;
typedef PROTOCOL_CM_CLOSE_AF *CM_CLOSE_AF_HANDLER;
typedef PROTOCOL_CM_REG_SAP *CM_REG_SAP_HANDLER;
typedef PROTOCOL_CM_DEREGISTER_SAP *CM_DEREG_SAP_HANDLER;
typedef PROTOCOL_CM_MAKE_CALL *CM_MAKE_CALL_HANDLER;
typedef PROTOCOL_CM_CLOSE_CALL *CM_CLOSE_CALL_HANDLER;
typedef PROTOCOL_CM_MODIFY_QOS_CALL *CM_MODIFY_CALL_QOS_HANDLER;
typedef PROTOCOL_CM_INCOMING_CALL_COMPLETE *CM_INCOMING_CALL_COMPLETE_HANDLER;
typedef PROTOCOL_CM_ACTIVATE_VC_COMPLETE *CM_ACTIVATE_VC_COMPLETE_HANDLER;
typedef PROTOCOL_CM_DEACTIVATE_VC_COMPLETE *CM_DEACTIVATE_VC_COMPLETE_HANDLER;
typedef PROTOCOL_CM_ADD_PARTY *CM_ADD_PARTY_HANDLER;
typedef PROTOCOL_CM_DROP_PARTY *CM_DROP_PARTY_HANDLER;
/* NDIS call manager characteristics */
#if NDIS_LEGACY_DRIVER
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;
typedef NDIS_CALL_MANAGER_CHARACTERISTICS *PNDIS_CALL_MANAGER_CHARACTERISTICS;
#endif
/* CO address */
typedef struct _CO_ADDRESS {
ULONG AddressSize;
UCHAR Address[1];
} CO_ADDRESS;
typedef CO_ADDRESS *PCO_ADDRESS;
/* CO address list */
typedef struct _CO_ADDRESS_LIST {
ULONG NumberOfAddressesAvailable;
ULONG NumberOfAddresses;
CO_ADDRESS AddressList;
} CO_ADDRESS_LIST;
typedef CO_ADDRESS_LIST *PCO_ADDRESS_LIST;
/* CO specific parameters */
typedef struct _CO_SPECIFIC_PARAMETERS {
ULONG ParamType;
ULONG Length;
UCHAR Parameters[1];
} CO_SPECIFIC_PARAMETERS;
typedef CO_SPECIFIC_PARAMETERS *PCO_SPECIFIC_PARAMETERS;
/* CO call manager parameters */
typedef struct _CO_CALL_MANAGER_PARAMETERS {
FLOWSPEC Transmit;
FLOWSPEC Receive;
CO_SPECIFIC_PARAMETERS CallMgrSpecific;
} CO_CALL_MANAGER_PARAMETERS;
typedef CO_CALL_MANAGER_PARAMETERS *PCO_CALL_MANAGER_PARAMETERS;
/* CO media parameters */
typedef struct _CO_MEDIA_PARAMETERS {
ULONG Flags;
ULONG ReceivePriority;
ULONG ReceiveSizeHint;
CO_SPECIFIC_PARAMETERS MediaSpecific;
} CO_MEDIA_PARAMETERS;
typedef CO_MEDIA_PARAMETERS *PCO_MEDIA_PARAMETERS;
/* CO call parameters */
typedef struct _CO_CALL_PARAMETERS {
ULONG Flags;
PCO_CALL_MANAGER_PARAMETERS CallMgrParameters;
PCO_MEDIA_PARAMETERS MediaParameters;
} CO_CALL_PARAMETERS;
typedef CO_CALL_PARAMETERS *PCO_CALL_PARAMETERS;
/* CO PVC */
typedef struct _CO_PVC {
NDIS_HANDLE NdisAfHandle;
CO_SPECIFIC_PARAMETERS PvcParameters;
} CO_PVC;
typedef CO_PVC *PCO_PVC;
/* Variable string */
#ifndef __NDISTAPI_VAR_STRING_DECLARED
#define __NDISTAPI_VAR_STRING_DECLARED
typedef struct _VAR_STRING {
ULONG ulTotalSize;
ULONG ulNeededSize;
ULONG ulUsedSize;
ULONG ulStringFormat;
ULONG ulStringSize;
ULONG ulStringOffset;
} VAR_STRING;
typedef VAR_STRING *PVAR_STRING;
#endif
/* NDIS CO client optional handlers */
#if NDIS_SUPPORT_NDIS6
typedef struct _NDIS_CO_CLIENT_OPTIONAL_HANDLERS {
NDIS_OBJECT_HEADER Header;
ULONG Reserved;
CO_CREATE_VC_HANDLER ClCreateVcHandler;
CO_DELETE_VC_HANDLER ClDeleteVcHandler;
CO_OID_REQUEST_HANDLER ClOidRequestHandler;
CO_OID_REQUEST_COMPLETE_HANDLER ClOidRequestCompleteHandler;
CL_OPEN_AF_COMPLETE_HANDLER_EX ClOpenAfCompleteHandlerEx;
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;
CL_NOTIFY_CLOSE_AF_HANDLER ClNotifyCloseAfHandler;
} NDIS_CO_CLIENT_OPTIONAL_HANDLERS;
typedef NDIS_CO_CLIENT_OPTIONAL_HANDLERS *PNDIS_CO_CLIENT_OPTIONAL_HANDLERS;
#endif
/* NDIS CO call manager optional handlers */
#if NDIS_SUPPORT_NDIS6
typedef struct _NDIS_CO_CALL_MANAGER_OPTIONAL_HANDLERS {
NDIS_OBJECT_HEADER Header;
ULONG 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_OID_REQUEST_HANDLER CmOidRequestHandler;
CO_OID_REQUEST_COMPLETE_HANDLER CmOidRequestCompleteHandler;
CM_NOTIFY_CLOSE_AF_COMPLETE_HANDLER CmNotifyCloseAfCompleteHandler;
} NDIS_CO_CALL_MANAGER_OPTIONAL_HANDLERS;
typedef NDIS_CO_CALL_MANAGER_OPTIONAL_HANDLERS *PNDIS_CO_CALL_MANAGER_OPTIONAL_HANDLERS;
#endif
/* NDIS filter attach parameters */
#if NDIS_SUPPORT_NDIS6
typedef struct _NDIS_FILTER_ATTACH_PARAMETERS {
NDIS_OBJECT_HEADER Header;
NET_IFINDEX IfIndex;
NET_LUID NetLuid;
PNDIS_STRING FilterModuleGuidName;
NET_IFINDEX BaseMiniportIfIndex;
PNDIS_STRING BaseMiniportInstanceName;
PNDIS_STRING BaseMiniportName;
NDIS_MEDIA_CONNECT_STATE MediaConnectState;
NET_IF_MEDIA_DUPLEX_STATE MediaDuplexState;
ULONG64 XmitLinkSpeed;
ULONG64 RcvLinkSpeed;
NDIS_MEDIUM MiniportMediumType;
NDIS_PHYSICAL_MEDIUM MiniportPhysicalMediaType;
NDIS_HANDLE MiniportMediaSpecificAttributes;
PNDIS_OFFLOAD DefaultOffloadConfiguration;
USHORT MacAddressLength;
UCHAR CurrentMacAddress[NDIS_MAX_PHYS_ADDRESS_LENGTH];
NET_LUID BaseMiniportNetLuid;
NET_IFINDEX LowerIfIndex;
NET_LUID LowerIfNetLuid;
ULONG Flags;
#if NDIS_SUPPORT_NDIS61
PNDIS_HD_SPLIT_CURRENT_CONFIG HDSplitCurrentConfig;
#endif
#if NDIS_SUPPORT_NDIS620
PNDIS_RECEIVE_FILTER_CAPABILITIES ReceiveFilterCapabilities;
PDEVICE_OBJECT MiniportPhysicalDeviceObject;
PNDIS_NIC_SWITCH_CAPABILITIES NicSwitchCapabilities;
#endif
} NDIS_FILTER_ATTACH_PARAMETERS;
typedef NDIS_FILTER_ATTACH_PARAMETERS *PNDIS_FILTER_ATTACH_PARAMETERS;
#endif
/* NDIS filter restart parameters */
#if NDIS_SUPPORT_NDIS6
typedef struct _NDIS_FILTER_RESTART_PARAMETERS {
NDIS_OBJECT_HEADER Header;
NDIS_MEDIUM MiniportMediaType;
NDIS_PHYSICAL_MEDIUM MiniportPhysicalMediaType;
PNDIS_RESTART_ATTRIBUTES RestartAttributes;
NET_IFINDEX LowerIfIndex;
NET_LUID LowerIfNetLuid;
ULONG Flags;
} NDIS_FILTER_RESTART_PARAMETERS;
typedef NDIS_FILTER_RESTART_PARAMETERS *PNDIS_FILTER_RESTART_PARAMETERS;
#endif
/* NDIS filter pause parameters */
#if NDIS_SUPPORT_NDIS6
typedef struct _NDIS_FILTER_PAUSE_PARAMETERS {
NDIS_OBJECT_HEADER Header;
ULONG Flags;
ULONG PauseReason;
} NDIS_FILTER_PAUSE_PARAMETERS;
typedef NDIS_FILTER_PAUSE_PARAMETERS *PNDIS_FILTER_PAUSE_PARAMETERS;
#endif
/* Filter handlers */
#if NDIS_SUPPORT_NDIS6
typedef NDIS_STATUS (NTAPI FILTER_ATTACH)( NDIS_HANDLE, NDIS_HANDLE, PNDIS_FILTER_ATTACH_PARAMETERS );
typedef VOID (NTAPI FILTER_DETACH)( NDIS_HANDLE );
typedef NDIS_STATUS (NTAPI FILTER_SET_FILTER_MODULE_OPTIONS)( NDIS_HANDLE );
typedef NDIS_STATUS (NTAPI FILTER_RESTART)( NDIS_HANDLE, PNDIS_FILTER_RESTART_PARAMETERS );
typedef NDIS_STATUS (NTAPI FILTER_PAUSE)( NDIS_HANDLE, PNDIS_FILTER_PAUSE_PARAMETERS );
typedef NDIS_STATUS (NTAPI FILTER_OID_REQUEST)( NDIS_HANDLE, PNDIS_OID_REQUEST );
typedef VOID (NTAPI FILTER_CANCEL_OID_REQUEST)( NDIS_HANDLE, PVOID );
typedef VOID (NTAPI FILTER_SEND_NET_BUFFER_LISTS)( NDIS_HANDLE, PNET_BUFFER_LIST, NDIS_PORT_NUMBER, ULONG );
typedef VOID (NTAPI FILTER_CANCEL_SEND_NET_BUFFER_LISTS)( NDIS_HANDLE, PVOID );
typedef VOID (NTAPI FILTER_RETURN_NET_BUFFER_LISTS)( NDIS_HANDLE, PNET_BUFFER_LIST, ULONG );
typedef VOID (NTAPI FILTER_SEND_NET_BUFFER_LISTS_COMPLETE)( NDIS_HANDLE, PNET_BUFFER_LIST, ULONG );
typedef VOID (NTAPI FILTER_RECEIVE_NET_BUFFER_LISTS)( NDIS_HANDLE, PNET_BUFFER_LIST, NDIS_PORT_NUMBER, ULONG, ULONG );
typedef VOID (NTAPI FILTER_DEVICE_PNP_EVENT_NOTIFY)( NDIS_HANDLE, PNET_DEVICE_PNP_EVENT );
typedef NDIS_STATUS (NTAPI FILTER_NET_PNP_EVENT)( NDIS_HANDLE, PNET_PNP_EVENT_NOTIFICATION );
typedef VOID (NTAPI FILTER_STATUS)( NDIS_HANDLE, PNDIS_STATUS_INDICATION );
typedef VOID (NTAPI FILTER_OID_REQUEST_COMPLETE)( NDIS_HANDLE, PNDIS_OID_REQUEST, NDIS_STATUS );
typedef FILTER_ATTACH *FILTER_ATTACH_HANDLER;
typedef FILTER_DETACH *FILTER_DETACH_HANDLER;
typedef FILTER_SET_FILTER_MODULE_OPTIONS *FILTER_SET_FILTER_MODULE_OPTIONS_HANDLER;
typedef FILTER_RESTART *FILTER_RESTART_HANDLER;
typedef FILTER_PAUSE *FILTER_PAUSE_HANDLER;
typedef FILTER_OID_REQUEST *FILTER_OID_REQUEST_HANDLER;
typedef FILTER_CANCEL_OID_REQUEST *FILTER_CANCEL_OID_REQUEST_HANDLER;
typedef FILTER_SEND_NET_BUFFER_LISTS *FILTER_SEND_NET_BUFFER_LISTS_HANDLER;
typedef FILTER_CANCEL_SEND_NET_BUFFER_LISTS *FILTER_CANCEL_SEND_HANDLER;
typedef FILTER_RETURN_NET_BUFFER_LISTS *FILTER_RETURN_NET_BUFFER_LISTS_HANDLER;
typedef FILTER_SEND_NET_BUFFER_LISTS_COMPLETE *FILTER_SEND_NET_BUFFER_LISTS_COMPLETE_HANDLER;
typedef FILTER_RECEIVE_NET_BUFFER_LISTS *FILTER_RECEIVE_NET_BUFFER_LISTS_HANDLER;
typedef FILTER_DEVICE_PNP_EVENT_NOTIFY *FILTER_DEVICE_PNP_EVENT_NOTIFY_HANDLER;
typedef FILTER_NET_PNP_EVENT *FILTER_NET_PNP_EVENT_HANDLER;
typedef FILTER_STATUS *FILTER_STATUS_HANDLER;
typedef FILTER_OID_REQUEST_COMPLETE *FILTER_OID_REQUEST_COMPLETE_HANDLER;
#endif
#if NDIS_SUPPORT_NDIS61
typedef NDIS_STATUS (NTAPI FILTER_DIRECT_OID_REQUEST)( NDIS_HANDLE, PNDIS_OID_REQUEST );
typedef VOID (NTAPI FILTER_DIRECT_OID_REQUEST_COMPLETE)( NDIS_HANDLE, PNDIS_OID_REQUEST, NDIS_STATUS );
typedef VOID (NTAPI FILTER_CANCEL_DIRECT_OID_REQUEST)( NDIS_HANDLE, PVOID );
typedef FILTER_DIRECT_OID_REQUEST *FILTER_DIRECT_OID_REQUEST_HANDLER;
typedef FILTER_DIRECT_OID_REQUEST_COMPLETE *FILTER_DIRECT_OID_REQUEST_COMPLETE_HANDLER;
typedef FILTER_CANCEL_DIRECT_OID_REQUEST *FILTER_CANCEL_DIRECT_OID_REQUEST_HANDLER;
#endif
/* NDIS filter partial characteristics */
#if NDIS_SUPPORT_NDIS6
typedef struct _NDIS_FILTER_PARTIAL_CHARACTERISTICS {
NDIS_OBJECT_HEADER Header;
ULONG Flags;
FILTER_SEND_NET_BUFFER_LISTS_HANDLER SendNetBufferListsHandler;
FILTER_SEND_NET_BUFFER_LISTS_COMPLETE_HANDLER SendNetBufferListsCompleteHandler;
FILTER_CANCEL_SEND_HANDLER CancelSendNetBufferListsHandler;
FILTER_RECEIVE_NET_BUFFER_LISTS_HANDLER ReceiveNetBufferListsHandler;
FILTER_RETURN_NET_BUFFER_LISTS_HANDLER ReturnNetBufferListsHandler;
} NDIS_FILTER_PARTIAL_CHARACTERISTICS;
typedef NDIS_FILTER_PARTIAL_CHARACTERISTICS *PNDIS_FILTER_PARTIAL_CHARACTERISTICS;
#endif
/* NDIS filter driver characteristics */
#if NDIS_SUPPORT_NDIS6
typedef struct _NDIS_FILTER_DRIVER_CHARACTERISTICS {
NDIS_OBJECT_HEADER Header;
UCHAR MajorNdisVersion;
UCHAR MinorNdisVersion;
UCHAR MajorDriverVersion;
UCHAR MinorDriverVersion;
ULONG Flags;
NDIS_STRING FriendlyName;
NDIS_STRING UniqueName;
NDIS_STRING ServiceName;
SET_OPTIONS_HANDLER SetOptionsHandler;
FILTER_SET_FILTER_MODULE_OPTIONS_HANDLER SetFilterModuleOptionsHandler;
FILTER_ATTACH_HANDLER AttachHandler;
FILTER_DETACH_HANDLER DetachHandler;
FILTER_RESTART_HANDLER RestartHandler;
FILTER_PAUSE_HANDLER PauseHandler;
FILTER_SEND_NET_BUFFER_LISTS_HANDLER SendNetBufferListsHandler;
FILTER_SEND_NET_BUFFER_LISTS_COMPLETE_HANDLER SendNetBufferListsCompleteHandler;
FILTER_CANCEL_SEND_HANDLER CancelSendNetBufferListsHandler;
FILTER_RECEIVE_NET_BUFFER_LISTS_HANDLER ReceiveNetBufferListsHandler;
FILTER_RETURN_NET_BUFFER_LISTS_HANDLER ReturnNetBufferListsHandler;
FILTER_OID_REQUEST_HANDLER OidRequestHandler;
FILTER_OID_REQUEST_COMPLETE_HANDLER OidRequestCompleteHandler;
FILTER_CANCEL_OID_REQUEST_HANDLER CancelOidRequestHandler;
FILTER_DEVICE_PNP_EVENT_NOTIFY_HANDLER DevicePnPEventNotifyHandler;
FILTER_NET_PNP_EVENT_HANDLER NetPnPEventHandler;
FILTER_STATUS_HANDLER StatusHandler;
#if NDIS_SUPPORT_NDIS61
FILTER_DIRECT_OID_REQUEST_HANDLER DirectOidRequestHandler;
FILTER_DIRECT_OID_REQUEST_COMPLETE_HANDLER DirectOidRequestCompleteHandler;
FILTER_CANCEL_DIRECT_OID_REQUEST_HANDLER CancelDirectOidRequestHandler;
#endif
} NDIS_FILTER_DRIVER_CHARACTERISTICS;
typedef NDIS_FILTER_DRIVER_CHARACTERISTICS *PNDIS_FILTER_DRIVER_CHARACTERISTICS;
#endif
/* NDIS filter attributes */
#if NDIS_SUPPORT_NDIS6
typedef struct _NDIS_FILTER_ATTRIBUTES {
NDIS_OBJECT_HEADER Header;
ULONG Flags;
} NDIS_FILTER_ATTRIBUTES;
typedef NDIS_FILTER_ATTRIBUTES *PNDIS_FILTER_ATTRIBUTES;
#endif
/* IF provider callbacks */
#if NDIS_SUPPORT_NDIS6 || NDIS60
typedef NDIS_STATUS (NTAPI *IFP_QUERY_OBJECT)( NDIS_HANDLE, NET_IF_OBJECT_ID, PULONG, PVOID );
typedef NDIS_STATUS (NTAPI *IFP_SET_OBJECT)( NDIS_HANDLE, NET_IF_OBJECT_ID, ULONG, PVOID );
#endif
/* NDIS IF provider characteristics */
#if NDIS_SUPPORT_NDIS6 || NDIS60
typedef struct _NDIS_IF_PROVIDER_CHARACTERISTICS {
NDIS_OBJECT_HEADER Header;
IFP_QUERY_OBJECT QueryObjectHandler;
IFP_SET_OBJECT SetObjectHandler;
PVOID Reserved1;
PVOID Reserved2;
} NDIS_IF_PROVIDER_CHARACTERISTICS;
typedef NDIS_IF_PROVIDER_CHARACTERISTICS *PNDIS_IF_PROVIDER_CHARACTERISTICS;
#endif
/* Network IF information */
#if NDIS_SUPPORT_NDIS6 || NDIS60
typedef struct _NET_IF_INFORMATION {
NDIS_OBJECT_HEADER Header;
ULONG Flags;
NET_PHYSICAL_LOCATION PhysicalLocation;
ULONG WanTunnelType;
ULONG PortNumber;
NET_IF_ACCESS_TYPE AccessType;
NET_IF_DIRECTION_TYPE DirectionType;
NET_IF_CONNECTION_TYPE ConnectionType;
BOOLEAN ifConnectorPresent;
USHORT PhysAddressLength;
USHORT PhysAddressOffset;
USHORT PermanentPhysAddressOffset;
USHORT FriendlyNameLength;
USHORT FriendlyNameOffset;
GUID InterfaceGuid;
NET_IF_NETWORK_GUID NetworkGuid;
ULONG SupportedStatistics;
NDIS_MEDIUM MediaType;
NDIS_PHYSICAL_MEDIUM PhysicalMediumType;
} NET_IF_INFORMATION;
typedef NET_IF_INFORMATION *PNET_IF_INFORMATION;
#endif
/* Functions in NDIS.SYS */
EXPORT NDIS_STATUS NTAPI NdisAllocateMemoryWithTag( PVOID *, UINT, ULONG );
EXPORT VOID NTAPI NdisCancelTimer( PNDIS_TIMER, PBOOLEAN );
EXPORT NDIS_STATUS NTAPI NdisClAddParty( NDIS_HANDLE, NDIS_HANDLE, PCO_CALL_PARAMETERS, PNDIS_HANDLE );
EXPORT NDIS_STATUS NTAPI NdisClCloseAddressFamily( NDIS_HANDLE );
EXPORT NDIS_STATUS NTAPI NdisClCloseCall( NDIS_HANDLE, NDIS_HANDLE, PVOID, UINT );
EXPORT NDIS_STATUS NTAPI NdisClDeregisterSap( NDIS_HANDLE );
EXPORT NDIS_STATUS NTAPI NdisClDropParty( NDIS_HANDLE, PVOID, UINT );
EXPORT NDIS_STATUS NTAPI NdisClGetProtocolVcContextFromTapiCallId( UNICODE_STRING, PNDIS_HANDLE );
EXPORT VOID NTAPI NdisClIncomingCallComplete( NDIS_STATUS, NDIS_HANDLE, PCO_CALL_PARAMETERS );
EXPORT NDIS_STATUS NTAPI NdisClMakeCall( NDIS_HANDLE, PCO_CALL_PARAMETERS, NDIS_HANDLE, PNDIS_HANDLE );
EXPORT NDIS_STATUS NTAPI NdisClModifyCallQoS( NDIS_HANDLE, PCO_CALL_PARAMETERS );
EXPORT NDIS_STATUS NTAPI NdisClRegisterSap( NDIS_HANDLE, NDIS_HANDLE, PCO_SAP, PNDIS_HANDLE );
EXPORT VOID NTAPI NdisCloseConfiguration( NDIS_HANDLE );
EXPORT VOID NTAPI NdisCloseFile( PNDIS_HANDLE );
EXPORT NDIS_STATUS NTAPI NdisCmActivateVc( NDIS_HANDLE, PCO_CALL_PARAMETERS );
EXPORT VOID NTAPI NdisCmAddPartyComplete( NDIS_STATUS, NDIS_HANDLE, NDIS_HANDLE, PCO_CALL_PARAMETERS );
EXPORT VOID NTAPI NdisCmCloseAddressFamilyComplete( NDIS_STATUS, NDIS_HANDLE );
EXPORT VOID NTAPI NdisCmCloseCallComplete( NDIS_STATUS, NDIS_HANDLE, NDIS_HANDLE );
EXPORT NDIS_STATUS NTAPI NdisCmDeactivateVc( NDIS_HANDLE );
EXPORT VOID NTAPI NdisCmDeregisterSapComplete( NDIS_STATUS, NDIS_HANDLE );
EXPORT VOID NTAPI NdisCmDispatchCallConnected( NDIS_HANDLE );
EXPORT NDIS_STATUS NTAPI NdisCmDispatchIncomingCall( NDIS_HANDLE, NDIS_HANDLE, PCO_CALL_PARAMETERS );
EXPORT VOID NTAPI NdisCmDispatchIncomingCallQoSChange( NDIS_HANDLE, PCO_CALL_PARAMETERS );
EXPORT VOID NTAPI NdisCmDispatchIncomingCloseCall( NDIS_STATUS, NDIS_HANDLE, PVOID, UINT );
EXPORT VOID NTAPI NdisCmDispatchIncomingDropParty( NDIS_STATUS, NDIS_HANDLE, PVOID, UINT );
EXPORT VOID NTAPI NdisCmDropPartyComplete( NDIS_STATUS, NDIS_HANDLE );
EXPORT VOID NTAPI NdisCmMakeCallComplete( NDIS_STATUS, NDIS_HANDLE, NDIS_HANDLE, NDIS_HANDLE, PCO_CALL_PARAMETERS );
EXPORT VOID NTAPI NdisCmModifyCallQoSComplete( NDIS_STATUS, NDIS_HANDLE, PCO_CALL_PARAMETERS );
EXPORT VOID NTAPI NdisCmOpenAddressFamilyComplete( NDIS_STATUS, NDIS_HANDLE, NDIS_HANDLE );
EXPORT VOID NTAPI NdisCmRegisterSapComplete( NDIS_STATUS, NDIS_HANDLE, NDIS_HANDLE );
EXPORT NDIS_STATUS NTAPI NdisCoAssignInstanceName( NDIS_HANDLE, PNDIS_STRING, PNDIS_STRING );
EXPORT NDIS_STATUS NTAPI NdisCoCreateVc( NDIS_HANDLE, NDIS_HANDLE, NDIS_HANDLE, PNDIS_HANDLE );
EXPORT NDIS_STATUS NTAPI NdisCoDeleteVc( NDIS_HANDLE );
EXPORT NDIS_STATUS NTAPI NdisCoGetTapiCallId( NDIS_HANDLE, PVAR_STRING );
EXPORT VOID NTAPI NdisCompleteDmaTransfer( PNDIS_STATUS, NDIS_HANDLE, PNDIS_BUFFER, ULONG, ULONG, BOOLEAN );
EXPORT VOID NTAPI NdisCopyBuffer( PNDIS_STATUS, PNDIS_BUFFER *, NDIS_HANDLE, PVOID, UINT, UINT );
EXPORT VOID NTAPI NdisDeregisterTdiCallBack( VOID );
EXPORT VOID NTAPI NdisFreeMemory( PVOID, UINT, UINT );
EXPORT VOID NTAPI NdisFreeMemoryWithTag( PVOID, ULONG );
EXPORT UCHAR NTAPI NdisGeneratePartialCancelId( VOID );
EXPORT VOID NTAPI NdisGetCurrentProcessorCounts( PULONG, PULONG, PULONG );
EXPORT VOID NTAPI NdisGetCurrentProcessorCpuUsage( PULONG );
EXPORT PVOID NTAPI NdisGetRoutineAddress( PNDIS_STRING );
EXPORT ULONG NTAPI NdisGetSharedDataAlignment( VOID );
EXPORT UINT NTAPI NdisGetVersion( VOID );
EXPORT VOID NTAPI NdisIMAssociateMiniport( NDIS_HANDLE, NDIS_HANDLE );
EXPORT NDIS_STATUS NTAPI NdisIMCancelInitializeDeviceInstance( NDIS_HANDLE, PNDIS_STRING );
EXPORT NDIS_STATUS NTAPI NdisIMDeInitializeDeviceInstance( NDIS_HANDLE );
EXPORT NDIS_HANDLE NTAPI NdisIMGetBindingContext( NDIS_HANDLE );
EXPORT NDIS_STATUS NTAPI NdisIMInitializeDeviceInstanceEx( NDIS_HANDLE, PNDIS_STRING, NDIS_HANDLE );
EXPORT VOID NTAPI NdisInitializeEvent( PNDIS_EVENT );
EXPORT VOID NTAPI NdisInitializeString( PNDIS_STRING, PUCHAR );
EXPORT VOID NTAPI NdisInitializeTimer( PNDIS_TIMER, PNDIS_TIMER_FUNCTION, PVOID );
EXPORT VOID NTAPI NdisMAllocateSharedMemory( NDIS_HANDLE, ULONG, BOOLEAN, PVOID *, PNDIS_PHYSICAL_ADDRESS );
EXPORT NDIS_STATUS NTAPI NdisMAllocateSharedMemoryAsync( NDIS_HANDLE, ULONG, BOOLEAN, PVOID );
EXPORT VOID NTAPI NdisMCancelTimer( PNDIS_MINIPORT_TIMER, PBOOLEAN );
EXPORT VOID NTAPI NdisMCloseLog( NDIS_HANDLE );
EXPORT NDIS_STATUS NTAPI NdisMCmActivateVc( NDIS_HANDLE, PCO_CALL_PARAMETERS );
EXPORT NDIS_STATUS NTAPI NdisMCmCreateVc( NDIS_HANDLE, NDIS_HANDLE, NDIS_HANDLE, PNDIS_HANDLE );
EXPORT NDIS_STATUS NTAPI NdisMCmDeactivateVc( NDIS_HANDLE );
EXPORT NDIS_STATUS NTAPI NdisMCmDeleteVc( NDIS_HANDLE );
EXPORT NDIS_STATUS NTAPI NdisMCmRegisterAddressFamily( NDIS_HANDLE, PCO_ADDRESS_FAMILY, PNDIS_CALL_MANAGER_CHARACTERISTICS, UINT );
EXPORT VOID NTAPI NdisMCoActivateVcComplete( NDIS_STATUS, NDIS_HANDLE, PCO_CALL_PARAMETERS );
EXPORT VOID NTAPI NdisMCoDeactivateVcComplete( NDIS_STATUS, NDIS_HANDLE );
EXPORT NDIS_STATUS NTAPI NdisMCreateLog( NDIS_HANDLE, UINT, PNDIS_HANDLE );
EXPORT VOID NTAPI NdisMDeregisterDmaChannel( NDIS_HANDLE );
EXPORT VOID NTAPI NdisMDeregisterIoPortRange( NDIS_HANDLE, UINT, UINT, PVOID );
EXPORT VOID NTAPI NdisMFlushLog( NDIS_HANDLE );
EXPORT VOID NTAPI NdisMFreeSharedMemory( NDIS_HANDLE, ULONG, BOOLEAN, PVOID, NDIS_PHYSICAL_ADDRESS );
EXPORT VOID NTAPI NdisMGetDeviceProperty( NDIS_HANDLE, PDEVICE_OBJECT *, PDEVICE_OBJECT *, PDEVICE_OBJECT *, PCM_RESOURCE_LIST *, PCM_RESOURCE_LIST * );
EXPORT ULONG NTAPI NdisMGetDmaAlignment( NDIS_HANDLE );
EXPORT VOID NTAPI NdisMInitializeTimer( PNDIS_MINIPORT_TIMER, NDIS_HANDLE, PNDIS_TIMER_FUNCTION, PVOID );
EXPORT NDIS_STATUS NTAPI NdisMMapIoSpace( PVOID *, NDIS_HANDLE, NDIS_PHYSICAL_ADDRESS, UINT );
EXPORT NDIS_STATUS NTAPI NdisMQueryAdapterInstanceName( PNDIS_STRING, NDIS_HANDLE );
EXPORT ULONG NTAPI NdisMReadDmaCounter( NDIS_HANDLE );
EXPORT NDIS_STATUS NTAPI NdisMRegisterDmaChannel( PNDIS_HANDLE, NDIS_HANDLE, UINT, BOOLEAN, PNDIS_DMA_DESCRIPTION, ULONG );
EXPORT NDIS_STATUS NTAPI NdisMRegisterIoPortRange( PVOID *, NDIS_HANDLE, UINT, UINT );
EXPORT NDIS_STATUS NTAPI NdisMRemoveMiniport( NDIS_HANDLE );
EXPORT VOID NTAPI NdisMSetPeriodicTimer( PNDIS_MINIPORT_TIMER, UINT );
EXPORT VOID NTAPI NdisMSleep( ULONG );
EXPORT VOID NTAPI NdisMUnmapIoSpace( NDIS_HANDLE, PVOID, UINT );
EXPORT NDIS_STATUS NTAPI NdisMWriteLogData( NDIS_HANDLE, PVOID, UINT );
EXPORT VOID NTAPI NdisMapFile( PNDIS_STATUS, PVOID *, NDIS_HANDLE );
EXPORT VOID NTAPI NdisOpenConfigurationKeyByIndex( PNDIS_STATUS, NDIS_HANDLE, ULONG, PNDIS_STRING, PNDIS_HANDLE );
EXPORT VOID NTAPI NdisOpenConfigurationKeyByName( PNDIS_STATUS, NDIS_HANDLE, PNDIS_STRING, PNDIS_HANDLE );
EXPORT VOID NTAPI NdisOpenFile( PNDIS_STATUS, PNDIS_HANDLE, PUINT, PNDIS_STRING, NDIS_PHYSICAL_ADDRESS );
EXPORT NDIS_STATUS NTAPI NdisQueryAdapterInstanceName( PNDIS_STRING, NDIS_HANDLE );
EXPORT NDIS_STATUS NTAPI NdisQueryBindInstanceName( PNDIS_STRING, NDIS_HANDLE );
EXPORT VOID NTAPI NdisReEnumerateProtocolBindings( NDIS_HANDLE );
EXPORT VOID NTAPI NdisReadConfiguration( PNDIS_STATUS, PNDIS_CONFIGURATION_PARAMETER *, NDIS_HANDLE, PNDIS_STRING, NDIS_PARAMETER_TYPE );
EXPORT VOID NTAPI NdisReadNetworkAddress( PNDIS_STATUS, PVOID *, PUINT, NDIS_HANDLE );
EXPORT VOID NTAPI NdisRegisterTdiCallBack( TDI_REGISTER_CALLBACK, TDI_PNP_HANDLER );
EXPORT VOID NTAPI NdisResetEvent( PNDIS_EVENT );
EXPORT VOID NTAPI NdisSetEvent( PNDIS_EVENT );
EXPORT VOID NTAPI NdisSetPeriodicTimer( PNDIS_TIMER, UINT );
EXPORT VOID NTAPI NdisSetTimer( PNDIS_TIMER, UINT );
EXPORT VOID NTAPI NdisSetTimerEx( PNDIS_TIMER, UINT, PVOID );
EXPORT VOID NTAPI NdisSetupDmaTransfer( PNDIS_STATUS, NDIS_HANDLE, PNDIS_BUFFER, ULONG, ULONG, BOOLEAN );
EXPORT VOID NTAPI NdisUnmapFile( NDIS_HANDLE );
EXPORT VOID NTAPI NdisUpdateSharedMemory( NDIS_HANDLE, ULONG, PVOID, NDIS_PHYSICAL_ADDRESS );
EXPORT BOOLEAN NTAPI NdisWaitEvent( PNDIS_EVENT, UINT );
EXPORT VOID NTAPI NdisWriteConfiguration( PNDIS_STATUS, NDIS_HANDLE, PNDIS_STRING, PNDIS_CONFIGURATION_PARAMETER );
EXPORT VOID __cdecl NdisWriteErrorLogEntry( NDIS_HANDLE, NDIS_ERROR_CODE, ULONG, ... );
EXPORT NDIS_STATUS NTAPI NdisWriteEventLogEntry( PVOID, NDIS_STATUS, ULONG, USHORT, PVOID, ULONG, PVOID );
#if NDIS_SUPPORT_60_COMPATIBLE_API
EXPORT VOID NTAPI NdisAcquireReadWriteLock( PNDIS_RW_LOCK, BOOLEAN, PLOCK_STATE );
EXPORT VOID NTAPI NdisInitializeReadWriteLock( PNDIS_RW_LOCK );
EXPORT VOID NTAPI NdisReleaseReadWriteLock( PNDIS_RW_LOCK, PLOCK_STATE );
EXPORT CCHAR NTAPI NdisSystemProcessorCount( VOID );
#endif
#if NDIS_LEGACY_DRIVER
EXPORT VOID NTAPI NdisAllocateBuffer( PNDIS_STATUS, PNDIS_BUFFER *, NDIS_HANDLE, PVOID, UINT );
EXPORT VOID NTAPI NdisAllocateBufferPool( PNDIS_STATUS, PNDIS_HANDLE, UINT );
EXPORT NDIS_STATUS NTAPI NdisAllocateMemory( PVOID *, UINT, UINT, NDIS_PHYSICAL_ADDRESS );
EXPORT VOID NTAPI NdisAllocatePacket( PNDIS_STATUS, PNDIS_PACKET *, NDIS_HANDLE );
EXPORT VOID NTAPI NdisAllocatePacketPool( PNDIS_STATUS, PNDIS_HANDLE, UINT, UINT );
EXPORT VOID NTAPI NdisAllocatePacketPoolEx( PNDIS_STATUS, PNDIS_HANDLE, UINT, UINT, UINT );
EXPORT NDIS_STATUS NTAPI NdisCmRegisterAddressFamily( NDIS_HANDLE, PCO_ADDRESS_FAMILY, PNDIS_CALL_MANAGER_CHARACTERISTICS, UINT );
EXPORT VOID NTAPI NdisCopyFromPacketToPacket( PNDIS_PACKET, UINT, UINT, PNDIS_PACKET, UINT, PUINT );
EXPORT VOID NTAPI NdisCopyFromPacketToPacketSafe( PNDIS_PACKET, UINT, UINT, PNDIS_PACKET, UINT, PUINT, MM_PAGE_PRIORITY );
EXPORT VOID NTAPI NdisDprAllocatePacket( PNDIS_STATUS, PNDIS_PACKET *, NDIS_HANDLE );
EXPORT VOID NTAPI NdisDprAllocatePacketNonInterlocked( PNDIS_STATUS, PNDIS_PACKET *, NDIS_HANDLE );
EXPORT VOID NTAPI NdisDprFreePacket( PNDIS_PACKET );
EXPORT VOID NTAPI NdisDprFreePacketNonInterlocked( PNDIS_PACKET );
EXPORT VOID NTAPI NdisFreeBufferPool( NDIS_HANDLE );
EXPORT VOID NTAPI NdisFreePacket( PNDIS_PACKET );
EXPORT VOID NTAPI NdisFreePacketPool( NDIS_HANDLE );
EXPORT NDIS_HANDLE NTAPI NdisGetPoolFromPacket( PNDIS_PACKET );
EXPORT VOID NTAPI NdisGetSystemUpTime( PULONG );
EXPORT PNDIS_PACKET_STACK NTAPI NdisIMGetCurrentPacketStack( PNDIS_PACKET, BOOLEAN * );
EXPORT VOID NTAPI NdisOpenConfiguration( PNDIS_STATUS, PNDIS_HANDLE, NDIS_HANDLE );
EXPORT UINT NTAPI NdisPacketPoolUsage( NDIS_HANDLE );
EXPORT UINT NTAPI NdisPacketSize( UINT );
EXPORT NDIS_STATUS NTAPI NdisScheduleWorkItem( PNDIS_WORK_ITEM );
EXPORT VOID NTAPI NdisSetPacketPoolProtocolId( NDIS_HANDLE, UINT );
EXPORT VOID NTAPI NdisSetPacketStatus( PNDIS_PACKET, NDIS_STATUS, NDIS_HANDLE, ULONG );
EXPORT VOID NTAPI NdisUnchainBufferAtBack( PNDIS_PACKET, PNDIS_BUFFER * );
EXPORT VOID NTAPI NdisUnchainBufferAtFront( PNDIS_PACKET, PNDIS_BUFFER * );
#endif
#if NDIS_LEGACY_MINIPORT
EXPORT VOID NTAPI NdisIMCopySendCompletePerPacketInfo( PNDIS_PACKET, PNDIS_PACKET );
EXPORT VOID NTAPI NdisIMCopySendPerPacketInfo( PNDIS_PACKET, PNDIS_PACKET );
EXPORT VOID NTAPI NdisIMDeregisterLayeredMiniport( NDIS_HANDLE );
EXPORT NDIS_HANDLE NTAPI NdisIMGetDeviceContext( NDIS_HANDLE );
EXPORT NDIS_STATUS NTAPI NdisIMNotifyPnPEvent( NDIS_HANDLE, PNET_PNP_EVENT );
EXPORT NDIS_STATUS NTAPI NdisIMRegisterLayeredMiniport( NDIS_HANDLE, PNDIS_MINIPORT_CHARACTERISTICS, UINT, PNDIS_HANDLE );
EXPORT VOID NTAPI NdisInitializeWrapper( PNDIS_HANDLE, PVOID, PVOID, PVOID );
EXPORT NDIS_STATUS NTAPI NdisMAllocateMapRegisters( NDIS_HANDLE, UINT, NDIS_DMA_SIZE, ULONG, ULONG );
EXPORT NDIS_STATUS NTAPI NdisMCmRequest( NDIS_HANDLE, NDIS_HANDLE, NDIS_HANDLE, PNDIS_REQUEST );
EXPORT VOID NTAPI NdisMCoIndicateReceivePacket( NDIS_HANDLE, PPNDIS_PACKET, UINT );
EXPORT VOID NTAPI NdisMCoIndicateStatus( NDIS_HANDLE, NDIS_HANDLE, NDIS_STATUS, PVOID, ULONG );
EXPORT VOID NTAPI NdisMCoReceiveComplete( NDIS_HANDLE );
EXPORT VOID NTAPI NdisMCoRequestComplete( NDIS_STATUS, NDIS_HANDLE, PNDIS_REQUEST );
EXPORT VOID NTAPI NdisMCoSendComplete( NDIS_STATUS, NDIS_HANDLE, PNDIS_PACKET );
EXPORT VOID NTAPI NdisMCompleteBufferPhysicalMapping( NDIS_HANDLE, PNDIS_BUFFER, ULONG );
EXPORT VOID NTAPI NdisMDeregisterAdapterShutdownHandler( NDIS_HANDLE );
EXPORT NDIS_STATUS NTAPI NdisMDeregisterDevice( NDIS_HANDLE );
EXPORT VOID NTAPI NdisMDeregisterInterrupt( PNDIS_MINIPORT_INTERRUPT );
EXPORT VOID NTAPI NdisMFreeMapRegisters( NDIS_HANDLE );
EXPORT VOID NTAPI NdisMIndicateStatus( NDIS_HANDLE, NDIS_STATUS, PVOID, UINT );
EXPORT VOID NTAPI NdisMIndicateStatusComplete( NDIS_HANDLE );
EXPORT NDIS_STATUS NTAPI NdisMInitializeScatterGatherDma( NDIS_HANDLE, BOOLEAN, ULONG );
EXPORT NDIS_STATUS NTAPI NdisMPciAssignResources( NDIS_HANDLE, ULONG, PNDIS_RESOURCE_LIST * );
EXPORT NDIS_STATUS NTAPI NdisMPromoteMiniport( NDIS_HANDLE );
EXPORT VOID NTAPI NdisMQueryAdapterResources( PNDIS_STATUS, NDIS_HANDLE, PNDIS_RESOURCE_LIST, PUINT );
EXPORT VOID NTAPI NdisMRegisterAdapterShutdownHandler( NDIS_HANDLE, PVOID, ADAPTER_SHUTDOWN_HANDLER );
EXPORT NDIS_STATUS NTAPI NdisMRegisterDevice( NDIS_HANDLE, PNDIS_STRING, PNDIS_STRING, PDRIVER_DISPATCH [], PDEVICE_OBJECT *, NDIS_HANDLE * );
EXPORT NDIS_STATUS NTAPI NdisMRegisterInterrupt( PNDIS_MINIPORT_INTERRUPT, NDIS_HANDLE, UINT, UINT, BOOLEAN, BOOLEAN, NDIS_INTERRUPT_MODE );
EXPORT NDIS_STATUS NTAPI NdisMRegisterMiniport( NDIS_HANDLE, PNDIS_MINIPORT_CHARACTERISTICS, UINT );
EXPORT VOID NTAPI NdisMRegisterUnloadHandler( NDIS_HANDLE, PDRIVER_UNLOAD );
EXPORT VOID NTAPI NdisMSetAttributesEx( NDIS_HANDLE, NDIS_HANDLE, UINT, ULONG, NDIS_INTERFACE_TYPE );
EXPORT NDIS_STATUS NTAPI NdisMSetMiniportSecondary( NDIS_HANDLE, NDIS_HANDLE );
EXPORT VOID NTAPI NdisMStartBufferPhysicalMapping( NDIS_HANDLE, PNDIS_BUFFER, ULONG, BOOLEAN, PNDIS_PHYSICAL_ADDRESS_UNIT, PUINT );
EXPORT BOOLEAN NTAPI NdisMSynchronizeWithInterrupt( PNDIS_MINIPORT_INTERRUPT, PVOID, PVOID );
EXPORT ULONG NTAPI NdisReadPciSlotInformation( NDIS_HANDLE, ULONG, ULONG, PVOID, ULONG );
EXPORT ULONG NTAPI NdisReadPcmciaAttributeMemory( NDIS_HANDLE, ULONG, PVOID, ULONG );
EXPORT VOID NTAPI NdisTerminateWrapper( NDIS_HANDLE, PVOID );
EXPORT ULONG NTAPI NdisWritePciSlotInformation( NDIS_HANDLE, ULONG, ULONG, PVOID, ULONG );
EXPORT ULONG NTAPI NdisWritePcmciaAttributeMemory( NDIS_HANDLE, ULONG, PVOID, ULONG );
#endif
#if NDIS_LEGACY_PROTOCOL
EXPORT VOID NTAPI NdisCancelSendPackets( NDIS_HANDLE, PVOID );
EXPORT NDIS_STATUS NTAPI NdisClOpenAddressFamily( NDIS_HANDLE, PCO_ADDRESS_FAMILY, NDIS_HANDLE, PNDIS_CLIENT_CHARACTERISTICS, UINT, PNDIS_HANDLE );
EXPORT VOID NTAPI NdisCloseAdapter( PNDIS_STATUS, NDIS_HANDLE );
EXPORT NDIS_STATUS NTAPI NdisCoRequest( NDIS_HANDLE, NDIS_HANDLE, NDIS_HANDLE, NDIS_HANDLE, PNDIS_REQUEST );
EXPORT VOID NTAPI NdisCoRequestComplete( NDIS_STATUS, NDIS_HANDLE, NDIS_HANDLE, NDIS_HANDLE, PNDIS_REQUEST );
EXPORT VOID NTAPI NdisCoSendPackets( NDIS_HANDLE, PPNDIS_PACKET, UINT );
EXPORT VOID NTAPI NdisCompleteBindAdapter( NDIS_HANDLE, NDIS_STATUS, NDIS_STATUS );
EXPORT VOID NTAPI NdisCompletePnPEvent( NDIS_STATUS, NDIS_HANDLE, PNET_PNP_EVENT );
EXPORT VOID NTAPI NdisCompleteUnbindAdapter( NDIS_HANDLE, NDIS_STATUS );
EXPORT VOID NTAPI NdisDeregisterProtocol( PNDIS_STATUS, NDIS_HANDLE );
EXPORT VOID NTAPI NdisGetDriverHandle( NDIS_HANDLE, PNDIS_HANDLE );
EXPORT PNDIS_PACKET NTAPI NdisGetReceivedPacket( NDIS_HANDLE, NDIS_HANDLE );
EXPORT VOID NTAPI NdisOpenAdapter( PNDIS_STATUS, PNDIS_STATUS, PNDIS_HANDLE, PUINT, PNDIS_MEDIUM, UINT, NDIS_HANDLE, NDIS_HANDLE, PNDIS_STRING, UINT, PSTRING );
EXPORT VOID NTAPI NdisOpenProtocolConfiguration( PNDIS_STATUS, PNDIS_HANDLE, PNDIS_STRING );
EXPORT NDIS_STATUS NTAPI NdisQueryPendingIOCount( PVOID, PULONG );
EXPORT NDIS_STATUS NTAPI NdisRegisterProtocol( PNDIS_STATUS, PNDIS_HANDLE, PNDIS_PROTOCOL_CHARACTERISTICS, UINT );
EXPORT VOID NTAPI NdisRequest( PNDIS_STATUS, NDIS_HANDLE, PNDIS_REQUEST );
EXPORT VOID NTAPI NdisReset( PNDIS_STATUS, NDIS_HANDLE );
EXPORT VOID NTAPI NdisReturnPackets( PNDIS_PACKET *, UINT );
EXPORT VOID NTAPI NdisSetProtocolFilter( PNDIS_STATUS, NDIS_HANDLE, RECEIVE_HANDLER, RECEIVE_PACKET_HANDLER, NDIS_MEDIUM, UINT, UINT, PUCHAR );
#endif
#if NDIS_SUPPORT_NDIS6
EXPORT NDIS_STATUS NTAPI NdisAllocateCloneOidRequest( NDIS_HANDLE, PNDIS_OID_REQUEST, UINT, PNDIS_OID_REQUEST * );
EXPORT PNDIS_GENERIC_OBJECT NTAPI NdisAllocateGenericObject( PDRIVER_OBJECT, ULONG, USHORT );
EXPORT NDIS_HANDLE NTAPI NdisAllocateIoWorkItem( NDIS_HANDLE );
EXPORT PVOID NTAPI NdisAllocateMemoryWithTagPriority( NDIS_HANDLE, UINT, ULONG, EX_POOL_PRIORITY );
EXPORT NDIS_STATUS NTAPI NdisAllocateTimerObject( NDIS_HANDLE, PNDIS_TIMER_CHARACTERISTICS, PNDIS_HANDLE );
EXPORT BOOLEAN NTAPI NdisCancelTimerObject( NDIS_HANDLE );
EXPORT VOID NTAPI NdisClNotifyCloseAddressFamilyComplete( NDIS_HANDLE, NDIS_STATUS );
EXPORT NDIS_STATUS NTAPI NdisClOpenAddressFamilyEx( NDIS_HANDLE, PCO_ADDRESS_FAMILY, NDIS_HANDLE, PNDIS_HANDLE );
EXPORT NDIS_STATUS NTAPI NdisCmNotifyCloseAddressFamily( NDIS_HANDLE );
EXPORT NDIS_STATUS NTAPI NdisCmRegisterAddressFamilyEx( NDIS_HANDLE, PCO_ADDRESS_FAMILY );
EXPORT NDIS_STATUS NTAPI NdisCoOidRequest( NDIS_HANDLE, NDIS_HANDLE, NDIS_HANDLE, NDIS_HANDLE, PNDIS_OID_REQUEST );
EXPORT VOID NTAPI NdisCoOidRequestComplete( NDIS_HANDLE, NDIS_HANDLE, NDIS_HANDLE, PNDIS_OID_REQUEST, NDIS_STATUS );
EXPORT VOID NTAPI NdisCoSendNetBufferLists( NDIS_HANDLE, PNET_BUFFER_LIST, ULONG );
EXPORT VOID NTAPI NdisFCancelOidRequest( NDIS_HANDLE, PVOID );
EXPORT VOID NTAPI NdisFCancelSendNetBufferLists( NDIS_HANDLE, PVOID );
EXPORT VOID NTAPI NdisFDeregisterFilterDriver( NDIS_HANDLE );
EXPORT VOID NTAPI NdisFDevicePnPEventNotify( NDIS_HANDLE, PNET_DEVICE_PNP_EVENT );
EXPORT VOID NTAPI NdisFIndicateReceiveNetBufferLists( NDIS_HANDLE, PNET_BUFFER_LIST, NDIS_PORT_NUMBER, ULONG, ULONG );
EXPORT VOID NTAPI NdisFIndicateStatus( NDIS_HANDLE, PNDIS_STATUS_INDICATION );
EXPORT NDIS_STATUS NTAPI NdisFNetPnPEvent( NDIS_HANDLE, PNET_PNP_EVENT_NOTIFICATION );
EXPORT NDIS_STATUS NTAPI NdisFOidRequest( NDIS_HANDLE, PNDIS_OID_REQUEST );
EXPORT VOID NTAPI NdisFOidRequestComplete( NDIS_HANDLE, PNDIS_OID_REQUEST, NDIS_STATUS );
EXPORT VOID NTAPI NdisFPauseComplete( NDIS_HANDLE );
EXPORT NDIS_STATUS NTAPI NdisFRegisterFilterDriver( PDRIVER_OBJECT, NDIS_HANDLE, PNDIS_FILTER_DRIVER_CHARACTERISTICS, PNDIS_HANDLE );
EXPORT VOID NTAPI NdisFRestartComplete( NDIS_HANDLE, NDIS_STATUS );
EXPORT NDIS_STATUS NTAPI NdisFRestartFilter( NDIS_HANDLE );
EXPORT VOID NTAPI NdisFReturnNetBufferLists( NDIS_HANDLE, PNET_BUFFER_LIST, ULONG );
EXPORT VOID NTAPI NdisFSendNetBufferLists( NDIS_HANDLE, PNET_BUFFER_LIST, NDIS_PORT_NUMBER, ULONG );
EXPORT NDIS_STATUS NTAPI NdisFSetAttributes( NDIS_HANDLE, NDIS_HANDLE, PNDIS_FILTER_ATTRIBUTES );
EXPORT VOID NTAPI NdisFreeCloneOidRequest( NDIS_HANDLE, PNDIS_OID_REQUEST );
EXPORT VOID NTAPI NdisFreeGenericObject( PNDIS_GENERIC_OBJECT );
EXPORT VOID NTAPI NdisFreeIoWorkItem( NDIS_HANDLE );
EXPORT VOID NTAPI NdisFreeTimerObject( NDIS_HANDLE );
EXPORT VOID NTAPI NdisGetSystemUpTimeEx( PLARGE_INTEGER );
EXPORT NDIS_STATUS NTAPI NdisMAllocateNetBufferSGList( NDIS_HANDLE, PNET_BUFFER, PVOID, ULONG, PVOID, ULONG );
EXPORT NDIS_STATUS NTAPI NdisMAllocatePort( NDIS_HANDLE, PNDIS_PORT_CHARACTERISTICS );
EXPORT NDIS_STATUS NTAPI NdisMCmOidRequest( NDIS_HANDLE, NDIS_HANDLE, NDIS_HANDLE, PNDIS_OID_REQUEST );
EXPORT NDIS_STATUS NTAPI NdisMCmRegisterAddressFamilyEx( NDIS_HANDLE, PCO_ADDRESS_FAMILY );
EXPORT VOID NTAPI NdisMCoIndicateReceiveNetBufferLists( NDIS_HANDLE, PNET_BUFFER_LIST, ULONG, ULONG );
EXPORT VOID NTAPI NdisMCoIndicateStatusEx( NDIS_HANDLE, NDIS_HANDLE, PNDIS_STATUS_INDICATION );
EXPORT VOID NTAPI NdisMCoOidRequestComplete( NDIS_HANDLE, NDIS_HANDLE, PNDIS_OID_REQUEST, NDIS_STATUS );
EXPORT VOID NTAPI NdisMCoSendNetBufferListsComplete( NDIS_HANDLE, PNET_BUFFER_LIST, ULONG );
EXPORT VOID NTAPI NdisMDeregisterInterruptEx( NDIS_HANDLE );
EXPORT VOID NTAPI NdisMDeregisterMiniportDriver( NDIS_HANDLE );
EXPORT VOID NTAPI NdisMDeregisterScatterGatherDma( NDIS_HANDLE );
EXPORT VOID NTAPI NdisMFreeNetBufferSGList( NDIS_HANDLE, PSCATTER_GATHER_LIST, PNET_BUFFER );
EXPORT NDIS_STATUS NTAPI NdisMFreePort( NDIS_HANDLE, NDIS_PORT_NUMBER );
EXPORT ULONG NTAPI NdisMGetBusData( NDIS_HANDLE, ULONG, ULONG, PVOID, ULONG );
EXPORT VOID NTAPI NdisMIndicateReceiveNetBufferLists( NDIS_HANDLE, PNET_BUFFER_LIST, NDIS_PORT_NUMBER, ULONG, ULONG );
EXPORT VOID NTAPI NdisMIndicateStatusEx( NDIS_HANDLE, PNDIS_STATUS_INDICATION );
EXPORT NDIS_STATUS NTAPI NdisMNetPnPEvent( NDIS_HANDLE, PNET_PNP_EVENT_NOTIFICATION );
EXPORT VOID NTAPI NdisMOidRequestComplete( NDIS_HANDLE, PNDIS_OID_REQUEST, NDIS_STATUS );
EXPORT VOID NTAPI NdisMPauseComplete( NDIS_HANDLE );
EXPORT NDIS_STATUS NTAPI NdisMRegisterInterruptEx( NDIS_HANDLE, NDIS_HANDLE, PNDIS_MINIPORT_INTERRUPT_CHARACTERISTICS, PNDIS_HANDLE );
EXPORT NDIS_STATUS NTAPI NdisMRegisterMiniportDriver( PDRIVER_OBJECT, PUNICODE_STRING, NDIS_HANDLE, PNDIS_MINIPORT_DRIVER_CHARACTERISTICS, PNDIS_HANDLE );
EXPORT NDIS_STATUS NTAPI NdisMRegisterScatterGatherDma( NDIS_HANDLE, PNDIS_SG_DMA_DESCRIPTION, PNDIS_HANDLE );
EXPORT VOID NTAPI NdisMResetComplete( NDIS_HANDLE, NDIS_STATUS, BOOLEAN );
EXPORT VOID NTAPI NdisMRestartComplete( NDIS_HANDLE, NDIS_STATUS );
EXPORT VOID NTAPI NdisMSendNetBufferListsComplete( NDIS_HANDLE, PNET_BUFFER_LIST, ULONG );
EXPORT ULONG NTAPI NdisMSetBusData( NDIS_HANDLE, ULONG, ULONG, PVOID, ULONG );
EXPORT NDIS_STATUS NTAPI NdisMSetMiniportAttributes( NDIS_HANDLE, PNDIS_MINIPORT_ADAPTER_ATTRIBUTES );
EXPORT NDIS_STATUS NTAPI NdisOpenConfigurationEx( PNDIS_CONFIGURATION_OBJECT, PNDIS_HANDLE );
EXPORT VOID NTAPI NdisQueueIoWorkItem( NDIS_HANDLE, NDIS_IO_WORKITEM_ROUTINE, PVOID );
EXPORT NDIS_STATUS NTAPI NdisSetOptionalHandlers( NDIS_HANDLE, PNDIS_DRIVER_OPTIONAL_HANDLERS );
EXPORT BOOLEAN NTAPI NdisSetTimerObject( NDIS_HANDLE, LARGE_INTEGER, LONG, PVOID );
#if NDIS_SUPPORT_60_COMPATIBLE_API
EXPORT VOID NTAPI NdisDprAcquireReadWriteLock( PNDIS_RW_LOCK, BOOLEAN, PLOCK_STATE );
EXPORT VOID NTAPI NdisDprReleaseReadWriteLock( PNDIS_RW_LOCK, PLOCK_STATE );
EXPORT NDIS_STATUS NTAPI NdisGetProcessorInformation( PNDIS_SYSTEM_PROCESSOR_INFO );
EXPORT ULONG NTAPI NdisMQueueDpc( NDIS_HANDLE, ULONG, ULONG, PVOID );
EXPORT ULONG NTAPI NdisSystemActiveProcessorCount( PKAFFINITY );
#endif
#endif
#if NDIS_SUPPORT_NDIS6 || NDIS60
EXPORT VOID NTAPI NdisAdjustNetBufferCurrentMdl( PNET_BUFFER );
EXPORT VOID NTAPI NdisAdvanceNetBufferDataStart( PNET_BUFFER, ULONG, BOOLEAN, NET_BUFFER_FREE_MDL_HANDLER );
EXPORT VOID NTAPI NdisAdvanceNetBufferListDataStart( PNET_BUFFER_LIST, ULONG, BOOLEAN, NET_BUFFER_FREE_MDL_HANDLER );
EXPORT PNET_BUFFER_LIST NTAPI NdisAllocateCloneNetBufferList( PNET_BUFFER_LIST, NDIS_HANDLE, NDIS_HANDLE, ULONG );
EXPORT PNET_BUFFER_LIST NTAPI NdisAllocateFragmentNetBufferList( PNET_BUFFER_LIST, NDIS_HANDLE, NDIS_HANDLE, ULONG, ULONG, ULONG, ULONG, ULONG );
EXPORT PMDL NTAPI NdisAllocateMdl( NDIS_HANDLE, PVOID, UINT );
EXPORT PNET_BUFFER NTAPI NdisAllocateNetBuffer( NDIS_HANDLE, PMDL, ULONG, SIZE_T );
EXPORT PNET_BUFFER_LIST NTAPI NdisAllocateNetBufferAndNetBufferList( NDIS_HANDLE, USHORT, USHORT, PMDL, ULONG, SIZE_T );
EXPORT PNET_BUFFER_LIST NTAPI NdisAllocateNetBufferList( NDIS_HANDLE, USHORT, USHORT );
EXPORT NDIS_STATUS NTAPI NdisAllocateNetBufferListContext( PNET_BUFFER_LIST, USHORT, USHORT, ULONG );
EXPORT NDIS_HANDLE NTAPI NdisAllocateNetBufferListPool( NDIS_HANDLE, PNET_BUFFER_LIST_POOL_PARAMETERS );
EXPORT PNET_BUFFER NTAPI NdisAllocateNetBufferMdlAndData( NDIS_HANDLE );
EXPORT NDIS_HANDLE NTAPI NdisAllocateNetBufferPool( NDIS_HANDLE, PNET_BUFFER_POOL_PARAMETERS );
EXPORT PNET_BUFFER_LIST NTAPI NdisAllocateReassembledNetBufferList( PNET_BUFFER_LIST, NDIS_HANDLE, ULONG, ULONG, ULONG, ULONG );
EXPORT VOID NTAPI NdisCancelOidRequest( NDIS_HANDLE, PVOID );
EXPORT VOID NTAPI NdisCancelSendNetBufferLists( NDIS_HANDLE, PVOID );
EXPORT NDIS_STATUS NTAPI NdisCloseAdapterEx( NDIS_HANDLE );
EXPORT VOID NTAPI NdisCompleteBindAdapterEx( NDIS_HANDLE, NDIS_STATUS );
EXPORT VOID NTAPI NdisCompleteNetPnPEvent( NDIS_HANDLE, PNET_PNP_EVENT_NOTIFICATION, NDIS_STATUS );
EXPORT VOID NTAPI NdisCompleteUnbindAdapterEx( NDIS_HANDLE );
EXPORT NDIS_STATUS NTAPI NdisCopyFromNetBufferToNetBuffer( PNET_BUFFER, ULONG, ULONG, PNET_BUFFER, ULONG, PULONG );
EXPORT VOID NTAPI NdisCopyReceiveNetBufferListInfo( PNET_BUFFER_LIST, PNET_BUFFER_LIST );
EXPORT VOID NTAPI NdisCopySendNetBufferListInfo( PNET_BUFFER_LIST, PNET_BUFFER_LIST );
EXPORT VOID NTAPI NdisDeregisterProtocolDriver( NDIS_HANDLE );
EXPORT VOID NTAPI NdisFreeCloneNetBufferList( PNET_BUFFER_LIST, ULONG );
EXPORT VOID NTAPI NdisFreeFragmentNetBufferList( PNET_BUFFER_LIST, ULONG, ULONG );
EXPORT VOID NTAPI NdisFreeMdl( PMDL );
EXPORT VOID NTAPI NdisFreeNetBuffer( PNET_BUFFER );
EXPORT VOID NTAPI NdisFreeNetBufferList( PNET_BUFFER_LIST );
EXPORT VOID NTAPI NdisFreeNetBufferListContext( PNET_BUFFER_LIST, USHORT );
EXPORT VOID NTAPI NdisFreeNetBufferListPool( NDIS_HANDLE );
EXPORT VOID NTAPI NdisFreeNetBufferPool( NDIS_HANDLE );
EXPORT VOID NTAPI NdisFreeReassembledNetBufferList( PNET_BUFFER_LIST, ULONG, ULONG );
EXPORT PVOID NTAPI NdisGetDataBuffer( PNET_BUFFER, ULONG, PVOID, UINT, UINT );
EXPORT UCHAR NTAPI NdisGetNetBufferListProtocolId( PNET_BUFFER_LIST );
EXPORT NDIS_HANDLE NTAPI NdisGetPoolFromNetBuffer( PNET_BUFFER );
EXPORT NDIS_HANDLE NTAPI NdisGetPoolFromNetBufferList( PNET_BUFFER_LIST );
EXPORT NDIS_STATUS NTAPI NdisIfAddIfStackEntry( NET_IFINDEX, NET_IFINDEX );
EXPORT NDIS_STATUS NTAPI NdisIfAllocateNetLuidIndex( NET_IFTYPE, PUINT32 );
EXPORT VOID NTAPI NdisIfDeleteIfStackEntry( NET_IFINDEX, NET_IFINDEX );
EXPORT VOID NTAPI NdisIfDeregisterInterface( NET_IFINDEX );
EXPORT VOID NTAPI NdisIfDeregisterProvider( NDIS_HANDLE );
EXPORT NDIS_STATUS NTAPI NdisIfFreeNetLuidIndex( NET_IFTYPE, UINT32 );
EXPORT NDIS_STATUS NTAPI NdisIfGetInterfaceIndexFromNetLuid( NET_LUID, PNET_IFINDEX );
EXPORT NDIS_STATUS NTAPI NdisIfGetNetLuidFromInterfaceIndex( NET_IFINDEX, PNET_LUID );
EXPORT NDIS_STATUS NTAPI NdisIfQueryBindingIfIndex( NDIS_HANDLE, PNET_IFINDEX, PNET_LUID, PNET_IFINDEX, PNET_LUID );
EXPORT NDIS_STATUS NTAPI NdisIfRegisterInterface( NDIS_HANDLE, NET_LUID, NDIS_HANDLE, PNET_IF_INFORMATION, PNET_IFINDEX );
EXPORT NDIS_STATUS NTAPI NdisIfRegisterProvider( PNDIS_IF_PROVIDER_CHARACTERISTICS, NDIS_HANDLE, PNDIS_HANDLE );
EXPORT NDIS_STATUS NTAPI NdisOidRequest( NDIS_HANDLE, PNDIS_OID_REQUEST );
EXPORT NDIS_STATUS NTAPI NdisOpenAdapterEx( NDIS_HANDLE, NDIS_HANDLE, PNDIS_OPEN_PARAMETERS, NDIS_HANDLE, PNDIS_HANDLE );
EXPORT ULONG NTAPI NdisQueryNetBufferPhysicalCount( PNET_BUFFER );
EXPORT NDIS_STATUS NTAPI NdisRegisterProtocolDriver( NDIS_HANDLE, PNDIS_PROTOCOL_DRIVER_CHARACTERISTICS, PNDIS_HANDLE );
EXPORT NDIS_STATUS NTAPI NdisRetreatNetBufferDataStart( PNET_BUFFER, ULONG, ULONG, NET_BUFFER_ALLOCATE_MDL_HANDLER );
EXPORT NDIS_STATUS NTAPI NdisRetreatNetBufferListDataStart( PNET_BUFFER_LIST, ULONG, ULONG, NET_BUFFER_ALLOCATE_MDL_HANDLER, NET_BUFFER_FREE_MDL_HANDLER );
EXPORT VOID NTAPI NdisReturnNetBufferLists( NDIS_HANDLE, PNET_BUFFER_LIST, ULONG );
EXPORT VOID NTAPI NdisSendNetBufferLists( NDIS_HANDLE, PNET_BUFFER_LIST, NDIS_PORT_NUMBER, ULONG );
EXPORT NDIS_STATUS NTAPI NdisUnbindAdapter( NDIS_HANDLE );
#endif
#if NDIS_SUPPORT_NDIS61
EXPORT VOID NTAPI NdisCancelDirectOidRequest( NDIS_HANDLE, PVOID );
EXPORT NDIS_STATUS NTAPI NdisDirectOidRequest( NDIS_HANDLE, PNDIS_OID_REQUEST );
EXPORT VOID NTAPI NdisFCancelDirectOidRequest( NDIS_HANDLE, PVOID );
EXPORT NDIS_STATUS NTAPI NdisFDirectOidRequest( NDIS_HANDLE, PNDIS_OID_REQUEST );
EXPORT VOID NTAPI NdisFDirectOidRequestComplete( NDIS_HANDLE, PNDIS_OID_REQUEST, NDIS_STATUS );
EXPORT NDIS_STATUS NTAPI NdisMConfigMSIXTableEntry( NDIS_HANDLE, PNDIS_MSIX_CONFIG_PARAMETERS );
EXPORT VOID NTAPI NdisMDirectOidRequestComplete( NDIS_HANDLE, PNDIS_OID_REQUEST, NDIS_STATUS );
#endif
#if NDIS_SUPPORT_NDIS620
EXPORT VOID NTAPI NdisAcquireRWLockRead( PNDIS_RW_LOCK_EX, PLOCK_STATE_EX, UCHAR );
EXPORT VOID NTAPI NdisAcquireRWLockWrite( PNDIS_RW_LOCK_EX, PLOCK_STATE_EX, UCHAR );
EXPORT USHORT NTAPI NdisActiveGroupCount( VOID );
EXPORT PNDIS_RW_LOCK_EX NTAPI NdisAllocateRWLock( NDIS_HANDLE );
EXPORT NDIS_STATUS NTAPI NdisAllocateSharedMemory( NDIS_HANDLE, PNDIS_SHARED_MEMORY_PARAMETERS, PNDIS_HANDLE );
EXPORT NDIS_STATUS NTAPI NdisBuildScatterGatherList( NDIS_HANDLE, PNDIS_SCATTER_GATHER_LIST_PARAMETERS );
EXPORT PROCESSOR_NUMBER NTAPI NdisCurrentGroupAndProcessor( VOID );
EXPORT ULONG NTAPI NdisCurrentProcessorIndex( VOID );
EXPORT VOID NTAPI NdisFreeMemoryWithTagPriority( NDIS_HANDLE, PVOID, ULONG );
EXPORT VOID NTAPI NdisFreeRWLock( PNDIS_RW_LOCK_EX );
EXPORT VOID NTAPI NdisFreeScatterGatherList( NDIS_HANDLE, PSCATTER_GATHER_LIST, BOOLEAN );
EXPORT VOID NTAPI NdisFreeSharedMemory( NDIS_HANDLE, NDIS_HANDLE );
EXPORT NDIS_STATUS NTAPI NdisGetHypervisorInfo( PNDIS_HYPERVISOR_INFO );
EXPORT NDIS_STATUS NTAPI NdisGetProcessorInformationEx( NDIS_HANDLE, PNDIS_SYSTEM_PROCESSOR_INFO_EX, PSIZE_T );
EXPORT NDIS_STATUS NTAPI NdisGetRssProcessorInformation( NDIS_HANDLE, PNDIS_RSS_PROCESSOR_INFO, PSIZE_T );
EXPORT ULONG NTAPI NdisGroupActiveProcessorCount( USHORT );
EXPORT KAFFINITY NTAPI NdisGroupActiveProcessorMask( USHORT );
EXPORT ULONG NTAPI NdisGroupMaxProcessorCount( USHORT );
EXPORT KAFFINITY NTAPI NdisMQueueDpcEx( NDIS_HANDLE, ULONG, PGROUP_AFFINITY, PVOID );
EXPORT USHORT NTAPI NdisMaxGroupCount( VOID );
EXPORT NTSTATUS NTAPI NdisProcessorIndexToNumber( ULONG, PPROCESSOR_NUMBER );
EXPORT ULONG NTAPI NdisProcessorNumberToIndex( PROCESSOR_NUMBER );
EXPORT VOID NTAPI NdisReleaseRWLock( PNDIS_RW_LOCK_EX, PLOCK_STATE_EX );
EXPORT BOOLEAN NTAPI NdisSetCoalescableTimerObject( NDIS_HANDLE, LARGE_INTEGER, LONG, PVOID, ULONG );
#endif
#if (NTDDI_VERSION == 0x06000000) && (NDIS_LEGACY_DRIVER || NDIS_SUPPORT_NDIS6)
EXPORT VOID NTAPI NdisDeregisterDeviceEx( NDIS_HANDLE );
EXPORT NDIS_STATUS NTAPI NdisEnumerateFilterModules( NDIS_HANDLE, PVOID, ULONG, PULONG, PULONG );
EXPORT PVOID NTAPI NdisGetDeviceReservedExtension( PDEVICE_OBJECT );
EXPORT NDIS_STATUS NTAPI NdisRegisterDeviceEx( NDIS_HANDLE, PNDIS_DEVICE_OBJECT_ATTRIBUTES, PDEVICE_OBJECT *, PNDIS_HANDLE );
#endif
/* Functions in NDIS.SYS that are defined differently on different versions
* of Windows.
*/
#if NDIS_SUPPORT_NDIS620
EXPORT BOOLEAN NTAPI NdisMSychronizeWithInterruptEx( NDIS_HANDLE, ULONG, MINIPORT_SYNCHRONIZE_INTERRUPT_HANDLER, PVOID );
#elif NDIS_SUPPORT_NDIS6
EXPORT BOOLEAN NTAPI NdisMSynchronizeWithInterruptEx( NDIS_HANDLE, ULONG, PVOID, PVOID );
#endif
/* Functions implemented as macros */
#define NdisGetPhysicalAddressHigh( x ) ((x).HighPart)
#define NdisSetPhysicalAddressHigh( x, p ) ((x).HighPart) = (p)
#define NdisGetPhysicalAddressLow( x ) ((x).LowPart)
#define NdisSetPhysicalAddressLow( x, p ) ((x).LowPart) = (p)
#define NdisAllocateSpinLock( x ) KeInitializeSpinLock( &(x)->SpinLock )
#define NdisFreeSpinLock( x )
#define NdisAcquireSpinLock( x ) \
KeAcquireSpinLock( &(x)->SpinLock, &(x)->OldIrql )
#define NdisReleaseSpinLock( x ) \
KeReleaseSpinLock( &(x)->SpinLock, (x)->OldIrql )
#define NdisDprAcquireSpinLock( x ) \
KeAcquireSpinLockAtDpcLevel( &(x)->SpinLock )
#define NdisDprReleaseSpinLock( x ) \
KeReleaseSpinLockFromDpcLevel( &(x)->SpinLock )
#define NdisInterlockedAddUlong( x, p1, p2 ) \
ExInterlockedAddUlong( x, p1, &(p2)->SpinLock )
#define NdisInterlockedInsertHeadList( x, p1, p2 ) \
ExInterlockedInsertHeadList( x, p1, &(p2)->SpinLock )
#define NdisInterlockedInsertTailList( x, p1, p2 ) \
ExInterlockedInsertTailList( x, p1, &(p2)->SpinLock )
#define NdisInterlockedRemoveHeadList( x, p ) \
ExInterlockedRemoveHeadList( x, &(p)->SpinLock )
#define NdisInterlockedPushEntryList( x, p1, p2 ) \
ExInterlockedPushEntryList( x, p1, &(p2)->SpinLock )
#define NdisInterlockedPopEntryList( x, p ) \
ExInterlockedPopEntryList( x, &(p)->SpinLock )
#define NdisInterlockedAddLargeStatistic( x, p ) \
ExInterlockedAddLargeStatistic( (PLARGE_INTEGER)(x), p )
#define NdisInterlockedPushEntrySList( x, p1, p2 ) \
ExInterlockedPushEntrySList( x, p1, &(p2)->SpinLock )
#define NdisInterlockedPopEntrySList( x, p ) \
ExInterlockedPopEntrySList( x, &(p)->SpinLock )
#define NdisQueryBufferState( x, p1, p2, p3 ) \
{ \
if( (p1) != NULL ) { \
*(PVOID *)(p1) = MmGetSystemAddressForMdlSafe( x, p3 ); \
} \
*(p2) = MmGetMdlByteCount( x ); \
}
#define NdisQueryBufferOffset( x, p1, p2 ) \
{ \
*(p1) = MmGetMdlByteOffset( x ); \
*(p2) = MmGetMdlByteCount( x ); \
}
#define NdisGetBufferPhysicalArraySize( x, p ) \
(*(p) = NDIS_BUFFER_TO_SPAN_PAGES( x ))
#define NdisGetNextBuffer( x, p ) { *(p) = (x)->Next; }
#define NdisAdjustBufferLength( x, p ) ((x)->ByteCount = (p))
#define NdisFlushBuffer( x, p ) KeFlushIoBuffers( x, !(p), TRUE )
#define NdisRawWritePortUchar( p1, p2 ) \
WRITE_PORT_UCHAR( (PUCHAR)(p1), (UCHAR)(p2) )
#define NdisRawWritePortUshort( p1, p2 ) \
WRITE_PORT_USHORT( (PUSHORT)(p1), (USHORT)(p2) )
#define NdisRawWritePortUlong( p1, p2 ) \
WRITE_PORT_ULONG( (PULONG)(p1), (ULONG)(p2) )
#define NdisRawWritePortBufferUchar( p1, p2, p3 ) \
WRITE_PORT_BUFFER_UCHAR( (PUCHAR)(p1), (PUCHAR)(p2), p3 )
#define NdisRawReadPortUchar( p1, p2 ) *(p2) = READ_PORT_UCHAR( (PUCHAR)(p1) )
#define NdisRawReadPortUshort( p1, p2 ) *(p2) = READ_PORT_USHORT( (PUSHORT)(p1) )
#define NdisRawReadPortUlong( p1, p2 ) *(p2) = READ_PORT_ULONG( (PULONG)(p1) )
#define NdisRawReadPortBufferUchar( p1, p2, p3 ) \
READ_PORT_BUFFER_UCHAR( (PUCHAR)(p1), (PUCHAR)(p2), p3 )
#define NdisFreeString( x ) \
NdisFreeMemory( (x).Buffer, (x).MaximumLength, 0 )
#define NdisPrintString( x ) DbgPrint( "%ls", (x).Buffer );
#define NdisCreateLookaheadBufferFromSharedMemory( p1, p2, p3 ) (*(p3) = (p1))
#define NdisDestroyLookaheadBufferFromSharedMemory( x )
#define NdisAnsiStringToUnicodeString( p1, p2 ) \
RtlAnsiStringToUnicodeString( p1, p2, FALSE )
#define NdisUnicodeStringToAnsiString( p1, p2 ) \
RtlUnicodeStringToAnsiString( p1, p2, FALSE )
#define NdisUpcaseUnicodeString( p1, p2 ) RtlUpcaseUnicodeString( p1, p2, FALSE )
#define NdisMSetTimer( x, p ) NdisSetTimer( (PNDIS_TIMER)(x), p )
#define NdisBufferLength( x ) MmGetMdlByteCount( x )
#define NdisBufferVirtualAddress( x ) MmGetSystemAddressForMdl( x )
#define NdisBufferVirtualAddressSafe( x, p ) MmGetSystemAddressForMdlSafe( x, p )
#ifdef __cplusplus
#define WanMiniportSend( x, p1, p2, p3 ) \
{ \
*(x) = (((PNDIS_OPEN_BLOCK)(p1))->NdisCommonOpenBlock.WanSendHandler)( \
((PNDIS_OPEN_BLOCK)(p1))->NdisCommonOpenBlock.BindingHandle, (p2), \
(PNDIS_PACKET)(p3) ); \
}
#else
#define WanMiniportSend( x, p1, p2, p3 ) \
{ \
*(x) = (((PNDIS_OPEN_BLOCK)(p1))->WanSendHandler)( \
((PNDIS_OPEN_BLOCK)(p1))->BindingHandle, (p2), (PNDIS_PACKET)(p3) ); \
}
#endif
#ifdef _X86_
#define NdisMoveMappedMemory( p1, p2, p3 ) RtlCopyMemory( p1, p2, p3 )
#define NdisZeroMappedMemory( p1, p2 ) RtlZeroMemory( p1, p2 )
#define NdisCopyLookaheadData( p1, p2, p3, p4 ) RtlCopyMemory( p1, p2, p3 )
#define NdisRawWritePortBufferUshort( p1, p2, p3 ) \
WRITE_PORT_BUFFER_USHORT( (PUSHORT)(p1), (PUSHORT)(p2), p3 )
#define NdisRawWritePortBufferUlong( p1, p2, p3 ) \
WRITE_PORT_BUFFER_ULONG( (PULONG)(p1), (PULONG)(p2), p3 )
#define NdisRawReadPortBufferUshort( p1, p2, p3 ) \
READ_PORT_BUFFER_USHORT( (PUSHORT)(p1), (PUSHORT)(p2), p3 )
#define NdisRawReadPortBufferUlong( p1, p2, p3 ) \
READ_PORT_BUFFER_ULONG( (PULONG)(p1), (PULONG)(p2), p3 )
#define NdisReadRegisterUchar( p1, p2 ) \
*(p2) = *((volatile UCHAR * const)(p1))
#define NdisReadRegisterUshort( p1, p2 ) \
*(p2) = *((volatile USHORT * const)(p1))
#define NdisReadRegisterUlong( p1, p2 ) \
*(p2) = *((volatile ULONG * const)(p1))
#endif
#if NDIS_LEGACY_DRIVER
#define NdisSetPacketCancelId( x, p ) NDIS_SET_PACKET_CANCEL_ID( x, p )
#define NdisGetPacketCancelId( x ) NDIS_GET_PACKET_CANCEL_ID( x )
#define NdisGetPacketFlags( x ) ((x)->Private.Flags)
#define NdisSetPacketFlags( x, p ) ((x)->Private.Flags |= (p))
#define NdisClearPacketFlags( x, p ) ((x)->Private.Flags &= ~(p))
#define NdisReinitializePacket( x ) \
{ \
(x)->Private.Head = (PNDIS_BUFFER)NULL; \
(x)->Private.ValidCounts = FALSE; \
}
#define NdisQueryBuffer( x, p1, p2 ) \
{ \
if( (p1) != NULL ) { \
*(PVOID *)(p1) = MmGetSystemAddressForMdl( x ); \
} \
*(p2) = MmGetMdlByteCount( x ); \
}
#define NdisGetFirstBufferFromPacket( x, p1, p2, p3, p4 ) \
{ \
PNDIS_BUFFER _v; \
_v = (x)->Private.Head; \
*(p1) = _v; \
if( _v ) { \
*(p2) = MmGetSystemAddressForMdl( _v ); \
*(p3) = *(p4) = MmGetMdlByteCount( _v ); \
for( _v = _v->Next; _v != NULL; _v = _v->Next ) { \
*(p4) += MmGetMdlByteCount( _v ); \
} \
} else { \
*(p2) = 0; \
*(p3) = 0; \
*(p4) = 0; \
} \
}
#define NdisGetFirstBufferFromPacketSafe( x, p1, p2, p3, p4, p5 ) \
{ \
PNDIS_BUFFER _v; \
_v = (x)->Private.Head; \
*(p1) = _v; \
if( _v ) { \
*(p2) = MmGetSystemAddressForMdlSafe( _v, p5 ); \
*(p3) = *(p4) = MmGetMdlByteCount( _v ); \
for( _v = _v->Next; _v != NULL; _v = _v->Next ) { \
*(p4) += MmGetMdlByteCount( _v ); \
} \
} else { \
*(p2) = 0; \
*(p3) = 0; \
*(p4) = 0; \
} \
}
#define NdisRecalculatePacketCounts( x ) \
{ \
PNDIS_BUFFER _v = (x)->Private.Head; \
if( _v ) { \
while( _v->Next ) { \
_v = _v->Next; \
} \
(x)->Private.Tail = _v; \
} \
(x)->Private.ValidCounts = FALSE; \
}
#define NdisChainBufferAtFront( x, p ) \
{ \
PNDIS_BUFFER _v = (p); \
for( ;; ) { \
if( _v->Next == NULL ) { \
break; \
} \
_v = _v->Next; \
} \
if( (x)->Private.Head == NULL ) { \
(x)->Private.Tail = _v; \
} \
_v->Next = (x)->Private.Head; \
(x)->Private.Head = p; \
(x)->Private.ValidCounts = FALSE; \
}
#define NdisChainBufferAtBack( x, p ) \
{ \
PNDIS_BUFFER _v = (p); \
for( ;; ) { \
if( _v->Next == NULL ) { \
break; \
} \
_v = _v->Next; \
} \
if( (x)->Private.Head != NULL ) { \
(x)->Private.Tail->Next = p; \
} else { \
(x)->Private.Head = p; \
} \
(x)->Private.Tail = _v; \
(x)->Private.ValidCounts = FALSE; \
}
#define NdisQueryPacketLength( x, p ) \
{ \
if( !(x)->Private.ValidCounts ) { \
NdisQueryPacket( x, NULL, NULL, NULL, p ); \
} else { \
*(p) = (x)->Private.TotalLength; \
} \
}
#define NdisInitializeWorkItem( x, p1, p2 ) \
{ \
(x)->Context = p1; \
(x)->Context = p2; \
}
#endif
#if NDIS_LEGACY_PROTOCOL
#define NdisSetSendFlags( x, p ) (x)->Private.Flags = (p)
#define NdisQuerySendFlags( x, p ) *(p) = (x)->Private.Flags
#ifdef __cplusplus
#define NdisSend( x, p1, p2 ) \
{ \
*(x) = (((PNDIS_OPEN_BLOCK)(p1))->NdisCommonOpenBlock.SendHandler)( \
((PNDIS_OPEN_BLOCK)(p1))->NdisCommonOpenBlock.BindingHandle,
(p2) ); \
}
#define NdisSendPackets( x, p1, p2 ) \
{ \
(((PNDIS_OPEN_BLOCK)(x))->NdisCommonOpenBlock.SendPacketsHandler)( \
(PNDIS_OPEN_BLOCK)(x), (p1), (p2) ); \
}
#define NdisTransferData( x, p1, p2, p3, p4, p5, p6 ) \
{ \
*(x) = (((PNDIS_OPEN_BLOCK)(p1))->NdisCommonOpenBlock.TransferDataHandler)( \
((PNDIS_OPEN_BLOCK)(p1))->NdisCommonOpenBlock.BindingHandle, (p2), \
(p3), (p4), (p5), (p6) ); \
}
#else
#define NdisSend( x, p1, p2 ) \
{ \
*(x) = (((PNDIS_OPEN_BLOCK)(p1))->SendHandler)( \
((PNDIS_OPEN_BLOCK)(p1))->BindingHandle, (p2) ); \
}
#define NdisSendPackets( x, p1, p2 ) \
{ \
(((PNDIS_OPEN_BLOCK)(x))->SendPacketsHandler)( \
(PNDIS_OPEN_BLOCK)(x), (p1), (p2) ); \
}
#define NdisTransferData( x, p1, p2, p3, p4, p5, p6 ) \
{ \
*(x) = (((PNDIS_OPEN_BLOCK)(p1))->TransferDataHandler)( \
((PNDIS_OPEN_BLOCK)(p1))->BindingHandle, (p2), (p3), (p4), (p5), \
(p6) ); \
}
#endif
#endif
#if NDIS_LEGACY_MINIPORT
#define NdisMUpdateSharedMemory( p1, p2, p3, p4 )
#define NdisMInitializeWrapper( p1, p2, p3, p4 ) \
NdisInitializeWrapper( p1, p2, p3, p4 )
#define NdisIMInitializeDeviceInstance( p1, p2 ) \
NdisIMInitializeDeviceInstanceEx( p1, p2, NULL )
#define NdisMSetAttributes( p1, p2, p3, p4 ) \
NdisMSetAttributesEx( p1, p2, 0, (p3) ? NDIS_ATTRIBUTE_BUS_MASTER : 0, p4 )
#define NdisMSendComplete( x, p1, p2 ) \
(*((PNDIS_MINIPORT_BLOCK)(x))->SendCompleteHandler)( x, p1, p2 )
#define NdisMSendResourcesAvailable( x ) \
(*((PNDIS_MINIPORT_BLOCK)(x))->SendResourcesHandler)( x )
#define NdisMTransferDataComplete( x, p1, p2, p3 ) \
(*((PNDIS_MINIPORT_BLOCK)(x))->TDCompleteHandler)( x, p1, p2, p3 )
#define NdisMWanSendComplete( x, p1, p2 ) \
(*((PNDIS_MINIPORT_BLOCK)(x))->WanSendCompleteHandler)( x, p1, p2 )
#define NdisMQueryInformationComplete( x, p ) \
(*((PNDIS_MINIPORT_BLOCK)(x))->QueryCompleteHandler)( x, p )
#define NdisMSetInformationComplete( x, p ) \
(*((PNDIS_MINIPORT_BLOCK)(x))->SetCompleteHandler)( x, p )
#define NdisMIndicateReceivePacket( x, p1, p2 ) \
{ (*((PNDIS_MINIPORT_BLOCK)(x))->PacketIndicateHandler)( x, p1, p2 ); }
#define NdisMWanIndicateReceive( p1, p2, p3, p4, p5 ) \
(*((PNDIS_MINIPORT_BLOCK)(p2))->WanRcvHandler)( p1, p2, p3, p4, p5 )
#define NdisMWanIndicateReceiveComplete( x, p ) \
(*((PNDIS_MINIPORT_BLOCK)(x))->WanRcvCompleteHandler)( x, p )
#define NdisMCmRequestComplete( p1, p2, p3, p4, p5 ) \
NdisCoRequestComplete( p1, p2, p3, p4, p5 )
#ifdef __cplusplus
#define NdisMEthIndicateReceive( x, p1, p2, p3, p4, p5, p6 ) \
{ (*((PNDIS_MINIPORT_BLOCK)(x))->EthRxIndicateHandler)( \
((PNDIS_MINIPORT_BLOCK)(x))->FilterDbs.EthDB, p1, p2, p2, p3, p4, p5, p6 ); }
#define NdisMTrIndicateReceive( x, p1, p2, p3, p4, p5, p6 ) \
{ (*((PNDIS_MINIPORT_BLOCK)(x))->TrRxIndicateHandler)( \
((PNDIS_MINIPORT_BLOCK)(x))->FilterDbs.TrDB, p1, p2, p3, p4, p5, p6 ); }
#define NdisMEthIndicateReceiveComplete( x ) \
{ (*((PNDIS_MINIPORT_BLOCK)(x))->EthRxCompleteHandler)( \
((PNDIS_MINIPORT_BLOCK)(x))->FilterDbs.EthDB ); }
#define NdisMTrIndicateReceiveComplete( x ) \
{ (*((PNDIS_MINIPORT_BLOCK)(x))->TrRxCompleteHandler)( \
((PNDIS_MINIPORT_BLOCK)(x))->FilterDbs.TrDB ); }
#else
#define NdisMEthIndicateReceive( x, p1, p2, p3, p4, p5, p6 ) \
{ (*((PNDIS_MINIPORT_BLOCK)(x))->EthRxIndicateHandler)( \
((PNDIS_MINIPORT_BLOCK)(x))->EthDB, p1, p2, p2, p3, p4, p5, p6 ); }
#define NdisMTrIndicateReceive( x, p1, p2, p3, p4, p5, p6 ) \
{ (*((PNDIS_MINIPORT_BLOCK)(x))->TrRxIndicateHandler)( \
((PNDIS_MINIPORT_BLOCK)(x))->TrDB, p1, p2, p3, p4, p5, p6 ); }
#define NdisMEthIndicateReceiveComplete( x ) \
{ (*((PNDIS_MINIPORT_BLOCK)(x))->EthRxCompleteHandler)( \
((PNDIS_MINIPORT_BLOCK)(x))->EthDB ); }
#define NdisMTrIndicateReceiveComplete( x ) \
{ (*((PNDIS_MINIPORT_BLOCK)(x))->TrRxCompleteHandler)( \
((PNDIS_MINIPORT_BLOCK)(x))->TrDB ); }
#endif
#if NDIS_LEGACY_MINIPORT && !NDIS_WRAPPER && !NDIS_SUPPORT_NDIS6
#define NdisMResetComplete( x, p1, p2 ) \
(*((PNDIS_MINIPORT_BLOCK)(x))->ResetCompleteHandler)( x, p1, p2 )
#endif
#endif
#if NDIS_SUPPORT_NDIS6
#define NdisAdjustMdlLength( x, p ) ((x)->ByteLength = (p))
#endif
#if NDIS_SUPPORT_NDIS6 || NDIS60
#define NdisSetNetBufferListProtocolId( x, p ) \
*((PUCHAR)(&NET_BUFFER_LIST_INFO( x, NetBufferListProtocolId )) = (p)
#define NdisQueryMdl( x, p1, p2, p3 ) \
{ \
if( (p1) != NULL ) { \
*(PVOID *)(p1) = MmGetSystemAddressForMdlSafe( x, p3 ); \
} \
*(p2) = MmGetMdlByteCount( x ); \
}
#define NdisQueryMdlOffset( x, p1, p2 ) \
{ \
*(p1) = MmGetMdlByteOffset( x ); \
*(p2) = MmGetMdlByteCount( x ); \
}
#define NdisGetMdlPhysicalArraySize( x, p ) \
(*(p) = NDIS_MDL_TO_SPAN_PAGES( x ))
#define NdisGetNextMdl( x, p ) \
{ *(p) = (x)->Next; }
#define NdisTestNblFlag( x, p ) (((x)->NblFlags & (p)) != 0)
#define NdisTestNblFlags( x, p ) (((x)->NblFlags & (p)) == (p))
#define NdisSetNblFlag( x, p ) ((x)->NblFlags |= (p))
#define NdisClearNblFlag( x, p ) ((x)->NblFlags &= ~(p))
#define NdisMCmOidRequestComplete( p1, p2, p3, p4, p5 ) \
NdisCoOidRequestComplete( p1, p2, p3, p4, p5 )
#endif
/* Other macros */
#if NDIS_LEGACY_DRIVER
#define NDIS_GET_PACKET_PROTOCOL_TYPE( x ) \
((x)->Private.Flags & NDIS_PROTOCOL_ID_MASK)
#define NDIS_OOB_DATA_FROM_PACKET( x ) \
(PNDIS_PACKET_OOB_DATA)((PUCHAR)(x) + (x)->Private.NdisPacketOobOffset)
#define NDIS_GET_PACKET_HEADER_SIZE( x ) \
((PNDIS_PACKET_OOB_DATA)((PUCHAR)(x) + \
(x)->Private.NdisPacketOobOffset))->HeaderSize
#define NDIS_GET_PACKET_STATUS( x ) \
((PNDIS_PACKET_OOB_DATA)((PUCHAR)(x) + \
(x)->Private.NdisPacketOobOffset))->Status
#define NDIS_GET_PACKET_TIME_TO_SEND( x ) \
((PNDIS_PACKET_OOB_DATA)((PUCHAR)(x) + \
(x)->Private.NdisPacketOobOffset))->TimeToSend
#define NDIS_GET_PACKET_TIME_SENT( x ) \
((PNDIS_PACKET_OOB_DATA)((PUCHAR)(x) + \
(x)->Private.NdisPacketOobOffset))->TimeSent
#define NDIS_GET_PACKET_TIME_RECEIVED( x ) \
((PNDIS_PACKET_OOB_DATA)((PUCHAR)(x) + \
(x)->Private.NdisPacketOobOffset))->TimeReceived
#define NDIS_GET_PACKET_MEDIA_SPECIFIC_INFO( x, p1, p2 ) \
{ \
if( !((x)->Private.NdisPacketFlags & fPACKET_ALLOCATED_BY_NDIS) || \
!((x)->Private.NdisPacketFlags & \
fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO)) { \
*(p1) = NULL; \
*(p2) = 0; \
} else { \
*(p1) = ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(x) + \
(x)->Private.NdisPacketOobOffset))->MediaSpecificInformation; \
*(p2) = ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(x) + \
(x)->Private.NdisPacketOobOffset))->SizeMediaSpecificInfo; \
} \
}
#define NDIS_SET_PACKET_HEADER_SIZE( x, p ) \
((PNDIS_PACKET_OOB_DATA)((PUCHAR)(x) + \
(x)->Private.NdisPacketOobOffset))->HeaderSize = (p)
#define NDIS_SET_PACKET_STATUS( x, p ) \
((PNDIS_PACKET_OOB_DATA)((PUCHAR)(x) + \
(x)->Private.NdisPacketOobOffset))->Status = (p)
#define NDIS_SET_PACKET_TIME_TO_SEND( x, p ) \
((PNDIS_PACKET_OOB_DATA)((PUCHAR)(x) + \
(x)->Private.NdisPacketOobOffset))->TimeToSend = (p)
#define NDIS_SET_PACKET_TIME_SENT( x, p ) \
((PNDIS_PACKET_OOB_DATA)((PUCHAR)(x) + \
(x)->Private.NdisPacketOobOffset))->TimeSent = (p)
#define NDIS_SET_PACKET_TIME_RECEIVED( x, p ) \
((PNDIS_PACKET_OOB_DATA)((PUCHAR)(x) + \
(x)->Private.NdisPacketOobOffset))->TimeReceived = (p)
#define NDIS_SET_PACKET_MEDIA_SPECIFIC_INFO( x, p1, p2 ) \
{ \
if( (x)->Private.NdisPacketFlags & fPACKET_ALLOCATED_BY_NDIS ) { \
(x)->Private.NdisPacketFlags |= fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO; \
((PNDIS_PACKET_OOB_DATA)((PUCHAR)(x) + \
(x)->Private.NdisPacketOobOffset))->MediaSpecificInformation = (p1); \
((PNDIS_PACKET_OOB_DATA)((PUCHAR)(x) + \
(x)->Private.NdisPacketOobOffset))->SizeMediaSpecificInfo = (p2); \
} \
}
#define NDIS_PACKET_EXTENSION_FROM_PACKET( x ) \
((PNDIS_PACKET_EXTENSION)((PUCHAR)(x) + (x)->Private.NdisPacketOobOffset + \
sizeof( NDIS_PACKET_OOB_DATA )))
#define NDIS_PER_PACKET_INFO_FROM_PACKET( x, p ) \
((PNDIS_PACKET_EXTENSION)((PUCHAR)(x) + (x)->Private.NdisPacketOobOffset + \
sizeof( NDIS_PACKET_OOB_DATA )))->NdisPacketInfo[(p)]
#define NDIS_GET_ORIGINAL_PACKET( x ) \
NDIS_PER_PACKET_INFO_FROM_PACKET( x, OriginalPacketInfo )
#define NDIS_SET_ORIGINAL_PACKET( x, p ) \
NDIS_PER_PACKET_INFO_FROM_PACKET( x, OriginalPacketInfo ) = (p)
#define NDIS_GET_PACKET_CANCEL_ID( x ) \
NDIS_PER_PACKET_INFO_FROM_PACKET( x, PacketCancelId )
#define NDIS_SET_PACKET_CANCEL_ID( x, p ) \
NDIS_PER_PACKET_INFO_FROM_PACKET( x, PacketCancelId ) = (p)
#define NDIS_PACKET_FIRST_NDIS_BUFFER( x ) ((x)->Private.Head)
#define NDIS_PACKET_LAST_NDIS_BUFFER( x ) ((x)->Private.Tail)
#define NDIS_PACKET_VALID_COUNTS( x ) ((x)->Private.ValidCounts)
#endif
#if NDIS_SUPPORT_NDIS6
#define NDIS_STATUS_INDICATION_SET_FLAG( x, p ) ((x)->Flags |= (p))
#define NDIS_STATUS_INDICATION_TEST_FLAG( x, p ) (((x)->Flags & (p)) != 0)
#define NDIS_STATUS_INDICATION_CLEAR_FLAG( x, p ) ((x)->Flags &= ~(p))
#endif
#if NDIS_SUPPORT_NDIS6 || NDIS60
#ifdef __cplusplus
#define NET_BUFFER_NEXT_NB( x ) ((x)->NetBufferHeader.NetBufferData.Next)
#define NET_BUFFER_FIRST_MDL( x ) \
((x)->NetBufferHeader.NetBufferData.MdlChain)
#define NET_BUFFER_DATA_LENGTH( x ) \
((x)->NetBufferHeader.NetBufferData.NbDataLength.DataLength)
#define NET_BUFFER_DATA_OFFSET( x ) \
((x)->NetBufferHeader.NetBufferData.DataOffset)
#define NET_BUFFER_CURRENT_MDL( x ) \
((x)->NetBufferHeader.NetBufferData.CurrentMdl)
#define NET_BUFFER_CURRENT_MDL_OFFSET( x ) \
((x)->NetBufferHeader.NetBufferData.CurrentMdlOffset)
#define NET_BUFFER_LIST_NEXT_NBL( x ) \
((x)->NetBufferListHeader.NetBufferListData.Next)
#define NET_BUFFER_LIST_FIRST_NB( x ) \
((x)->NetBufferListHeader.NetBufferListData.FirstNetBuffer)
#else
#define NET_BUFFER_NEXT_NB( x ) ((x)->Next)
#define NET_BUFFER_FIRST_MDL( x ) ((x)->MdlChain)
#define NET_BUFFER_DATA_LENGTH( x ) ((x)->DataLength)
#define NET_BUFFER_DATA_OFFSET( x ) ((x)->DataOffset)
#define NET_BUFFER_CURRENT_MDL( x ) ((x)->CurrentMdl)
#define NET_BUFFER_CURRENT_MDL_OFFSET( x ) ((x)->CurrentMdlOffset)
#define NET_BUFFER_LIST_NEXT_NBL( x ) ((x)->Next)
#define NET_BUFFER_LIST_FIRST_NB( x ) ((x)->FirstNetBuffer)
#endif
#define NET_BUFFER_PROTOCOL_RESERVED( x ) ((x)->ProtocolReserved)
#define NET_BUFFER_MINIPORT_RESERVED( x ) ((x)->MiniportReserved)
#define NET_BUFFER_CHECKSUM_BIAS( x ) ((x)->ChecksumBias)
#define NET_BUFFER_LIST_FLAGS( x ) ((x)->Flags)
#define NET_BUFFER_LIST_NBL_FLAGS( x ) ((x)->NblFlags)
#define NET_BUFFER_LIST_PROTOCOL_RESERVED( x ) ((x)->ProtocolReserved)
#define NET_BUFFER_LIST_MINIPORT_RESERVED( x ) ((x)->MiniportReserved)
#define NET_BUFFER_LIST_CONTEXT_DATA_START( x ) \
((PUCHAR)(((x)->Context) + 1) + (x)->Context->Offset)
#define NET_BUFFER_LIST_CONTEXT_DATA_SIZE( x ) (((x)->Context)->Size)
#define NET_BUFFER_LIST_INFO( p1, p2 ) ((p1)->NetBufferListInfo[p2])
#define NET_BUFFER_LIST_STATUS( x ) ((x)->Status)
#define NDIS_GET_NET_BUFFER_LIST_CANCEL_ID( x ) \
NET_BUFFER_LIST_INFO( x, NetBufferListCancelId )
#define NDIS_SET_NET_BUFFER_LIST_CANCEL_ID( x, p ) \
NET_BUFFER_LIST_INFO( x, NetBufferListCancelId ) = p
#define NDIS_NBL_ADD_MEDIA_SPECIFIC_INFO( x, p ) \
{ \
PNDIS_NBL_MEDIA_SPECIFIC_INFORMATION _v = NULL; \
if( NET_BUFFER_LIST_INFO( x, MediaSpecificInformation ) != NULL ) { \
_v = (PNDIS_NBL_MEDIA_SPECIFIC_INFORMATION)(NET_BUFFER_LIST_INFO( x, \
MediaSpecificInformation )); \
} \
NET_BUFFER_LIST_INFO( x, MediaSpecificInformation ) = (p); \
(p)->NextEntry = _v; \
}
#define NDIS_NBL_REMOVE_MEDIA_SPECIFIC_INFO( x, p ) \
{ \
PNDIS_NBL_MEDIA_SPECIFIC_INFORMATION *_v; \
_v = (PNDIS_NBL_MEDIA_SPECIFIC_INFORMATION *)&(NET_BUFFER_LIST_INFO( x, \
MediaSpecificInformation )); \
for( ; *_v != NULL; _v = &(*_v)->NextEntry ) { \
if( (*_v)->Tag == (p)->Tag ) { \
*_v = (*_v)->NextEntry; \
break; \
} \
} \
}
#define NDIS_NBL_GET_MEDIA_SPECIFIC_INFO( x, p1, p2 ) \
{ \
PNDIS_NBL_MEDIA_SPECIFIC_INFORMATION _v; \
(p2) = NULL; \
_v = (PNDIS_NBL_MEDIA_SPECIFIC_INFORMATION)(NET_BUFFER_LIST_INFO( x, \
MediaSpecificInformation )); \
for( ; _v != NULL; _v = _v->NextEntry ) { \
if( _v->Tag == (p1) ) { \
(p2) = _v; \
break; \
} \
} \
}
#define NET_BUFFER_LIST_SET_HASH_TYPE( x, p ) \
(NET_BUFFER_LIST_INFO( x, NetBufferListHashInfo ) = UlongToPtr( ((PtrToLong( \
NET_BUFFER_LIST_INFO( x, NetBufferListHashInfo ) ) & ~NDIS_HASH_TYPE_MASK) | \
((p) & NDIS_HASH_TYPEMASK)) ))
#define NET_BUFFER_LIST_SET_HASH_FUNCTION( x, p ) \
(NET_BUFFER_LIST_INFO( x, NetBufferListHashInfo ) = UlongToPtr( ((PtrToLong( \
NET_BUFFER_LIST_INFO( x, NetBufferListHashInfo ) ) & \
~NDIS_HASH_FUNCTION_MASK) | ((p) & NDIS_HASH_FUNCTION_MASK)) ))
#define NET_BUFFER_LIST_SET_HASH_VALUE( x, p ) \
(NET_BUFFER_LIST_INFO( x, NetBufferListHashValue ) = UlongToPtr( p ))
#define NET_BUFFER_LIST_GET_HASH_TYPE( x ) \
(PtrToUlong( NET_BUFFER_LIST_INFO( x, NetBufferListHashInfo ) ) & \
NDIS_HASH_TYPE_MASK)
#define NET_BUFFER_LIST_GET_HASH_FUNCTION( x ) \
(PtrToUlong( NET_BUFFER_LIST_INFO( x, NetBufferListHashInfo ) ) & \
NDIS_HASH_FUNCTION_MASK)
#define NET_BUFFER_LIST_GET_HASH_VALUE( x ) \
PtrToUlong( NET_BUFFER_LIST_INFO( x, NetBufferListHashValue ) )
#define NDIS_MDL_TO_SPAN_PAGES( x ) \
(MmGetMdlByteCount( x ) == 0 ? 1 : (ADDRESS_AND_SIZE_TO_SPAN_PAGES( \
MmGetMdlVirtualAddress( x ), MmGetMdlByteCount( x ) )))
#define NDIS_MDL_LINKAGE( x ) ((x)->Next)
#endif
#if NDIS_SUPPORT_NDIS61
#define NET_BUFFER_DATA_PHYSICAL_ADDRESS( x ) ((x)->DataPhysicalAddress)
#endif
#if NDIS_SUPPORT_NDIS620
#define NET_BUFFER_FIRST_SHARED_MEM_INFO( x ) ((x)->SharedMemoryInfo)
#define NET_BUFFER_SHARED_MEM_NEXT_SEGMENT( x ) ((x)->NextSharedMemorySegment)
#define NET_BUFFER_SHARED_MEM_FLAGS( x ) ((x)->SharedMemoryFlags)
#define NET_BUFFER_SHARED_MEM_HANDLE( x ) ((x)->SharedMemoryHandle)
#define NET_BUFFER_SHARED_MEM_OFFSET( x ) ((x)->SharedMemoryOffset)
#define NET_BUFFER_SHARED_MEM_LENGTH( x ) ((x)->SharedMemoryLength)
#define NET_BUFFER_SCATTER_GATHER_LIST( x ) ((x)->ScatterGatherList)
#define NDIS_NBL_ADD_MEDIA_SPECIFIC_INFO_EX( x, p ) \
{ \
PNDIS_NBL_MEDIA_SPECIFIC_INFORMATION_EX v; \
v = NET_BUFFER_LIST_INFO( x, MediaSpecificInformationEx ); \
NET_BUFFER_LIST_INFO( x, MediaSpecificInformationEx ) = (p); \
(p)->NextEntry = v; \
}
#define NDIS_NBL_REMOVE_MEDIA_SPECIFIC_INFO_EX( x, p ) \
{ \
PNDIS_NBL_MEDIA_SPECIFIC_INFORMATION_EX *v; \
v = (PNDIS_NBL_MEDIA_SPECIFIC_INFORMATION_EX *) \
&NET_BUFFER_LIST_INFO( x, MediaSpecificInformationEx ); \
while( *v != NULL ) { \
if( (*v)->Tag == (p)->Tag ) { \
*v = (*v)->NextEntry; \
break; \
} \
v = &(*v)->NextEntry; \
} \
}
#define NDIS_NBL_GET_MEDIA_SPECIFIC_INFO_EX( x, p1, p2 ) \
{ \
PNDIS_NBL_MEDIA_SPECIFIC_INFORMATION_EX v; \
p2 = NULL; \
v = (PNDIS_MEDIA_SPECIFIC_INFORMATION_EX) \
NET_BUFFER_LIST_INFO( x, MediaSpecificInformationEx ); \
while( v != NULL ) { \
if( v->Tag == p1 ) { \
p2 = v; \
break; \
} \
v = v->NextEntry; \
} \
}
#define NET_BUFFER_LIST_RECEIVE_FILTER_ID( x ) \
(((PNDIS_NET_BUFFER_LIST_FILTERING_INFO)&NET_BUFFER_LIST_INFO( x, \
NetBufferListFilteringInfo ))->FilteringInfo.FilterId)
#define NET_BUFFER_LIST_RECEIVE_QUEUE_ID( x ) \
(((PNDIS_NET_BUFFER_LIST_FILTERING_INFO)&NET_BUFFER_LIST_INFO( x, \
NetBufferListFilteringInfo ))->FilteringInfo.QueueId)
#endif
/* Aliases */
#define NdisMoveMemory RtlCopyMemory
#define NdisZeroMemory RtlZeroMemory
#define NdisEqualMemory RtlEqualMemory
#define NdisFillMemory RtlFillMemory
#define NdisRetrieveUlong RtlRetrieveUlong
#define NdisStoreUlong RtlStroeUlong
#define NdisMoveToMappedMemory NdisMoveMappedMemory
#define NdisMoveFromMappedMemory NdisMoveMappedMemory
#define NdisGetCurrentSystemTime KeQuerySystemTime
#define NdisInterlockedIncrement InterlockedIncrement
#define NdisInterlockedDecrement InterlockedDecrement
#define NdisInterlockedFlushSList ExInterlockedFlushSList
#define NdisInitializeSListHead ExInitializeSListHead
#define NdisQueryDepthSList ExQueryDepthSList
#define NdisInitializeListHead InitializeListHead
#define NdisStallExecution KeStallExecutionProcessor
#define NdisEqualString RtlEqualUnicodeString
#define NdisEqualUnicodeString RtlEqualUnicodeString
#define NdisInitAnsiString RtlInitString
#define NdisInitUnicodeString RtlInitUnicodeString
#define NdisInitializeNPagedLookasideList ExInitializeNPagedLookasideList
#define NdisDeleteNPagedLookasideList ExDeleteNPagedLookasideList
#define NdisAllocateFromNPagedLookasideList ExAllocateFromNPagedLookasideList
#define NdisFreeToNPagedLookasideList ExFreeToNPagedLookasideList
#define NdisMSetupDmaTransfer NdisSetupDmaTransfer
#define NdisMCompleteDmaTransfer NdisCompleteDmaTransfer
#define NdisMCmOpenAddressFamilyComplete NdisCmOpenAddressFamilyComplete
#define NdisMCmNotifyCloseAddressFamily NdisCmNotifyCloseAddressFamily
#define NdisMCmCloseAddressFamilyComplete NdisCmCloseAddressFamilyComplete
#define NdisMCmRegisterSapComplete NdisCmRegisterSapComplete
#define NdisMCmDeregisterSapComplete NdisCmDeregisterSapComplete
#define NdisMCmMakeCallComplete NdisCmMakeCallComplete
#define NdisMCmCloseCallComplete NdisCmCloseCallComplete
#define NdisMCmAddPartyComplete NdisCmAddPartyComplete
#define NdisMCmDropPartyComplete NdisCmDropPartyComplete
#define NdisMCmDispatchIncomingCall NdisCmDispatchIncomingCall
#define NdisMCmDispatchCallConnected NdisCmDispatchCallConnected
#define NdisMCmModifyCallQoSComplete NdisCmModifyCallQoSComplete
#define NdisMCmDispatchIncomingCallQoSChange NdisCmDispatchIncomingCallQoSChange
#define NdisMCmDispatchIncomingCloseCall NdisCmDispatchIncomingCloseCall
#define NdisMCmDispatchIncomingDropParty NdisCmDispatchIncomingDropParty
#ifdef _X86_
#define NdisWriteRegisterUchar WRITE_REGISTER_UCHAR
#define NdisWriteRegisterUshort WRITE_REGISTER_USHORT
#define NdisWriteRegisterUlong WRITE_REGISTER_ULONG
#endif
#if NDIS_LEGACY_DRIVER
#define NdisFreeBuffer IoFreeMdl
#endif
#if NDIS_SUPPORT_NDIS6
#define NdisMAllocateSharedMemoryAsyncEx NdisMAllocateSharedMemoryAsync
#endif
#if NDIS_LEGACY_DRIVER
__inline VOID NdisQueryPacket( PNDIS_PACKET x, PUINT p1, PUINT p2, PNDIS_BUFFER *p3,
PUINT p4 )
{
if( p3 != NULL ) {
PNDIS_BUFFER *v1 = p3;
*v1 = x->Private.Head;
}
if( p1 || p2 || p4 ) {
if( !x->Private.ValidCounts ) {
PNDIS_BUFFER v2 = (x)->Private.Head;
UINT v3 = 0;
UINT v4 = 0;
UINT v5 = 0;
UINT v6;
UINT v7;
while( v2 != NULL ) {
NdisQueryBufferOffset( v2, &v7, &v6 );
v3 += v6;
v4 += (UINT)NDIS_BUFFER_TO_SPAN_PAGES( v2 );
++v5;
v2 = v2->Next;
}
x->Private.Count = v5;
x->Private.TotalLength = v3;
x->Private.PhysicalCount = v4;
x->Private.ValidCounts = TRUE;
}
if( p1 ) {
*p1 = x->Private.PhysicalCount;
}
if( p2 ) {
*p2 = x->Private.Count;
}
if( p4 ) {
*p4 = x->Private.TotalLength;
}
}
}
#endif /* NDIS_LEGACY_DRIVER */
#ifdef __cplusplus
} /* extern "C" */
#endif
#endif /* _NDIS_ */