reactos/sdk/include/ddk/ndis.h
Stanislav Motylkov 63ad8a71c0 [IPHLPAPI] Fix IcmpSendEcho output when host is not reachable
- Add missing error code to DDK/NDIS
- Fix error code in IP driver
- Patch MSAFD to reply correct WSA error code
- Fix IcmpSendEcho function
  - Fix returning error code in ICMP_ECHO_REPLY (see MSDN)
  - Fix returning host address (using GetBestInterface and GetIpAddrTable functions)
- Fix GetBestRoute function (it is used by GetBestInterface)

Relates to #318 and CORE-14241
2018-01-31 17:28:21 +00:00

6210 lines
169 KiB
C

/*
* ndis.h
*
* Network Device Interface Specification definitions
*
* This file is part of the ReactOS DDK package.
*
* Contributors:
* Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAIMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
* DEFINES: i386 - Target platform is i386
* NDIS_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 <qos.h>
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;
#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 <xfilter.h>
#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 */