/* * ndis.h * * Network Device Interface Specification definitions * * This file is part of the ReactOS DDK package. * * Contributors: * Created by Casper S. Hornstrup * * THIS SOFTWARE IS NOT COPYRIGHTED * * This source code is offered for use in the public domain. You may * use, modify or distribute it freely. * * This code is distributed in the hope that it will be useful but * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY * DISCLAIMED. This includes but is not limited to warranties of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * * DEFINES: i386 - Target platform is i386 * NDIS_WRAPPER - Define only for NDIS library * NDIS_MINIPORT_DRIVER - Define only for NDIS miniport drivers * NDIS40 - Use NDIS 4.0 structures by default * NDIS50 - Use NDIS 5.0 structures by default * NDIS51 - Use NDIS 5.1 structures by default * NDIS40_MINIPORT - Building NDIS 4.0 miniport driver * NDIS50_MINIPORT - Building NDIS 5.0 miniport driver * NDIS51_MINIPORT - Building NDIS 5.1 miniport driver */ #ifndef _NDIS_ #define _NDIS_ #ifndef NDIS_WDM #define NDIS_WDM 0 #endif #include "ntddk.h" #include "netpnp.h" #include "ntstatus.h" #include "netevent.h" #include typedef _Return_type_success_(return >= 0) int NDIS_STATUS, *PNDIS_STATUS; #include "ntddndis.h" #if !defined(_WINDEF_H) typedef unsigned int UINT, *PUINT; #endif #ifdef __cplusplus extern "C" { #endif __drv_Mode_impl(NDIS_INCLUDED) #ifndef __NET_PNP__ #define __NET_PNP__ typedef enum _NET_DEVICE_POWER_STATE { NetDeviceStateUnspecified = 0, NetDeviceStateD0, NetDeviceStateD1, NetDeviceStateD2, NetDeviceStateD3, NetDeviceStateMaximum } NET_DEVICE_POWER_STATE, *PNET_DEVICE_POWER_STATE; typedef enum _NET_PNP_EVENT_CODE { NetEventSetPower, NetEventQueryPower, NetEventQueryRemoveDevice, NetEventCancelRemoveDevice, NetEventReconfigure, NetEventBindList, NetEventBindsComplete, NetEventPnPCapabilities, NetEventPause, NetEventRestart, NetEventPortActivation, NetEventPortDeactivation, NetEventIMReEnableDevice, NetEventMaximum } NET_PNP_EVENT_CODE, *PNET_PNP_EVENT_CODE; 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, *PNET_PNP_EVENT; #endif /* __NET_PNP__ */ #if !defined(NDIS_WRAPPER) #if (defined(NDIS_MINIPORT_MAJOR_VERSION) || \ (defined(NDIS_MINIPORT_MINOR_VERSION)) || \ (defined(NDIS_PROTOCOL_MAJOR_VERSION)) || \ (defined(NDIS_PROTOCOL_MINOR_VERSION)) || \ (defined(NDIS_FILTER_MAJOR_VERSION)) || \ (defined(NDIS_FILTER_MINOR_VERSION))) #error "Driver should not redefine NDIS reserved macros" #endif #if defined(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 #else #error "Only NDIS miniport drivers with version >= 5 are supported" #endif #if ((NDIS_MINIPORT_MAJOR_VERSION == 6) && \ (NDIS_MINIPORT_MINOR_VERSION != 20) && \ (NDIS_MINIPORT_MINOR_VERSION != 1) && \ (NDIS_MINIPORT_MINOR_VERSION != 0)) #error "Invalid miniport major/minor version combination" #elif ((NDIS_MINIPORT_MAJOR_VERSION == 5) && \ (NDIS_MINIPORT_MINOR_VERSION != 1) && \ (NDIS_MINIPORT_MINOR_VERSION != 0)) #error "Invalid miniport major/minor version combination" #endif #if (NDIS_MINIPORT_MAJOR_VERSION == 6) && \ ((NDIS_MINIPORT_MINOR_VERSION == 20 && NTDDI_VERSION < NTDDI_WIN7) || \ (NDIS_MINIPORT_MINOR_VERSION == 1 && NTDDI_VERSION < NTDDI_VISTA) || \ (NDIS_MINIPORT_MINOR_VERSION == 0 && NTDDI_VERSION < NTDDI_VISTA)) #error "Wrong NDIS/DDI version" #elif ((NDIS_MINIPORT_MAJOR_VERSION == 5) && \ (((NDIS_MINIPORT_MINOR_VERSION == 1) && (NTDDI_VERSION < NTDDI_WINXP)) || \ ((NDIS_MINIPORT_MINOR_VERSION == 0) && (NTDDI_VERSION < NTDDI_WIN2K)))) #error "Wrong NDIS/DDI version" #endif #endif /* defined(NDIS_MINIPORT_DRIVER) */ #if defined(NDIS30) #error "Only NDIS Protocol drivers version 4 or later are supported" #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 #endif #if !defined(NDIS_MINIPORT_DRIVER) && !defined(NDIS_PROTOCOL_MAJOR_VERSION) #define NDIS40 #define NDIS_PROTOCOL_MAJOR_VERSION 4 #define NDIS_PROTOCOL_MINOR_VERSION 0 #endif #if defined(NDIS_FILTER_MAJOR_VERSION) #if ((NDIS_FILTER_MAJOR_VERSION == 6) && \ (NDIS_FILTER_MINOR_VERSION != 20) && \ (NDIS_FILTER_MINOR_VERSION != 1) && \ (NDIS_FILTER_MINOR_VERSION != 0)) #error "Invalid Filter version" #endif #endif /* defined(NDIS_FILTER_MAJOR_VERSION) */ #if defined(NDIS_PROTOCOL_MAJOR_VERSION) #if ((NDIS_PROTOCOL_MAJOR_VERSION == 6) && \ (NDIS_PROTOCOL_MINOR_VERSION != 20) && \ (NDIS_PROTOCOL_MINOR_VERSION != 1) && \ (NDIS_PROTOCOL_MINOR_VERSION != 0)) #error "Invalid Protocol version" #elif ((NDIS_PROTOCOL_MAJOR_VERSION == 5) && \ (NDIS_PROTOCOL_MINOR_VERSION != 1) && (NDIS_PROTOCOL_MINOR_VERSION != 0)) #error "Invalid Protocol version" #elif ((NDIS_PROTOCOL_MAJOR_VERSION == 4) && (NDIS_PROTOCOL_MINOR_VERSION != 0)) #error "Invalid Protocol major/minor version" #endif #if ((NDIS_PROTOCOL_MAJOR_VERSION == 6) && (NTDDI_VERSION < NTDDI_VISTA)) #error "Wrong NDIS/DDI version" #endif #endif /* defined(NDIS_PROTOCOL_MAJOR_VERSION) */ #endif /* !defined(NDIS_WRAPPER) */ #if !defined(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 /* !defined(NDIS_LEGACY_MINIPORT) */ #if !defined(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 /* !defined(NDIS_LEGACY_PROTOCOL) */ #if !defined(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 /* !defined(NDIS_LEGACY_DRIVER) */ #if !defined(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 /* !defined(NDIS_SUPPORT_NDIS6) */ #if !defined(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 /* !defined(NDIS_SUPPORT_NDIS61) */ #if !defined(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 /* !defined(NDIS_SUPPORT_NDIS620) */ #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 #if defined(NDIS_WRAPPER) #define NDISAPI #else #define NDISAPI DECLSPEC_IMPORT #endif typedef PVOID QUEUED_CLOSE; //FIXME : Doesn't exist in public headers typedef struct _X_FILTER FDDI_FILTER, *PFDDI_FILTER; typedef struct _X_FILTER TR_FILTER, *PTR_FILTER; typedef struct _X_FILTER NULL_FILTER, *PNULL_FILTER; typedef struct _NDIS_MINIPORT_BLOCK NDIS_MINIPORT_BLOCK, *PNDIS_MINIPORT_BLOCK; typedef struct _REFERENCE { KSPIN_LOCK SpinLock; USHORT ReferenceCount; BOOLEAN Closing; } REFERENCE, *PREFERENCE; /* NDIS base types */ typedef struct _NDIS_SPIN_LOCK { KSPIN_LOCK SpinLock; KIRQL OldIrql; } NDIS_SPIN_LOCK, *PNDIS_SPIN_LOCK; typedef struct _NDIS_EVENT { KEVENT Event; } NDIS_EVENT, *PNDIS_EVENT; typedef PVOID NDIS_HANDLE, *PNDIS_HANDLE; typedef ANSI_STRING NDIS_ANSI_STRING, *PNDIS_ANSI_STRING; typedef UNICODE_STRING NDIS_STRING, *PNDIS_STRING; typedef MDL NDIS_BUFFER, *PNDIS_BUFFER; /* NDIS_STATUS constants */ #define NDIS_STATUS_SUCCESS ((NDIS_STATUS)STATUS_SUCCESS) #define NDIS_STATUS_PENDING ((NDIS_STATUS)STATUS_PENDING) #define NDIS_STATUS_NOT_RECOGNIZED ((NDIS_STATUS)0x00010001L) #define NDIS_STATUS_NOT_COPIED ((NDIS_STATUS)0x00010002L) #define NDIS_STATUS_NOT_ACCEPTED ((NDIS_STATUS)0x00010003L) #define NDIS_STATUS_CALL_ACTIVE ((NDIS_STATUS)0x00010007L) #define NDIS_STATUS_INDICATION_REQUIRED ((NDIS_STATUS)STATUS_NDIS_INDICATION_REQUIRED) #define NDIS_STATUS_ONLINE ((NDIS_STATUS)0x40010003L) #define NDIS_STATUS_RESET_START ((NDIS_STATUS)0x40010004L) #define NDIS_STATUS_RESET_END ((NDIS_STATUS)0x40010005L) #define NDIS_STATUS_RING_STATUS ((NDIS_STATUS)0x40010006L) #define NDIS_STATUS_CLOSED ((NDIS_STATUS)0x40010007L) #define NDIS_STATUS_WAN_LINE_UP ((NDIS_STATUS)0x40010008L) #define NDIS_STATUS_WAN_LINE_DOWN ((NDIS_STATUS)0x40010009L) #define NDIS_STATUS_WAN_FRAGMENT ((NDIS_STATUS)0x4001000AL) #define NDIS_STATUS_MEDIA_CONNECT ((NDIS_STATUS)0x4001000BL) #define NDIS_STATUS_MEDIA_DISCONNECT ((NDIS_STATUS)0x4001000CL) #define NDIS_STATUS_HARDWARE_LINE_UP ((NDIS_STATUS)0x4001000DL) #define NDIS_STATUS_HARDWARE_LINE_DOWN ((NDIS_STATUS)0x4001000EL) #define NDIS_STATUS_INTERFACE_UP ((NDIS_STATUS)0x4001000FL) #define NDIS_STATUS_INTERFACE_DOWN ((NDIS_STATUS)0x40010010L) #define NDIS_STATUS_MEDIA_BUSY ((NDIS_STATUS)0x40010011L) #define NDIS_STATUS_MEDIA_SPECIFIC_INDICATION ((NDIS_STATUS)0x40010012L) #define NDIS_STATUS_WW_INDICATION NDIS_STATUS_MEDIA_SPECIFIC_INDICATION #define NDIS_STATUS_LINK_SPEED_CHANGE ((NDIS_STATUS)0x40010013L) #define NDIS_STATUS_WAN_GET_STATS ((NDIS_STATUS)0x40010014L) #define NDIS_STATUS_WAN_CO_FRAGMENT ((NDIS_STATUS)0x40010015L) #define NDIS_STATUS_WAN_CO_LINKPARAMS ((NDIS_STATUS)0x40010016L) #if NDIS_SUPPORT_NDIS6 #define NDIS_STATUS_LINK_STATE ((NDIS_STATUS)0x40010017L) #define NDIS_STATUS_NETWORK_CHANGE ((NDIS_STATUS)0x40010018L) #define NDIS_STATUS_MEDIA_SPECIFIC_INDICATION_EX ((NDIS_STATUS)0x40010019L) #define NDIS_STATUS_PORT_STATE ((NDIS_STATUS)0x40010022L) #define NDIS_STATUS_OPER_STATUS ((NDIS_STATUS)0x40010023L) #define NDIS_STATUS_PACKET_FILTER ((NDIS_STATUS)0x40010024L) #endif /* NDIS_SUPPORT_NDIS6 */ #define NDIS_STATUS_WAN_CO_MTULINKPARAMS ((NDIS_STATUS)0x40010025L) #if NDIS_SUPPORT_NDIS6 #define NDIS_STATUS_IP_OPER_STATUS ((NDIS_STATUS)0x40010026L) #define NDIS_STATUS_OFFLOAD_PAUSE ((NDIS_STATUS)0x40020001L) #define NDIS_STATUS_UPLOAD_ALL ((NDIS_STATUS)0x40020002L) #define NDIS_STATUS_OFFLOAD_RESUME ((NDIS_STATUS)0x40020003L) #define NDIS_STATUS_OFFLOAD_PARTIAL_SUCCESS ((NDIS_STATUS)0x40020004L) #define NDIS_STATUS_OFFLOAD_STATE_INVALID ((NDIS_STATUS)0x40020005L) #define NDIS_STATUS_TASK_OFFLOAD_CURRENT_CONFIG ((NDIS_STATUS)0x40020006L) #define NDIS_STATUS_TASK_OFFLOAD_HARDWARE_CAPABILITIES ((NDIS_STATUS)0x40020007L) #define NDIS_STATUS_OFFLOAD_ENCASPULATION_CHANGE ((NDIS_STATUS)0x40020008L) #define NDIS_STATUS_TCP_CONNECTION_OFFLOAD_HARDWARE_CAPABILITIES ((NDIS_STATUS)0x4002000BL) #if (NDIS_SUPPORT_NDIS61) #define NDIS_STATUS_HD_SPLIT_CURRENT_CONFIG ((NDIS_STATUS)0x4002000CL) #endif #if (NDIS_SUPPORT_NDIS620) #define NDIS_STATUS_RECEIVE_QUEUE_STATE ((NDIS_STATUS)0x4002000DL) #endif #define NDIS_STATUS_OFFLOAD_IM_RESERVED1 ((NDIS_STATUS)0x40020100L) #define NDIS_STATUS_OFFLOAD_IM_RESERVED2 ((NDIS_STATUS)0x40020101L) #define NDIS_STATUS_OFFLOAD_IM_RESERVED3 ((NDIS_STATUS)0x40020102L) #define NDIS_STATUS_DOT11_SCAN_CONFIRM ((NDIS_STATUS)0x40030000L) #define NDIS_STATUS_DOT11_MPDU_MAX_LENGTH_CHANGED ((NDIS_STATUS)0x40030001L) #define NDIS_STATUS_DOT11_ASSOCIATION_START ((NDIS_STATUS)0x40030002L) #define NDIS_STATUS_DOT11_ASSOCIATION_COMPLETION ((NDIS_STATUS)0x40030003L) #define NDIS_STATUS_DOT11_CONNECTION_START ((NDIS_STATUS)0x40030004L) #define NDIS_STATUS_DOT11_CONNECTION_COMPLETION ((NDIS_STATUS)0x40030005L) #define NDIS_STATUS_DOT11_ROAMING_START ((NDIS_STATUS)0x40030006L) #define NDIS_STATUS_DOT11_ROAMING_COMPLETION ((NDIS_STATUS)0x40030007L) #define NDIS_STATUS_DOT11_DISASSOCIATION ((NDIS_STATUS)0x40030008L) #define NDIS_STATUS_DOT11_TKIPMIC_FAILURE ((NDIS_STATUS)0x40030009L) #define NDIS_STATUS_DOT11_PMKID_CANDIDATE_LIST ((NDIS_STATUS)0x4003000AL) #define NDIS_STATUS_DOT11_PHY_STATE_CHANGED ((NDIS_STATUS)0x4003000BL) #define NDIS_STATUS_DOT11_LINK_QUALITY ((NDIS_STATUS)0x4003000CL) #define NDIS_STATUS_DOT11_INCOMING_ASSOC_STARTED ((NDIS_STATUS)0x4003000DL) #define NDIS_STATUS_DOT11_INCOMING_ASSOC_REQUEST_RECEIVED ((NDIS_STATUS)0x4003000EL) #define NDIS_STATUS_DOT11_INCOMING_ASSOC_COMPLETION ((NDIS_STATUS)0x4003000FL) #define NDIS_STATUS_DOT11_STOP_AP ((NDIS_STATUS)0x40030010L) #define NDIS_STATUS_DOT11_PHY_FREQUENCY_ADOPTED ((NDIS_STATUS)0x40030011L) #define NDIS_STATUS_DOT11_CAN_SUSTAIN_AP ((NDIS_STATUS)0x40030012L) #define NDIS_STATUS_WWAN_DEVICE_CAPS ((NDIS_STATUS)0x40041000) #define NDIS_STATUS_WWAN_READY_INFO ((NDIS_STATUS)0x40041001) #define NDIS_STATUS_WWAN_RADIO_STATE ((NDIS_STATUS)0x40041002) #define NDIS_STATUS_WWAN_PIN_INFO ((NDIS_STATUS)0x40041003) #define NDIS_STATUS_WWAN_PIN_LIST ((NDIS_STATUS)0x40041004) #define NDIS_STATUS_WWAN_HOME_PROVIDER ((NDIS_STATUS)0x40041005) #define NDIS_STATUS_WWAN_PREFERRED_PROVIDERS ((NDIS_STATUS)0x40041006) #define NDIS_STATUS_WWAN_VISIBLE_PROVIDERS ((NDIS_STATUS)0x40041007) #define NDIS_STATUS_WWAN_REGISTER_STATE ((NDIS_STATUS)0x40041008) #define NDIS_STATUS_WWAN_PACKET_SERVICE ((NDIS_STATUS)0x40041009) #define NDIS_STATUS_WWAN_SIGNAL_STATE ((NDIS_STATUS)0x4004100a) #define NDIS_STATUS_WWAN_CONTEXT_STATE ((NDIS_STATUS)0x4004100b) #define NDIS_STATUS_WWAN_PROVISIONED_CONTEXTS ((NDIS_STATUS)0x4004100c) #define NDIS_STATUS_WWAN_SERVICE_ACTIVATION ((NDIS_STATUS)0x4004100d) #define NDIS_STATUS_WWAN_SMS_CONFIGURATION ((NDIS_STATUS)0x4004100e) #define NDIS_STATUS_WWAN_SMS_RECEIVE ((NDIS_STATUS)0x4004100f) #define NDIS_STATUS_WWAN_SMS_SEND ((NDIS_STATUS)0x40041010) #define NDIS_STATUS_WWAN_SMS_DELETE ((NDIS_STATUS)0x40041011) #define NDIS_STATUS_WWAN_SMS_STATUS ((NDIS_STATUS)0x40041012) #define NDIS_STATUS_WWAN_DNS_ADDRESS ((NDIS_STATUS)0x40041013) #define NDIS_STATUS_WWAN_VENDOR_SPECIFIC ((NDIS_STATUS)0x40043000) #endif /* NDIS_SUPPORT_NDIS6 */ #if (NDIS_SUPPORT_NDIS620) #define NDIS_STATUS_PM_WOL_PATTERN_REJECTED ((NDIS_STATUS)0x40030051L) #define NDIS_STATUS_PM_OFFLOAD_REJECTED ((NDIS_STATUS)0x40030052L) #define NDIS_STATUS_PM_CAPABILITIES_CHANGE ((NDIS_STATUS)0x40030053L) #endif #define NDIS_STATUS_NOT_RESETTABLE ((NDIS_STATUS)0x80010001L) #define NDIS_STATUS_SOFT_ERRORS ((NDIS_STATUS)0x80010003L) #define NDIS_STATUS_HARD_ERRORS ((NDIS_STATUS)0x80010004L) #define NDIS_STATUS_BUFFER_OVERFLOW ((NDIS_STATUS)STATUS_BUFFER_OVERFLOW) #define NDIS_STATUS_FAILURE ((NDIS_STATUS)STATUS_UNSUCCESSFUL) #define NDIS_STATUS_RESOURCES ((NDIS_STATUS)STATUS_INSUFFICIENT_RESOURCES) #define NDIS_STATUS_CLOSING ((NDIS_STATUS)0xC0010002L) #define NDIS_STATUS_BAD_VERSION ((NDIS_STATUS)0xC0010004L) #define NDIS_STATUS_BAD_CHARACTERISTICS ((NDIS_STATUS)0xC0010005L) #define NDIS_STATUS_ADAPTER_NOT_FOUND ((NDIS_STATUS)0xC0010006L) #define NDIS_STATUS_OPEN_FAILED ((NDIS_STATUS)0xC0010007L) #define NDIS_STATUS_DEVICE_FAILED ((NDIS_STATUS)0xC0010008L) #define NDIS_STATUS_MULTICAST_FULL ((NDIS_STATUS)0xC0010009L) #define NDIS_STATUS_MULTICAST_EXISTS ((NDIS_STATUS)0xC001000AL) #define NDIS_STATUS_MULTICAST_NOT_FOUND ((NDIS_STATUS)0xC001000BL) #define NDIS_STATUS_REQUEST_ABORTED ((NDIS_STATUS)0xC001000CL) #define NDIS_STATUS_RESET_IN_PROGRESS ((NDIS_STATUS)0xC001000DL) #define NDIS_STATUS_CLOSING_INDICATING ((NDIS_STATUS)0xC001000EL) #define NDIS_STATUS_NOT_SUPPORTED ((NDIS_STATUS)STATUS_NOT_SUPPORTED) #define NDIS_STATUS_INVALID_PACKET ((NDIS_STATUS)0xC001000FL) #define NDIS_STATUS_OPEN_LIST_FULL ((NDIS_STATUS)0xC0010010L) #define NDIS_STATUS_ADAPTER_NOT_READY ((NDIS_STATUS)0xC0010011L) #define NDIS_STATUS_ADAPTER_NOT_OPEN ((NDIS_STATUS)0xC0010012L) #define NDIS_STATUS_NOT_INDICATING ((NDIS_STATUS)0xC0010013L) #define NDIS_STATUS_INVALID_LENGTH ((NDIS_STATUS)0xC0010014L) #define NDIS_STATUS_INVALID_DATA ((NDIS_STATUS)0xC0010015L) #define NDIS_STATUS_BUFFER_TOO_SHORT ((NDIS_STATUS)0xC0010016L) #define NDIS_STATUS_INVALID_OID ((NDIS_STATUS)0xC0010017L) #define NDIS_STATUS_ADAPTER_REMOVED ((NDIS_STATUS)0xC0010018L) #define NDIS_STATUS_UNSUPPORTED_MEDIA ((NDIS_STATUS)0xC0010019L) #define NDIS_STATUS_GROUP_ADDRESS_IN_USE ((NDIS_STATUS)0xC001001AL) #define NDIS_STATUS_FILE_NOT_FOUND ((NDIS_STATUS)0xC001001BL) #define NDIS_STATUS_ERROR_READING_FILE ((NDIS_STATUS)0xC001001CL) #define NDIS_STATUS_ALREADY_MAPPED ((NDIS_STATUS)0xC001001DL) #define NDIS_STATUS_RESOURCE_CONFLICT ((NDIS_STATUS)0xC001001EL) #define NDIS_STATUS_NO_CABLE ((NDIS_STATUS)0xC001001FL) #define NDIS_STATUS_INVALID_SAP ((NDIS_STATUS)0xC0010020L) #define NDIS_STATUS_SAP_IN_USE ((NDIS_STATUS)0xC0010021L) #define NDIS_STATUS_INVALID_ADDRESS ((NDIS_STATUS)0xC0010022L) #define NDIS_STATUS_VC_NOT_ACTIVATED ((NDIS_STATUS)0xC0010023L) #define NDIS_STATUS_DEST_OUT_OF_ORDER ((NDIS_STATUS)0xC0010024L) #define NDIS_STATUS_VC_NOT_AVAILABLE ((NDIS_STATUS)0xC0010025L) #define NDIS_STATUS_CELLRATE_NOT_AVAILABLE ((NDIS_STATUS)0xC0010026L) #define NDIS_STATUS_INCOMPATABLE_QOS ((NDIS_STATUS)0xC0010027L) #define NDIS_STATUS_AAL_PARAMS_UNSUPPORTED ((NDIS_STATUS)0xC0010028L) #define NDIS_STATUS_NO_ROUTE_TO_DESTINATION ((NDIS_STATUS)0xC0010029L) #define NDIS_STATUS_TOKEN_RING_OPEN_ERROR ((NDIS_STATUS)0xC0011000L) #define NDIS_STATUS_INVALID_DEVICE_REQUEST ((NDIS_STATUS)STATUS_INVALID_DEVICE_REQUEST) #define NDIS_STATUS_NETWORK_UNREACHABLE ((NDIS_STATUS)STATUS_NETWORK_UNREACHABLE) #define NDIS_STATUS_HOST_UNREACHABLE ((NDIS_STATUS)STATUS_HOST_UNREACHABLE) #if NDIS_SUPPORT_NDIS6 #define NDIS_STATUS_SEND_ABORTED ((NDIS_STATUS)STATUS_NDIS_REQUEST_ABORTED) #define NDIS_STATUS_PAUSED ((NDIS_STATUS)STATUS_NDIS_PAUSED) #define NDIS_STATUS_INTERFACE_NOT_FOUND ((NDIS_STATUS)STATUS_NDIS_INTERFACE_NOT_FOUND) #define NDIS_STATUS_INVALID_PARAMETER ((NDIS_STATUS)STATUS_INVALID_PARAMETER) #define NDIS_STATUS_UNSUPPORTED_REVISION ((NDIS_STATUS)STATUS_NDIS_UNSUPPORTED_REVISION) #define NDIS_STATUS_INVALID_PORT ((NDIS_STATUS)STATUS_NDIS_INVALID_PORT) #define NDIS_STATUS_INVALID_PORT_STATE ((NDIS_STATUS)STATUS_NDIS_INVALID_PORT_STATE) #define NDIS_STATUS_INVALID_STATE ((NDIS_STATUS)STATUS_INVALID_DEVICE_STATE) #define NDIS_STATUS_MEDIA_DISCONNECTED ((NDIS_STATUS)STATUS_NDIS_MEDIA_DISCONNECTED) #define NDIS_STATUS_LOW_POWER_STATE ((NDIS_STATUS)STATUS_NDIS_LOW_POWER_STATE) #define NDIS_STATUS_DOT11_AUTO_CONFIG_ENABLED ((NDIS_STATUS)STATUS_NDIS_DOT11_AUTO_CONFIG_ENABLED) #define NDIS_STATUS_DOT11_MEDIA_IN_USE ((NDIS_STATUS)STATUS_NDIS_DOT11_MEDIA_IN_USE) #define NDIS_STATUS_DOT11_POWER_STATE_INVALID ((NDIS_STATUS)STATUS_NDIS_DOT11_POWER_STATE_INVALID) #define NDIS_STATUS_UPLOAD_IN_PROGRESS ((NDIS_STATUS)0xC0231001L) #define NDIS_STATUS_REQUEST_UPLOAD ((NDIS_STATUS)0xC0231002L) #define NDIS_STATUS_UPLOAD_REQUESTED ((NDIS_STATUS)0xC0231003L) #define NDIS_STATUS_OFFLOAD_TCP_ENTRIES ((NDIS_STATUS)0xC0231004L) #define NDIS_STATUS_OFFLOAD_PATH_ENTRIES ((NDIS_STATUS)0xC0231005L) #define NDIS_STATUS_OFFLOAD_NEIGHBOR_ENTRIES ((NDIS_STATUS)0xC0231006L) #define NDIS_STATUS_OFFLOAD_IP_ADDRESS_ENTRIES ((NDIS_STATUS)0xC0231007L) #define NDIS_STATUS_OFFLOAD_HW_ADDRESS_ENTRIES ((NDIS_STATUS)0xC0231008L) #define NDIS_STATUS_OFFLOAD_VLAN_ENTRIES ((NDIS_STATUS)0xC0231009L) #define NDIS_STATUS_OFFLOAD_TCP_XMIT_BUFFER ((NDIS_STATUS)0xC023100AL) #define NDIS_STATUS_OFFLOAD_TCP_RCV_BUFFER ((NDIS_STATUS)0xC023100BL) #define NDIS_STATUS_OFFLOAD_TCP_RCV_WINDOW ((NDIS_STATUS)0xC023100CL) #define NDIS_STATUS_OFFLOAD_VLAN_MISMATCH ((NDIS_STATUS)0xC023100DL) #define NDIS_STATUS_OFFLOAD_DATA_NOT_ACCEPTED ((NDIS_STATUS)0xC023100EL) #define NDIS_STATUS_OFFLOAD_POLICY ((NDIS_STATUS)0xC023100FL) #define NDIS_STATUS_OFFLOAD_DATA_PARTIALLY_ACCEPTED ((NDIS_STATUS)0xC0231010L) #define NDIS_STATUS_OFFLOAD_REQUEST_RESET ((NDIS_STATUS)0xC0231011L) #if NDIS_SUPPORT_NDIS620 #define NDIS_STATUS_PM_WOL_PATTERN_LIST_FULL ((NDIS_STATUS)STATUS_NDIS_PM_WOL_PATTERN_LIST_FULL) #define NDIS_STATUS_PM_PROTOCOL_OFFLOAD_LIST_FULL ((NDIS_STATUS)STATUS_NDIS_PM_PROTOCOL_OFFLOAD_LIST_FULL) #endif #endif /* NDIS_SUPPORT_NDIS6 */ #if (NDIS_SUPPORT_NDIS620) #define NDIS_STATUS_OFFLOAD_CONNECTION_REJECTED ((NDIS_STATUS)STATUS_NDIS_OFFLOAD_CONNECTION_REJECTED) #endif /* NDIS error codes for error logging */ #define NDIS_ERROR_CODE ULONG #define NDIS_ERROR_CODE_RESOURCE_CONFLICT EVENT_NDIS_RESOURCE_CONFLICT #define NDIS_ERROR_CODE_OUT_OF_RESOURCES EVENT_NDIS_OUT_OF_RESOURCE #define NDIS_ERROR_CODE_HARDWARE_FAILURE EVENT_NDIS_HARDWARE_FAILURE #define NDIS_ERROR_CODE_ADAPTER_NOT_FOUND EVENT_NDIS_ADAPTER_NOT_FOUND #define NDIS_ERROR_CODE_INTERRUPT_CONNECT EVENT_NDIS_INTERRUPT_CONNECT #define NDIS_ERROR_CODE_DRIVER_FAILURE EVENT_NDIS_DRIVER_FAILURE #define NDIS_ERROR_CODE_BAD_VERSION EVENT_NDIS_BAD_VERSION #define NDIS_ERROR_CODE_TIMEOUT EVENT_NDIS_TIMEOUT #define NDIS_ERROR_CODE_NETWORK_ADDRESS EVENT_NDIS_NETWORK_ADDRESS #define NDIS_ERROR_CODE_UNSUPPORTED_CONFIGURATION EVENT_NDIS_UNSUPPORTED_CONFIGURATION #define NDIS_ERROR_CODE_INVALID_VALUE_FROM_ADAPTER EVENT_NDIS_INVALID_VALUE_FROM_ADAPTER #define NDIS_ERROR_CODE_MISSING_CONFIGURATION_PARAMETER EVENT_NDIS_MISSING_CONFIGURATION_PARAMETER #define NDIS_ERROR_CODE_BAD_IO_BASE_ADDRESS EVENT_NDIS_BAD_IO_BASE_ADDRESS #define NDIS_ERROR_CODE_RECEIVE_SPACE_SMALL EVENT_NDIS_RECEIVE_SPACE_SMALL #define NDIS_ERROR_CODE_ADAPTER_DISABLED EVENT_NDIS_ADAPTER_DISABLED /* Memory allocation flags. Used by Ndis[Allocate|Free]Memory */ #define NDIS_MEMORY_CONTIGUOUS 0x00000001 #define NDIS_MEMORY_NONCACHED 0x00000002 /* NIC attribute flags. Used by NdisMSetAttributes(Ex) */ #define NDIS_ATTRIBUTE_IGNORE_PACKET_TIMEOUT 0x00000001 #define NDIS_ATTRIBUTE_IGNORE_REQUEST_TIMEOUT 0x00000002 #define NDIS_ATTRIBUTE_IGNORE_TOKEN_RING_ERRORS 0x00000004 #define NDIS_ATTRIBUTE_BUS_MASTER 0x00000008 #define NDIS_ATTRIBUTE_INTERMEDIATE_DRIVER 0x00000010 #define NDIS_ATTRIBUTE_DESERIALIZE 0x00000020 #define NDIS_ATTRIBUTE_NO_HALT_ON_SUSPEND 0x00000040 #define NDIS_ATTRIBUTE_SURPRISE_REMOVE_OK 0x00000080 #define NDIS_ATTRIBUTE_NOT_CO_NDIS 0x00000100 #define NDIS_ATTRIBUTE_USES_SAFE_BUFFER_APIS 0x00000200 /* Lock */ #if NDIS_SUPPORT_60_COMPATIBLE_API typedef union _NDIS_RW_LOCK_REFCOUNT { UINT RefCount; UCHAR cacheLine[16]; } NDIS_RW_LOCK_REFCOUNT; typedef struct _NDIS_RW_LOCK { __MINGW_EXTENSION union { __MINGW_EXTENSION struct { KSPIN_LOCK SpinLock; PVOID Context; }; UCHAR Reserved[16]; }; __MINGW_EXTENSION union { NDIS_RW_LOCK_REFCOUNT RefCount[MAXIMUM_PROCESSORS]; ULONG RefCountEx[sizeof(NDIS_RW_LOCK_REFCOUNT)/sizeof(ULONG) * MAXIMUM_PROCESSORS]; __MINGW_EXTENSION struct { KSPIN_LOCK RefCountLock; volatile ULONG SharedRefCount; volatile BOOLEAN WriterWaiting; }; }; } NDIS_RW_LOCK, *PNDIS_RW_LOCK; typedef struct _LOCK_STATE { USHORT LockState; KIRQL OldIrql; } LOCK_STATE, *PLOCK_STATE; #endif /* NDIS_SUPPORT_60_COMPATIBLE_API */ /* Timer */ _IRQL_requires_(DISPATCH_LEVEL) _IRQL_requires_same_ _Function_class_(NDIS_TIMER_FUNCTION) typedef VOID (NTAPI NDIS_TIMER_FUNCTION)( _In_ PVOID SystemSpecific1, _In_ PVOID FunctionContext, _In_ PVOID SystemSpecific2, _In_ PVOID SystemSpecific3); typedef NDIS_TIMER_FUNCTION *PNDIS_TIMER_FUNCTION; typedef struct _NDIS_TIMER { KTIMER Timer; KDPC Dpc; } NDIS_TIMER, *PNDIS_TIMER; /* Hardware */ typedef CM_MCA_POS_DATA NDIS_MCA_POS_DATA, *PNDIS_MCA_POS_DATA; typedef CM_EISA_SLOT_INFORMATION NDIS_EISA_SLOT_INFORMATION, *PNDIS_EISA_SLOT_INFORMATION; typedef CM_EISA_FUNCTION_INFORMATION NDIS_EISA_FUNCTION_INFORMATION, *PNDIS_EISA_FUNCTION_INFORMATION; typedef CM_PARTIAL_RESOURCE_LIST NDIS_RESOURCE_LIST, *PNDIS_RESOURCE_LIST; /* Flag bits */ #define READABLE_LOCAL_CLOCK 0x00000001 #define CLOCK_NETWORK_DERIVED 0x00000002 #define CLOCK_PRECISION 0x00000004 #define RECEIVE_TIME_INDICATION_CAPABLE 0x00000008 #define TIMED_SEND_CAPABLE 0x00000010 #define TIME_STAMP_CAPABLE 0x00000020 /* NDIS packet filter bits (OID_GEN_CURRENT_PACKET_FILTER) */ #define NDIS_PACKET_TYPE_DIRECTED 0x00000001 #define NDIS_PACKET_TYPE_MULTICAST 0x00000002 #define NDIS_PACKET_TYPE_ALL_MULTICAST 0x00000004 #define NDIS_PACKET_TYPE_BROADCAST 0x00000008 #define NDIS_PACKET_TYPE_SOURCE_ROUTING 0x00000010 #define NDIS_PACKET_TYPE_PROMISCUOUS 0x00000020 #define NDIS_PACKET_TYPE_SMT 0x00000040 #define NDIS_PACKET_TYPE_ALL_LOCAL 0x00000080 #define NDIS_PACKET_TYPE_GROUP 0x00001000 #define NDIS_PACKET_TYPE_ALL_FUNCTIONAL 0x00002000 #define NDIS_PACKET_TYPE_FUNCTIONAL 0x00004000 #define NDIS_PACKET_TYPE_MAC_FRAME 0x00008000 /* NDIS protocol option bits (OID_GEN_PROTOCOL_OPTIONS) */ #define NDIS_PROT_OPTION_ESTIMATED_LENGTH 0x00000001 #define NDIS_PROT_OPTION_NO_LOOPBACK 0x00000002 #define NDIS_PROT_OPTION_NO_RSVD_ON_RCVPKT 0x00000004 /* NDIS MAC option bits (OID_GEN_MAC_OPTIONS) */ #define NDIS_MAC_OPTION_COPY_LOOKAHEAD_DATA 0x00000001 #define NDIS_MAC_OPTION_RECEIVE_SERIALIZED 0x00000002 #define NDIS_MAC_OPTION_TRANSFERS_NOT_PEND 0x00000004 #define NDIS_MAC_OPTION_NO_LOOPBACK 0x00000008 #define NDIS_MAC_OPTION_FULL_DUPLEX 0x00000010 #define NDIS_MAC_OPTION_EOTX_INDICATION 0x00000020 #define NDIS_MAC_OPTION_8021P_PRIORITY 0x00000040 #define NDIS_MAC_OPTION_RESERVED 0x80000000 #define NDIS_GUID_TO_OID 0x00000001 #define NDIS_GUID_TO_STATUS 0x00000002 #define NDIS_GUID_ANSI_STRING 0x00000004 #define NDIS_GUID_UNICODE_STRING 0x00000008 #define NDIS_GUID_ARRAY 0x00000010 #if NDIS_LEGACY_DRIVER /* NDIS_PACKET_PRIVATE.Flags constants */ #define fPACKET_WRAPPER_RESERVED 0x3f #define fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO 0x40 #define fPACKET_ALLOCATED_BY_NDIS 0x80 #define NDIS_FLAGS_PROTOCOL_ID_MASK 0x0000000f #define NDIS_FLAGS_MULTICAST_PACKET 0x00000010 #define NDIS_FLAGS_RESERVED2 0x00000020 #define NDIS_FLAGS_RESERVED3 0x00000040 #define NDIS_FLAGS_DONT_LOOPBACK 0x00000080 #define NDIS_FLAGS_IS_LOOPBACK_PACKET 0x00000100 #define NDIS_FLAGS_LOOPBACK_ONLY 0x00000200 #define NDIS_FLAGS_RESERVED4 0x00000400 #define NDIS_FLAGS_DOUBLE_BUFFERED 0x00000800 #define NDIS_FLAGS_SENT_AT_DPC 0x00001000 #define NDIS_FLAGS_USES_SG_BUFFER_LIST 0x00002000 #define NDIS_FLAGS_USES_ORIGINAL_PACKET 0x00004000 #define NDIS_FLAGS_PADDED 0x00010000 #define NDIS_FLAGS_XLATE_AT_TOP 0x00020000 typedef NDIS_HANDLE PNDIS_PACKET_POOL; typedef struct _NDIS_PACKET_PRIVATE { UINT PhysicalCount; UINT TotalLength; PNDIS_BUFFER Head; PNDIS_BUFFER Tail; PNDIS_PACKET_POOL Pool; UINT Count; ULONG Flags; BOOLEAN ValidCounts; UCHAR NdisPacketFlags; USHORT NdisPacketOobOffset; } NDIS_PACKET_PRIVATE, *PNDIS_PACKET_PRIVATE; typedef struct _NDIS_PACKET { NDIS_PACKET_PRIVATE Private; __MINGW_EXTENSION union { __MINGW_EXTENSION struct { UCHAR MiniportReserved[2 * sizeof(PVOID)]; UCHAR WrapperReserved[2 * sizeof(PVOID)]; }; __MINGW_EXTENSION struct { UCHAR MiniportReservedEx[3 * sizeof(PVOID)]; UCHAR WrapperReservedEx[sizeof(PVOID)]; }; __MINGW_EXTENSION struct { UCHAR MacReserved[4 * sizeof(PVOID)]; }; }; ULONG_PTR Reserved[2]; UCHAR ProtocolReserved[1]; } NDIS_PACKET, *PNDIS_PACKET, **PPNDIS_PACKET; typedef struct _NDIS_PACKET_STACK { ULONG_PTR IMReserved[2]; ULONG_PTR NdisReserved[4]; } NDIS_PACKET_STACK, *PNDIS_PACKET_STACK; #endif /* NDIS_LEGACY_DRIVER */ typedef enum _NDIS_CLASS_ID { NdisClass802_3Priority, NdisClassWirelessWanMbxMailbox, NdisClassIrdaPacketInfo, NdisClassAtmAALInfo } NDIS_CLASS_ID; typedef struct _MEDIA_SPECIFIC_INFORMATION { UINT NextEntryOffset; NDIS_CLASS_ID ClassId; UINT Size; UCHAR ClassInformation[1]; } MEDIA_SPECIFIC_INFORMATION, *PMEDIA_SPECIFIC_INFORMATION; #if NDIS_LEGACY_DRIVER typedef struct _NDIS_PACKET_OOB_DATA { __MINGW_EXTENSION union { ULONGLONG TimeToSend; ULONGLONG TimeSent; }; ULONGLONG TimeReceived; UINT HeaderSize; UINT SizeMediaSpecificInfo; PVOID MediaSpecificInformation; NDIS_STATUS Status; } NDIS_PACKET_OOB_DATA, *PNDIS_PACKET_OOB_DATA; #endif /* Request types used by NdisRequest */ typedef enum _NDIS_REQUEST_TYPE { NdisRequestQueryInformation, NdisRequestSetInformation, NdisRequestQueryStatistics, NdisRequestOpen, NdisRequestClose, NdisRequestSend, NdisRequestTransferData, NdisRequestReset, NdisRequestGeneric1, NdisRequestGeneric2, NdisRequestGeneric3, NdisRequestGeneric4, #if NDIS_SUPPORT_NDIS6 NdisRequestMethod, #endif } NDIS_REQUEST_TYPE, *PNDIS_REQUEST_TYPE; #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)]; __MINGW_EXTENSION union { UCHAR CallMgrReserved[2 * sizeof(PVOID)]; UCHAR ProtocolReserved[2 * sizeof(PVOID)]; }; UCHAR MiniportReserved[2 * sizeof(PVOID)]; #endif } NDIS_REQUEST, *PNDIS_REQUEST; #endif /* NDIS_LEGACY_DRIVER */ /* Wide Area Networks definitions */ #if NDIS_LEGACY_DRIVER typedef struct _NDIS_WAN_PACKET { LIST_ENTRY WanPacketQueue; PUCHAR CurrentBuffer; ULONG CurrentLength; PUCHAR StartBuffer; PUCHAR EndBuffer; PVOID ProtocolReserved1; PVOID ProtocolReserved2; PVOID ProtocolReserved3; PVOID ProtocolReserved4; PVOID MacReserved1; PVOID MacReserved2; PVOID MacReserved3; PVOID MacReserved4; } NDIS_WAN_PACKET, *PNDIS_WAN_PACKET; #endif /* DMA channel information */ typedef struct _NDIS_DMA_DESCRIPTION { BOOLEAN DemandMode; BOOLEAN AutoInitialize; BOOLEAN DmaChannelSpecified; DMA_WIDTH DmaWidth; DMA_SPEED DmaSpeed; ULONG DmaPort; ULONG DmaChannel; } NDIS_DMA_DESCRIPTION, *PNDIS_DMA_DESCRIPTION; typedef struct _NDIS_DMA_BLOCK { PVOID MapRegisterBase; KEVENT AllocationEvent; PADAPTER_OBJECT SystemAdapterObject; PVOID Miniport; BOOLEAN InProgress; } NDIS_DMA_BLOCK, *PNDIS_DMA_BLOCK; typedef UCHAR NDIS_DMA_SIZE; #define NDIS_DMA_24BITS ((NDIS_DMA_SIZE)0) #define NDIS_DMA_32BITS ((NDIS_DMA_SIZE)1) #define NDIS_DMA_64BITS ((NDIS_DMA_SIZE)2) typedef enum _NDIS_PROCESSOR_TYPE { NdisProcessorX86, NdisProcessorMips, NdisProcessorAlpha, NdisProcessorPpc, NdisProcessorAmd64, NdisProcessorIA64 } NDIS_PROCESSOR_TYPE, *PNDIS_PROCESSOR_TYPE; typedef enum _NDIS_ENVIRONMENT_TYPE { NdisEnvironmentWindows, NdisEnvironmentWindowsNt } NDIS_ENVIRONMENT_TYPE, *PNDIS_ENVIRONMENT_TYPE; /* Possible hardware architecture */ typedef enum _NDIS_INTERFACE_TYPE { NdisInterfaceInternal = Internal, NdisInterfaceIsa = Isa, NdisInterfaceEisa = Eisa, NdisInterfaceMca = MicroChannel, NdisInterfaceTurboChannel = TurboChannel, NdisInterfacePci = PCIBus, NdisInterfacePcMcia = PCMCIABus, NdisInterfaceCBus = CBus, NdisInterfaceMPIBus = MPIBus, NdisInterfaceMPSABus = MPSABus, NdisInterfaceProcessorInternal = ProcessorInternal, NdisInterfaceInternalPowerBus = InternalPowerBus, NdisInterfacePNPISABus = PNPISABus, NdisInterfacePNPBus = PNPBus, NdisInterfaceUSB, NdisInterfaceIrda, NdisInterface1394, NdisMaximumInterfaceType } NDIS_INTERFACE_TYPE, *PNDIS_INTERFACE_TYPE; #define NdisInterruptLevelSensitive LevelSensitive #define NdisInterruptLatched Latched typedef KINTERRUPT_MODE NDIS_INTERRUPT_MODE, *PNDIS_INTERRUPT_MODE; typedef enum _NDIS_PARAMETER_TYPE { NdisParameterInteger, NdisParameterHexInteger, NdisParameterString, NdisParameterMultiString, NdisParameterBinary } NDIS_PARAMETER_TYPE, *PNDIS_PARAMETER_TYPE; typedef struct _BINARY_DATA { USHORT Length; _Field_size_bytes_(Length) PVOID Buffer; } BINARY_DATA; typedef struct _NDIS_CONFIGURATION_PARAMETER { NDIS_PARAMETER_TYPE ParameterType; union { ULONG IntegerData; NDIS_STRING StringData; BINARY_DATA BinaryData; } ParameterData; } NDIS_CONFIGURATION_PARAMETER, *PNDIS_CONFIGURATION_PARAMETER; typedef PHYSICAL_ADDRESS NDIS_PHYSICAL_ADDRESS, *PNDIS_PHYSICAL_ADDRESS; typedef struct _NDIS_PHYSICAL_ADDRESS_UNIT { NDIS_PHYSICAL_ADDRESS PhysicalAddress; UINT Length; } NDIS_PHYSICAL_ADDRESS_UNIT, *PNDIS_PHYSICAL_ADDRESS_UNIT; typedef struct _NDIS_WAN_LINE_DOWN { UCHAR RemoteAddress[6]; UCHAR LocalAddress[6]; } NDIS_WAN_LINE_DOWN, *PNDIS_WAN_LINE_DOWN; typedef struct _NDIS_WAN_LINE_UP { ULONG LinkSpeed; ULONG MaximumTotalSize; NDIS_WAN_QUALITY Quality; USHORT SendWindow; UCHAR RemoteAddress[6]; OUT UCHAR LocalAddress[6]; ULONG ProtocolBufferLength; PUCHAR ProtocolBuffer; USHORT ProtocolType; NDIS_STRING DeviceName; } NDIS_WAN_LINE_UP, *PNDIS_WAN_LINE_UP; typedef NTSTATUS (NTAPI *TDI_REGISTER_CALLBACK)( _In_ PUNICODE_STRING DeviceName, _Out_ HANDLE *TdiHandle); typedef NTSTATUS (NTAPI *TDI_PNP_HANDLER)( _In_ PUNICODE_STRING UpperComponent, _In_ PUNICODE_STRING LowerComponent, _In_ PUNICODE_STRING BindList, _In_ PVOID ReconfigBuffer, _In_ UINT ReconfigBufferSize, _In_ UINT Operation); typedef struct _OID_LIST OID_LIST, *POID_LIST; /* PnP state */ typedef enum _NDIS_PNP_DEVICE_STATE { NdisPnPDeviceAdded, NdisPnPDeviceStarted, NdisPnPDeviceQueryStopped, NdisPnPDeviceStopped, NdisPnPDeviceQueryRemoved, NdisPnPDeviceRemoved, NdisPnPDeviceSurpriseRemoved } NDIS_PNP_DEVICE_STATE; typedef enum _NDIS_DEVICE_PNP_EVENT { NdisDevicePnPEventQueryRemoved, NdisDevicePnPEventRemoved, NdisDevicePnPEventSurpriseRemoved, NdisDevicePnPEventQueryStopped, NdisDevicePnPEventStopped, NdisDevicePnPEventPowerProfileChanged, #if NDIS_SUPPORT_NDIS6 NdisDevicePnPEventFilterListChanged, #endif /* NDIS_SUPPORT_NDIS6 */ NdisDevicePnPEventMaximum } NDIS_DEVICE_PNP_EVENT, *PNDIS_DEVICE_PNP_EVENT; /* Power profiles */ typedef enum _NDIS_POWER_PROFILE { NdisPowerProfileBattery, NdisPowerProfileAcOnLine } NDIS_POWER_PROFILE, *PNDIS_POWER_PROFILE; #define NDIS_DEVICE_NOT_STOPPABLE 0x00000001 #define NDIS_DEVICE_NOT_REMOVEABLE 0x00000002 #define NDIS_DEVICE_NOT_SUSPENDABLE 0x00000004 #define NDIS_DEVICE_DISABLE_PM 0x00000008 #define NDIS_DEVICE_DISABLE_WAKE_UP 0x00000010 #define NDIS_DEVICE_DISABLE_WAKE_ON_RECONNECT 0x00000020 #define NDIS_DEVICE_RESERVED 0x00000040 #define NDIS_DEVICE_DISABLE_WAKE_ON_MAGIC_PACKET 0x00000080 #define NDIS_DEVICE_DISABLE_WAKE_ON_PATTERN_MATCH 0x00000100 /* Protocol types supported by NDIS */ #define NDIS_PROTOCOL_ID_DEFAULT 0x00 #define NDIS_PROTOCOL_ID_TCP_IP 0x02 #define NDIS_PROTOCOL_ID_IPX 0x06 #define NDIS_PROTOCOL_ID_NBF 0x07 #define NDIS_PROTOCOL_ID_MAX 0x0F #define NDIS_PROTOCOL_ID_MASK 0x0F typedef ULONG NDIS_AF, *PNDIS_AF; #define CO_ADDRESS_FAMILY_Q2931 ((NDIS_AF)0x1) #define CO_ADDRESS_FAMILY_PSCHED ((NDIS_AF)0x2) #define CO_ADDRESS_FAMILY_L2TP ((NDIS_AF)0x3) #define CO_ADDRESS_FAMILY_IRDA ((NDIS_AF)0x4) #define CO_ADDRESS_FAMILY_1394 ((NDIS_AF)0x5) #define CO_ADDRESS_FAMILY_PPP ((NDIS_AF)0x6) #define CO_ADDRESS_FAMILY_INFINIBAND ((NDIS_AF)0x7) #define CO_ADDRESS_FAMILY_TAPI ((NDIS_AF)0x800) #define CO_ADDRESS_FAMILY_TAPI_PROXY ((NDIS_AF)0x801) #define CO_ADDRESS_FAMILY_PROXY 0x80000000 typedef struct _CO_ADDRESS_FAMILY { NDIS_AF AddressFamily; ULONG MajorVersion; ULONG MinorVersion; } CO_ADDRESS_FAMILY, *PCO_ADDRESS_FAMILY; typedef struct _CO_SPECIFIC_PARAMETERS { ULONG ParamType; ULONG Length; UCHAR Parameters[1]; } CO_SPECIFIC_PARAMETERS, *PCO_SPECIFIC_PARAMETERS; typedef struct _CO_CALL_MANAGER_PARAMETERS { FLOWSPEC Transmit; FLOWSPEC Receive; CO_SPECIFIC_PARAMETERS CallMgrSpecific; } CO_CALL_MANAGER_PARAMETERS, *PCO_CALL_MANAGER_PARAMETERS; /* CO_MEDIA_PARAMETERS.Flags constants */ #define RECEIVE_TIME_INDICATION 0x00000001 #define USE_TIME_STAMPS 0x00000002 #define TRANSMIT_VC 0x00000004 #define RECEIVE_VC 0x00000008 #define INDICATE_ERRED_PACKETS 0x00000010 #define INDICATE_END_OF_TX 0x00000020 #define RESERVE_RESOURCES_VC 0x00000040 #define ROUND_DOWN_FLOW 0x00000080 #define ROUND_UP_FLOW 0x00000100 typedef struct _CO_MEDIA_PARAMETERS { ULONG Flags; ULONG ReceivePriority; ULONG ReceiveSizeHint; CO_SPECIFIC_PARAMETERS MediaSpecific; } CO_MEDIA_PARAMETERS, *PCO_MEDIA_PARAMETERS; /* CO_CALL_PARAMETERS.Flags constants */ #define PERMANENT_VC 0x00000001 #define CALL_PARAMETERS_CHANGED 0x00000002 #define QUERY_CALL_PARAMETERS 0x00000004 #define BROADCAST_VC 0x00000008 #define MULTIPOINT_VC 0x00000010 typedef struct _CO_CALL_PARAMETERS { ULONG Flags; PCO_CALL_MANAGER_PARAMETERS CallMgrParameters; PCO_MEDIA_PARAMETERS MediaParameters; } CO_CALL_PARAMETERS, *PCO_CALL_PARAMETERS; typedef struct _CO_SAP { ULONG SapType; ULONG SapLength; UCHAR Sap[1]; } CO_SAP, *PCO_SAP; #if NDIS_LEGACY_DRIVER typedef struct _NDIS_IPSEC_PACKET_INFO { __MINGW_EXTENSION 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, *PNDIS_IPSEC_PACKET_INFO; #endif #if (NDIS_SUPPORT_NDIS6 || NDIS60) typedef struct _NDIS_IPSEC_OFFLOAD_V1_NET_BUFFER_LIST_INFO { __MINGW_EXTENSION 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, *PNDIS_IPSEC_OFFLOAD_V1_NET_BUFFER_LIST_INFO; #endif /* NDIS_MAC_FRAGMENT.Errors constants */ #define WAN_ERROR_CRC 0x00000001 #define WAN_ERROR_FRAMING 0x00000002 #define WAN_ERROR_HARDWAREOVERRUN 0x00000004 #define WAN_ERROR_BUFFEROVERRUN 0x00000008 #define WAN_ERROR_TIMEOUT 0x00000010 #define WAN_ERROR_ALIGNMENT 0x00000020 typedef struct _NDIS_MAC_FRAGMENT { NDIS_HANDLE NdisLinkContext; ULONG Errors; } NDIS_MAC_FRAGMENT, *PNDIS_MAC_FRAGMENT; typedef struct _NDIS_MAC_LINE_DOWN { NDIS_HANDLE NdisLinkContext; } NDIS_MAC_LINE_DOWN, *PNDIS_MAC_LINE_DOWN; typedef struct _NDIS_MAC_LINE_UP { ULONG LinkSpeed; NDIS_WAN_QUALITY Quality; USHORT SendWindow; NDIS_HANDLE ConnectionWrapperID; NDIS_HANDLE NdisLinkHandle; NDIS_HANDLE NdisLinkContext; } NDIS_MAC_LINE_UP, *PNDIS_MAC_LINE_UP; typedef struct _NDIS_PACKET_8021Q_INFO { __MINGW_EXTENSION union { struct { UINT32 UserPriority:3; UINT32 CanonicalFormatId:1; UINT32 VlanId:12; UINT32 Reserved:16; } TagHeader; PVOID Value; }; } NDIS_PACKET_8021Q_INFO, *PNDIS_PACKET_8021Q_INFO; typedef enum _NDIS_PER_PACKET_INFO { TcpIpChecksumPacketInfo, IpSecPacketInfo, TcpLargeSendPacketInfo, ClassificationHandlePacketInfo, NdisReserved, ScatterGatherListPacketInfo, Ieee8021QInfo, OriginalPacketInfo, PacketCancelId, OriginalNetBufferList, CachedNetBufferList, ShortPacketPaddingInfo, MaxPerPacketInfo } NDIS_PER_PACKET_INFO, *PNDIS_PER_PACKET_INFO; #if NDIS_LEGACY_DRIVER typedef struct _NDIS_PACKET_EXTENSION { PVOID NdisPacketInfo[MaxPerPacketInfo]; } NDIS_PACKET_EXTENSION, *PNDIS_PACKET_EXTENSION; typedef enum _NDIS_TASK { TcpIpChecksumNdisTask, IpSecNdisTask, TcpLargeSendNdisTask, MaxNdisTask } NDIS_TASK, *PNDIS_TASK; typedef enum _NDIS_ENCAPSULATION { UNSPECIFIED_Encapsulation, NULL_Encapsulation, IEEE_802_3_Encapsulation, IEEE_802_5_Encapsulation, LLC_SNAP_ROUTED_Encapsulation, LLC_SNAP_BRIDGED_Encapsulation } NDIS_ENCAPSULATION; typedef struct _NDIS_ENCAPSULATION_FORMAT { NDIS_ENCAPSULATION Encapsulation; struct { ULONG FixedHeaderSize:1; ULONG Reserved:31; } Flags; ULONG EncapsulationHeaderSize; } NDIS_ENCAPSULATION_FORMAT, *PNDIS_ENCAPSULATION_FORMAT; typedef struct _NDIS_TASK_OFFLOAD_HEADER { ULONG Version; ULONG Size; ULONG Reserved; ULONG OffsetFirstTask; NDIS_ENCAPSULATION_FORMAT EncapsulationFormat; } NDIS_TASK_OFFLOAD_HEADER, *PNDIS_TASK_OFFLOAD_HEADER; typedef struct _NDIS_TASK_OFFLOAD { ULONG Version; ULONG Size; NDIS_TASK Task; ULONG OffsetNextTask; ULONG TaskBufferLength; UCHAR TaskBuffer[1]; } NDIS_TASK_OFFLOAD, *PNDIS_TASK_OFFLOAD; typedef struct _NDIS_TASK_TCP_IP_CHECKSUM { struct { ULONG IpOptionsSupported:1; ULONG TcpOptionsSupported:1; ULONG TcpChecksum:1; ULONG UdpChecksum:1; ULONG IpChecksum:1; } V4Transmit; struct { ULONG IpOptionsSupported:1; ULONG TcpOptionsSupported:1; ULONG TcpChecksum:1; ULONG UdpChecksum:1; ULONG IpChecksum:1; } V4Receive; struct { ULONG IpOptionsSupported:1; ULONG TcpOptionsSupported:1; ULONG TcpChecksum:1; ULONG UdpChecksum:1; } V6Transmit; struct { ULONG IpOptionsSupported:1; ULONG TcpOptionsSupported:1; ULONG TcpChecksum:1; ULONG UdpChecksum:1; } V6Receive; } NDIS_TASK_TCP_IP_CHECKSUM, *PNDIS_TASK_TCP_IP_CHECKSUM; #define NDIS_TASK_TCP_LARGE_SEND_V0 0 typedef struct _NDIS_TASK_TCP_LARGE_SEND { ULONG Version; ULONG MaxOffLoadSize; ULONG MinSegmentCount; BOOLEAN TcpOptions; BOOLEAN IpOptions; } NDIS_TASK_TCP_LARGE_SEND, *PNDIS_TASK_TCP_LARGE_SEND; typedef struct _NDIS_TASK_IPSEC { struct { ULONG AH_ESP_COMBINED; ULONG TRANSPORT_TUNNEL_COMBINED; ULONG V4_OPTIONS; ULONG RESERVED; } Supported; struct { ULONG MD5:1; ULONG SHA_1:1; ULONG Transport:1; ULONG Tunnel:1; ULONG Send:1; ULONG Receive:1; } V4AH; struct { ULONG DES:1; ULONG RESERVED:1; ULONG TRIPLE_DES:1; ULONG NULL_ESP:1; ULONG Transport:1; ULONG Tunnel:1; ULONG Send:1; ULONG Receive:1; } V4ESP; } NDIS_TASK_IPSEC, *PNDIS_TASK_IPSEC; #endif /* NDIS_LEGACY_DRIVER */ #define IPSEC_TPT_UDPESP_ENCAPTYPE_IKE 0x00000001 #define IPSEC_TUN_UDPESP_ENCAPTYPE_IKE 0x00000002 #define IPSEC_TPTOVERTUN_UDPESP_ENCAPTYPE_IKE 0x00000004 #define IPSEC_TPT_UDPESP_OVER_PURE_TUN_ENCAPTYPE_IKE 0x00000008 #define IPSEC_TPT_UDPESP_ENCAPTYPE_OTHER 0x00000010 #define IPSEC_TUN_UDPESP_ENCAPTYPE_OTHER 0x00000020 #define IPSEC_TPTOVERTUN_UDPESP_ENCAPTYPE_OTHER 0x00000040 #define IPSEC_TPT_UDPESP_OVER_PURE_TUN_ENCAPTYPE_OTHER 0x00000080 #if NDIS_LEGACY_DRIVER /* * PNDIS_PACKET * NDIS_GET_ORIGINAL_PACKET( * IN PNDIS_PACKET Packet); */ #define NDIS_GET_ORIGINAL_PACKET(Packet) \ NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, OriginalPacketInfo) /* * PVOID * NDIS_GET_PACKET_CANCEL_ID( * IN PNDIS_PACKET Packet); */ #define NDIS_GET_PACKET_CANCEL_ID(Packet) \ NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, PacketCancelId) /* * PNDIS_PACKET_EXTENSION * NDIS_PACKET_EXTENSION_FROM_PACKET( * IN PNDIS_PACKET Packet); */ #define NDIS_PACKET_EXTENSION_FROM_PACKET(Packet) \ ((PNDIS_PACKET_EXTENSION)((PUCHAR)(Packet) \ + (Packet)->Private.NdisPacketOobOffset + sizeof(NDIS_PACKET_OOB_DATA))) /* * PVOID * NDIS_PER_PACKET_INFO_FROM_PACKET( * IN OUT PNDIS_PACKET Packet, * IN NDIS_PER_PACKET_INFO InfoType); */ #define NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, InfoType) \ ((PNDIS_PACKET_EXTENSION)((PUCHAR)(Packet) + (Packet)->Private.NdisPacketOobOffset \ + sizeof(NDIS_PACKET_OOB_DATA)))->NdisPacketInfo[(InfoType)] /* * VOID * NDIS_SET_ORIGINAL_PACKET( * IN OUT PNDIS_PACKET Packet, * IN PNDIS_PACKET OriginalPacket); */ #define NDIS_SET_ORIGINAL_PACKET(Packet, OriginalPacket) \ NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, OriginalPacketInfo) = (OriginalPacket) /* * VOID * NDIS_SET_PACKET_CANCEL_ID( * IN PNDIS_PACKET Packet * IN ULONG_PTR CancelId); */ #define NDIS_SET_PACKET_CANCEL_ID(Packet, CancelId) \ NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, PacketCancelId) = (CancelId) #define NdisSetPacketCancelId(_Packet, _CancelId) NDIS_SET_PACKET_CANCEL_ID(_Packet, _CancelId) #define NdisGetPacketCancelId(_Packet) NDIS_GET_PACKET_CANCEL_ID(_Packet) #endif /* NDIS_LEGACY_DRIVER */ #if NDIS_SUPPORT_NDIS6 typedef struct _NDIS_GENERIC_OBJECT { NDIS_OBJECT_HEADER Header; PVOID Caller; PVOID CallersCaller; PDRIVER_OBJECT DriverObject; } NDIS_GENERIC_OBJECT, *PNDIS_GENERIC_OBJECT; #endif /* NDIS_TASK_OFFLOAD_HEADER.Version constants */ #define NDIS_TASK_OFFLOAD_VERSION 1 #define MAX_HASHES 4 #define TRUNCATED_HASH_LEN 12 #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 typedef struct _NDIS_TCP_IP_CHECKSUM_PACKET_INFO { __MINGW_EXTENSION 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, *PNDIS_TCP_IP_CHECKSUM_PACKET_INFO; typedef struct _NDIS_WAN_CO_FRAGMENT { ULONG Errors; } NDIS_WAN_CO_FRAGMENT, *PNDIS_WAN_CO_FRAGMENT; typedef struct _NDIS_WAN_FRAGMENT { UCHAR RemoteAddress[6]; UCHAR LocalAddress[6]; } NDIS_WAN_FRAGMENT, *PNDIS_WAN_FRAGMENT; typedef struct _WAN_CO_LINKPARAMS { ULONG TransmitSpeed; ULONG ReceiveSpeed; ULONG SendWindow; } WAN_CO_LINKPARAMS, *PWAN_CO_LINKPARAMS; 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, *PNDIS_WAN_GET_STATS; /* Call Manager */ typedef VOID (NTAPI *CM_ACTIVATE_VC_COMPLETE_HANDLER)( IN NDIS_STATUS Status, IN NDIS_HANDLE CallMgrVcContext, IN PCO_CALL_PARAMETERS CallParameters); typedef NDIS_STATUS (NTAPI *CM_ADD_PARTY_HANDLER)( IN NDIS_HANDLE CallMgrVcContext, IN OUT PCO_CALL_PARAMETERS CallParameters, IN NDIS_HANDLE NdisPartyHandle, OUT PNDIS_HANDLE CallMgrPartyContext); typedef NDIS_STATUS (NTAPI *CM_CLOSE_AF_HANDLER)( IN NDIS_HANDLE CallMgrAfContext); typedef NDIS_STATUS (NTAPI *CM_CLOSE_CALL_HANDLER)( IN NDIS_HANDLE CallMgrVcContext, IN NDIS_HANDLE CallMgrPartyContext OPTIONAL, IN PVOID CloseData OPTIONAL, IN UINT Size OPTIONAL); typedef NDIS_STATUS (NTAPI *CM_DEREG_SAP_HANDLER)( IN NDIS_HANDLE CallMgrSapContext); typedef VOID (NTAPI *CM_DEACTIVATE_VC_COMPLETE_HANDLER)( IN NDIS_STATUS Status, IN NDIS_HANDLE CallMgrVcContext); typedef NDIS_STATUS (NTAPI *CM_DROP_PARTY_HANDLER)( IN NDIS_HANDLE CallMgrPartyContext, IN PVOID CloseData OPTIONAL, IN UINT Size OPTIONAL); typedef VOID (NTAPI *CM_INCOMING_CALL_COMPLETE_HANDLER)( IN NDIS_STATUS Status, IN NDIS_HANDLE CallMgrVcContext, IN PCO_CALL_PARAMETERS CallParameters); typedef NDIS_STATUS (NTAPI *CM_MAKE_CALL_HANDLER)( IN NDIS_HANDLE CallMgrVcContext, IN OUT PCO_CALL_PARAMETERS CallParameters, IN NDIS_HANDLE NdisPartyHandle OPTIONAL, OUT PNDIS_HANDLE CallMgrPartyContext OPTIONAL); typedef NDIS_STATUS (NTAPI *CM_MODIFY_CALL_QOS_HANDLER)( IN NDIS_HANDLE CallMgrVcContext, IN PCO_CALL_PARAMETERS CallParameters); typedef NDIS_STATUS (NTAPI *CM_OPEN_AF_HANDLER)( IN NDIS_HANDLE CallMgrBindingContext, IN PCO_ADDRESS_FAMILY AddressFamily, IN NDIS_HANDLE NdisAfHandle, OUT PNDIS_HANDLE CallMgrAfContext); typedef NDIS_STATUS (NTAPI *CM_REG_SAP_HANDLER)( IN NDIS_HANDLE CallMgrAfContext, IN PCO_SAP Sap, IN NDIS_HANDLE NdisSapHandle, OUT PNDIS_HANDLE CallMgrSapContext); typedef NDIS_STATUS (NTAPI *CO_CREATE_VC_HANDLER)( IN NDIS_HANDLE ProtocolAfContext, IN NDIS_HANDLE NdisVcHandle, OUT PNDIS_HANDLE ProtocolVcContext); typedef NDIS_STATUS (NTAPI *CO_DELETE_VC_HANDLER)( IN NDIS_HANDLE ProtocolVcContext); #define PROTOCOL_RESERVED_SIZE_IN_PACKET (4 * sizeof(PVOID)) /* Prototypes for NDIS 5.0 protocol characteristics */ _IRQL_requires_(PASSIVE_LEVEL) typedef VOID (NTAPI *CO_SEND_COMPLETE_HANDLER)( _In_ NDIS_STATUS Status, _In_ NDIS_HANDLE ProtocolVcContext, _In_ PNDIS_PACKET Packet); _IRQL_requires_max_(DISPATCH_LEVEL) typedef VOID (NTAPI *CO_STATUS_HANDLER)( _In_ NDIS_HANDLE ProtocolBindingContext, _In_opt_ NDIS_HANDLE ProtocolVcContext, _In_ NDIS_STATUS GeneralStatus, _In_ PVOID StatusBuffer, _In_ UINT StatusBufferSize); _IRQL_requires_max_(DISPATCH_LEVEL) typedef UINT (NTAPI *CO_RECEIVE_PACKET_HANDLER)( _In_ NDIS_HANDLE ProtocolBindingContext, _In_ NDIS_HANDLE ProtocolVcContext, _In_ PNDIS_PACKET Packet); _IRQL_requires_max_(DISPATCH_LEVEL) typedef NDIS_STATUS (NTAPI *CO_REQUEST_HANDLER)( _In_ NDIS_HANDLE ProtocolAfContext, _In_opt_ NDIS_HANDLE ProtocolVcContext, _In_opt_ NDIS_HANDLE ProtocolPartyContext, _Inout_ PNDIS_REQUEST NdisRequest); _IRQL_requires_max_(DISPATCH_LEVEL) typedef VOID (NTAPI *CO_REQUEST_COMPLETE_HANDLER)( _In_ NDIS_STATUS Status, _In_opt_ NDIS_HANDLE ProtocolAfContext, _In_opt_ NDIS_HANDLE ProtocolVcContext, _In_opt_ NDIS_HANDLE ProtocolPartyContext, _In_ PNDIS_REQUEST NdisRequest); typedef struct _NDIS_CALL_MANAGER_CHARACTERISTICS { UCHAR MajorVersion; UCHAR MinorVersion; USHORT Filler; UINT Reserved; CO_CREATE_VC_HANDLER CmCreateVcHandler; CO_DELETE_VC_HANDLER CmDeleteVcHandler; CM_OPEN_AF_HANDLER CmOpenAfHandler; CM_CLOSE_AF_HANDLER CmCloseAfHandler; CM_REG_SAP_HANDLER CmRegisterSapHandler; CM_DEREG_SAP_HANDLER CmDeregisterSapHandler; CM_MAKE_CALL_HANDLER CmMakeCallHandler; CM_CLOSE_CALL_HANDLER CmCloseCallHandler; CM_INCOMING_CALL_COMPLETE_HANDLER CmIncomingCallCompleteHandler; CM_ADD_PARTY_HANDLER CmAddPartyHandler; CM_DROP_PARTY_HANDLER CmDropPartyHandler; CM_ACTIVATE_VC_COMPLETE_HANDLER CmActivateVcCompleteHandler; CM_DEACTIVATE_VC_COMPLETE_HANDLER CmDeactivateVcCompleteHandler; CM_MODIFY_CALL_QOS_HANDLER CmModifyCallQoSHandler; CO_REQUEST_HANDLER CmRequestHandler; CO_REQUEST_COMPLETE_HANDLER CmRequestCompleteHandler; } NDIS_CALL_MANAGER_CHARACTERISTICS, *PNDIS_CALL_MANAGER_CHARACTERISTICS; /* Call Manager clients */ typedef VOID (*CL_OPEN_AF_COMPLETE_HANDLER)( IN NDIS_STATUS Status, IN NDIS_HANDLE ProtocolAfContext, IN NDIS_HANDLE NdisAfHandle); typedef VOID (NTAPI *CL_CLOSE_AF_COMPLETE_HANDLER)( IN NDIS_STATUS Status, IN NDIS_HANDLE ProtocolAfContext); typedef VOID (NTAPI *CL_REG_SAP_COMPLETE_HANDLER)( IN NDIS_STATUS Status, IN NDIS_HANDLE ProtocolSapContext, IN PCO_SAP Sap, IN NDIS_HANDLE NdisSapHandle); typedef VOID (NTAPI *CL_DEREG_SAP_COMPLETE_HANDLER)( IN NDIS_STATUS Status, IN NDIS_HANDLE ProtocolSapContext); typedef VOID (NTAPI *CL_MAKE_CALL_COMPLETE_HANDLER)( IN NDIS_STATUS Status, IN NDIS_HANDLE ProtocolVcContext, IN NDIS_HANDLE NdisPartyHandle OPTIONAL, IN PCO_CALL_PARAMETERS CallParameters); typedef VOID (NTAPI *CL_MODIFY_CALL_QOS_COMPLETE_HANDLER)( IN NDIS_STATUS Status, IN NDIS_HANDLE ProtocolVcContext, IN PCO_CALL_PARAMETERS CallParameters); typedef VOID (NTAPI *CL_CLOSE_CALL_COMPLETE_HANDLER)( IN NDIS_STATUS Status, IN NDIS_HANDLE ProtocolVcContext, IN NDIS_HANDLE ProtocolPartyContext OPTIONAL); typedef VOID (NTAPI *CL_ADD_PARTY_COMPLETE_HANDLER)( IN NDIS_STATUS Status, IN NDIS_HANDLE ProtocolPartyContext, IN NDIS_HANDLE NdisPartyHandle, IN PCO_CALL_PARAMETERS CallParameters); typedef VOID (NTAPI *CL_DROP_PARTY_COMPLETE_HANDLER)( IN NDIS_STATUS Status, IN NDIS_HANDLE ProtocolPartyContext); typedef NDIS_STATUS (NTAPI *CL_INCOMING_CALL_HANDLER)( IN NDIS_HANDLE ProtocolSapContext, IN NDIS_HANDLE ProtocolVcContext, IN OUT PCO_CALL_PARAMETERS CallParameters); typedef VOID (NTAPI *CL_INCOMING_CALL_QOS_CHANGE_HANDLER)( IN NDIS_HANDLE ProtocolVcContext, IN PCO_CALL_PARAMETERS CallParameters); typedef VOID (NTAPI *CL_INCOMING_CLOSE_CALL_HANDLER)( IN NDIS_STATUS CloseStatus, IN NDIS_HANDLE ProtocolVcContext, IN PVOID CloseData OPTIONAL, IN UINT Size OPTIONAL); typedef VOID (NTAPI *CL_INCOMING_DROP_PARTY_HANDLER)( IN NDIS_STATUS DropStatus, IN NDIS_HANDLE ProtocolPartyContext, IN PVOID CloseData OPTIONAL, IN UINT Size OPTIONAL); typedef VOID (NTAPI *CL_CALL_CONNECTED_HANDLER)( IN NDIS_HANDLE ProtocolVcContext); typedef struct _NDIS_CLIENT_CHARACTERISTICS { UCHAR MajorVersion; UCHAR MinorVersion; USHORT Filler; UINT Reserved; CO_CREATE_VC_HANDLER ClCreateVcHandler; CO_DELETE_VC_HANDLER ClDeleteVcHandler; CO_REQUEST_HANDLER ClRequestHandler; CO_REQUEST_COMPLETE_HANDLER ClRequestCompleteHandler; CL_OPEN_AF_COMPLETE_HANDLER ClOpenAfCompleteHandler; CL_CLOSE_AF_COMPLETE_HANDLER ClCloseAfCompleteHandler; CL_REG_SAP_COMPLETE_HANDLER ClRegisterSapCompleteHandler; CL_DEREG_SAP_COMPLETE_HANDLER ClDeregisterSapCompleteHandler; CL_MAKE_CALL_COMPLETE_HANDLER ClMakeCallCompleteHandler; CL_MODIFY_CALL_QOS_COMPLETE_HANDLER ClModifyCallQoSCompleteHandler; CL_CLOSE_CALL_COMPLETE_HANDLER ClCloseCallCompleteHandler; CL_ADD_PARTY_COMPLETE_HANDLER ClAddPartyCompleteHandler; CL_DROP_PARTY_COMPLETE_HANDLER ClDropPartyCompleteHandler; CL_INCOMING_CALL_HANDLER ClIncomingCallHandler; CL_INCOMING_CALL_QOS_CHANGE_HANDLER ClIncomingCallQoSChangeHandler; CL_INCOMING_CLOSE_CALL_HANDLER ClIncomingCloseCallHandler; CL_INCOMING_DROP_PARTY_HANDLER ClIncomingDropPartyHandler; CL_CALL_CONNECTED_HANDLER ClCallConnectedHandler; } NDIS_CLIENT_CHARACTERISTICS, *PNDIS_CLIENT_CHARACTERISTICS; /* NDIS protocol structures */ /* Prototypes for NDIS 3.0 protocol characteristics */ typedef VOID (NTAPI *OPEN_ADAPTER_COMPLETE_HANDLER)( _In_ NDIS_HANDLE ProtocolBindingContext, _In_ NDIS_STATUS Status, _In_ NDIS_STATUS OpenErrorStatus); typedef VOID (NTAPI *CLOSE_ADAPTER_COMPLETE_HANDLER)( _In_ NDIS_HANDLE ProtocolBindingContext, _In_ NDIS_STATUS Status); typedef VOID (NTAPI *RESET_COMPLETE_HANDLER)( _In_ NDIS_HANDLE ProtocolBindingContext, _In_ NDIS_STATUS Status); typedef VOID (NTAPI *REQUEST_COMPLETE_HANDLER)( _In_ NDIS_HANDLE ProtocolBindingContext, _In_ PNDIS_REQUEST NdisRequest, _In_ NDIS_STATUS Status); typedef VOID (NTAPI *STATUS_HANDLER)( _In_ NDIS_HANDLE ProtocolBindingContext, _In_ NDIS_STATUS GeneralStatus, _In_ PVOID StatusBuffer, _In_ UINT StatusBufferSize); typedef VOID (NTAPI *STATUS_COMPLETE_HANDLER)( _In_ NDIS_HANDLE ProtocolBindingContext); typedef VOID (NTAPI *SEND_COMPLETE_HANDLER)( _In_ NDIS_HANDLE ProtocolBindingContext, _In_ PNDIS_PACKET Packet, _In_ NDIS_STATUS Status); typedef VOID (NTAPI *WAN_SEND_COMPLETE_HANDLER)( _In_ NDIS_HANDLE ProtocolBindingContext, _In_ PNDIS_WAN_PACKET Packet, _In_ NDIS_STATUS Status); typedef VOID (NTAPI *TRANSFER_DATA_COMPLETE_HANDLER)( _In_ NDIS_HANDLE ProtocolBindingContext, _In_ PNDIS_PACKET Packet, _In_ NDIS_STATUS Status, _In_ UINT BytesTransferred); typedef VOID (NTAPI *WAN_TRANSFER_DATA_COMPLETE_HANDLER)( VOID); typedef NDIS_STATUS (NTAPI *RECEIVE_HANDLER)( _In_ NDIS_HANDLE ProtocolBindingContext, _In_ NDIS_HANDLE MacReceiveContext, _In_ PVOID HeaderBuffer, _In_ UINT HeaderBufferSize, _In_ PVOID LookAheadBuffer, _In_ UINT LookaheadBufferSize, _In_ UINT PacketSize); typedef NDIS_STATUS (NTAPI *WAN_RECEIVE_HANDLER)( _In_ NDIS_HANDLE NdisLinkHandle, _In_ PUCHAR Packet, _In_ ULONG PacketSize); typedef VOID (NTAPI *RECEIVE_COMPLETE_HANDLER)( _In_ NDIS_HANDLE ProtocolBindingContext); /* Protocol characteristics for NDIS 3.0 protocols */ #define NDIS30_PROTOCOL_CHARACTERISTICS_S \ UCHAR MajorNdisVersion; \ UCHAR MinorNdisVersion; \ USHORT Filler; \ _ANONYMOUS_UNION union { \ UINT Reserved; \ UINT Flags; \ } DUMMYUNIONNAME; \ OPEN_ADAPTER_COMPLETE_HANDLER OpenAdapterCompleteHandler; \ CLOSE_ADAPTER_COMPLETE_HANDLER CloseAdapterCompleteHandler; \ _ANONYMOUS_UNION union { \ SEND_COMPLETE_HANDLER SendCompleteHandler; \ WAN_SEND_COMPLETE_HANDLER WanSendCompleteHandler; \ } DUMMYUNIONNAME2; \ _ANONYMOUS_UNION union { \ TRANSFER_DATA_COMPLETE_HANDLER TransferDataCompleteHandler; \ WAN_TRANSFER_DATA_COMPLETE_HANDLER WanTransferDataCompleteHandler; \ } DUMMYUNIONNAME3; \ RESET_COMPLETE_HANDLER ResetCompleteHandler; \ REQUEST_COMPLETE_HANDLER RequestCompleteHandler; \ _ANONYMOUS_UNION union { \ RECEIVE_HANDLER ReceiveHandler; \ WAN_RECEIVE_HANDLER WanReceiveHandler; \ } DUMMYUNIONNAME4; \ RECEIVE_COMPLETE_HANDLER ReceiveCompleteHandler; \ STATUS_HANDLER StatusHandler; \ STATUS_COMPLETE_HANDLER StatusCompleteHandler; \ NDIS_STRING Name; typedef struct _NDIS30_PROTOCOL_CHARACTERISTICS { NDIS30_PROTOCOL_CHARACTERISTICS_S } NDIS30_PROTOCOL_CHARACTERISTICS, *PNDIS30_PROTOCOL_CHARACTERISTICS; /* Prototypes for NDIS 4.0 protocol characteristics */ typedef INT (NTAPI *RECEIVE_PACKET_HANDLER)( IN NDIS_HANDLE ProtocolBindingContext, IN PNDIS_PACKET Packet); typedef VOID (NTAPI *BIND_HANDLER)( OUT PNDIS_STATUS Status, IN NDIS_HANDLE BindContext, IN PNDIS_STRING DeviceName, IN PVOID SystemSpecific1, IN PVOID SystemSpecific2); typedef VOID (NTAPI *UNBIND_HANDLER)( OUT PNDIS_STATUS Status, IN NDIS_HANDLE ProtocolBindingContext, IN NDIS_HANDLE UnbindContext); typedef NDIS_STATUS (NTAPI *PNP_EVENT_HANDLER)( IN NDIS_HANDLE ProtocolBindingContext, IN PNET_PNP_EVENT NetPnPEvent); typedef VOID (NTAPI *UNLOAD_PROTOCOL_HANDLER)( VOID); /* Protocol characteristics for NDIS 4.0 protocols */ typedef struct _NDIS40_PROTOCOL_CHARACTERISTICS { UCHAR MajorNdisVersion; UCHAR MinorNdisVersion; USHORT Filler; __MINGW_EXTENSION union { UINT Reserved; UINT Flags; }; OPEN_ADAPTER_COMPLETE_HANDLER OpenAdapterCompleteHandler; CLOSE_ADAPTER_COMPLETE_HANDLER CloseAdapterCompleteHandler; __MINGW_EXTENSION union { SEND_COMPLETE_HANDLER SendCompleteHandler; WAN_SEND_COMPLETE_HANDLER WanSendCompleteHandler; }; __MINGW_EXTENSION union { TRANSFER_DATA_COMPLETE_HANDLER TransferDataCompleteHandler; WAN_TRANSFER_DATA_COMPLETE_HANDLER WanTransferDataCompleteHandler; }; RESET_COMPLETE_HANDLER ResetCompleteHandler; REQUEST_COMPLETE_HANDLER RequestCompleteHandler; __MINGW_EXTENSION 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; typedef VOID (NTAPI PROTCOL_CO_AF_REGISTER_NOTIFY)( IN NDIS_HANDLE ProtocolBindingContext, IN PCO_ADDRESS_FAMILY AddressFamily); typedef PROTCOL_CO_AF_REGISTER_NOTIFY *CO_AF_REGISTER_NOTIFY_HANDLER; #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; #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_LEGACY_PROTOCOL */ /* Prototypes for NDIS_MINIPORT_CHARACTERISTICS */ typedef BOOLEAN (NTAPI *W_CHECK_FOR_HANG_HANDLER)( _In_ NDIS_HANDLE MiniportAdapterContext); typedef VOID (NTAPI *W_DISABLE_INTERRUPT_HANDLER)( _In_ NDIS_HANDLE MiniportAdapterContext); typedef VOID (NTAPI *W_ENABLE_INTERRUPT_HANDLER)( _In_ NDIS_HANDLE MiniportAdapterContext); typedef VOID (NTAPI *W_HALT_HANDLER)( _In_ NDIS_HANDLE MiniportAdapterContext); typedef VOID (NTAPI *W_HANDLE_INTERRUPT_HANDLER)( _In_ NDIS_HANDLE MiniportAdapterContext); typedef NDIS_STATUS (NTAPI *W_INITIALIZE_HANDLER)( _Out_ PNDIS_STATUS OpenErrorStatus, _Out_ PUINT SelectedMediumIndex, _In_ PNDIS_MEDIUM MediumArray, _In_ UINT MediumArraySize, _In_ NDIS_HANDLE MiniportAdapterContext, _In_ NDIS_HANDLE WrapperConfigurationContext); typedef VOID (NTAPI *W_ISR_HANDLER)( _Out_ PBOOLEAN InterruptRecognized, _Out_ PBOOLEAN QueueMiniportHandleInterrupt, _In_ NDIS_HANDLE MiniportAdapterContext); typedef NDIS_STATUS (NTAPI *W_QUERY_INFORMATION_HANDLER)( _In_ NDIS_HANDLE MiniportAdapterContext, _In_ NDIS_OID Oid, _In_ PVOID InformationBuffer, _In_ ULONG InformationBufferLength, _Out_ PULONG BytesWritten, _Out_ PULONG BytesNeeded); typedef NDIS_STATUS (NTAPI *W_RECONFIGURE_HANDLER)( _Out_ PNDIS_STATUS OpenErrorStatus, _In_ NDIS_HANDLE MiniportAdapterContext, _In_ NDIS_HANDLE WrapperConfigurationContext); typedef NDIS_STATUS (NTAPI *W_RESET_HANDLER)( _Out_ PBOOLEAN AddressingReset, _In_ NDIS_HANDLE MiniportAdapterContext); typedef NDIS_STATUS (NTAPI *W_SEND_HANDLER)( _In_ NDIS_HANDLE MiniportAdapterContext, _In_ PNDIS_PACKET Packet, _In_ UINT Flags); typedef NDIS_STATUS (NTAPI *WM_SEND_HANDLER)( _In_ NDIS_HANDLE MiniportAdapterContext, _In_ NDIS_HANDLE NdisLinkHandle, _In_ PNDIS_WAN_PACKET Packet); typedef NDIS_STATUS (NTAPI *W_SET_INFORMATION_HANDLER)( _In_ NDIS_HANDLE MiniportAdapterContext, _In_ NDIS_OID Oid, _In_ PVOID InformationBuffer, _In_ ULONG InformationBufferLength, _Out_ PULONG BytesRead, _Out_ PULONG BytesNeeded); typedef NDIS_STATUS (NTAPI *W_TRANSFER_DATA_HANDLER)( _Out_ PNDIS_PACKET Packet, _Out_ PUINT BytesTransferred, _In_ NDIS_HANDLE MiniportAdapterContext, _In_ NDIS_HANDLE MiniportReceiveContext, _In_ UINT ByteOffset, _In_ UINT BytesToTransfer); typedef NDIS_STATUS (NTAPI *WM_TRANSFER_DATA_HANDLER)(VOID); typedef VOID (NTAPI *ADAPTER_SHUTDOWN_HANDLER)( _In_ PVOID ShutdownContext); typedef VOID (NTAPI *W_RETURN_PACKET_HANDLER)( _In_ NDIS_HANDLE MiniportAdapterContext, _In_ PNDIS_PACKET Packet); typedef VOID (NTAPI *W_SEND_PACKETS_HANDLER)( _In_ NDIS_HANDLE MiniportAdapterContext, _In_ PPNDIS_PACKET PacketArray, _In_ UINT NumberOfPackets); typedef VOID (NTAPI *W_ALLOCATE_COMPLETE_HANDLER)( _In_ NDIS_HANDLE MiniportAdapterContext, _In_ PVOID VirtualAddress, _In_ PNDIS_PHYSICAL_ADDRESS PhysicalAddress, _In_ ULONG Length, _In_ PVOID Context); /* NDIS structures available only to miniport drivers */ #define NDIS30_MINIPORT_CHARACTERISTICS_S \ UCHAR MajorNdisVersion; \ UCHAR MinorNdisVersion; \ UINT Reserved; \ W_CHECK_FOR_HANG_HANDLER CheckForHangHandler; \ W_DISABLE_INTERRUPT_HANDLER DisableInterruptHandler; \ W_ENABLE_INTERRUPT_HANDLER EnableInterruptHandler; \ W_HALT_HANDLER HaltHandler; \ W_HANDLE_INTERRUPT_HANDLER HandleInterruptHandler; \ W_INITIALIZE_HANDLER InitializeHandler; \ W_ISR_HANDLER ISRHandler; \ W_QUERY_INFORMATION_HANDLER QueryInformationHandler; \ W_RECONFIGURE_HANDLER ReconfigureHandler; \ W_RESET_HANDLER ResetHandler; \ W_SEND_HANDLER SendHandler; \ W_SET_INFORMATION_HANDLER SetInformationHandler; \ W_TRANSFER_DATA_HANDLER TransferDataHandler; typedef struct _NDIS30_MINIPORT_CHARACTERISTICS { NDIS30_MINIPORT_CHARACTERISTICS_S } NDIS30_MINIPORT_CHARACTERISTICS, *PSNDIS30_MINIPORT_CHARACTERISTICS; #ifdef __cplusplus #define NDIS40_MINIPORT_CHARACTERISTICS_S \ NDIS30_MINIPORT_CHARACTERISTICS Ndis30Chars; \ W_RETURN_PACKET_HANDLER ReturnPacketHandler; \ W_SEND_PACKETS_HANDLER SendPacketsHandler; \ W_ALLOCATE_COMPLETE_HANDLER AllocateCompleteHandler; #else /* !__cplusplus */ #define NDIS40_MINIPORT_CHARACTERISTICS_S \ NDIS30_MINIPORT_CHARACTERISTICS_S \ W_RETURN_PACKET_HANDLER ReturnPacketHandler; \ W_SEND_PACKETS_HANDLER SendPacketsHandler; \ W_ALLOCATE_COMPLETE_HANDLER AllocateCompleteHandler; #endif /* !__cplusplus */ typedef struct _NDIS40_MINIPORT_CHARACTERISTICS { NDIS40_MINIPORT_CHARACTERISTICS_S } NDIS40_MINIPORT_CHARACTERISTICS, *PNDIS40_MINIPORT_CHARACTERISTICS; /* Extensions for NDIS 5.0 miniports */ _IRQL_requires_max_(DISPATCH_LEVEL) _Function_class_(MINIPORT_CO_CREATE_VC) typedef NDIS_STATUS (NTAPI MINIPORT_CO_CREATE_VC)( _In_ NDIS_HANDLE MiniportAdapterContext, _In_ NDIS_HANDLE NdisVcHandle, _Out_ PNDIS_HANDLE MiniportVcContext); typedef MINIPORT_CO_CREATE_VC *W_CO_CREATE_VC_HANDLER; _IRQL_requires_max_(DISPATCH_LEVEL) _Function_class_(MINIPORT_CO_DELETE_VC) typedef NDIS_STATUS (NTAPI MINIPORT_CO_DELETE_VC)( _In_ NDIS_HANDLE MiniportVcContext); typedef MINIPORT_CO_DELETE_VC *W_CO_DELETE_VC_HANDLER; _IRQL_requires_max_(DISPATCH_LEVEL) _Function_class_(MINIPORT_CO_ACTIVATE_VC) typedef NDIS_STATUS (NTAPI MINIPORT_CO_ACTIVATE_VC)( _In_ NDIS_HANDLE MiniportVcContext, _Inout_ PCO_CALL_PARAMETERS CallParameters); typedef MINIPORT_CO_ACTIVATE_VC *W_CO_ACTIVATE_VC_HANDLER; _IRQL_requires_max_(DISPATCH_LEVEL) _Function_class_(MINIPORT_CO_DEACTIVATE_VC) typedef NDIS_STATUS (NTAPI MINIPORT_CO_DEACTIVATE_VC)( _In_ NDIS_HANDLE MiniportVcContext); typedef MINIPORT_CO_DEACTIVATE_VC *W_CO_DEACTIVATE_VC_HANDLER; typedef VOID (NTAPI *W_CO_SEND_PACKETS_HANDLER)( _In_ NDIS_HANDLE MiniportVcContext, _In_ PPNDIS_PACKET PacketArray, _In_ UINT NumberOfPackets); typedef NDIS_STATUS (NTAPI *W_CO_REQUEST_HANDLER)( _In_ NDIS_HANDLE MiniportAdapterContext, _In_opt_ NDIS_HANDLE MiniportVcContext, _Inout_ PNDIS_REQUEST NdisRequest); #ifdef __cplusplus #define NDIS50_MINIPORT_CHARACTERISTICS_S \ NDIS40_MINIPORT_CHARACTERISTICS Ndis40Chars; \ W_CO_CREATE_VC_HANDLER CoCreateVcHandler; \ W_CO_DELETE_VC_HANDLER CoDeleteVcHandler; \ W_CO_ACTIVATE_VC_HANDLER CoActivateVcHandler; \ W_CO_DEACTIVATE_VC_HANDLER CoDeactivateVcHandler; \ W_CO_SEND_PACKETS_HANDLER CoSendPacketsHandler; \ W_CO_REQUEST_HANDLER CoRequestHandler; #else /* !__cplusplus */ #define NDIS50_MINIPORT_CHARACTERISTICS_S \ NDIS40_MINIPORT_CHARACTERISTICS_S \ W_CO_CREATE_VC_HANDLER CoCreateVcHandler; \ W_CO_DELETE_VC_HANDLER CoDeleteVcHandler; \ W_CO_ACTIVATE_VC_HANDLER CoActivateVcHandler; \ W_CO_DEACTIVATE_VC_HANDLER CoDeactivateVcHandler; \ W_CO_SEND_PACKETS_HANDLER CoSendPacketsHandler; \ W_CO_REQUEST_HANDLER CoRequestHandler; #endif /* !__cplusplus */ typedef struct _NDIS50_MINIPORT_CHARACTERISTICS { NDIS50_MINIPORT_CHARACTERISTICS_S } NDIS50_MINIPORT_CHARACTERISTICS, *PSNDIS50_MINIPORT_CHARACTERISTICS; /* Extensions for NDIS 5.1 miniports */ typedef VOID (NTAPI *W_CANCEL_SEND_PACKETS_HANDLER)( _In_ NDIS_HANDLE MiniportAdapterContext, _In_ PVOID CancelId); typedef VOID (NTAPI *W_PNP_EVENT_NOTIFY_HANDLER)( _In_ NDIS_HANDLE MiniportAdapterContext, _In_ NDIS_DEVICE_PNP_EVENT PnPEvent, _In_ PVOID InformationBuffer, _In_ ULONG InformationBufferLength); typedef VOID (NTAPI *W_MINIPORT_SHUTDOWN_HANDLER)( _In_ PVOID ShutdownContext); #ifdef __cplusplus #define NDIS51_MINIPORT_CHARACTERISTICS_S \ NDIS50_MINIPORT_CHARACTERISTICS Ndis50Chars; \ 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; #else #define NDIS51_MINIPORT_CHARACTERISTICS_S \ NDIS50_MINIPORT_CHARACTERISTICS_S \ 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; #endif typedef struct _NDIS51_MINIPORT_CHARACTERISTICS { NDIS51_MINIPORT_CHARACTERISTICS_S } NDIS51_MINIPORT_CHARACTERISTICS, *PSNDIS51_MINIPORT_CHARACTERISTICS; #if defined(NDIS51_MINIPORT) typedef struct _NDIS_MINIPORT_CHARACTERISTICS { NDIS51_MINIPORT_CHARACTERISTICS_S } NDIS_MINIPORT_CHARACTERISTICS, *PNDIS_MINIPORT_CHARACTERISTICS; #elif defined(NDIS50_MINIPORT) typedef struct _NDIS_MINIPORT_CHARACTERISTICS { NDIS50_MINIPORT_CHARACTERISTICS_S } NDIS_MINIPORT_CHARACTERISTICS, *PNDIS_MINIPORT_CHARACTERISTICS; #elif defined(NDIS40_MINIPORT) typedef struct _NDIS_MINIPORT_CHARACTERISTICS { NDIS40_MINIPORT_CHARACTERISTICS_S } NDIS_MINIPORT_CHARACTERISTICS, *PNDIS_MINIPORT_CHARACTERISTICS; #else /* NDIS30 */ typedef struct _NDIS_MINIPORT_CHARACTERISTICS { NDIS30_MINIPORT_CHARACTERISTICS_S } NDIS_MINIPORT_CHARACTERISTICS, *PNDIS_MINIPORT_CHARACTERISTICS; #endif typedef struct _NDIS_MINIPORT_INTERRUPT { PKINTERRUPT InterruptObject; KSPIN_LOCK DpcCountLock; PVOID Reserved; W_ISR_HANDLER MiniportIsr; W_HANDLE_INTERRUPT_HANDLER MiniportDpc; KDPC InterruptDpc; PNDIS_MINIPORT_BLOCK Miniport; UCHAR DpcCount; BOOLEAN Filler1; KEVENT DpcsCompletedEvent; BOOLEAN SharedInterrupt; BOOLEAN IsrRequested; } NDIS_MINIPORT_INTERRUPT, *PNDIS_MINIPORT_INTERRUPT; /* Structures available only to full MAC drivers */ typedef BOOLEAN (NTAPI *PNDIS_INTERRUPT_SERVICE)( IN PVOID InterruptContext); typedef VOID (NTAPI *PNDIS_DEFERRED_PROCESSING)( IN PVOID SystemSpecific1, IN PVOID InterruptContext, IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); typedef struct _NDIS_WRAPPER_HANDLE NDIS_WRAPPER_HANDLE, *PNDIS_WRAPPER_HANDLE; typedef struct _NDIS_PROTOCOL_BLOCK NDIS_PROTOCOL_BLOCK, *PNDIS_PROTOCOL_BLOCK; typedef struct _NDIS_OPEN_BLOCK NDIS_OPEN_BLOCK, *PNDIS_OPEN_BLOCK; typedef struct _NDIS_M_DRIVER_BLOCK NDIS_M_DRIVER_BLOCK, *PNDIS_M_DRIVER_BLOCK; typedef struct _NDIS_OFFLOAD NDIS_OFFLOAD, *PNDIS_OFFLOAD; typedef struct _NDIS_AF_LIST NDIS_AF_LIST, *PNDIS_AF_LIST; typedef struct _X_FILTER ETH_FILTER, *PETH_FILTER; #if NDIS_SUPPORT_NDIS6 typedef USHORT NET_FRAME_TYPE, *PNET_FRAME_TYPE; #endif typedef struct _NDIS_MINIPORT_TIMER { KTIMER Timer; KDPC Dpc; PNDIS_TIMER_FUNCTION MiniportTimerFunction; PVOID MiniportTimerContext; PNDIS_MINIPORT_BLOCK Miniport; struct _NDIS_MINIPORT_TIMER *NextDeferredTimer; } NDIS_MINIPORT_TIMER, *PNDIS_MINIPORT_TIMER; typedef struct _NDIS_INTERRUPT { PKINTERRUPT InterruptObject; KSPIN_LOCK DpcCountLock; PNDIS_INTERRUPT_SERVICE MacIsr; PNDIS_DEFERRED_PROCESSING MacDpc; KDPC InterruptDpc; PVOID InterruptContext; UCHAR DpcCount; BOOLEAN Removing; KEVENT DpcsCompletedEvent; } NDIS_INTERRUPT, *PNDIS_INTERRUPT; typedef enum _NDIS_WORK_ITEM_TYPE { NdisWorkItemRequest, NdisWorkItemSend, NdisWorkItemReturnPackets, NdisWorkItemResetRequested, NdisWorkItemResetInProgress, NdisWorkItemHalt, NdisWorkItemSendLoopback, NdisWorkItemMiniportCallback, NdisMaxWorkItems } NDIS_WORK_ITEM_TYPE, *PNDIS_WORK_ITEM_TYPE; #define NUMBER_OF_WORK_ITEM_TYPES NdisMaxWorkItems #define NUMBER_OF_SINGLE_WORK_ITEMS 6 typedef struct _NDIS_MINIPORT_WORK_ITEM { SINGLE_LIST_ENTRY Link; NDIS_WORK_ITEM_TYPE WorkItemType; PVOID WorkItemContext; } NDIS_MINIPORT_WORK_ITEM, *PNDIS_MINIPORT_WORK_ITEM; struct _NDIS_WORK_ITEM; typedef VOID (NTAPI *NDIS_PROC)(struct _NDIS_WORK_ITEM *, PVOID); typedef struct _NDIS_WORK_ITEM { PVOID Context; NDIS_PROC Routine; UCHAR WrapperReserved[8*sizeof(PVOID)]; } NDIS_WORK_ITEM, *PNDIS_WORK_ITEM; typedef struct _NDIS_BIND_PATHS { UINT Number; NDIS_STRING Paths[1]; } NDIS_BIND_PATHS, *PNDIS_BIND_PATHS; typedef VOID (NTAPI *ETH_RCV_COMPLETE_HANDLER)( _In_ PETH_FILTER Filter); typedef VOID (NTAPI *ETH_RCV_INDICATE_HANDLER)( _In_ PETH_FILTER Filter, _In_ NDIS_HANDLE MacReceiveContext, _In_ PCHAR Address, _In_ PVOID HeaderBuffer, _In_ UINT HeaderBufferSize, _In_ PVOID LookaheadBuffer, _In_ UINT LookaheadBufferSize, _In_ UINT PacketSize); typedef VOID (NTAPI *FDDI_RCV_COMPLETE_HANDLER)( IN PFDDI_FILTER Filter); typedef VOID (NTAPI *FDDI_RCV_INDICATE_HANDLER)( IN PFDDI_FILTER Filter, IN NDIS_HANDLE MacReceiveContext, IN PCHAR Address, IN UINT AddressLength, IN PVOID HeaderBuffer, IN UINT HeaderBufferSize, IN PVOID LookaheadBuffer, IN UINT LookaheadBufferSize, IN UINT PacketSize); typedef VOID (NTAPI *FILTER_PACKET_INDICATION_HANDLER)( _In_ NDIS_HANDLE Miniport, _In_ PPNDIS_PACKET PacketArray, _In_ UINT NumberOfPackets); typedef VOID (NTAPI *TR_RCV_COMPLETE_HANDLER)( _In_ PTR_FILTER Filter); typedef VOID (NTAPI *TR_RCV_INDICATE_HANDLER)( _In_ PTR_FILTER Filter, _In_ NDIS_HANDLE MacReceiveContext, _In_ PVOID HeaderBuffer, _In_ UINT HeaderBufferSize, _In_ PVOID LookaheadBuffer, _In_ UINT LookaheadBufferSize, _In_ UINT PacketSize); typedef VOID (NTAPI *WAN_RCV_COMPLETE_HANDLER)( _In_ NDIS_HANDLE MiniportAdapterHandle, _In_ NDIS_HANDLE NdisLinkContext); typedef VOID (NTAPI *WAN_RCV_HANDLER)( _Out_ PNDIS_STATUS Status, _In_ NDIS_HANDLE MiniportAdapterHandle, _In_ NDIS_HANDLE NdisLinkContext, _In_ PUCHAR Packet, _In_ ULONG PacketSize); typedef VOID (FASTCALL *NDIS_M_DEQUEUE_WORK_ITEM)( IN PNDIS_MINIPORT_BLOCK Miniport, IN NDIS_WORK_ITEM_TYPE WorkItemType, OUT PVOID *WorkItemContext); typedef NDIS_STATUS (FASTCALL *NDIS_M_QUEUE_NEW_WORK_ITEM)( IN PNDIS_MINIPORT_BLOCK Miniport, IN NDIS_WORK_ITEM_TYPE WorkItemType, IN PVOID WorkItemContext); typedef NDIS_STATUS (FASTCALL *NDIS_M_QUEUE_WORK_ITEM)( IN PNDIS_MINIPORT_BLOCK Miniport, IN NDIS_WORK_ITEM_TYPE WorkItemType, IN PVOID WorkItemContext); typedef VOID (NTAPI *NDIS_M_REQ_COMPLETE_HANDLER)( _In_ NDIS_HANDLE MiniportAdapterHandle, _In_ NDIS_STATUS Status); typedef VOID (NTAPI *NDIS_M_RESET_COMPLETE_HANDLER)( _In_ NDIS_HANDLE MiniportAdapterHandle, _In_ NDIS_STATUS Status, _In_ BOOLEAN AddressingReset); typedef VOID (NTAPI *NDIS_M_SEND_COMPLETE_HANDLER)( _In_ NDIS_HANDLE MiniportAdapterHandle, _In_ PNDIS_PACKET Packet, _In_ NDIS_STATUS Status); typedef VOID (NTAPI *NDIS_M_SEND_RESOURCES_HANDLER)( _In_ NDIS_HANDLE MiniportAdapterHandle); typedef BOOLEAN (FASTCALL *NDIS_M_START_SENDS)( _In_ PNDIS_MINIPORT_BLOCK Miniport); typedef VOID (NTAPI *NDIS_M_STATUS_HANDLER)( _In_ NDIS_HANDLE MiniportHandle, _In_ NDIS_STATUS GeneralStatus, _In_ PVOID StatusBuffer, _In_ UINT StatusBufferSize); typedef VOID (NTAPI *NDIS_M_STS_COMPLETE_HANDLER)( _In_ NDIS_HANDLE MiniportAdapterHandle); typedef VOID (NTAPI *NDIS_M_TD_COMPLETE_HANDLER)( _In_ NDIS_HANDLE MiniportAdapterHandle, _In_ PNDIS_PACKET Packet, _In_ NDIS_STATUS Status, _In_ UINT BytesTransferred); typedef VOID (NTAPI *NDIS_WM_SEND_COMPLETE_HANDLER)( _In_ NDIS_HANDLE MiniportAdapterHandle, _In_ PVOID Packet, _In_ NDIS_STATUS Status); #if ARCNET #define ARC_SEND_BUFFERS 8 #define ARC_HEADER_SIZE 4 typedef struct _NDIS_ARC_BUF { NDIS_HANDLE ArcnetBufferPool; PUCHAR ArcnetLookaheadBuffer; UINT NumFree; ARC_BUFFER_LIST ArcnetBuffers[ARC_SEND_BUFFERS]; } NDIS_ARC_BUF, *PNDIS_ARC_BUF; #endif /* ARCNET */ typedef struct _NDIS_LOG { PNDIS_MINIPORT_BLOCK Miniport; KSPIN_LOCK LogLock; PIRP Irp; UINT TotalSize; UINT CurrentSize; UINT InPtr; UINT OutPtr; UCHAR LogBuf[1]; } NDIS_LOG, *PNDIS_LOG; #if ARCNET #define FILTERDBS_ARCNET_S \ PARC_FILTER ArcDB; #else /* !ARCNET */ #define FILTERDBS_ARCNET_S \ PVOID XXXDB; #endif /* !ARCNET */ #define FILTERDBS_S \ _ANONYMOUS_UNION union { \ PETH_FILTER EthDB; \ PNULL_FILTER NullDB; \ } DUMMYUNIONNAME; \ PTR_FILTER TrDB; \ PFDDI_FILTER FddiDB; \ FILTERDBS_ARCNET_S typedef struct _FILTERDBS { FILTERDBS_S } FILTERDBS, *PFILTERDBS; struct _NDIS_MINIPORT_BLOCK { NDIS_OBJECT_HEADER Header; PNDIS_MINIPORT_BLOCK NextMiniport; PNDIS_M_DRIVER_BLOCK DriverHandle; NDIS_HANDLE MiniportAdapterContext; UNICODE_STRING MiniportName; PNDIS_BIND_PATHS BindPaths; NDIS_HANDLE OpenQueue; REFERENCE ShortRef; NDIS_HANDLE DeviceContext; UCHAR Padding1; UCHAR LockAcquired; UCHAR PmodeOpens; UCHAR AssignedProcessor; KSPIN_LOCK Lock; PNDIS_REQUEST MediaRequest; PNDIS_MINIPORT_INTERRUPT Interrupt; ULONG Flags; ULONG PnPFlags; LIST_ENTRY PacketList; PNDIS_PACKET FirstPendingPacket; PNDIS_PACKET ReturnPacketsQueue; ULONG RequestBuffer; PVOID SetMCastBuffer; PNDIS_MINIPORT_BLOCK PrimaryMiniport; PVOID WrapperContext; PVOID BusDataContext; ULONG PnPCapabilities; PCM_RESOURCE_LIST Resources; NDIS_TIMER WakeUpDpcTimer; UNICODE_STRING BaseName; UNICODE_STRING SymbolicLinkName; ULONG CheckForHangSeconds; USHORT CFHangTicks; USHORT CFHangCurrentTick; NDIS_STATUS ResetStatus; NDIS_HANDLE ResetOpen; FILTERDBS_S FILTER_PACKET_INDICATION_HANDLER PacketIndicateHandler; NDIS_M_SEND_COMPLETE_HANDLER SendCompleteHandler; NDIS_M_SEND_RESOURCES_HANDLER SendResourcesHandler; NDIS_M_RESET_COMPLETE_HANDLER ResetCompleteHandler; NDIS_MEDIUM MediaType; ULONG BusNumber; NDIS_INTERFACE_TYPE BusType; NDIS_INTERFACE_TYPE AdapterType; PDEVICE_OBJECT DeviceObject; PDEVICE_OBJECT PhysicalDeviceObject; PDEVICE_OBJECT NextDeviceObject; PMAP_REGISTER_ENTRY MapRegisters; PNDIS_AF_LIST CallMgrAfList; PVOID MiniportThread; PVOID SetInfoBuf; USHORT SetInfoBufLen; USHORT MaxSendPackets; NDIS_STATUS FakeStatus; PVOID LockHandler; PUNICODE_STRING pAdapterInstanceName; PNDIS_MINIPORT_TIMER TimerQueue; UINT MacOptions; PNDIS_REQUEST PendingRequest; UINT MaximumLongAddresses; UINT MaximumShortAddresses; UINT CurrentLookahead; UINT MaximumLookahead; W_HANDLE_INTERRUPT_HANDLER HandleInterruptHandler; W_DISABLE_INTERRUPT_HANDLER DisableInterruptHandler; W_ENABLE_INTERRUPT_HANDLER EnableInterruptHandler; W_SEND_PACKETS_HANDLER SendPacketsHandler; NDIS_M_START_SENDS DeferredSendHandler; ETH_RCV_INDICATE_HANDLER EthRxIndicateHandler; TR_RCV_INDICATE_HANDLER TrRxIndicateHandler; FDDI_RCV_INDICATE_HANDLER FddiRxIndicateHandler; ETH_RCV_COMPLETE_HANDLER EthRxCompleteHandler; TR_RCV_COMPLETE_HANDLER TrRxCompleteHandler; FDDI_RCV_COMPLETE_HANDLER FddiRxCompleteHandler; NDIS_M_STATUS_HANDLER StatusHandler; NDIS_M_STS_COMPLETE_HANDLER StatusCompleteHandler; NDIS_M_TD_COMPLETE_HANDLER TDCompleteHandler; NDIS_M_REQ_COMPLETE_HANDLER QueryCompleteHandler; NDIS_M_REQ_COMPLETE_HANDLER SetCompleteHandler; NDIS_WM_SEND_COMPLETE_HANDLER WanSendCompleteHandler; WAN_RCV_HANDLER WanRcvHandler; WAN_RCV_COMPLETE_HANDLER WanRcvCompleteHandler; #if defined(NDIS_WRAPPER) PNDIS_MINIPORT_BLOCK NextGlobalMiniport; SINGLE_LIST_ENTRY WorkQueue[NUMBER_OF_WORK_ITEM_TYPES]; SINGLE_LIST_ENTRY SingleWorkItems[NUMBER_OF_SINGLE_WORK_ITEMS]; UCHAR SendFlags; UCHAR TrResetRing; UCHAR ArcnetAddress; UCHAR XState; _ANONYMOUS_UNION union { #if ARCNET PNDIS_ARC_BUF ArcBuf; #endif PVOID BusInterface; } DUMMYUNIONNAME; PNDIS_LOG Log; ULONG SlotNumber; PCM_RESOURCE_LIST AllocatedResources; PCM_RESOURCE_LIST AllocatedResourcesTranslated; SINGLE_LIST_ENTRY PatternList; NDIS_PNP_CAPABILITIES PMCapabilities; DEVICE_CAPABILITIES DeviceCaps; ULONG WakeUpEnable; DEVICE_POWER_STATE CurrentDevicePowerState; PIRP pIrpWaitWake; SYSTEM_POWER_STATE WaitWakeSystemState; LARGE_INTEGER VcIndex; KSPIN_LOCK VcCountLock; LIST_ENTRY WmiEnabledVcs; PNDIS_GUID pNdisGuidMap; PNDIS_GUID pCustomGuidMap; USHORT VcCount; USHORT cNdisGuidMap; USHORT cCustomGuidMap; USHORT CurrentMapRegister; PKEVENT AllocationEvent; USHORT BaseMapRegistersNeeded; USHORT SGMapRegistersNeeded; ULONG MaximumPhysicalMapping; NDIS_TIMER MediaDisconnectTimer; USHORT MediaDisconnectTimeOut; USHORT InstanceNumber; NDIS_EVENT OpenReadyEvent; NDIS_PNP_DEVICE_STATE PnPDeviceState; NDIS_PNP_DEVICE_STATE OldPnPDeviceState; PGET_SET_DEVICE_DATA SetBusData; PGET_SET_DEVICE_DATA GetBusData; KDPC DeferredDpc; #if 0 /* FIXME: */ NDIS_STATS NdisStats; #else ULONG NdisStats; #endif PNDIS_PACKET IndicatedPacket[MAXIMUM_PROCESSORS]; PKEVENT RemoveReadyEvent; PKEVENT AllOpensClosedEvent; PKEVENT AllRequestsCompletedEvent; ULONG InitTimeMs; NDIS_MINIPORT_WORK_ITEM WorkItemBuffer[NUMBER_OF_SINGLE_WORK_ITEMS]; PDMA_ADAPTER SystemAdapterObject; ULONG DriverVerifyFlags; POID_LIST OidList; USHORT InternalResetCount; USHORT MiniportResetCount; USHORT MediaSenseConnectCount; USHORT MediaSenseDisconnectCount; PNDIS_PACKET *xPackets; ULONG UserModeOpenReferences; _ANONYMOUS_UNION union { PVOID SavedSendHandler; PVOID SavedWanSendHandler; } DUMMYUNIONNAME2; PVOID SavedSendPacketsHandler; PVOID SavedCancelSendPacketsHandler; W_SEND_PACKETS_HANDLER WSendPacketsHandler; ULONG MiniportAttributes; PDMA_ADAPTER SavedSystemAdapterObject; USHORT NumOpens; USHORT CFHangXTicks; ULONG RequestCount; ULONG IndicatedPacketsCount; ULONG PhysicalMediumType; PNDIS_REQUEST LastRequest; LONG DmaAdapterRefCount; PVOID FakeMac; ULONG LockDbg; ULONG LockDbgX; PVOID LockThread; ULONG InfoFlags; KSPIN_LOCK TimerQueueLock; PKEVENT ResetCompletedEvent; PKEVENT QueuedBindingCompletedEvent; PKEVENT DmaResourcesReleasedEvent; FILTER_PACKET_INDICATION_HANDLER SavedPacketIndicateHandler; ULONG RegisteredInterrupts; PNPAGED_LOOKASIDE_LIST SGListLookasideList; ULONG ScatterGatherListSize; #endif /* _NDIS_ */ }; #if NDIS_LEGACY_DRIVER typedef NDIS_STATUS (NTAPI *WAN_SEND_HANDLER)( _In_ NDIS_HANDLE MacBindingHandle, _In_ NDIS_HANDLE LinkHandle, _In_ PVOID Packet); typedef VOID (NTAPI *SEND_PACKETS_HANDLER)( _In_ NDIS_HANDLE MiniportAdapterContext, _In_ PPNDIS_PACKET PacketArray, _In_ UINT NumberOfPackets); typedef NDIS_STATUS (NTAPI *SEND_HANDLER)( _In_ NDIS_HANDLE NdisBindingHandle, _In_ PNDIS_PACKET Packet); typedef NDIS_STATUS (NTAPI *TRANSFER_DATA_HANDLER)( _In_ NDIS_HANDLE NdisBindingHandle, _In_ NDIS_HANDLE MacReceiveContext, _In_ UINT ByteOffset, _In_ UINT BytesToTransfer, _Out_ PNDIS_PACKET Packet, _Out_ PUINT BytesTransferred); typedef NDIS_STATUS (NTAPI *RESET_HANDLER)( _In_ NDIS_HANDLE NdisBindingHandle); typedef NDIS_STATUS (NTAPI *REQUEST_HANDLER)( _In_ NDIS_HANDLE NdisBindingHandle, _In_ PNDIS_REQUEST NdisRequest); #endif /* NDIS_LEGACY_DRIVER */ #if defined(NDIS_WRAPPER) #define NDIS_COMMON_OPEN_BLOCK_WRAPPER_S \ ULONG Flags; \ ULONG References; \ KSPIN_LOCK SpinLock; \ NDIS_HANDLE FilterHandle; \ ULONG ProtocolOptions; \ USHORT CurrentLookahead; \ USHORT ConnectDampTicks; \ USHORT DisconnectDampTicks; \ W_SEND_HANDLER WSendHandler; \ W_TRANSFER_DATA_HANDLER WTransferDataHandler; \ W_SEND_PACKETS_HANDLER WSendPacketsHandler; \ W_CANCEL_SEND_PACKETS_HANDLER CancelSendPacketsHandler; \ ULONG WakeUpEnable; \ PKEVENT CloseCompleteEvent; \ QUEUED_CLOSE QC; \ ULONG AfReferences; \ PNDIS_OPEN_BLOCK NextGlobalOpen; #else #define NDIS_COMMON_OPEN_BLOCK_WRAPPER_S #endif #define NDIS_COMMON_OPEN_BLOCK_S \ PVOID MacHandle; \ NDIS_HANDLE BindingHandle; \ PNDIS_MINIPORT_BLOCK MiniportHandle; \ PNDIS_PROTOCOL_BLOCK ProtocolHandle; \ NDIS_HANDLE ProtocolBindingContext; \ PNDIS_OPEN_BLOCK MiniportNextOpen; \ PNDIS_OPEN_BLOCK ProtocolNextOpen; \ NDIS_HANDLE MiniportAdapterContext; \ BOOLEAN Reserved1; \ BOOLEAN Reserved2; \ BOOLEAN Reserved3; \ BOOLEAN Reserved4; \ PNDIS_STRING BindDeviceName; \ KSPIN_LOCK Reserved5; \ PNDIS_STRING RootDeviceName; \ _ANONYMOUS_UNION union { \ SEND_HANDLER SendHandler; \ WAN_SEND_HANDLER WanSendHandler; \ } DUMMYUNIONNAME; \ TRANSFER_DATA_HANDLER TransferDataHandler; \ SEND_COMPLETE_HANDLER SendCompleteHandler; \ TRANSFER_DATA_COMPLETE_HANDLER TransferDataCompleteHandler; \ RECEIVE_HANDLER ReceiveHandler; \ RECEIVE_COMPLETE_HANDLER ReceiveCompleteHandler; \ WAN_RECEIVE_HANDLER WanReceiveHandler; \ REQUEST_COMPLETE_HANDLER RequestCompleteHandler; \ RECEIVE_PACKET_HANDLER ReceivePacketHandler; \ SEND_PACKETS_HANDLER SendPacketsHandler; \ RESET_HANDLER ResetHandler; \ REQUEST_HANDLER RequestHandler; \ RESET_COMPLETE_HANDLER ResetCompleteHandler; \ STATUS_HANDLER StatusHandler; \ STATUS_COMPLETE_HANDLER StatusCompleteHandler; \ NDIS_COMMON_OPEN_BLOCK_WRAPPER_S typedef struct _NDIS_COMMON_OPEN_BLOCK { NDIS_COMMON_OPEN_BLOCK_S } NDIS_COMMON_OPEN_BLOCK; struct _NDIS_OPEN_BLOCK { #ifdef __cplusplus NDIS_COMMON_OPEN_BLOCK NdisCommonOpenBlock; #else NDIS_COMMON_OPEN_BLOCK_S #endif }; #include #define NDIS_M_MAX_LOOKAHEAD 526 _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI VOID NTAPI NdisInitializeTimer( _Inout_ PNDIS_TIMER Timer, _In_ PNDIS_TIMER_FUNCTION TimerFunction, _In_opt_ _Points_to_data_ PVOID FunctionContext); _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI VOID NTAPI NdisCancelTimer( _In_ PNDIS_TIMER Timer, _Out_ _At_(*TimerCancelled, _Must_inspect_result_) PBOOLEAN TimerCancelled); _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI VOID NTAPI NdisSetTimer( _In_ PNDIS_TIMER Timer, _In_ UINT MillisecondsToDelay); NDISAPI VOID NTAPI NdisSetPeriodicTimer( _In_ PNDIS_TIMER NdisTimer, _In_ UINT MillisecondsPeriod); _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI VOID NTAPI NdisSetTimerEx( _In_ PNDIS_TIMER NdisTimer, _In_ UINT MillisecondsToDelay, _In_ PVOID FunctionContext); _IRQL_requires_(PASSIVE_LEVEL) NDISAPI PVOID NTAPI NdisGetRoutineAddress( _In_ PNDIS_STRING NdisRoutineName); _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI UINT NTAPI NdisGetVersion(VOID); #if NDIS_LEGACY_DRIVER _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI VOID NTAPI NdisAllocateBuffer( _Out_ PNDIS_STATUS Status, _Out_ PNDIS_BUFFER *Buffer, _In_opt_ NDIS_HANDLE PoolHandle, _In_reads_bytes_(Length) PVOID VirtualAddress, _In_ UINT Length); _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI VOID NTAPI NdisAllocateBufferPool( _Out_ PNDIS_STATUS Status, _Out_ PNDIS_HANDLE PoolHandle, _In_ UINT NumberOfDescriptors); _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI VOID NTAPI NdisFreeBufferPool( _In_ NDIS_HANDLE PoolHandle); /* NDISAPI VOID NTAPI NdisFreeBuffer( IN PNDIS_BUFFER Buffer); */ #define NdisFreeBuffer IoFreeMdl _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI VOID NTAPI NdisAllocatePacketPool( _Out_ PNDIS_STATUS Status, _Out_ PNDIS_HANDLE PoolHandle, _In_ UINT NumberOfDescriptors, _In_ UINT ProtocolReservedLength); _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI VOID NTAPI NdisAllocatePacketPoolEx( _Out_ PNDIS_STATUS Status, _Out_ PNDIS_HANDLE PoolHandle, _In_ UINT NumberOfDescriptors, _In_ UINT NumberOfOverflowDescriptors, _In_ UINT ProtocolReservedLength); _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI VOID NTAPI NdisSetPacketPoolProtocolId( _In_ NDIS_HANDLE PacketPoolHandle, _In_ UINT ProtocolId); _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI UINT NTAPI NdisPacketPoolUsage( _In_ NDIS_HANDLE PoolHandle); _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI UINT NTAPI NdisPacketSize( _In_ UINT ProtocolReservedSize); _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI NDIS_HANDLE NTAPI NdisGetPoolFromPacket( _In_ PNDIS_PACKET Packet); _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI PNDIS_PACKET_STACK NTAPI NdisIMGetCurrentPacketStack( _In_ PNDIS_PACKET Packet, _Out_ BOOLEAN *StacksRemaining); _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI VOID NTAPI NdisFreePacketPool( _In_ NDIS_HANDLE PoolHandle); _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI VOID NTAPI NdisFreePacket( _In_ PNDIS_PACKET Packet); _IRQL_requires_(DISPATCH_LEVEL) NDISAPI VOID NTAPI NdisDprFreePacket( _In_ PNDIS_PACKET Packet); _IRQL_requires_(DISPATCH_LEVEL) NDISAPI VOID NTAPI NdisDprFreePacketNonInterlocked( _In_ PNDIS_PACKET Packet); _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI VOID NTAPI NdisAllocatePacket( _Out_ PNDIS_STATUS Status, _Out_ PNDIS_PACKET *Packet, _In_ NDIS_HANDLE PoolHandle); _IRQL_requires_(DISPATCH_LEVEL) NDISAPI VOID NTAPI NdisDprAllocatePacket( _Out_ PNDIS_STATUS Status, _Out_ PNDIS_PACKET *Packet, _In_ NDIS_HANDLE PoolHandle); _IRQL_requires_(DISPATCH_LEVEL) NDISAPI VOID NTAPI NdisDprAllocatePacketNonInterlocked( _Out_ PNDIS_STATUS Status, _Out_ PNDIS_PACKET *Packet, _In_ NDIS_HANDLE PoolHandle); /* * VOID * NdisReinitializePacket( * IN OUT PNDIS_PACKET Packet); */ #define NdisReinitializePacket(Packet) { \ (Packet)->Private.Head = (PNDIS_BUFFER)NULL; \ (Packet)->Private.ValidCounts = FALSE; \ } /* NDISAPI VOID NTAPI NdisQueryBuffer( IN PNDIS_BUFFER Buffer, OUT PVOID *VirtualAddress OPTIONAL, OUT PUINT Length); */ #define NdisQueryBuffer(_Buffer, _VirtualAddress, _Length) { \ if (ARGUMENT_PRESENT(_VirtualAddress)) { \ *(PVOID *)(_VirtualAddress) = MmGetSystemAddressForMdl(_Buffer); \ } \ *(_Length) = MmGetMdlByteCount(_Buffer); \ } NDISAPI VOID NTAPI NdisGetFirstBufferFromPacket( IN PNDIS_PACKET _Packet, OUT PNDIS_BUFFER *_FirstBuffer, OUT PVOID *_FirstBufferVA, OUT PUINT _FirstBufferLength, OUT PUINT _TotalBufferLength); /* * VOID * NdisGetFirstBufferFromPacketSafe( * IN PNDIS_PACKET _Packet, * OUT PNDIS_BUFFER * _FirstBuffer, * OUT PVOID * _FirstBufferVA, * OUT PUINT _FirstBufferLength, * OUT PUINT _TotalBufferLength), * IN MM_PAGE_PRIORITY _Priority) */ #define NdisGetFirstBufferFromPacketSafe(_Packet, \ _FirstBuffer, \ _FirstBufferVA, \ _FirstBufferLength, \ _TotalBufferLength, \ _Priority) \ { \ PNDIS_BUFFER _Buffer; \ \ _Buffer = (_Packet)->Private.Head; \ *(_FirstBuffer) = _Buffer; \ if (_Buffer != NULL) { \ *(_FirstBufferVA) = MmGetSystemAddressForMdlSafe(_Buffer, _Priority); \ *(_FirstBufferLength) = MmGetMdlByteCount(_Buffer); \ _Buffer = _Buffer->Next; \ *(_TotalBufferLength) = *(_FirstBufferLength); \ while (_Buffer != NULL) { \ *(_TotalBufferLength) += MmGetMdlByteCount(_Buffer); \ _Buffer = _Buffer->Next; \ } \ } \ else { \ *(_FirstBufferVA) = 0; \ *(_FirstBufferLength) = 0; \ *(_TotalBufferLength) = 0; \ } \ } /* * VOID * NdisRecalculatePacketCounts( * IN OUT PNDIS_PACKET Packet); */ #define NdisRecalculatePacketCounts(Packet) { \ PNDIS_BUFFER _Buffer = (Packet)->Private.Head; \ if (_Buffer != NULL) { \ while (_Buffer->Next != NULL) { \ _Buffer = _Buffer->Next; \ } \ (Packet)->Private.Tail = _Buffer; \ } \ (Packet)->Private.ValidCounts = FALSE; \ } /* * VOID * NdisChainBufferAtFront( * IN OUT PNDIS_PACKET Packet, * IN OUT PNDIS_BUFFER Buffer) */ #define NdisChainBufferAtFront(Packet, \ Buffer) \ { \ PNDIS_BUFFER _NdisBuffer = (Buffer); \ \ while (_NdisBuffer->Next != NULL) \ _NdisBuffer = _NdisBuffer->Next; \ \ if ((Packet)->Private.Head == NULL) \ (Packet)->Private.Tail = _NdisBuffer; \ \ _NdisBuffer->Next = (Packet)->Private.Head; \ (Packet)->Private.Head = (Buffer); \ (Packet)->Private.ValidCounts = FALSE; \ } /* * VOID * NdisChainBufferAtBack( * IN OUT PNDIS_PACKET Packet, * IN OUT PNDIS_BUFFER Buffer) */ #define NdisChainBufferAtBack(Packet, \ Buffer) \ { \ PNDIS_BUFFER _NdisBuffer = (Buffer); \ \ while (_NdisBuffer->Next != NULL) \ _NdisBuffer = _NdisBuffer->Next; \ \ _NdisBuffer->Next = NULL; \ \ if ((Packet)->Private.Head != NULL) \ (Packet)->Private.Tail->Next = (Buffer); \ else \ (Packet)->Private.Head = (Buffer); \ \ (Packet)->Private.Tail = _NdisBuffer; \ (Packet)->Private.ValidCounts = FALSE; \ } NDISAPI VOID NTAPI NdisUnchainBufferAtFront( IN OUT PNDIS_PACKET Packet, OUT PNDIS_BUFFER *Buffer); NDISAPI VOID NTAPI NdisUnchainBufferAtBack( IN OUT PNDIS_PACKET Packet, OUT PNDIS_BUFFER *Buffer); _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI VOID NTAPI NdisCopyFromPacketToPacket( _In_ PNDIS_PACKET Destination, _In_ UINT DestinationOffset, _In_ UINT BytesToCopy, _In_ PNDIS_PACKET Source, _In_ UINT SourceOffset, _Out_ PUINT BytesCopied); NDISAPI VOID NTAPI NdisCopyFromPacketToPacketSafe( IN PNDIS_PACKET Destination, IN UINT DestinationOffset, IN UINT BytesToCopy, IN PNDIS_PACKET Source, IN UINT SourceOffset, OUT PUINT BytesCopied, IN MM_PAGE_PRIORITY Priority); _IRQL_requires_max_(DISPATCH_LEVEL) __drv_preferredFunction("NdisAllocateMemoryWithTag", "Obsolete") NDISAPI NDIS_STATUS NTAPI NdisAllocateMemory( _At_(*VirtualAddress, __drv_allocatesMem(Mem)) _Outptr_result_bytebuffer_(Length) PVOID *VirtualAddress, _In_ UINT Length, _In_ UINT MemoryFlags, _In_ NDIS_PHYSICAL_ADDRESS HighestAcceptableAddress); #define NdisInitializeWorkItem(_WI_, _R_, _C_) { \ (_WI_)->Context = _C_; \ (_WI_)->Routine = _R_; \ } _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI NDIS_STATUS NTAPI NdisScheduleWorkItem( _In_ __drv_aliasesMem PNDIS_WORK_ITEM WorkItem); _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI VOID NTAPI NdisSetPacketStatus( _In_ PNDIS_PACKET Packet, _In_ NDIS_STATUS Status, _In_ NDIS_HANDLE Handle, _In_ ULONG Code); #endif /* NDIS_LEGACY_DRIVER */ _IRQL_requires_(PASSIVE_LEVEL) NDISAPI VOID NTAPI NdisOpenFile( _Out_ PNDIS_STATUS Status, _Out_ PNDIS_HANDLE FileHandle, _Out_ PUINT FileLength, _In_ PNDIS_STRING FileName, _In_ NDIS_PHYSICAL_ADDRESS HighestAcceptableAddress); _IRQL_requires_(PASSIVE_LEVEL) NDISAPI VOID NTAPI NdisCloseFile( _In_ NDIS_HANDLE FileHandle); _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI VOID NTAPI NdisMapFile( _Out_ PNDIS_STATUS Status, _Out_ PVOID *MappedBuffer, _In_ NDIS_HANDLE FileHandle); _IRQL_requires_(PASSIVE_LEVEL) NDISAPI VOID NTAPI NdisUnmapFile( _In_ NDIS_HANDLE FileHandle); _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI ULONG NTAPI NdisGetSharedDataAlignment(VOID); #define NdisFlushBuffer(Buffer,WriteToDevice) \ KeFlushIoBuffers((Buffer),!(WriteToDevice), TRUE) _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI VOID NTAPI NdisCopyBuffer( _Out_ PNDIS_STATUS Status, _Out_ PNDIS_BUFFER *Buffer, _In_ NDIS_HANDLE PoolHandle, _In_ PVOID MemoryDescriptor, _In_ UINT Offset, _In_ UINT Length); /* * VOID * NdisCopyLookaheadData( * IN PVOID Destination, * IN PVOID Source, * IN ULONG Length, * IN ULONG ReceiveFlags); */ #if defined(_M_IX86) || defined(_M_AMD64) #define NdisCopyLookaheadData(Destination, Source, Length, MacOptions) \ RtlCopyMemory(Destination, Source, Length) #else #define NdisCopyLookaheadData(Destination, Source, Length, MacOptions) \ { \ if ((MacOptions) & NDIS_MAC_OPTION_COPY_LOOKAHEAD_DATA) \ { \ RtlCopyMemory(Destination, Source, Length); \ } \ else \ { \ PUCHAR _Src = (PUCHAR)(Source); \ PUCHAR _Dest = (PUCHAR)(Destination); \ PUCHAR _End = _Dest + (Length); \ while (_Dest < _End) \ *_Dest++ = *_Src++; \ } \ } #endif /* NDISAPI VOID NTAPI NdisAdjustBufferLength( IN PNDIS_BUFFER Buffer, IN UINT Length); */ #define NdisAdjustBufferLength(Buffer, Length) \ (((Buffer)->ByteCount) = (Length)) #if NDIS_SUPPORT_NDIS6 #define NdisAdjustMdlLength(_Mdl, _Length) \ (((_Mdl)->ByteCount) = (_Length)) #endif /* NDISAPI ULONG NTAPI NdisBufferLength( IN PNDIS_BUFFER Buffer); */ #define NdisBufferLength MmGetMdlByteCount /* NDISAPI PVOID NTAPI NdisBufferVirtualAddress( IN PNDIS_BUFFER Buffer); */ #define NdisBufferVirtualAddress MmGetSystemAddressForMdl #define NdisBufferVirtualAddressSafe MmGetSystemAddressForMdlSafe NDISAPI ULONG NTAPI NDIS_BUFFER_TO_SPAN_PAGES( IN PNDIS_BUFFER Buffer); /* NDISAPI VOID NTAPI NdisGetBufferPhysicalArraySize( IN PNDIS_BUFFER Buffer, OUT PUINT ArraySize); */ #define NdisGetBufferPhysicalArraySize(Buffer, ArraySize) \ (*(ArraySize) = NDIS_BUFFER_TO_SPAN_PAGES(Buffer)) /* NDISAPI VOID NTAPI NdisQueryBufferOffset( IN PNDIS_BUFFER Buffer, OUT PUINT Offset, OUT PUINT Length); */ #define NdisQueryBufferOffset(_Buffer, _Offset, _Length) { \ *(_Offset) = MmGetMdlByteOffset(_Buffer); \ *(_Length) = MmGetMdlByteCount(_Buffer); \ } /* * PVOID * NDIS_BUFFER_LINKAGE( * IN PNDIS_BUFFER Buffer); */ #define NDIS_BUFFER_LINKAGE(Buffer) (Buffer)->Next /* * VOID * NdisGetNextBuffer( * IN PNDIS_BUFFER CurrentBuffer, * OUT PNDIS_BUFFER * NextBuffer) */ #define NdisGetNextBuffer(CurrentBuffer, \ NextBuffer) \ { \ *(NextBuffer) = (CurrentBuffer)->Next; \ } #if NDIS_LEGACY_DRIVER #define NDIS_PACKET_FIRST_NDIS_BUFFER(_Packet) ((_Packet)->Private.Head) #define NDIS_PACKET_LAST_NDIS_BUFFER(_Packet) ((_Packet)->Private.Tail) #define NDIS_PACKET_VALID_COUNTS(_Packet) ((_Packet)->Private.ValidCounts) /* * UINT * NdisGetPacketFlags( * IN PNDIS_PACKET Packet); */ #define NdisGetPacketFlags(Packet) (Packet)->Private.Flags /* * ULONG * NDIS_GET_PACKET_PROTOCOL_TYPE( * IN PNDIS_PACKET Packet); */ #define NDIS_GET_PACKET_PROTOCOL_TYPE(_Packet) \ ((_Packet)->Private.Flags & NDIS_PROTOCOL_ID_MASK) /* * PNDIS_PACKET_OOB_DATA * NDIS_OOB_DATA_FROM_PACKET( * IN PNDIS_PACKET Packet); */ #define NDIS_OOB_DATA_FROM_PACKET(_Packet) \ (PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \ (_Packet)->Private.NdisPacketOobOffset) /* * ULONG * NDIS_GET_PACKET_HEADER_SIZE( * IN PNDIS_PACKET Packet); */ #define NDIS_GET_PACKET_HEADER_SIZE(_Packet) \ ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \ (_Packet)->Private.NdisPacketOobOffset))->HeaderSize /* * NDIS_STATUS * NDIS_GET_PACKET_STATUS( * IN PNDIS_PACKET Packet); */ #define NDIS_GET_PACKET_STATUS(_Packet) \ ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \ (_Packet)->Private.NdisPacketOobOffset))->Status /* * ULONGLONG * NDIS_GET_PACKET_TIME_TO_SEND( * IN PNDIS_PACKET Packet); */ #define NDIS_GET_PACKET_TIME_TO_SEND(_Packet) \ ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \ (_Packet)->Private.NdisPacketOobOffset))->TimeToSend /* * ULONGLONG * NDIS_GET_PACKET_TIME_SENT( * IN PNDIS_PACKET Packet); */ #define NDIS_GET_PACKET_TIME_SENT(_Packet) \ ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \ (_Packet)->Private.NdisPacketOobOffset))->TimeSent /* * ULONGLONG * NDIS_GET_PACKET_TIME_RECEIVED( * IN PNDIS_PACKET Packet); */ #define NDIS_GET_PACKET_TIME_RECEIVED(_Packet) \ ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \ (_Packet)->Private.NdisPacketOobOffset))->TimeReceived /* * VOID * NDIS_GET_PACKET_MEDIA_SPECIFIC_INFO( * IN PNDIS_PACKET Packet, * IN PPVOID pMediaSpecificInfo, * IN PUINT pSizeMediaSpecificInfo); */ #define NDIS_GET_PACKET_MEDIA_SPECIFIC_INFO(_Packet, \ _pMediaSpecificInfo, \ _pSizeMediaSpecificInfo) \ { \ if (!((_Packet)->Private.NdisPacketFlags & fPACKET_ALLOCATED_BY_NDIS) || \ !((_Packet)->Private.NdisPacketFlags & fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO)) \ { \ *(_pMediaSpecificInfo) = NULL; \ *(_pSizeMediaSpecificInfo) = 0; \ } \ else \ { \ *(_pMediaSpecificInfo) = ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \ (_Packet)->Private.NdisPacketOobOffset))->MediaSpecificInformation; \ *(_pSizeMediaSpecificInfo) = ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \ (_Packet)->Private.NdisPacketOobOffset))->SizeMediaSpecificInfo; \ } \ } /* * VOID * NDIS_SET_PACKET_HEADER_SIZE( * IN PNDIS_PACKET Packet, * IN UINT HdrSize); */ #define NDIS_SET_PACKET_HEADER_SIZE(_Packet, _HdrSize) \ ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \ (_Packet)->Private.NdisPacketOobOffset))->HeaderSize = (_HdrSize) /* * VOID * NDIS_SET_PACKET_STATUS( * IN PNDIS_PACKET Packet, * IN NDIS_STATUS Status); */ #define NDIS_SET_PACKET_STATUS(_Packet, _Status) \ ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \ (_Packet)->Private.NdisPacketOobOffset))->Status = (_Status) /* * VOID * NDIS_SET_PACKET_TIME_TO_SEND( * IN PNDIS_PACKET Packet, * IN ULONGLONG TimeToSend); */ #define NDIS_SET_PACKET_TIME_TO_SEND(_Packet, _TimeToSend) \ ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \ (_Packet)->Private.NdisPacketOobOffset))->TimeToSend = (_TimeToSend) /* * VOID * NDIS_SET_PACKET_TIME_SENT( * IN PNDIS_PACKET Packet, * IN ULONGLONG TimeSent); */ #define NDIS_SET_PACKET_TIME_SENT(_Packet, _TimeSent) \ ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \ (_Packet)->Private.NdisPacketOobOffset))->TimeSent = (_TimeSent) /* * VOID * NDIS_SET_PACKET_TIME_RECEIVED( * IN PNDIS_PACKET Packet, * IN ULONGLONG TimeReceived); */ #define NDIS_SET_PACKET_TIME_RECEIVED(_Packet, _TimeReceived) \ ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \ (_Packet)->Private.NdisPacketOobOffset))->TimeReceived = (_TimeReceived) /* * VOID * NDIS_SET_PACKET_MEDIA_SPECIFIC_INFO( * IN PNDIS_PACKET Packet, * IN PVOID MediaSpecificInfo, * IN UINT SizeMediaSpecificInfo); */ #define NDIS_SET_PACKET_MEDIA_SPECIFIC_INFO(_Packet, \ _MediaSpecificInfo, \ _SizeMediaSpecificInfo) \ { \ if ((_Packet)->Private.NdisPacketFlags & fPACKET_ALLOCATED_BY_NDIS) \ { \ (_Packet)->Private.NdisPacketFlags |= fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO; \ ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \ (_Packet)->Private.NdisPacketOobOffset))->MediaSpecificInformation = \ (_MediaSpecificInfo); \ ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \ (_Packet)->Private.NdisPacketOobOffset))->SizeMediaSpecificInfo = \ (_SizeMediaSpecificInfo); \ } \ } /* * VOID * NdisSetPacketFlags( * IN PNDIS_PACKET Packet, * IN UINT Flags); */ #define NdisSetPacketFlags(Packet, Flags) (Packet)->Private.Flags |= (Flags) /* * VOID * NdisClearPacketFlags( * IN PNDIS_PACKET Packet, * IN UINT Flags); */ #define NdisClearPacketFlags(Packet, Flags) (Packet)->Private.Flags &= ~(Flags) /* * VOID * NdisQueryPacket( * IN PNDIS_PACKET Packet, * OUT PUINT PhysicalBufferCount OPTIONAL, * OUT PUINT BufferCount OPTIONAL, * OUT PNDIS_BUFFER *FirstBuffer OPTIONAL, * OUT PUINT TotalPacketLength OPTIONAL); */ static __inline VOID NdisQueryPacket( IN PNDIS_PACKET Packet, OUT PUINT PhysicalBufferCount OPTIONAL, OUT PUINT BufferCount OPTIONAL, OUT PNDIS_BUFFER *FirstBuffer OPTIONAL, OUT PUINT TotalPacketLength OPTIONAL) { if (FirstBuffer) *FirstBuffer = Packet->Private.Head; if (TotalPacketLength || BufferCount || PhysicalBufferCount) { if (!Packet->Private.ValidCounts) { UINT Offset; UINT PacketLength; PNDIS_BUFFER NdisBuffer; UINT _PhysicalBufferCount = 0; UINT _TotalPacketLength = 0; UINT Count = 0; for (NdisBuffer = Packet->Private.Head; NdisBuffer != (PNDIS_BUFFER)NULL; NdisBuffer = NdisBuffer->Next) { _PhysicalBufferCount += NDIS_BUFFER_TO_SPAN_PAGES(NdisBuffer); NdisQueryBufferOffset(NdisBuffer, &Offset, &PacketLength); _TotalPacketLength += PacketLength; Count++; } Packet->Private.PhysicalCount = _PhysicalBufferCount; Packet->Private.TotalLength = _TotalPacketLength; Packet->Private.Count = Count; Packet->Private.ValidCounts = TRUE; } if (PhysicalBufferCount) *PhysicalBufferCount = Packet->Private.PhysicalCount; if (BufferCount) *BufferCount = Packet->Private.Count; if (TotalPacketLength) *TotalPacketLength = Packet->Private.TotalLength; } } /* * VOID * NdisQueryPacketLength( * IN PNDIS_PACKET Packet, * OUT PUINT PhysicalBufferCount OPTIONAL, * OUT PUINT BufferCount OPTIONAL, * OUT PNDIS_BUFFER *FirstBuffer OPTIONAL, * OUT PUINT TotalPacketLength OPTIONAL); */ #define NdisQueryPacketLength(_Packet, \ _TotalPacketLength) \ { \ if (!(_Packet)->Private.ValidCounts) { \ NdisQueryPacket(_Packet, NULL, NULL, NULL, _TotalPacketLength); \ } \ else *(_TotalPacketLength) = (_Packet)->Private.TotalLength; \ } #endif /* NDIS_LEGACY_DRIVER */ /* Memory management routines */ /* NDISAPI VOID NTAPI NdisCreateLookaheadBufferFromSharedMemory( IN PVOID pSharedMemory, IN UINT LookaheadLength, OUT PVOID *pLookaheadBuffer); */ #define NdisCreateLookaheadBufferFromSharedMemory(_S, _L, _B) ((*(_B)) = (_S)) NDISAPI VOID NTAPI NdisDestroyLookaheadBufferFromSharedMemory( IN PVOID pLookaheadBuffer); #if defined(_M_IX86) || defined(_M_AMD64) || defined(_M_ARM) || defined(_M_PPC) /* * VOID * NdisMoveMappedMemory( * OUT PVOID Destination, * IN PVOID Source, * IN ULONG Length); */ #define NdisMoveMappedMemory(Destination, Source, Length) \ RtlCopyMemory(Destination, Source, Length) /* * VOID * NdisZeroMappedMemory( * IN PVOID Destination, * IN ULONG Length); */ #define NdisZeroMappedMemory(Destination, Length) \ RtlZeroMemory(Destination, Length) #else #define NdisMoveMappedMemory(Destination, Source, Length) \ { \ PUCHAR _Dest = Destination, _Src = Source, _End = _Dest + Length; \ while (_Dest < _End) \ *_Dest++ = _Src++; \ } #define NdisZeroMappedMemory(Destination, Length) \ { \ PUCHAR _Dest = Destination, _End = _Dest + Length; \ while (_Dest < _End) \ *_Dest++ = 0; \ } #endif /* _M_IX86 or _M_AMD64 */ /* * VOID * NdisMoveFromMappedMemory( * OUT PVOID Destination, * IN PVOID Source, * IN ULONG Length); */ #define NdisMoveFromMappedMemory(Destination, Source, Length) \ NdisMoveMappedMemory(Destination, Source, Length) /* * VOID * NdisMoveToMappedMemory( * OUT PVOID Destination, * IN PVOID Source, * IN ULONG Length); */ #define NdisMoveToMappedMemory(Destination, Source, Length) \ NdisMoveMappedMemory(Destination, Source, Length) /* * VOID * NdisMUpdateSharedMemory( * IN NDIS_HANDLE MiniportAdapterHandle, * IN ULONG Length, * IN PVOID VirtualAddress, * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress); */ #define NdisMUpdateSharedMemory(_H, _L, _V, _P) \ NdisUpdateSharedMemory(_H, _L, _V, _P) _When_(MemoryFlags==0, _IRQL_requires_max_(DISPATCH_LEVEL)) _When_(MemoryFlags==NDIS_MEMORY_CONTIGUOUS, _IRQL_requires_(PASSIVE_LEVEL)) _When_(MemoryFlags==NDIS_MEMORY_NONCACHED, _IRQL_requires_max_(APC_LEVEL)) NDISAPI VOID NTAPI NdisFreeMemory( _In_reads_bytes_(Length) __drv_freesMem(Mem) PVOID VirtualAddress, _In_ UINT Length, _In_ _Pre_satisfies_(MemoryFlags == 0 || MemoryFlags == NDIS_MEMORY_NONCACHED || MemoryFlags == NDIS_MEMORY_CONTIGUOUS) UINT MemoryFlags); NDISAPI VOID NTAPI NdisFreeMemoryWithTag( IN PVOID VirtualAddress, IN ULONG Tag); NDISAPI VOID NTAPI NdisImmediateReadSharedMemory( IN NDIS_HANDLE WrapperConfigurationContext, IN ULONG SharedMemoryAddress, OUT PUCHAR Buffer, IN ULONG Length); NDISAPI VOID NTAPI NdisImmediateWriteSharedMemory( IN NDIS_HANDLE WrapperConfigurationContext, IN ULONG SharedMemoryAddress, IN PUCHAR Buffer, IN ULONG Length); _IRQL_requires_(PASSIVE_LEVEL) NDISAPI VOID NTAPI NdisMAllocateSharedMemory( _In_ NDIS_HANDLE MiniportAdapterHandle, _In_ ULONG Length, _In_ BOOLEAN Cached, _Outptr_result_bytebuffer_(Length) _At_(*VirtualAddress, _Must_inspect_result_) PVOID *VirtualAddress, _Out_ _At_(*PhysicalAddress, _Must_inspect_result_) PNDIS_PHYSICAL_ADDRESS PhysicalAddress); _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI NDIS_STATUS NTAPI NdisMAllocateSharedMemoryAsync( _In_ NDIS_HANDLE MiniportAdapterHandle, _In_ ULONG Length, _In_ BOOLEAN Cached, _In_ PVOID Context); #if defined(NDIS50) #define NdisUpdateSharedMemory(NdisAdapterHandle, \ Length, \ VirtualAddress, \ PhysicalAddress) #else NDISAPI VOID NTAPI NdisUpdateSharedMemory( IN NDIS_HANDLE NdisAdapterHandle, IN ULONG Length, IN PVOID VirtualAddress, IN NDIS_PHYSICAL_ADDRESS PhysicalAddress); #endif /* defined(NDIS50) */ /* * ULONG * NdisGetPhysicalAddressHigh( * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress); */ #define NdisGetPhysicalAddressHigh(PhysicalAddress) \ ((PhysicalAddress).HighPart) /* * VOID * NdisSetPhysicalAddressHigh( * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress, * IN ULONG Value); */ #define NdisSetPhysicalAddressHigh(PhysicalAddress, Value) \ ((PhysicalAddress).HighPart) = (Value) /* * ULONG * NdisGetPhysicalAddressLow( * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress); */ #define NdisGetPhysicalAddressLow(PhysicalAddress) \ ((PhysicalAddress).LowPart) /* * VOID * NdisSetPhysicalAddressLow( * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress, * IN ULONG Value); */ #define NdisSetPhysicalAddressLow(PhysicalAddress, Value) \ ((PhysicalAddress).LowPart) = (Value) /* * VOID * NDIS_PHYSICAL_ADDRESS_CONST( * IN ULONG Low, * IN LONG High); */ #define NDIS_PHYSICAL_ADDRESS_CONST(Low, High) \ { {(ULONG)(Low), (LONG)(High)} } /* * ULONG * NdisEqualMemory( * IN CONST VOID *Source1, * IN CONST VOID *Source2, * IN ULONG Length); */ #define NdisEqualMemory(Source1, Source2, Length) \ RtlEqualMemory(Source1, Source2, Length) /* * VOID * NdisFillMemory( * IN PVOID Destination, * IN ULONG Length, * IN UCHAR Fill); */ #define NdisFillMemory(Destination, Length, Fill) \ RtlFillMemory(Destination, Length, Fill) /* * VOID * NdisMoveMemory( * OUT PVOID Destination, * IN PVOID Source, * IN ULONG Length); */ #define NdisMoveMemory(Destination, Source, Length) \ RtlCopyMemory(Destination, Source, Length) /* * VOID * NdisRetrieveUlong( * IN PULONG DestinationAddress, * IN PULONG SourceAddress); */ #define NdisRetrieveUlong(DestinationAddress, SourceAddress) \ RtlRetrieveUlong(DestinationAddress, SourceAddress) /* * VOID * NdisStoreUlong( * IN PULONG DestinationAddress, * IN ULONG Value); */ #define NdisStoreUlong(DestinationAddress, Value) \ RtlStoreUlong(DestinationAddress, Value) /* * VOID * NdisZeroMemory( * IN PVOID Destination, * IN ULONG Length) */ #define NdisZeroMemory(Destination, Length) \ RtlZeroMemory(Destination, Length) typedef VOID (NTAPI *NDIS_BLOCK_INITIALIZER) ( IN PUCHAR Block, IN SIZE_T NumberOfBytes ); /* Configuration routines */ #if NDIS_LEGACY_DRIVER _IRQL_requires_(PASSIVE_LEVEL) _Success_(*Status >= 0) NDISAPI VOID NTAPI NdisOpenConfiguration( _At_(*Status, _Must_inspect_result_) _Out_ PNDIS_STATUS Status, _Out_ PNDIS_HANDLE ConfigurationHandle, _In_ NDIS_HANDLE WrapperConfigurationContext); #endif _IRQL_requires_(PASSIVE_LEVEL) _Success_(*Status >= 0) NDISAPI VOID NTAPI NdisReadNetworkAddress( _At_(*Status, _Must_inspect_result_) _Out_ PNDIS_STATUS Status, _Outptr_result_bytebuffer_to_(*NetworkAddressLength, *NetworkAddressLength) PVOID *NetworkAddress, _Out_ PUINT NetworkAddressLength, _In_ NDIS_HANDLE ConfigurationHandle); NDISAPI VOID NTAPI NdisReadEisaSlotInformation( OUT PNDIS_STATUS Status, IN NDIS_HANDLE WrapperConfigurationContext, OUT PUINT SlotNumber, OUT PNDIS_EISA_FUNCTION_INFORMATION EisaData); NDISAPI VOID NTAPI NdisReadEisaSlotInformationEx( OUT PNDIS_STATUS Status, IN NDIS_HANDLE WrapperConfigurationContext, OUT PUINT SlotNumber, OUT PNDIS_EISA_FUNCTION_INFORMATION *EisaData, OUT PUINT NumberOfFunctions); #if NDIS_LEGACY_MINIPORT _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI ULONG NTAPI NdisReadPciSlotInformation( _In_ NDIS_HANDLE NdisAdapterHandle, _In_ ULONG SlotNumber, _In_ ULONG Offset, _Out_writes_bytes_(Length) PVOID Buffer, _In_ ULONG Length); _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI ULONG NTAPI NdisWritePciSlotInformation( _In_ NDIS_HANDLE NdisAdapterHandle, _In_ ULONG SlotNumber, _In_ ULONG Offset, _In_reads_bytes_(Length) PVOID Buffer, _In_ ULONG Length); _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI ULONG NTAPI NdisReadPcmciaAttributeMemory( _In_ NDIS_HANDLE NdisAdapterHandle, _In_ ULONG Offset, _Out_writes_bytes_(Length) PVOID Buffer, _In_ ULONG Length); _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI ULONG NTAPI NdisWritePcmciaAttributeMemory( _In_ NDIS_HANDLE NdisAdapterHandle, _In_ ULONG Offset, _In_reads_bytes_(Length) PVOID Buffer, _In_ ULONG Length); #endif /* NDIS_LEGACY_MINIPORT */ /* String management routines */ /* NDISAPI NDIS_STATUS NTAPI NdisAnsiStringToUnicodeString( IN OUT PNDIS_STRING DestinationString, IN PNDIS_ANSI_STRING SourceString); */ #define NdisAnsiStringToUnicodeString(_us, _as) RtlAnsiStringToUnicodeString(_us, _as, FALSE) /* * BOOLEAN * NdisEqualString( * IN PNDIS_STRING String1, * IN PNDIS_STRING String2, * IN BOOLEAN CaseInsensitive); */ #define NdisEqualString RtlEqualString #define NdisEqualUnicodeString RtlEqualUnicodeString /* NDISAPI VOID NTAPI NdisInitAnsiString( IN OUT PNDIS_ANSI_STRING DestinationString, IN PCSTR SourceString); */ #define NdisInitAnsiString RtlInitString NDISAPI VOID NTAPI NdisInitUnicodeString( IN OUT PNDIS_STRING DestinationString, IN PCWSTR SourceString); /* NDISAPI NDIS_STATUS NTAPI NdisUnicodeStringToAnsiString( IN OUT PNDIS_ANSI_STRING DestinationString, IN PNDIS_STRING SourceString); */ #define NdisUnicodeStringToAnsiString(_as, _us) RtlUnicodeStringToAnsiString(_as, _us, FALSE) #define NdisFreeString(_s) NdisFreeMemory((_s).Buffer, (_s).MaximumLength, 0) #define NdisPrintString(_s) DbgPrint("%ls", (_s).Buffer) /* Spin lock reoutines */ /* NDISAPI VOID NTAPI NdisAllocateSpinLock( IN PNDIS_SPIN_LOCK SpinLock); */ #define NdisAllocateSpinLock(_SpinLock) KeInitializeSpinLock(&(_SpinLock)->SpinLock) /* NDISAPI VOID NTAPI NdisFreeSpinLock( IN PNDIS_SPIN_LOCK SpinLock); */ #define NdisFreeSpinLock(_SpinLock) /* NDISAPI VOID NTAPI NdisAcquireSpinLock( IN PNDIS_SPIN_LOCK SpinLock); */ #define NdisAcquireSpinLock(_SpinLock) KeAcquireSpinLock(&(_SpinLock)->SpinLock, &(_SpinLock)->OldIrql) /* NDISAPI VOID NTAPI NdisReleaseSpinLock( IN PNDIS_SPIN_LOCK SpinLock); */ #define NdisReleaseSpinLock(_SpinLock) KeReleaseSpinLock(&(_SpinLock)->SpinLock,(_SpinLock)->OldIrql) /* NDISAPI VOID NTAPI NdisDprAcquireSpinLock( IN PNDIS_SPIN_LOCK SpinLock); */ #define NdisDprAcquireSpinLock(_SpinLock) KeAcquireSpinLockAtDpcLevel(&(_SpinLock)->SpinLock) /* NDISAPI VOID NTAPI NdisDprReleaseSpinLock( IN PNDIS_SPIN_LOCK SpinLock); */ #define NdisDprReleaseSpinLock(_SpinLock) KeReleaseSpinLockFromDpcLevel(&(_SpinLock)->SpinLock) /* I/O routines */ /* * VOID * NdisRawReadPortBufferUchar( * IN ULONG Port, * OUT PUCHAR Buffer, * IN ULONG Length); */ #define NdisRawReadPortBufferUchar(Port, Buffer, Length) \ READ_PORT_BUFFER_UCHAR((PUCHAR)(Port), (PUCHAR)(Buffer), (Length)) /* * VOID * NdisRawReadPortBufferUlong( * IN ULONG Port, * OUT PULONG Buffer, * IN ULONG Length); */ #define NdisRawReadPortBufferUlong(Port, Buffer, Length) \ READ_PORT_BUFFER_ULONG((PULONG)(Port), (PULONG)(Buffer), (Length)) /* * VOID * NdisRawReadPortBufferUshort( * IN ULONG Port, * OUT PUSHORT Buffer, * IN ULONG Length); */ #define NdisRawReadPortBufferUshort(Port, Buffer, Length) \ READ_PORT_BUFFER_USHORT((PUSHORT)(Port), (PUSHORT)(Buffer), (Length)) /* * VOID * NdisRawReadPortUchar( * IN ULONG Port, * OUT PUCHAR Data); */ #define NdisRawReadPortUchar(Port, Data) \ *(Data) = READ_PORT_UCHAR((PUCHAR)(Port)) /* * VOID * NdisRawReadPortUlong( * IN ULONG Port, * OUT PULONG Data); */ #define NdisRawReadPortUlong(Port, Data) \ *(Data) = READ_PORT_ULONG((PULONG)(Port)) /* * VOID * NdisRawReadPortUshort( * IN ULONG Port, * OUT PUSHORT Data); */ #define NdisRawReadPortUshort(Port, Data) \ *(Data) = READ_PORT_USHORT((PUSHORT)(Port)) /* * VOID * NdisRawWritePortBufferUchar( * IN ULONG Port, * IN PUCHAR Buffer, * IN ULONG Length); */ #define NdisRawWritePortBufferUchar(Port, Buffer, Length) \ WRITE_PORT_BUFFER_UCHAR((PUCHAR)(Port), (PUCHAR)(Buffer), (Length)) /* * VOID * NdisRawWritePortBufferUlong( * IN ULONG Port, * IN PULONG Buffer, * IN ULONG Length); */ #define NdisRawWritePortBufferUlong(Port, Buffer, Length) \ WRITE_PORT_BUFFER_ULONG((PULONG)(Port), (PULONG)(Buffer), (Length)) /* * VOID * NdisRawWritePortBufferUshort( * IN ULONG Port, * IN PUSHORT Buffer, * IN ULONG Length); */ #define NdisRawWritePortBufferUshort(Port, Buffer, Length) \ WRITE_PORT_BUFFER_USHORT((PUSHORT)(Port), (PUSHORT)(Buffer), (Length)) /* * VOID * NdisRawWritePortUchar( * IN ULONG Port, * IN UCHAR Data); */ #define NdisRawWritePortUchar(Port, Data) \ WRITE_PORT_UCHAR((PUCHAR)(Port), (UCHAR)(Data)) /* * VOID * NdisRawWritePortUlong( * IN ULONG Port, * IN ULONG Data); */ #define NdisRawWritePortUlong(Port, Data) \ WRITE_PORT_ULONG((PULONG)(Port), (ULONG)(Data)) /* * VOID * NdisRawWritePortUshort( * IN ULONG Port, * IN USHORT Data); */ #define NdisRawWritePortUshort(Port, Data) \ WRITE_PORT_USHORT((PUSHORT)(Port), (USHORT)(Data)) /* * VOID * NdisReadRegisterUchar( * IN PUCHAR Register, * OUT PUCHAR Data); */ #define NdisReadRegisterUchar(Register, Data) \ *(Data) = *(Register) /* * VOID * NdisReadRegisterUlong( * IN PULONG Register, * OUT PULONG Data); */ #define NdisReadRegisterUlong(Register, Data) \ *(Data) = *(Register) /* * VOID * NdisReadRegisterUshort( * IN PUSHORT Register, * OUT PUSHORT Data); */ #define NdisReadRegisterUshort(Register, Data) \ *(Data) = *(Register) /* * VOID * NdisReadRegisterUchar( * IN PUCHAR Register, * IN UCHAR Data); */ #define NdisWriteRegisterUchar(Register, Data) \ WRITE_REGISTER_UCHAR((Register), (Data)) /* * VOID * NdisReadRegisterUlong( * IN PULONG Register, * IN ULONG Data); */ #define NdisWriteRegisterUlong(Register, Data) \ WRITE_REGISTER_ULONG((Register), (Data)) /* * VOID * NdisReadRegisterUshort( * IN PUSHORT Register, * IN USHORT Data); */ #define NdisWriteRegisterUshort(Register, Data) \ WRITE_REGISTER_USHORT((Register), (Data)) /* Linked lists */ /* * VOID * NdisInitializeListHead( * IN PLIST_ENTRY ListHead); */ #define NdisInitializeListHead InitializeListHead /* * PLIST_ENTRY * NdisInterlockedInsertHeadList( * IN PLIST_ENTRY ListHead, * IN PLIST_ENTRY ListEntry, * IN PNDIS_SPIN_LOCK SpinLock); */ #define NdisInterlockedInsertHeadList(_ListHead, _ListEntry, _SpinLock) \ ExInterlockedInsertHeadList(_ListHead, _ListEntry, &(_SpinLock)->SpinLock) /* * PLIST_ENTRY * NdisInterlockedInsertTailList( * IN PLIST_ENTRY ListHead, * IN PLIST_ENTRY ListEntry, * IN PNDIS_SPIN_LOCK SpinLock); */ #define NdisInterlockedInsertTailList(_ListHead, _ListEntry, _SpinLock) \ ExInterlockedInsertTailList(_ListHead, _ListEntry, &(_SpinLock)->SpinLock) /* * PLIST_ENTRY * NdisInterlockedRemoveHeadList( * IN PLIST_ENTRY ListHead, * IN PNDIS_SPIN_LOCK SpinLock); */ #define NdisInterlockedRemoveHeadList(_ListHead, _SpinLock) \ ExInterlockedRemoveHeadList(_ListHead, &(_SpinLock)->SpinLock) /* * VOID * NdisInitializeSListHead( * IN PSLIST_HEADER SListHead); */ #define NdisInitializeSListHead(SListHead) ExInitializeSListHead(SListHead) /* * USHORT NdisQueryDepthSList( * IN PSLIST_HEADER SListHead); */ #define NdisQueryDepthSList(SListHead) ExQueryDepthSList(SListHead) #define NdisInterlockedPushEntryList(ListHead, ListEntry, Lock) \ ExInterlockedPushEntryList(ListHead, ListEntry, &(Lock)->SpinLock) #define NdisInterlockedPopEntryList(ListHead, Lock) \ ExInterlockedPopEntryList(ListHead, &(Lock)->SpinLock) /* Non-paged lookaside lists */ #define NdisInitializeNPagedLookasideList(_L, _AR, _FR, _Fl, _S, _T, _D) \ ExInitializeNPagedLookasideList(_L, _AR, _FR, _Fl, _S, _T, _D) #define NdisDeleteNPagedLookasideList(_L) ExDeleteNPagedLookasideList(_L) #define NdisAllocateFromNPagedLookasideList(_L) ExAllocateFromNPagedLookasideList(_L) #define NdisFreeToNPagedLookasideList(_L, _E) ExFreeToNPagedLookasideList(_L, _E) /* Interlocked routines */ /* * LONG * NdisInterlockedDecrement( * IN PLONG Addend); */ #define NdisInterlockedDecrement(Addend) InterlockedDecrement(Addend) /* * LONG * NdisInterlockedIncrement( * IN PLONG Addend); */ #define NdisInterlockedIncrement(Addend) InterlockedIncrement(Addend) /* * VOID * NdisInterlockedAddUlong( * IN PULONG Addend, * IN ULONG Increment, * IN PNDIS_SPIN_LOCK SpinLock); */ #define NdisInterlockedAddUlong(_Addend, _Increment, _SpinLock) \ ExInterlockedAddUlong(_Addend, _Increment, &(_SpinLock)->SpinLock) /* Miscellaneous routines */ _IRQL_requires_(PASSIVE_LEVEL) NDISAPI VOID NTAPI NdisCloseConfiguration( _In_ __drv_freesMem(mem) NDIS_HANDLE ConfigurationHandle); _IRQL_requires_(PASSIVE_LEVEL) _Success_(*Status >= 0) NDISAPI VOID NTAPI NdisReadConfiguration( _At_(*Status, _Must_inspect_result_) _Out_ PNDIS_STATUS Status, _Out_ PNDIS_CONFIGURATION_PARAMETER *ParameterValue, _In_ NDIS_HANDLE ConfigurationHandle, _In_ PNDIS_STRING Keyword, _In_ NDIS_PARAMETER_TYPE ParameterType); _IRQL_requires_(PASSIVE_LEVEL) _Success_(*Status >= 0) NDISAPI VOID NTAPI NdisWriteConfiguration( _At_(*Status, _Must_inspect_result_) _Out_ PNDIS_STATUS Status, _In_ NDIS_HANDLE WrapperConfigurationContext, _In_ PNDIS_STRING Keyword, _In_ PNDIS_CONFIGURATION_PARAMETER ParameterValue); _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI VOID __cdecl NdisWriteErrorLogEntry( _In_ NDIS_HANDLE NdisAdapterHandle, _In_ NDIS_ERROR_CODE ErrorCode, _In_ ULONG NumberOfErrorValues, ...); _IRQL_requires_(PASSIVE_LEVEL) NDISAPI VOID NTAPI NdisInitializeString( _Out_ _At_(Destination->Buffer, __drv_allocatesMem(Mem)) PNDIS_STRING Destination, _In_opt_z_ PUCHAR Source); /* * VOID * NdisStallExecution( * IN UINT MicrosecondsToStall) */ #define NdisStallExecution KeStallExecutionProcessor /* NDISAPI VOID NTAPI NdisGetCurrentSystemTime( IN PLARGE_INTEGER pSystemTime); */ #define NdisGetCurrentSystemTime KeQuerySystemTime #if NDIS_SUPPORT_60_COMPATIBLE_API _IRQL_requires_(PASSIVE_LEVEL) NDISAPI CCHAR NTAPI NdisSystemProcessorCount(VOID); #endif NDISAPI VOID NTAPI NdisGetCurrentProcessorCpuUsage( OUT PULONG pCpuUsage); /* NDIS helper macros */ /* * VOID * NDIS_INIT_FUNCTION(FunctionName) */ #define NDIS_INIT_FUNCTION(FunctionName) \ alloc_text(INIT, FunctionName) /* * VOID * NDIS_PAGABLE_FUNCTION(FunctionName) */ #define NDIS_PAGEABLE_FUNCTION(FunctionName) \ alloc_text(PAGE, FunctionName) #define NDIS_PAGABLE_FUNCTION NDIS_PAGEABLE_FUNCTION /* NDIS 4.0 extensions */ _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI VOID NTAPI NdisMFreeSharedMemory( _In_ NDIS_HANDLE MiniportAdapterHandle, _In_ ULONG Length, _In_ BOOLEAN Cached, _In_reads_bytes_(Length) PVOID VirtualAddress, _In_ NDIS_PHYSICAL_ADDRESS PhysicalAddress); NDISAPI VOID NTAPI NdisMWanIndicateReceive( OUT PNDIS_STATUS Status, IN NDIS_HANDLE MiniportAdapterHandle, IN NDIS_HANDLE NdisLinkContext, IN PUCHAR PacketBuffer, IN UINT PacketSize); NDISAPI VOID NTAPI NdisMWanIndicateReceiveComplete( IN NDIS_HANDLE MiniportAdapterHandle, IN NDIS_HANDLE NdisLinkContext); NDISAPI VOID NTAPI NdisMWanSendComplete( IN NDIS_HANDLE MiniportAdapterHandle, IN PNDIS_WAN_PACKET Packet, IN NDIS_STATUS Status); NDISAPI NDIS_STATUS NTAPI NdisPciAssignResources( IN NDIS_HANDLE NdisMacHandle, IN NDIS_HANDLE NdisWrapperHandle, IN NDIS_HANDLE WrapperConfigurationContext, IN ULONG SlotNumber, OUT PNDIS_RESOURCE_LIST *AssignedResources); /* NDIS 5.0 extensions */ _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI NDIS_STATUS NTAPI NdisAllocateMemoryWithTag( _At_(*VirtualAddress, __drv_allocatesMem(Mem)) _Outptr_result_bytebuffer_(Length) PVOID *VirtualAddress, _In_ UINT Length, _In_ ULONG Tag); _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI VOID NTAPI NdisGetCurrentProcessorCounts( _Out_ PULONG pIdleCount, _Out_ PULONG pKernelAndUser, _Out_ PULONG pIndex); #if NDIS_LEGACY_DRIVER NDISAPI VOID NTAPI NdisGetSystemUpTime( OUT PULONG pSystemUpTime); #endif #if NDIS_SUPPORT_60_COMPATIBLE_API _IRQL_requires_max_(DISPATCH_LEVEL) _IRQL_raises_(DISPATCH_LEVEL) _When_(fWrite, _Acquires_exclusive_lock_(*Lock)) _When_(!fWrite, _Acquires_shared_lock_(*Lock)) NDISAPI VOID NTAPI NdisAcquireReadWriteLock( _Inout_ PNDIS_RW_LOCK Lock, _In_ BOOLEAN fWrite, _Out_ _IRQL_saves_ PLOCK_STATE LockState); _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI VOID NTAPI NdisInitializeReadWriteLock( _Out_ PNDIS_RW_LOCK Lock); _IRQL_requires_(DISPATCH_LEVEL) _Requires_lock_held_(*Lock) _Releases_lock_(*Lock) NDISAPI VOID NTAPI NdisReleaseReadWriteLock( _Inout_ PNDIS_RW_LOCK Lock, _In_ _IRQL_restores_ PLOCK_STATE LockState); #if NDIS_SUPPORT_NDIS6 NDISAPI VOID NTAPI NdisDprAcquireReadWriteLock( IN PNDIS_RW_LOCK Lock, IN BOOLEAN fWrite, IN PLOCK_STATE LockState); NDISAPI VOID NTAPI NdisDprReleaseReadWriteLock( IN PNDIS_RW_LOCK Lock, IN PLOCK_STATE LockState); #endif /* NDIS_SUPPORT_NDIS6 */ #endif /* NDIS_SUPPORT_60_COMPATIBLE_API */ _IRQL_requires_(PASSIVE_LEVEL) NDISAPI NDIS_STATUS NTAPI NdisMDeregisterDevice( _In_ NDIS_HANDLE NdisDeviceHandle); _IRQL_requires_(PASSIVE_LEVEL) NDISAPI VOID NTAPI NdisMGetDeviceProperty( _In_ NDIS_HANDLE MiniportAdapterHandle, _Inout_opt_ PDEVICE_OBJECT *PhysicalDeviceObject, _Inout_opt_ PDEVICE_OBJECT *FunctionalDeviceObject, _Inout_opt_ PDEVICE_OBJECT *NextDeviceObject, _Inout_opt_ PCM_RESOURCE_LIST *AllocatedResources, _Inout_opt_ PCM_RESOURCE_LIST *AllocatedResourcesTranslated); _IRQL_requires_(PASSIVE_LEVEL) NDISAPI NDIS_STATUS NTAPI NdisMInitializeScatterGatherDma( _In_ NDIS_HANDLE MiniportAdapterHandle, _In_ BOOLEAN Dma64BitAddresses, _In_ ULONG MaximumPhysicalMapping); _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI NDIS_STATUS NTAPI NdisMPromoteMiniport( _In_ NDIS_HANDLE MiniportAdapterHandle); _IRQL_requires_(PASSIVE_LEVEL) NDISAPI NDIS_STATUS NTAPI NdisMQueryAdapterInstanceName( _Out_ PNDIS_STRING AdapterInstanceName, _In_ NDIS_HANDLE MiniportAdapterHandle); _IRQL_requires_(PASSIVE_LEVEL) NDISAPI NDIS_STATUS NTAPI NdisMRegisterDevice( _In_ NDIS_HANDLE NdisWrapperHandle, _In_ PNDIS_STRING DeviceName, _In_ PNDIS_STRING SymbolicName, _In_reads_(IRP_MJ_PNP) PDRIVER_DISPATCH *MajorFunctions, _Out_ PDEVICE_OBJECT *pDeviceObject, _Out_ NDIS_HANDLE *NdisDeviceHandle); _IRQL_requires_(PASSIVE_LEVEL) NDISAPI VOID NTAPI NdisMRegisterUnloadHandler( _In_ NDIS_HANDLE NdisWrapperHandle, _In_ PDRIVER_UNLOAD UnloadHandler); _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI NDIS_STATUS NTAPI NdisMRemoveMiniport( _In_ NDIS_HANDLE MiniportAdapterHandle); _IRQL_requires_(PASSIVE_LEVEL) NDISAPI NDIS_STATUS NTAPI NdisMSetMiniportSecondary( _In_ NDIS_HANDLE MiniportAdapterHandle, _In_ NDIS_HANDLE PrimaryMiniportAdapterHandle); _IRQL_requires_max_(APC_LEVEL) _Success_(*Status >= 0) NDISAPI VOID NTAPI NdisOpenConfigurationKeyByIndex( _At_(*Status, _Must_inspect_result_) _Out_ PNDIS_STATUS Status, _In_ NDIS_HANDLE ConfigurationHandle, _In_ ULONG Index, _Out_ PNDIS_STRING KeyName, _Out_ PNDIS_HANDLE KeyHandle); _IRQL_requires_max_(APC_LEVEL) _Success_(*Status >= 0) NDISAPI VOID NTAPI NdisOpenConfigurationKeyByName( _At_(*Status, _Must_inspect_result_) _Out_ PNDIS_STATUS Status, _In_ NDIS_HANDLE ConfigurationHandle, _In_ PNDIS_STRING SubKeyName, _Out_ PNDIS_HANDLE SubKeyHandle); _Must_inspect_result_ _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI NDIS_STATUS NTAPI NdisQueryAdapterInstanceName( _Out_ PNDIS_STRING AdapterInstanceName, _In_ NDIS_HANDLE NdisBindingHandle); _Must_inspect_result_ NDISAPI NDIS_STATUS NTAPI NdisQueryBindInstanceName( _Out_ PNDIS_STRING pAdapterInstanceName, _In_ NDIS_HANDLE BindingContext); _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI NDIS_STATUS NTAPI NdisWriteEventLogEntry( _In_ _Points_to_data_ PVOID LogHandle, _In_ NDIS_STATUS EventCode, _In_ ULONG UniqueEventValue, _In_ USHORT NumStrings, _In_opt_ PVOID StringsList, _In_ ULONG DataSize, _In_reads_bytes_opt_(DataSize) PVOID Data); /* Connectionless services */ _Must_inspect_result_ _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI NDIS_STATUS NTAPI NdisClAddParty( _In_ NDIS_HANDLE NdisVcHandle, _In_ NDIS_HANDLE ProtocolPartyContext, _In_ PCO_CALL_PARAMETERS CallParameters, _Out_ PNDIS_HANDLE NdisPartyHandle); _Must_inspect_result_ _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI NDIS_STATUS NTAPI NdisClCloseAddressFamily( _In_ NDIS_HANDLE NdisAfHandle); _Must_inspect_result_ _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI NDIS_STATUS NTAPI NdisClCloseCall( _In_ NDIS_HANDLE NdisVcHandle, _In_opt_ NDIS_HANDLE NdisPartyHandle, _In_reads_bytes_opt_(Size) PVOID Buffer, _In_ UINT Size); _Must_inspect_result_ _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI NDIS_STATUS NTAPI NdisClDeregisterSap( _In_ NDIS_HANDLE NdisSapHandle); _Must_inspect_result_ _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI NDIS_STATUS NTAPI NdisClDropParty( _In_ NDIS_HANDLE NdisPartyHandle, _In_reads_bytes_opt_(Size) PVOID Buffer, _In_opt_ UINT Size); _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI VOID NTAPI NdisClIncomingCallComplete( _In_ NDIS_STATUS Status, _In_ NDIS_HANDLE NdisVcHandle, _In_ PCO_CALL_PARAMETERS CallParameters); _Must_inspect_result_ _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI NDIS_STATUS NTAPI NdisClMakeCall( _In_ NDIS_HANDLE NdisVcHandle, _Inout_ PCO_CALL_PARAMETERS CallParameters, _In_opt_ NDIS_HANDLE ProtocolPartyContext, _Out_opt_ PNDIS_HANDLE NdisPartyHandle); _Must_inspect_result_ _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI NDIS_STATUS NTAPI NdisClModifyCallQoS( _In_ NDIS_HANDLE NdisVcHandle, _In_ PCO_CALL_PARAMETERS CallParameters); _Must_inspect_result_ _IRQL_requires_(PASSIVE_LEVEL) NDISAPI NDIS_STATUS NTAPI NdisClOpenAddressFamily( _In_ NDIS_HANDLE NdisBindingHandle, _In_ PCO_ADDRESS_FAMILY AddressFamily, _In_ NDIS_HANDLE ProtocolAfContext, _In_ PNDIS_CLIENT_CHARACTERISTICS ClCharacteristics, _In_ UINT SizeOfClCharacteristics, _Out_ PNDIS_HANDLE NdisAfHandle); _Must_inspect_result_ _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI NDIS_STATUS NTAPI NdisClRegisterSap( _In_ NDIS_HANDLE NdisAfHandle, _In_ NDIS_HANDLE ProtocolSapContext, _In_ PCO_SAP Sap, _Out_ PNDIS_HANDLE NdisSapHandle); /* Call Manager services */ _Must_inspect_result_ _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI NDIS_STATUS NTAPI NdisCmActivateVc( _In_ NDIS_HANDLE NdisVcHandle, _Inout_ PCO_CALL_PARAMETERS CallParameters); _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI VOID NTAPI NdisCmAddPartyComplete( _In_ NDIS_STATUS Status, _In_ NDIS_HANDLE NdisPartyHandle, _In_opt_ NDIS_HANDLE CallMgrPartyContext, _In_ PCO_CALL_PARAMETERS CallParameters); _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI VOID NTAPI NdisCmCloseAddressFamilyComplete( _In_ NDIS_STATUS Status, _In_ NDIS_HANDLE NdisAfHandle); _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI VOID NTAPI NdisCmCloseCallComplete( _In_ NDIS_STATUS Status, _In_ NDIS_HANDLE NdisVcHandle, _In_opt_ NDIS_HANDLE NdisPartyHandle); _Must_inspect_result_ _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI NDIS_STATUS NTAPI NdisCmDeactivateVc( _In_ NDIS_HANDLE NdisVcHandle); _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI VOID NTAPI NdisCmDeregisterSapComplete( _In_ NDIS_STATUS Status, _In_ NDIS_HANDLE NdisSapHandle); _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI VOID NTAPI NdisCmDispatchCallConnected( _In_ NDIS_HANDLE NdisVcHandle); _Must_inspect_result_ _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI NDIS_STATUS NTAPI NdisCmDispatchIncomingCall( _In_ NDIS_HANDLE NdisSapHandle, _In_ NDIS_HANDLE NdisVcHandle, _In_ PCO_CALL_PARAMETERS CallParameters); _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI VOID NTAPI NdisCmDispatchIncomingCallQoSChange( _In_ NDIS_HANDLE NdisVcHandle, _In_ PCO_CALL_PARAMETERS CallParameters); _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI VOID NTAPI NdisCmDispatchIncomingCloseCall( _In_ NDIS_STATUS CloseStatus, _In_ NDIS_HANDLE NdisVcHandle, _In_reads_bytes_opt_(Size) PVOID Buffer, _In_ UINT Size); _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI VOID NTAPI NdisCmDispatchIncomingDropParty( _In_ NDIS_STATUS DropStatus, _In_ NDIS_HANDLE NdisPartyHandle, _In_reads_bytes_opt_(Size) PVOID Buffer, _In_ UINT Size); _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI VOID NTAPI NdisCmDropPartyComplete( _In_ NDIS_STATUS Status, _In_ NDIS_HANDLE NdisPartyHandle); _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI VOID NTAPI NdisCmMakeCallComplete( _In_ NDIS_STATUS Status, _In_ NDIS_HANDLE NdisVcHandle, _In_opt_ NDIS_HANDLE NdisPartyHandle, _In_opt_ NDIS_HANDLE CallMgrPartyContext, _In_ PCO_CALL_PARAMETERS CallParameters); _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI VOID NTAPI NdisCmModifyCallQoSComplete( _In_ NDIS_STATUS Status, _In_ NDIS_HANDLE NdisVcHandle, _In_ PCO_CALL_PARAMETERS CallParameters); _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI VOID NTAPI NdisCmOpenAddressFamilyComplete( _In_ NDIS_STATUS Status, _In_ NDIS_HANDLE NdisAfHandle, _In_ NDIS_HANDLE CallMgrAfContext); _Must_inspect_result_ _IRQL_requires_(PASSIVE_LEVEL) NDISAPI NDIS_STATUS NTAPI NdisCmRegisterAddressFamily( _In_ NDIS_HANDLE NdisBindingHandle, _In_ PCO_ADDRESS_FAMILY AddressFamily, _In_ PNDIS_CALL_MANAGER_CHARACTERISTICS CmCharacteristics, _In_ UINT SizeOfCmCharacteristics); _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI VOID NTAPI NdisCmRegisterSapComplete( _In_ NDIS_STATUS Status, _In_ NDIS_HANDLE NdisSapHandle, _In_ NDIS_HANDLE CallMgrSapContext); _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI NDIS_STATUS NTAPI NdisMCmActivateVc( _In_ NDIS_HANDLE NdisVcHandle, _In_ PCO_CALL_PARAMETERS CallParameters); _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI NDIS_STATUS NTAPI NdisMCmCreateVc( _In_ NDIS_HANDLE MiniportAdapterHandle, _In_ NDIS_HANDLE NdisAfHandle, _In_ NDIS_HANDLE MiniportVcContext, _Out_ PNDIS_HANDLE NdisVcHandle); _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI NDIS_STATUS NTAPI NdisMCmDeactivateVc( _In_ NDIS_HANDLE NdisVcHandle); _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI NDIS_STATUS NTAPI NdisMCmDeleteVc( _In_ NDIS_HANDLE NdisVcHandle); NDISAPI NDIS_STATUS NTAPI NdisMCmRegisterAddressFamily( IN NDIS_HANDLE MiniportAdapterHandle, IN PCO_ADDRESS_FAMILY AddressFamily, IN PNDIS_CALL_MANAGER_CHARACTERISTICS CmCharacteristics, IN UINT SizeOfCmCharacteristics); _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI NDIS_STATUS NTAPI NdisMCmRequest( _In_ NDIS_HANDLE NdisAfHandle, _In_opt_ NDIS_HANDLE NdisVcHandle, _In_opt_ NDIS_HANDLE NdisPartyHandle, _Inout_ PNDIS_REQUEST NdisRequest); /* Connection-oriented services */ _Must_inspect_result_ _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI NDIS_STATUS NTAPI NdisCoCreateVc( _In_ NDIS_HANDLE NdisBindingHandle, _In_opt_ NDIS_HANDLE NdisAfHandle , _In_ NDIS_HANDLE ProtocolVcContext, _Inout_ PNDIS_HANDLE NdisVcHandle); _Must_inspect_result_ _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI NDIS_STATUS NTAPI NdisCoDeleteVc( _In_ NDIS_HANDLE NdisVcHandle); _Must_inspect_result_ _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI NDIS_STATUS NTAPI NdisCoRequest( _In_ NDIS_HANDLE NdisBindingHandle, _In_opt_ NDIS_HANDLE NdisAfHandle, _In_opt_ NDIS_HANDLE NdisVcHandle, _In_opt_ NDIS_HANDLE NdisPartyHandle, _Inout_ PNDIS_REQUEST NdisRequest); _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI VOID NTAPI NdisCoRequestComplete( _In_ NDIS_STATUS Status, _In_ NDIS_HANDLE NdisAfHandle, _In_opt_ NDIS_HANDLE NdisVcHandle, _In_opt_ NDIS_HANDLE NdisPartyHandle, _In_ PNDIS_REQUEST NdisRequest); _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI VOID NTAPI NdisCoSendPackets( _In_ NDIS_HANDLE NdisVcHandle, _In_ PPNDIS_PACKET PacketArray, _In_ UINT NumberOfPackets); _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI VOID NTAPI NdisMCoActivateVcComplete( _In_ NDIS_STATUS Status, _In_ NDIS_HANDLE NdisVcHandle, _In_ PCO_CALL_PARAMETERS CallParameters); _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI VOID NTAPI NdisMCoDeactivateVcComplete( _In_ NDIS_STATUS Status, _In_ NDIS_HANDLE NdisVcHandle); _IRQL_requires_(DISPATCH_LEVEL) NDISAPI VOID NTAPI NdisMCoIndicateReceivePacket( _In_ NDIS_HANDLE NdisVcHandle, _In_ PPNDIS_PACKET PacketArray, _In_ UINT NumberOfPackets); _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI VOID NTAPI NdisMCoIndicateStatus( _In_ NDIS_HANDLE MiniportAdapterHandle, _In_opt_ NDIS_HANDLE NdisVcHandle, _In_ NDIS_STATUS GeneralStatus, _In_reads_bytes_opt_(StatusBufferSize) PVOID StatusBuffer, _In_ ULONG StatusBufferSize); _IRQL_requires_(DISPATCH_LEVEL) NDISAPI VOID NTAPI NdisMCoReceiveComplete( _In_ NDIS_HANDLE MiniportAdapterHandle); _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI VOID NTAPI NdisMCoRequestComplete( _In_ NDIS_STATUS Status, _In_ NDIS_HANDLE MiniportAdapterHandle, _In_ PNDIS_REQUEST Request); _IRQL_requires_(DISPATCH_LEVEL) NDISAPI VOID NTAPI NdisMCoSendComplete( _In_ NDIS_STATUS Status, _In_ NDIS_HANDLE NdisVcHandle, _In_ PNDIS_PACKET Packet); /* NDIS 5.0 extensions for intermediate drivers */ _IRQL_requires_(PASSIVE_LEVEL) NDISAPI VOID NTAPI NdisIMAssociateMiniport( _In_ NDIS_HANDLE DriverHandle, _In_ NDIS_HANDLE ProtocolHandle); _IRQL_requires_(PASSIVE_LEVEL) NDISAPI NDIS_STATUS NTAPI NdisIMCancelInitializeDeviceInstance( _In_ NDIS_HANDLE DriverHandle, _In_ PNDIS_STRING DeviceInstance); NDISAPI VOID NTAPI NdisIMCopySendCompletePerPacketInfo( IN PNDIS_PACKET DstPacket, IN PNDIS_PACKET SrcPacket); NDISAPI VOID NTAPI NdisIMCopySendPerPacketInfo( IN PNDIS_PACKET DstPacket, IN PNDIS_PACKET SrcPacket); _IRQL_requires_(PASSIVE_LEVEL) NDISAPI VOID NTAPI NdisIMDeregisterLayeredMiniport( _In_ NDIS_HANDLE DriverHandle); _IRQL_requires_max_(APC_LEVEL) NDISAPI NDIS_HANDLE NTAPI NdisIMGetBindingContext( _In_ NDIS_HANDLE NdisBindingHandle); _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI NDIS_HANDLE NTAPI NdisIMGetDeviceContext( _In_ NDIS_HANDLE MiniportAdapterHandle); _IRQL_requires_(PASSIVE_LEVEL) NDISAPI NDIS_STATUS NTAPI NdisIMInitializeDeviceInstanceEx( _In_ NDIS_HANDLE DriverHandle, _In_ PNDIS_STRING DriverInstance, _In_opt_ NDIS_HANDLE DeviceContext); /* NDISAPI PSINGLE_LIST_ENTRY NTAPI NdisInterlockedPopEntrySList( IN PSLIST_HEADER ListHead, IN PKSPIN_LOCK Lock); */ #define NdisInterlockedPopEntrySList(SListHead, Lock) \ ExInterlockedPopEntrySList(SListHead, &(Lock)->SpinLock) /* NDISAPI PSINGLE_LIST_ENTRY NTAPI NdisInterlockedPushEntrySList( IN PSLIST_HEADER ListHead, IN PSINGLE_LIST_ENTRY ListEntry, IN PKSPIN_LOCK Lock); */ #define NdisInterlockedPushEntrySList(SListHead, SListEntry, Lock) \ ExInterlockedPushEntrySList(SListHead, SListEntry, &(Lock)->SpinLock) #define NdisInterlockedFlushSList(SListHead) ExInterlockedFlushSList(SListHead) /* NDISAPI VOID NTAPI NdisQueryBufferSafe( IN PNDIS_BUFFER Buffer, OUT PVOID *VirtualAddress OPTIONAL, OUT PUINT Length, IN UINT Priority); */ #define NdisQueryBufferSafe(_Buffer, _VirtualAddress, _Length, _Priority) { \ if (ARGUMENT_PRESENT(_VirtualAddress)) { \ *(PVOID *)(_VirtualAddress) = MmGetSystemAddressForMdlSafe(_Buffer, _Priority); \ } \ *(_Length) = MmGetMdlByteCount(_Buffer); \ } /* Routines for NDIS miniport drivers */ #if NDIS_SUPPORT_NDIS6 NDISAPI PNDIS_GENERIC_OBJECT NTAPI NdisAllocateGenericObject( PDRIVER_OBJECT DriverObject OPTIONAL, ULONG Tag, USHORT Size); NDISAPI VOID NTAPI NdisFreeGenericObject( IN PNDIS_GENERIC_OBJECT NdisObject); #endif /* NDIS_SUPPORT_NDIS6 */ NDISAPI VOID NTAPI NdisInitializeWrapper( OUT PNDIS_HANDLE NdisWrapperHandle, IN PVOID SystemSpecific1, IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); _Must_inspect_result_ _IRQL_requires_(PASSIVE_LEVEL) __drv_preferredFunction("NdisMInitializeScatterGatherDma", "See details in NdisMAllocateMapRegisters documentation") NDISAPI NDIS_STATUS NTAPI NdisMAllocateMapRegisters( _In_ NDIS_HANDLE MiniportAdapterHandle, _In_ UINT DmaChannel, _In_ NDIS_DMA_SIZE DmaSize, _In_ ULONG PhysicalMapRegistersNeeded, _In_ ULONG MaximumPhysicalMapping); /* * VOID * NdisMArcIndicateReceive( * IN NDIS_HANDLE MiniportAdapterHandle, * IN PUCHAR HeaderBuffer, * IN PUCHAR DataBuffer, * IN UINT Length); */ #define NdisMArcIndicateReceive(MiniportAdapterHandle, \ HeaderBuffer, \ DataBuffer, \ Length) \ { \ ArcFilterDprIndicateReceive( \ (((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->ArcDB), \ (HeaderBuffer), \ (DataBuffer), \ (Length)); \ } /* * VOID * NdisMArcIndicateReceiveComplete( * IN NDIS_HANDLE MiniportAdapterHandle); */ #define NdisMArcIndicateReceiveComplete(MiniportAdapterHandle) \ { \ if (((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->EthDB) \ { \ NdisMEthIndicateReceiveComplete(_H); \ } \ \ ArcFilterDprIndicateReceiveComplete( \ ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->ArcDB); \ } _IRQL_requires_(PASSIVE_LEVEL) NDISAPI VOID NTAPI NdisMCloseLog( _In_ NDIS_HANDLE LogHandle); _IRQL_requires_(PASSIVE_LEVEL) NDISAPI NDIS_STATUS NTAPI NdisMCreateLog( _In_ NDIS_HANDLE MiniportAdapterHandle, _In_ UINT Size, _Out_ PNDIS_HANDLE LogHandle); NDISAPI VOID NTAPI NdisMDeregisterAdapterShutdownHandler( _In_ NDIS_HANDLE MiniportHandle); #if NDIS_LEGACY_MINIPORT _IRQL_requires_(PASSIVE_LEVEL) NDISAPI VOID NTAPI NdisMDeregisterInterrupt( _In_ PNDIS_MINIPORT_INTERRUPT Interrupt); _IRQL_requires_(PASSIVE_LEVEL) NDISAPI VOID NTAPI NdisMRegisterAdapterShutdownHandler( _In_ NDIS_HANDLE MiniportHandle, _In_ PVOID ShutdownContext, _In_ ADAPTER_SHUTDOWN_HANDLER ShutdownHandler); NDISAPI NDIS_STATUS NTAPI NdisMRegisterInterrupt( OUT PNDIS_MINIPORT_INTERRUPT Interrupt, IN NDIS_HANDLE MiniportAdapterHandle, IN UINT InterruptVector, IN UINT InterruptLevel, IN BOOLEAN RequestIsr, IN BOOLEAN SharedInterrupt, IN NDIS_INTERRUPT_MODE InterruptMode); NDISAPI NDIS_STATUS NTAPI NdisMRegisterMiniport( IN NDIS_HANDLE NdisWrapperHandle, IN PNDIS_MINIPORT_CHARACTERISTICS MiniportCharacteristics, IN UINT CharacteristicsLength); NDISAPI BOOLEAN NTAPI NdisMSynchronizeWithInterrupt( IN PNDIS_MINIPORT_INTERRUPT Interrupt, IN PVOID SynchronizeFunction, IN PVOID SynchronizeContext); #endif /* NDIS_LEGACY_MINIPORT */ _IRQL_requires_(PASSIVE_LEVEL) NDISAPI VOID NTAPI NdisMDeregisterIoPortRange( _In_ NDIS_HANDLE MiniportAdapterHandle, _In_ UINT InitialPort, _In_ UINT NumberOfPorts, _In_ PVOID PortOffset); /* * VOID * NdisMEthIndicateReceive( * IN NDIS_HANDLE MiniportAdapterHandle, * IN NDIS_HANDLE MiniportReceiveContext, * IN PVOID HeaderBuffer, * IN UINT HeaderBufferSize, * IN PVOID LookaheadBuffer, * IN UINT LookaheadBufferSize, * IN UINT PacketSize); */ #define NdisMEthIndicateReceive(MiniportAdapterHandle, \ MiniportReceiveContext, \ HeaderBuffer, \ HeaderBufferSize, \ LookaheadBuffer, \ LookaheadBufferSize, \ PacketSize) \ { \ (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->EthRxIndicateHandler)( \ ((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->EthDB, \ (MiniportReceiveContext), \ (HeaderBuffer), \ (HeaderBuffer), \ (HeaderBufferSize), \ (LookaheadBuffer), \ (LookaheadBufferSize), \ (PacketSize)); \ } /* * VOID * NdisMEthIndicateReceiveComplete( * IN NDIS_HANDLE MiniportAdapterHandle); */ #define NdisMEthIndicateReceiveComplete(MiniportAdapterHandle) \ { \ (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->EthRxCompleteHandler)( \ ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->EthDB); \ } /* * VOID * NdisMFddiIndicateReceive( * IN NDIS_HANDLE MiniportAdapterHandle, * IN NDIS_HANDLE MiniportReceiveContext, * IN PVOID HeaderBuffer, * IN UINT HeaderBufferSize, * IN PVOID LookaheadBuffer, * IN UINT LookaheadBufferSize, * IN UINT PacketSize); */ #define NdisMFddiIndicateReceive(MiniportAdapterHandle, \ MiniportReceiveContext, \ HeaderBuffer, \ HeaderBufferSize, \ LookaheadBuffer, \ LookaheadBufferSize, \ PacketSize) \ { \ (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FddiRxIndicateHandler)( \ (((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FddiDB), \ (MiniportReceiveContext), \ (PUCHAR)(HeaderBuffer) + 1, \ (((*(PUCHAR*)(HeaderBuffer)) & 0x40) ? \ FDDI_LENGTH_OF_LONG_ADDRESS : \ FDDI_LENGTH_OF_SHORT_ADDRESS), \ (HeaderBuffer), \ (HeaderBufferSize), \ (LookaheadBuffer), \ (LookaheadBufferSize), \ (PacketSize)); \ } /* * VOID * NdisMFddiIndicateReceiveComplete( * IN NDIS_HANDLE MiniportAdapterHandle); */ #define NdisMFddiIndicateReceiveComplete(MiniportAdapterHandle) \ { \ (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FddiRxCompleteHandler)( \ ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->FddiDB); \ } _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI VOID NTAPI NdisMFlushLog( _In_ NDIS_HANDLE LogHandle); _IRQL_requires_(PASSIVE_LEVEL) NDISAPI VOID NTAPI NdisMFreeMapRegisters( _In_ NDIS_HANDLE MiniportAdapterHandle); /* * VOID * EXPORT * NdisMIndicateReceivePacket( * IN NDIS_HANDLE MiniportAdapterHandle, * IN PPNDIS_PACKET ReceivePackets, * IN UINT NumberOfPackets); */ #define NdisMIndicateReceivePacket(MiniportAdapterHandle, \ ReceivePackets, NumberOfPackets) \ (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->PacketIndicateHandler)( \ MiniportAdapterHandle, ReceivePackets, NumberOfPackets) /* * VOID * NdisMIndicateStatus( * IN NDIS_HANDLE MiniportAdapterHandle, * IN NDIS_STATUS GeneralStatus, * IN PVOID StatusBuffer, * IN UINT StatusBufferSize); */ #define NdisMIndicateStatus(MiniportAdapterHandle, \ GeneralStatus, StatusBuffer, StatusBufferSize) \ (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->StatusHandler)( \ MiniportAdapterHandle, GeneralStatus, StatusBuffer, StatusBufferSize) /* * VOID * NdisMIndicateStatusComplete( * IN NDIS_HANDLE MiniportAdapterHandle); */ #define NdisMIndicateStatusComplete(MiniportAdapterHandle) \ (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->StatusCompleteHandler)( \ MiniportAdapterHandle) /* * VOID * NdisMInitializeWrapper( * OUT PNDIS_HANDLE NdisWrapperHandle, * IN PVOID SystemSpecific1, * IN PVOID SystemSpecific2, * IN PVOID SystemSpecific3); */ #define NdisMInitializeWrapper(NdisWrapperHandle, \ SystemSpecific1, \ SystemSpecific2, \ SystemSpecific3) \ NdisInitializeWrapper((NdisWrapperHandle), \ (SystemSpecific1), \ (SystemSpecific2), \ (SystemSpecific3)) _Must_inspect_result_ _IRQL_requires_(PASSIVE_LEVEL) NDISAPI NDIS_STATUS NTAPI NdisMMapIoSpace( _Outptr_result_bytebuffer_(Length) PVOID *VirtualAddress, _In_ NDIS_HANDLE MiniportAdapterHandle, _In_ NDIS_PHYSICAL_ADDRESS PhysicalAddress, _In_ UINT Length); /* * VOID * NdisMQueryInformationComplete( * IN NDIS_HANDLE MiniportAdapterHandle, * IN NDIS_STATUS Status); */ #define NdisMQueryInformationComplete(MiniportAdapterHandle, Status) \ (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->QueryCompleteHandler)(MiniportAdapterHandle, Status) _Must_inspect_result_ _IRQL_requires_(PASSIVE_LEVEL) NDISAPI NDIS_STATUS NTAPI NdisMRegisterIoPortRange( _Out_ PVOID *PortOffset, _In_ NDIS_HANDLE MiniportAdapterHandle, _In_ UINT InitialPort, _In_ UINT NumberOfPorts); NDISAPI VOID NTAPI NdisMSetTimer( IN PNDIS_MINIPORT_TIMER Timer, IN UINT MillisecondsToDelay); _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI VOID NTAPI NdisMInitializeTimer( _Inout_ PNDIS_MINIPORT_TIMER Timer, _In_ NDIS_HANDLE MiniportAdapterHandle, _In_ PNDIS_TIMER_FUNCTION TimerFunction, _In_ PVOID FunctionContext); _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI VOID NTAPI NdisMSetPeriodicTimer( _In_ PNDIS_MINIPORT_TIMER Timer, _In_ UINT MillisecondPeriod); _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI VOID NTAPI NdisMCancelTimer( _In_ PNDIS_MINIPORT_TIMER Timer, _Out_ _At_(*TimerCancelled, _Must_inspect_result_) PBOOLEAN TimerCancelled); #if !defined(NDIS_WRAPPER) /* * VOID * NdisMResetComplete( * IN NDIS_HANDLE MiniportAdapterHandle, * IN NDIS_STATUS Status, * IN BOOLEAN AddressingReset); */ #define NdisMResetComplete(MiniportAdapterHandle, \ Status, \ AddressingReset) \ { \ (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->ResetCompleteHandler)( \ MiniportAdapterHandle, Status, AddressingReset); \ } /* * VOID * NdisMSendComplete( * IN NDIS_HANDLE MiniportAdapterHandle, * IN PNDIS_PACKET Packet, * IN NDIS_STATUS Status); */ #define NdisMSendComplete(MiniportAdapterHandle, \ Packet, \ Status) \ { \ (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->SendCompleteHandler)( \ MiniportAdapterHandle, Packet, Status); \ } /* * VOID * NdisMSendResourcesAvailable( * IN NDIS_HANDLE MiniportAdapterHandle); */ #define NdisMSendResourcesAvailable(MiniportAdapterHandle) \ { \ (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->SendResourcesHandler)( \ MiniportAdapterHandle); \ } /* * VOID * NdisMTransferDataComplete( * IN NDIS_HANDLE MiniportAdapterHandle, * IN PNDIS_PACKET Packet, * IN NDIS_STATUS Status, * IN UINT BytesTransferred); */ #define NdisMTransferDataComplete(MiniportAdapterHandle, \ Packet, \ Status, \ BytesTransferred) \ { \ (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->TDCompleteHandler)( \ MiniportAdapterHandle, Packet, Status, BytesTransferred) \ } #endif /* !_NDIS_ */ /* * VOID * NdisMSetAttributes( * IN NDIS_HANDLE MiniportAdapterHandle, * IN NDIS_HANDLE MiniportAdapterContext, * IN BOOLEAN BusMaster, * IN NDIS_INTERFACE_TYPE AdapterType); */ #define NdisMSetAttributes(MiniportAdapterHandle, \ MiniportAdapterContext, \ BusMaster, \ AdapterType) \ NdisMSetAttributesEx(MiniportAdapterHandle, \ MiniportAdapterContext, \ 0, \ (BusMaster) ? NDIS_ATTRIBUTE_BUS_MASTER : 0, \ AdapterType) NDISAPI VOID NTAPI NdisMSetAttributesEx( IN NDIS_HANDLE MiniportAdapterHandle, IN NDIS_HANDLE MiniportAdapterContext, IN UINT CheckForHangTimeInSeconds OPTIONAL, IN ULONG AttributeFlags, IN NDIS_INTERFACE_TYPE AdapterType); /* * VOID * NdisMSetInformationComplete( * IN NDIS_HANDLE MiniportAdapterHandle, * IN NDIS_STATUS Status); */ #define NdisMSetInformationComplete(MiniportAdapterHandle, \ Status) \ (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->SetCompleteHandler)( \ MiniportAdapterHandle, Status) _IRQL_requires_max_(APC_LEVEL) NDISAPI VOID NTAPI NdisMSleep( _In_ ULONG MicrosecondsToSleep); /* * VOID * NdisMTrIndicateReceive( * IN NDIS_HANDLE MiniportAdapterHandle, * IN NDIS_HANDLE MiniportReceiveContext, * IN PVOID HeaderBuffer, * IN UINT HeaderBufferSize, * IN PVOID LookaheadBuffer, * IN UINT LookaheadBufferSize, * IN UINT PacketSize); */ #define NdisMTrIndicateReceive(MiniportAdapterHandle, \ MiniportReceiveContext, \ HeaderBuffer, \ HeaderBufferSize, \ LookaheadBuffer, \ LookaheadBufferSize, \ PacketSize) \ { \ (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->TrRxIndicateHandler)( \ (((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->TrDB), \ (MiniportReceiveContext), \ (HeaderBuffer), \ (HeaderBuffer), \ (HeaderBufferSize), \ (LookaheadBuffer), \ (LookaheadBufferSize), \ (PacketSize)); \ } /* * VOID * NdisMTrIndicateReceiveComplete( * IN NDIS_HANDLE MiniportAdapterHandle); */ #define NdisMTrIndicateReceiveComplete(MiniportAdapterHandle) \ { \ (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->TrRxCompleteHandler)( \ ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->TrDB); \ } _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI NDIS_STATUS NTAPI NdisMWriteLogData( _In_ NDIS_HANDLE LogHandle, _In_reads_bytes_(LogBufferSize) PVOID LogBuffer, _In_ UINT LogBufferSize); _IRQL_requires_(PASSIVE_LEVEL) NDISAPI VOID NTAPI NdisMQueryAdapterResources( _Out_ PNDIS_STATUS Status, _In_ NDIS_HANDLE WrapperConfigurationContext, _Out_ PNDIS_RESOURCE_LIST ResourceList, _Inout_ PUINT BufferSize); _IRQL_requires_(PASSIVE_LEVEL) NDISAPI VOID NTAPI NdisTerminateWrapper( _In_ NDIS_HANDLE NdisWrapperHandle, _In_opt_ PVOID SystemSpecific); _IRQL_requires_(PASSIVE_LEVEL) NDISAPI VOID NTAPI NdisMUnmapIoSpace( _In_ NDIS_HANDLE MiniportAdapterHandle, _In_reads_bytes_(Length) PVOID VirtualAddress, _In_ UINT Length); /* Event functions */ _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI VOID NTAPI NdisInitializeEvent( _Out_ PNDIS_EVENT Event); _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI VOID NTAPI NdisSetEvent( _In_ PNDIS_EVENT Event); _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI VOID NTAPI NdisResetEvent( _In_ PNDIS_EVENT Event); _When_(MsToWait != 0, _Check_return_) _IRQL_requires_(PASSIVE_LEVEL) NDISAPI BOOLEAN NTAPI NdisWaitEvent( _In_ PNDIS_EVENT Event, _In_ UINT MsToWait); /* NDIS intermediate miniport structures */ typedef VOID (NTAPI *W_MINIPORT_CALLBACK)( IN NDIS_HANDLE MiniportAdapterContext, IN PVOID CallbackContext); /* Routines for intermediate miniport drivers */ _IRQL_requires_(PASSIVE_LEVEL) NDISAPI NDIS_STATUS NTAPI NdisIMDeInitializeDeviceInstance( _In_ NDIS_HANDLE NdisMiniportHandle); /* * NDIS_STATUS * NdisIMInitializeDeviceInstance( * IN NDIS_HANDLE DriverHandle, * IN PNDIS_STRING DeviceInstance); */ #define NdisIMInitializeDeviceInstance(DriverHandle, DeviceInstance) \ NdisIMInitializeDeviceInstanceEx(DriverHandle, DeviceInstance, NULL) /* Functions obsoleted by NDIS 5.0 */ NDISAPI VOID NTAPI NdisFreeDmaChannel( IN PNDIS_HANDLE NdisDmaHandle); NDISAPI VOID NTAPI NdisSetupDmaTransfer( OUT PNDIS_STATUS Status, IN PNDIS_HANDLE NdisDmaHandle, IN PNDIS_BUFFER Buffer, IN ULONG Offset, IN ULONG Length, IN BOOLEAN WriteToDevice); /* NDISAPI NTSTATUS NTAPI NdisUpcaseUnicodeString( OUT PUNICODE_STRING DestinationString, IN PUNICODE_STRING SourceString); */ #define NdisUpcaseUnicodeString(_d, _s) RtlUpcaseUnicodeString(_d, _s, FALSE) /* Routines for NDIS protocol drivers */ #if NDIS_LEGACY_PROTOCOL NDISAPI NDIS_STATUS NTAPI NdisIMRegisterLayeredMiniport( _In_ NDIS_HANDLE NdisWrapperHandle, _In_ PNDIS_MINIPORT_CHARACTERISTICS MiniportCharacteristics, _In_ UINT CharacteristicsLength, _Out_ PNDIS_HANDLE DriverHandle); NDISAPI VOID NTAPI NdisTransferData( OUT PNDIS_STATUS Status, IN NDIS_HANDLE NdisBindingHandle, IN NDIS_HANDLE MacReceiveContext, IN UINT ByteOffset, IN UINT BytesToTransfer, IN OUT PNDIS_PACKET Packet, OUT PUINT BytesTransferred); NDISAPI VOID NTAPI NdisSend( OUT PNDIS_STATUS Status, IN NDIS_HANDLE NdisBindingHandle, IN PNDIS_PACKET Packet); NDISAPI VOID NTAPI NdisSendPackets( IN NDIS_HANDLE NdisBindingHandle, IN PPNDIS_PACKET PacketArray, IN UINT NumberOfPackets); _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI VOID NTAPI NdisRequest( _Out_ PNDIS_STATUS Status, _In_ NDIS_HANDLE NdisBindingHandle, _In_ PNDIS_REQUEST NdisRequest); _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI VOID NTAPI NdisReset( _Out_ PNDIS_STATUS Status, _In_ NDIS_HANDLE NdisBindingHandle); _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI VOID NTAPI NdisDeregisterProtocol( _Out_ PNDIS_STATUS Status, _In_ NDIS_HANDLE NdisProtocolHandle); _IRQL_requires_(PASSIVE_LEVEL) NDISAPI VOID NTAPI NdisOpenAdapter( _At_(*Status, _Must_inspect_result_) _Out_ PNDIS_STATUS Status, _Out_ PNDIS_STATUS OpenErrorStatus, _Out_ PNDIS_HANDLE NdisBindingHandle, _Out_ PUINT SelectedMediumIndex, _In_reads_(MediumArraySize) PNDIS_MEDIUM MediumArray, _In_ UINT MediumArraySize, _In_ NDIS_HANDLE NdisProtocolHandle, _In_ NDIS_HANDLE ProtocolBindingContext, _In_ PNDIS_STRING AdapterName, _In_ UINT OpenOptions, _In_opt_ PSTRING AddressingInformation); _IRQL_requires_(PASSIVE_LEVEL) NDISAPI VOID NTAPI NdisCloseAdapter( _Out_ PNDIS_STATUS Status, _In_ NDIS_HANDLE NdisBindingHandle); _IRQL_requires_(PASSIVE_LEVEL) NDISAPI VOID NTAPI NdisCompleteBindAdapter( _In_ NDIS_HANDLE BindAdapterContext, _In_ NDIS_STATUS Status, _In_ NDIS_STATUS OpenStatus); _IRQL_requires_(PASSIVE_LEVEL) NDISAPI VOID NTAPI NdisCompleteUnbindAdapter( _In_ NDIS_HANDLE UnbindAdapterContext, _In_ NDIS_STATUS Status); NDISAPI VOID NTAPI NdisSetProtocolFilter( _At_(*Status, _Must_inspect_result_) _Out_ PNDIS_STATUS Status, _In_ NDIS_HANDLE NdisBindingHandle, _In_ RECEIVE_HANDLER ReceiveHandler, _In_ RECEIVE_PACKET_HANDLER ReceivePacketHandler, _In_ NDIS_MEDIUM Medium, _In_ UINT Offset, _In_ UINT Size, _In_ PUCHAR Pattern); _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI VOID NTAPI NdisGetDriverHandle( _In_ PNDIS_HANDLE NdisBindingHandle, _Out_ PNDIS_HANDLE NdisDriverHandle); _IRQL_requires_(PASSIVE_LEVEL) NDISAPI VOID NTAPI NdisOpenProtocolConfiguration( _Out_ PNDIS_STATUS Status, _Out_ PNDIS_HANDLE ConfigurationHandle, _In_ PNDIS_STRING ProtocolSection); _IRQL_requires_(PASSIVE_LEVEL) NDISAPI VOID NTAPI NdisCompletePnPEvent( _In_ NDIS_STATUS Status, _In_ NDIS_HANDLE NdisBindingHandle, _In_ PNET_PNP_EVENT NetPnPEvent); /* * VOID * NdisSetSendFlags( * IN PNDIS_PACKET Packet, * IN UINT Flags); */ #define NdisSetSendFlags(_Packet,_Flags)(_Packet)->Private.Flags = (_Flags) #define NdisQuerySendFlags(_Packet,_Flags) *(_Flags) = (_Packet)->Private.Flags _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI VOID NTAPI NdisReturnPackets( _In_reads_(NumberOfPackets) PNDIS_PACKET *PacketsToReturn, _In_ UINT NumberOfPackets); _Must_inspect_result_ _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI PNDIS_PACKET NTAPI NdisGetReceivedPacket( _In_ PNDIS_HANDLE NdisBindingHandle, _In_ PNDIS_HANDLE MacContext); _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI VOID NTAPI NdisCancelSendPackets( _In_ NDIS_HANDLE NdisBindingHandle, _In_ _Points_to_data_ PVOID CancelId); _Must_inspect_result_ _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI NDIS_STATUS NTAPI NdisQueryPendingIOCount( _In_ _Points_to_data_ PVOID NdisBindingHandle, _Out_ PULONG IoCount); _IRQL_requires_(PASSIVE_LEVEL) NDISAPI VOID NTAPI NdisRegisterProtocol( _Out_ PNDIS_STATUS Status, _Out_ PNDIS_HANDLE NdisProtocolHandle, _In_ PNDIS_PROTOCOL_CHARACTERISTICS ProtocolCharacteristics, _In_ UINT CharacteristicsLength); #endif /* NDIS_LEGACY_PROTOCOL */ _IRQL_requires_max_(DISPATCH_LEVEL) NDISAPI UCHAR NTAPI NdisGeneratePartialCancelId(VOID); _IRQL_requires_(PASSIVE_LEVEL) NDISAPI VOID NTAPI NdisReEnumerateProtocolBindings( _In_ NDIS_HANDLE NdisProtocolHandle); NDISAPI VOID NTAPI NdisRegisterTdiCallBack( _In_ TDI_REGISTER_CALLBACK RegisterCallback, _In_ TDI_PNP_HANDLER PnPHandler); NDISAPI VOID NTAPI NdisDeregisterTdiCallBack(VOID); /* Obsoleted in Windows XP */ /* Prototypes for NDIS_MAC_CHARACTERISTICS */ typedef NDIS_STATUS (*OPEN_ADAPTER_HANDLER)( OUT PNDIS_STATUS OpenErrorStatus, OUT NDIS_HANDLE *MacBindingHandle, OUT PUINT SelectedMediumIndex, IN PNDIS_MEDIUM MediumArray, IN UINT MediumArraySize, IN NDIS_HANDLE NdisBindingContext, IN NDIS_HANDLE MacAdapterContext, IN UINT OpenOptions, IN PSTRING AddressingInformation OPTIONAL); typedef NDIS_STATUS (NTAPI *CLOSE_ADAPTER_HANDLER)( IN NDIS_HANDLE MacBindingHandle); typedef NDIS_STATUS (NTAPI *WAN_TRANSFER_DATA_HANDLER)( VOID); typedef NDIS_STATUS (NTAPI *QUERY_GLOBAL_STATISTICS_HANDLER)( IN NDIS_HANDLE MacAdapterContext, IN PNDIS_REQUEST NdisRequest); typedef VOID (NTAPI *UNLOAD_MAC_HANDLER)( IN NDIS_HANDLE MacMacContext); typedef NDIS_STATUS (NTAPI *ADD_ADAPTER_HANDLER)( IN NDIS_HANDLE MacMacContext, IN NDIS_HANDLE WrapperConfigurationContext, IN PNDIS_STRING AdapterName); typedef VOID (*REMOVE_ADAPTER_HANDLER)( IN NDIS_HANDLE MacAdapterContext); typedef struct _NDIS_MAC_CHARACTERISTICS { UCHAR MajorNdisVersion; UCHAR MinorNdisVersion; USHORT Filler; UINT Reserved; OPEN_ADAPTER_HANDLER OpenAdapterHandler; CLOSE_ADAPTER_HANDLER CloseAdapterHandler; SEND_HANDLER SendHandler; TRANSFER_DATA_HANDLER TransferDataHandler; RESET_HANDLER ResetHandler; REQUEST_HANDLER RequestHandler; QUERY_GLOBAL_STATISTICS_HANDLER QueryGlobalStatisticsHandler; UNLOAD_MAC_HANDLER UnloadMacHandler; ADD_ADAPTER_HANDLER AddAdapterHandler; REMOVE_ADAPTER_HANDLER RemoveAdapterHandler; NDIS_STRING Name; } NDIS_MAC_CHARACTERISTICS, *PNDIS_MAC_CHARACTERISTICS; typedef NDIS_MAC_CHARACTERISTICS NDIS_WAN_MAC_CHARACTERISTICS; typedef NDIS_WAN_MAC_CHARACTERISTICS *PNDIS_WAN_MAC_CHARACTERISTICS; #ifdef __cplusplus } #endif #endif /* _NDIS_ */ /* EOF */