ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

ndis.h
Go to the documentation of this file.
00001 /*
00002  * ndis.h
00003  *
00004  * Network Device Interface Specification definitions
00005  *
00006  * This file is part of the ReactOS DDK package.
00007  *
00008  * Contributors:
00009  *   Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
00010  *
00011  * THIS SOFTWARE IS NOT COPYRIGHTED
00012  *
00013  * This source code is offered for use in the public domain. You may
00014  * use, modify or distribute it freely.
00015  *
00016  * This code is distributed in the hope that it will be useful but
00017  * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
00018  * DISCLAIMED. This includes but is not limited to warranties of
00019  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
00020  *
00021  * DEFINES: i386                 - Target platform is i386
00022  *          NDIS_WRAPPER         - Define only for NDIS library
00023  *          NDIS_MINIPORT_DRIVER - Define only for NDIS miniport drivers
00024  *          NDIS40               - Use NDIS 4.0 structures by default
00025  *          NDIS50               - Use NDIS 5.0 structures by default
00026  *          NDIS51               - Use NDIS 5.1 structures by default
00027  *          NDIS40_MINIPORT      - Building NDIS 4.0 miniport driver
00028  *          NDIS50_MINIPORT      - Building NDIS 5.0 miniport driver
00029  *          NDIS51_MINIPORT      - Building NDIS 5.1 miniport driver
00030  */
00031 
00032 #ifndef _NDIS_
00033 #define _NDIS_
00034 
00035 #ifndef NDIS_WDM
00036 #define NDIS_WDM 0
00037 #endif
00038 
00039 #include "ntddk.h"
00040 #include "netpnp.h"
00041 #include "ntstatus.h"
00042 #include "netevent.h"
00043 #include <qos.h>
00044 
00045 typedef _Return_type_success_(return >= 0) int NDIS_STATUS, *PNDIS_STATUS;
00046 
00047 #include "ntddndis.h"
00048 
00049 #if !defined(_WINDEF_H)
00050 typedef unsigned int UINT, *PUINT;
00051 #endif
00052 
00053 #ifdef __cplusplus
00054 extern "C" {
00055 #endif
00056 
00057 __drv_Mode_impl(NDIS_INCLUDED)
00058 
00059 #ifndef __NET_PNP__
00060 #define __NET_PNP__
00061 
00062 typedef enum _NET_DEVICE_POWER_STATE {
00063   NetDeviceStateUnspecified = 0,
00064   NetDeviceStateD0,
00065   NetDeviceStateD1,
00066   NetDeviceStateD2,
00067   NetDeviceStateD3,
00068   NetDeviceStateMaximum
00069 } NET_DEVICE_POWER_STATE, *PNET_DEVICE_POWER_STATE;
00070 
00071 typedef enum _NET_PNP_EVENT_CODE {
00072   NetEventSetPower,
00073   NetEventQueryPower,
00074   NetEventQueryRemoveDevice,
00075   NetEventCancelRemoveDevice,
00076   NetEventReconfigure,
00077   NetEventBindList,
00078   NetEventBindsComplete,
00079   NetEventPnPCapabilities,
00080   NetEventPause,
00081   NetEventRestart,
00082   NetEventPortActivation,
00083   NetEventPortDeactivation,
00084   NetEventIMReEnableDevice,
00085   NetEventMaximum
00086 } NET_PNP_EVENT_CODE, *PNET_PNP_EVENT_CODE;
00087 
00088 typedef struct _NET_PNP_EVENT {
00089   NET_PNP_EVENT_CODE NetEvent;
00090   PVOID Buffer;
00091   ULONG BufferLength;
00092   ULONG_PTR NdisReserved[4];
00093   ULONG_PTR TransportReserved[4];
00094   ULONG_PTR TdiReserved[4];
00095   ULONG_PTR TdiClientReserved[4];
00096 } NET_PNP_EVENT, *PNET_PNP_EVENT;
00097 
00098 #endif /* __NET_PNP__ */
00099 
00100 #if !defined(NDIS_WRAPPER)
00101 
00102 #if (defined(NDIS_MINIPORT_MAJOR_VERSION) ||  \
00103     (defined(NDIS_MINIPORT_MINOR_VERSION)) || \
00104     (defined(NDIS_PROTOCOL_MAJOR_VERSION)) || \
00105     (defined(NDIS_PROTOCOL_MINOR_VERSION)) || \
00106     (defined(NDIS_FILTER_MAJOR_VERSION)) ||   \
00107     (defined(NDIS_FILTER_MINOR_VERSION)))
00108 #error "Driver should not redefine NDIS reserved macros"
00109 #endif
00110 
00111 #if defined(NDIS_MINIPORT_DRIVER)
00112 
00113 #if defined(NDIS620_MINIPORT)
00114 #define NDIS_MINIPORT_MAJOR_VERSION 6
00115 #define NDIS_MINIPORT_MINOR_VERSION 20
00116 #elif defined(NDIS61_MINIPORT)
00117 #define NDIS_MINIPORT_MAJOR_VERSION 6
00118 #define NDIS_MINIPORT_MINOR_VERSION 1
00119 #elif defined(NDIS60_MINIPORT)
00120 #define NDIS_MINIPORT_MAJOR_VERSION 6
00121 #define NDIS_MINIPORT_MINOR_VERSION 0
00122 #elif defined(NDIS51_MINIPORT)
00123 #define NDIS_MINIPORT_MAJOR_VERSION 5
00124 #define NDIS_MINIPORT_MINOR_VERSION 1
00125 #elif defined(NDIS50_MINIPORT)
00126 #define NDIS_MINIPORT_MAJOR_VERSION 5
00127 #define NDIS_MINIPORT_MINOR_VERSION 0
00128 #else
00129 #error "Only NDIS miniport drivers with version >= 5 are supported"
00130 #endif
00131 
00132 #if ((NDIS_MINIPORT_MAJOR_VERSION == 6) &&    \
00133        (NDIS_MINIPORT_MINOR_VERSION != 20) && \
00134        (NDIS_MINIPORT_MINOR_VERSION != 1) &&  \
00135        (NDIS_MINIPORT_MINOR_VERSION != 0))
00136 #error "Invalid miniport major/minor version combination"
00137 #elif ((NDIS_MINIPORT_MAJOR_VERSION == 5) &&  \
00138        (NDIS_MINIPORT_MINOR_VERSION != 1) &&  \
00139        (NDIS_MINIPORT_MINOR_VERSION != 0))
00140 #error "Invalid miniport major/minor version combination"
00141 #endif
00142 
00143 #if  (NDIS_MINIPORT_MAJOR_VERSION == 6) && \
00144      ((NDIS_MINIPORT_MINOR_VERSION == 20 && NTDDI_VERSION < NTDDI_WIN7)  || \
00145       (NDIS_MINIPORT_MINOR_VERSION == 1 && NTDDI_VERSION < NTDDI_VISTA) || \
00146       (NDIS_MINIPORT_MINOR_VERSION == 0 && NTDDI_VERSION < NTDDI_VISTA))
00147 #error "Wrong NDIS/DDI version"
00148 #elif ((NDIS_MINIPORT_MAJOR_VERSION == 5) && \
00149        (((NDIS_MINIPORT_MINOR_VERSION == 1) && (NTDDI_VERSION < NTDDI_WINXP)) || \
00150          ((NDIS_MINIPORT_MINOR_VERSION == 0) && (NTDDI_VERSION < NTDDI_WIN2K))))
00151 #error "Wrong NDIS/DDI version"
00152 #endif
00153 
00154 
00155 #endif /* defined(NDIS_MINIPORT_DRIVER) */
00156 
00157 #if defined(NDIS30)
00158 #error "Only NDIS Protocol drivers version 4 or later are supported"
00159 #endif
00160 
00161 #if defined(NDIS620)
00162 #define NDIS_PROTOCOL_MAJOR_VERSION 6
00163 #define NDIS_PROTOCOL_MINOR_VERSION 20
00164 #define NDIS_FILTER_MAJOR_VERSION 6
00165 #define NDIS_FILTER_MINOR_VERSION 20
00166 #elif defined(NDIS61)
00167 #define NDIS_PROTOCOL_MAJOR_VERSION 6
00168 #define NDIS_PROTOCOL_MINOR_VERSION 1
00169 #define NDIS_FILTER_MAJOR_VERSION 6
00170 #define NDIS_FILTER_MINOR_VERSION 1
00171 #elif defined(NDIS60)
00172 #define NDIS_PROTOCOL_MAJOR_VERSION 6
00173 #define NDIS_PROTOCOL_MINOR_VERSION 0
00174 #define NDIS_FILTER_MAJOR_VERSION 6
00175 #define NDIS_FILTER_MINOR_VERSION 0
00176 #elif defined(NDIS51)
00177 #define NDIS_PROTOCOL_MAJOR_VERSION 5
00178 #define NDIS_PROTOCOL_MINOR_VERSION 1
00179 #elif defined(NDIS50)
00180 #define NDIS_PROTOCOL_MAJOR_VERSION 5
00181 #define NDIS_PROTOCOL_MINOR_VERSION 0
00182 #elif defined(NDIS40)
00183 #define NDIS_PROTOCOL_MAJOR_VERSION 4
00184 #define NDIS_PROTOCOL_MINOR_VERSION 0
00185 #endif
00186 
00187 #if !defined(NDIS_MINIPORT_DRIVER) && !defined(NDIS_PROTOCOL_MAJOR_VERSION)
00188 #define NDIS40
00189 #define NDIS_PROTOCOL_MAJOR_VERSION 4
00190 #define NDIS_PROTOCOL_MINOR_VERSION 0
00191 #endif
00192 
00193 #if defined(NDIS_FILTER_MAJOR_VERSION)
00194 
00195 #if ((NDIS_FILTER_MAJOR_VERSION == 6) &&  \
00196      (NDIS_FILTER_MINOR_VERSION != 20) && \
00197      (NDIS_FILTER_MINOR_VERSION != 1) &&  \
00198      (NDIS_FILTER_MINOR_VERSION != 0))
00199 #error "Invalid Filter version"
00200 #endif
00201 
00202 #endif /* defined(NDIS_FILTER_MAJOR_VERSION) */
00203 
00204 
00205 #if defined(NDIS_PROTOCOL_MAJOR_VERSION)
00206 
00207 #if ((NDIS_PROTOCOL_MAJOR_VERSION == 6) &&  \
00208      (NDIS_PROTOCOL_MINOR_VERSION != 20) && \
00209      (NDIS_PROTOCOL_MINOR_VERSION != 1) &&  \
00210      (NDIS_PROTOCOL_MINOR_VERSION != 0))
00211 #error "Invalid Protocol version"
00212 #elif ((NDIS_PROTOCOL_MAJOR_VERSION == 5) && \
00213      (NDIS_PROTOCOL_MINOR_VERSION != 1) && (NDIS_PROTOCOL_MINOR_VERSION != 0))
00214 #error "Invalid Protocol version"
00215 #elif ((NDIS_PROTOCOL_MAJOR_VERSION == 4) && (NDIS_PROTOCOL_MINOR_VERSION != 0))
00216 #error "Invalid Protocol major/minor version"
00217 #endif
00218 
00219 #if ((NDIS_PROTOCOL_MAJOR_VERSION == 6) && (NTDDI_VERSION < NTDDI_VISTA))
00220 #error "Wrong NDIS/DDI version"
00221 #endif
00222 
00223 #endif /* defined(NDIS_PROTOCOL_MAJOR_VERSION) */
00224 
00225 #endif /* !defined(NDIS_WRAPPER) */
00226 
00227 #if !defined(NDIS_LEGACY_MINIPORT)
00228 
00229 #if ((defined(NDIS_MINIPORT_DRIVER) && (NDIS_MINIPORT_MAJOR_VERSION < 6)) || NDIS_WRAPPER)
00230 #define NDIS_LEGACY_MINIPORT    1
00231 #else
00232 #define NDIS_LEGACY_MINIPORT    0
00233 #endif
00234 
00235 #endif /* !defined(NDIS_LEGACY_MINIPORT) */
00236 
00237 #if !defined(NDIS_LEGACY_PROTOCOL)
00238 
00239 #if ((defined(NDIS_PROTOCOL_MAJOR_VERSION) && (NDIS_PROTOCOL_MAJOR_VERSION < 6)) || NDIS_WRAPPER)
00240 #define NDIS_LEGACY_PROTOCOL    1
00241 #else
00242 #define NDIS_LEGACY_PROTOCOL    0
00243 #endif
00244 
00245 #endif /* !defined(NDIS_LEGACY_PROTOCOL) */
00246 
00247 #if !defined(NDIS_LEGACY_DRIVER)
00248 
00249 #if (NDIS_LEGACY_MINIPORT || NDIS_LEGACY_PROTOCOL || NDIS_WRAPPER)
00250 #define NDIS_LEGACY_DRIVER      1
00251 #else
00252 #define NDIS_LEGACY_DRIVER      0
00253 #endif
00254 
00255 #endif /* !defined(NDIS_LEGACY_DRIVER) */
00256 
00257 #if !defined(NDIS_SUPPORT_NDIS6)
00258 
00259 #if ((defined (NDIS_MINIPORT_MAJOR_VERSION) && (NDIS_MINIPORT_MAJOR_VERSION >= 6)) || \
00260      (defined (NDIS60)) || NDIS_WRAPPER)
00261 #define NDIS_SUPPORT_NDIS6      1
00262 #else
00263 #define NDIS_SUPPORT_NDIS6      0
00264 #endif
00265 
00266 #endif /* !defined(NDIS_SUPPORT_NDIS6) */
00267 
00268 #if !defined(NDIS_SUPPORT_NDIS61)
00269 #if  (((defined (NDIS_MINIPORT_MAJOR_VERSION) && (NDIS_MINIPORT_MAJOR_VERSION >= 6)) && \
00270        (defined (NDIS_MINIPORT_MINOR_VERSION) && (NDIS_MINIPORT_MINOR_VERSION >= 1))) || \
00271       (defined (NDIS61)) || NDIS_WRAPPER)
00272 #define NDIS_SUPPORT_NDIS61      1
00273 #else
00274 #define NDIS_SUPPORT_NDIS61      0
00275 #endif
00276 #endif /* !defined(NDIS_SUPPORT_NDIS61) */
00277 
00278 #if !defined(NDIS_SUPPORT_NDIS620)
00279 
00280 #if  (((defined (NDIS_MINIPORT_MAJOR_VERSION) && (NDIS_MINIPORT_MAJOR_VERSION >= 6)) && \
00281        (defined (NDIS_MINIPORT_MINOR_VERSION) && (NDIS_MINIPORT_MINOR_VERSION >= 20))) || \
00282       (defined (NDIS620)) || NDIS_WRAPPER)
00283 #define NDIS_SUPPORT_NDIS620      1
00284 #else
00285 #define NDIS_SUPPORT_NDIS620      0
00286 #endif
00287 
00288 #endif /* !defined(NDIS_SUPPORT_NDIS620) */
00289 
00290 #if (NDIS_SUPPORT_NDIS620)
00291 #undef NDIS_SUPPORT_NDIS61
00292 #define NDIS_SUPPORT_NDIS61 1
00293 #endif
00294 
00295 #if (NDIS_SUPPORT_NDIS61)
00296 #undef NDIS_SUPPORT_NDIS6
00297 #define NDIS_SUPPORT_NDIS6 1
00298 #endif
00299 
00300 #if defined(NDIS61_MINIPORT) || defined(NDIS60_MINIPORT) || defined(NDIS61) || \
00301     defined(NDIS60) || defined(NDIS_WRAPPER) || defined(NDIS_LEGACY_DRIVER)
00302 #define NDIS_SUPPORT_60_COMPATIBLE_API      1
00303 #else
00304 #define NDIS_SUPPORT_60_COMPATIBLE_API      0
00305 #endif
00306 
00307 #if defined(NDIS_WRAPPER)
00308 #define NDISAPI
00309 #else
00310 #define NDISAPI DECLSPEC_IMPORT
00311 #endif
00312 
00313 typedef PVOID QUEUED_CLOSE; //FIXME : Doesn't exist in public headers
00314 
00315 typedef struct _X_FILTER FDDI_FILTER, *PFDDI_FILTER;
00316 typedef struct _X_FILTER TR_FILTER, *PTR_FILTER;
00317 typedef struct _X_FILTER NULL_FILTER, *PNULL_FILTER;
00318 
00319 typedef struct _NDIS_MINIPORT_BLOCK NDIS_MINIPORT_BLOCK, *PNDIS_MINIPORT_BLOCK;
00320 
00321 typedef struct _REFERENCE {
00322   KSPIN_LOCK SpinLock;
00323   USHORT ReferenceCount;
00324   BOOLEAN Closing;
00325 } REFERENCE, *PREFERENCE;
00326 
00327 /* NDIS base types */
00328 
00329 typedef struct _NDIS_SPIN_LOCK {
00330   KSPIN_LOCK SpinLock;
00331   KIRQL OldIrql;
00332 } NDIS_SPIN_LOCK, *PNDIS_SPIN_LOCK;
00333 
00334 typedef struct _NDIS_EVENT {
00335   KEVENT Event;
00336 } NDIS_EVENT, *PNDIS_EVENT;
00337 
00338 typedef PVOID NDIS_HANDLE, *PNDIS_HANDLE;
00339 
00340 typedef ANSI_STRING NDIS_ANSI_STRING, *PNDIS_ANSI_STRING;
00341 typedef UNICODE_STRING NDIS_STRING, *PNDIS_STRING;
00342 
00343 typedef MDL NDIS_BUFFER, *PNDIS_BUFFER;
00344 
00345 /* NDIS_STATUS constants */
00346 #define NDIS_STATUS_SUCCESS                     ((NDIS_STATUS)STATUS_SUCCESS)
00347 #define NDIS_STATUS_PENDING                     ((NDIS_STATUS)STATUS_PENDING)
00348 #define NDIS_STATUS_NOT_RECOGNIZED              ((NDIS_STATUS)0x00010001L)
00349 #define NDIS_STATUS_NOT_COPIED                  ((NDIS_STATUS)0x00010002L)
00350 #define NDIS_STATUS_NOT_ACCEPTED                ((NDIS_STATUS)0x00010003L)
00351 #define NDIS_STATUS_CALL_ACTIVE                 ((NDIS_STATUS)0x00010007L)
00352 #define NDIS_STATUS_INDICATION_REQUIRED         ((NDIS_STATUS)STATUS_NDIS_INDICATION_REQUIRED)
00353 #define NDIS_STATUS_ONLINE                      ((NDIS_STATUS)0x40010003L)
00354 #define NDIS_STATUS_RESET_START                 ((NDIS_STATUS)0x40010004L)
00355 #define NDIS_STATUS_RESET_END                   ((NDIS_STATUS)0x40010005L)
00356 #define NDIS_STATUS_RING_STATUS                 ((NDIS_STATUS)0x40010006L)
00357 #define NDIS_STATUS_CLOSED                      ((NDIS_STATUS)0x40010007L)
00358 #define NDIS_STATUS_WAN_LINE_UP                 ((NDIS_STATUS)0x40010008L)
00359 #define NDIS_STATUS_WAN_LINE_DOWN               ((NDIS_STATUS)0x40010009L)
00360 #define NDIS_STATUS_WAN_FRAGMENT                ((NDIS_STATUS)0x4001000AL)
00361 #define NDIS_STATUS_MEDIA_CONNECT               ((NDIS_STATUS)0x4001000BL)
00362 #define NDIS_STATUS_MEDIA_DISCONNECT            ((NDIS_STATUS)0x4001000CL)
00363 #define NDIS_STATUS_HARDWARE_LINE_UP            ((NDIS_STATUS)0x4001000DL)
00364 #define NDIS_STATUS_HARDWARE_LINE_DOWN          ((NDIS_STATUS)0x4001000EL)
00365 #define NDIS_STATUS_INTERFACE_UP                ((NDIS_STATUS)0x4001000FL)
00366 #define NDIS_STATUS_INTERFACE_DOWN              ((NDIS_STATUS)0x40010010L)
00367 #define NDIS_STATUS_MEDIA_BUSY                  ((NDIS_STATUS)0x40010011L)
00368 #define NDIS_STATUS_MEDIA_SPECIFIC_INDICATION   ((NDIS_STATUS)0x40010012L)
00369 #define NDIS_STATUS_WW_INDICATION               NDIS_STATUS_MEDIA_SPECIFIC_INDICATION
00370 #define NDIS_STATUS_LINK_SPEED_CHANGE           ((NDIS_STATUS)0x40010013L)
00371 #define NDIS_STATUS_WAN_GET_STATS               ((NDIS_STATUS)0x40010014L)
00372 #define NDIS_STATUS_WAN_CO_FRAGMENT             ((NDIS_STATUS)0x40010015L)
00373 #define NDIS_STATUS_WAN_CO_LINKPARAMS           ((NDIS_STATUS)0x40010016L)
00374 #if NDIS_SUPPORT_NDIS6
00375 #define NDIS_STATUS_LINK_STATE                  ((NDIS_STATUS)0x40010017L)
00376 #define NDIS_STATUS_NETWORK_CHANGE              ((NDIS_STATUS)0x40010018L)
00377 #define NDIS_STATUS_MEDIA_SPECIFIC_INDICATION_EX ((NDIS_STATUS)0x40010019L)
00378 #define NDIS_STATUS_PORT_STATE                  ((NDIS_STATUS)0x40010022L)
00379 #define NDIS_STATUS_OPER_STATUS                 ((NDIS_STATUS)0x40010023L)
00380 #define NDIS_STATUS_PACKET_FILTER               ((NDIS_STATUS)0x40010024L)
00381 #endif /* NDIS_SUPPORT_NDIS6 */
00382 #define NDIS_STATUS_WAN_CO_MTULINKPARAMS        ((NDIS_STATUS)0x40010025L)
00383 
00384 #if NDIS_SUPPORT_NDIS6
00385 
00386 #define NDIS_STATUS_IP_OPER_STATUS              ((NDIS_STATUS)0x40010026L)
00387 
00388 #define NDIS_STATUS_OFFLOAD_PAUSE               ((NDIS_STATUS)0x40020001L)
00389 #define NDIS_STATUS_UPLOAD_ALL                  ((NDIS_STATUS)0x40020002L)
00390 #define NDIS_STATUS_OFFLOAD_RESUME              ((NDIS_STATUS)0x40020003L)
00391 #define NDIS_STATUS_OFFLOAD_PARTIAL_SUCCESS     ((NDIS_STATUS)0x40020004L)
00392 #define NDIS_STATUS_OFFLOAD_STATE_INVALID       ((NDIS_STATUS)0x40020005L)
00393 #define NDIS_STATUS_TASK_OFFLOAD_CURRENT_CONFIG ((NDIS_STATUS)0x40020006L)
00394 #define NDIS_STATUS_TASK_OFFLOAD_HARDWARE_CAPABILITIES ((NDIS_STATUS)0x40020007L)
00395 #define NDIS_STATUS_OFFLOAD_ENCASPULATION_CHANGE ((NDIS_STATUS)0x40020008L)
00396 #define NDIS_STATUS_TCP_CONNECTION_OFFLOAD_HARDWARE_CAPABILITIES ((NDIS_STATUS)0x4002000BL)
00397 
00398 #if (NDIS_SUPPORT_NDIS61)
00399 #define NDIS_STATUS_HD_SPLIT_CURRENT_CONFIG     ((NDIS_STATUS)0x4002000CL)
00400 #endif
00401 
00402 #if (NDIS_SUPPORT_NDIS620)
00403 #define NDIS_STATUS_RECEIVE_QUEUE_STATE         ((NDIS_STATUS)0x4002000DL)
00404 #endif
00405 
00406 #define NDIS_STATUS_OFFLOAD_IM_RESERVED1        ((NDIS_STATUS)0x40020100L)
00407 #define NDIS_STATUS_OFFLOAD_IM_RESERVED2        ((NDIS_STATUS)0x40020101L)
00408 #define NDIS_STATUS_OFFLOAD_IM_RESERVED3        ((NDIS_STATUS)0x40020102L)
00409 
00410 #define NDIS_STATUS_DOT11_SCAN_CONFIRM          ((NDIS_STATUS)0x40030000L)
00411 #define NDIS_STATUS_DOT11_MPDU_MAX_LENGTH_CHANGED ((NDIS_STATUS)0x40030001L)
00412 #define NDIS_STATUS_DOT11_ASSOCIATION_START     ((NDIS_STATUS)0x40030002L)
00413 #define NDIS_STATUS_DOT11_ASSOCIATION_COMPLETION ((NDIS_STATUS)0x40030003L)
00414 #define NDIS_STATUS_DOT11_CONNECTION_START      ((NDIS_STATUS)0x40030004L)
00415 #define NDIS_STATUS_DOT11_CONNECTION_COMPLETION ((NDIS_STATUS)0x40030005L)
00416 #define NDIS_STATUS_DOT11_ROAMING_START         ((NDIS_STATUS)0x40030006L)
00417 #define NDIS_STATUS_DOT11_ROAMING_COMPLETION    ((NDIS_STATUS)0x40030007L)
00418 #define NDIS_STATUS_DOT11_DISASSOCIATION        ((NDIS_STATUS)0x40030008L)
00419 #define NDIS_STATUS_DOT11_TKIPMIC_FAILURE       ((NDIS_STATUS)0x40030009L)
00420 #define NDIS_STATUS_DOT11_PMKID_CANDIDATE_LIST  ((NDIS_STATUS)0x4003000AL)
00421 #define NDIS_STATUS_DOT11_PHY_STATE_CHANGED     ((NDIS_STATUS)0x4003000BL)
00422 #define NDIS_STATUS_DOT11_LINK_QUALITY          ((NDIS_STATUS)0x4003000CL)
00423 #define NDIS_STATUS_DOT11_INCOMING_ASSOC_STARTED ((NDIS_STATUS)0x4003000DL)
00424 #define NDIS_STATUS_DOT11_INCOMING_ASSOC_REQUEST_RECEIVED ((NDIS_STATUS)0x4003000EL)
00425 #define NDIS_STATUS_DOT11_INCOMING_ASSOC_COMPLETION ((NDIS_STATUS)0x4003000FL)
00426 #define NDIS_STATUS_DOT11_STOP_AP               ((NDIS_STATUS)0x40030010L)
00427 #define NDIS_STATUS_DOT11_PHY_FREQUENCY_ADOPTED ((NDIS_STATUS)0x40030011L)
00428 #define NDIS_STATUS_DOT11_CAN_SUSTAIN_AP        ((NDIS_STATUS)0x40030012L)
00429 
00430 #define NDIS_STATUS_WWAN_DEVICE_CAPS            ((NDIS_STATUS)0x40041000)
00431 #define NDIS_STATUS_WWAN_READY_INFO             ((NDIS_STATUS)0x40041001)
00432 #define NDIS_STATUS_WWAN_RADIO_STATE            ((NDIS_STATUS)0x40041002)
00433 #define NDIS_STATUS_WWAN_PIN_INFO               ((NDIS_STATUS)0x40041003)
00434 #define NDIS_STATUS_WWAN_PIN_LIST               ((NDIS_STATUS)0x40041004)
00435 #define NDIS_STATUS_WWAN_HOME_PROVIDER          ((NDIS_STATUS)0x40041005)
00436 #define NDIS_STATUS_WWAN_PREFERRED_PROVIDERS    ((NDIS_STATUS)0x40041006)
00437 #define NDIS_STATUS_WWAN_VISIBLE_PROVIDERS      ((NDIS_STATUS)0x40041007)
00438 #define NDIS_STATUS_WWAN_REGISTER_STATE         ((NDIS_STATUS)0x40041008)
00439 #define NDIS_STATUS_WWAN_PACKET_SERVICE         ((NDIS_STATUS)0x40041009)
00440 #define NDIS_STATUS_WWAN_SIGNAL_STATE           ((NDIS_STATUS)0x4004100a)
00441 #define NDIS_STATUS_WWAN_CONTEXT_STATE          ((NDIS_STATUS)0x4004100b)
00442 #define NDIS_STATUS_WWAN_PROVISIONED_CONTEXTS   ((NDIS_STATUS)0x4004100c)
00443 #define NDIS_STATUS_WWAN_SERVICE_ACTIVATION     ((NDIS_STATUS)0x4004100d)
00444 #define NDIS_STATUS_WWAN_SMS_CONFIGURATION      ((NDIS_STATUS)0x4004100e)
00445 #define NDIS_STATUS_WWAN_SMS_RECEIVE            ((NDIS_STATUS)0x4004100f)
00446 #define NDIS_STATUS_WWAN_SMS_SEND               ((NDIS_STATUS)0x40041010)
00447 #define NDIS_STATUS_WWAN_SMS_DELETE             ((NDIS_STATUS)0x40041011)
00448 #define NDIS_STATUS_WWAN_SMS_STATUS             ((NDIS_STATUS)0x40041012)
00449 #define NDIS_STATUS_WWAN_DNS_ADDRESS            ((NDIS_STATUS)0x40041013)
00450 
00451 #define NDIS_STATUS_WWAN_VENDOR_SPECIFIC        ((NDIS_STATUS)0x40043000)
00452 
00453 #endif /* NDIS_SUPPORT_NDIS6 */
00454 
00455 #if (NDIS_SUPPORT_NDIS620)
00456 #define NDIS_STATUS_PM_WOL_PATTERN_REJECTED     ((NDIS_STATUS)0x40030051L)
00457 #define NDIS_STATUS_PM_OFFLOAD_REJECTED         ((NDIS_STATUS)0x40030052L)
00458 #define NDIS_STATUS_PM_CAPABILITIES_CHANGE      ((NDIS_STATUS)0x40030053L)
00459 #endif
00460 
00461 #define NDIS_STATUS_NOT_RESETTABLE              ((NDIS_STATUS)0x80010001L)
00462 #define NDIS_STATUS_SOFT_ERRORS                 ((NDIS_STATUS)0x80010003L)
00463 #define NDIS_STATUS_HARD_ERRORS                 ((NDIS_STATUS)0x80010004L)
00464 #define NDIS_STATUS_BUFFER_OVERFLOW             ((NDIS_STATUS)STATUS_BUFFER_OVERFLOW)
00465 #define NDIS_STATUS_FAILURE                     ((NDIS_STATUS)STATUS_UNSUCCESSFUL)
00466 #define NDIS_STATUS_RESOURCES                   ((NDIS_STATUS)STATUS_INSUFFICIENT_RESOURCES)
00467 #define NDIS_STATUS_CLOSING                     ((NDIS_STATUS)0xC0010002L)
00468 #define NDIS_STATUS_BAD_VERSION                 ((NDIS_STATUS)0xC0010004L)
00469 #define NDIS_STATUS_BAD_CHARACTERISTICS         ((NDIS_STATUS)0xC0010005L)
00470 #define NDIS_STATUS_ADAPTER_NOT_FOUND           ((NDIS_STATUS)0xC0010006L)
00471 #define NDIS_STATUS_OPEN_FAILED                 ((NDIS_STATUS)0xC0010007L)
00472 #define NDIS_STATUS_DEVICE_FAILED               ((NDIS_STATUS)0xC0010008L)
00473 #define NDIS_STATUS_MULTICAST_FULL              ((NDIS_STATUS)0xC0010009L)
00474 #define NDIS_STATUS_MULTICAST_EXISTS            ((NDIS_STATUS)0xC001000AL)
00475 #define NDIS_STATUS_MULTICAST_NOT_FOUND         ((NDIS_STATUS)0xC001000BL)
00476 #define NDIS_STATUS_REQUEST_ABORTED             ((NDIS_STATUS)0xC001000CL)
00477 #define NDIS_STATUS_RESET_IN_PROGRESS           ((NDIS_STATUS)0xC001000DL)
00478 #define NDIS_STATUS_CLOSING_INDICATING          ((NDIS_STATUS)0xC001000EL)
00479 #define NDIS_STATUS_NOT_SUPPORTED               ((NDIS_STATUS)STATUS_NOT_SUPPORTED)
00480 #define NDIS_STATUS_INVALID_PACKET              ((NDIS_STATUS)0xC001000FL)
00481 #define NDIS_STATUS_OPEN_LIST_FULL              ((NDIS_STATUS)0xC0010010L)
00482 #define NDIS_STATUS_ADAPTER_NOT_READY           ((NDIS_STATUS)0xC0010011L)
00483 #define NDIS_STATUS_ADAPTER_NOT_OPEN            ((NDIS_STATUS)0xC0010012L)
00484 #define NDIS_STATUS_NOT_INDICATING              ((NDIS_STATUS)0xC0010013L)
00485 #define NDIS_STATUS_INVALID_LENGTH              ((NDIS_STATUS)0xC0010014L)
00486 #define NDIS_STATUS_INVALID_DATA                ((NDIS_STATUS)0xC0010015L)
00487 #define NDIS_STATUS_BUFFER_TOO_SHORT            ((NDIS_STATUS)0xC0010016L)
00488 #define NDIS_STATUS_INVALID_OID                 ((NDIS_STATUS)0xC0010017L)
00489 #define NDIS_STATUS_ADAPTER_REMOVED             ((NDIS_STATUS)0xC0010018L)
00490 #define NDIS_STATUS_UNSUPPORTED_MEDIA           ((NDIS_STATUS)0xC0010019L)
00491 #define NDIS_STATUS_GROUP_ADDRESS_IN_USE        ((NDIS_STATUS)0xC001001AL)
00492 #define NDIS_STATUS_FILE_NOT_FOUND              ((NDIS_STATUS)0xC001001BL)
00493 #define NDIS_STATUS_ERROR_READING_FILE          ((NDIS_STATUS)0xC001001CL)
00494 #define NDIS_STATUS_ALREADY_MAPPED              ((NDIS_STATUS)0xC001001DL)
00495 #define NDIS_STATUS_RESOURCE_CONFLICT           ((NDIS_STATUS)0xC001001EL)
00496 #define NDIS_STATUS_NO_CABLE                    ((NDIS_STATUS)0xC001001FL)
00497 
00498 #define NDIS_STATUS_INVALID_SAP                 ((NDIS_STATUS)0xC0010020L)
00499 #define NDIS_STATUS_SAP_IN_USE                  ((NDIS_STATUS)0xC0010021L)
00500 #define NDIS_STATUS_INVALID_ADDRESS             ((NDIS_STATUS)0xC0010022L)
00501 #define NDIS_STATUS_VC_NOT_ACTIVATED            ((NDIS_STATUS)0xC0010023L)
00502 #define NDIS_STATUS_DEST_OUT_OF_ORDER           ((NDIS_STATUS)0xC0010024L)
00503 #define NDIS_STATUS_VC_NOT_AVAILABLE            ((NDIS_STATUS)0xC0010025L)
00504 #define NDIS_STATUS_CELLRATE_NOT_AVAILABLE      ((NDIS_STATUS)0xC0010026L)
00505 #define NDIS_STATUS_INCOMPATABLE_QOS            ((NDIS_STATUS)0xC0010027L)
00506 #define NDIS_STATUS_AAL_PARAMS_UNSUPPORTED      ((NDIS_STATUS)0xC0010028L)
00507 #define NDIS_STATUS_NO_ROUTE_TO_DESTINATION     ((NDIS_STATUS)0xC0010029L)
00508 
00509 #define NDIS_STATUS_TOKEN_RING_OPEN_ERROR       ((NDIS_STATUS)0xC0011000L)
00510 #define NDIS_STATUS_INVALID_DEVICE_REQUEST      ((NDIS_STATUS)STATUS_INVALID_DEVICE_REQUEST)
00511 #define NDIS_STATUS_NETWORK_UNREACHABLE         ((NDIS_STATUS)STATUS_NETWORK_UNREACHABLE)
00512 
00513 #if NDIS_SUPPORT_NDIS6
00514 
00515 #define NDIS_STATUS_SEND_ABORTED                ((NDIS_STATUS)STATUS_NDIS_REQUEST_ABORTED)
00516 #define NDIS_STATUS_PAUSED                      ((NDIS_STATUS)STATUS_NDIS_PAUSED)
00517 #define NDIS_STATUS_INTERFACE_NOT_FOUND         ((NDIS_STATUS)STATUS_NDIS_INTERFACE_NOT_FOUND)
00518 #define NDIS_STATUS_INVALID_PARAMETER           ((NDIS_STATUS)STATUS_INVALID_PARAMETER)
00519 #define NDIS_STATUS_UNSUPPORTED_REVISION        ((NDIS_STATUS)STATUS_NDIS_UNSUPPORTED_REVISION)
00520 #define NDIS_STATUS_INVALID_PORT                ((NDIS_STATUS)STATUS_NDIS_INVALID_PORT)
00521 #define NDIS_STATUS_INVALID_PORT_STATE          ((NDIS_STATUS)STATUS_NDIS_INVALID_PORT_STATE)
00522 #define NDIS_STATUS_INVALID_STATE               ((NDIS_STATUS)STATUS_INVALID_DEVICE_STATE)
00523 #define NDIS_STATUS_MEDIA_DISCONNECTED          ((NDIS_STATUS)STATUS_NDIS_MEDIA_DISCONNECTED)
00524 #define NDIS_STATUS_LOW_POWER_STATE             ((NDIS_STATUS)STATUS_NDIS_LOW_POWER_STATE)
00525 #define NDIS_STATUS_DOT11_AUTO_CONFIG_ENABLED   ((NDIS_STATUS)STATUS_NDIS_DOT11_AUTO_CONFIG_ENABLED)
00526 #define NDIS_STATUS_DOT11_MEDIA_IN_USE          ((NDIS_STATUS)STATUS_NDIS_DOT11_MEDIA_IN_USE)
00527 #define NDIS_STATUS_DOT11_POWER_STATE_INVALID   ((NDIS_STATUS)STATUS_NDIS_DOT11_POWER_STATE_INVALID)
00528 #define NDIS_STATUS_UPLOAD_IN_PROGRESS          ((NDIS_STATUS)0xC0231001L)
00529 #define NDIS_STATUS_REQUEST_UPLOAD              ((NDIS_STATUS)0xC0231002L)
00530 #define NDIS_STATUS_UPLOAD_REQUESTED            ((NDIS_STATUS)0xC0231003L)
00531 #define NDIS_STATUS_OFFLOAD_TCP_ENTRIES         ((NDIS_STATUS)0xC0231004L)
00532 #define NDIS_STATUS_OFFLOAD_PATH_ENTRIES        ((NDIS_STATUS)0xC0231005L)
00533 #define NDIS_STATUS_OFFLOAD_NEIGHBOR_ENTRIES    ((NDIS_STATUS)0xC0231006L)
00534 #define NDIS_STATUS_OFFLOAD_IP_ADDRESS_ENTRIES  ((NDIS_STATUS)0xC0231007L)
00535 #define NDIS_STATUS_OFFLOAD_HW_ADDRESS_ENTRIES  ((NDIS_STATUS)0xC0231008L)
00536 #define NDIS_STATUS_OFFLOAD_VLAN_ENTRIES        ((NDIS_STATUS)0xC0231009L)
00537 #define NDIS_STATUS_OFFLOAD_TCP_XMIT_BUFFER     ((NDIS_STATUS)0xC023100AL)
00538 #define NDIS_STATUS_OFFLOAD_TCP_RCV_BUFFER      ((NDIS_STATUS)0xC023100BL)
00539 #define NDIS_STATUS_OFFLOAD_TCP_RCV_WINDOW      ((NDIS_STATUS)0xC023100CL)
00540 #define NDIS_STATUS_OFFLOAD_VLAN_MISMATCH       ((NDIS_STATUS)0xC023100DL)
00541 #define NDIS_STATUS_OFFLOAD_DATA_NOT_ACCEPTED   ((NDIS_STATUS)0xC023100EL)
00542 #define NDIS_STATUS_OFFLOAD_POLICY              ((NDIS_STATUS)0xC023100FL)
00543 #define NDIS_STATUS_OFFLOAD_DATA_PARTIALLY_ACCEPTED ((NDIS_STATUS)0xC0231010L)
00544 #define NDIS_STATUS_OFFLOAD_REQUEST_RESET       ((NDIS_STATUS)0xC0231011L)
00545 
00546 #if NDIS_SUPPORT_NDIS620
00547 #define NDIS_STATUS_PM_WOL_PATTERN_LIST_FULL    ((NDIS_STATUS)STATUS_NDIS_PM_WOL_PATTERN_LIST_FULL)
00548 #define NDIS_STATUS_PM_PROTOCOL_OFFLOAD_LIST_FULL ((NDIS_STATUS)STATUS_NDIS_PM_PROTOCOL_OFFLOAD_LIST_FULL)
00549 #endif
00550 
00551 #endif /* NDIS_SUPPORT_NDIS6 */
00552 
00553 #if (NDIS_SUPPORT_NDIS620)
00554 #define NDIS_STATUS_OFFLOAD_CONNECTION_REJECTED ((NDIS_STATUS)STATUS_NDIS_OFFLOAD_CONNECTION_REJECTED)
00555 #endif
00556 
00557 /* NDIS error codes for error logging */
00558 
00559 #define NDIS_ERROR_CODE ULONG
00560 
00561 #define NDIS_ERROR_CODE_RESOURCE_CONFLICT               EVENT_NDIS_RESOURCE_CONFLICT
00562 #define NDIS_ERROR_CODE_OUT_OF_RESOURCES                EVENT_NDIS_OUT_OF_RESOURCE
00563 #define NDIS_ERROR_CODE_HARDWARE_FAILURE                EVENT_NDIS_HARDWARE_FAILURE
00564 #define NDIS_ERROR_CODE_ADAPTER_NOT_FOUND               EVENT_NDIS_ADAPTER_NOT_FOUND
00565 #define NDIS_ERROR_CODE_INTERRUPT_CONNECT               EVENT_NDIS_INTERRUPT_CONNECT
00566 #define NDIS_ERROR_CODE_DRIVER_FAILURE                  EVENT_NDIS_DRIVER_FAILURE
00567 #define NDIS_ERROR_CODE_BAD_VERSION                     EVENT_NDIS_BAD_VERSION
00568 #define NDIS_ERROR_CODE_TIMEOUT                         EVENT_NDIS_TIMEOUT
00569 #define NDIS_ERROR_CODE_NETWORK_ADDRESS                 EVENT_NDIS_NETWORK_ADDRESS
00570 #define NDIS_ERROR_CODE_UNSUPPORTED_CONFIGURATION       EVENT_NDIS_UNSUPPORTED_CONFIGURATION
00571 #define NDIS_ERROR_CODE_INVALID_VALUE_FROM_ADAPTER      EVENT_NDIS_INVALID_VALUE_FROM_ADAPTER
00572 #define NDIS_ERROR_CODE_MISSING_CONFIGURATION_PARAMETER EVENT_NDIS_MISSING_CONFIGURATION_PARAMETER
00573 #define NDIS_ERROR_CODE_BAD_IO_BASE_ADDRESS             EVENT_NDIS_BAD_IO_BASE_ADDRESS
00574 #define NDIS_ERROR_CODE_RECEIVE_SPACE_SMALL             EVENT_NDIS_RECEIVE_SPACE_SMALL
00575 #define NDIS_ERROR_CODE_ADAPTER_DISABLED                EVENT_NDIS_ADAPTER_DISABLED
00576 
00577 /* Memory allocation flags. Used by Ndis[Allocate|Free]Memory */
00578 #define NDIS_MEMORY_CONTIGUOUS            0x00000001
00579 #define NDIS_MEMORY_NONCACHED             0x00000002
00580 
00581 /* NIC attribute flags. Used by NdisMSetAttributes(Ex) */
00582 #define NDIS_ATTRIBUTE_IGNORE_PACKET_TIMEOUT    0x00000001
00583 #define NDIS_ATTRIBUTE_IGNORE_REQUEST_TIMEOUT   0x00000002
00584 #define NDIS_ATTRIBUTE_IGNORE_TOKEN_RING_ERRORS 0x00000004
00585 #define NDIS_ATTRIBUTE_BUS_MASTER               0x00000008
00586 #define NDIS_ATTRIBUTE_INTERMEDIATE_DRIVER      0x00000010
00587 #define NDIS_ATTRIBUTE_DESERIALIZE              0x00000020
00588 #define NDIS_ATTRIBUTE_NO_HALT_ON_SUSPEND       0x00000040
00589 #define NDIS_ATTRIBUTE_SURPRISE_REMOVE_OK       0x00000080
00590 #define NDIS_ATTRIBUTE_NOT_CO_NDIS              0x00000100
00591 #define NDIS_ATTRIBUTE_USES_SAFE_BUFFER_APIS    0x00000200
00592 
00593 /* Lock */
00594 
00595 #if NDIS_SUPPORT_60_COMPATIBLE_API
00596 
00597 typedef union _NDIS_RW_LOCK_REFCOUNT {
00598   UINT RefCount;
00599   UCHAR cacheLine[16];
00600 } NDIS_RW_LOCK_REFCOUNT;
00601 
00602 typedef struct _NDIS_RW_LOCK {
00603   __MINGW_EXTENSION union {
00604     __MINGW_EXTENSION struct {
00605       KSPIN_LOCK SpinLock;
00606       PVOID Context;
00607     };
00608     UCHAR Reserved[16];
00609   };
00610   __MINGW_EXTENSION union {
00611     NDIS_RW_LOCK_REFCOUNT RefCount[MAXIMUM_PROCESSORS]; 
00612     ULONG RefCountEx[sizeof(NDIS_RW_LOCK_REFCOUNT)/sizeof(ULONG) * MAXIMUM_PROCESSORS];
00613     __MINGW_EXTENSION struct {
00614       KSPIN_LOCK RefCountLock;
00615       volatile ULONG SharedRefCount;
00616       volatile BOOLEAN WriterWaiting;
00617     };
00618   };
00619 } NDIS_RW_LOCK, *PNDIS_RW_LOCK;
00620 
00621 typedef struct _LOCK_STATE {
00622   USHORT LockState;
00623   KIRQL OldIrql;
00624 } LOCK_STATE, *PLOCK_STATE;
00625 
00626 #endif /* NDIS_SUPPORT_60_COMPATIBLE_API */
00627 
00628 /* Timer */
00629 
00630 _IRQL_requires_(DISPATCH_LEVEL)
00631 _IRQL_requires_same_
00632 _Function_class_(NDIS_TIMER_FUNCTION)
00633 typedef VOID
00634 (NTAPI NDIS_TIMER_FUNCTION)(
00635   _In_ PVOID SystemSpecific1,
00636   _In_ PVOID FunctionContext,
00637   _In_ PVOID SystemSpecific2,
00638   _In_ PVOID SystemSpecific3);
00639 typedef NDIS_TIMER_FUNCTION *PNDIS_TIMER_FUNCTION;
00640 
00641 typedef struct _NDIS_TIMER {
00642   KTIMER Timer;
00643   KDPC Dpc;
00644 } NDIS_TIMER, *PNDIS_TIMER;
00645 
00646 /* Hardware */
00647 
00648 typedef CM_MCA_POS_DATA NDIS_MCA_POS_DATA, *PNDIS_MCA_POS_DATA;
00649 typedef CM_EISA_SLOT_INFORMATION NDIS_EISA_SLOT_INFORMATION, *PNDIS_EISA_SLOT_INFORMATION;
00650 typedef CM_EISA_FUNCTION_INFORMATION NDIS_EISA_FUNCTION_INFORMATION, *PNDIS_EISA_FUNCTION_INFORMATION;
00651 typedef CM_PARTIAL_RESOURCE_LIST NDIS_RESOURCE_LIST, *PNDIS_RESOURCE_LIST;
00652 
00653 /* Flag bits */
00654 #define READABLE_LOCAL_CLOCK                    0x00000001
00655 #define CLOCK_NETWORK_DERIVED                   0x00000002
00656 #define CLOCK_PRECISION                         0x00000004
00657 #define RECEIVE_TIME_INDICATION_CAPABLE         0x00000008
00658 #define TIMED_SEND_CAPABLE                      0x00000010
00659 #define TIME_STAMP_CAPABLE                      0x00000020
00660 
00661 /* NDIS packet filter bits (OID_GEN_CURRENT_PACKET_FILTER) */
00662 #define NDIS_PACKET_TYPE_DIRECTED               0x00000001
00663 #define NDIS_PACKET_TYPE_MULTICAST              0x00000002
00664 #define NDIS_PACKET_TYPE_ALL_MULTICAST          0x00000004
00665 #define NDIS_PACKET_TYPE_BROADCAST              0x00000008
00666 #define NDIS_PACKET_TYPE_SOURCE_ROUTING         0x00000010
00667 #define NDIS_PACKET_TYPE_PROMISCUOUS            0x00000020
00668 #define NDIS_PACKET_TYPE_SMT                    0x00000040
00669 #define NDIS_PACKET_TYPE_ALL_LOCAL              0x00000080
00670 #define NDIS_PACKET_TYPE_GROUP                  0x00001000
00671 #define NDIS_PACKET_TYPE_ALL_FUNCTIONAL         0x00002000
00672 #define NDIS_PACKET_TYPE_FUNCTIONAL             0x00004000
00673 #define NDIS_PACKET_TYPE_MAC_FRAME              0x00008000
00674 
00675 /* NDIS protocol option bits (OID_GEN_PROTOCOL_OPTIONS) */
00676 #define NDIS_PROT_OPTION_ESTIMATED_LENGTH       0x00000001
00677 #define NDIS_PROT_OPTION_NO_LOOPBACK            0x00000002
00678 #define NDIS_PROT_OPTION_NO_RSVD_ON_RCVPKT      0x00000004
00679 
00680 /* NDIS MAC option bits (OID_GEN_MAC_OPTIONS) */
00681 #define NDIS_MAC_OPTION_COPY_LOOKAHEAD_DATA     0x00000001
00682 #define NDIS_MAC_OPTION_RECEIVE_SERIALIZED      0x00000002
00683 #define NDIS_MAC_OPTION_TRANSFERS_NOT_PEND      0x00000004
00684 #define NDIS_MAC_OPTION_NO_LOOPBACK             0x00000008
00685 #define NDIS_MAC_OPTION_FULL_DUPLEX             0x00000010
00686 #define NDIS_MAC_OPTION_EOTX_INDICATION         0x00000020
00687 #define NDIS_MAC_OPTION_8021P_PRIORITY          0x00000040
00688 #define NDIS_MAC_OPTION_RESERVED                0x80000000
00689 
00690 #define NDIS_GUID_TO_OID                  0x00000001
00691 #define NDIS_GUID_TO_STATUS               0x00000002
00692 #define NDIS_GUID_ANSI_STRING             0x00000004
00693 #define NDIS_GUID_UNICODE_STRING          0x00000008
00694 #define NDIS_GUID_ARRAY                   0x00000010
00695 
00696 #if NDIS_LEGACY_DRIVER
00697 
00698 /* NDIS_PACKET_PRIVATE.Flags constants */
00699 #define fPACKET_WRAPPER_RESERVED             0x3f
00700 #define fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO 0x40
00701 #define fPACKET_ALLOCATED_BY_NDIS            0x80
00702 
00703 #define NDIS_FLAGS_PROTOCOL_ID_MASK          0x0000000f
00704 #define NDIS_FLAGS_MULTICAST_PACKET          0x00000010
00705 #define NDIS_FLAGS_RESERVED2                 0x00000020
00706 #define NDIS_FLAGS_RESERVED3                 0x00000040
00707 #define NDIS_FLAGS_DONT_LOOPBACK             0x00000080
00708 #define NDIS_FLAGS_IS_LOOPBACK_PACKET        0x00000100
00709 #define NDIS_FLAGS_LOOPBACK_ONLY             0x00000200
00710 #define NDIS_FLAGS_RESERVED4                 0x00000400
00711 #define NDIS_FLAGS_DOUBLE_BUFFERED           0x00000800
00712 #define NDIS_FLAGS_SENT_AT_DPC               0x00001000
00713 #define NDIS_FLAGS_USES_SG_BUFFER_LIST       0x00002000
00714 #define NDIS_FLAGS_USES_ORIGINAL_PACKET      0x00004000
00715 #define NDIS_FLAGS_PADDED                    0x00010000
00716 #define NDIS_FLAGS_XLATE_AT_TOP              0x00020000
00717 
00718 typedef NDIS_HANDLE PNDIS_PACKET_POOL;
00719 
00720 typedef struct _NDIS_PACKET_PRIVATE {
00721   UINT PhysicalCount;
00722   UINT TotalLength;
00723   PNDIS_BUFFER Head;
00724   PNDIS_BUFFER Tail;
00725   PNDIS_PACKET_POOL Pool;
00726   UINT Count;
00727   ULONG Flags;
00728   BOOLEAN ValidCounts;
00729   UCHAR NdisPacketFlags;
00730   USHORT NdisPacketOobOffset;
00731 } NDIS_PACKET_PRIVATE, *PNDIS_PACKET_PRIVATE;
00732 
00733 typedef struct _NDIS_PACKET {
00734   NDIS_PACKET_PRIVATE Private;
00735   __MINGW_EXTENSION union {
00736     __MINGW_EXTENSION struct {
00737       UCHAR MiniportReserved[2 * sizeof(PVOID)];
00738       UCHAR WrapperReserved[2 * sizeof(PVOID)];
00739     };
00740     __MINGW_EXTENSION struct {
00741       UCHAR MiniportReservedEx[3 * sizeof(PVOID)];
00742       UCHAR WrapperReservedEx[sizeof(PVOID)];
00743     };
00744     __MINGW_EXTENSION struct {
00745       UCHAR MacReserved[4 * sizeof(PVOID)];
00746     };
00747   };
00748   ULONG_PTR Reserved[2];
00749   UCHAR ProtocolReserved[1];
00750 } NDIS_PACKET, *PNDIS_PACKET, **PPNDIS_PACKET;
00751 
00752 typedef struct _NDIS_PACKET_STACK {
00753   ULONG_PTR IMReserved[2];
00754   ULONG_PTR NdisReserved[4];
00755 } NDIS_PACKET_STACK, *PNDIS_PACKET_STACK;
00756 
00757 #endif /* NDIS_LEGACY_DRIVER */
00758 
00759 typedef enum _NDIS_CLASS_ID {
00760   NdisClass802_3Priority,
00761   NdisClassWirelessWanMbxMailbox,
00762   NdisClassIrdaPacketInfo,
00763   NdisClassAtmAALInfo
00764 } NDIS_CLASS_ID;
00765 
00766 typedef struct _MEDIA_SPECIFIC_INFORMATION {
00767   UINT NextEntryOffset;
00768   NDIS_CLASS_ID ClassId;
00769   UINT Size;
00770   UCHAR ClassInformation[1];
00771 } MEDIA_SPECIFIC_INFORMATION, *PMEDIA_SPECIFIC_INFORMATION;
00772 
00773 #if NDIS_LEGACY_DRIVER
00774 typedef struct _NDIS_PACKET_OOB_DATA {
00775   __MINGW_EXTENSION union {
00776     ULONGLONG TimeToSend;
00777     ULONGLONG TimeSent;
00778   };
00779   ULONGLONG TimeReceived;
00780   UINT HeaderSize;
00781   UINT SizeMediaSpecificInfo;
00782   PVOID MediaSpecificInformation;
00783   NDIS_STATUS Status;
00784 } NDIS_PACKET_OOB_DATA, *PNDIS_PACKET_OOB_DATA;
00785 #endif
00786 
00787 /* Request types used by NdisRequest */
00788 typedef enum _NDIS_REQUEST_TYPE {
00789   NdisRequestQueryInformation,
00790   NdisRequestSetInformation,
00791   NdisRequestQueryStatistics,
00792   NdisRequestOpen,
00793   NdisRequestClose,
00794   NdisRequestSend,
00795   NdisRequestTransferData,
00796   NdisRequestReset,
00797   NdisRequestGeneric1,
00798   NdisRequestGeneric2,
00799   NdisRequestGeneric3,
00800   NdisRequestGeneric4,
00801 #if NDIS_SUPPORT_NDIS6
00802   NdisRequestMethod,
00803 #endif
00804 } NDIS_REQUEST_TYPE, *PNDIS_REQUEST_TYPE;
00805 
00806 #if NDIS_LEGACY_DRIVER
00807 typedef struct _NDIS_REQUEST {
00808   UCHAR MacReserved[4 * sizeof(PVOID)];
00809   NDIS_REQUEST_TYPE RequestType;
00810   union _DATA {
00811     struct QUERY_INFORMATION {
00812       NDIS_OID Oid;
00813       PVOID InformationBuffer;
00814       UINT InformationBufferLength;
00815       UINT BytesWritten;
00816       UINT BytesNeeded;
00817     } QUERY_INFORMATION;
00818     struct SET_INFORMATION {
00819       NDIS_OID Oid;
00820       PVOID InformationBuffer;
00821       UINT InformationBufferLength;
00822       UINT BytesRead;
00823       UINT BytesNeeded;
00824     } SET_INFORMATION;
00825  } DATA;
00826 #if (defined(NDIS50) || defined(NDIS51) || defined(NDIS50_MINIPORT) || defined(NDIS51_MINIPORT))
00827   UCHAR NdisReserved[9 * sizeof(PVOID)];
00828   __MINGW_EXTENSION union {
00829     UCHAR CallMgrReserved[2 * sizeof(PVOID)];
00830     UCHAR ProtocolReserved[2 * sizeof(PVOID)];
00831   };
00832   UCHAR MiniportReserved[2 * sizeof(PVOID)];
00833 #endif
00834 } NDIS_REQUEST, *PNDIS_REQUEST;
00835 #endif /* NDIS_LEGACY_DRIVER */
00836 
00837 /* Wide Area Networks definitions */
00838 
00839 #if NDIS_LEGACY_DRIVER
00840 typedef struct _NDIS_WAN_PACKET {
00841   LIST_ENTRY WanPacketQueue;
00842   PUCHAR CurrentBuffer;
00843   ULONG CurrentLength;
00844   PUCHAR StartBuffer;
00845   PUCHAR EndBuffer;
00846   PVOID ProtocolReserved1;
00847   PVOID ProtocolReserved2;
00848   PVOID ProtocolReserved3;
00849   PVOID ProtocolReserved4;
00850   PVOID MacReserved1;
00851   PVOID MacReserved2;
00852   PVOID MacReserved3;
00853   PVOID MacReserved4;
00854 } NDIS_WAN_PACKET, *PNDIS_WAN_PACKET;
00855 #endif
00856 
00857 /* DMA channel information */
00858 
00859 typedef struct _NDIS_DMA_DESCRIPTION {
00860   BOOLEAN  DemandMode;
00861   BOOLEAN  AutoInitialize;
00862   BOOLEAN  DmaChannelSpecified;
00863   DMA_WIDTH  DmaWidth;
00864   DMA_SPEED  DmaSpeed;
00865   ULONG  DmaPort;
00866   ULONG  DmaChannel;
00867 } NDIS_DMA_DESCRIPTION, *PNDIS_DMA_DESCRIPTION;
00868 
00869 typedef struct _NDIS_DMA_BLOCK {
00870   PVOID  MapRegisterBase;
00871   KEVENT  AllocationEvent;
00872   PADAPTER_OBJECT  SystemAdapterObject;
00873   PVOID  Miniport;
00874   BOOLEAN  InProgress;
00875 } NDIS_DMA_BLOCK, *PNDIS_DMA_BLOCK;
00876 
00877 typedef UCHAR NDIS_DMA_SIZE;
00878 
00879 #define NDIS_DMA_24BITS                         ((NDIS_DMA_SIZE)0)
00880 #define NDIS_DMA_32BITS                         ((NDIS_DMA_SIZE)1)
00881 #define NDIS_DMA_64BITS                         ((NDIS_DMA_SIZE)2)
00882 
00883 typedef enum _NDIS_PROCESSOR_TYPE {
00884   NdisProcessorX86,
00885   NdisProcessorMips,
00886   NdisProcessorAlpha,
00887   NdisProcessorPpc,
00888   NdisProcessorAmd64,
00889   NdisProcessorIA64
00890 } NDIS_PROCESSOR_TYPE, *PNDIS_PROCESSOR_TYPE;
00891 
00892 typedef enum _NDIS_ENVIRONMENT_TYPE {
00893   NdisEnvironmentWindows,
00894   NdisEnvironmentWindowsNt
00895 } NDIS_ENVIRONMENT_TYPE, *PNDIS_ENVIRONMENT_TYPE;
00896 
00897 /* Possible hardware architecture */
00898 typedef enum _NDIS_INTERFACE_TYPE {
00899   NdisInterfaceInternal = Internal,
00900   NdisInterfaceIsa = Isa,
00901   NdisInterfaceEisa = Eisa,
00902   NdisInterfaceMca = MicroChannel,
00903   NdisInterfaceTurboChannel = TurboChannel,
00904   NdisInterfacePci = PCIBus,
00905   NdisInterfacePcMcia = PCMCIABus,
00906   NdisInterfaceCBus = CBus,
00907   NdisInterfaceMPIBus = MPIBus,
00908   NdisInterfaceMPSABus = MPSABus,
00909   NdisInterfaceProcessorInternal = ProcessorInternal,
00910   NdisInterfaceInternalPowerBus = InternalPowerBus,
00911   NdisInterfacePNPISABus = PNPISABus,
00912   NdisInterfacePNPBus = PNPBus,
00913   NdisInterfaceUSB,
00914   NdisInterfaceIrda,
00915   NdisInterface1394,
00916   NdisMaximumInterfaceType
00917 } NDIS_INTERFACE_TYPE, *PNDIS_INTERFACE_TYPE;
00918 
00919 #define NdisInterruptLevelSensitive       LevelSensitive
00920 #define NdisInterruptLatched              Latched
00921 
00922 typedef KINTERRUPT_MODE NDIS_INTERRUPT_MODE, *PNDIS_INTERRUPT_MODE;
00923 
00924 typedef enum _NDIS_PARAMETER_TYPE {
00925   NdisParameterInteger,
00926   NdisParameterHexInteger,
00927   NdisParameterString,
00928   NdisParameterMultiString,
00929   NdisParameterBinary
00930 } NDIS_PARAMETER_TYPE, *PNDIS_PARAMETER_TYPE;
00931 
00932 typedef struct _BINARY_DATA {
00933   USHORT Length;
00934   _Field_size_bytes_(Length) PVOID Buffer;
00935 } BINARY_DATA;
00936 
00937 typedef struct _NDIS_CONFIGURATION_PARAMETER {
00938   NDIS_PARAMETER_TYPE ParameterType;
00939   union {
00940     ULONG IntegerData;
00941     NDIS_STRING StringData;
00942     BINARY_DATA BinaryData;
00943   } ParameterData;
00944 } NDIS_CONFIGURATION_PARAMETER, *PNDIS_CONFIGURATION_PARAMETER;
00945 
00946 typedef PHYSICAL_ADDRESS NDIS_PHYSICAL_ADDRESS, *PNDIS_PHYSICAL_ADDRESS;
00947 
00948 typedef struct _NDIS_PHYSICAL_ADDRESS_UNIT {
00949   NDIS_PHYSICAL_ADDRESS PhysicalAddress;
00950   UINT Length;
00951 } NDIS_PHYSICAL_ADDRESS_UNIT, *PNDIS_PHYSICAL_ADDRESS_UNIT;
00952 
00953 typedef struct _NDIS_WAN_LINE_DOWN {
00954   UCHAR RemoteAddress[6];
00955   UCHAR LocalAddress[6];
00956 } NDIS_WAN_LINE_DOWN, *PNDIS_WAN_LINE_DOWN;
00957 
00958 typedef struct _NDIS_WAN_LINE_UP {
00959   ULONG LinkSpeed;
00960   ULONG MaximumTotalSize;
00961   NDIS_WAN_QUALITY Quality;
00962   USHORT SendWindow;
00963   UCHAR RemoteAddress[6];
00964   OUT UCHAR LocalAddress[6];
00965   ULONG ProtocolBufferLength;
00966   PUCHAR ProtocolBuffer;
00967   USHORT ProtocolType;
00968   NDIS_STRING DeviceName;
00969 } NDIS_WAN_LINE_UP, *PNDIS_WAN_LINE_UP;
00970 
00971 typedef NTSTATUS
00972 (NTAPI *TDI_REGISTER_CALLBACK)(
00973   _In_ PUNICODE_STRING DeviceName,
00974   _Out_ HANDLE *TdiHandle);
00975 
00976 typedef NTSTATUS
00977 (NTAPI *TDI_PNP_HANDLER)(
00978   _In_ PUNICODE_STRING UpperComponent,
00979   _In_ PUNICODE_STRING LowerComponent,
00980   _In_ PUNICODE_STRING BindList,
00981   _In_ PVOID ReconfigBuffer,
00982   _In_ UINT ReconfigBufferSize,
00983   _In_ UINT Operation);
00984 
00985 typedef struct _OID_LIST    OID_LIST, *POID_LIST;
00986 
00987 /* PnP state */
00988 
00989 typedef enum _NDIS_PNP_DEVICE_STATE {
00990   NdisPnPDeviceAdded,
00991   NdisPnPDeviceStarted,
00992   NdisPnPDeviceQueryStopped,
00993   NdisPnPDeviceStopped,
00994   NdisPnPDeviceQueryRemoved,
00995   NdisPnPDeviceRemoved,
00996   NdisPnPDeviceSurpriseRemoved
00997 } NDIS_PNP_DEVICE_STATE;
00998 
00999 #define NDIS_DEVICE_NOT_STOPPABLE                 0x00000001
01000 #define NDIS_DEVICE_NOT_REMOVEABLE                0x00000002
01001 #define NDIS_DEVICE_NOT_SUSPENDABLE               0x00000004
01002 #define NDIS_DEVICE_DISABLE_PM                    0x00000008
01003 #define NDIS_DEVICE_DISABLE_WAKE_UP               0x00000010
01004 #define NDIS_DEVICE_DISABLE_WAKE_ON_RECONNECT     0x00000020
01005 #define NDIS_DEVICE_RESERVED                      0x00000040
01006 #define NDIS_DEVICE_DISABLE_WAKE_ON_MAGIC_PACKET  0x00000080
01007 #define NDIS_DEVICE_DISABLE_WAKE_ON_PATTERN_MATCH 0x00000100
01008 
01009 /* Protocol types supported by NDIS */
01010 #define NDIS_PROTOCOL_ID_DEFAULT        0x00
01011 #define NDIS_PROTOCOL_ID_TCP_IP         0x02
01012 #define NDIS_PROTOCOL_ID_IPX            0x06
01013 #define NDIS_PROTOCOL_ID_NBF            0x07
01014 #define NDIS_PROTOCOL_ID_MAX            0x0F
01015 #define NDIS_PROTOCOL_ID_MASK           0x0F
01016 
01017 typedef ULONG NDIS_AF, *PNDIS_AF;
01018 
01019 #define CO_ADDRESS_FAMILY_Q2931           ((NDIS_AF)0x1)
01020 #define CO_ADDRESS_FAMILY_PSCHED          ((NDIS_AF)0x2)
01021 #define CO_ADDRESS_FAMILY_L2TP            ((NDIS_AF)0x3)
01022 #define CO_ADDRESS_FAMILY_IRDA            ((NDIS_AF)0x4)
01023 #define CO_ADDRESS_FAMILY_1394            ((NDIS_AF)0x5)
01024 #define CO_ADDRESS_FAMILY_PPP             ((NDIS_AF)0x6)
01025 #define CO_ADDRESS_FAMILY_INFINIBAND      ((NDIS_AF)0x7)
01026 #define CO_ADDRESS_FAMILY_TAPI            ((NDIS_AF)0x800)
01027 #define CO_ADDRESS_FAMILY_TAPI_PROXY      ((NDIS_AF)0x801)
01028 
01029 #define CO_ADDRESS_FAMILY_PROXY           0x80000000
01030 
01031 typedef struct _CO_ADDRESS_FAMILY {
01032   NDIS_AF AddressFamily;
01033   ULONG MajorVersion;
01034   ULONG MinorVersion;
01035 } CO_ADDRESS_FAMILY, *PCO_ADDRESS_FAMILY;
01036 
01037 typedef struct _CO_SPECIFIC_PARAMETERS {
01038   ULONG  ParamType;
01039   ULONG  Length;
01040   UCHAR  Parameters[1];
01041 } CO_SPECIFIC_PARAMETERS, *PCO_SPECIFIC_PARAMETERS;
01042 
01043 typedef struct _CO_CALL_MANAGER_PARAMETERS {
01044   FLOWSPEC  Transmit;
01045   FLOWSPEC  Receive;
01046   CO_SPECIFIC_PARAMETERS  CallMgrSpecific;
01047 } CO_CALL_MANAGER_PARAMETERS, *PCO_CALL_MANAGER_PARAMETERS;
01048 
01049 /* CO_MEDIA_PARAMETERS.Flags constants */
01050 #define RECEIVE_TIME_INDICATION           0x00000001
01051 #define USE_TIME_STAMPS                   0x00000002
01052 #define TRANSMIT_VC                       0x00000004
01053 #define RECEIVE_VC                        0x00000008
01054 #define INDICATE_ERRED_PACKETS            0x00000010
01055 #define INDICATE_END_OF_TX                0x00000020
01056 #define RESERVE_RESOURCES_VC              0x00000040
01057 #define ROUND_DOWN_FLOW                   0x00000080
01058 #define ROUND_UP_FLOW                     0x00000100
01059 
01060 typedef struct _CO_MEDIA_PARAMETERS {
01061   ULONG  Flags;
01062   ULONG  ReceivePriority;
01063   ULONG  ReceiveSizeHint;
01064   CO_SPECIFIC_PARAMETERS  MediaSpecific;
01065 } CO_MEDIA_PARAMETERS, *PCO_MEDIA_PARAMETERS;
01066 
01067 /* CO_CALL_PARAMETERS.Flags constants */
01068 #define PERMANENT_VC                      0x00000001
01069 #define CALL_PARAMETERS_CHANGED           0x00000002
01070 #define QUERY_CALL_PARAMETERS             0x00000004
01071 #define BROADCAST_VC                      0x00000008
01072 #define MULTIPOINT_VC                     0x00000010
01073 
01074 typedef struct _CO_CALL_PARAMETERS {
01075   ULONG  Flags;
01076   PCO_CALL_MANAGER_PARAMETERS  CallMgrParameters;
01077   PCO_MEDIA_PARAMETERS  MediaParameters;
01078 } CO_CALL_PARAMETERS, *PCO_CALL_PARAMETERS;
01079 
01080 typedef struct _CO_SAP {
01081   ULONG SapType;
01082   ULONG SapLength;
01083   UCHAR Sap[1];
01084 } CO_SAP, *PCO_SAP;
01085 
01086 #if NDIS_LEGACY_DRIVER
01087 typedef struct _NDIS_IPSEC_PACKET_INFO {
01088   __MINGW_EXTENSION union {
01089     struct {
01090       NDIS_HANDLE OffloadHandle;
01091       NDIS_HANDLE NextOffloadHandle;
01092     } Transmit;
01093     struct {
01094       ULONG SA_DELETE_REQ:1;
01095       ULONG CRYPTO_DONE:1;
01096       ULONG NEXT_CRYPTO_DONE:1;
01097       ULONG CryptoStatus;
01098     } Receive;
01099   };
01100 } NDIS_IPSEC_PACKET_INFO, *PNDIS_IPSEC_PACKET_INFO;
01101 #endif
01102 
01103 #if (NDIS_SUPPORT_NDIS6 || NDIS60)
01104 typedef struct _NDIS_IPSEC_OFFLOAD_V1_NET_BUFFER_LIST_INFO {
01105   __MINGW_EXTENSION union {
01106     struct {
01107       NDIS_HANDLE OffloadHandle;
01108     } Transmit;
01109     struct {
01110       USHORT SaDeleteReq:1;
01111       USHORT CryptoDone:1;
01112       USHORT NextCryptoDone:1;
01113       USHORT Pad:13;
01114       USHORT CryptoStatus;
01115     } Receive;
01116   };
01117 } NDIS_IPSEC_OFFLOAD_V1_NET_BUFFER_LIST_INFO, *PNDIS_IPSEC_OFFLOAD_V1_NET_BUFFER_LIST_INFO;
01118 #endif
01119 
01120 /* NDIS_MAC_FRAGMENT.Errors constants */
01121 #define WAN_ERROR_CRC                           0x00000001
01122 #define WAN_ERROR_FRAMING                       0x00000002
01123 #define WAN_ERROR_HARDWAREOVERRUN               0x00000004
01124 #define WAN_ERROR_BUFFEROVERRUN                 0x00000008
01125 #define WAN_ERROR_TIMEOUT                       0x00000010
01126 #define WAN_ERROR_ALIGNMENT                     0x00000020
01127 
01128 typedef struct _NDIS_MAC_FRAGMENT {
01129   NDIS_HANDLE  NdisLinkContext;
01130   ULONG  Errors;
01131 } NDIS_MAC_FRAGMENT, *PNDIS_MAC_FRAGMENT;
01132 
01133 typedef struct _NDIS_MAC_LINE_DOWN {
01134   NDIS_HANDLE  NdisLinkContext;
01135 } NDIS_MAC_LINE_DOWN, *PNDIS_MAC_LINE_DOWN;
01136 
01137 typedef struct _NDIS_MAC_LINE_UP {
01138   ULONG  LinkSpeed;
01139   NDIS_WAN_QUALITY  Quality;
01140   USHORT  SendWindow;
01141   NDIS_HANDLE  ConnectionWrapperID;
01142   NDIS_HANDLE  NdisLinkHandle;
01143   NDIS_HANDLE  NdisLinkContext;
01144 } NDIS_MAC_LINE_UP, *PNDIS_MAC_LINE_UP;
01145 
01146 typedef struct _NDIS_PACKET_8021Q_INFO {
01147   __MINGW_EXTENSION union {
01148     struct {
01149       UINT32 UserPriority:3;
01150       UINT32 CanonicalFormatId:1;
01151       UINT32 VlanId:12;
01152       UINT32 Reserved:16;
01153     } TagHeader;
01154     PVOID Value;
01155   };
01156 } NDIS_PACKET_8021Q_INFO, *PNDIS_PACKET_8021Q_INFO;
01157 
01158 typedef enum _NDIS_PER_PACKET_INFO {
01159   TcpIpChecksumPacketInfo,
01160   IpSecPacketInfo,
01161   TcpLargeSendPacketInfo,
01162   ClassificationHandlePacketInfo,
01163   NdisReserved,
01164   ScatterGatherListPacketInfo,
01165   Ieee8021QInfo,
01166   OriginalPacketInfo,
01167   PacketCancelId,
01168   OriginalNetBufferList,
01169   CachedNetBufferList,
01170   ShortPacketPaddingInfo,
01171   MaxPerPacketInfo
01172 } NDIS_PER_PACKET_INFO, *PNDIS_PER_PACKET_INFO;
01173 
01174 #if NDIS_LEGACY_DRIVER
01175 
01176 typedef struct _NDIS_PACKET_EXTENSION {
01177   PVOID NdisPacketInfo[MaxPerPacketInfo];
01178 } NDIS_PACKET_EXTENSION, *PNDIS_PACKET_EXTENSION;
01179 
01180 typedef enum _NDIS_TASK {
01181   TcpIpChecksumNdisTask,
01182   IpSecNdisTask,
01183   TcpLargeSendNdisTask,
01184   MaxNdisTask
01185 } NDIS_TASK, *PNDIS_TASK;
01186 
01187 typedef enum _NDIS_ENCAPSULATION {
01188   UNSPECIFIED_Encapsulation,
01189   NULL_Encapsulation,
01190   IEEE_802_3_Encapsulation,
01191   IEEE_802_5_Encapsulation,
01192   LLC_SNAP_ROUTED_Encapsulation,
01193   LLC_SNAP_BRIDGED_Encapsulation
01194 } NDIS_ENCAPSULATION;
01195 
01196 typedef struct _NDIS_ENCAPSULATION_FORMAT {
01197   NDIS_ENCAPSULATION Encapsulation;
01198   struct {
01199     ULONG FixedHeaderSize:1;
01200     ULONG Reserved:31;
01201   } Flags;
01202   ULONG EncapsulationHeaderSize;
01203 } NDIS_ENCAPSULATION_FORMAT, *PNDIS_ENCAPSULATION_FORMAT;
01204 
01205 typedef struct _NDIS_TASK_OFFLOAD_HEADER {
01206   ULONG Version;
01207   ULONG Size;
01208   ULONG Reserved;
01209   ULONG OffsetFirstTask;
01210   NDIS_ENCAPSULATION_FORMAT EncapsulationFormat;
01211 } NDIS_TASK_OFFLOAD_HEADER, *PNDIS_TASK_OFFLOAD_HEADER;
01212 
01213 typedef struct _NDIS_TASK_OFFLOAD {
01214   ULONG Version;
01215   ULONG Size;
01216   NDIS_TASK Task;
01217   ULONG OffsetNextTask;
01218   ULONG TaskBufferLength;
01219   UCHAR TaskBuffer[1];
01220 } NDIS_TASK_OFFLOAD, *PNDIS_TASK_OFFLOAD;
01221 
01222 typedef struct _NDIS_TASK_TCP_IP_CHECKSUM {
01223   struct {
01224     ULONG IpOptionsSupported:1;
01225     ULONG TcpOptionsSupported:1;
01226     ULONG TcpChecksum:1;
01227     ULONG UdpChecksum:1;
01228     ULONG IpChecksum:1;
01229   } V4Transmit;
01230   struct {
01231     ULONG IpOptionsSupported:1;
01232     ULONG TcpOptionsSupported:1;
01233     ULONG TcpChecksum:1;
01234     ULONG UdpChecksum:1;
01235     ULONG IpChecksum:1;
01236   } V4Receive;
01237   struct {
01238     ULONG IpOptionsSupported:1;
01239     ULONG TcpOptionsSupported:1;
01240     ULONG TcpChecksum:1;
01241     ULONG UdpChecksum:1;
01242   } V6Transmit;
01243   struct {
01244     ULONG IpOptionsSupported:1;
01245     ULONG TcpOptionsSupported:1;
01246     ULONG TcpChecksum:1;
01247     ULONG UdpChecksum:1;
01248   } V6Receive;
01249 } NDIS_TASK_TCP_IP_CHECKSUM, *PNDIS_TASK_TCP_IP_CHECKSUM;
01250 
01251 #define NDIS_TASK_TCP_LARGE_SEND_V0 0
01252 
01253 typedef struct _NDIS_TASK_TCP_LARGE_SEND {
01254   ULONG Version;
01255   ULONG MaxOffLoadSize;
01256   ULONG MinSegmentCount;
01257   BOOLEAN TcpOptions;
01258   BOOLEAN IpOptions;
01259 } NDIS_TASK_TCP_LARGE_SEND, *PNDIS_TASK_TCP_LARGE_SEND;
01260 
01261 typedef struct _NDIS_TASK_IPSEC {
01262   struct {
01263     ULONG AH_ESP_COMBINED;
01264     ULONG TRANSPORT_TUNNEL_COMBINED;
01265     ULONG V4_OPTIONS;
01266     ULONG RESERVED;
01267   } Supported;
01268   struct {
01269     ULONG MD5:1;
01270     ULONG SHA_1:1;
01271     ULONG Transport:1;
01272     ULONG Tunnel:1;
01273     ULONG Send:1;
01274     ULONG Receive:1;
01275   } V4AH;
01276   struct {
01277     ULONG DES:1;
01278     ULONG RESERVED:1;
01279     ULONG TRIPLE_DES:1;
01280     ULONG NULL_ESP:1;
01281     ULONG Transport:1;
01282     ULONG Tunnel:1;
01283     ULONG Send:1;
01284     ULONG Receive:1;
01285   } V4ESP;
01286 } NDIS_TASK_IPSEC, *PNDIS_TASK_IPSEC;
01287 
01288 #endif /* NDIS_LEGACY_DRIVER */
01289 
01290 #define IPSEC_TPT_UDPESP_ENCAPTYPE_IKE                 0x00000001
01291 #define IPSEC_TUN_UDPESP_ENCAPTYPE_IKE                 0x00000002
01292 #define IPSEC_TPTOVERTUN_UDPESP_ENCAPTYPE_IKE          0x00000004
01293 #define IPSEC_TPT_UDPESP_OVER_PURE_TUN_ENCAPTYPE_IKE   0x00000008
01294 #define IPSEC_TPT_UDPESP_ENCAPTYPE_OTHER               0x00000010
01295 #define IPSEC_TUN_UDPESP_ENCAPTYPE_OTHER               0x00000020
01296 #define IPSEC_TPTOVERTUN_UDPESP_ENCAPTYPE_OTHER        0x00000040
01297 #define IPSEC_TPT_UDPESP_OVER_PURE_TUN_ENCAPTYPE_OTHER 0x00000080
01298 
01299 #if NDIS_LEGACY_DRIVER
01300 
01301 /*
01302  * PNDIS_PACKET
01303  * NDIS_GET_ORIGINAL_PACKET(
01304  *   IN PNDIS_PACKET  Packet);
01305  */
01306 #define NDIS_GET_ORIGINAL_PACKET(Packet) \
01307   NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, OriginalPacketInfo)
01308 
01309 /*
01310  * PVOID
01311  * NDIS_GET_PACKET_CANCEL_ID(
01312  *   IN PNDIS_PACKET  Packet);
01313  */
01314 #define NDIS_GET_PACKET_CANCEL_ID(Packet) \
01315   NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, PacketCancelId)
01316 
01317 /*
01318  * PNDIS_PACKET_EXTENSION
01319  * NDIS_PACKET_EXTENSION_FROM_PACKET(
01320  *   IN PNDIS_PACKET  Packet);
01321  */
01322 #define NDIS_PACKET_EXTENSION_FROM_PACKET(Packet) \
01323   ((PNDIS_PACKET_EXTENSION)((PUCHAR)(Packet) \
01324     + (Packet)->Private.NdisPacketOobOffset + sizeof(NDIS_PACKET_OOB_DATA)))
01325 
01326 /*
01327  * PVOID
01328  * NDIS_PER_PACKET_INFO_FROM_PACKET(
01329  *   IN OUT  PNDIS_PACKET  Packet,
01330  *   IN NDIS_PER_PACKET_INFO  InfoType);
01331  */
01332 #define NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, InfoType) \
01333   ((PNDIS_PACKET_EXTENSION)((PUCHAR)(Packet) + (Packet)->Private.NdisPacketOobOffset \
01334     + sizeof(NDIS_PACKET_OOB_DATA)))->NdisPacketInfo[(InfoType)]
01335 
01336 /*
01337  * VOID
01338  * NDIS_SET_ORIGINAL_PACKET(
01339  *   IN OUT  PNDIS_PACKET  Packet,
01340  *   IN PNDIS_PACKET  OriginalPacket);
01341  */
01342 #define NDIS_SET_ORIGINAL_PACKET(Packet, OriginalPacket) \
01343   NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, OriginalPacketInfo) = (OriginalPacket)
01344 
01345 /*
01346  * VOID
01347  * NDIS_SET_PACKET_CANCEL_ID(
01348  *  IN PNDIS_PACKET  Packet
01349  *  IN ULONG_PTR  CancelId);
01350  */
01351 #define NDIS_SET_PACKET_CANCEL_ID(Packet, CancelId) \
01352   NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, PacketCancelId) = (CancelId)
01353 
01354 #define NdisSetPacketCancelId(_Packet, _CancelId) NDIS_SET_PACKET_CANCEL_ID(_Packet, _CancelId)
01355 #define NdisGetPacketCancelId(_Packet) NDIS_GET_PACKET_CANCEL_ID(_Packet)
01356 
01357 #endif /* NDIS_LEGACY_DRIVER */
01358 
01359 #if NDIS_SUPPORT_NDIS6
01360 typedef struct _NDIS_GENERIC_OBJECT {
01361   NDIS_OBJECT_HEADER Header;
01362   PVOID Caller;
01363   PVOID CallersCaller;
01364   PDRIVER_OBJECT DriverObject;
01365 } NDIS_GENERIC_OBJECT, *PNDIS_GENERIC_OBJECT;
01366 #endif
01367 
01368 /* NDIS_TASK_OFFLOAD_HEADER.Version constants */
01369 #define NDIS_TASK_OFFLOAD_VERSION 1
01370 
01371 #define MAX_HASHES                     4
01372 #define TRUNCATED_HASH_LEN             12
01373 
01374 #define CRYPTO_SUCCESS                   0
01375 #define CRYPTO_GENERIC_ERROR             1
01376 #define CRYPTO_TRANSPORT_AH_AUTH_FAILED  2
01377 #define CRYPTO_TRANSPORT_ESP_AUTH_FAILED 3
01378 #define CRYPTO_TUNNEL_AH_AUTH_FAILED     4
01379 #define CRYPTO_TUNNEL_ESP_AUTH_FAILED    5
01380 #define CRYPTO_INVALID_PACKET_SYNTAX     6
01381 #define CRYPTO_INVALID_PROTOCOL          7
01382 
01383 typedef struct _NDIS_TCP_IP_CHECKSUM_PACKET_INFO {
01384   __MINGW_EXTENSION union {
01385     struct {
01386       ULONG NdisPacketChecksumV4:1;
01387       ULONG NdisPacketChecksumV6:1;
01388       ULONG NdisPacketTcpChecksum:1;
01389       ULONG NdisPacketUdpChecksum:1;
01390       ULONG NdisPacketIpChecksum:1;
01391       } Transmit;
01392     struct {
01393       ULONG NdisPacketTcpChecksumFailed:1;
01394       ULONG NdisPacketUdpChecksumFailed:1;
01395       ULONG NdisPacketIpChecksumFailed:1;
01396       ULONG NdisPacketTcpChecksumSucceeded:1;
01397       ULONG NdisPacketUdpChecksumSucceeded:1;
01398       ULONG NdisPacketIpChecksumSucceeded:1;
01399       ULONG NdisPacketLoopback:1;
01400     } Receive;
01401     ULONG Value;
01402   };
01403 } NDIS_TCP_IP_CHECKSUM_PACKET_INFO, *PNDIS_TCP_IP_CHECKSUM_PACKET_INFO;
01404 
01405 typedef struct _NDIS_WAN_CO_FRAGMENT {
01406   ULONG Errors;
01407 } NDIS_WAN_CO_FRAGMENT, *PNDIS_WAN_CO_FRAGMENT;
01408 
01409 typedef struct _NDIS_WAN_FRAGMENT {
01410   UCHAR RemoteAddress[6];
01411   UCHAR LocalAddress[6];
01412 } NDIS_WAN_FRAGMENT, *PNDIS_WAN_FRAGMENT;
01413 
01414 typedef struct _WAN_CO_LINKPARAMS {
01415   ULONG TransmitSpeed;
01416   ULONG ReceiveSpeed;
01417   ULONG SendWindow;
01418 } WAN_CO_LINKPARAMS, *PWAN_CO_LINKPARAMS;
01419 
01420 typedef struct _NDIS_WAN_GET_STATS {
01421   UCHAR LocalAddress[6];
01422   ULONG BytesSent;
01423   ULONG BytesRcvd;
01424   ULONG FramesSent;
01425   ULONG FramesRcvd;
01426   ULONG CRCErrors;
01427   ULONG TimeoutErrors;
01428   ULONG AlignmentErrors;
01429   ULONG SerialOverrunErrors;
01430   ULONG FramingErrors;
01431   ULONG BufferOverrunErrors;
01432   ULONG BytesTransmittedUncompressed;
01433   ULONG BytesReceivedUncompressed;
01434   ULONG BytesTransmittedCompressed;
01435   ULONG BytesReceivedCompressed;
01436 } NDIS_WAN_GET_STATS, *PNDIS_WAN_GET_STATS;
01437 
01438 /* Call Manager */
01439 
01440 typedef VOID
01441 (NTAPI *CM_ACTIVATE_VC_COMPLETE_HANDLER)(
01442   IN NDIS_STATUS  Status,
01443   IN NDIS_HANDLE  CallMgrVcContext,
01444   IN PCO_CALL_PARAMETERS  CallParameters);
01445 
01446 typedef NDIS_STATUS
01447 (NTAPI *CM_ADD_PARTY_HANDLER)(
01448   IN NDIS_HANDLE  CallMgrVcContext,
01449   IN OUT PCO_CALL_PARAMETERS  CallParameters,
01450   IN NDIS_HANDLE  NdisPartyHandle,
01451   OUT PNDIS_HANDLE  CallMgrPartyContext);
01452 
01453 typedef NDIS_STATUS
01454 (NTAPI *CM_CLOSE_AF_HANDLER)(
01455   IN NDIS_HANDLE  CallMgrAfContext);
01456 
01457 typedef NDIS_STATUS
01458 (NTAPI *CM_CLOSE_CALL_HANDLER)(
01459   IN NDIS_HANDLE  CallMgrVcContext,
01460   IN NDIS_HANDLE  CallMgrPartyContext  OPTIONAL,
01461   IN PVOID  CloseData  OPTIONAL,
01462   IN UINT  Size  OPTIONAL);
01463 
01464 typedef NDIS_STATUS
01465 (NTAPI *CM_DEREG_SAP_HANDLER)(
01466   IN NDIS_HANDLE  CallMgrSapContext);
01467 
01468 typedef VOID
01469 (NTAPI *CM_DEACTIVATE_VC_COMPLETE_HANDLER)(
01470     IN NDIS_STATUS  Status,
01471     IN NDIS_HANDLE  CallMgrVcContext);
01472 
01473 typedef NDIS_STATUS
01474 (NTAPI *CM_DROP_PARTY_HANDLER)(
01475   IN NDIS_HANDLE  CallMgrPartyContext,
01476   IN PVOID  CloseData  OPTIONAL,
01477   IN UINT  Size  OPTIONAL);
01478 
01479 typedef VOID
01480 (NTAPI *CM_INCOMING_CALL_COMPLETE_HANDLER)(
01481   IN NDIS_STATUS  Status,
01482   IN NDIS_HANDLE  CallMgrVcContext,
01483   IN PCO_CALL_PARAMETERS  CallParameters);
01484 
01485 typedef NDIS_STATUS
01486 (NTAPI *CM_MAKE_CALL_HANDLER)(
01487   IN NDIS_HANDLE  CallMgrVcContext,
01488   IN OUT PCO_CALL_PARAMETERS  CallParameters,
01489   IN NDIS_HANDLE  NdisPartyHandle   OPTIONAL,
01490   OUT PNDIS_HANDLE  CallMgrPartyContext  OPTIONAL);
01491 
01492 typedef NDIS_STATUS
01493 (NTAPI *CM_MODIFY_CALL_QOS_HANDLER)(
01494   IN NDIS_HANDLE  CallMgrVcContext,
01495   IN PCO_CALL_PARAMETERS  CallParameters);
01496 
01497 typedef NDIS_STATUS
01498 (NTAPI *CM_OPEN_AF_HANDLER)(
01499     IN NDIS_HANDLE  CallMgrBindingContext,
01500     IN PCO_ADDRESS_FAMILY  AddressFamily,
01501     IN NDIS_HANDLE  NdisAfHandle,
01502     OUT PNDIS_HANDLE  CallMgrAfContext);
01503 
01504 typedef NDIS_STATUS
01505 (NTAPI *CM_REG_SAP_HANDLER)(
01506   IN NDIS_HANDLE  CallMgrAfContext,
01507   IN PCO_SAP  Sap,
01508   IN NDIS_HANDLE  NdisSapHandle,
01509   OUT   PNDIS_HANDLE  CallMgrSapContext);
01510 
01511 typedef NDIS_STATUS
01512 (NTAPI *CO_CREATE_VC_HANDLER)(
01513   IN NDIS_HANDLE  ProtocolAfContext,
01514   IN NDIS_HANDLE  NdisVcHandle,
01515   OUT PNDIS_HANDLE  ProtocolVcContext);
01516 
01517 typedef NDIS_STATUS
01518 (NTAPI *CO_DELETE_VC_HANDLER)(
01519   IN NDIS_HANDLE  ProtocolVcContext);
01520 
01521 #define PROTOCOL_RESERVED_SIZE_IN_PACKET (4 * sizeof(PVOID))
01522 
01523 /* Prototypes for NDIS 5.0 protocol characteristics */
01524 
01525 _IRQL_requires_(PASSIVE_LEVEL)
01526 typedef VOID
01527 (NTAPI *CO_SEND_COMPLETE_HANDLER)(
01528   _In_ NDIS_STATUS Status,
01529   _In_ NDIS_HANDLE ProtocolVcContext,
01530   _In_ PNDIS_PACKET Packet);
01531 
01532 _IRQL_requires_max_(DISPATCH_LEVEL)
01533 typedef VOID
01534 (NTAPI *CO_STATUS_HANDLER)(
01535   _In_ NDIS_HANDLE ProtocolBindingContext,
01536   _In_opt_ NDIS_HANDLE ProtocolVcContext,
01537   _In_ NDIS_STATUS GeneralStatus,
01538   _In_ PVOID StatusBuffer,
01539   _In_ UINT StatusBufferSize);
01540 
01541 _IRQL_requires_max_(DISPATCH_LEVEL)
01542 typedef UINT
01543 (NTAPI *CO_RECEIVE_PACKET_HANDLER)(
01544   _In_ NDIS_HANDLE ProtocolBindingContext,
01545   _In_ NDIS_HANDLE ProtocolVcContext,
01546   _In_ PNDIS_PACKET Packet);
01547 
01548 _IRQL_requires_max_(DISPATCH_LEVEL)
01549 typedef NDIS_STATUS
01550 (NTAPI *CO_REQUEST_HANDLER)(
01551   _In_ NDIS_HANDLE ProtocolAfContext,
01552   _In_opt_ NDIS_HANDLE ProtocolVcContext,
01553   _In_opt_ NDIS_HANDLE ProtocolPartyContext,
01554   _Inout_ PNDIS_REQUEST NdisRequest);
01555 
01556 _IRQL_requires_max_(DISPATCH_LEVEL)
01557 typedef VOID
01558 (NTAPI *CO_REQUEST_COMPLETE_HANDLER)(
01559   _In_ NDIS_STATUS Status,
01560   _In_opt_ NDIS_HANDLE ProtocolAfContext,
01561   _In_opt_ NDIS_HANDLE ProtocolVcContext,
01562   _In_opt_ NDIS_HANDLE ProtocolPartyContext,
01563   _In_ PNDIS_REQUEST NdisRequest);
01564 
01565 typedef struct _NDIS_CALL_MANAGER_CHARACTERISTICS {
01566     UCHAR  MajorVersion;
01567     UCHAR  MinorVersion;
01568     USHORT  Filler;
01569     UINT  Reserved;
01570     CO_CREATE_VC_HANDLER  CmCreateVcHandler;
01571     CO_DELETE_VC_HANDLER  CmDeleteVcHandler;
01572     CM_OPEN_AF_HANDLER  CmOpenAfHandler;
01573     CM_CLOSE_AF_HANDLER  CmCloseAfHandler;
01574     CM_REG_SAP_HANDLER  CmRegisterSapHandler;
01575     CM_DEREG_SAP_HANDLER  CmDeregisterSapHandler;
01576     CM_MAKE_CALL_HANDLER  CmMakeCallHandler;
01577     CM_CLOSE_CALL_HANDLER  CmCloseCallHandler;
01578     CM_INCOMING_CALL_COMPLETE_HANDLER  CmIncomingCallCompleteHandler;
01579     CM_ADD_PARTY_HANDLER  CmAddPartyHandler;
01580     CM_DROP_PARTY_HANDLER  CmDropPartyHandler;
01581     CM_ACTIVATE_VC_COMPLETE_HANDLER  CmActivateVcCompleteHandler;
01582     CM_DEACTIVATE_VC_COMPLETE_HANDLER  CmDeactivateVcCompleteHandler;
01583     CM_MODIFY_CALL_QOS_HANDLER  CmModifyCallQoSHandler;
01584     CO_REQUEST_HANDLER  CmRequestHandler;
01585     CO_REQUEST_COMPLETE_HANDLER  CmRequestCompleteHandler;
01586 } NDIS_CALL_MANAGER_CHARACTERISTICS, *PNDIS_CALL_MANAGER_CHARACTERISTICS;
01587 
01588 
01589 
01590 /* Call Manager clients */
01591 
01592 typedef VOID (*CL_OPEN_AF_COMPLETE_HANDLER)(
01593   IN NDIS_STATUS Status,
01594   IN NDIS_HANDLE ProtocolAfContext,
01595   IN NDIS_HANDLE NdisAfHandle);
01596 
01597 typedef VOID
01598 (NTAPI *CL_CLOSE_AF_COMPLETE_HANDLER)(
01599   IN NDIS_STATUS  Status,
01600   IN NDIS_HANDLE  ProtocolAfContext);
01601 
01602 typedef VOID
01603 (NTAPI *CL_REG_SAP_COMPLETE_HANDLER)(
01604   IN NDIS_STATUS  Status,
01605   IN NDIS_HANDLE  ProtocolSapContext,
01606   IN PCO_SAP  Sap,
01607   IN NDIS_HANDLE  NdisSapHandle);
01608 
01609 typedef VOID
01610 (NTAPI *CL_DEREG_SAP_COMPLETE_HANDLER)(
01611   IN NDIS_STATUS  Status,
01612   IN NDIS_HANDLE  ProtocolSapContext);
01613 
01614 typedef VOID
01615 (NTAPI *CL_MAKE_CALL_COMPLETE_HANDLER)(
01616   IN NDIS_STATUS  Status,
01617   IN NDIS_HANDLE  ProtocolVcContext,
01618   IN NDIS_HANDLE  NdisPartyHandle  OPTIONAL,
01619   IN PCO_CALL_PARAMETERS  CallParameters);
01620 
01621 typedef VOID
01622 (NTAPI *CL_MODIFY_CALL_QOS_COMPLETE_HANDLER)(
01623   IN NDIS_STATUS  Status,
01624   IN NDIS_HANDLE  ProtocolVcContext,
01625   IN PCO_CALL_PARAMETERS  CallParameters);
01626 
01627 typedef VOID
01628 (NTAPI *CL_CLOSE_CALL_COMPLETE_HANDLER)(
01629   IN NDIS_STATUS  Status,
01630   IN NDIS_HANDLE  ProtocolVcContext,
01631   IN NDIS_HANDLE  ProtocolPartyContext  OPTIONAL);
01632 
01633 typedef VOID
01634 (NTAPI *CL_ADD_PARTY_COMPLETE_HANDLER)(
01635   IN NDIS_STATUS  Status,
01636   IN NDIS_HANDLE  ProtocolPartyContext,
01637   IN NDIS_HANDLE  NdisPartyHandle,
01638   IN PCO_CALL_PARAMETERS  CallParameters);
01639 
01640 typedef VOID
01641 (NTAPI *CL_DROP_PARTY_COMPLETE_HANDLER)(
01642   IN NDIS_STATUS  Status,
01643   IN NDIS_HANDLE  ProtocolPartyContext);
01644 
01645 typedef NDIS_STATUS
01646 (NTAPI *CL_INCOMING_CALL_HANDLER)(
01647   IN NDIS_HANDLE  ProtocolSapContext,
01648   IN NDIS_HANDLE  ProtocolVcContext,
01649   IN OUT PCO_CALL_PARAMETERS  CallParameters);
01650 
01651 typedef VOID
01652 (NTAPI *CL_INCOMING_CALL_QOS_CHANGE_HANDLER)(
01653   IN NDIS_HANDLE  ProtocolVcContext,
01654   IN PCO_CALL_PARAMETERS  CallParameters);
01655 
01656 typedef VOID
01657 (NTAPI *CL_INCOMING_CLOSE_CALL_HANDLER)(
01658   IN NDIS_STATUS  CloseStatus,
01659   IN NDIS_HANDLE  ProtocolVcContext,
01660   IN PVOID  CloseData  OPTIONAL,
01661   IN UINT  Size  OPTIONAL);
01662 
01663 typedef VOID
01664 (NTAPI *CL_INCOMING_DROP_PARTY_HANDLER)(
01665   IN NDIS_STATUS  DropStatus,
01666   IN NDIS_HANDLE  ProtocolPartyContext,
01667   IN PVOID  CloseData  OPTIONAL,
01668   IN UINT  Size  OPTIONAL);
01669 
01670 typedef VOID
01671 (NTAPI *CL_CALL_CONNECTED_HANDLER)(
01672   IN NDIS_HANDLE  ProtocolVcContext);
01673 
01674 
01675 typedef struct _NDIS_CLIENT_CHARACTERISTICS {
01676   UCHAR  MajorVersion;
01677   UCHAR  MinorVersion;
01678   USHORT  Filler;
01679   UINT  Reserved;
01680   CO_CREATE_VC_HANDLER  ClCreateVcHandler;
01681   CO_DELETE_VC_HANDLER  ClDeleteVcHandler;
01682   CO_REQUEST_HANDLER  ClRequestHandler;
01683   CO_REQUEST_COMPLETE_HANDLER  ClRequestCompleteHandler;
01684   CL_OPEN_AF_COMPLETE_HANDLER  ClOpenAfCompleteHandler;
01685   CL_CLOSE_AF_COMPLETE_HANDLER  ClCloseAfCompleteHandler;
01686   CL_REG_SAP_COMPLETE_HANDLER  ClRegisterSapCompleteHandler;
01687   CL_DEREG_SAP_COMPLETE_HANDLER  ClDeregisterSapCompleteHandler;
01688   CL_MAKE_CALL_COMPLETE_HANDLER  ClMakeCallCompleteHandler;
01689   CL_MODIFY_CALL_QOS_COMPLETE_HANDLER    ClModifyCallQoSCompleteHandler;
01690   CL_CLOSE_CALL_COMPLETE_HANDLER  ClCloseCallCompleteHandler;
01691   CL_ADD_PARTY_COMPLETE_HANDLER  ClAddPartyCompleteHandler;
01692   CL_DROP_PARTY_COMPLETE_HANDLER  ClDropPartyCompleteHandler;
01693   CL_INCOMING_CALL_HANDLER  ClIncomingCallHandler;
01694   CL_INCOMING_CALL_QOS_CHANGE_HANDLER  ClIncomingCallQoSChangeHandler;
01695   CL_INCOMING_CLOSE_CALL_HANDLER  ClIncomingCloseCallHandler;
01696   CL_INCOMING_DROP_PARTY_HANDLER  ClIncomingDropPartyHandler;
01697   CL_CALL_CONNECTED_HANDLER  ClCallConnectedHandler;
01698 } NDIS_CLIENT_CHARACTERISTICS, *PNDIS_CLIENT_CHARACTERISTICS;
01699 
01700 
01701 /* NDIS protocol structures */
01702 
01703 /* Prototypes for NDIS 3.0 protocol characteristics */
01704 
01705 typedef VOID
01706 (NTAPI *OPEN_ADAPTER_COMPLETE_HANDLER)(
01707   _In_ NDIS_HANDLE ProtocolBindingContext,
01708   _In_ NDIS_STATUS Status,
01709   _In_ NDIS_STATUS OpenErrorStatus);
01710 
01711 typedef VOID
01712 (NTAPI *CLOSE_ADAPTER_COMPLETE_HANDLER)(
01713   _In_ NDIS_HANDLE ProtocolBindingContext,
01714   _In_ NDIS_STATUS Status);
01715 
01716 typedef VOID
01717 (NTAPI *RESET_COMPLETE_HANDLER)(
01718   _In_ NDIS_HANDLE ProtocolBindingContext,
01719   _In_ NDIS_STATUS Status);
01720 
01721 typedef VOID
01722 (NTAPI *REQUEST_COMPLETE_HANDLER)(
01723   _In_ NDIS_HANDLE ProtocolBindingContext,
01724   _In_ PNDIS_REQUEST NdisRequest,
01725   _In_ NDIS_STATUS Status);
01726 
01727 typedef VOID
01728 (NTAPI *STATUS_HANDLER)(
01729   _In_ NDIS_HANDLE ProtocolBindingContext,
01730   _In_ NDIS_STATUS GeneralStatus,
01731   _In_ PVOID StatusBuffer,
01732   _In_ UINT StatusBufferSize);
01733 
01734 typedef VOID
01735 (NTAPI *STATUS_COMPLETE_HANDLER)(
01736   _In_ NDIS_HANDLE ProtocolBindingContext);
01737 
01738 typedef VOID
01739 (NTAPI *SEND_COMPLETE_HANDLER)(
01740   _In_ NDIS_HANDLE ProtocolBindingContext,
01741   _In_ PNDIS_PACKET Packet,
01742   _In_ NDIS_STATUS Status);
01743 
01744 typedef VOID
01745 (NTAPI *WAN_SEND_COMPLETE_HANDLER)(
01746   _In_ NDIS_HANDLE ProtocolBindingContext,
01747   _In_ PNDIS_WAN_PACKET Packet,
01748   _In_ NDIS_STATUS Status);
01749 
01750 typedef VOID
01751 (NTAPI *TRANSFER_DATA_COMPLETE_HANDLER)(
01752   _In_ NDIS_HANDLE ProtocolBindingContext,
01753   _In_ PNDIS_PACKET Packet,
01754   _In_ NDIS_STATUS Status,
01755   _In_ UINT BytesTransferred);
01756 
01757 typedef VOID
01758 (NTAPI *WAN_TRANSFER_DATA_COMPLETE_HANDLER)(
01759   VOID);
01760 
01761 typedef NDIS_STATUS
01762 (NTAPI *RECEIVE_HANDLER)(
01763   _In_ NDIS_HANDLE ProtocolBindingContext,
01764   _In_ NDIS_HANDLE MacReceiveContext,
01765   _In_ PVOID HeaderBuffer,
01766   _In_ UINT HeaderBufferSize,
01767   _In_ PVOID LookAheadBuffer,
01768   _In_ UINT LookaheadBufferSize,
01769   _In_ UINT PacketSize);
01770 
01771 typedef NDIS_STATUS
01772 (NTAPI *WAN_RECEIVE_HANDLER)(
01773   _In_ NDIS_HANDLE NdisLinkHandle,
01774   _In_ PUCHAR Packet,
01775   _In_ ULONG PacketSize);
01776 
01777 typedef VOID
01778 (NTAPI *RECEIVE_COMPLETE_HANDLER)(
01779   _In_ NDIS_HANDLE ProtocolBindingContext);
01780 
01781 /* Protocol characteristics for NDIS 3.0 protocols */
01782 
01783 #define NDIS30_PROTOCOL_CHARACTERISTICS_S \
01784   UCHAR  MajorNdisVersion; \
01785   UCHAR  MinorNdisVersion; \
01786   USHORT  Filler; \
01787   _ANONYMOUS_UNION union { \
01788     UINT  Reserved; \
01789     UINT  Flags; \
01790   } DUMMYUNIONNAME; \
01791   OPEN_ADAPTER_COMPLETE_HANDLER  OpenAdapterCompleteHandler; \
01792   CLOSE_ADAPTER_COMPLETE_HANDLER  CloseAdapterCompleteHandler; \
01793   _ANONYMOUS_UNION union { \
01794     SEND_COMPLETE_HANDLER  SendCompleteHandler; \
01795     WAN_SEND_COMPLETE_HANDLER  WanSendCompleteHandler; \
01796   } DUMMYUNIONNAME2; \
01797   _ANONYMOUS_UNION union { \
01798     TRANSFER_DATA_COMPLETE_HANDLER  TransferDataCompleteHandler; \
01799     WAN_TRANSFER_DATA_COMPLETE_HANDLER  WanTransferDataCompleteHandler; \
01800   } DUMMYUNIONNAME3; \
01801   RESET_COMPLETE_HANDLER  ResetCompleteHandler; \
01802   REQUEST_COMPLETE_HANDLER  RequestCompleteHandler; \
01803   _ANONYMOUS_UNION union { \
01804     RECEIVE_HANDLER  ReceiveHandler; \
01805     WAN_RECEIVE_HANDLER  WanReceiveHandler; \
01806   } DUMMYUNIONNAME4; \
01807   RECEIVE_COMPLETE_HANDLER  ReceiveCompleteHandler; \
01808   STATUS_HANDLER  StatusHandler; \
01809   STATUS_COMPLETE_HANDLER  StatusCompleteHandler; \
01810   NDIS_STRING  Name;
01811 
01812 typedef struct _NDIS30_PROTOCOL_CHARACTERISTICS {
01813   NDIS30_PROTOCOL_CHARACTERISTICS_S
01814 } NDIS30_PROTOCOL_CHARACTERISTICS, *PNDIS30_PROTOCOL_CHARACTERISTICS;
01815 
01816 
01817 /* Prototypes for NDIS 4.0 protocol characteristics */
01818 
01819 typedef INT
01820 (NTAPI *RECEIVE_PACKET_HANDLER)(
01821   IN NDIS_HANDLE ProtocolBindingContext,
01822   IN PNDIS_PACKET Packet);
01823 
01824 typedef VOID
01825 (NTAPI *BIND_HANDLER)(
01826   OUT PNDIS_STATUS Status,
01827   IN NDIS_HANDLE BindContext,
01828   IN PNDIS_STRING DeviceName,
01829   IN PVOID SystemSpecific1,
01830   IN PVOID SystemSpecific2);
01831 
01832 typedef VOID
01833 (NTAPI *UNBIND_HANDLER)(
01834   OUT PNDIS_STATUS Status,
01835   IN NDIS_HANDLE ProtocolBindingContext,
01836   IN NDIS_HANDLE UnbindContext);
01837 
01838 typedef NDIS_STATUS
01839 (NTAPI *PNP_EVENT_HANDLER)(
01840   IN NDIS_HANDLE ProtocolBindingContext,
01841   IN PNET_PNP_EVENT NetPnPEvent);
01842 
01843 typedef VOID
01844 (NTAPI *UNLOAD_PROTOCOL_HANDLER)(
01845   VOID);
01846 
01847 /* Protocol characteristics for NDIS 4.0 protocols */
01848 
01849 typedef struct _NDIS40_PROTOCOL_CHARACTERISTICS {
01850   UCHAR MajorNdisVersion;
01851   UCHAR MinorNdisVersion;
01852   USHORT Filler;
01853   __MINGW_EXTENSION union {
01854     UINT Reserved;
01855     UINT Flags;
01856   };
01857   OPEN_ADAPTER_COMPLETE_HANDLER OpenAdapterCompleteHandler;
01858   CLOSE_ADAPTER_COMPLETE_HANDLER CloseAdapterCompleteHandler;
01859   __MINGW_EXTENSION union {
01860     SEND_COMPLETE_HANDLER SendCompleteHandler;
01861     WAN_SEND_COMPLETE_HANDLER WanSendCompleteHandler;
01862   };
01863   __MINGW_EXTENSION union {
01864     TRANSFER_DATA_COMPLETE_HANDLER TransferDataCompleteHandler;
01865     WAN_TRANSFER_DATA_COMPLETE_HANDLER WanTransferDataCompleteHandler;
01866   };
01867   RESET_COMPLETE_HANDLER ResetCompleteHandler;
01868   REQUEST_COMPLETE_HANDLER RequestCompleteHandler;
01869   __MINGW_EXTENSION union {
01870     RECEIVE_HANDLER ReceiveHandler;
01871     WAN_RECEIVE_HANDLER WanReceiveHandler;
01872   };
01873   RECEIVE_COMPLETE_HANDLER ReceiveCompleteHandler;
01874   STATUS_HANDLER StatusHandler;
01875   STATUS_COMPLETE_HANDLER StatusCompleteHandler;
01876   NDIS_STRING Name;
01877   RECEIVE_PACKET_HANDLER ReceivePacketHandler;
01878   BIND_HANDLER BindAdapterHandler;
01879   UNBIND_HANDLER UnbindAdapterHandler;
01880   PNP_EVENT_HANDLER PnPEventHandler;
01881   UNLOAD_PROTOCOL_HANDLER UnloadHandler;
01882 } NDIS40_PROTOCOL_CHARACTERISTICS;
01883 
01884 typedef VOID
01885 (NTAPI PROTCOL_CO_AF_REGISTER_NOTIFY)(
01886   IN NDIS_HANDLE ProtocolBindingContext,
01887   IN PCO_ADDRESS_FAMILY AddressFamily);
01888 typedef PROTCOL_CO_AF_REGISTER_NOTIFY *CO_AF_REGISTER_NOTIFY_HANDLER;
01889 
01890 #if NDIS_LEGACY_PROTOCOL
01891 
01892 typedef struct _NDIS50_PROTOCOL_CHARACTERISTICS {
01893 #ifdef __cplusplus
01894   NDIS40_PROTOCOL_CHARACTERISTICS Ndis40Chars;
01895 #else
01896   NDIS40_PROTOCOL_CHARACTERISTICS;
01897 #endif
01898   PVOID ReservedHandlers[4];
01899   CO_SEND_COMPLETE_HANDLER CoSendCompleteHandler;
01900   CO_STATUS_HANDLER CoStatusHandler;
01901   CO_RECEIVE_PACKET_HANDLER CoReceivePacketHandler;
01902   CO_AF_REGISTER_NOTIFY_HANDLER CoAfRegisterNotifyHandler;
01903 } NDIS50_PROTOCOL_CHARACTERISTICS;
01904 
01905 #if (defined(NDIS50) || defined(NDIS51))
01906 typedef NDIS50_PROTOCOL_CHARACTERISTICS NDIS_PROTOCOL_CHARACTERISTICS;
01907 #else
01908 typedef NDIS40_PROTOCOL_CHARACTERISTICS NDIS_PROTOCOL_CHARACTERISTICS;
01909 #endif
01910 
01911 typedef NDIS_PROTOCOL_CHARACTERISTICS *PNDIS_PROTOCOL_CHARACTERISTICS;
01912 
01913 #endif /* NDIS_LEGACY_PROTOCOL */
01914 
01915 /* Prototypes for NDIS_MINIPORT_CHARACTERISTICS */
01916 
01917 typedef BOOLEAN
01918 (NTAPI *W_CHECK_FOR_HANG_HANDLER)(
01919   _In_ NDIS_HANDLE MiniportAdapterContext);
01920 
01921 typedef VOID
01922 (NTAPI *W_DISABLE_INTERRUPT_HANDLER)(
01923   _In_ NDIS_HANDLE MiniportAdapterContext);
01924 
01925 typedef VOID
01926 (NTAPI *W_ENABLE_INTERRUPT_HANDLER)(
01927   _In_ NDIS_HANDLE MiniportAdapterContext);
01928 
01929 typedef VOID
01930 (NTAPI *W_HALT_HANDLER)(
01931   _In_ NDIS_HANDLE MiniportAdapterContext);
01932 
01933 typedef VOID
01934 (NTAPI *W_HANDLE_INTERRUPT_HANDLER)(
01935   _In_ NDIS_HANDLE MiniportAdapterContext);
01936 
01937 typedef NDIS_STATUS
01938 (NTAPI *W_INITIALIZE_HANDLER)(
01939   _Out_ PNDIS_STATUS OpenErrorStatus,
01940   _Out_ PUINT SelectedMediumIndex,
01941   _In_ PNDIS_MEDIUM MediumArray,
01942   _In_ UINT MediumArraySize,
01943   _In_ NDIS_HANDLE MiniportAdapterContext,
01944   _In_ NDIS_HANDLE WrapperConfigurationContext);
01945 
01946 typedef VOID
01947 (NTAPI *W_ISR_HANDLER)(
01948   _Out_ PBOOLEAN InterruptRecognized,
01949   _Out_ PBOOLEAN QueueMiniportHandleInterrupt,
01950   _In_ NDIS_HANDLE MiniportAdapterContext);
01951 
01952 typedef NDIS_STATUS
01953 (NTAPI *W_QUERY_INFORMATION_HANDLER)(
01954   _In_ NDIS_HANDLE MiniportAdapterContext,
01955   _In_ NDIS_OID Oid,
01956   _In_ PVOID InformationBuffer,
01957   _In_ ULONG InformationBufferLength,
01958   _Out_ PULONG BytesWritten,
01959   _Out_ PULONG BytesNeeded);
01960 
01961 typedef NDIS_STATUS
01962 (NTAPI *W_RECONFIGURE_HANDLER)(
01963   _Out_ PNDIS_STATUS OpenErrorStatus,
01964   _In_ NDIS_HANDLE MiniportAdapterContext,
01965   _In_ NDIS_HANDLE WrapperConfigurationContext);
01966 
01967 typedef NDIS_STATUS
01968 (NTAPI *W_RESET_HANDLER)(
01969   _Out_ PBOOLEAN AddressingReset,
01970   _In_ NDIS_HANDLE MiniportAdapterContext);
01971 
01972 typedef NDIS_STATUS
01973 (NTAPI *W_SEND_HANDLER)(
01974   _In_ NDIS_HANDLE MiniportAdapterContext,
01975   _In_ PNDIS_PACKET Packet,
01976   _In_ UINT Flags);
01977 
01978 typedef NDIS_STATUS
01979 (NTAPI *WM_SEND_HANDLER)(
01980   _In_ NDIS_HANDLE MiniportAdapterContext,
01981   _In_ NDIS_HANDLE NdisLinkHandle,
01982   _In_ PNDIS_WAN_PACKET Packet);
01983 
01984 typedef NDIS_STATUS
01985 (NTAPI *W_SET_INFORMATION_HANDLER)(
01986   _In_ NDIS_HANDLE MiniportAdapterContext,
01987   _In_ NDIS_OID Oid,
01988   _In_ PVOID InformationBuffer,
01989   _In_ ULONG InformationBufferLength,
01990   _Out_ PULONG BytesRead,
01991   _Out_ PULONG BytesNeeded);
01992 
01993 typedef NDIS_STATUS
01994 (NTAPI *W_TRANSFER_DATA_HANDLER)(
01995   _Out_ PNDIS_PACKET Packet,
01996   _Out_ PUINT BytesTransferred,
01997   _In_ NDIS_HANDLE MiniportAdapterContext,
01998   _In_ NDIS_HANDLE MiniportReceiveContext,
01999   _In_ UINT ByteOffset,
02000   _In_ UINT BytesToTransfer);
02001 
02002 typedef NDIS_STATUS
02003 (NTAPI *WM_TRANSFER_DATA_HANDLER)(VOID);
02004 
02005 typedef VOID
02006 (NTAPI *ADAPTER_SHUTDOWN_HANDLER)(
02007   _In_ PVOID ShutdownContext);
02008 
02009 typedef VOID
02010 (NTAPI *W_RETURN_PACKET_HANDLER)(
02011   _In_ NDIS_HANDLE MiniportAdapterContext,
02012   _In_ PNDIS_PACKET Packet);
02013 
02014 typedef VOID
02015 (NTAPI *W_SEND_PACKETS_HANDLER)(
02016   _In_ NDIS_HANDLE MiniportAdapterContext,
02017   _In_ PPNDIS_PACKET PacketArray,
02018   _In_ UINT NumberOfPackets);
02019 
02020 typedef VOID
02021 (NTAPI *W_ALLOCATE_COMPLETE_HANDLER)(
02022   _In_ NDIS_HANDLE MiniportAdapterContext,
02023   _In_ PVOID VirtualAddress,
02024   _In_ PNDIS_PHYSICAL_ADDRESS PhysicalAddress,
02025   _In_ ULONG Length,
02026   _In_ PVOID Context);
02027 
02028 /* NDIS structures available only to miniport drivers */
02029 
02030 #define NDIS30_MINIPORT_CHARACTERISTICS_S \
02031   UCHAR  MajorNdisVersion; \
02032   UCHAR  MinorNdisVersion; \
02033   UINT  Reserved; \
02034   W_CHECK_FOR_HANG_HANDLER  CheckForHangHandler; \
02035   W_DISABLE_INTERRUPT_HANDLER  DisableInterruptHandler; \
02036   W_ENABLE_INTERRUPT_HANDLER  EnableInterruptHandler; \
02037   W_HALT_HANDLER  HaltHandler; \
02038   W_HANDLE_INTERRUPT_HANDLER  HandleInterruptHandler; \
02039   W_INITIALIZE_HANDLER  InitializeHandler; \
02040   W_ISR_HANDLER  ISRHandler; \
02041   W_QUERY_INFORMATION_HANDLER  QueryInformationHandler; \
02042   W_RECONFIGURE_HANDLER  ReconfigureHandler; \
02043   W_RESET_HANDLER  ResetHandler; \
02044   W_SEND_HANDLER  SendHandler; \
02045   W_SET_INFORMATION_HANDLER  SetInformationHandler; \
02046   W_TRANSFER_DATA_HANDLER  TransferDataHandler;
02047 
02048 typedef struct _NDIS30_MINIPORT_CHARACTERISTICS {
02049   NDIS30_MINIPORT_CHARACTERISTICS_S
02050 } NDIS30_MINIPORT_CHARACTERISTICS, *PSNDIS30_MINIPORT_CHARACTERISTICS;
02051 
02052 #ifdef __cplusplus
02053 
02054 #define NDIS40_MINIPORT_CHARACTERISTICS_S \
02055   NDIS30_MINIPORT_CHARACTERISTICS  Ndis30Chars; \
02056   W_RETURN_PACKET_HANDLER  ReturnPacketHandler; \
02057   W_SEND_PACKETS_HANDLER  SendPacketsHandler; \
02058   W_ALLOCATE_COMPLETE_HANDLER  AllocateCompleteHandler;
02059 
02060 #else /* !__cplusplus */
02061 
02062 #define NDIS40_MINIPORT_CHARACTERISTICS_S \
02063   NDIS30_MINIPORT_CHARACTERISTICS_S \
02064   W_RETURN_PACKET_HANDLER  ReturnPacketHandler; \
02065   W_SEND_PACKETS_HANDLER  SendPacketsHandler; \
02066   W_ALLOCATE_COMPLETE_HANDLER  AllocateCompleteHandler;
02067 
02068 #endif /* !__cplusplus */
02069 
02070 typedef struct _NDIS40_MINIPORT_CHARACTERISTICS {
02071   NDIS40_MINIPORT_CHARACTERISTICS_S
02072 } NDIS40_MINIPORT_CHARACTERISTICS, *PNDIS40_MINIPORT_CHARACTERISTICS;
02073 
02074 /* Extensions for NDIS 5.0 miniports */
02075 
02076 _IRQL_requires_max_(DISPATCH_LEVEL)
02077 _Function_class_(MINIPORT_CO_CREATE_VC)
02078 typedef NDIS_STATUS
02079 (NTAPI MINIPORT_CO_CREATE_VC)(
02080   _In_ NDIS_HANDLE MiniportAdapterContext,
02081   _In_ NDIS_HANDLE NdisVcHandle,
02082   _Out_ PNDIS_HANDLE MiniportVcContext);
02083 typedef MINIPORT_CO_CREATE_VC *W_CO_CREATE_VC_HANDLER;
02084 
02085 _IRQL_requires_max_(DISPATCH_LEVEL)
02086 _Function_class_(MINIPORT_CO_DELETE_VC)
02087 typedef NDIS_STATUS
02088 (NTAPI MINIPORT_CO_DELETE_VC)(
02089   _In_ NDIS_HANDLE MiniportVcContext);
02090 typedef MINIPORT_CO_DELETE_VC *W_CO_DELETE_VC_HANDLER;
02091 
02092 _IRQL_requires_max_(DISPATCH_LEVEL)
02093 _Function_class_(MINIPORT_CO_ACTIVATE_VC)
02094 typedef NDIS_STATUS
02095 (NTAPI MINIPORT_CO_ACTIVATE_VC)(
02096   _In_ NDIS_HANDLE MiniportVcContext,
02097   _Inout_ PCO_CALL_PARAMETERS CallParameters);
02098 typedef MINIPORT_CO_ACTIVATE_VC *W_CO_ACTIVATE_VC_HANDLER;
02099 
02100 _IRQL_requires_max_(DISPATCH_LEVEL)
02101 _Function_class_(MINIPORT_CO_DEACTIVATE_VC)
02102 typedef NDIS_STATUS
02103 (NTAPI MINIPORT_CO_DEACTIVATE_VC)(
02104   _In_ NDIS_HANDLE MiniportVcContext);
02105 typedef MINIPORT_CO_DEACTIVATE_VC *W_CO_DEACTIVATE_VC_HANDLER;
02106 
02107 typedef VOID
02108 (NTAPI *W_CO_SEND_PACKETS_HANDLER)(
02109   _In_ NDIS_HANDLE MiniportVcContext,
02110   _In_ PPNDIS_PACKET PacketArray,
02111   _In_ UINT NumberOfPackets);
02112 
02113 typedef NDIS_STATUS
02114 (NTAPI *W_CO_REQUEST_HANDLER)(
02115   _In_ NDIS_HANDLE MiniportAdapterContext,
02116   _In_opt_ NDIS_HANDLE MiniportVcContext,
02117   _Inout_ PNDIS_REQUEST NdisRequest);
02118 
02119 #ifdef __cplusplus
02120 
02121 #define NDIS50_MINIPORT_CHARACTERISTICS_S \
02122   NDIS40_MINIPORT_CHARACTERISTICS  Ndis40Chars; \
02123   W_CO_CREATE_VC_HANDLER  CoCreateVcHandler; \
02124   W_CO_DELETE_VC_HANDLER  CoDeleteVcHandler; \
02125   W_CO_ACTIVATE_VC_HANDLER  CoActivateVcHandler; \
02126   W_CO_DEACTIVATE_VC_HANDLER  CoDeactivateVcHandler; \
02127   W_CO_SEND_PACKETS_HANDLER  CoSendPacketsHandler; \
02128   W_CO_REQUEST_HANDLER  CoRequestHandler;
02129 
02130 #else /* !__cplusplus */
02131 
02132 #define NDIS50_MINIPORT_CHARACTERISTICS_S \
02133   NDIS40_MINIPORT_CHARACTERISTICS_S \
02134   W_CO_CREATE_VC_HANDLER  CoCreateVcHandler; \
02135   W_CO_DELETE_VC_HANDLER  CoDeleteVcHandler; \
02136   W_CO_ACTIVATE_VC_HANDLER  CoActivateVcHandler; \
02137   W_CO_DEACTIVATE_VC_HANDLER  CoDeactivateVcHandler; \
02138   W_CO_SEND_PACKETS_HANDLER  CoSendPacketsHandler; \
02139   W_CO_REQUEST_HANDLER  CoRequestHandler;
02140 
02141 #endif /* !__cplusplus */
02142 
02143 typedef struct _NDIS50_MINIPORT_CHARACTERISTICS {
02144    NDIS50_MINIPORT_CHARACTERISTICS_S
02145 } NDIS50_MINIPORT_CHARACTERISTICS, *PSNDIS50_MINIPORT_CHARACTERISTICS;
02146 
02147 /* Extensions for NDIS 5.1 miniports */
02148 
02149 typedef VOID
02150 (NTAPI *W_CANCEL_SEND_PACKETS_HANDLER)(
02151   _In_ NDIS_HANDLE MiniportAdapterContext,
02152   _In_ PVOID CancelId);
02153 
02154 typedef VOID
02155 (NTAPI *W_PNP_EVENT_NOTIFY_HANDLER)(
02156   _In_ NDIS_HANDLE MiniportAdapterContext,
02157   _In_ NDIS_DEVICE_PNP_EVENT PnPEvent,
02158   _In_ PVOID InformationBuffer,
02159   _In_ ULONG InformationBufferLength);
02160 
02161 typedef VOID
02162 (NTAPI *W_MINIPORT_SHUTDOWN_HANDLER)(
02163   _In_ PVOID ShutdownContext);
02164 
02165 #ifdef __cplusplus
02166 
02167 #define NDIS51_MINIPORT_CHARACTERISTICS_S \
02168   NDIS50_MINIPORT_CHARACTERISTICS  Ndis50Chars; \
02169   W_CANCEL_SEND_PACKETS_HANDLER  CancelSendPacketsHandler; \
02170   W_PNP_EVENT_NOTIFY_HANDLER  PnPEventNotifyHandler; \
02171   W_MINIPORT_SHUTDOWN_HANDLER  AdapterShutdownHandler;
02172 
02173 #else
02174 
02175 #define NDIS51_MINIPORT_CHARACTERISTICS_S \
02176   NDIS50_MINIPORT_CHARACTERISTICS_S \
02177   W_CANCEL_SEND_PACKETS_HANDLER  CancelSendPacketsHandler; \
02178   W_PNP_EVENT_NOTIFY_HANDLER  PnPEventNotifyHandler; \
02179   W_MINIPORT_SHUTDOWN_HANDLER  AdapterShutdownHandler;
02180 
02181 #endif
02182 
02183 typedef struct _NDIS51_MINIPORT_CHARACTERISTICS {
02184   NDIS51_MINIPORT_CHARACTERISTICS_S
02185 } NDIS51_MINIPORT_CHARACTERISTICS, *PSNDIS51_MINIPORT_CHARACTERISTICS;
02186 
02187 #if defined(NDIS51_MINIPORT)
02188 typedef struct _NDIS_MINIPORT_CHARACTERISTICS {
02189   NDIS51_MINIPORT_CHARACTERISTICS_S
02190 } NDIS_MINIPORT_CHARACTERISTICS, *PNDIS_MINIPORT_CHARACTERISTICS;
02191 #elif defined(NDIS50_MINIPORT)
02192 typedef struct _NDIS_MINIPORT_CHARACTERISTICS {
02193   NDIS50_MINIPORT_CHARACTERISTICS_S
02194 } NDIS_MINIPORT_CHARACTERISTICS, *PNDIS_MINIPORT_CHARACTERISTICS;
02195 #elif defined(NDIS40_MINIPORT)
02196 typedef struct _NDIS_MINIPORT_CHARACTERISTICS {
02197   NDIS40_MINIPORT_CHARACTERISTICS_S
02198 } NDIS_MINIPORT_CHARACTERISTICS, *PNDIS_MINIPORT_CHARACTERISTICS;
02199 #else /* NDIS30 */
02200 typedef struct _NDIS_MINIPORT_CHARACTERISTICS {
02201   NDIS30_MINIPORT_CHARACTERISTICS_S
02202 } NDIS_MINIPORT_CHARACTERISTICS, *PNDIS_MINIPORT_CHARACTERISTICS;
02203 #endif
02204 
02205 typedef struct _NDIS_MINIPORT_INTERRUPT {
02206   PKINTERRUPT InterruptObject;
02207   KSPIN_LOCK DpcCountLock;
02208   PVOID Reserved;
02209   W_ISR_HANDLER MiniportIsr;
02210   W_HANDLE_INTERRUPT_HANDLER MiniportDpc;
02211   KDPC InterruptDpc;
02212   PNDIS_MINIPORT_BLOCK Miniport;
02213   UCHAR DpcCount;
02214   BOOLEAN Filler1;
02215   KEVENT DpcsCompletedEvent;
02216   BOOLEAN SharedInterrupt;
02217   BOOLEAN IsrRequested;
02218 } NDIS_MINIPORT_INTERRUPT, *PNDIS_MINIPORT_INTERRUPT;
02219 
02220 /* Structures available only to full MAC drivers */
02221 
02222 typedef BOOLEAN
02223 (NTAPI *PNDIS_INTERRUPT_SERVICE)(
02224   IN PVOID  InterruptContext);
02225 
02226 typedef VOID
02227 (NTAPI *PNDIS_DEFERRED_PROCESSING)(
02228   IN PVOID  SystemSpecific1,
02229   IN PVOID  InterruptContext,
02230   IN PVOID  SystemSpecific2,
02231   IN PVOID  SystemSpecific3);
02232 
02233 typedef struct _NDIS_WRAPPER_HANDLE NDIS_WRAPPER_HANDLE, *PNDIS_WRAPPER_HANDLE;
02234 typedef struct _NDIS_PROTOCOL_BLOCK NDIS_PROTOCOL_BLOCK, *PNDIS_PROTOCOL_BLOCK;
02235 typedef struct _NDIS_OPEN_BLOCK NDIS_OPEN_BLOCK, *PNDIS_OPEN_BLOCK;
02236 typedef struct _NDIS_M_DRIVER_BLOCK NDIS_M_DRIVER_BLOCK, *PNDIS_M_DRIVER_BLOCK;
02237 typedef struct _NDIS_OFFLOAD NDIS_OFFLOAD, *PNDIS_OFFLOAD;
02238 typedef struct _NDIS_AF_LIST NDIS_AF_LIST, *PNDIS_AF_LIST;
02239 typedef struct _X_FILTER ETH_FILTER, *PETH_FILTER;
02240 #if NDIS_SUPPORT_NDIS6
02241 typedef USHORT NET_FRAME_TYPE, *PNET_FRAME_TYPE;
02242 #endif
02243 
02244 typedef struct _NDIS_MINIPORT_TIMER {
02245   KTIMER  Timer;
02246   KDPC  Dpc;
02247   PNDIS_TIMER_FUNCTION  MiniportTimerFunction;
02248   PVOID  MiniportTimerContext;
02249   PNDIS_MINIPORT_BLOCK  Miniport;
02250   struct _NDIS_MINIPORT_TIMER  *NextDeferredTimer;
02251 } NDIS_MINIPORT_TIMER, *PNDIS_MINIPORT_TIMER;
02252 
02253 typedef struct _NDIS_INTERRUPT {
02254   PKINTERRUPT  InterruptObject;
02255   KSPIN_LOCK  DpcCountLock;
02256   PNDIS_INTERRUPT_SERVICE  MacIsr;
02257   PNDIS_DEFERRED_PROCESSING  MacDpc;
02258   KDPC  InterruptDpc;
02259   PVOID  InterruptContext;
02260   UCHAR  DpcCount;
02261   BOOLEAN    Removing;
02262   KEVENT  DpcsCompletedEvent;
02263 } NDIS_INTERRUPT, *PNDIS_INTERRUPT;
02264 
02265 
02266 typedef enum _NDIS_WORK_ITEM_TYPE {
02267   NdisWorkItemRequest,
02268   NdisWorkItemSend,
02269   NdisWorkItemReturnPackets,
02270   NdisWorkItemResetRequested,
02271   NdisWorkItemResetInProgress,
02272   NdisWorkItemHalt,
02273   NdisWorkItemSendLoopback,
02274   NdisWorkItemMiniportCallback,
02275   NdisMaxWorkItems
02276 } NDIS_WORK_ITEM_TYPE, *PNDIS_WORK_ITEM_TYPE;
02277 
02278 #define NUMBER_OF_WORK_ITEM_TYPES         NdisMaxWorkItems
02279 #define NUMBER_OF_SINGLE_WORK_ITEMS       6
02280 
02281 typedef struct _NDIS_MINIPORT_WORK_ITEM {
02282     SINGLE_LIST_ENTRY  Link;
02283     NDIS_WORK_ITEM_TYPE  WorkItemType;
02284     PVOID  WorkItemContext;
02285 } NDIS_MINIPORT_WORK_ITEM, *PNDIS_MINIPORT_WORK_ITEM;
02286 
02287 struct _NDIS_WORK_ITEM;
02288 typedef VOID (*NDIS_PROC)(struct _NDIS_WORK_ITEM *, PVOID);
02289 
02290 typedef struct _NDIS_WORK_ITEM {
02291   PVOID Context;
02292   NDIS_PROC Routine;
02293   UCHAR WrapperReserved[8*sizeof(PVOID)];
02294 } NDIS_WORK_ITEM, *PNDIS_WORK_ITEM;
02295 
02296 typedef struct _NDIS_BIND_PATHS {
02297     UINT  Number;
02298     NDIS_STRING  Paths[1];
02299 } NDIS_BIND_PATHS, *PNDIS_BIND_PATHS;
02300 
02301 
02302 typedef VOID
02303 (NTAPI *ETH_RCV_COMPLETE_HANDLER)(
02304   _In_ PETH_FILTER Filter);
02305 
02306 typedef VOID
02307 (NTAPI *ETH_RCV_INDICATE_HANDLER)(
02308   _In_ PETH_FILTER Filter,
02309   _In_ NDIS_HANDLE MacReceiveContext,
02310   _In_ PCHAR Address,
02311   _In_ PVOID HeaderBuffer,
02312   _In_ UINT HeaderBufferSize,
02313   _In_ PVOID LookaheadBuffer,
02314   _In_ UINT LookaheadBufferSize,
02315   _In_ UINT PacketSize);
02316 
02317 typedef VOID
02318 (NTAPI *FDDI_RCV_COMPLETE_HANDLER)(
02319   IN PFDDI_FILTER  Filter);
02320 
02321 typedef VOID
02322 (NTAPI *FDDI_RCV_INDICATE_HANDLER)(
02323   IN PFDDI_FILTER  Filter,
02324   IN NDIS_HANDLE  MacReceiveContext,
02325   IN PCHAR  Address,
02326   IN UINT  AddressLength,
02327   IN PVOID  HeaderBuffer,
02328   IN UINT  HeaderBufferSize,
02329   IN PVOID  LookaheadBuffer,
02330   IN UINT  LookaheadBufferSize,
02331   IN UINT  PacketSize);
02332 
02333 typedef VOID
02334 (NTAPI *FILTER_PACKET_INDICATION_HANDLER)(
02335   _In_ NDIS_HANDLE Miniport,
02336   _In_ PPNDIS_PACKET PacketArray,
02337   _In_ UINT NumberOfPackets);
02338 
02339 typedef VOID
02340 (NTAPI *TR_RCV_COMPLETE_HANDLER)(
02341   _In_ PTR_FILTER Filter);
02342 
02343 typedef VOID
02344 (NTAPI *TR_RCV_INDICATE_HANDLER)(
02345   _In_ PTR_FILTER Filter,
02346   _In_ NDIS_HANDLE MacReceiveContext,
02347   _In_ PVOID HeaderBuffer,
02348   _In_ UINT HeaderBufferSize,
02349   _In_ PVOID LookaheadBuffer,
02350   _In_ UINT LookaheadBufferSize,
02351   _In_ UINT PacketSize);
02352 
02353 typedef VOID
02354 (NTAPI *WAN_RCV_COMPLETE_HANDLER)(
02355   _In_ NDIS_HANDLE MiniportAdapterHandle,
02356   _In_ NDIS_HANDLE NdisLinkContext);
02357 
02358 typedef VOID
02359 (NTAPI *WAN_RCV_HANDLER)(
02360   _Out_ PNDIS_STATUS Status,
02361   _In_ NDIS_HANDLE MiniportAdapterHandle,
02362   _In_ NDIS_HANDLE NdisLinkContext,
02363   _In_ PUCHAR Packet,
02364   _In_ ULONG PacketSize);
02365 
02366 typedef VOID
02367 (FASTCALL *NDIS_M_DEQUEUE_WORK_ITEM)(
02368   IN PNDIS_MINIPORT_BLOCK  Miniport,
02369   IN NDIS_WORK_ITEM_TYPE  WorkItemType,
02370   OUT PVOID  *WorkItemContext);
02371 
02372 typedef NDIS_STATUS
02373 (FASTCALL *NDIS_M_QUEUE_NEW_WORK_ITEM)(
02374   IN PNDIS_MINIPORT_BLOCK  Miniport,
02375   IN NDIS_WORK_ITEM_TYPE  WorkItemType,
02376   IN PVOID  WorkItemContext);
02377 
02378 typedef NDIS_STATUS
02379 (FASTCALL *NDIS_M_QUEUE_WORK_ITEM)(
02380   IN PNDIS_MINIPORT_BLOCK  Miniport,
02381   IN NDIS_WORK_ITEM_TYPE  WorkItemType,
02382   IN PVOID  WorkItemContext);
02383 
02384 typedef VOID
02385 (NTAPI *NDIS_M_REQ_COMPLETE_HANDLER)(
02386   _In_ NDIS_HANDLE MiniportAdapterHandle,
02387   _In_ NDIS_STATUS Status);
02388 
02389 typedef VOID
02390 (NTAPI *NDIS_M_RESET_COMPLETE_HANDLER)(
02391   _In_ NDIS_HANDLE MiniportAdapterHandle,
02392   _In_ NDIS_STATUS Status,
02393   _In_ BOOLEAN AddressingReset);
02394 
02395 typedef VOID
02396 (NTAPI *NDIS_M_SEND_COMPLETE_HANDLER)(
02397   _In_ NDIS_HANDLE MiniportAdapterHandle,
02398   _In_ PNDIS_PACKET Packet,
02399   _In_ NDIS_STATUS Status);
02400 
02401 typedef VOID
02402 (NTAPI *NDIS_M_SEND_RESOURCES_HANDLER)(
02403   _In_ NDIS_HANDLE MiniportAdapterHandle);
02404 
02405 typedef BOOLEAN
02406 (FASTCALL *NDIS_M_START_SENDS)(
02407   _In_ PNDIS_MINIPORT_BLOCK Miniport);
02408 
02409 typedef VOID
02410 (NTAPI *NDIS_M_STATUS_HANDLER)(
02411   _In_ NDIS_HANDLE MiniportHandle,
02412   _In_ NDIS_STATUS GeneralStatus,
02413   _In_ PVOID StatusBuffer,
02414   _In_ UINT StatusBufferSize);
02415 
02416 typedef VOID
02417 (NTAPI *NDIS_M_STS_COMPLETE_HANDLER)(
02418   _In_ NDIS_HANDLE MiniportAdapterHandle);
02419 
02420 typedef VOID
02421 (NTAPI *NDIS_M_TD_COMPLETE_HANDLER)(
02422   _In_ NDIS_HANDLE MiniportAdapterHandle,
02423   _In_ PNDIS_PACKET Packet,
02424   _In_ NDIS_STATUS Status,
02425   _In_ UINT BytesTransferred);
02426 
02427 typedef VOID (NTAPI *NDIS_WM_SEND_COMPLETE_HANDLER)(
02428   _In_ NDIS_HANDLE MiniportAdapterHandle,
02429   _In_ PVOID Packet,
02430   _In_ NDIS_STATUS Status);
02431 
02432 
02433 #if ARCNET
02434 
02435 #define ARC_SEND_BUFFERS                  8
02436 #define ARC_HEADER_SIZE                   4
02437 
02438 typedef struct _NDIS_ARC_BUF {
02439   NDIS_HANDLE  ArcnetBufferPool;
02440   PUCHAR  ArcnetLookaheadBuffer;
02441   UINT  NumFree;
02442   ARC_BUFFER_LIST ArcnetBuffers[ARC_SEND_BUFFERS];
02443 } NDIS_ARC_BUF, *PNDIS_ARC_BUF;
02444 
02445 #endif /* ARCNET */
02446 
02447 typedef struct _NDIS_LOG {
02448   PNDIS_MINIPORT_BLOCK  Miniport;
02449   KSPIN_LOCK  LogLock;
02450   PIRP  Irp;
02451   UINT  TotalSize;
02452   UINT  CurrentSize;
02453   UINT  InPtr;
02454   UINT  OutPtr;
02455   UCHAR  LogBuf[1];
02456 } NDIS_LOG, *PNDIS_LOG;
02457 
02458 #if ARCNET
02459 #define FILTERDBS_ARCNET_S \
02460   PARC_FILTER  ArcDB;
02461 #else /* !ARCNET */
02462 #define FILTERDBS_ARCNET_S \
02463   PVOID  XXXDB;
02464 #endif /* !ARCNET */
02465 
02466 #define FILTERDBS_S \
02467   _ANONYMOUS_UNION union { \
02468     PETH_FILTER  EthDB; \
02469     PNULL_FILTER  NullDB; \
02470   } DUMMYUNIONNAME; \
02471   PTR_FILTER  TrDB; \
02472   PFDDI_FILTER  FddiDB; \
02473   FILTERDBS_ARCNET_S
02474 
02475 typedef struct _FILTERDBS {
02476   FILTERDBS_S
02477 } FILTERDBS, *PFILTERDBS;
02478 
02479 struct _NDIS_MINIPORT_BLOCK {
02480   NDIS_OBJECT_HEADER Header;
02481   PNDIS_MINIPORT_BLOCK  NextMiniport;
02482   PNDIS_M_DRIVER_BLOCK  DriverHandle;
02483   NDIS_HANDLE  MiniportAdapterContext;
02484   UNICODE_STRING  MiniportName;
02485   PNDIS_BIND_PATHS  BindPaths;
02486   NDIS_HANDLE  OpenQueue;
02487   REFERENCE  ShortRef;
02488   NDIS_HANDLE  DeviceContext;
02489   UCHAR  Padding1;
02490   UCHAR  LockAcquired;
02491   UCHAR  PmodeOpens;
02492   UCHAR  AssignedProcessor;
02493   KSPIN_LOCK  Lock;
02494   PNDIS_REQUEST  MediaRequest;
02495   PNDIS_MINIPORT_INTERRUPT  Interrupt;
02496   ULONG  Flags;
02497   ULONG  PnPFlags;
02498   LIST_ENTRY  PacketList;
02499   PNDIS_PACKET  FirstPendingPacket;
02500   PNDIS_PACKET  ReturnPacketsQueue;
02501   ULONG  RequestBuffer;
02502   PVOID  SetMCastBuffer;
02503   PNDIS_MINIPORT_BLOCK  PrimaryMiniport;
02504   PVOID  WrapperContext;
02505   PVOID  BusDataContext;
02506   ULONG  PnPCapabilities;
02507   PCM_RESOURCE_LIST  Resources;
02508   NDIS_TIMER  WakeUpDpcTimer;
02509   UNICODE_STRING  BaseName;
02510   UNICODE_STRING  SymbolicLinkName;
02511   ULONG  CheckForHangSeconds;
02512   USHORT  CFHangTicks;
02513   USHORT  CFHangCurrentTick;
02514   NDIS_STATUS  ResetStatus;
02515   NDIS_HANDLE  ResetOpen;
02516   FILTERDBS_S
02517   FILTER_PACKET_INDICATION_HANDLER  PacketIndicateHandler;
02518   NDIS_M_SEND_COMPLETE_HANDLER  SendCompleteHandler;
02519   NDIS_M_SEND_RESOURCES_HANDLER  SendResourcesHandler;
02520   NDIS_M_RESET_COMPLETE_HANDLER  ResetCompleteHandler;
02521   NDIS_MEDIUM  MediaType;
02522   ULONG  BusNumber;
02523   NDIS_INTERFACE_TYPE  BusType;
02524   NDIS_INTERFACE_TYPE  AdapterType;
02525   PDEVICE_OBJECT  DeviceObject;
02526   PDEVICE_OBJECT  PhysicalDeviceObject;
02527   PDEVICE_OBJECT  NextDeviceObject;
02528   PMAP_REGISTER_ENTRY  MapRegisters;
02529   PNDIS_AF_LIST  CallMgrAfList;
02530   PVOID  MiniportThread;
02531   PVOID  SetInfoBuf;
02532   USHORT  SetInfoBufLen;
02533   USHORT  MaxSendPackets;
02534   NDIS_STATUS  FakeStatus;
02535   PVOID  LockHandler;
02536   PUNICODE_STRING  pAdapterInstanceName;
02537   PNDIS_MINIPORT_TIMER  TimerQueue;
02538   UINT  MacOptions;
02539   PNDIS_REQUEST  PendingRequest;
02540   UINT  MaximumLongAddresses;
02541   UINT  MaximumShortAddresses;
02542   UINT  CurrentLookahead;
02543   UINT  MaximumLookahead;
02544   W_HANDLE_INTERRUPT_HANDLER  HandleInterruptHandler;
02545   W_DISABLE_INTERRUPT_HANDLER  DisableInterruptHandler;
02546   W_ENABLE_INTERRUPT_HANDLER  EnableInterruptHandler;
02547   W_SEND_PACKETS_HANDLER  SendPacketsHandler;
02548   NDIS_M_START_SENDS  DeferredSendHandler;
02549   ETH_RCV_INDICATE_HANDLER  EthRxIndicateHandler;
02550   TR_RCV_INDICATE_HANDLER  TrRxIndicateHandler;
02551   FDDI_RCV_INDICATE_HANDLER  FddiRxIndicateHandler;
02552   ETH_RCV_COMPLETE_HANDLER  EthRxCompleteHandler;
02553   TR_RCV_COMPLETE_HANDLER  TrRxCompleteHandler;
02554   FDDI_RCV_COMPLETE_HANDLER  FddiRxCompleteHandler;
02555   NDIS_M_STATUS_HANDLER  StatusHandler;
02556   NDIS_M_STS_COMPLETE_HANDLER  StatusCompleteHandler;
02557   NDIS_M_TD_COMPLETE_HANDLER  TDCompleteHandler;
02558   NDIS_M_REQ_COMPLETE_HANDLER  QueryCompleteHandler;
02559   NDIS_M_REQ_COMPLETE_HANDLER  SetCompleteHandler;
02560   NDIS_WM_SEND_COMPLETE_HANDLER  WanSendCompleteHandler;
02561   WAN_RCV_HANDLER  WanRcvHandler;
02562   WAN_RCV_COMPLETE_HANDLER  WanRcvCompleteHandler;
02563 #if defined(NDIS_WRAPPER)
02564   PNDIS_MINIPORT_BLOCK  NextGlobalMiniport;
02565   SINGLE_LIST_ENTRY  WorkQueue[NUMBER_OF_WORK_ITEM_TYPES];
02566   SINGLE_LIST_ENTRY  SingleWorkItems[NUMBER_OF_SINGLE_WORK_ITEMS];
02567   UCHAR  SendFlags;
02568   UCHAR  TrResetRing;
02569   UCHAR  ArcnetAddress;
02570   UCHAR  XState;
02571   _ANONYMOUS_UNION union {
02572 #if ARCNET
02573     PNDIS_ARC_BUF  ArcBuf;
02574 #endif
02575     PVOID  BusInterface;
02576   } DUMMYUNIONNAME;
02577   PNDIS_LOG  Log;
02578   ULONG  SlotNumber;
02579   PCM_RESOURCE_LIST  AllocatedResources;
02580   PCM_RESOURCE_LIST  AllocatedResourcesTranslated;
02581   SINGLE_LIST_ENTRY  PatternList;
02582   NDIS_PNP_CAPABILITIES  PMCapabilities;
02583   DEVICE_CAPABILITIES  DeviceCaps;
02584   ULONG  WakeUpEnable;
02585   DEVICE_POWER_STATE  CurrentDevicePowerState;
02586   PIRP  pIrpWaitWake;
02587   SYSTEM_POWER_STATE  WaitWakeSystemState;
02588   LARGE_INTEGER  VcIndex;
02589   KSPIN_LOCK  VcCountLock;
02590   LIST_ENTRY  WmiEnabledVcs;
02591   PNDIS_GUID  pNdisGuidMap;
02592   PNDIS_GUID  pCustomGuidMap;
02593   USHORT  VcCount;
02594   USHORT  cNdisGuidMap;
02595   USHORT  cCustomGuidMap;
02596   USHORT  CurrentMapRegister;
02597   PKEVENT  AllocationEvent;
02598   USHORT  BaseMapRegistersNeeded;
02599   USHORT  SGMapRegistersNeeded;
02600   ULONG  MaximumPhysicalMapping;
02601   NDIS_TIMER  MediaDisconnectTimer;
02602   USHORT  MediaDisconnectTimeOut;
02603   USHORT  InstanceNumber;
02604   NDIS_EVENT  OpenReadyEvent;
02605   NDIS_PNP_DEVICE_STATE  PnPDeviceState;
02606   NDIS_PNP_DEVICE_STATE  OldPnPDeviceState;
02607   PGET_SET_DEVICE_DATA  SetBusData;
02608   PGET_SET_DEVICE_DATA  GetBusData;
02609   KDPC  DeferredDpc;
02610 #if 0
02611   /* FIXME: */
02612   NDIS_STATS  NdisStats;
02613 #else
02614   ULONG  NdisStats;
02615 #endif
02616   PNDIS_PACKET  IndicatedPacket[MAXIMUM_PROCESSORS];
02617   PKEVENT  RemoveReadyEvent;
02618   PKEVENT  AllOpensClosedEvent;
02619   PKEVENT  AllRequestsCompletedEvent;
02620   ULONG  InitTimeMs;
02621   NDIS_MINIPORT_WORK_ITEM  WorkItemBuffer[NUMBER_OF_SINGLE_WORK_ITEMS];
02622   PDMA_ADAPTER  SystemAdapterObject;
02623   ULONG  DriverVerifyFlags;
02624   POID_LIST  OidList;
02625   USHORT  InternalResetCount;
02626   USHORT  MiniportResetCount;
02627   USHORT  MediaSenseConnectCount;
02628   USHORT  MediaSenseDisconnectCount;
02629   PNDIS_PACKET  *xPackets;
02630   ULONG  UserModeOpenReferences;
02631   _ANONYMOUS_UNION union {
02632     PVOID  SavedSendHandler;
02633     PVOID  SavedWanSendHandler;
02634   } DUMMYUNIONNAME2;
02635   PVOID  SavedSendPacketsHandler;
02636   PVOID  SavedCancelSendPacketsHandler;
02637   W_SEND_PACKETS_HANDLER  WSendPacketsHandler;
02638   ULONG  MiniportAttributes;
02639   PDMA_ADAPTER  SavedSystemAdapterObject;
02640   USHORT  NumOpens;
02641   USHORT  CFHangXTicks;
02642   ULONG  RequestCount;
02643   ULONG  IndicatedPacketsCount;
02644   ULONG  PhysicalMediumType;
02645   PNDIS_REQUEST  LastRequest;
02646   LONG  DmaAdapterRefCount;
02647   PVOID  FakeMac;
02648   ULONG  LockDbg;
02649   ULONG  LockDbgX;
02650   PVOID  LockThread;
02651   ULONG  InfoFlags;
02652   KSPIN_LOCK  TimerQueueLock;
02653   PKEVENT  ResetCompletedEvent;
02654   PKEVENT  QueuedBindingCompletedEvent;
02655   PKEVENT  DmaResourcesReleasedEvent;
02656   FILTER_PACKET_INDICATION_HANDLER  SavedPacketIndicateHandler;
02657   ULONG  RegisteredInterrupts;
02658   PNPAGED_LOOKASIDE_LIST  SGListLookasideList;
02659   ULONG  ScatterGatherListSize;
02660 #endif /* _NDIS_ */
02661 };
02662 
02663 #if NDIS_LEGACY_DRIVER
02664 
02665 typedef NDIS_STATUS
02666 (NTAPI *WAN_SEND_HANDLER)(
02667   _In_ NDIS_HANDLE MacBindingHandle,
02668   _In_ NDIS_HANDLE LinkHandle,
02669   _In_ PVOID Packet);
02670 
02671 typedef VOID
02672 (NTAPI *SEND_PACKETS_HANDLER)(
02673   _In_ NDIS_HANDLE MiniportAdapterContext,
02674   _In_ PPNDIS_PACKET PacketArray,
02675   _In_ UINT NumberOfPackets);
02676 
02677 typedef NDIS_STATUS
02678 (NTAPI *SEND_HANDLER)(
02679   _In_ NDIS_HANDLE NdisBindingHandle,
02680   _In_ PNDIS_PACKET Packet);
02681 
02682 typedef NDIS_STATUS
02683 (NTAPI *TRANSFER_DATA_HANDLER)(
02684   _In_ NDIS_HANDLE NdisBindingHandle,
02685   _In_ NDIS_HANDLE MacReceiveContext,
02686   _In_ UINT ByteOffset,
02687   _In_ UINT BytesToTransfer,
02688   _Out_ PNDIS_PACKET Packet,
02689   _Out_ PUINT BytesTransferred);
02690 
02691 typedef NDIS_STATUS
02692 (NTAPI *RESET_HANDLER)(
02693   _In_ NDIS_HANDLE NdisBindingHandle);
02694 
02695 typedef NDIS_STATUS
02696 (NTAPI *REQUEST_HANDLER)(
02697   _In_ NDIS_HANDLE NdisBindingHandle,
02698   _In_ PNDIS_REQUEST NdisRequest);
02699 
02700 #endif /* NDIS_LEGACY_DRIVER */
02701 
02702 #if defined(NDIS_WRAPPER)
02703 #define NDIS_COMMON_OPEN_BLOCK_WRAPPER_S \
02704   ULONG Flags; \
02705   ULONG References; \
02706   KSPIN_LOCK SpinLock; \
02707   NDIS_HANDLE  FilterHandle; \
02708   ULONG  ProtocolOptions; \
02709   USHORT  CurrentLookahead; \
02710   USHORT  ConnectDampTicks; \
02711   USHORT  DisconnectDampTicks; \
02712   W_SEND_HANDLER  WSendHandler; \
02713   W_TRANSFER_DATA_HANDLER  WTransferDataHandler; \
02714   W_SEND_PACKETS_HANDLER  WSendPacketsHandler; \
02715   W_CANCEL_SEND_PACKETS_HANDLER  CancelSendPacketsHandler; \
02716   ULONG  WakeUpEnable; \
02717   PKEVENT  CloseCompleteEvent; \
02718   QUEUED_CLOSE  QC; \
02719   ULONG  AfReferences; \
02720   PNDIS_OPEN_BLOCK  NextGlobalOpen;
02721 #else
02722 #define NDIS_COMMON_OPEN_BLOCK_WRAPPER_S
02723 #endif
02724 
02725 #define NDIS_COMMON_OPEN_BLOCK_S \
02726   PVOID  MacHandle; \
02727   NDIS_HANDLE  BindingHandle; \
02728   PNDIS_MINIPORT_BLOCK  MiniportHandle; \
02729   PNDIS_PROTOCOL_BLOCK  ProtocolHandle; \
02730   NDIS_HANDLE  ProtocolBindingContext; \
02731   PNDIS_OPEN_BLOCK  MiniportNextOpen; \
02732   PNDIS_OPEN_BLOCK  ProtocolNextOpen; \
02733   NDIS_HANDLE  MiniportAdapterContext; \
02734   BOOLEAN  Reserved1; \
02735   BOOLEAN  Reserved2; \
02736   BOOLEAN  Reserved3; \
02737   BOOLEAN  Reserved4; \
02738   PNDIS_STRING  BindDeviceName; \
02739   KSPIN_LOCK  Reserved5; \
02740   PNDIS_STRING  RootDeviceName; \
02741   _ANONYMOUS_UNION union { \
02742     SEND_HANDLER  SendHandler; \
02743     WAN_SEND_HANDLER  WanSendHandler; \
02744   } DUMMYUNIONNAME; \
02745   TRANSFER_DATA_HANDLER  TransferDataHandler; \
02746   SEND_COMPLETE_HANDLER  SendCompleteHandler; \
02747   TRANSFER_DATA_COMPLETE_HANDLER  TransferDataCompleteHandler; \
02748   RECEIVE_HANDLER  ReceiveHandler; \
02749   RECEIVE_COMPLETE_HANDLER  ReceiveCompleteHandler; \
02750   WAN_RECEIVE_HANDLER  WanReceiveHandler; \
02751   REQUEST_COMPLETE_HANDLER  RequestCompleteHandler; \
02752   RECEIVE_PACKET_HANDLER  ReceivePacketHandler; \
02753   SEND_PACKETS_HANDLER  SendPacketsHandler; \
02754   RESET_HANDLER  ResetHandler; \
02755   REQUEST_HANDLER  RequestHandler; \
02756   RESET_COMPLETE_HANDLER  ResetCompleteHandler; \
02757   STATUS_HANDLER  StatusHandler; \
02758   STATUS_COMPLETE_HANDLER  StatusCompleteHandler; \
02759   NDIS_COMMON_OPEN_BLOCK_WRAPPER_S
02760 
02761 typedef struct _NDIS_COMMON_OPEN_BLOCK {
02762   NDIS_COMMON_OPEN_BLOCK_S
02763 } NDIS_COMMON_OPEN_BLOCK;
02764 
02765 struct _NDIS_OPEN_BLOCK
02766 {
02767 #ifdef __cplusplus
02768   NDIS_COMMON_OPEN_BLOCK NdisCommonOpenBlock;
02769 #else
02770   NDIS_COMMON_OPEN_BLOCK_S
02771 #endif
02772 };
02773 
02774 #include <xfilter.h>
02775 
02776 #define NDIS_M_MAX_LOOKAHEAD           526
02777 
02778 _IRQL_requires_max_(DISPATCH_LEVEL)
02779 NDISAPI
02780 VOID
02781 NTAPI
02782 NdisInitializeTimer(
02783   _Inout_ PNDIS_TIMER Timer,
02784   _In_ PNDIS_TIMER_FUNCTION TimerFunction,
02785   _In_opt_ _Points_to_data_ PVOID FunctionContext);
02786 
02787 _IRQL_requires_max_(DISPATCH_LEVEL)
02788 NDISAPI
02789 VOID
02790 NTAPI
02791 NdisCancelTimer(
02792   _In_ PNDIS_TIMER Timer,
02793   _Out_ _At_(*TimerCancelled, _Must_inspect_result_) PBOOLEAN TimerCancelled);
02794 
02795 _IRQL_requires_max_(DISPATCH_LEVEL)
02796 NDISAPI
02797 VOID
02798 NTAPI
02799 NdisSetTimer(
02800   _In_ PNDIS_TIMER Timer,
02801   _In_ UINT MillisecondsToDelay);
02802 
02803 NDISAPI
02804 VOID
02805 NTAPI
02806 NdisSetPeriodicTimer(
02807   _In_ PNDIS_TIMER NdisTimer,
02808   _In_ UINT MillisecondsPeriod);
02809 
02810 _IRQL_requires_max_(DISPATCH_LEVEL)
02811 NDISAPI
02812 VOID
02813 NTAPI
02814 NdisSetTimerEx(
02815   _In_ PNDIS_TIMER NdisTimer,
02816   _In_ UINT MillisecondsToDelay,
02817   _In_ PVOID FunctionContext);
02818 
02819 _IRQL_requires_(PASSIVE_LEVEL)
02820 NDISAPI
02821 PVOID
02822 NTAPI
02823 NdisGetRoutineAddress(
02824   _In_ PNDIS_STRING NdisRoutineName);
02825 
02826 _IRQL_requires_max_(DISPATCH_LEVEL)
02827 NDISAPI
02828 UINT
02829 NTAPI
02830 NdisGetVersion(VOID);
02831 
02832 #if NDIS_LEGACY_DRIVER
02833 
02834 _IRQL_requires_max_(DISPATCH_LEVEL)
02835 NDISAPI
02836 VOID
02837 NTAPI
02838 NdisAllocateBuffer(
02839   _Out_ PNDIS_STATUS Status,
02840   _Out_ PNDIS_BUFFER *Buffer,
02841   _In_opt_ NDIS_HANDLE PoolHandle,
02842   _In_reads_bytes_(Length) PVOID VirtualAddress,
02843   _In_ UINT Length);
02844 
02845 _IRQL_requires_max_(DISPATCH_LEVEL)
02846 NDISAPI
02847 VOID
02848 NTAPI
02849 NdisAllocateBufferPool(
02850   _Out_ PNDIS_STATUS Status,
02851   _Out_ PNDIS_HANDLE PoolHandle,
02852   _In_ UINT NumberOfDescriptors);
02853 
02854 _IRQL_requires_max_(DISPATCH_LEVEL)
02855 NDISAPI
02856 VOID
02857 NTAPI
02858 NdisFreeBufferPool(
02859   _In_ NDIS_HANDLE PoolHandle);
02860 
02861 /*
02862 NDISAPI
02863 VOID
02864 NTAPI
02865 NdisFreeBuffer(
02866   IN PNDIS_BUFFER Buffer);
02867 */
02868 #define NdisFreeBuffer IoFreeMdl
02869 
02870 _IRQL_requires_max_(DISPATCH_LEVEL)
02871 NDISAPI
02872 VOID
02873 NTAPI
02874 NdisAllocatePacketPool(
02875   _Out_ PNDIS_STATUS Status,
02876   _Out_ PNDIS_HANDLE PoolHandle,
02877   _In_ UINT NumberOfDescriptors,
02878   _In_ UINT ProtocolReservedLength);
02879 
02880 _IRQL_requires_max_(DISPATCH_LEVEL)
02881 NDISAPI
02882 VOID
02883 NTAPI
02884 NdisAllocatePacketPoolEx(
02885   _Out_ PNDIS_STATUS Status,
02886   _Out_ PNDIS_HANDLE PoolHandle,
02887   _In_ UINT NumberOfDescriptors,
02888   _In_ UINT NumberOfOverflowDescriptors,
02889   _In_ UINT ProtocolReservedLength);
02890 
02891 _IRQL_requires_max_(DISPATCH_LEVEL)
02892 NDISAPI
02893 VOID
02894 NTAPI
02895 NdisSetPacketPoolProtocolId(
02896   _In_ NDIS_HANDLE PacketPoolHandle,
02897   _In_ UINT ProtocolId);
02898 
02899 _IRQL_requires_max_(DISPATCH_LEVEL)
02900 NDISAPI
02901 UINT
02902 NTAPI
02903 NdisPacketPoolUsage(
02904   _In_ NDIS_HANDLE PoolHandle);
02905 
02906 _IRQL_requires_max_(DISPATCH_LEVEL)
02907 NDISAPI
02908 UINT
02909 NTAPI
02910 NdisPacketSize(
02911   _In_ UINT ProtocolReservedSize);
02912 
02913 _IRQL_requires_max_(DISPATCH_LEVEL)
02914 NDISAPI
02915 NDIS_HANDLE
02916 NTAPI
02917 NdisGetPoolFromPacket(
02918   _In_ PNDIS_PACKET Packet);
02919 
02920 _IRQL_requires_max_(DISPATCH_LEVEL)
02921 NDISAPI
02922 PNDIS_PACKET_STACK
02923 NTAPI
02924 NdisIMGetCurrentPacketStack(
02925   _In_ PNDIS_PACKET Packet,
02926   _Out_ BOOLEAN *StacksRemaining);
02927 
02928 _IRQL_requires_max_(DISPATCH_LEVEL)
02929 NDISAPI
02930 VOID
02931 NTAPI
02932 NdisFreePacketPool(
02933   _In_ NDIS_HANDLE PoolHandle);
02934 
02935 _IRQL_requires_max_(DISPATCH_LEVEL)
02936 NDISAPI
02937 VOID
02938 NTAPI
02939 NdisFreePacket(
02940   _In_ PNDIS_PACKET Packet);
02941 
02942 _IRQL_requires_(DISPATCH_LEVEL)
02943 NDISAPI
02944 VOID
02945 NTAPI
02946 NdisDprFreePacket(
02947   _In_ PNDIS_PACKET Packet);
02948 
02949 _IRQL_requires_(DISPATCH_LEVEL)
02950 NDISAPI
02951 VOID
02952 NTAPI
02953 NdisDprFreePacketNonInterlocked(
02954   _In_ PNDIS_PACKET Packet);
02955 
02956 _IRQL_requires_max_(DISPATCH_LEVEL)
02957 NDISAPI
02958 VOID
02959 NTAPI
02960 NdisAllocatePacket(
02961   _Out_ PNDIS_STATUS Status,
02962   _Out_ PNDIS_PACKET *Packet,
02963   _In_ NDIS_HANDLE PoolHandle);
02964 
02965 _IRQL_requires_(DISPATCH_LEVEL)
02966 NDISAPI
02967 VOID
02968 NTAPI
02969 NdisDprAllocatePacket(
02970   _Out_ PNDIS_STATUS Status,
02971   _Out_ PNDIS_PACKET *Packet,
02972   _In_ NDIS_HANDLE PoolHandle);
02973 
02974 _IRQL_requires_(DISPATCH_LEVEL)
02975 NDISAPI
02976 VOID
02977 NTAPI
02978 NdisDprAllocatePacketNonInterlocked(
02979   _Out_ PNDIS_STATUS Status,
02980   _Out_ PNDIS_PACKET *Packet,
02981   _In_ NDIS_HANDLE PoolHandle);
02982 
02983 /*
02984  * VOID
02985  * NdisReinitializePacket(
02986  *   IN OUT  PNDIS_PACKET  Packet);
02987  */
02988 #define NdisReinitializePacket(Packet) {        \
02989   (Packet)->Private.Head = (PNDIS_BUFFER)NULL;  \
02990   (Packet)->Private.ValidCounts = FALSE;        \
02991 }
02992 
02993 /*
02994 NDISAPI
02995 VOID
02996 NTAPI
02997 NdisQueryBuffer(
02998   IN PNDIS_BUFFER Buffer,
02999   OUT PVOID *VirtualAddress OPTIONAL,
03000   OUT PUINT Length);
03001 */
03002 #define NdisQueryBuffer(_Buffer, _VirtualAddress, _Length) {         \
03003   if (ARGUMENT_PRESENT(_VirtualAddress)) {                           \
03004     *(PVOID *)(_VirtualAddress) = MmGetSystemAddressForMdl(_Buffer); \
03005   }                                                                  \
03006   *(_Length) = MmGetMdlByteCount(_Buffer);                           \
03007 }
03008 
03009 NDISAPI
03010 VOID
03011 NTAPI
03012 NdisGetFirstBufferFromPacket(
03013   IN PNDIS_PACKET _Packet,
03014   OUT PNDIS_BUFFER *_FirstBuffer,
03015   OUT PVOID *_FirstBufferVA,
03016   OUT PUINT _FirstBufferLength,
03017   OUT PUINT _TotalBufferLength);
03018 
03019 /*
03020  * VOID
03021  * NdisGetFirstBufferFromPacketSafe(
03022  * IN PNDIS_PACKET _Packet,
03023  * OUT PNDIS_BUFFER * _FirstBuffer,
03024  * OUT PVOID * _FirstBufferVA,
03025  * OUT PUINT _FirstBufferLength,
03026  * OUT PUINT _TotalBufferLength),
03027  * IN MM_PAGE_PRIORITY _Priority)
03028  */
03029 #define NdisGetFirstBufferFromPacketSafe(_Packet,                             \
03030                                      _FirstBuffer,                            \
03031                                      _FirstBufferVA,                          \
03032                                      _FirstBufferLength,                      \
03033                                      _TotalBufferLength,                      \
03034                                      _Priority)                               \
03035 {                                                                             \
03036   PNDIS_BUFFER _Buffer;                                                       \
03037                                                                               \
03038   _Buffer         = (_Packet)->Private.Head;                                  \
03039   *(_FirstBuffer) = _Buffer;                                                  \
03040   if (_Buffer != NULL) {                                                      \
03041     *(_FirstBufferVA)     = MmGetSystemAddressForMdlSafe(_Buffer, _Priority); \
03042     *(_FirstBufferLength) = MmGetMdlByteCount(_Buffer);                       \
03043     _Buffer = _Buffer->Next;                                                  \
03044     *(_TotalBufferLength) = *(_FirstBufferLength);                            \
03045     while (_Buffer != NULL) {                                                 \
03046       *(_TotalBufferLength) += MmGetMdlByteCount(_Buffer);                    \
03047       _Buffer = _Buffer->Next;                                                \
03048     }                                                                         \
03049   }                                                                           \
03050   else {                                                                      \
03051     *(_FirstBufferVA) = 0;                                                    \
03052     *(_FirstBufferLength) = 0;                                                \
03053     *(_TotalBufferLength) = 0;                                                \
03054   }                                                                           \
03055 }
03056 
03057 /*
03058  * VOID
03059  * NdisRecalculatePacketCounts(
03060  *   IN OUT PNDIS_PACKET Packet);
03061  */
03062 #define NdisRecalculatePacketCounts(Packet) {     \
03063   PNDIS_BUFFER _Buffer = (Packet)->Private.Head;  \
03064   if (_Buffer != NULL) {                          \
03065     while (_Buffer->Next != NULL) {               \
03066       _Buffer = _Buffer->Next;                    \
03067     }                                             \
03068     (Packet)->Private.Tail = _Buffer;             \
03069   }                                               \
03070   (Packet)->Private.ValidCounts = FALSE;          \
03071 }
03072 
03073 /*
03074  * VOID
03075  * NdisChainBufferAtFront(
03076  *   IN OUT PNDIS_PACKET Packet,
03077  *   IN OUT PNDIS_BUFFER Buffer)
03078  */
03079 #define NdisChainBufferAtFront(Packet,        \
03080                                Buffer)        \
03081 {                                             \
03082   PNDIS_BUFFER _NdisBuffer = (Buffer);        \
03083                                               \
03084   while (_NdisBuffer->Next != NULL)           \
03085     _NdisBuffer = _NdisBuffer->Next;          \
03086                                               \
03087   if ((Packet)->Private.Head == NULL)         \
03088     (Packet)->Private.Tail = _NdisBuffer;     \
03089                                               \
03090   _NdisBuffer->Next = (Packet)->Private.Head; \
03091   (Packet)->Private.Head = (Buffer);          \
03092   (Packet)->Private.ValidCounts = FALSE;      \
03093 }
03094 
03095 /*
03096  * VOID
03097  * NdisChainBufferAtBack(
03098  *   IN OUT PNDIS_PACKET Packet,
03099  *   IN OUT PNDIS_BUFFER Buffer)
03100  */
03101 #define NdisChainBufferAtBack(Packet,           \
03102                               Buffer)           \
03103 {                                               \
03104   PNDIS_BUFFER _NdisBuffer = (Buffer);           \
03105                                                 \
03106   while (_NdisBuffer->Next != NULL)              \
03107     _NdisBuffer = _NdisBuffer->Next;              \
03108                                                 \
03109   _NdisBuffer->Next = NULL;                      \
03110                                                 \
03111   if ((Packet)->Private.Head != NULL)           \
03112     (Packet)->Private.Tail->Next = (Buffer);    \
03113   else                                          \
03114     (Packet)->Private.Head = (Buffer);          \
03115                                                 \
03116   (Packet)->Private.Tail = _NdisBuffer;          \
03117   (Packet)->Private.ValidCounts = FALSE;        \
03118 }
03119 
03120 NDISAPI
03121 VOID
03122 NTAPI
03123 NdisUnchainBufferAtFront(
03124   IN OUT PNDIS_PACKET Packet,
03125   OUT PNDIS_BUFFER *Buffer);
03126 
03127 NDISAPI
03128 VOID
03129 NTAPI
03130 NdisUnchainBufferAtBack(
03131   IN OUT PNDIS_PACKET Packet,
03132   OUT PNDIS_BUFFER *Buffer);
03133 
03134 _IRQL_requires_max_(DISPATCH_LEVEL)
03135 NDISAPI
03136 VOID
03137 NTAPI
03138 NdisCopyFromPacketToPacket(
03139   _In_ PNDIS_PACKET Destination,
03140   _In_ UINT DestinationOffset,
03141   _In_ UINT BytesToCopy,
03142   _In_ PNDIS_PACKET Source,
03143   _In_ UINT SourceOffset,
03144   _Out_ PUINT BytesCopied);
03145 
03146 NDISAPI
03147 VOID
03148 NTAPI
03149 NdisCopyFromPacketToPacketSafe(
03150   IN PNDIS_PACKET Destination,
03151   IN UINT DestinationOffset,
03152   IN UINT BytesToCopy,
03153   IN PNDIS_PACKET Source,
03154   IN UINT SourceOffset,
03155   OUT PUINT BytesCopied,
03156   IN MM_PAGE_PRIORITY Priority);
03157 
03158 _IRQL_requires_max_(DISPATCH_LEVEL)
03159 __drv_preferredFunction("NdisAllocateMemoryWithTag", "Obsolete")
03160 NDISAPI
03161 NDIS_STATUS
03162 NTAPI
03163 NdisAllocateMemory(
03164   _At_(*VirtualAddress, __drv_allocatesMem(Mem)) _Outptr_result_bytebuffer_(Length)
03165     PVOID *VirtualAddress,
03166   _In_ UINT Length,
03167   _In_ UINT MemoryFlags,
03168   _In_ NDIS_PHYSICAL_ADDRESS HighestAcceptableAddress);
03169 
03170 #define NdisInitializeWorkItem(_WI_, _R_, _C_) { \
03171   (_WI_)->Context = _C_;                         \
03172   (_WI_)->Routine = _R_;                         \
03173 }
03174 
03175 _IRQL_requires_max_(DISPATCH_LEVEL)
03176 NDISAPI
03177 NDIS_STATUS
03178 NTAPI
03179 NdisScheduleWorkItem(
03180   _In_ __drv_aliasesMem PNDIS_WORK_ITEM WorkItem);
03181 
03182 _IRQL_requires_max_(DISPATCH_LEVEL)
03183 NDISAPI
03184 VOID
03185 NTAPI
03186 NdisSetPacketStatus(
03187   _In_ PNDIS_PACKET Packet,
03188   _In_ NDIS_STATUS Status,
03189   _In_ NDIS_HANDLE Handle,
03190   _In_ ULONG Code);
03191 
03192 #endif /* NDIS_LEGACY_DRIVER */
03193 
03194 _IRQL_requires_(PASSIVE_LEVEL)
03195 NDISAPI
03196 VOID
03197 NTAPI
03198 NdisOpenFile(
03199   _Out_ PNDIS_STATUS Status,
03200   _Out_ PNDIS_HANDLE FileHandle,
03201   _Out_ PUINT FileLength,
03202   _In_ PNDIS_STRING FileName,
03203   _In_ NDIS_PHYSICAL_ADDRESS HighestAcceptableAddress);
03204 
03205 _IRQL_requires_(PASSIVE_LEVEL)
03206 NDISAPI
03207 VOID
03208 NTAPI
03209 NdisCloseFile(
03210   _In_ NDIS_HANDLE FileHandle);
03211 
03212 _IRQL_requires_max_(DISPATCH_LEVEL)
03213 NDISAPI
03214 VOID
03215 NTAPI
03216 NdisMapFile(
03217   _Out_ PNDIS_STATUS Status,
03218   _Out_ PVOID *MappedBuffer,
03219   _In_ NDIS_HANDLE FileHandle);
03220 
03221 _IRQL_requires_(PASSIVE_LEVEL)
03222 NDISAPI
03223 VOID
03224 NTAPI
03225 NdisUnmapFile(
03226   _In_ NDIS_HANDLE FileHandle);
03227 
03228 _IRQL_requires_max_(DISPATCH_LEVEL)
03229 NDISAPI
03230 ULONG
03231 NTAPI
03232 NdisGetSharedDataAlignment(VOID);
03233 
03234 #define NdisFlushBuffer(Buffer,WriteToDevice) \
03235   KeFlushIoBuffers((Buffer),!(WriteToDevice), TRUE)
03236 
03237 _IRQL_requires_max_(DISPATCH_LEVEL)
03238 NDISAPI
03239 VOID
03240 NTAPI
03241 NdisCopyBuffer(
03242   _Out_ PNDIS_STATUS Status,
03243   _Out_ PNDIS_BUFFER *Buffer,
03244   _In_ NDIS_HANDLE PoolHandle,
03245   _In_ PVOID MemoryDescriptor,
03246   _In_ UINT Offset,
03247   _In_ UINT Length);
03248 
03249 /*
03250  * VOID
03251  * NdisCopyLookaheadData(
03252  *   IN PVOID Destination,
03253  *   IN PVOID Source,
03254  *   IN ULONG Length,
03255  *   IN ULONG ReceiveFlags);
03256  */
03257 
03258 #if defined(_M_IX86) || defined(_M_AMD64)
03259 #define NdisCopyLookaheadData(Destination, Source, Length, MacOptions) \
03260   RtlCopyMemory(Destination, Source, Length)
03261 #else
03262 #define NdisCopyLookaheadData(Destination, Source, Length, MacOptions) \
03263   { \
03264     if ((MacOptions) & NDIS_MAC_OPTION_COPY_LOOKAHEAD_DATA) \
03265     { \
03266       RtlCopyMemory(_Destination, _Source, _Length); \
03267     } \
03268     else \
03269     { \
03270       PUCHAR _Src = (PUCHAR)(Source); \
03271       PUCHAR _Dest = (PUCHAR)(Destination); \
03272       PUCHAR _End = _Dest + (Length); \
03273       while (_Dest < _End) \
03274         *_Dest++ = *_Src++; \
03275     } \
03276   }
03277 #endif
03278 
03279 /*
03280 NDISAPI
03281 VOID
03282 NTAPI
03283 NdisAdjustBufferLength(
03284   IN PNDIS_BUFFER Buffer,
03285   IN UINT Length);
03286 */
03287 #define NdisAdjustBufferLength(Buffer, Length) \
03288   (((Buffer)->ByteCount) = (Length))
03289 
03290 #if NDIS_SUPPORT_NDIS6
03291 #define NdisAdjustMdlLength(_Mdl, _Length) \
03292   (((_Mdl)->ByteCount) = (_Length))
03293 #endif
03294 
03295 /*
03296 NDISAPI
03297 ULONG
03298 NTAPI
03299 NdisBufferLength(
03300   IN PNDIS_BUFFER Buffer);
03301 */
03302 #define NdisBufferLength MmGetMdlByteCount
03303 
03304 /*
03305 NDISAPI
03306 PVOID
03307 NTAPI
03308 NdisBufferVirtualAddress(
03309   IN PNDIS_BUFFER Buffer);
03310 */
03311 #define NdisBufferVirtualAddress MmGetSystemAddressForMdl
03312 
03313 #define NdisBufferVirtualAddressSafe MmGetSystemAddressForMdlSafe
03314 
03315 NDISAPI
03316 ULONG
03317 NTAPI
03318 NDIS_BUFFER_TO_SPAN_PAGES(
03319   IN PNDIS_BUFFER Buffer);
03320 
03321 /*
03322 NDISAPI
03323 VOID
03324 NTAPI
03325 NdisGetBufferPhysicalArraySize(
03326   IN PNDIS_BUFFER Buffer,
03327   OUT PUINT ArraySize);
03328 */
03329 #define NdisGetBufferPhysicalArraySize(Buffer, ArraySize) \
03330   (*(ArraySize) = NDIS_BUFFER_TO_SPAN_PAGES(Buffer))
03331 
03332 /*
03333 NDISAPI
03334 VOID
03335 NTAPI
03336 NdisQueryBufferOffset(
03337   IN PNDIS_BUFFER Buffer,
03338   OUT PUINT Offset,
03339   OUT PUINT Length);
03340 */
03341 #define NdisQueryBufferOffset(_Buffer, _Offset, _Length) { \
03342   *(_Offset) = MmGetMdlByteOffset(_Buffer);                \
03343   *(_Length) = MmGetMdlByteCount(_Buffer);                 \
03344 }
03345 
03346 /*
03347  * PVOID
03348  * NDIS_BUFFER_LINKAGE(
03349  *   IN PNDIS_BUFFER Buffer);
03350  */
03351 #define NDIS_BUFFER_LINKAGE(Buffer) (Buffer)->Next
03352 
03353 /*
03354  * VOID
03355  * NdisGetNextBuffer(
03356  *   IN PNDIS_BUFFER CurrentBuffer,
03357  *   OUT PNDIS_BUFFER * NextBuffer)
03358  */
03359 #define NdisGetNextBuffer(CurrentBuffer,  \
03360                           NextBuffer)     \
03361 {                                         \
03362   *(NextBuffer) = (CurrentBuffer)->Next;  \
03363 }
03364 
03365 #if NDIS_LEGACY_DRIVER
03366 
03367 #define NDIS_PACKET_FIRST_NDIS_BUFFER(_Packet) ((_Packet)->Private.Head)
03368 #define NDIS_PACKET_LAST_NDIS_BUFFER(_Packet) ((_Packet)->Private.Tail)
03369 #define NDIS_PACKET_VALID_COUNTS(_Packet) ((_Packet)->Private.ValidCounts)
03370 
03371 /*
03372  * UINT
03373  * NdisGetPacketFlags(
03374  *   IN PNDIS_PACKET  Packet);
03375  */
03376 #define NdisGetPacketFlags(Packet) (Packet)->Private.Flags
03377 
03378 /*
03379  * ULONG
03380  * NDIS_GET_PACKET_PROTOCOL_TYPE(
03381  *   IN PNDIS_PACKET Packet);
03382  */
03383 #define NDIS_GET_PACKET_PROTOCOL_TYPE(_Packet) \
03384   ((_Packet)->Private.Flags & NDIS_PROTOCOL_ID_MASK)
03385 
03386 /*
03387  * PNDIS_PACKET_OOB_DATA
03388  * NDIS_OOB_DATA_FROM_PACKET(
03389  *   IN PNDIS_PACKET Packet);
03390  */
03391 #define NDIS_OOB_DATA_FROM_PACKET(_Packet)    \
03392   (PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
03393   (_Packet)->Private.NdisPacketOobOffset)
03394 
03395 /*
03396  * ULONG
03397  * NDIS_GET_PACKET_HEADER_SIZE(
03398  *   IN PNDIS_PACKET Packet);
03399  */
03400 #define NDIS_GET_PACKET_HEADER_SIZE(_Packet)   \
03401   ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
03402   (_Packet)->Private.NdisPacketOobOffset))->HeaderSize
03403 
03404 /*
03405  * NDIS_STATUS
03406  * NDIS_GET_PACKET_STATUS(
03407  *   IN PNDIS_PACKET Packet);
03408  */
03409 #define NDIS_GET_PACKET_STATUS(_Packet)        \
03410   ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
03411   (_Packet)->Private.NdisPacketOobOffset))->Status
03412 
03413 /*
03414  * ULONGLONG
03415  * NDIS_GET_PACKET_TIME_TO_SEND(
03416  *   IN PNDIS_PACKET Packet);
03417  */
03418 #define NDIS_GET_PACKET_TIME_TO_SEND(_Packet)   \
03419   ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) +  \
03420   (_Packet)->Private.NdisPacketOobOffset))->TimeToSend
03421 
03422 /*
03423  * ULONGLONG
03424  * NDIS_GET_PACKET_TIME_SENT(
03425  *   IN PNDIS_PACKET Packet);
03426  */
03427 #define NDIS_GET_PACKET_TIME_SENT(_Packet)      \
03428   ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) +  \
03429   (_Packet)->Private.NdisPacketOobOffset))->TimeSent
03430 
03431 /*
03432  * ULONGLONG
03433  * NDIS_GET_PACKET_TIME_RECEIVED(
03434  *   IN PNDIS_PACKET Packet);
03435  */
03436 #define NDIS_GET_PACKET_TIME_RECEIVED(_Packet)  \
03437   ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) +  \
03438   (_Packet)->Private.NdisPacketOobOffset))->TimeReceived
03439 
03440 /*
03441  * VOID
03442  * NDIS_GET_PACKET_MEDIA_SPECIFIC_INFO(
03443  *   IN PNDIS_PACKET Packet,
03444  *   IN PPVOID pMediaSpecificInfo,
03445  *   IN PUINT pSizeMediaSpecificInfo);
03446  */
03447 #define NDIS_GET_PACKET_MEDIA_SPECIFIC_INFO(_Packet,                                  \
03448                                             _pMediaSpecificInfo,                      \
03449                                             _pSizeMediaSpecificInfo)                  \
03450 {                                                                                     \
03451   if (!((_Packet)->Private.NdisPacketFlags & fPACKET_ALLOCATED_BY_NDIS) ||            \
03452       !((_Packet)->Private.NdisPacketFlags & fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO))   \
03453     {                                                                                 \
03454       *(_pMediaSpecificInfo) = NULL;                                                  \
03455       *(_pSizeMediaSpecificInfo) = 0;                                                 \
03456     }                                                                                 \
03457   else                                                                                \
03458     {                                                                                 \
03459       *(_pMediaSpecificInfo) = ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) +           \
03460         (_Packet)->Private.NdisPacketOobOffset))->MediaSpecificInformation;           \
03461       *(_pSizeMediaSpecificInfo) = ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) +       \
03462         (_Packet)->Private.NdisPacketOobOffset))->SizeMediaSpecificInfo;              \
03463     }                                                                                 \
03464 }
03465 
03466 /*
03467  * VOID
03468  * NDIS_SET_PACKET_HEADER_SIZE(
03469  *   IN PNDIS_PACKET Packet,
03470  *   IN UINT HdrSize);
03471  */
03472 #define NDIS_SET_PACKET_HEADER_SIZE(_Packet, _HdrSize)              \
03473   ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) +                      \
03474   (_Packet)->Private.NdisPacketOobOffset))->HeaderSize = (_HdrSize)
03475 
03476 /*
03477  * VOID
03478  * NDIS_SET_PACKET_STATUS(
03479  *   IN PNDIS_PACKET Packet,
03480  *   IN NDIS_STATUS Status);
03481  */
03482 #define NDIS_SET_PACKET_STATUS(_Packet, _Status)  \
03483   ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) +    \
03484   (_Packet)->Private.NdisPacketOobOffset))->Status = (_Status)
03485 
03486 /*
03487  * VOID
03488  * NDIS_SET_PACKET_TIME_TO_SEND(
03489  *   IN PNDIS_PACKET Packet,
03490  *   IN ULONGLONG TimeToSend);
03491  */
03492 #define NDIS_SET_PACKET_TIME_TO_SEND(_Packet, _TimeToSend)  \
03493   ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) +              \
03494   (_Packet)->Private.NdisPacketOobOffset))->TimeToSend = (_TimeToSend)
03495 
03496 /*
03497  * VOID
03498  * NDIS_SET_PACKET_TIME_SENT(
03499  *   IN PNDIS_PACKET Packet,
03500  *   IN ULONGLONG TimeSent);
03501  */
03502 #define NDIS_SET_PACKET_TIME_SENT(_Packet, _TimeSent) \
03503   ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) +        \
03504   (_Packet)->Private.NdisPacketOobOffset))->TimeSent = (_TimeSent)
03505 
03506 /*
03507  * VOID
03508  * NDIS_SET_PACKET_TIME_RECEIVED(
03509  *   IN PNDIS_PACKET Packet,
03510  *   IN ULONGLONG TimeReceived);
03511  */
03512 #define NDIS_SET_PACKET_TIME_RECEIVED(_Packet, _TimeReceived) \
03513   ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) +                \
03514   (_Packet)->Private.NdisPacketOobOffset))->TimeReceived = (_TimeReceived)
03515 
03516 /*
03517  * VOID
03518  * NDIS_SET_PACKET_MEDIA_SPECIFIC_INFO(
03519  *   IN PNDIS_PACKET Packet,
03520  *   IN PVOID MediaSpecificInfo,
03521  *   IN UINT SizeMediaSpecificInfo);
03522  */
03523 #define NDIS_SET_PACKET_MEDIA_SPECIFIC_INFO(_Packet,                      \
03524                                             _MediaSpecificInfo,           \
03525                                             _SizeMediaSpecificInfo)       \
03526 {                                                                         \
03527   if ((_Packet)->Private.NdisPacketFlags & fPACKET_ALLOCATED_BY_NDIS)     \
03528     {                                                                     \
03529       (_Packet)->Private.NdisPacketFlags |= fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO; \
03530       ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) +                        \
03531         (_Packet)->Private.NdisPacketOobOffset))->MediaSpecificInformation = \
03532           (_MediaSpecificInfo);                                           \
03533       ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) +                        \
03534         (_Packet)->Private.NdisPacketOobOffset))->SizeMediaSpecificInfo = \
03535           (_SizeMediaSpecificInfo);                                       \
03536     }                                                                     \
03537 }
03538 
03539 /*
03540  * VOID
03541  * NdisSetPacketFlags(
03542  *   IN PNDIS_PACKET  Packet,
03543  *   IN UINT  Flags);
03544  */
03545 #define NdisSetPacketFlags(Packet, Flags) (Packet)->Private.Flags |= (Flags)
03546 
03547 /*
03548  * VOID
03549  * NdisClearPacketFlags(
03550  *   IN PNDIS_PACKET  Packet,
03551  *   IN UINT  Flags);
03552  */
03553 #define NdisClearPacketFlags(Packet, Flags) (Packet)->Private.Flags &= ~(Flags)
03554 
03555 /*
03556  * VOID
03557  * NdisQueryPacket(
03558  *   IN PNDIS_PACKET Packet,
03559  *   OUT PUINT PhysicalBufferCount OPTIONAL,
03560  *   OUT PUINT BufferCount OPTIONAL,
03561  *   OUT PNDIS_BUFFER *FirstBuffer OPTIONAL,
03562  *   OUT PUINT TotalPacketLength OPTIONAL);
03563  */
03564 static __inline
03565 VOID
03566 NdisQueryPacket(
03567   IN PNDIS_PACKET Packet,
03568   OUT PUINT PhysicalBufferCount OPTIONAL,
03569   OUT PUINT BufferCount OPTIONAL,
03570   OUT PNDIS_BUFFER *FirstBuffer OPTIONAL,
03571   OUT PUINT TotalPacketLength OPTIONAL)
03572 {
03573   if (FirstBuffer)
03574     *FirstBuffer = Packet->Private.Head;
03575   if (TotalPacketLength || BufferCount || PhysicalBufferCount) {
03576     if (!Packet->Private.ValidCounts) {
03577       UINT Offset;
03578       UINT PacketLength;
03579       PNDIS_BUFFER NdisBuffer;
03580       UINT _PhysicalBufferCount = 0;
03581       UINT _TotalPacketLength = 0;
03582       UINT Count = 0;
03583 
03584       for (NdisBuffer = Packet->Private.Head;
03585            NdisBuffer != (PNDIS_BUFFER)NULL;
03586            NdisBuffer = NdisBuffer->Next) {
03587         _PhysicalBufferCount += NDIS_BUFFER_TO_SPAN_PAGES(NdisBuffer);
03588         NdisQueryBufferOffset(NdisBuffer, &Offset, &PacketLength);
03589         _TotalPacketLength += PacketLength;
03590         Count++;
03591       }
03592       Packet->Private.PhysicalCount = _PhysicalBufferCount;
03593       Packet->Private.TotalLength = _TotalPacketLength;
03594       Packet->Private.Count = Count;
03595       Packet->Private.ValidCounts = TRUE;
03596     }
03597 
03598     if (PhysicalBufferCount)
03599       *PhysicalBufferCount = Packet->Private.PhysicalCount;
03600 
03601     if (BufferCount)
03602       *BufferCount = Packet->Private.Count;
03603 
03604     if (TotalPacketLength)
03605       *TotalPacketLength = Packet->Private.TotalLength;
03606   }
03607 }
03608 
03609 /*
03610  * VOID
03611  * NdisQueryPacketLength(
03612  *   IN PNDIS_PACKET Packet,
03613  *   OUT PUINT PhysicalBufferCount OPTIONAL,
03614  *   OUT PUINT BufferCount OPTIONAL,
03615  *   OUT PNDIS_BUFFER *FirstBuffer OPTIONAL,
03616  *   OUT PUINT TotalPacketLength OPTIONAL);
03617  */
03618 #define NdisQueryPacketLength(_Packet,                              \
03619                               _TotalPacketLength)                   \
03620 {                                                                   \
03621   if (!(_Packet)->Private.ValidCounts) {                            \
03622     NdisQueryPacket(_Packet, NULL, NULL, NULL, _TotalPacketLength); \
03623   }                                                                 \
03624   else *(_TotalPacketLength) = (_Packet)->Private.TotalLength;      \
03625 }
03626 
03627 #endif /* NDIS_LEGACY_DRIVER */
03628 
03629 /* Memory management routines */
03630 
03631 /*
03632 NDISAPI
03633 VOID
03634 NTAPI
03635 NdisCreateLookaheadBufferFromSharedMemory(
03636   IN PVOID pSharedMemory,
03637   IN UINT LookaheadLength,
03638   OUT PVOID *pLookaheadBuffer);
03639 */
03640 #define NdisCreateLookaheadBufferFromSharedMemory(_S, _L, _B) ((*(_B)) = (_S))
03641 
03642 NDISAPI
03643 VOID
03644 NTAPI
03645 NdisDestroyLookaheadBufferFromSharedMemory(
03646   IN PVOID pLookaheadBuffer);
03647 
03648 #if defined(_M_IX86) || defined(_M_AMD64) || defined(_M_ARM) || defined(_M_PPC)
03649 
03650 /*
03651  * VOID
03652  * NdisMoveMappedMemory(
03653  *   OUT PVOID  Destination,
03654  *   IN PVOID  Source,
03655  *   IN ULONG  Length);
03656  */
03657 #define NdisMoveMappedMemory(Destination, Source, Length) \
03658   RtlCopyMemory(Destination, Source, Length)
03659 
03660 /*
03661  * VOID
03662  * NdisZeroMappedMemory(
03663  *   IN PVOID  Destination,
03664  *   IN ULONG  Length);
03665  */
03666 #define NdisZeroMappedMemory(Destination, Length) \
03667   RtlZeroMemory(Destination, Length)
03668 
03669 #else
03670 
03671 #define NdisMoveMappedMemory(Destination, Source, Length) \
03672 { \
03673   PUCHAR _Dest = Destination, _Src = Source, _End = _Dest + Length; \
03674   while (_Dest < _End) \
03675     *_Dest++ = _Src++; \
03676 }
03677 
03678 #define NdisZeroMappedMemory(Destination, Length) \
03679 { \
03680   PUCHAR _Dest = Destination, _End = _Dest + Length; \
03681   while (_Dest < _End) \
03682     *_Dest++ = 0; \
03683 }
03684 
03685 #endif /* _M_IX86 or _M_AMD64 */
03686 
03687 /*
03688  * VOID
03689  * NdisMoveFromMappedMemory(
03690  *   OUT PVOID  Destination,
03691  *   IN PVOID  Source,
03692  *   IN ULONG  Length);
03693  */
03694 #define NdisMoveFromMappedMemory(Destination, Source, Length) \
03695   NdisMoveMappedMemory(Destination, Source, Length)
03696 
03697 /*
03698  * VOID
03699  * NdisMoveToMappedMemory(
03700  *   OUT PVOID  Destination,
03701  *   IN PVOID  Source,
03702  *   IN ULONG  Length);
03703  */
03704 #define NdisMoveToMappedMemory(Destination, Source, Length) \
03705   NdisMoveMappedMemory(Destination, Source, Length)
03706 
03707 /*
03708  * VOID
03709  * NdisMUpdateSharedMemory(
03710  *   IN NDIS_HANDLE  MiniportAdapterHandle,
03711  *   IN ULONG  Length,
03712  *   IN PVOID  VirtualAddress,
03713  *   IN NDIS_PHYSICAL_ADDRESS  PhysicalAddress);
03714  */
03715 #define NdisMUpdateSharedMemory(_H, _L, _V, _P) \
03716   NdisUpdateSharedMemory(_H, _L, _V, _P)
03717 
03718 _When_(MemoryFlags==0, _IRQL_requires_max_(DISPATCH_LEVEL))
03719 _When_(MemoryFlags==NDIS_MEMORY_CONTIGUOUS, _IRQL_requires_(PASSIVE_LEVEL))
03720 _When_(MemoryFlags==NDIS_MEMORY_NONCACHED, _IRQL_requires_max_(APC_LEVEL))
03721 NDISAPI
03722 VOID
03723 NTAPI
03724 NdisFreeMemory(
03725   _In_reads_bytes_(Length) __drv_freesMem(Mem) PVOID VirtualAddress,
03726   _In_ UINT Length,
03727   _In_ _Pre_satisfies_(MemoryFlags == 0 || MemoryFlags == NDIS_MEMORY_NONCACHED || MemoryFlags == NDIS_MEMORY_CONTIGUOUS)
03728     UINT MemoryFlags);
03729 
03730 NDISAPI
03731 VOID
03732 NTAPI
03733 NdisFreeMemoryWithTag(
03734   IN PVOID VirtualAddress,
03735   IN ULONG Tag);
03736 
03737 NDISAPI
03738 VOID
03739 NTAPI
03740 NdisImmediateReadSharedMemory(
03741   IN NDIS_HANDLE WrapperConfigurationContext,
03742   IN ULONG       SharedMemoryAddress,
03743   OUT PUCHAR      Buffer,
03744   IN ULONG       Length);
03745 
03746 NDISAPI
03747 VOID
03748 NTAPI
03749 NdisImmediateWriteSharedMemory(
03750   IN NDIS_HANDLE WrapperConfigurationContext,
03751   IN ULONG       SharedMemoryAddress,
03752   IN PUCHAR      Buffer,
03753   IN ULONG       Length);
03754 
03755 _IRQL_requires_(PASSIVE_LEVEL)
03756 NDISAPI
03757 VOID
03758 NTAPI
03759 NdisMAllocateSharedMemory(
03760   _In_ NDIS_HANDLE MiniportAdapterHandle,
03761   _In_ ULONG Length,
03762   _In_ BOOLEAN Cached,
03763   _Outptr_result_bytebuffer_(Length) _At_(*VirtualAddress, _Must_inspect_result_)
03764     PVOID *VirtualAddress,
03765   _Out_ _At_(*PhysicalAddress, _Must_inspect_result_)
03766     PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
03767 
03768 _IRQL_requires_max_(DISPATCH_LEVEL)
03769 NDISAPI
03770 NDIS_STATUS
03771 NTAPI
03772 NdisMAllocateSharedMemoryAsync(
03773   _In_ NDIS_HANDLE MiniportAdapterHandle,
03774   _In_ ULONG Length,
03775   _In_ BOOLEAN Cached,
03776   _In_ PVOID Context);
03777 
03778 #if defined(NDIS50)
03779 
03780 #define NdisUpdateSharedMemory(NdisAdapterHandle, \
03781                                Length,            \
03782                                VirtualAddress,    \
03783                                PhysicalAddress)
03784 
03785 #else
03786 
03787 NDISAPI
03788 VOID
03789 NTAPI
03790 NdisUpdateSharedMemory(
03791   IN NDIS_HANDLE             NdisAdapterHandle,
03792   IN ULONG                   Length,
03793   IN PVOID                   VirtualAddress,
03794   IN NDIS_PHYSICAL_ADDRESS   PhysicalAddress);
03795 
03796 #endif /* defined(NDIS50) */
03797 
03798 /*
03799  * ULONG
03800  * NdisGetPhysicalAddressHigh(
03801  *   IN NDIS_PHYSICAL_ADDRESS  PhysicalAddress);
03802  */
03803 #define NdisGetPhysicalAddressHigh(PhysicalAddress) \
03804   ((PhysicalAddress).HighPart)
03805 
03806 /*
03807  * VOID
03808  * NdisSetPhysicalAddressHigh(
03809  *   IN NDIS_PHYSICAL_ADDRESS  PhysicalAddress,
03810  *   IN ULONG  Value);
03811  */
03812 #define NdisSetPhysicalAddressHigh(PhysicalAddress, Value) \
03813   ((PhysicalAddress).HighPart) = (Value)
03814 
03815 /*
03816  * ULONG
03817  * NdisGetPhysicalAddressLow(
03818  *   IN NDIS_PHYSICAL_ADDRESS  PhysicalAddress);
03819  */
03820 #define NdisGetPhysicalAddressLow(PhysicalAddress) \
03821   ((PhysicalAddress).LowPart)
03822 
03823 
03824 /*
03825  * VOID
03826  * NdisSetPhysicalAddressLow(
03827  *   IN NDIS_PHYSICAL_ADDRESS  PhysicalAddress,
03828  *   IN ULONG  Value);
03829  */
03830 #define NdisSetPhysicalAddressLow(PhysicalAddress, Value) \
03831   ((PhysicalAddress).LowPart) = (Value)
03832 
03833 /*
03834  * VOID
03835  * NDIS_PHYSICAL_ADDRESS_CONST(
03836  *   IN ULONG  Low,
03837  *   IN LONG  High);
03838  */
03839 #define NDIS_PHYSICAL_ADDRESS_CONST(Low, High)  \
03840     { {(ULONG)(Low), (LONG)(High)} }
03841 
03842 /*
03843  * ULONG
03844  * NdisEqualMemory(
03845  *  IN CONST VOID  *Source1,
03846  *  IN CONST VOID  *Source2,
03847  *  IN ULONG  Length);
03848  */
03849 #define NdisEqualMemory(Source1, Source2, Length) \
03850   RtlEqualMemory(Source1, Source2, Length)
03851 
03852 /*
03853  * VOID
03854  * NdisFillMemory(
03855  *   IN PVOID  Destination,
03856  *   IN ULONG  Length,
03857  *   IN UCHAR  Fill);
03858  */
03859 #define NdisFillMemory(Destination, Length, Fill) \
03860   RtlFillMemory(Destination, Length, Fill)
03861 
03862 /*
03863  * VOID
03864  * NdisMoveMemory(
03865  *   OUT  PVOID  Destination,
03866  *   IN PVOID  Source,
03867  *   IN ULONG  Length);
03868  */
03869 #define NdisMoveMemory(Destination, Source, Length) \
03870   RtlCopyMemory(Destination, Source, Length)
03871 
03872 
03873 /*
03874  * VOID
03875  * NdisRetrieveUlong(
03876  *   IN PULONG  DestinationAddress,
03877  *   IN PULONG  SourceAddress);
03878  */
03879 #define NdisRetrieveUlong(DestinationAddress, SourceAddress) \
03880   RtlRetrieveUlong(DestinationAddress, SourceAddress)
03881 
03882 
03883 /*
03884  * VOID
03885  * NdisStoreUlong(
03886  *   IN PULONG  DestinationAddress,
03887  *   IN ULONG  Value);
03888  */
03889 #define NdisStoreUlong(DestinationAddress, Value) \
03890   RtlStoreUlong(DestinationAddress, Value)
03891 
03892 
03893 /*
03894  * VOID
03895  * NdisZeroMemory(
03896  *   IN PVOID  Destination,
03897  *   IN ULONG  Length)
03898  */
03899 #define NdisZeroMemory(Destination, Length) \
03900   RtlZeroMemory(Destination, Length)
03901 
03902 typedef VOID
03903 (NTAPI *NDIS_BLOCK_INITIALIZER) (
03904     IN  PUCHAR  Block,
03905     IN  SIZE_T  NumberOfBytes
03906     );
03907 
03908 /* Configuration routines */
03909 
03910 #if NDIS_LEGACY_DRIVER
03911 _IRQL_requires_(PASSIVE_LEVEL)
03912 _Success_(*Status >= 0)
03913 NDISAPI
03914 VOID
03915 NTAPI
03916 NdisOpenConfiguration(
03917   _At_(*Status, _Must_inspect_result_) _Out_ PNDIS_STATUS Status,
03918   _Out_ PNDIS_HANDLE ConfigurationHandle,
03919   _In_ NDIS_HANDLE WrapperConfigurationContext);
03920 #endif
03921 
03922 _IRQL_requires_(PASSIVE_LEVEL)
03923 _Success_(*Status >= 0)
03924 NDISAPI
03925 VOID
03926 NTAPI
03927 NdisReadNetworkAddress(
03928   _At_(*Status, _Must_inspect_result_) _Out_ PNDIS_STATUS Status,
03929   _Outptr_result_bytebuffer_to_(*NetworkAddressLength, *NetworkAddressLength)
03930     PVOID *NetworkAddress,
03931   _Out_ PUINT NetworkAddressLength,
03932   _In_ NDIS_HANDLE ConfigurationHandle);
03933 
03934 NDISAPI
03935 VOID
03936 NTAPI
03937 NdisReadEisaSlotInformation(
03938   OUT PNDIS_STATUS  Status,
03939   IN NDIS_HANDLE  WrapperConfigurationContext,
03940   OUT PUINT  SlotNumber,
03941   OUT PNDIS_EISA_FUNCTION_INFORMATION  EisaData);
03942 
03943 NDISAPI
03944 VOID
03945 NTAPI
03946 NdisReadEisaSlotInformationEx(
03947   OUT PNDIS_STATUS  Status,
03948   IN NDIS_HANDLE  WrapperConfigurationContext,
03949   OUT PUINT  SlotNumber,
03950   OUT PNDIS_EISA_FUNCTION_INFORMATION  *EisaData,
03951   OUT PUINT  NumberOfFunctions);
03952 
03953 #if NDIS_LEGACY_MINIPORT
03954 
03955 _IRQL_requires_max_(DISPATCH_LEVEL)
03956 NDISAPI
03957 ULONG
03958 NTAPI
03959 NdisReadPciSlotInformation(
03960   _In_ NDIS_HANDLE NdisAdapterHandle,
03961   _In_ ULONG SlotNumber,
03962   _In_ ULONG Offset,
03963   _Out_writes_bytes_(Length) PVOID Buffer,
03964   _In_ ULONG Length);
03965 
03966 _IRQL_requires_max_(DISPATCH_LEVEL)
03967 NDISAPI
03968 ULONG
03969 NTAPI
03970 NdisWritePciSlotInformation(
03971   _In_ NDIS_HANDLE NdisAdapterHandle,
03972   _In_ ULONG SlotNumber,
03973   _In_ ULONG Offset,
03974   _In_reads_bytes_(Length) PVOID Buffer,
03975   _In_ ULONG Length);
03976 
03977 _IRQL_requires_max_(DISPATCH_LEVEL)
03978 NDISAPI
03979 ULONG
03980 NTAPI
03981 NdisReadPcmciaAttributeMemory(
03982   _In_ NDIS_HANDLE NdisAdapterHandle,
03983   _In_ ULONG Offset,
03984   _Out_writes_bytes_(Length) PVOID Buffer,
03985   _In_ ULONG Length);
03986 
03987 _IRQL_requires_max_(DISPATCH_LEVEL)
03988 NDISAPI
03989 ULONG
03990 NTAPI
03991 NdisWritePcmciaAttributeMemory(
03992   _In_ NDIS_HANDLE NdisAdapterHandle,
03993   _In_ ULONG Offset,
03994   _In_reads_bytes_(Length) PVOID Buffer,
03995   _In_ ULONG Length);
03996 
03997 #endif /* NDIS_LEGACY_MINIPORT */
03998 
03999 /* String management routines */
04000 
04001 /*
04002 NDISAPI
04003 NDIS_STATUS
04004 NTAPI
04005 NdisAnsiStringToUnicodeString(
04006   IN OUT PNDIS_STRING DestinationString,
04007   IN PNDIS_ANSI_STRING SourceString);
04008 */
04009 #define NdisAnsiStringToUnicodeString(_us, _as) RtlAnsiStringToUnicodeString(_us, _as, FALSE)
04010 
04011 /*
04012  * BOOLEAN
04013  * NdisEqualString(
04014  *   IN PNDIS_STRING String1,
04015  *   IN PNDIS_STRING String2,
04016  *   IN BOOLEAN CaseInsensitive);
04017  */
04018 #define NdisEqualString RtlEqualString
04019 
04020 #define NdisEqualUnicodeString RtlEqualUnicodeString
04021 
04022 /*
04023 NDISAPI
04024 VOID
04025 NTAPI
04026 NdisInitAnsiString(
04027   IN OUT PNDIS_ANSI_STRING DestinationString,
04028   IN PCSTR SourceString);
04029 */
04030 #define NdisInitAnsiString RtlInitString
04031 
04032 NDISAPI
04033 VOID
04034 NTAPI
04035 NdisInitUnicodeString(
04036   IN OUT PNDIS_STRING  DestinationString,
04037   IN PCWSTR  SourceString);
04038 
04039 /*
04040 NDISAPI
04041 NDIS_STATUS
04042 NTAPI
04043 NdisUnicodeStringToAnsiString(
04044   IN OUT PNDIS_ANSI_STRING DestinationString,
04045   IN PNDIS_STRING SourceString);
04046 */
04047 #define NdisUnicodeStringToAnsiString(_as, _us) RtlUnicodeStringToAnsiString(_as, _us, FALSE)
04048 
04049 #define NdisFreeString(_s) NdisFreeMemory((_s).Buffer, (_s).MaximumLength, 0)
04050 #define NdisPrintString(_s) DbgPrint("%ls", (_s).Buffer)
04051 
04052 /* Spin lock reoutines */
04053 
04054 /*
04055 NDISAPI
04056 VOID
04057 NTAPI
04058 NdisAllocateSpinLock(
04059   IN PNDIS_SPIN_LOCK SpinLock);
04060 */
04061 #define NdisAllocateSpinLock(_SpinLock) KeInitializeSpinLock(&(_SpinLock)->SpinLock)
04062 
04063 /*
04064 NDISAPI
04065 VOID
04066 NTAPI
04067 NdisFreeSpinLock(
04068   IN PNDIS_SPIN_LOCK  SpinLock);
04069 */
04070 #define NdisFreeSpinLock(_SpinLock)
04071 
04072 /*
04073 NDISAPI
04074 VOID
04075 NTAPI
04076 NdisAcquireSpinLock(
04077   IN PNDIS_SPIN_LOCK  SpinLock);
04078 */
04079 #define NdisAcquireSpinLock(_SpinLock) KeAcquireSpinLock(&(_SpinLock)->SpinLock, &(_SpinLock)->OldIrql)
04080 
04081 /*
04082 NDISAPI
04083 VOID
04084 NTAPI
04085 NdisReleaseSpinLock(
04086   IN PNDIS_SPIN_LOCK  SpinLock);
04087 */
04088 #define NdisReleaseSpinLock(_SpinLock) KeReleaseSpinLock(&(_SpinLock)->SpinLock,(_SpinLock)->OldIrql)
04089 
04090 /*
04091 NDISAPI
04092 VOID
04093 NTAPI
04094 NdisDprAcquireSpinLock(
04095   IN PNDIS_SPIN_LOCK  SpinLock);
04096 */
04097 #define NdisDprAcquireSpinLock(_SpinLock) KeAcquireSpinLockAtDpcLevel(&(_SpinLock)->SpinLock)
04098 
04099 /*
04100 NDISAPI
04101 VOID
04102 NTAPI
04103 NdisDprReleaseSpinLock(
04104   IN PNDIS_SPIN_LOCK  SpinLock);
04105 */
04106 #define NdisDprReleaseSpinLock(_SpinLock) KeReleaseSpinLockFromDpcLevel(&(_SpinLock)->SpinLock)
04107 
04108 /* I/O routines */
04109 
04110 /*
04111  * VOID
04112  * NdisRawReadPortBufferUchar(
04113  *   IN ULONG Port,
04114  *   OUT PUCHAR Buffer,
04115  *   IN ULONG Length);
04116  */
04117 #define NdisRawReadPortBufferUchar(Port, Buffer, Length) \
04118   READ_PORT_BUFFER_UCHAR((PUCHAR)(Port), (PUCHAR)(Buffer), (Length))
04119 
04120 /*
04121  * VOID
04122  * NdisRawReadPortBufferUlong(
04123  *   IN ULONG Port,
04124  *   OUT PULONG Buffer,
04125  *   IN ULONG Length);
04126  */
04127 #define NdisRawReadPortBufferUlong(Port, Buffer, Length) \
04128   READ_PORT_BUFFER_ULONG((PULONG)(Port), (PULONG)(Buffer), (Length))
04129 
04130 /*
04131  * VOID
04132  * NdisRawReadPortBufferUshort(
04133  *   IN ULONG Port,
04134  *   OUT PUSHORT Buffer,
04135  *   IN ULONG Length);
04136  */
04137 #define NdisRawReadPortBufferUshort(Port, Buffer, Length) \
04138   READ_PORT_BUFFER_USHORT((PUSHORT)(Port), (PUSHORT)(Buffer), (Length))
04139 
04140 /*
04141  * VOID
04142  * NdisRawReadPortUchar(
04143  *   IN ULONG Port,
04144  *   OUT PUCHAR Data);
04145  */
04146 #define NdisRawReadPortUchar(Port, Data) \
04147   *(Data) = READ_PORT_UCHAR((PUCHAR)(Port))
04148 
04149 /*
04150  * VOID
04151  * NdisRawReadPortUlong(
04152  *   IN ULONG Port,
04153  *   OUT PULONG Data);
04154  */
04155 #define NdisRawReadPortUlong(Port, Data) \
04156   *(Data) = READ_PORT_ULONG((PULONG)(Port))
04157 
04158 /*
04159  * VOID
04160  * NdisRawReadPortUshort(
04161  *   IN ULONG Port,
04162  *   OUT PUSHORT Data);
04163  */
04164 #define NdisRawReadPortUshort(Port, Data) \
04165   *(Data) = READ_PORT_USHORT((PUSHORT)(Port))
04166 
04167 /*
04168  * VOID
04169  * NdisRawWritePortBufferUchar(
04170  *   IN ULONG Port,
04171  *   IN PUCHAR Buffer,
04172  *   IN ULONG Length);
04173  */
04174 #define NdisRawWritePortBufferUchar(Port, Buffer, Length) \
04175   WRITE_PORT_BUFFER_UCHAR((PUCHAR)(Port), (PUCHAR)(Buffer), (Length))
04176 
04177 /*
04178  * VOID
04179  * NdisRawWritePortBufferUlong(
04180  *   IN ULONG Port,
04181  *   IN PULONG Buffer,
04182  *   IN ULONG Length);
04183  */
04184 #define NdisRawWritePortBufferUlong(Port, Buffer, Length) \
04185   WRITE_PORT_BUFFER_ULONG((PULONG)(Port), (PULONG)(Buffer), (Length))
04186 
04187 /*
04188  * VOID
04189  * NdisRawWritePortBufferUshort(
04190  *   IN ULONG Port,
04191  *   IN PUSHORT Buffer,
04192  *   IN ULONG Length);
04193  */
04194 #define NdisRawWritePortBufferUshort(Port, Buffer, Length) \
04195   WRITE_PORT_BUFFER_USHORT((PUSHORT)(Port), (PUSHORT)(Buffer), (Length))
04196 
04197 /*
04198  * VOID
04199  * NdisRawWritePortUchar(
04200  *   IN ULONG Port,
04201  *   IN UCHAR Data);
04202  */
04203 #define NdisRawWritePortUchar(Port, Data) \
04204   WRITE_PORT_UCHAR((PUCHAR)(Port), (UCHAR)(Data))
04205 
04206 /*
04207  * VOID
04208  * NdisRawWritePortUlong(
04209  *   IN ULONG Port,
04210  *   IN ULONG Data);
04211  */
04212 #define NdisRawWritePortUlong(Port, Data) \
04213   WRITE_PORT_ULONG((PULONG)(Port), (ULONG)(Data))
04214 
04215 /*
04216  * VOID
04217  * NdisRawWritePortUshort(
04218  *   IN ULONG Port,
04219  *   IN USHORT Data);
04220  */
04221 #define NdisRawWritePortUshort(Port, Data) \
04222   WRITE_PORT_USHORT((PUSHORT)(Port), (USHORT)(Data))
04223 
04224 
04225 /*
04226  * VOID
04227  * NdisReadRegisterUchar(
04228  *   IN PUCHAR Register,
04229  *   OUT PUCHAR Data);
04230  */
04231 #define NdisReadRegisterUchar(Register, Data) \
04232   *(Data) = *(Register)
04233 
04234 /*
04235  * VOID
04236  * NdisReadRegisterUlong(
04237  *   IN PULONG  Register,
04238  *   OUT PULONG  Data);
04239  */
04240 #define NdisReadRegisterUlong(Register, Data)   \
04241   *(Data) = *(Register)
04242 
04243 /*
04244  * VOID
04245  * NdisReadRegisterUshort(
04246  *   IN PUSHORT Register,
04247  *   OUT PUSHORT Data);
04248  */
04249 #define NdisReadRegisterUshort(Register, Data) \
04250     *(Data) = *(Register)
04251 
04252 /*
04253  * VOID
04254  * NdisReadRegisterUchar(
04255  *   IN PUCHAR Register,
04256  *   IN UCHAR Data);
04257  */
04258 #define NdisWriteRegisterUchar(Register, Data) \
04259   WRITE_REGISTER_UCHAR((Register), (Data))
04260 
04261 /*
04262  * VOID
04263  * NdisReadRegisterUlong(
04264  *   IN PULONG Register,
04265  *   IN ULONG Data);
04266  */
04267 #define NdisWriteRegisterUlong(Register, Data) \
04268   WRITE_REGISTER_ULONG((Register), (Data))
04269 
04270 /*
04271  * VOID
04272  * NdisReadRegisterUshort(
04273  *   IN PUSHORT Register,
04274  *   IN USHORT Data);
04275  */
04276 #define NdisWriteRegisterUshort(Register, Data) \
04277   WRITE_REGISTER_USHORT((Register), (Data))
04278 
04279 
04280 /* Linked lists */
04281 
04282 /*
04283  * VOID
04284  * NdisInitializeListHead(
04285  *   IN PLIST_ENTRY ListHead);
04286  */
04287 #define NdisInitializeListHead InitializeListHead
04288 
04289 /*
04290  * PLIST_ENTRY
04291  * NdisInterlockedInsertHeadList(
04292  *   IN PLIST_ENTRY  ListHead,
04293  *   IN PLIST_ENTRY  ListEntry,
04294  *   IN PNDIS_SPIN_LOCK  SpinLock);
04295  */
04296 #define NdisInterlockedInsertHeadList(_ListHead, _ListEntry, _SpinLock) \
04297   ExInterlockedInsertHeadList(_ListHead, _ListEntry, &(_SpinLock)->SpinLock)
04298 
04299 /*
04300  * PLIST_ENTRY
04301  * NdisInterlockedInsertTailList(
04302  *   IN PLIST_ENTRY  ListHead,
04303  *   IN PLIST_ENTRY  ListEntry,
04304  *   IN PNDIS_SPIN_LOCK  SpinLock);
04305  */
04306 #define NdisInterlockedInsertTailList(_ListHead, _ListEntry, _SpinLock) \
04307   ExInterlockedInsertTailList(_ListHead, _ListEntry, &(_SpinLock)->SpinLock)
04308 
04309 /*
04310  * PLIST_ENTRY
04311  * NdisInterlockedRemoveHeadList(
04312  *   IN PLIST_ENTRY  ListHead,
04313  *   IN PNDIS_SPIN_LOCK  SpinLock);
04314 */
04315 #define NdisInterlockedRemoveHeadList(_ListHead, _SpinLock) \
04316   ExInterlockedRemoveHeadList(_ListHead, &(_SpinLock)->SpinLock)
04317 
04318 /*
04319  * VOID
04320  * NdisInitializeSListHead(
04321  *   IN PSLIST_HEADER SListHead);
04322  */
04323 #define NdisInitializeSListHead(SListHead) ExInitializeSListHead(SListHead)
04324 
04325 /*
04326  * USHORT NdisQueryDepthSList(
04327  *   IN PSLIST_HEADER SListHead);
04328  */
04329 #define NdisQueryDepthSList(SListHead) ExQueryDepthSList(SListHead)
04330 
04331 #define NdisInterlockedPushEntryList(ListHead, ListEntry, Lock) \
04332   ExInterlockedPushEntryList(ListHead, ListEntry, &(Lock)->SpinLock)
04333 
04334 #define NdisInterlockedPopEntryList(ListHead, Lock) \
04335   ExInterlockedPopEntryList(ListHead, &(Lock)->SpinLock)
04336 
04337 /* Non-paged lookaside lists */
04338 
04339 #define NdisInitializeNPagedLookasideList(_L, _AR, _FR, _Fl, _S, _T, _D) \
04340   ExInitializeNPagedLookasideList(_L, _AR, _FR, _Fl, _S, _T, _D)
04341 #define NdisDeleteNPagedLookasideList(_L) ExDeleteNPagedLookasideList(_L)
04342 #define NdisAllocateFromNPagedLookasideList(_L) ExAllocateFromNPagedLookasideList(_L)
04343 #define NdisFreeToNPagedLookasideList(_L, _E) ExFreeToNPagedLookasideList(_L, _E)
04344 
04345 /* Interlocked routines */
04346 
04347 /*
04348  * LONG
04349  * NdisInterlockedDecrement(
04350  *   IN PLONG  Addend);
04351  */
04352 #define NdisInterlockedDecrement(Addend) InterlockedDecrement(Addend)
04353 
04354 /*
04355  * LONG
04356  * NdisInterlockedIncrement(
04357  *   IN PLONG  Addend);
04358  */
04359 #define NdisInterlockedIncrement(Addend) InterlockedIncrement(Addend)
04360 
04361 /*
04362  * VOID
04363  * NdisInterlockedAddUlong(
04364  *   IN PULONG  Addend,
04365  *   IN ULONG  Increment,
04366  *   IN PNDIS_SPIN_LOCK  SpinLock);
04367  */
04368 #define NdisInterlockedAddUlong(_Addend, _Increment, _SpinLock) \
04369   ExInterlockedAddUlong(_Addend, _Increment, &(_SpinLock)->SpinLock)
04370 
04371 /* Miscellaneous routines */
04372 
04373 _IRQL_requires_(PASSIVE_LEVEL)
04374 NDISAPI
04375 VOID
04376 NTAPI
04377 NdisCloseConfiguration(
04378   _In_ __drv_freesMem(mem) NDIS_HANDLE ConfigurationHandle);
04379 
04380 _IRQL_requires_(PASSIVE_LEVEL)
04381 _Success_(*Status >= 0)
04382 NDISAPI
04383 VOID
04384 NTAPI
04385 NdisReadConfiguration(
04386   _At_(*Status, _Must_inspect_result_) _Out_ PNDIS_STATUS Status,
04387   _Out_ PNDIS_CONFIGURATION_PARAMETER *ParameterValue,
04388   _In_ NDIS_HANDLE ConfigurationHandle,
04389   _In_ PNDIS_STRING Keyword,
04390   _In_ NDIS_PARAMETER_TYPE ParameterType);
04391 
04392 _IRQL_requires_(PASSIVE_LEVEL)
04393 _Success_(*Status >= 0)
04394 NDISAPI
04395 VOID
04396 NTAPI
04397 NdisWriteConfiguration(
04398   _At_(*Status, _Must_inspect_result_) _Out_ PNDIS_STATUS Status,
04399   _In_ NDIS_HANDLE WrapperConfigurationContext,
04400   _In_ PNDIS_STRING Keyword,
04401   _In_ PNDIS_CONFIGURATION_PARAMETER ParameterValue);
04402 
04403 _IRQL_requires_max_(DISPATCH_LEVEL)
04404 NDISAPI
04405 VOID
04406 __cdecl
04407 NdisWriteErrorLogEntry(
04408   _In_ NDIS_HANDLE NdisAdapterHandle,
04409   _In_ NDIS_ERROR_CODE ErrorCode,
04410   _In_ ULONG NumberOfErrorValues,
04411   ...);
04412 
04413 _IRQL_requires_(PASSIVE_LEVEL)
04414 NDISAPI
04415 VOID
04416 NTAPI
04417 NdisInitializeString(
04418   _Out_ _At_(Destination->Buffer, __drv_allocatesMem(Mem)) PNDIS_STRING Destination,
04419   _In_opt_z_ PUCHAR Source);
04420 
04421 /*
04422  * VOID
04423  * NdisStallExecution(
04424  *   IN UINT MicrosecondsToStall)
04425  */
04426 #define NdisStallExecution KeStallExecutionProcessor
04427 
04428 /*
04429 NDISAPI
04430 VOID
04431 NTAPI
04432 NdisGetCurrentSystemTime(
04433   IN PLARGE_INTEGER  pSystemTime);
04434 */
04435 #define NdisGetCurrentSystemTime KeQuerySystemTime
04436 
04437 #if NDIS_SUPPORT_60_COMPATIBLE_API
04438 _IRQL_requires_(PASSIVE_LEVEL)
04439 NDISAPI
04440 CCHAR
04441 NTAPI
04442 NdisSystemProcessorCount(VOID);
04443 #endif
04444 
04445 NDISAPI
04446 VOID
04447 NTAPI
04448 NdisGetCurrentProcessorCpuUsage(
04449   OUT PULONG pCpuUsage);
04450 
04451 /* NDIS helper macros */
04452 
04453 /*
04454  * VOID
04455  * NDIS_INIT_FUNCTION(FunctionName)
04456  */
04457 #define NDIS_INIT_FUNCTION(FunctionName)    \
04458   alloc_text(init, FunctionName)
04459 
04460 /*
04461  * VOID
04462  * NDIS_PAGABLE_FUNCTION(FunctionName)
04463  */
04464 #define NDIS_PAGEABLE_FUNCTION(FunctionName) \
04465   alloc_text(page, FunctionName)
04466 
04467 #define NDIS_PAGABLE_FUNCTION NDIS_PAGEABLE_FUNCTION
04468 
04469 
04470 /* NDIS 4.0 extensions */
04471 
04472 _IRQL_requires_max_(DISPATCH_LEVEL)
04473 NDISAPI
04474 VOID
04475 NTAPI
04476 NdisMFreeSharedMemory(
04477   _In_ NDIS_HANDLE MiniportAdapterHandle,
04478   _In_ ULONG Length,
04479   _In_ BOOLEAN Cached,
04480   _In_reads_bytes_(Length) PVOID VirtualAddress,
04481   _In_ NDIS_PHYSICAL_ADDRESS PhysicalAddress);
04482 
04483 NDISAPI
04484 VOID
04485 NTAPI
04486 NdisMWanIndicateReceive(
04487     OUT PNDIS_STATUS  Status,
04488     IN NDIS_HANDLE  MiniportAdapterHandle,
04489     IN NDIS_HANDLE  NdisLinkContext,
04490     IN PUCHAR  PacketBuffer,
04491     IN UINT  PacketSize);
04492 
04493 NDISAPI
04494 VOID
04495 NTAPI
04496 NdisMWanIndicateReceiveComplete(
04497   IN NDIS_HANDLE MiniportAdapterHandle,
04498   IN NDIS_HANDLE NdisLinkContext);
04499 
04500 NDISAPI
04501 VOID
04502 NTAPI
04503 NdisMWanSendComplete(
04504     IN NDIS_HANDLE  MiniportAdapterHandle,
04505     IN PNDIS_WAN_PACKET  Packet,
04506     IN NDIS_STATUS  Status);
04507 
04508 NDISAPI
04509 NDIS_STATUS
04510 NTAPI
04511 NdisPciAssignResources(
04512     IN NDIS_HANDLE  NdisMacHandle,
04513     IN NDIS_HANDLE  NdisWrapperHandle,
04514     IN NDIS_HANDLE  WrapperConfigurationContext,
04515     IN ULONG  SlotNumber,
04516     OUT PNDIS_RESOURCE_LIST  *AssignedResources);
04517 
04518 
04519 /* NDIS 5.0 extensions */
04520 
04521 _IRQL_requires_max_(DISPATCH_LEVEL)
04522 NDISAPI
04523 NDIS_STATUS
04524 NTAPI
04525 NdisAllocateMemoryWithTag(
04526   _At_(*VirtualAddress, __drv_allocatesMem(Mem)) _Outptr_result_bytebuffer_(Length)
04527     PVOID *VirtualAddress,
04528   _In_ UINT Length,
04529   _In_ ULONG Tag);
04530 
04531 _IRQL_requires_max_(DISPATCH_LEVEL)
04532 NDISAPI
04533 VOID
04534 NTAPI
04535 NdisGetCurrentProcessorCounts(
04536   _Out_ PULONG pIdleCount,
04537   _Out_ PULONG pKernelAndUser,
04538   _Out_ PULONG pIndex);
04539 
04540 #if NDIS_LEGACY_DRIVER
04541 NDISAPI
04542 VOID
04543 NTAPI
04544 NdisGetSystemUpTime(
04545   OUT PULONG pSystemUpTime);
04546 #endif
04547 
04548 #if NDIS_SUPPORT_60_COMPATIBLE_API
04549 
04550 _IRQL_requires_max_(DISPATCH_LEVEL)
04551 _IRQL_raises_(DISPATCH_LEVEL)
04552 _When_(fWrite, _Acquires_exclusive_lock_(*Lock))
04553 _When_(!fWrite, _Acquires_shared_lock_(*Lock))
04554 NDISAPI
04555 VOID
04556 NTAPI
04557 NdisAcquireReadWriteLock(
04558   _Inout_ PNDIS_RW_LOCK Lock,
04559   _In_ BOOLEAN fWrite,
04560   _Out_ _IRQL_saves_ PLOCK_STATE LockState);
04561 
04562 _IRQL_requires_max_(DISPATCH_LEVEL)
04563 NDISAPI
04564 VOID
04565 NTAPI
04566 NdisInitializeReadWriteLock(
04567   _Out_ PNDIS_RW_LOCK Lock);
04568 
04569 _IRQL_requires_(DISPATCH_LEVEL)
04570 _Requires_lock_held_(*Lock)
04571 _Releases_lock_(*Lock)
04572 NDISAPI
04573 VOID
04574 NTAPI
04575 NdisReleaseReadWriteLock(
04576   _Inout_ PNDIS_RW_LOCK Lock,
04577   _In_ _IRQL_restores_ PLOCK_STATE LockState);
04578 
04579 #if NDIS_SUPPORT_NDIS6
04580 
04581 NDISAPI
04582 VOID
04583 NTAPI
04584 NdisDprAcquireReadWriteLock(
04585   IN PNDIS_RW_LOCK Lock,
04586   IN BOOLEAN fWrite,
04587   IN PLOCK_STATE LockState);
04588 
04589 NDISAPI
04590 VOID
04591 NTAPI
04592 NdisDprReleaseReadWriteLock(
04593   IN PNDIS_RW_LOCK Lock,
04594   IN PLOCK_STATE LockState);
04595 
04596 #endif /* NDIS_SUPPORT_NDIS6 */
04597 
04598 #endif /* NDIS_SUPPORT_60_COMPATIBLE_API */
04599 
04600 _IRQL_requires_(PASSIVE_LEVEL)
04601 NDISAPI
04602 NDIS_STATUS
04603 NTAPI
04604 NdisMDeregisterDevice(
04605   _In_ NDIS_HANDLE NdisDeviceHandle);
04606 
04607 _IRQL_requires_(PASSIVE_LEVEL)
04608 NDISAPI
04609 VOID
04610 NTAPI
04611 NdisMGetDeviceProperty(
04612   _In_ NDIS_HANDLE MiniportAdapterHandle,
04613   _Inout_opt_ PDEVICE_OBJECT *PhysicalDeviceObject,
04614   _Inout_opt_ PDEVICE_OBJECT *FunctionalDeviceObject,
04615   _Inout_opt_ PDEVICE_OBJECT *NextDeviceObject,
04616   _Inout_opt_ PCM_RESOURCE_LIST *AllocatedResources,
04617   _Inout_opt_ PCM_RESOURCE_LIST *AllocatedResourcesTranslated);
04618 
04619 _IRQL_requires_(PASSIVE_LEVEL)
04620 NDISAPI
04621 NDIS_STATUS
04622 NTAPI
04623 NdisMInitializeScatterGatherDma(
04624   _In_ NDIS_HANDLE MiniportAdapterHandle,
04625   _In_ BOOLEAN Dma64BitAddresses,
04626   _In_ ULONG MaximumPhysicalMapping);
04627 
04628 _IRQL_requires_max_(DISPATCH_LEVEL)
04629 NDISAPI
04630 NDIS_STATUS
04631 NTAPI
04632 NdisMPromoteMiniport(
04633   _In_ NDIS_HANDLE MiniportAdapterHandle);
04634 
04635 _IRQL_requires_(PASSIVE_LEVEL)
04636 NDISAPI
04637 NDIS_STATUS
04638 NTAPI
04639 NdisMQueryAdapterInstanceName(
04640   _Out_ PNDIS_STRING AdapterInstanceName,
04641   _In_ NDIS_HANDLE MiniportAdapterHandle);
04642 
04643 _IRQL_requires_(PASSIVE_LEVEL)
04644 NDISAPI
04645 NDIS_STATUS
04646 NTAPI
04647 NdisMRegisterDevice(
04648   _In_ NDIS_HANDLE NdisWrapperHandle,
04649   _In_ PNDIS_STRING DeviceName,
04650   _In_ PNDIS_STRING SymbolicName,
04651   _In_reads_(IRP_MJ_PNP) PDRIVER_DISPATCH *MajorFunctions,
04652   _Out_ PDEVICE_OBJECT *pDeviceObject,
04653   _Out_ NDIS_HANDLE *NdisDeviceHandle);
04654 
04655 _IRQL_requires_(PASSIVE_LEVEL)
04656 NDISAPI
04657 VOID
04658 NTAPI
04659 NdisMRegisterUnloadHandler(
04660   _In_ NDIS_HANDLE NdisWrapperHandle,
04661   _In_ PDRIVER_UNLOAD UnloadHandler);
04662 
04663 _IRQL_requires_max_(DISPATCH_LEVEL)
04664 NDISAPI
04665 NDIS_STATUS
04666 NTAPI
04667 NdisMRemoveMiniport(
04668   _In_ NDIS_HANDLE MiniportAdapterHandle);
04669 
04670 _IRQL_requires_(PASSIVE_LEVEL)
04671 NDISAPI
04672 NDIS_STATUS
04673 NTAPI
04674 NdisMSetMiniportSecondary(
04675   _In_ NDIS_HANDLE MiniportAdapterHandle,
04676   _In_ NDIS_HANDLE PrimaryMiniportAdapterHandle);
04677 
04678 _IRQL_requires_max_(APC_LEVEL)
04679 _Success_(*Status >= 0)
04680 NDISAPI
04681 VOID
04682 NTAPI
04683 NdisOpenConfigurationKeyByIndex(
04684   _At_(*Status, _Must_inspect_result_) _Out_ PNDIS_STATUS Status,
04685   _In_ NDIS_HANDLE ConfigurationHandle,
04686   _In_ ULONG Index,
04687   _Out_ PNDIS_STRING KeyName,
04688   _Out_ PNDIS_HANDLE KeyHandle);
04689 
04690 _IRQL_requires_max_(APC_LEVEL)
04691 _Success_(*Status >= 0)
04692 NDISAPI
04693 VOID
04694 NTAPI
04695 NdisOpenConfigurationKeyByName(
04696   _At_(*Status, _Must_inspect_result_) _Out_ PNDIS_STATUS Status,
04697   _In_ NDIS_HANDLE ConfigurationHandle,
04698   _In_ PNDIS_STRING SubKeyName,
04699   _Out_ PNDIS_HANDLE SubKeyHandle);
04700 
04701 _Must_inspect_result_
04702 _IRQL_requires_max_(DISPATCH_LEVEL)
04703 NDISAPI
04704 NDIS_STATUS
04705 NTAPI
04706 NdisQueryAdapterInstanceName(
04707   _Out_ PNDIS_STRING AdapterInstanceName,
04708   _In_ NDIS_HANDLE NdisBindingHandle);
04709 
04710 _Must_inspect_result_
04711 NDISAPI
04712 NDIS_STATUS
04713 NTAPI
04714 NdisQueryBindInstanceName(
04715   _Out_ PNDIS_STRING pAdapterInstanceName,
04716   _In_ NDIS_HANDLE BindingContext);
04717 
04718 _IRQL_requires_max_(DISPATCH_LEVEL)
04719 NDISAPI
04720 NDIS_STATUS
04721 NTAPI
04722 NdisWriteEventLogEntry(
04723   _In_ _Points_to_data_ PVOID LogHandle,
04724   _In_ NDIS_STATUS EventCode,
04725   _In_ ULONG UniqueEventValue,
04726   _In_ USHORT NumStrings,
04727   _In_opt_ PVOID StringsList,
04728   _In_ ULONG DataSize,
04729   _In_reads_bytes_opt_(DataSize) PVOID Data);
04730 
04731 /* Connectionless services */
04732 
04733 _Must_inspect_result_
04734 _IRQL_requires_max_(DISPATCH_LEVEL)
04735 NDISAPI
04736 NDIS_STATUS
04737 NTAPI
04738 NdisClAddParty(
04739   _In_ NDIS_HANDLE NdisVcHandle,
04740   _In_ NDIS_HANDLE ProtocolPartyContext,
04741   _In_ PCO_CALL_PARAMETERS CallParameters,
04742   _Out_ PNDIS_HANDLE NdisPartyHandle);
04743 
04744 _Must_inspect_result_
04745 _IRQL_requires_max_(DISPATCH_LEVEL)
04746 NDISAPI
04747 NDIS_STATUS
04748 NTAPI
04749 NdisClCloseAddressFamily(
04750   _In_ NDIS_HANDLE NdisAfHandle);
04751 
04752 _Must_inspect_result_
04753 _IRQL_requires_max_(DISPATCH_LEVEL)
04754 NDISAPI
04755 NDIS_STATUS
04756 NTAPI
04757 NdisClCloseCall(
04758   _In_ NDIS_HANDLE NdisVcHandle,
04759   _In_opt_ NDIS_HANDLE NdisPartyHandle,
04760   _In_reads_bytes_opt_(Size) PVOID Buffer,
04761   _In_ UINT Size);
04762 
04763 _Must_inspect_result_
04764 _IRQL_requires_max_(DISPATCH_LEVEL)
04765 NDISAPI
04766 NDIS_STATUS
04767 NTAPI
04768 NdisClDeregisterSap(
04769   _In_ NDIS_HANDLE NdisSapHandle);
04770 
04771 _Must_inspect_result_
04772 _IRQL_requires_max_(DISPATCH_LEVEL)
04773 NDISAPI
04774 NDIS_STATUS
04775 NTAPI
04776 NdisClDropParty(
04777   _In_ NDIS_HANDLE NdisPartyHandle,
04778   _In_reads_bytes_opt_(Size) PVOID Buffer,
04779   _In_opt_ UINT Size);
04780 
04781 _IRQL_requires_max_(DISPATCH_LEVEL)
04782 NDISAPI
04783 VOID
04784 NTAPI
04785 NdisClIncomingCallComplete(
04786   _In_ NDIS_STATUS Status,
04787   _In_ NDIS_HANDLE NdisVcHandle,
04788   _In_ PCO_CALL_PARAMETERS CallParameters);
04789 
04790 _Must_inspect_result_
04791 _IRQL_requires_max_(DISPATCH_LEVEL)
04792 NDISAPI
04793 NDIS_STATUS
04794 NTAPI
04795 NdisClMakeCall(
04796   _In_ NDIS_HANDLE NdisVcHandle,
04797   _Inout_ PCO_CALL_PARAMETERS CallParameters,
04798   _In_opt_ NDIS_HANDLE ProtocolPartyContext,
04799   _Out_opt_ PNDIS_HANDLE NdisPartyHandle);
04800 
04801 _Must_inspect_result_
04802 _IRQL_requires_max_(DISPATCH_LEVEL)
04803 NDISAPI
04804 NDIS_STATUS
04805 NTAPI
04806 NdisClModifyCallQoS(
04807   _In_ NDIS_HANDLE NdisVcHandle,
04808   _In_ PCO_CALL_PARAMETERS CallParameters);
04809 
04810 _Must_inspect_result_
04811 _IRQL_requires_(PASSIVE_LEVEL)
04812 NDISAPI
04813 NDIS_STATUS
04814 NTAPI
04815 NdisClOpenAddressFamily(
04816   _In_ NDIS_HANDLE NdisBindingHandle,
04817   _In_ PCO_ADDRESS_FAMILY AddressFamily,
04818   _In_ NDIS_HANDLE ProtocolAfContext,
04819   _In_ PNDIS_CLIENT_CHARACTERISTICS ClCharacteristics,
04820   _In_ UINT SizeOfClCharacteristics,
04821   _Out_ PNDIS_HANDLE NdisAfHandle);
04822 
04823 _Must_inspect_result_
04824 _IRQL_requires_max_(DISPATCH_LEVEL)
04825 NDISAPI
04826 NDIS_STATUS
04827 NTAPI
04828 NdisClRegisterSap(
04829   _In_ NDIS_HANDLE NdisAfHandle,
04830   _In_ NDIS_HANDLE ProtocolSapContext,
04831   _In_ PCO_SAP Sap,
04832   _Out_ PNDIS_HANDLE NdisSapHandle);
04833 
04834 
04835 /* Call Manager services */
04836 
04837 _Must_inspect_result_
04838 _IRQL_requires_max_(DISPATCH_LEVEL)
04839 NDISAPI
04840 NDIS_STATUS
04841 NTAPI
04842 NdisCmActivateVc(
04843   _In_ NDIS_HANDLE NdisVcHandle,
04844   _Inout_ PCO_CALL_PARAMETERS CallParameters);
04845 
04846 _IRQL_requires_max_(DISPATCH_LEVEL)
04847 NDISAPI
04848 VOID
04849 NTAPI
04850 NdisCmAddPartyComplete(
04851   _In_ NDIS_STATUS Status,
04852   _In_ NDIS_HANDLE NdisPartyHandle,
04853   _In_opt_ NDIS_HANDLE CallMgrPartyContext,
04854   _In_ PCO_CALL_PARAMETERS CallParameters);
04855 
04856 _IRQL_requires_max_(DISPATCH_LEVEL)
04857 NDISAPI
04858 VOID
04859 NTAPI
04860 NdisCmCloseAddressFamilyComplete(
04861   _In_ NDIS_STATUS Status,
04862   _In_ NDIS_HANDLE NdisAfHandle);
04863 
04864 _IRQL_requires_max_(DISPATCH_LEVEL)
04865 NDISAPI
04866 VOID
04867 NTAPI
04868 NdisCmCloseCallComplete(
04869   _In_ NDIS_STATUS Status,
04870   _In_ NDIS_HANDLE NdisVcHandle,
04871   _In_opt_ NDIS_HANDLE NdisPartyHandle);
04872 
04873 _Must_inspect_result_
04874 _IRQL_requires_max_(DISPATCH_LEVEL)
04875 NDISAPI
04876 NDIS_STATUS
04877 NTAPI
04878 NdisCmDeactivateVc(
04879   _In_ NDIS_HANDLE NdisVcHandle);
04880 
04881 _IRQL_requires_max_(DISPATCH_LEVEL)
04882 NDISAPI
04883 VOID
04884 NTAPI
04885 NdisCmDeregisterSapComplete(
04886   _In_ NDIS_STATUS Status,
04887   _In_ NDIS_HANDLE NdisSapHandle);
04888 
04889 _IRQL_requires_max_(DISPATCH_LEVEL)
04890 NDISAPI
04891 VOID
04892 NTAPI
04893 NdisCmDispatchCallConnected(
04894   _In_ NDIS_HANDLE NdisVcHandle);
04895 
04896 _Must_inspect_result_
04897 _IRQL_requires_max_(DISPATCH_LEVEL)
04898 NDISAPI
04899 NDIS_STATUS
04900 NTAPI
04901 NdisCmDispatchIncomingCall(
04902   _In_ NDIS_HANDLE NdisSapHandle,
04903   _In_ NDIS_HANDLE NdisVcHandle,
04904   _In_ PCO_CALL_PARAMETERS CallParameters);
04905 
04906 _IRQL_requires_max_(DISPATCH_LEVEL)
04907 NDISAPI
04908 VOID
04909 NTAPI
04910 NdisCmDispatchIncomingCallQoSChange(
04911   _In_ NDIS_HANDLE NdisVcHandle,
04912   _In_ PCO_CALL_PARAMETERS CallParameters);
04913 
04914 _IRQL_requires_max_(DISPATCH_LEVEL)
04915 NDISAPI
04916 VOID
04917 NTAPI
04918 NdisCmDispatchIncomingCloseCall(
04919   _In_ NDIS_STATUS CloseStatus,
04920   _In_ NDIS_HANDLE NdisVcHandle,
04921   _In_reads_bytes_opt_(Size) PVOID Buffer,
04922   _In_ UINT Size);
04923 
04924 _IRQL_requires_max_(DISPATCH_LEVEL)
04925 NDISAPI
04926 VOID
04927 NTAPI
04928 NdisCmDispatchIncomingDropParty(
04929   _In_ NDIS_STATUS DropStatus,
04930   _In_ NDIS_HANDLE NdisPartyHandle,
04931   _In_reads_bytes_opt_(Size) PVOID Buffer,
04932   _In_ UINT Size);
04933 
04934 _IRQL_requires_max_(DISPATCH_LEVEL)
04935 NDISAPI
04936 VOID
04937 NTAPI
04938 NdisCmDropPartyComplete(
04939   _In_ NDIS_STATUS Status,
04940   _In_ NDIS_HANDLE NdisPartyHandle);
04941 
04942 _IRQL_requires_max_(DISPATCH_LEVEL)
04943 NDISAPI
04944 VOID
04945 NTAPI
04946 NdisCmMakeCallComplete(
04947   _In_ NDIS_STATUS Status,
04948   _In_ NDIS_HANDLE NdisVcHandle,
04949   _In_opt_ NDIS_HANDLE NdisPartyHandle,
04950   _In_opt_ NDIS_HANDLE CallMgrPartyContext,
04951   _In_ PCO_CALL_PARAMETERS CallParameters);
04952 
04953 _IRQL_requires_max_(DISPATCH_LEVEL)
04954 NDISAPI
04955 VOID
04956 NTAPI
04957 NdisCmModifyCallQoSComplete(
04958   _In_ NDIS_STATUS Status,
04959   _In_ NDIS_HANDLE NdisVcHandle,
04960   _In_ PCO_CALL_PARAMETERS CallParameters);
04961 
04962 _IRQL_requires_max_(DISPATCH_LEVEL)
04963 NDISAPI
04964 VOID
04965 NTAPI
04966 NdisCmOpenAddressFamilyComplete(
04967   _In_ NDIS_STATUS Status,
04968   _In_ NDIS_HANDLE NdisAfHandle,
04969   _In_ NDIS_HANDLE CallMgrAfContext);
04970 
04971 _Must_inspect_result_
04972 _IRQL_requires_(PASSIVE_LEVEL)
04973 NDISAPI
04974 NDIS_STATUS
04975 NTAPI
04976 NdisCmRegisterAddressFamily(
04977   _In_ NDIS_HANDLE NdisBindingHandle,
04978   _In_ PCO_ADDRESS_FAMILY AddressFamily,
04979   _In_ PNDIS_CALL_MANAGER_CHARACTERISTICS CmCharacteristics,
04980   _In_ UINT SizeOfCmCharacteristics);
04981 
04982 _IRQL_requires_max_(DISPATCH_LEVEL)
04983 NDISAPI
04984 VOID
04985 NTAPI
04986 NdisCmRegisterSapComplete(
04987   _In_ NDIS_STATUS Status,
04988   _In_ NDIS_HANDLE NdisSapHandle,
04989   _In_ NDIS_HANDLE CallMgrSapContext);
04990 
04991 _IRQL_requires_max_(DISPATCH_LEVEL)
04992 NDISAPI
04993 NDIS_STATUS
04994 NTAPI
04995 NdisMCmActivateVc(
04996   _In_ NDIS_HANDLE NdisVcHandle,
04997   _In_ PCO_CALL_PARAMETERS CallParameters);
04998 
04999 _IRQL_requires_max_(DISPATCH_LEVEL)
05000 NDISAPI
05001 NDIS_STATUS
05002 NTAPI
05003 NdisMCmCreateVc(
05004   _In_ NDIS_HANDLE MiniportAdapterHandle,
05005   _In_ NDIS_HANDLE NdisAfHandle,
05006   _In_ NDIS_HANDLE MiniportVcContext,
05007   _Out_ PNDIS_HANDLE NdisVcHandle);
05008 
05009 _IRQL_requires_max_(DISPATCH_LEVEL)
05010 NDISAPI
05011 NDIS_STATUS
05012 NTAPI
05013 NdisMCmDeactivateVc(
05014   _In_ NDIS_HANDLE NdisVcHandle);
05015 
05016 _IRQL_requires_max_(DISPATCH_LEVEL)
05017 NDISAPI
05018 NDIS_STATUS
05019 NTAPI
05020 NdisMCmDeleteVc(
05021   _In_ NDIS_HANDLE NdisVcHandle);
05022 
05023 NDISAPI
05024 NDIS_STATUS
05025 NTAPI
05026 NdisMCmRegisterAddressFamily(
05027   IN NDIS_HANDLE  MiniportAdapterHandle,
05028   IN PCO_ADDRESS_FAMILY  AddressFamily,
05029   IN PNDIS_CALL_MANAGER_CHARACTERISTICS  CmCharacteristics,
05030   IN UINT  SizeOfCmCharacteristics);
05031 
05032 _IRQL_requires_max_(DISPATCH_LEVEL)
05033 NDISAPI
05034 NDIS_STATUS
05035 NTAPI
05036 NdisMCmRequest(
05037   _In_ NDIS_HANDLE NdisAfHandle,
05038   _In_opt_ NDIS_HANDLE NdisVcHandle,
05039   _In_opt_ NDIS_HANDLE NdisPartyHandle,
05040   _Inout_ PNDIS_REQUEST NdisRequest);
05041 
05042 
05043 /* Connection-oriented services */
05044 
05045 _Must_inspect_result_
05046 _IRQL_requires_max_(DISPATCH_LEVEL)
05047 NDISAPI
05048 NDIS_STATUS
05049 NTAPI
05050 NdisCoCreateVc(
05051   _In_ NDIS_HANDLE NdisBindingHandle,
05052   _In_opt_ NDIS_HANDLE NdisAfHandle ,
05053   _In_ NDIS_HANDLE ProtocolVcContext,
05054   _Inout_ PNDIS_HANDLE NdisVcHandle);
05055 
05056 _Must_inspect_result_
05057 _IRQL_requires_max_(DISPATCH_LEVEL)
05058 NDISAPI
05059 NDIS_STATUS
05060 NTAPI
05061 NdisCoDeleteVc(
05062   _In_ NDIS_HANDLE NdisVcHandle);
05063 
05064 _Must_inspect_result_
05065 _IRQL_requires_max_(DISPATCH_LEVEL)
05066 NDISAPI
05067 NDIS_STATUS
05068 NTAPI
05069 NdisCoRequest(
05070   _In_ NDIS_HANDLE NdisBindingHandle,
05071   _In_opt_ NDIS_HANDLE NdisAfHandle,
05072   _In_opt_ NDIS_HANDLE NdisVcHandle,
05073   _In_opt_ NDIS_HANDLE NdisPartyHandle,
05074   _Inout_ PNDIS_REQUEST NdisRequest);
05075 
05076 _IRQL_requires_max_(DISPATCH_LEVEL)
05077 NDISAPI
05078 VOID
05079 NTAPI
05080 NdisCoRequestComplete(
05081   _In_ NDIS_STATUS Status,
05082   _In_ NDIS_HANDLE NdisAfHandle,
05083   _In_opt_ NDIS_HANDLE NdisVcHandle,
05084   _In_opt_ NDIS_HANDLE NdisPartyHandle,
05085   _In_ PNDIS_REQUEST NdisRequest);
05086 
05087 _IRQL_requires_max_(DISPATCH_LEVEL)
05088 NDISAPI
05089 VOID
05090 NTAPI
05091 NdisCoSendPackets(
05092   _In_ NDIS_HANDLE NdisVcHandle,
05093   _In_ PPNDIS_PACKET PacketArray,
05094   _In_ UINT NumberOfPackets);
05095 
05096 _IRQL_requires_max_(DISPATCH_LEVEL)
05097 NDISAPI
05098 VOID
05099 NTAPI
05100 NdisMCoActivateVcComplete(
05101   _In_ NDIS_STATUS Status,
05102   _In_ NDIS_HANDLE NdisVcHandle,
05103   _In_ PCO_CALL_PARAMETERS CallParameters);
05104 
05105 _IRQL_requires_max_(DISPATCH_LEVEL)
05106 NDISAPI
05107 VOID
05108 NTAPI
05109 NdisMCoDeactivateVcComplete(
05110   _In_ NDIS_STATUS Status,
05111   _In_ NDIS_HANDLE NdisVcHandle);
05112 
05113 _IRQL_requires_(DISPATCH_LEVEL)
05114 NDISAPI
05115 VOID
05116 NTAPI
05117 NdisMCoIndicateReceivePacket(
05118   _In_ NDIS_HANDLE NdisVcHandle,
05119   _In_ PPNDIS_PACKET PacketArray,
05120   _In_ UINT NumberOfPackets);
05121 
05122 _IRQL_requires_max_(DISPATCH_LEVEL)
05123 NDISAPI
05124 VOID
05125 NTAPI
05126 NdisMCoIndicateStatus(
05127   _In_ NDIS_HANDLE MiniportAdapterHandle,
05128   _In_opt_ NDIS_HANDLE NdisVcHandle,
05129   _In_ NDIS_STATUS GeneralStatus,
05130   _In_reads_bytes_opt_(StatusBufferSize) PVOID StatusBuffer,
05131   _In_ ULONG StatusBufferSize);
05132 
05133 _IRQL_requires_(DISPATCH_LEVEL)
05134 NDISAPI
05135 VOID
05136 NTAPI
05137 NdisMCoReceiveComplete(
05138   _In_ NDIS_HANDLE MiniportAdapterHandle);
05139 
05140 _IRQL_requires_max_(DISPATCH_LEVEL)
05141 NDISAPI
05142 VOID
05143 NTAPI
05144 NdisMCoRequestComplete(
05145   _In_ NDIS_STATUS Status,
05146   _In_ NDIS_HANDLE MiniportAdapterHandle,
05147   _In_ PNDIS_REQUEST Request);
05148 
05149 _IRQL_requires_(DISPATCH_LEVEL)
05150 NDISAPI
05151 VOID
05152 NTAPI
05153 NdisMCoSendComplete(
05154   _In_ NDIS_STATUS Status,
05155   _In_ NDIS_HANDLE NdisVcHandle,
05156   _In_ PNDIS_PACKET Packet);
05157 
05158 
05159 /* NDIS 5.0 extensions for intermediate drivers */
05160 
05161 _IRQL_requires_(PASSIVE_LEVEL)
05162 NDISAPI
05163 VOID
05164 NTAPI
05165 NdisIMAssociateMiniport(
05166   _In_ NDIS_HANDLE DriverHandle,
05167   _In_ NDIS_HANDLE ProtocolHandle);
05168 
05169 _IRQL_requires_(PASSIVE_LEVEL)
05170 NDISAPI
05171 NDIS_STATUS
05172 NTAPI
05173 NdisIMCancelInitializeDeviceInstance(
05174   _In_ NDIS_HANDLE DriverHandle,
05175   _In_ PNDIS_STRING DeviceInstance);
05176 
05177 NDISAPI
05178 VOID
05179 NTAPI
05180 NdisIMCopySendCompletePerPacketInfo(
05181   IN PNDIS_PACKET  DstPacket,
05182   IN PNDIS_PACKET  SrcPacket);
05183 
05184 NDISAPI
05185 VOID
05186 NTAPI
05187 NdisIMCopySendPerPacketInfo(
05188   IN PNDIS_PACKET  DstPacket,
05189   IN PNDIS_PACKET  SrcPacket);
05190 
05191 _IRQL_requires_(PASSIVE_LEVEL)
05192 NDISAPI
05193 VOID
05194 NTAPI
05195 NdisIMDeregisterLayeredMiniport(
05196   _In_ NDIS_HANDLE DriverHandle);
05197 
05198 _IRQL_requires_max_(APC_LEVEL)
05199 NDISAPI
05200 NDIS_HANDLE
05201 NTAPI
05202 NdisIMGetBindingContext(
05203   _In_ NDIS_HANDLE NdisBindingHandle);
05204 
05205 _IRQL_requires_max_(DISPATCH_LEVEL)
05206 NDISAPI
05207 NDIS_HANDLE
05208 NTAPI
05209 NdisIMGetDeviceContext(
05210   _In_ NDIS_HANDLE MiniportAdapterHandle);
05211 
05212 _IRQL_requires_(PASSIVE_LEVEL)
05213 NDISAPI
05214 NDIS_STATUS
05215 NTAPI
05216 NdisIMInitializeDeviceInstanceEx(
05217   _In_ NDIS_HANDLE DriverHandle,
05218   _In_ PNDIS_STRING DriverInstance,
05219   _In_opt_ NDIS_HANDLE DeviceContext);
05220 
05221 /*
05222 NDISAPI
05223 PSINGLE_LIST_ENTRY
05224 NTAPI
05225 NdisInterlockedPopEntrySList(
05226   IN PSLIST_HEADER ListHead,
05227   IN PKSPIN_LOCK Lock);
05228 */
05229 #define NdisInterlockedPopEntrySList(SListHead, Lock) \
05230   ExInterlockedPopEntrySList(SListHead, &(Lock)->SpinLock)
05231 
05232 /*
05233 NDISAPI
05234 PSINGLE_LIST_ENTRY
05235 NTAPI
05236 NdisInterlockedPushEntrySList(
05237   IN PSLIST_HEADER ListHead,
05238   IN PSINGLE_LIST_ENTRY ListEntry,
05239   IN PKSPIN_LOCK Lock);
05240 */
05241 #define NdisInterlockedPushEntrySList(SListHead, SListEntry, Lock) \
05242   ExInterlockedPushEntrySList(SListHead, SListEntry, &(Lock)->SpinLock)
05243 
05244 #define NdisInterlockedFlushSList(SListHead) ExInterlockedFlushSList(SListHead)
05245 
05246 /*
05247 NDISAPI
05248 VOID
05249 NTAPI
05250 NdisQueryBufferSafe(
05251   IN PNDIS_BUFFER Buffer,
05252   OUT PVOID *VirtualAddress OPTIONAL,
05253   OUT PUINT Length,
05254   IN UINT Priority);
05255 */
05256 #define NdisQueryBufferSafe(_Buffer, _VirtualAddress, _Length, _Priority) {         \
05257   if (ARGUMENT_PRESENT(_VirtualAddress)) {                                          \
05258     *(PVOID *)(_VirtualAddress) = MmGetSystemAddressForMdlSafe(_Buffer, _Priority); \
05259   }                                                                                 \
05260   *(_Length) = MmGetMdlByteCount(_Buffer);                                          \
05261 }
05262 
05263 /* Routines for NDIS miniport drivers */
05264 
05265 #if NDIS_SUPPORT_NDIS6
05266 
05267 NDISAPI
05268 PNDIS_GENERIC_OBJECT
05269 NTAPI
05270 NdisAllocateGenericObject(
05271   PDRIVER_OBJECT DriverObject OPTIONAL,
05272   ULONG Tag,
05273   USHORT Size);
05274 
05275 NDISAPI
05276 VOID
05277 NTAPI
05278 NdisFreeGenericObject(
05279   IN PNDIS_GENERIC_OBJECT NdisObject);
05280 
05281 #endif /* NDIS_SUPPORT_NDIS6 */
05282 
05283 NDISAPI
05284 VOID
05285 NTAPI
05286 NdisInitializeWrapper(
05287   OUT PNDIS_HANDLE  NdisWrapperHandle,
05288   IN PVOID  SystemSpecific1,
05289   IN PVOID  SystemSpecific2,
05290   IN PVOID  SystemSpecific3);
05291 
05292 _Must_inspect_result_
05293 _IRQL_requires_(PASSIVE_LEVEL)
05294 __drv_preferredFunction("NdisMInitializeScatterGatherDma", "See details in NdisMAllocateMapRegisters documentation")
05295 NDISAPI
05296 NDIS_STATUS
05297 NTAPI
05298 NdisMAllocateMapRegisters(
05299   _In_ NDIS_HANDLE MiniportAdapterHandle,
05300   _In_ UINT DmaChannel,
05301   _In_ NDIS_DMA_SIZE DmaSize,
05302   _In_ ULONG PhysicalMapRegistersNeeded,
05303   _In_ ULONG MaximumPhysicalMapping);
05304 
05305 /*
05306  * VOID
05307  * NdisMArcIndicateReceive(
05308  *   IN NDIS_HANDLE  MiniportAdapterHandle,
05309  *   IN PUCHAR  HeaderBuffer,
05310  *   IN PUCHAR  DataBuffer,
05311  *   IN UINT  Length);
05312  */
05313 #define NdisMArcIndicateReceive(MiniportAdapterHandle, \
05314                                 HeaderBuffer,          \
05315                                 DataBuffer,            \
05316                                 Length)                \
05317 {                                                      \
05318     ArcFilterDprIndicateReceive(                       \
05319         (((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->ArcDB), \
05320         (HeaderBuffer), \
05321         (DataBuffer),   \
05322         (Length));      \
05323 }
05324 
05325 /*
05326  * VOID
05327  * NdisMArcIndicateReceiveComplete(
05328  *   IN NDIS_HANDLE  MiniportAdapterHandle);
05329  */
05330 #define NdisMArcIndicateReceiveComplete(MiniportAdapterHandle) \
05331 {                                                              \
05332     if (((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->EthDB)  \
05333         {                                                        \
05334             NdisMEthIndicateReceiveComplete(_H);                 \
05335         }                                                        \
05336                                                                \
05337     ArcFilterDprIndicateReceiveComplete(                       \
05338       ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->ArcDB);   \
05339 }
05340 
05341 _IRQL_requires_(PASSIVE_LEVEL)
05342 NDISAPI
05343 VOID
05344 NTAPI
05345 NdisMCloseLog(
05346   _In_ NDIS_HANDLE LogHandle);
05347 
05348 _IRQL_requires_(PASSIVE_LEVEL)
05349 NDISAPI
05350 NDIS_STATUS
05351 NTAPI
05352 NdisMCreateLog(
05353   _In_ NDIS_HANDLE MiniportAdapterHandle,
05354   _In_ UINT Size,
05355   _Out_ PNDIS_HANDLE LogHandle);
05356 
05357 NDISAPI
05358 VOID
05359 NTAPI
05360 NdisMDeregisterAdapterShutdownHandler(
05361   _In_ NDIS_HANDLE MiniportHandle);
05362 
05363 #if NDIS_LEGACY_MINIPORT
05364 
05365 _IRQL_requires_(PASSIVE_LEVEL)
05366 NDISAPI
05367 VOID
05368 NTAPI
05369 NdisMDeregisterInterrupt(
05370   _In_ PNDIS_MINIPORT_INTERRUPT Interrupt);
05371 
05372 _IRQL_requires_(PASSIVE_LEVEL)
05373 NDISAPI
05374 VOID
05375 NTAPI
05376 NdisMRegisterAdapterShutdownHandler(
05377   _In_ NDIS_HANDLE MiniportHandle,
05378   _In_ PVOID ShutdownContext,
05379   _In_ ADAPTER_SHUTDOWN_HANDLER ShutdownHandler);
05380 
05381 NDISAPI
05382 NDIS_STATUS
05383 NTAPI
05384 NdisMRegisterInterrupt(
05385   OUT PNDIS_MINIPORT_INTERRUPT Interrupt,
05386   IN NDIS_HANDLE MiniportAdapterHandle,
05387   IN UINT InterruptVector,
05388   IN UINT InterruptLevel,
05389   IN BOOLEAN RequestIsr,
05390   IN BOOLEAN SharedInterrupt,
05391   IN NDIS_INTERRUPT_MODE InterruptMode);
05392 
05393 NDISAPI
05394 NDIS_STATUS
05395 NTAPI
05396 NdisMRegisterMiniport(
05397   IN NDIS_HANDLE NdisWrapperHandle,
05398   IN PNDIS_MINIPORT_CHARACTERISTICS MiniportCharacteristics,
05399   IN UINT CharacteristicsLength);
05400 
05401 NDISAPI
05402 BOOLEAN
05403 NTAPI
05404 NdisMSynchronizeWithInterrupt(
05405   IN PNDIS_MINIPORT_INTERRUPT Interrupt,
05406   IN PVOID SynchronizeFunction,
05407   IN PVOID SynchronizeContext);
05408 #endif /* NDIS_LEGACY_MINIPORT */
05409 
05410 _IRQL_requires_(PASSIVE_LEVEL)
05411 NDISAPI
05412 VOID
05413 NTAPI
05414 NdisMDeregisterIoPortRange(
05415   _In_ NDIS_HANDLE MiniportAdapterHandle,
05416   _In_ UINT InitialPort,
05417   _In_ UINT NumberOfPorts,
05418   _In_ PVOID PortOffset);
05419 
05420 /*
05421  * VOID
05422  * NdisMEthIndicateReceive(
05423  *   IN NDIS_HANDLE  MiniportAdapterHandle,
05424  *   IN NDIS_HANDLE  MiniportReceiveContext,
05425  *   IN PVOID  HeaderBuffer,
05426  *   IN UINT  HeaderBufferSize,
05427  *   IN PVOID  LookaheadBuffer,
05428  *   IN UINT  LookaheadBufferSize,
05429  *   IN UINT  PacketSize);
05430  */
05431 #define NdisMEthIndicateReceive(MiniportAdapterHandle,  \
05432                                 MiniportReceiveContext, \
05433                                 HeaderBuffer,           \
05434                                 HeaderBufferSize,       \
05435                                 LookaheadBuffer,        \
05436                                 LookaheadBufferSize,    \
05437                                 PacketSize)             \
05438 {                                                       \
05439     (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->EthRxIndicateHandler)( \
05440         ((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->EthDB,  \
05441         (MiniportReceiveContext), \
05442         (HeaderBuffer),           \
05443         (HeaderBuffer),           \
05444         (HeaderBufferSize),       \
05445         (LookaheadBuffer),        \
05446         (LookaheadBufferSize),    \
05447         (PacketSize));            \
05448 }
05449 
05450 /*
05451  * VOID
05452  * NdisMEthIndicateReceiveComplete(
05453  *   IN NDIS_HANDLE MiniportAdapterHandle);
05454  */
05455 #define NdisMEthIndicateReceiveComplete(MiniportAdapterHandle) \
05456 {                                                              \
05457     (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->EthRxCompleteHandler)( \
05458         ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->EthDB);    \
05459 }
05460 
05461 /*
05462  * VOID
05463  * NdisMFddiIndicateReceive(
05464  *   IN NDIS_HANDLE  MiniportAdapterHandle,
05465  *   IN NDIS_HANDLE  MiniportReceiveContext,
05466  *   IN PVOID  HeaderBuffer,
05467  *   IN UINT  HeaderBufferSize,
05468  *   IN PVOID  LookaheadBuffer,
05469  *   IN UINT  LookaheadBufferSize,
05470  *   IN UINT  PacketSize);
05471  */
05472 #define NdisMFddiIndicateReceive(MiniportAdapterHandle,  \
05473                                  MiniportReceiveContext, \
05474                                  HeaderBuffer,           \
05475                                  HeaderBufferSize,       \
05476                                  LookaheadBuffer,        \
05477                                  LookaheadBufferSize,    \
05478                                  PacketSize)             \
05479 {                                                        \
05480     (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FddiRxIndicateHandler)( \
05481         (((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FddiDB),   \
05482         (MiniportReceiveContext),              \
05483         (PUCHAR)(HeaderBuffer) + 1,            \
05484         (((*(PUCHAR*)(HeaderBuffer)) & 0x40) ? \
05485             FDDI_LENGTH_OF_LONG_ADDRESS :      \
05486             FDDI_LENGTH_OF_SHORT_ADDRESS),     \
05487         (HeaderBuffer),                        \
05488         (HeaderBufferSize),                    \
05489         (LookaheadBuffer),                     \
05490         (LookaheadBufferSize),                 \
05491         (PacketSize));                         \
05492 }
05493 
05494 
05495 
05496 /*
05497  * VOID
05498  * NdisMFddiIndicateReceiveComplete(
05499  *   IN NDIS_HANDLE  MiniportAdapterHandle);
05500  */
05501 #define NdisMFddiIndicateReceiveComplete(MiniportAdapterHandle) \
05502 {                                                               \
05503     (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FddiRxCompleteHandler)( \
05504         ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->FddiDB);      \
05505 }
05506 
05507 _IRQL_requires_max_(DISPATCH_LEVEL)
05508 NDISAPI
05509 VOID
05510 NTAPI
05511 NdisMFlushLog(
05512   _In_ NDIS_HANDLE LogHandle);
05513 
05514 _IRQL_requires_(PASSIVE_LEVEL)
05515 NDISAPI
05516 VOID
05517 NTAPI
05518 NdisMFreeMapRegisters(
05519   _In_ NDIS_HANDLE MiniportAdapterHandle);
05520 
05521 /*
05522  * VOID
05523  * EXPORT
05524  * NdisMIndicateReceivePacket(
05525  *  IN NDIS_HANDLE  MiniportAdapterHandle,
05526  *  IN PPNDIS_PACKET  ReceivePackets,
05527  *  IN UINT  NumberOfPackets);
05528  */
05529 #define NdisMIndicateReceivePacket(MiniportAdapterHandle, \
05530   ReceivePackets, NumberOfPackets)                        \
05531   (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->PacketIndicateHandler)( \
05532   MiniportAdapterHandle, ReceivePackets, NumberOfPackets)
05533 
05534 /*
05535  * VOID
05536  * NdisMIndicateStatus(
05537  *  IN NDIS_HANDLE  MiniportAdapterHandle,
05538  *  IN NDIS_STATUS  GeneralStatus,
05539  *  IN PVOID  StatusBuffer,
05540  *  IN UINT  StatusBufferSize);
05541  */
05542 
05543 #define NdisMIndicateStatus(MiniportAdapterHandle,  \
05544    GeneralStatus, StatusBuffer, StatusBufferSize)   \
05545   (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->StatusHandler)(   \
05546   MiniportAdapterHandle, GeneralStatus, StatusBuffer, StatusBufferSize)
05547 
05548 /*
05549  * VOID
05550  * NdisMIndicateStatusComplete(
05551  *   IN NDIS_HANDLE  MiniportAdapterHandle);
05552  */
05553 #define NdisMIndicateStatusComplete(MiniportAdapterHandle) \
05554   (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->StatusCompleteHandler)( \
05555     MiniportAdapterHandle)
05556 
05557 /*
05558  * VOID
05559  * NdisMInitializeWrapper(
05560  *   OUT PNDIS_HANDLE  NdisWrapperHandle,
05561  *   IN PVOID  SystemSpecific1,
05562  *   IN PVOID  SystemSpecific2,
05563  *   IN PVOID  SystemSpecific3);
05564  */
05565 #define NdisMInitializeWrapper(NdisWrapperHandle, \
05566                                SystemSpecific1,   \
05567                                SystemSpecific2,   \
05568                                SystemSpecific3)   \
05569     NdisInitializeWrapper((NdisWrapperHandle),    \
05570                           (SystemSpecific1),      \
05571                           (SystemSpecific2),      \
05572                           (SystemSpecific3))
05573 
05574 _Must_inspect_result_
05575 _IRQL_requires_(PASSIVE_LEVEL)
05576 NDISAPI
05577 NDIS_STATUS
05578 NTAPI
05579 NdisMMapIoSpace(
05580   _Outptr_result_bytebuffer_(Length) PVOID *VirtualAddress,
05581   _In_ NDIS_HANDLE MiniportAdapterHandle,
05582   _In_ NDIS_PHYSICAL_ADDRESS PhysicalAddress,
05583   _In_ UINT Length);
05584 
05585 /*
05586  * VOID
05587  * NdisMQueryInformationComplete(
05588  *  IN NDIS_HANDLE  MiniportAdapterHandle,
05589  *  IN NDIS_STATUS  Status);
05590  */
05591 #define NdisMQueryInformationComplete(MiniportAdapterHandle, Status) \
05592   (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->QueryCompleteHandler)(MiniportAdapterHandle, Status)
05593 
05594 _Must_inspect_result_
05595 _IRQL_requires_(PASSIVE_LEVEL)
05596 NDISAPI
05597 NDIS_STATUS
05598 NTAPI
05599 NdisMRegisterIoPortRange(
05600   _Out_ PVOID *PortOffset,
05601   _In_ NDIS_HANDLE MiniportAdapterHandle,
05602   _In_ UINT InitialPort,
05603   _In_ UINT NumberOfPorts);
05604 
05605 NDISAPI
05606 VOID
05607 NTAPI
05608 NdisMSetTimer(
05609   IN PNDIS_MINIPORT_TIMER  Timer,
05610   IN UINT  MillisecondsToDelay);
05611 
05612 _IRQL_requires_max_(DISPATCH_LEVEL)
05613 NDISAPI
05614 VOID
05615 NTAPI
05616 NdisMInitializeTimer(
05617   _Inout_ PNDIS_MINIPORT_TIMER Timer,
05618   _In_ NDIS_HANDLE MiniportAdapterHandle,
05619   _In_ PNDIS_TIMER_FUNCTION TimerFunction,
05620   _In_ PVOID FunctionContext);
05621 
05622 _IRQL_requires_max_(DISPATCH_LEVEL)
05623 NDISAPI
05624 VOID
05625 NTAPI
05626 NdisMSetPeriodicTimer(
05627   _In_ PNDIS_MINIPORT_TIMER Timer,
05628   _In_ UINT MillisecondPeriod);
05629 
05630 _IRQL_requires_max_(DISPATCH_LEVEL)
05631 NDISAPI
05632 VOID
05633 NTAPI
05634 NdisMCancelTimer(
05635   _In_ PNDIS_MINIPORT_TIMER Timer,
05636   _Out_ _At_(*TimerCancelled, _Must_inspect_result_) PBOOLEAN TimerCancelled);
05637 
05638 #if !defined(NDIS_WRAPPER)
05639 
05640 /*
05641  * VOID
05642  * NdisMResetComplete(
05643  *   IN NDIS_HANDLE  MiniportAdapterHandle,
05644  *   IN NDIS_STATUS  Status,
05645  *   IN BOOLEAN  AddressingReset);
05646  */
05647 #define NdisMResetComplete(MiniportAdapterHandle, \
05648                            Status,                \
05649                            AddressingReset)       \
05650 {                                                 \
05651     (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->ResetCompleteHandler)( \
05652         MiniportAdapterHandle, Status, AddressingReset); \
05653 }
05654 
05655 /*
05656  * VOID
05657  * NdisMSendComplete(
05658  *   IN NDIS_HANDLE  MiniportAdapterHandle,
05659  *   IN PNDIS_PACKET  Packet,
05660  *   IN NDIS_STATUS  Status);
05661  */
05662 #define NdisMSendComplete(MiniportAdapterHandle, \
05663                           Packet,                \
05664                           Status)                \
05665 {                                                \
05666     (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->SendCompleteHandler)( \
05667         MiniportAdapterHandle, Packet, Status);  \
05668 }
05669 
05670 /*
05671  * VOID
05672  * NdisMSendResourcesAvailable(
05673  *   IN NDIS_HANDLE  MiniportAdapterHandle);
05674  */
05675 #define NdisMSendResourcesAvailable(MiniportAdapterHandle) \
05676 {                                                \
05677     (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->SendResourcesHandler)( \
05678         MiniportAdapterHandle); \
05679 }
05680 
05681 /*
05682  * VOID
05683  * NdisMTransferDataComplete(
05684  *   IN NDIS_HANDLE  MiniportAdapterHandle,
05685  *   IN PNDIS_PACKET  Packet,
05686  *   IN NDIS_STATUS  Status,
05687  *   IN UINT  BytesTransferred);
05688  */
05689 #define NdisMTransferDataComplete(MiniportAdapterHandle, \
05690                                   Packet,                \
05691                                   Status,                \
05692                                   BytesTransferred)      \
05693 {                                                        \
05694     (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->TDCompleteHandler)( \
05695         MiniportAdapterHandle, Packet, Status, BytesTransferred)           \
05696 }
05697 
05698 #endif /* !_NDIS_ */
05699 
05700 
05701 /*
05702  * VOID
05703  * NdisMSetAttributes(
05704  *  IN NDIS_HANDLE  MiniportAdapterHandle,
05705  *  IN NDIS_HANDLE  MiniportAdapterContext,
05706  *  IN BOOLEAN  BusMaster,
05707  *  IN NDIS_INTERFACE_TYPE  AdapterType);
05708  */
05709 #define NdisMSetAttributes(MiniportAdapterHandle,   \
05710                            MiniportAdapterContext,  \
05711                            BusMaster,               \
05712                            AdapterType)             \
05713   NdisMSetAttributesEx(MiniportAdapterHandle,       \
05714     MiniportAdapterContext,                         \
05715     0,                                              \
05716     (BusMaster) ? NDIS_ATTRIBUTE_BUS_MASTER : 0,    \
05717     AdapterType)
05718 
05719 NDISAPI
05720 VOID
05721 NTAPI
05722 NdisMSetAttributesEx(
05723   IN NDIS_HANDLE  MiniportAdapterHandle,
05724   IN NDIS_HANDLE  MiniportAdapterContext,
05725   IN UINT  CheckForHangTimeInSeconds   OPTIONAL,
05726   IN ULONG  AttributeFlags,
05727   IN NDIS_INTERFACE_TYPE AdapterType);
05728 
05729 /*
05730  * VOID
05731  * NdisMSetInformationComplete(
05732  *   IN NDIS_HANDLE  MiniportAdapterHandle,
05733  *   IN NDIS_STATUS  Status);
05734  */
05735 #define NdisMSetInformationComplete(MiniportAdapterHandle, \
05736                                     Status) \
05737   (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->SetCompleteHandler)( \
05738     MiniportAdapterHandle, Status)
05739 
05740 _IRQL_requires_max_(APC_LEVEL)
05741 NDISAPI
05742 VOID
05743 NTAPI
05744 NdisMSleep(
05745   _In_ ULONG MicrosecondsToSleep);
05746 
05747 /*
05748  * VOID
05749  * NdisMTrIndicateReceive(
05750  *   IN NDIS_HANDLE  MiniportAdapterHandle,
05751  *   IN NDIS_HANDLE  MiniportReceiveContext,
05752  *   IN PVOID  HeaderBuffer,
05753  *   IN UINT  HeaderBufferSize,
05754  *   IN PVOID  LookaheadBuffer,
05755  *   IN UINT  LookaheadBufferSize,
05756  *   IN UINT  PacketSize);
05757  */
05758 #define NdisMTrIndicateReceive(MiniportAdapterHandle,  \
05759                                MiniportReceiveContext, \
05760                                HeaderBuffer,           \
05761                                HeaderBufferSize,       \
05762                                LookaheadBuffer,        \
05763                                LookaheadBufferSize,    \
05764                                PacketSize)             \
05765 {                                                      \
05766     (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->TrRxIndicateHandler)( \
05767       (((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->TrDB),     \
05768         (MiniportReceiveContext), \
05769         (HeaderBuffer),           \
05770         (HeaderBuffer),           \
05771         (HeaderBufferSize),       \
05772         (LookaheadBuffer),        \
05773         (LookaheadBufferSize),    \
05774         (PacketSize));            \
05775 }
05776 
05777 /*
05778  * VOID
05779  * NdisMTrIndicateReceiveComplete(
05780  *   IN NDIS_HANDLE  MiniportAdapterHandle);
05781  */
05782 #define NdisMTrIndicateReceiveComplete(MiniportAdapterHandle) \
05783 {                                                             \
05784     (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->TrRxCompleteHandler)( \
05785     ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->TrDB);    \
05786 }
05787 
05788 _IRQL_requires_max_(DISPATCH_LEVEL)
05789 NDISAPI
05790 NDIS_STATUS
05791 NTAPI
05792 NdisMWriteLogData(
05793   _In_ NDIS_HANDLE LogHandle,
05794   _In_reads_bytes_(LogBufferSize) PVOID LogBuffer,
05795   _In_ UINT LogBufferSize);
05796 
05797 _IRQL_requires_(PASSIVE_LEVEL)
05798 NDISAPI
05799 VOID
05800 NTAPI
05801 NdisMQueryAdapterResources(
05802   _Out_ PNDIS_STATUS Status,
05803   _In_ NDIS_HANDLE WrapperConfigurationContext,
05804   _Out_ PNDIS_RESOURCE_LIST ResourceList,
05805   _Inout_ PUINT BufferSize);
05806 
05807 _IRQL_requires_(PASSIVE_LEVEL)
05808 NDISAPI
05809 VOID
05810 NTAPI
05811 NdisTerminateWrapper(
05812   _In_ NDIS_HANDLE NdisWrapperHandle,
05813   _In_opt_ PVOID SystemSpecific);
05814 
05815 _IRQL_requires_(PASSIVE_LEVEL)
05816 NDISAPI
05817 VOID
05818 NTAPI
05819 NdisMUnmapIoSpace(
05820   _In_ NDIS_HANDLE MiniportAdapterHandle,
05821   _In_reads_bytes_(Length) PVOID VirtualAddress,
05822   _In_ UINT Length);
05823 
05824 /* Event functions */
05825 
05826 _IRQL_requires_max_(DISPATCH_LEVEL)
05827 NDISAPI
05828 VOID
05829 NTAPI
05830 NdisInitializeEvent(
05831   _Out_ PNDIS_EVENT Event);
05832 
05833 _IRQL_requires_max_(DISPATCH_LEVEL)
05834 NDISAPI
05835 VOID
05836 NTAPI
05837 NdisSetEvent(
05838   _In_ PNDIS_EVENT Event);
05839 
05840 _IRQL_requires_max_(DISPATCH_LEVEL)
05841 NDISAPI
05842 VOID
05843 NTAPI
05844 NdisResetEvent(
05845   _In_ PNDIS_EVENT Event);
05846 
05847 _When_(MsToWait != 0, _Check_return_)
05848 _IRQL_requires_(PASSIVE_LEVEL)
05849 NDISAPI
05850 BOOLEAN
05851 NTAPI
05852 NdisWaitEvent(
05853   _In_ PNDIS_EVENT Event,
05854   _In_ UINT Timeout);
05855 
05856 /* NDIS intermediate miniport structures */
05857 
05858 typedef VOID (NTAPI *W_MINIPORT_CALLBACK)(
05859   IN NDIS_HANDLE  MiniportAdapterContext,
05860   IN PVOID  CallbackContext);
05861 
05862 /* Routines for intermediate miniport drivers */
05863 
05864 _IRQL_requires_(PASSIVE_LEVEL)
05865 NDISAPI
05866 NDIS_STATUS
05867 NTAPI
05868 NdisIMDeInitializeDeviceInstance(
05869   _In_ NDIS_HANDLE NdisMiniportHandle);
05870 
05871 /*
05872  * NDIS_STATUS
05873  * NdisIMInitializeDeviceInstance(
05874  *   IN NDIS_HANDLE  DriverHandle,
05875  *   IN PNDIS_STRING  DeviceInstance);
05876  */
05877 #define NdisIMInitializeDeviceInstance(DriverHandle, DeviceInstance) \
05878   NdisIMInitializeDeviceInstanceEx(DriverHandle, DeviceInstance, NULL)
05879 
05880 /* Functions obsoleted by NDIS 5.0 */
05881 
05882 NDISAPI
05883 VOID
05884 NTAPI
05885 NdisFreeDmaChannel(
05886   IN PNDIS_HANDLE  NdisDmaHandle);
05887 
05888 NDISAPI
05889 VOID
05890 NTAPI
05891 NdisSetupDmaTransfer(
05892   OUT PNDIS_STATUS  Status,
05893   IN PNDIS_HANDLE  NdisDmaHandle,
05894   IN PNDIS_BUFFER  Buffer,
05895   IN ULONG  Offset,
05896   IN ULONG  Length,
05897   IN BOOLEAN  WriteToDevice);
05898 
05899 /*
05900 NDISAPI
05901 NTSTATUS
05902 NTAPI
05903 NdisUpcaseUnicodeString(
05904   OUT PUNICODE_STRING DestinationString,
05905   IN PUNICODE_STRING SourceString);
05906 */
05907 #define NdisUpcaseUnicodeString(_d, _s) RtlUpcaseUnicodeString(_d, _s, FALSE)
05908 
05909 
05910 /* Routines for NDIS protocol drivers */
05911 
05912 #if NDIS_LEGACY_PROTOCOL
05913 
05914 NDISAPI
05915 NDIS_STATUS
05916 NTAPI
05917 NdisIMRegisterLayeredMiniport(
05918   _In_ NDIS_HANDLE NdisWrapperHandle,
05919   _In_ PNDIS_MINIPORT_CHARACTERISTICS MiniportCharacteristics,
05920   _In_ UINT CharacteristicsLength,
05921   _Out_ PNDIS_HANDLE DriverHandle);
05922 
05923 NDISAPI
05924 VOID
05925 NTAPI
05926 NdisTransferData(
05927   OUT PNDIS_STATUS Status,
05928   IN NDIS_HANDLE NdisBindingHandle,
05929   IN NDIS_HANDLE MacReceiveContext,
05930   IN UINT ByteOffset,
05931   IN UINT BytesToTransfer,
05932   IN OUT PNDIS_PACKET Packet,
05933   OUT PUINT BytesTransferred);
05934 
05935 NDISAPI
05936 VOID
05937 NTAPI
05938 NdisSend(
05939   OUT PNDIS_STATUS Status,
05940   IN NDIS_HANDLE NdisBindingHandle,
05941   IN PNDIS_PACKET Packet);
05942 
05943 NDISAPI
05944 VOID
05945 NTAPI
05946 NdisSendPackets(
05947   IN NDIS_HANDLE NdisBindingHandle,
05948   IN PPNDIS_PACKET PacketArray,
05949   IN UINT NumberOfPackets);
05950 
05951 _IRQL_requires_max_(DISPATCH_LEVEL)
05952 NDISAPI
05953 VOID
05954 NTAPI
05955 NdisRequest(
05956   _Out_ PNDIS_STATUS Status,
05957   _In_ NDIS_HANDLE NdisBindingHandle,
05958   _In_ PNDIS_REQUEST NdisRequest);
05959 
05960 _IRQL_requires_max_(DISPATCH_LEVEL)
05961 NDISAPI
05962 VOID
05963 NTAPI
05964 NdisReset(
05965   _Out_ PNDIS_STATUS Status,
05966   _In_ NDIS_HANDLE NdisBindingHandle);
05967 
05968 _IRQL_requires_max_(DISPATCH_LEVEL)
05969 NDISAPI
05970 VOID
05971 NTAPI
05972 NdisDeregisterProtocol(
05973   _Out_ PNDIS_STATUS Status,
05974   _In_ NDIS_HANDLE NdisProtocolHandle);
05975 
05976 _IRQL_requires_(PASSIVE_LEVEL)
05977 NDISAPI
05978 VOID
05979 NTAPI
05980 NdisOpenAdapter(
05981   _At_(*Status, _Must_inspect_result_) _Out_ PNDIS_STATUS Status,
05982   _Out_ PNDIS_STATUS OpenErrorStatus,
05983   _Out_ PNDIS_HANDLE NdisBindingHandle,
05984   _Out_ PUINT SelectedMediumIndex,
05985   _In_reads_(MediumArraySize) PNDIS_MEDIUM MediumArray,
05986   _In_ UINT MediumArraySize,
05987   _In_ NDIS_HANDLE NdisProtocolHandle,
05988   _In_ NDIS_HANDLE ProtocolBindingContext,
05989   _In_ PNDIS_STRING AdapterName,
05990   _In_ UINT OpenOptions,
05991   _In_opt_ PSTRING AddressingInformation);
05992 
05993 _IRQL_requires_(PASSIVE_LEVEL)
05994 NDISAPI
05995 VOID
05996 NTAPI
05997 NdisCloseAdapter(
05998   _Out_ PNDIS_STATUS Status,
05999   _In_ NDIS_HANDLE NdisBindingHandle);
06000 
06001 _IRQL_requires_(PASSIVE_LEVEL)
06002 NDISAPI
06003 VOID
06004 NTAPI
06005 NdisCompleteBindAdapter(
06006   _In_ NDIS_HANDLE BindAdapterContext,
06007   _In_ NDIS_STATUS Status,
06008   _In_ NDIS_STATUS OpenStatus);
06009 
06010 _IRQL_requires_(PASSIVE_LEVEL)
06011 NDISAPI
06012 VOID
06013 NTAPI
06014 NdisCompleteUnbindAdapter(
06015   _In_ NDIS_HANDLE UnbindAdapterContext,
06016   _In_ NDIS_STATUS Status);
06017 
06018 NDISAPI
06019 VOID
06020 NTAPI
06021 NdisSetProtocolFilter(
06022   _At_(*Status, _Must_inspect_result_) _Out_ PNDIS_STATUS Status,
06023   _In_ NDIS_HANDLE NdisBindingHandle,
06024   _In_ RECEIVE_HANDLER ReceiveHandler,
06025   _In_ RECEIVE_PACKET_HANDLER ReceivePacketHandler,
06026   _In_ NDIS_MEDIUM Medium,
06027   _In_ UINT Offset,
06028   _In_ UINT Size,
06029   _In_ PUCHAR Pattern);
06030 
06031 _IRQL_requires_max_(DISPATCH_LEVEL)
06032 NDISAPI
06033 VOID
06034 NTAPI
06035 NdisGetDriverHandle(
06036   _In_ PNDIS_HANDLE NdisBindingHandle,
06037   _Out_ PNDIS_HANDLE NdisDriverHandle);
06038 
06039 _IRQL_requires_(PASSIVE_LEVEL)
06040 NDISAPI
06041 VOID
06042 NTAPI
06043 NdisOpenProtocolConfiguration(
06044   _Out_ PNDIS_STATUS Status,
06045   _Out_ PNDIS_HANDLE ConfigurationHandle,
06046   _In_ PNDIS_STRING ProtocolSection);
06047 
06048 _IRQL_requires_(PASSIVE_LEVEL)
06049 NDISAPI
06050 VOID
06051 NTAPI
06052 NdisCompletePnPEvent(
06053   _In_ NDIS_STATUS Status,
06054   _In_ NDIS_HANDLE NdisBindingHandle,
06055   _In_ PNET_PNP_EVENT NetPnPEvent);
06056 
06057 /*
06058  * VOID
06059  * NdisSetSendFlags(
06060  *   IN PNDIS_PACKET Packet,
06061  *   IN UINT Flags);
06062  */
06063 #define NdisSetSendFlags(_Packet,_Flags)(_Packet)->Private.Flags = (_Flags)
06064 
06065 #define NdisQuerySendFlags(_Packet,_Flags) *(_Flags) = (_Packet)->Private.Flags
06066 
06067 _IRQL_requires_max_(DISPATCH_LEVEL)
06068 NDISAPI
06069 VOID
06070 NTAPI
06071 NdisReturnPackets(
06072   _In_reads_(NumberOfPackets) PNDIS_PACKET *PacketsToReturn,
06073   _In_ UINT NumberOfPackets);
06074 
06075 _Must_inspect_result_
06076 _IRQL_requires_max_(DISPATCH_LEVEL)
06077 NDISAPI
06078 PNDIS_PACKET
06079 NTAPI
06080 NdisGetReceivedPacket(
06081   _In_ PNDIS_HANDLE NdisBindingHandle,
06082   _In_ PNDIS_HANDLE MacContext);
06083 
06084 _IRQL_requires_max_(DISPATCH_LEVEL)
06085 NDISAPI
06086 VOID
06087 NTAPI
06088 NdisCancelSendPackets(
06089   _In_ NDIS_HANDLE NdisBindingHandle,
06090   _In_ _Points_to_data_ PVOID CancelId);
06091 
06092 _Must_inspect_result_
06093 _IRQL_requires_max_(DISPATCH_LEVEL)
06094 NDISAPI
06095 NDIS_STATUS
06096 NTAPI
06097 NdisQueryPendingIOCount(
06098   _In_ _Points_to_data_ PVOID NdisBindingHandle,
06099   _Out_ PULONG IoCount);
06100 
06101 _IRQL_requires_(PASSIVE_LEVEL)
06102 NDISAPI
06103 VOID
06104 NTAPI
06105 NdisRegisterProtocol(
06106   _Out_ PNDIS_STATUS Status,
06107   _Out_ PNDIS_HANDLE NdisProtocolHandle,
06108   _In_ PNDIS_PROTOCOL_CHARACTERISTICS ProtocolCharacteristics,
06109   _In_ UINT CharacteristicsLength);
06110 
06111 #endif /* NDIS_LEGACY_PROTOCOL */
06112 
06113 _IRQL_requires_max_(DISPATCH_LEVEL)
06114 NDISAPI
06115 UCHAR
06116 NTAPI
06117 NdisGeneratePartialCancelId(VOID);
06118 
06119 _IRQL_requires_(PASSIVE_LEVEL)
06120 NDISAPI
06121 VOID
06122 NTAPI
06123 NdisReEnumerateProtocolBindings(
06124   _In_ NDIS_HANDLE NdisProtocolHandle);
06125 
06126 NDISAPI
06127 VOID
06128 NTAPI
06129 NdisRegisterTdiCallBack(
06130   _In_ TDI_REGISTER_CALLBACK RegisterCallback,
06131   _In_ TDI_PNP_HANDLER PnPHandler);
06132 
06133 NDISAPI
06134 VOID
06135 NTAPI
06136 NdisDeregisterTdiCallBack(VOID);
06137 
06138 /* Obsoleted in Windows XP */
06139 
06140 /* Prototypes for NDIS_MAC_CHARACTERISTICS */
06141 
06142 typedef NDIS_STATUS (*OPEN_ADAPTER_HANDLER)(
06143   OUT PNDIS_STATUS  OpenErrorStatus,
06144   OUT NDIS_HANDLE  *MacBindingHandle,
06145   OUT PUINT  SelectedMediumIndex,
06146   IN PNDIS_MEDIUM  MediumArray,
06147   IN UINT  MediumArraySize,
06148   IN NDIS_HANDLE  NdisBindingContext,
06149   IN NDIS_HANDLE  MacAdapterContext,
06150   IN UINT  OpenOptions,
06151   IN PSTRING  AddressingInformation  OPTIONAL);
06152 
06153 typedef NDIS_STATUS (NTAPI *CLOSE_ADAPTER_HANDLER)(
06154   IN NDIS_HANDLE  MacBindingHandle);
06155 
06156 typedef NDIS_STATUS (NTAPI *WAN_TRANSFER_DATA_HANDLER)(
06157   VOID);
06158 
06159 typedef NDIS_STATUS (NTAPI *QUERY_GLOBAL_STATISTICS_HANDLER)(
06160   IN NDIS_HANDLE  MacAdapterContext,
06161   IN PNDIS_REQUEST  NdisRequest);
06162 
06163 typedef VOID (NTAPI *UNLOAD_MAC_HANDLER)(
06164   IN NDIS_HANDLE  MacMacContext);
06165 
06166 typedef NDIS_STATUS (NTAPI *ADD_ADAPTER_HANDLER)(
06167   IN NDIS_HANDLE  MacMacContext,
06168   IN NDIS_HANDLE  WrapperConfigurationContext,
06169   IN PNDIS_STRING  AdapterName);
06170 
06171 typedef VOID (*REMOVE_ADAPTER_HANDLER)(
06172   IN NDIS_HANDLE  MacAdapterContext);
06173 
06174 typedef struct _NDIS_MAC_CHARACTERISTICS {
06175   UCHAR  MajorNdisVersion;
06176   UCHAR  MinorNdisVersion;
06177   USHORT  Filler;
06178   UINT  Reserved;
06179   OPEN_ADAPTER_HANDLER  OpenAdapterHandler;
06180   CLOSE_ADAPTER_HANDLER  CloseAdapterHandler;
06181   SEND_HANDLER  SendHandler;
06182   TRANSFER_DATA_HANDLER  TransferDataHandler;
06183   RESET_HANDLER  ResetHandler;
06184   REQUEST_HANDLER  RequestHandler;
06185   QUERY_GLOBAL_STATISTICS_HANDLER  QueryGlobalStatisticsHandler;
06186   UNLOAD_MAC_HANDLER  UnloadMacHandler;
06187   ADD_ADAPTER_HANDLER  AddAdapterHandler;
06188   REMOVE_ADAPTER_HANDLER  RemoveAdapterHandler;
06189   NDIS_STRING  Name;
06190 } NDIS_MAC_CHARACTERISTICS, *PNDIS_MAC_CHARACTERISTICS;
06191 
06192 typedef NDIS_MAC_CHARACTERISTICS        NDIS_WAN_MAC_CHARACTERISTICS;
06193 typedef NDIS_WAN_MAC_CHARACTERISTICS    *PNDIS_WAN_MAC_CHARACTERISTICS;
06194 
06195 #ifdef __cplusplus
06196 }
06197 #endif
06198 
06199 #endif /* _NDIS_ */
06200 
06201 /* EOF */

Generated on Sun May 27 2012 04:30:01 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.