[NDIS]
[reactos.git] / reactos / include / ddk / ndis.h
index 40fe179..e58e5db 100644 (file)
 #ifndef __NDIS_H
 #define __NDIS_H
 
+#ifndef NDIS_WDM
+#define NDIS_WDM 0
+#endif
+
+/* Helper macro to enable gcc's extension.  */
+#ifndef __GNU_EXTENSION
+#ifdef __GNUC__
+#define __GNU_EXTENSION __extension__
+#else
+#define __GNU_EXTENSION
+#endif
+#endif
+
 #include "ntddk.h"
-#include "ntddndis.h"
 #include "netpnp.h"
+#include "ntstatus.h"
 #include "netevent.h"
 #include <qos.h>
 
+typedef int NDIS_STATUS, *PNDIS_STATUS;
+
+#include "ntddndis.h"
+
 #if !defined(_WINDEF_H)
 typedef unsigned int UINT, *PUINT;
 #endif
@@ -46,70 +63,289 @@ typedef unsigned int UINT, *PUINT;
 extern "C" {
 #endif
 
-#if defined(NDIS_WRAPPER)
-  #define NDISAPI
-#else
-  #define NDISAPI DECLSPEC_IMPORT
+#ifndef __NET_PNP__
+#define __NET_PNP__
+
+typedef enum _NET_DEVICE_POWER_STATE {
+  NetDeviceStateUnspecified = 0,
+  NetDeviceStateD0,
+  NetDeviceStateD1,
+  NetDeviceStateD2,
+  NetDeviceStateD3,
+  NetDeviceStateMaximum
+} NET_DEVICE_POWER_STATE, *PNET_DEVICE_POWER_STATE;
+
+typedef enum _NET_PNP_EVENT_CODE {
+  NetEventSetPower,
+  NetEventQueryPower,
+  NetEventQueryRemoveDevice,
+  NetEventCancelRemoveDevice,
+  NetEventReconfigure,
+  NetEventBindList,
+  NetEventBindsComplete,
+  NetEventPnPCapabilities,
+  NetEventPause,
+  NetEventRestart,
+  NetEventPortActivation,
+  NetEventPortDeactivation,
+  NetEventIMReEnableDevice,
+  NetEventMaximum
+} NET_PNP_EVENT_CODE, *PNET_PNP_EVENT_CODE;
+
+typedef struct _NET_PNP_EVENT {
+  NET_PNP_EVENT_CODE NetEvent;
+  PVOID Buffer;
+  ULONG BufferLength;
+  ULONG_PTR NdisReserved[4];
+  ULONG_PTR TransportReserved[4];
+  ULONG_PTR TdiReserved[4];
+  ULONG_PTR TdiClientReserved[4];
+} NET_PNP_EVENT, *PNET_PNP_EVENT;
+
+#endif /* __NET_PNP__ */
+
+#if !defined(NDIS_WRAPPER)
+
+#if (defined(NDIS_MINIPORT_MAJOR_VERSION) ||  \
+    (defined(NDIS_MINIPORT_MINOR_VERSION)) || \
+    (defined(NDIS_PROTOCOL_MAJOR_VERSION)) || \
+    (defined(NDIS_PROTOCOL_MINOR_VERSION)) || \
+    (defined(NDIS_FILTER_MAJOR_VERSION)) ||   \
+    (defined(NDIS_FILTER_MINOR_VERSION)))
+#error "Driver should not redefine NDIS reserved macros"
 #endif
 
-#if defined(NDIS50_MINIPORT) && !defined(NDIS_MINIPORT_MAJOR_VERSION) && !defined(NDIS_MINIPORT_MINOR_VERSION)
+#if defined(NDIS_MINIPORT_DRIVER)
+
+#if defined(NDIS620_MINIPORT)
+#define NDIS_MINIPORT_MAJOR_VERSION 6
+#define NDIS_MINIPORT_MINOR_VERSION 20
+#elif defined(NDIS61_MINIPORT)
+#define NDIS_MINIPORT_MAJOR_VERSION 6
+#define NDIS_MINIPORT_MINOR_VERSION 1
+#elif defined(NDIS60_MINIPORT)
+#define NDIS_MINIPORT_MAJOR_VERSION 6
+#define NDIS_MINIPORT_MINOR_VERSION 0
+#elif defined(NDIS51_MINIPORT)
+#define NDIS_MINIPORT_MAJOR_VERSION 5
+#define NDIS_MINIPORT_MINOR_VERSION 1
+#elif defined(NDIS50_MINIPORT)
 #define NDIS_MINIPORT_MAJOR_VERSION 5
 #define NDIS_MINIPORT_MINOR_VERSION 0
+#else
+#error "Only NDIS miniport drivers with version >= 5 are supported"
 #endif
 
-#if defined(NDIS51_MINIPORT) && !defined(NDIS_MINIPORT_MAJOR_VERSION) && !defined(NDIS_MINIPORT_MINOR_VERSION)
-#define NDIS_MINIPORT_MAJOR_VERSION 5
-#define NDIS_MINIPORT_MINOR_VERSION 1
+#if ((NDIS_MINIPORT_MAJOR_VERSION == 6) &&    \
+       (NDIS_MINIPORT_MINOR_VERSION != 20) && \
+       (NDIS_MINIPORT_MINOR_VERSION != 1) &&  \
+       (NDIS_MINIPORT_MINOR_VERSION != 0))
+#error "Invalid miniport major/minor version combination"
+#elif ((NDIS_MINIPORT_MAJOR_VERSION == 5) &&  \
+       (NDIS_MINIPORT_MINOR_VERSION != 1) &&  \
+       (NDIS_MINIPORT_MINOR_VERSION != 0))
+#error "Invalid miniport major/minor version combination"
 #endif
 
-#if defined(NDIS50) && !defined(NDIS_PROTOCOL_MAJOR_VERSION) && !defined(NDIS_PROTOCOL_MINOR_VERSION)
-#define NDIS_PROTOCOL_MAJOR_VERSION 5
-#define NDIS_PROTOCOL_MINOR_VERSION 0
+#if  (NDIS_MINIPORT_MAJOR_VERSION == 6) && \
+     ((NDIS_MINIPORT_MINOR_VERSION == 20 && NTDDI_VERSION < NTDDI_WIN7)  || \
+      (NDIS_MINIPORT_MINOR_VERSION == 1 && NTDDI_VERSION < NTDDI_VISTA) || \
+      (NDIS_MINIPORT_MINOR_VERSION == 0 && NTDDI_VERSION < NTDDI_VISTA))
+#error "Wrong NDIS/DDI version"
+#elif ((NDIS_MINIPORT_MAJOR_VERSION == 5) && \
+       (((NDIS_MINIPORT_MINOR_VERSION == 1) && (NTDDI_VERSION < NTDDI_WINXP)) || \
+         ((NDIS_MINIPORT_MINOR_VERSION == 0) && (NTDDI_VERSION < NTDDI_WIN2K))))
+#error "Wrong NDIS/DDI version"
 #endif
 
-#if defined(NDIS51) && !defined(NDIS_PROTOCOL_MAJOR_VERSION) && !defined(NDIS_PROTOCOL_MINOR_VERSION)
+
+#endif /* defined(NDIS_MINIPORT_DRIVER) */
+
+#if defined(NDIS30)
+#error "Only NDIS Protocol drivers version 4 or later are supported"
+#endif
+
+#if defined(NDIS620)
+#define NDIS_PROTOCOL_MAJOR_VERSION 6
+#define NDIS_PROTOCOL_MINOR_VERSION 20
+#define NDIS_FILTER_MAJOR_VERSION 6
+#define NDIS_FILTER_MINOR_VERSION 20
+#elif defined(NDIS61)
+#define NDIS_PROTOCOL_MAJOR_VERSION 6
+#define NDIS_PROTOCOL_MINOR_VERSION 1
+#define NDIS_FILTER_MAJOR_VERSION 6
+#define NDIS_FILTER_MINOR_VERSION 1
+#elif defined(NDIS60)
+#define NDIS_PROTOCOL_MAJOR_VERSION 6
+#define NDIS_PROTOCOL_MINOR_VERSION 0
+#define NDIS_FILTER_MAJOR_VERSION 6
+#define NDIS_FILTER_MINOR_VERSION 0
+#elif defined(NDIS51)
 #define NDIS_PROTOCOL_MAJOR_VERSION 5
 #define NDIS_PROTOCOL_MINOR_VERSION 1
+#elif defined(NDIS50)
+#define NDIS_PROTOCOL_MAJOR_VERSION 5
+#define NDIS_PROTOCOL_MINOR_VERSION 0
+#elif defined(NDIS40)
+#define NDIS_PROTOCOL_MAJOR_VERSION 4
+#define NDIS_PROTOCOL_MINOR_VERSION 0
+#endif
+
+#if !defined(NDIS_MINIPORT_DRIVER) && !defined(NDIS_PROTOCOL_MAJOR_VERSION)
+#define NDIS40
+#define NDIS_PROTOCOL_MAJOR_VERSION 4
+#define NDIS_PROTOCOL_MINOR_VERSION 0
+#endif
+
+#if defined(NDIS_FILTER_MAJOR_VERSION)
+
+#if ((NDIS_FILTER_MAJOR_VERSION == 6) &&  \
+     (NDIS_FILTER_MINOR_VERSION != 20) && \
+     (NDIS_FILTER_MINOR_VERSION != 1) &&  \
+     (NDIS_FILTER_MINOR_VERSION != 0))
+#error "Invalid Filter version"
+#endif
+
+#endif /* defined(NDIS_FILTER_MAJOR_VERSION) */
+
+
+#if defined(NDIS_PROTOCOL_MAJOR_VERSION)
+
+#if ((NDIS_PROTOCOL_MAJOR_VERSION == 6) &&  \
+     (NDIS_PROTOCOL_MINOR_VERSION != 20) && \
+     (NDIS_PROTOCOL_MINOR_VERSION != 1) &&  \
+     (NDIS_PROTOCOL_MINOR_VERSION != 0))
+#error "Invalid Protocol version"
+#elif ((NDIS_PROTOCOL_MAJOR_VERSION == 5) && \
+     (NDIS_PROTOCOL_MINOR_VERSION != 1) && (NDIS_PROTOCOL_MINOR_VERSION != 0))
+#error "Invalid Protocol version"
+#elif ((NDIS_PROTOCOL_MAJOR_VERSION == 4) && (NDIS_PROTOCOL_MINOR_VERSION != 0))
+#error "Invalid Protocol major/minor version"
+#endif
+
+#if ((NDIS_PROTOCOL_MAJOR_VERSION == 6) && (NTDDI_VERSION < NTDDI_VISTA))
+#error "Wrong NDIS/DDI version"
+#endif
+
+#endif /* defined(NDIS_PROTOCOL_MAJOR_VERSION) */
+
+#endif /* !defined(NDIS_WRAPPER) */
+
+#if !defined(NDIS_LEGACY_MINIPORT)
+
+#if ((defined(NDIS_MINIPORT_DRIVER) && (NDIS_MINIPORT_MAJOR_VERSION < 6)) || NDIS_WRAPPER)
+#define NDIS_LEGACY_MINIPORT    1
+#else
+#define NDIS_LEGACY_MINIPORT    0
 #endif
 
-#if 1
-/* FIXME: */
-typedef PVOID QUEUED_CLOSE;
+#endif /* !defined(NDIS_LEGACY_MINIPORT) */
+
+#if !defined(NDIS_LEGACY_PROTOCOL)
+
+#if ((defined(NDIS_PROTOCOL_MAJOR_VERSION) && (NDIS_PROTOCOL_MAJOR_VERSION < 6)) || NDIS_WRAPPER)
+#define NDIS_LEGACY_PROTOCOL    1
+#else
+#define NDIS_LEGACY_PROTOCOL    0
 #endif
 
-typedef ULONG NDIS_OID, *PNDIS_OID;
+#endif /* !defined(NDIS_LEGACY_PROTOCOL) */
+
+#if !defined(NDIS_LEGACY_DRIVER)
+
+#if (NDIS_LEGACY_MINIPORT || NDIS_LEGACY_PROTOCOL || NDIS_WRAPPER)
+#define NDIS_LEGACY_DRIVER      1
+#else
+#define NDIS_LEGACY_DRIVER      0
+#endif
+
+#endif /* !defined(NDIS_LEGACY_DRIVER) */
+
+#if !defined(NDIS_SUPPORT_NDIS6)
+
+#if ((defined (NDIS_MINIPORT_MAJOR_VERSION) && (NDIS_MINIPORT_MAJOR_VERSION >= 6)) || \
+     (defined (NDIS60)) || NDIS_WRAPPER)
+#define NDIS_SUPPORT_NDIS6      1
+#else
+#define NDIS_SUPPORT_NDIS6      0
+#endif
+
+#endif /* !defined(NDIS_SUPPORT_NDIS6) */
+
+#if !defined(NDIS_SUPPORT_NDIS61)
+#if  (((defined (NDIS_MINIPORT_MAJOR_VERSION) && (NDIS_MINIPORT_MAJOR_VERSION >= 6)) && \
+       (defined (NDIS_MINIPORT_MINOR_VERSION) && (NDIS_MINIPORT_MINOR_VERSION >= 1))) || \
+      (defined (NDIS61)) || NDIS_WRAPPER)
+#define NDIS_SUPPORT_NDIS61      1
+#else
+#define NDIS_SUPPORT_NDIS61      0
+#endif
+#endif // !defined(NDIS_SUPPORT_NDIS61)
+
+#if !defined(NDIS_SUPPORT_NDIS620)
+
+#if  (((defined (NDIS_MINIPORT_MAJOR_VERSION) && (NDIS_MINIPORT_MAJOR_VERSION >= 6)) && \
+       (defined (NDIS_MINIPORT_MINOR_VERSION) && (NDIS_MINIPORT_MINOR_VERSION >= 20))) || \
+      (defined (NDIS620)) || NDIS_WRAPPER)
+#define NDIS_SUPPORT_NDIS620      1
+#else
+#define NDIS_SUPPORT_NDIS620      0
+#endif
+
+#endif /* !defined(NDIS_SUPPORT_NDIS620) */
+
+#if (NDIS_SUPPORT_NDIS620)
+#undef NDIS_SUPPORT_NDIS61
+#define NDIS_SUPPORT_NDIS61 1
+#endif
+
+#if (NDIS_SUPPORT_NDIS61)
+#undef NDIS_SUPPORT_NDIS6
+#define NDIS_SUPPORT_NDIS6 1
+#endif
+
+#if defined(NDIS61_MINIPORT) || defined(NDIS60_MINIPORT) || defined(NDIS61) || \
+    defined(NDIS60) || defined(NDIS_WRAPPER) || defined(NDIS_LEGACY_DRIVER)
+#define NDIS_SUPPORT_60_COMPATIBLE_API      1
+#else
+#define NDIS_SUPPORT_60_COMPATIBLE_API      0
+#endif
+
+#if defined(NDIS_WRAPPER)
+  #define NDISAPI
+#else
+  #define NDISAPI DECLSPEC_IMPORT
+#endif
+
+typedef PVOID QUEUED_CLOSE; //FIXME : Doesn't exist in public headers
 
 typedef struct _X_FILTER FDDI_FILTER, *PFDDI_FILTER;
 typedef struct _X_FILTER TR_FILTER, *PTR_FILTER;
 typedef struct _X_FILTER NULL_FILTER, *PNULL_FILTER;
 
 typedef struct _REFERENCE {
-       KSPIN_LOCK  SpinLock;
-       USHORT  ReferenceCount;
-       BOOLEAN  Closing;
-} REFERENCE, * PREFERENCE;
-
+  KSPIN_LOCK SpinLock;
+  USHORT ReferenceCount;
+  BOOLEAN Closing;
+} REFERENCE, *PREFERENCE;
 
 /* NDIS base types */
 
 typedef struct _NDIS_SPIN_LOCK {
-  KSPIN_LOCK  SpinLock;
-  KIRQL  OldIrql;
-} NDIS_SPIN_LOCK, * PNDIS_SPIN_LOCK;
+  KSPIN_LOCK SpinLock;
+  KIRQL OldIrql;
+} NDIS_SPIN_LOCK, *PNDIS_SPIN_LOCK;
 
 typedef struct _NDIS_EVENT {
-  KEVENT  Event;
+  KEVENT Event;
 } NDIS_EVENT, *PNDIS_EVENT;
 
 typedef PVOID NDIS_HANDLE, *PNDIS_HANDLE;
-typedef int NDIS_STATUS, *PNDIS_STATUS;
 
 typedef ANSI_STRING NDIS_ANSI_STRING, *PNDIS_ANSI_STRING;
 typedef UNICODE_STRING NDIS_STRING, *PNDIS_STRING;
 
 typedef MDL NDIS_BUFFER, *PNDIS_BUFFER;
-typedef ULONG NDIS_ERROR_CODE, *PNDIS_ERROR_CODE;
-
 
 /* NDIS_STATUS constants */
 #define NDIS_STATUS_SUCCESS                     ((NDIS_STATUS)STATUS_SUCCESS)
@@ -118,6 +354,7 @@ typedef ULONG NDIS_ERROR_CODE, *PNDIS_ERROR_CODE;
 #define NDIS_STATUS_NOT_COPIED                  ((NDIS_STATUS)0x00010002L)
 #define NDIS_STATUS_NOT_ACCEPTED                ((NDIS_STATUS)0x00010003L)
 #define NDIS_STATUS_CALL_ACTIVE                 ((NDIS_STATUS)0x00010007L)
+#define NDIS_STATUS_INDICATION_REQUIRED         ((NDIS_STATUS)STATUS_NDIS_INDICATION_REQUIRED)
 #define NDIS_STATUS_ONLINE                      ((NDIS_STATUS)0x40010003L)
 #define NDIS_STATUS_RESET_START                 ((NDIS_STATUS)0x40010004L)
 #define NDIS_STATUS_RESET_END                   ((NDIS_STATUS)0x40010005L)
@@ -126,8 +363,8 @@ typedef ULONG NDIS_ERROR_CODE, *PNDIS_ERROR_CODE;
 #define NDIS_STATUS_WAN_LINE_UP                 ((NDIS_STATUS)0x40010008L)
 #define NDIS_STATUS_WAN_LINE_DOWN               ((NDIS_STATUS)0x40010009L)
 #define NDIS_STATUS_WAN_FRAGMENT                ((NDIS_STATUS)0x4001000AL)
-#define        NDIS_STATUS_MEDIA_CONNECT               ((NDIS_STATUS)0x4001000BL)
-#define        NDIS_STATUS_MEDIA_DISCONNECT            ((NDIS_STATUS)0x4001000CL)
+#define NDIS_STATUS_MEDIA_CONNECT               ((NDIS_STATUS)0x4001000BL)
+#define NDIS_STATUS_MEDIA_DISCONNECT            ((NDIS_STATUS)0x4001000CL)
 #define NDIS_STATUS_HARDWARE_LINE_UP            ((NDIS_STATUS)0x4001000DL)
 #define NDIS_STATUS_HARDWARE_LINE_DOWN          ((NDIS_STATUS)0x4001000EL)
 #define NDIS_STATUS_INTERFACE_UP                ((NDIS_STATUS)0x4001000FL)
@@ -139,24 +376,109 @@ typedef ULONG NDIS_ERROR_CODE, *PNDIS_ERROR_CODE;
 #define NDIS_STATUS_WAN_GET_STATS               ((NDIS_STATUS)0x40010014L)
 #define NDIS_STATUS_WAN_CO_FRAGMENT             ((NDIS_STATUS)0x40010015L)
 #define NDIS_STATUS_WAN_CO_LINKPARAMS           ((NDIS_STATUS)0x40010016L)
+#if NDIS_SUPPORT_NDIS6
+#define NDIS_STATUS_LINK_STATE                  ((NDIS_STATUS)0x40010017L)
+#define NDIS_STATUS_NETWORK_CHANGE              ((NDIS_STATUS)0x40010018L)
+#define NDIS_STATUS_MEDIA_SPECIFIC_INDICATION_EX ((NDIS_STATUS)0x40010019L)
+#define NDIS_STATUS_PORT_STATE                  ((NDIS_STATUS)0x40010022L)
+#define NDIS_STATUS_OPER_STATUS                 ((NDIS_STATUS)0x40010023L)
+#define NDIS_STATUS_PACKET_FILTER               ((NDIS_STATUS)0x40010024L)
+#endif /* NDIS_SUPPORT_NDIS6 */
+#define NDIS_STATUS_WAN_CO_MTULINKPARAMS        ((NDIS_STATUS)0x40010025L)
+
+#if NDIS_SUPPORT_NDIS6
+
+#define NDIS_STATUS_IP_OPER_STATUS              ((NDIS_STATUS)0x40010026L)
+
+#define NDIS_STATUS_OFFLOAD_PAUSE               ((NDIS_STATUS)0x40020001L)
+#define NDIS_STATUS_UPLOAD_ALL                  ((NDIS_STATUS)0x40020002L)
+#define NDIS_STATUS_OFFLOAD_RESUME              ((NDIS_STATUS)0x40020003L)
+#define NDIS_STATUS_OFFLOAD_PARTIAL_SUCCESS     ((NDIS_STATUS)0x40020004L)
+#define NDIS_STATUS_OFFLOAD_STATE_INVALID       ((NDIS_STATUS)0x40020005L)
+#define NDIS_STATUS_TASK_OFFLOAD_CURRENT_CONFIG ((NDIS_STATUS)0x40020006L)
+#define NDIS_STATUS_TASK_OFFLOAD_HARDWARE_CAPABILITIES ((NDIS_STATUS)0x40020007L)
+#define NDIS_STATUS_OFFLOAD_ENCASPULATION_CHANGE ((NDIS_STATUS)0x40020008L)
+#define NDIS_STATUS_TCP_CONNECTION_OFFLOAD_HARDWARE_CAPABILITIES ((NDIS_STATUS)0x4002000BL)
+
+#if (NDIS_SUPPORT_NDIS61)
+#define NDIS_STATUS_HD_SPLIT_CURRENT_CONFIG     ((NDIS_STATUS)0x4002000CL)
+#endif
+
+#if (NDIS_SUPPORT_NDIS620)
+#define NDIS_STATUS_RECEIVE_QUEUE_STATE         ((NDIS_STATUS)0x4002000DL)
+#endif
+
+#define NDIS_STATUS_OFFLOAD_IM_RESERVED1        ((NDIS_STATUS)0x40020100L)
+#define NDIS_STATUS_OFFLOAD_IM_RESERVED2        ((NDIS_STATUS)0x40020101L)
+#define NDIS_STATUS_OFFLOAD_IM_RESERVED3        ((NDIS_STATUS)0x40020102L)
+
+#define NDIS_STATUS_DOT11_SCAN_CONFIRM          ((NDIS_STATUS)0x40030000L)
+#define NDIS_STATUS_DOT11_MPDU_MAX_LENGTH_CHANGED ((NDIS_STATUS)0x40030001L)
+#define NDIS_STATUS_DOT11_ASSOCIATION_START     ((NDIS_STATUS)0x40030002L)
+#define NDIS_STATUS_DOT11_ASSOCIATION_COMPLETION ((NDIS_STATUS)0x40030003L)
+#define NDIS_STATUS_DOT11_CONNECTION_START      ((NDIS_STATUS)0x40030004L)
+#define NDIS_STATUS_DOT11_CONNECTION_COMPLETION ((NDIS_STATUS)0x40030005L)
+#define NDIS_STATUS_DOT11_ROAMING_START         ((NDIS_STATUS)0x40030006L)
+#define NDIS_STATUS_DOT11_ROAMING_COMPLETION    ((NDIS_STATUS)0x40030007L)
+#define NDIS_STATUS_DOT11_DISASSOCIATION        ((NDIS_STATUS)0x40030008L)
+#define NDIS_STATUS_DOT11_TKIPMIC_FAILURE       ((NDIS_STATUS)0x40030009L)
+#define NDIS_STATUS_DOT11_PMKID_CANDIDATE_LIST  ((NDIS_STATUS)0x4003000AL)
+#define NDIS_STATUS_DOT11_PHY_STATE_CHANGED     ((NDIS_STATUS)0x4003000BL)
+#define NDIS_STATUS_DOT11_LINK_QUALITY          ((NDIS_STATUS)0x4003000CL)
+#define NDIS_STATUS_DOT11_INCOMING_ASSOC_STARTED ((NDIS_STATUS)0x4003000DL)
+#define NDIS_STATUS_DOT11_INCOMING_ASSOC_REQUEST_RECEIVED ((NDIS_STATUS)0x4003000EL)
+#define NDIS_STATUS_DOT11_INCOMING_ASSOC_COMPLETION ((NDIS_STATUS)0x4003000FL)
+#define NDIS_STATUS_DOT11_STOP_AP               ((NDIS_STATUS)0x40030010L)
+#define NDIS_STATUS_DOT11_PHY_FREQUENCY_ADOPTED ((NDIS_STATUS)0x40030011L)
+#define NDIS_STATUS_DOT11_CAN_SUSTAIN_AP        ((NDIS_STATUS)0x40030012L)
+
+#define NDIS_STATUS_WWAN_DEVICE_CAPS            ((NDIS_STATUS)0x40041000)
+#define NDIS_STATUS_WWAN_READY_INFO             ((NDIS_STATUS)0x40041001)
+#define NDIS_STATUS_WWAN_RADIO_STATE            ((NDIS_STATUS)0x40041002)
+#define NDIS_STATUS_WWAN_PIN_INFO               ((NDIS_STATUS)0x40041003)
+#define NDIS_STATUS_WWAN_PIN_LIST               ((NDIS_STATUS)0x40041004)
+#define NDIS_STATUS_WWAN_HOME_PROVIDER          ((NDIS_STATUS)0x40041005)
+#define NDIS_STATUS_WWAN_PREFERRED_PROVIDERS    ((NDIS_STATUS)0x40041006)
+#define NDIS_STATUS_WWAN_VISIBLE_PROVIDERS      ((NDIS_STATUS)0x40041007)
+#define NDIS_STATUS_WWAN_REGISTER_STATE         ((NDIS_STATUS)0x40041008)
+#define NDIS_STATUS_WWAN_PACKET_SERVICE         ((NDIS_STATUS)0x40041009)
+#define NDIS_STATUS_WWAN_SIGNAL_STATE           ((NDIS_STATUS)0x4004100a)
+#define NDIS_STATUS_WWAN_CONTEXT_STATE          ((NDIS_STATUS)0x4004100b)
+#define NDIS_STATUS_WWAN_PROVISIONED_CONTEXTS   ((NDIS_STATUS)0x4004100c)
+#define NDIS_STATUS_WWAN_SERVICE_ACTIVATION     ((NDIS_STATUS)0x4004100d)
+#define NDIS_STATUS_WWAN_SMS_CONFIGURATION      ((NDIS_STATUS)0x4004100e)
+#define NDIS_STATUS_WWAN_SMS_RECEIVE            ((NDIS_STATUS)0x4004100f)
+#define NDIS_STATUS_WWAN_SMS_SEND               ((NDIS_STATUS)0x40041010)
+#define NDIS_STATUS_WWAN_SMS_DELETE             ((NDIS_STATUS)0x40041011)
+#define NDIS_STATUS_WWAN_SMS_STATUS             ((NDIS_STATUS)0x40041012)
+#define NDIS_STATUS_WWAN_DNS_ADDRESS            ((NDIS_STATUS)0x40041013)
+
+#define NDIS_STATUS_WWAN_VENDOR_SPECIFIC        ((NDIS_STATUS)0x40043000)
+
+#endif /* NDIS_SUPPORT_NDIS6 */
+
+#if (NDIS_SUPPORT_NDIS620)
+#define NDIS_STATUS_PM_WOL_PATTERN_REJECTED     ((NDIS_STATUS)0x40030051L)
+#define NDIS_STATUS_PM_OFFLOAD_REJECTED         ((NDIS_STATUS)0x40030052L)
+#define NDIS_STATUS_PM_CAPABILITIES_CHANGE      ((NDIS_STATUS)0x40030053L)
+#endif
 
 #define NDIS_STATUS_NOT_RESETTABLE              ((NDIS_STATUS)0x80010001L)
-#define NDIS_STATUS_SOFT_ERRORS                        ((NDIS_STATUS)0x80010003L)
+#define NDIS_STATUS_SOFT_ERRORS                 ((NDIS_STATUS)0x80010003L)
 #define NDIS_STATUS_HARD_ERRORS                 ((NDIS_STATUS)0x80010004L)
-#define NDIS_STATUS_BUFFER_OVERFLOW                ((NDIS_STATUS)STATUS_BUFFER_OVERFLOW)
-
-#define NDIS_STATUS_FAILURE                        ((NDIS_STATUS)STATUS_UNSUCCESSFUL)
+#define NDIS_STATUS_BUFFER_OVERFLOW             ((NDIS_STATUS)STATUS_BUFFER_OVERFLOW)
+#define NDIS_STATUS_FAILURE                     ((NDIS_STATUS)STATUS_UNSUCCESSFUL)
 #define NDIS_STATUS_RESOURCES                   ((NDIS_STATUS)STATUS_INSUFFICIENT_RESOURCES)
-#define NDIS_STATUS_CLOSING                        ((NDIS_STATUS)0xC0010002L)
-#define NDIS_STATUS_BAD_VERSION                        ((NDIS_STATUS)0xC0010004L)
+#define NDIS_STATUS_CLOSING                     ((NDIS_STATUS)0xC0010002L)
+#define NDIS_STATUS_BAD_VERSION                 ((NDIS_STATUS)0xC0010004L)
 #define NDIS_STATUS_BAD_CHARACTERISTICS         ((NDIS_STATUS)0xC0010005L)
 #define NDIS_STATUS_ADAPTER_NOT_FOUND           ((NDIS_STATUS)0xC0010006L)
-#define NDIS_STATUS_OPEN_FAILED                        ((NDIS_STATUS)0xC0010007L)
+#define NDIS_STATUS_OPEN_FAILED                 ((NDIS_STATUS)0xC0010007L)
 #define NDIS_STATUS_DEVICE_FAILED               ((NDIS_STATUS)0xC0010008L)
 #define NDIS_STATUS_MULTICAST_FULL              ((NDIS_STATUS)0xC0010009L)
 #define NDIS_STATUS_MULTICAST_EXISTS            ((NDIS_STATUS)0xC001000AL)
-#define NDIS_STATUS_MULTICAST_NOT_FOUND                ((NDIS_STATUS)0xC001000BL)
-#define NDIS_STATUS_REQUEST_ABORTED                ((NDIS_STATUS)0xC001000CL)
+#define NDIS_STATUS_MULTICAST_NOT_FOUND         ((NDIS_STATUS)0xC001000BL)
+#define NDIS_STATUS_REQUEST_ABORTED             ((NDIS_STATUS)0xC001000CL)
 #define NDIS_STATUS_RESET_IN_PROGRESS           ((NDIS_STATUS)0xC001000DL)
 #define NDIS_STATUS_CLOSING_INDICATING          ((NDIS_STATUS)0xC001000EL)
 #define NDIS_STATUS_NOT_SUPPORTED               ((NDIS_STATUS)STATUS_NOT_SUPPORTED)
@@ -168,8 +490,8 @@ typedef ULONG NDIS_ERROR_CODE, *PNDIS_ERROR_CODE;
 #define NDIS_STATUS_INVALID_LENGTH              ((NDIS_STATUS)0xC0010014L)
 #define NDIS_STATUS_INVALID_DATA                ((NDIS_STATUS)0xC0010015L)
 #define NDIS_STATUS_BUFFER_TOO_SHORT            ((NDIS_STATUS)0xC0010016L)
-#define NDIS_STATUS_INVALID_OID                        ((NDIS_STATUS)0xC0010017L)
-#define NDIS_STATUS_ADAPTER_REMOVED                ((NDIS_STATUS)0xC0010018L)
+#define NDIS_STATUS_INVALID_OID                 ((NDIS_STATUS)0xC0010017L)
+#define NDIS_STATUS_ADAPTER_REMOVED             ((NDIS_STATUS)0xC0010018L)
 #define NDIS_STATUS_UNSUPPORTED_MEDIA           ((NDIS_STATUS)0xC0010019L)
 #define NDIS_STATUS_GROUP_ADDRESS_IN_USE        ((NDIS_STATUS)0xC001001AL)
 #define NDIS_STATUS_FILE_NOT_FOUND              ((NDIS_STATUS)0xC001001BL)
@@ -178,7 +500,7 @@ typedef ULONG NDIS_ERROR_CODE, *PNDIS_ERROR_CODE;
 #define NDIS_STATUS_RESOURCE_CONFLICT           ((NDIS_STATUS)0xC001001EL)
 #define NDIS_STATUS_NO_CABLE                    ((NDIS_STATUS)0xC001001FL)
 
-#define NDIS_STATUS_INVALID_SAP                        ((NDIS_STATUS)0xC0010020L)
+#define NDIS_STATUS_INVALID_SAP                 ((NDIS_STATUS)0xC0010020L)
 #define NDIS_STATUS_SAP_IN_USE                  ((NDIS_STATUS)0xC0010021L)
 #define NDIS_STATUS_INVALID_ADDRESS             ((NDIS_STATUS)0xC0010022L)
 #define NDIS_STATUS_VC_NOT_ACTIVATED            ((NDIS_STATUS)0xC0010023L)
@@ -193,25 +515,69 @@ typedef ULONG NDIS_ERROR_CODE, *PNDIS_ERROR_CODE;
 #define NDIS_STATUS_INVALID_DEVICE_REQUEST      ((NDIS_STATUS)STATUS_INVALID_DEVICE_REQUEST)
 #define NDIS_STATUS_NETWORK_UNREACHABLE         ((NDIS_STATUS)STATUS_NETWORK_UNREACHABLE)
 
+#if NDIS_SUPPORT_NDIS6
+
+#define NDIS_STATUS_SEND_ABORTED                ((NDIS_STATUS)STATUS_NDIS_REQUEST_ABORTED)
+#define NDIS_STATUS_PAUSED                      ((NDIS_STATUS)STATUS_NDIS_PAUSED)
+#define NDIS_STATUS_INTERFACE_NOT_FOUND         ((NDIS_STATUS)STATUS_NDIS_INTERFACE_NOT_FOUND)
+#define NDIS_STATUS_INVALID_PARAMETER           ((NDIS_STATUS)STATUS_INVALID_PARAMETER)
+#define NDIS_STATUS_UNSUPPORTED_REVISION        ((NDIS_STATUS)STATUS_NDIS_UNSUPPORTED_REVISION)
+#define NDIS_STATUS_INVALID_PORT                ((NDIS_STATUS)STATUS_NDIS_INVALID_PORT)
+#define NDIS_STATUS_INVALID_PORT_STATE          ((NDIS_STATUS)STATUS_NDIS_INVALID_PORT_STATE)
+#define NDIS_STATUS_INVALID_STATE               ((NDIS_STATUS)STATUS_INVALID_DEVICE_STATE)
+#define NDIS_STATUS_MEDIA_DISCONNECTED          ((NDIS_STATUS)STATUS_NDIS_MEDIA_DISCONNECTED)
+#define NDIS_STATUS_LOW_POWER_STATE             ((NDIS_STATUS)STATUS_NDIS_LOW_POWER_STATE)
+#define NDIS_STATUS_DOT11_AUTO_CONFIG_ENABLED   ((NDIS_STATUS)STATUS_NDIS_DOT11_AUTO_CONFIG_ENABLED)
+#define NDIS_STATUS_DOT11_MEDIA_IN_USE          ((NDIS_STATUS)STATUS_NDIS_DOT11_MEDIA_IN_USE)
+#define NDIS_STATUS_DOT11_POWER_STATE_INVALID   ((NDIS_STATUS)STATUS_NDIS_DOT11_POWER_STATE_INVALID)
+#define NDIS_STATUS_UPLOAD_IN_PROGRESS          ((NDIS_STATUS)0xC0231001L)
+#define NDIS_STATUS_REQUEST_UPLOAD              ((NDIS_STATUS)0xC0231002L)
+#define NDIS_STATUS_UPLOAD_REQUESTED            ((NDIS_STATUS)0xC0231003L)
+#define NDIS_STATUS_OFFLOAD_TCP_ENTRIES         ((NDIS_STATUS)0xC0231004L)
+#define NDIS_STATUS_OFFLOAD_PATH_ENTRIES        ((NDIS_STATUS)0xC0231005L)
+#define NDIS_STATUS_OFFLOAD_NEIGHBOR_ENTRIES    ((NDIS_STATUS)0xC0231006L)
+#define NDIS_STATUS_OFFLOAD_IP_ADDRESS_ENTRIES  ((NDIS_STATUS)0xC0231007L)
+#define NDIS_STATUS_OFFLOAD_HW_ADDRESS_ENTRIES  ((NDIS_STATUS)0xC0231008L)
+#define NDIS_STATUS_OFFLOAD_VLAN_ENTRIES        ((NDIS_STATUS)0xC0231009L)
+#define NDIS_STATUS_OFFLOAD_TCP_XMIT_BUFFER     ((NDIS_STATUS)0xC023100AL)
+#define NDIS_STATUS_OFFLOAD_TCP_RCV_BUFFER      ((NDIS_STATUS)0xC023100BL)
+#define NDIS_STATUS_OFFLOAD_TCP_RCV_WINDOW      ((NDIS_STATUS)0xC023100CL)
+#define NDIS_STATUS_OFFLOAD_VLAN_MISMATCH       ((NDIS_STATUS)0xC023100DL)
+#define NDIS_STATUS_OFFLOAD_DATA_NOT_ACCEPTED   ((NDIS_STATUS)0xC023100EL)
+#define NDIS_STATUS_OFFLOAD_POLICY              ((NDIS_STATUS)0xC023100FL)
+#define NDIS_STATUS_OFFLOAD_DATA_PARTIALLY_ACCEPTED ((NDIS_STATUS)0xC0231010L)
+#define NDIS_STATUS_OFFLOAD_REQUEST_RESET       ((NDIS_STATUS)0xC0231011L)
+
+#if NDIS_SUPPORT_NDIS620
+#define NDIS_STATUS_PM_WOL_PATTERN_LIST_FULL    ((NDIS_STATUS)STATUS_NDIS_PM_WOL_PATTERN_LIST_FULL)
+#define NDIS_STATUS_PM_PROTOCOL_OFFLOAD_LIST_FULL ((NDIS_STATUS)STATUS_NDIS_PM_PROTOCOL_OFFLOAD_LIST_FULL)
+#endif
+
+#endif /* NDIS_SUPPORT_NDIS6 */
 
-/* NDIS error codes for error logging */
+#if (NDIS_SUPPORT_NDIS620)
+#define NDIS_STATUS_OFFLOAD_CONNECTION_REJECTED ((NDIS_STATUS)STATUS_NDIS_OFFLOAD_CONNECTION_REJECTED)
+#endif
 
-#define NDIS_ERROR_CODE_RESOURCE_CONFLICT                                  EVENT_NDIS_RESOURCE_CONFLICT
-#define NDIS_ERROR_CODE_OUT_OF_RESOURCES                                   EVENT_NDIS_OUT_OF_RESOURCE
-#define NDIS_ERROR_CODE_HARDWARE_FAILURE                                   EVENT_NDIS_HARDWARE_FAILURE
-#define NDIS_ERROR_CODE_ADAPTER_NOT_FOUND                                  EVENT_NDIS_ADAPTER_NOT_FOUND
-#define NDIS_ERROR_CODE_INTERRUPT_CONNECT                                  EVENT_NDIS_INTERRUPT_CONNECT
-#define NDIS_ERROR_CODE_DRIVER_FAILURE                                     EVENT_NDIS_DRIVER_FAILURE
-#define NDIS_ERROR_CODE_BAD_VERSION                                                  EVENT_NDIS_BAD_VERSION
-#define NDIS_ERROR_CODE_TIMEOUT                                                                EVENT_NDIS_TIMEOUT
-#define NDIS_ERROR_CODE_NETWORK_ADDRESS                                            EVENT_NDIS_NETWORK_ADDRESS
-#define NDIS_ERROR_CODE_UNSUPPORTED_CONFIGURATION              EVENT_NDIS_UNSUPPORTED_CONFIGURATION
-#define NDIS_ERROR_CODE_INVALID_VALUE_FROM_ADAPTER           EVENT_NDIS_INVALID_VALUE_FROM_ADAPTER
-#define NDIS_ERROR_CODE_MISSING_CONFIGURATION_PARAMETER          EVENT_NDIS_MISSING_CONFIGURATION_PARAMETER
-#define NDIS_ERROR_CODE_BAD_IO_BASE_ADDRESS                              EVENT_NDIS_BAD_IO_BASE_ADDRESS
-#define NDIS_ERROR_CODE_RECEIVE_SPACE_SMALL                              EVENT_NDIS_RECEIVE_SPACE_SMALL
-#define NDIS_ERROR_CODE_ADAPTER_DISABLED                                   EVENT_NDIS_ADAPTER_DISABLED
+/* NDIS error codes for error logging */
 
+#define NDIS_ERROR_CODE ULONG
+
+#define NDIS_ERROR_CODE_RESOURCE_CONFLICT               EVENT_NDIS_RESOURCE_CONFLICT
+#define NDIS_ERROR_CODE_OUT_OF_RESOURCES                EVENT_NDIS_OUT_OF_RESOURCE
+#define NDIS_ERROR_CODE_HARDWARE_FAILURE                EVENT_NDIS_HARDWARE_FAILURE
+#define NDIS_ERROR_CODE_ADAPTER_NOT_FOUND               EVENT_NDIS_ADAPTER_NOT_FOUND
+#define NDIS_ERROR_CODE_INTERRUPT_CONNECT               EVENT_NDIS_INTERRUPT_CONNECT
+#define NDIS_ERROR_CODE_DRIVER_FAILURE                  EVENT_NDIS_DRIVER_FAILURE
+#define NDIS_ERROR_CODE_BAD_VERSION                     EVENT_NDIS_BAD_VERSION
+#define NDIS_ERROR_CODE_TIMEOUT                         EVENT_NDIS_TIMEOUT
+#define NDIS_ERROR_CODE_NETWORK_ADDRESS                 EVENT_NDIS_NETWORK_ADDRESS
+#define NDIS_ERROR_CODE_UNSUPPORTED_CONFIGURATION       EVENT_NDIS_UNSUPPORTED_CONFIGURATION
+#define NDIS_ERROR_CODE_INVALID_VALUE_FROM_ADAPTER      EVENT_NDIS_INVALID_VALUE_FROM_ADAPTER
+#define NDIS_ERROR_CODE_MISSING_CONFIGURATION_PARAMETER EVENT_NDIS_MISSING_CONFIGURATION_PARAMETER
+#define NDIS_ERROR_CODE_BAD_IO_BASE_ADDRESS             EVENT_NDIS_BAD_IO_BASE_ADDRESS
+#define NDIS_ERROR_CODE_RECEIVE_SPACE_SMALL             EVENT_NDIS_RECEIVE_SPACE_SMALL
+#define NDIS_ERROR_CODE_ADAPTER_DISABLED                EVENT_NDIS_ADAPTER_DISABLED
 
 /* Memory allocation flags. Used by Ndis[Allocate|Free]Memory */
 #define NDIS_MEMORY_CONTIGUOUS            0x00000001
@@ -238,8 +604,8 @@ typedef union _NDIS_RW_LOCK_REFCOUNT {
 } NDIS_RW_LOCK_REFCOUNT;
 
 typedef struct _NDIS_RW_LOCK {
-  union {
-    struct {
+  __GNU_EXTENSION union {
+    __GNU_EXTENSION struct {
       KSPIN_LOCK  SpinLock;
       PVOID  Context;
     };
@@ -259,7 +625,7 @@ typedef struct _LOCK_STATE {
 /* Timer */
 
 typedef VOID
-(DDKAPI *PNDIS_TIMER_FUNCTION)(
+(NTAPI *PNDIS_TIMER_FUNCTION)(
        IN PVOID  SystemSpecific1,
        IN PVOID  FunctionContext,
        IN PVOID  SystemSpecific2,
@@ -270,8 +636,6 @@ typedef struct _NDIS_TIMER {
   KDPC  Dpc;
 } NDIS_TIMER, *PNDIS_TIMER;
 
-
-
 /* Hardware */
 
 typedef CM_MCA_POS_DATA NDIS_MCA_POS_DATA, *PNDIS_MCA_POS_DATA;
@@ -359,69 +723,96 @@ typedef struct _NDIS_GUID {
 #define        NDIS_GUID_UNICODE_STRING          0x00000008
 #define        NDIS_GUID_ARRAY                   0x00000010
 
-typedef HANDLE PNDIS_PACKET_POOL;
+#if NDIS_LEGACY_DRIVER
 
 /* NDIS_PACKET_PRIVATE.Flags constants */
-#define fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO    0x40
-#define fPACKET_ALLOCATED_BY_NDIS               0x80
+#define fPACKET_WRAPPER_RESERVED             0x3f
+#define fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO 0x40
+#define fPACKET_ALLOCATED_BY_NDIS            0x80
+
+#define NDIS_FLAGS_PROTOCOL_ID_MASK          0x0000000f
+#define NDIS_FLAGS_MULTICAST_PACKET          0x00000010
+#define NDIS_FLAGS_RESERVED2                 0x00000020
+#define NDIS_FLAGS_RESERVED3                 0x00000040
+#define NDIS_FLAGS_DONT_LOOPBACK             0x00000080
+#define NDIS_FLAGS_IS_LOOPBACK_PACKET        0x00000100
+#define NDIS_FLAGS_LOOPBACK_ONLY             0x00000200
+#define NDIS_FLAGS_RESERVED4                 0x00000400
+#define NDIS_FLAGS_DOUBLE_BUFFERED           0x00000800
+#define NDIS_FLAGS_SENT_AT_DPC               0x00001000
+#define NDIS_FLAGS_USES_SG_BUFFER_LIST       0x00002000
+#define NDIS_FLAGS_USES_ORIGINAL_PACKET      0x00004000
+#define NDIS_FLAGS_PADDED                    0x00010000
+#define NDIS_FLAGS_XLATE_AT_TOP              0x00020000
+
+typedef NDIS_HANDLE PNDIS_PACKET_POOL;
 
 typedef struct _NDIS_PACKET_PRIVATE {
-  UINT  PhysicalCount;
-  UINT  TotalLength;
-  PNDIS_BUFFER  Head;
-  PNDIS_BUFFER  Tail;
-  PNDIS_PACKET_POOL  Pool;
-  UINT  Count;
-  ULONG  Flags;
-  BOOLEAN       ValidCounts;
-  UCHAR  NdisPacketFlags;
-  USHORT  NdisPacketOobOffset;
-} NDIS_PACKET_PRIVATE, * PNDIS_PACKET_PRIVATE;
+  UINT PhysicalCount;
+  UINT TotalLength;
+  PNDIS_BUFFER Head;
+  PNDIS_BUFFER Tail;
+  PNDIS_PACKET_POOL Pool;
+  UINT Count;
+  ULONG Flags;
+  BOOLEAN ValidCounts;
+  UCHAR NdisPacketFlags;
+  USHORT NdisPacketOobOffset;
+} NDIS_PACKET_PRIVATE, *PNDIS_PACKET_PRIVATE;
 
 typedef struct _NDIS_PACKET {
-  NDIS_PACKET_PRIVATE  Private;
-  union {
-    struct {
-      UCHAR  MiniportReserved[2 * sizeof(PVOID)];
-      UCHAR  WrapperReserved[2 * sizeof(PVOID)];
+  NDIS_PACKET_PRIVATE Private;
+  __MINGW_EXTENSION union {
+    __MINGW_EXTENSION struct {
+      UCHAR MiniportReserved[2 * sizeof(PVOID)];
+      UCHAR WrapperReserved[2 * sizeof(PVOID)];
     };
-    struct {
-      UCHAR  MiniportReservedEx[3 * sizeof(PVOID)];
-      UCHAR  WrapperReservedEx[sizeof(PVOID)];
+    __MINGW_EXTENSION struct {
+      UCHAR MiniportReservedEx[3 * sizeof(PVOID)];
+      UCHAR WrapperReservedEx[sizeof(PVOID)];
     };
-    struct {
-      UCHAR  MacReserved[4 * sizeof(PVOID)];
+    __MINGW_EXTENSION struct {
+      UCHAR MacReserved[4 * sizeof(PVOID)];
     };
   };
-  ULONG_PTR  Reserved[2];
-  UCHAR  ProtocolReserved[1];
+  ULONG_PTR Reserved[2];
+  UCHAR ProtocolReserved[1];
 } NDIS_PACKET, *PNDIS_PACKET, **PPNDIS_PACKET;
 
+typedef struct _NDIS_PACKET_STACK {
+  ULONG_PTR IMReserved[2];
+  ULONG_PTR NdisReserved[4];
+} NDIS_PACKET_STACK, *PNDIS_PACKET_STACK;
+
+#endif /* NDIS_LEGACY_DRIVER */
+
 typedef enum _NDIS_CLASS_ID {
-       NdisClass802_3Priority,
-       NdisClassWirelessWanMbxMailbox,
-       NdisClassIrdaPacketInfo,
-       NdisClassAtmAALInfo
+  NdisClass802_3Priority,
+  NdisClassWirelessWanMbxMailbox,
+  NdisClassIrdaPacketInfo,
+  NdisClassAtmAALInfo
 } NDIS_CLASS_ID;
 
-typedef struct MediaSpecificInformation {
-  UINT  NextEntryOffset;
-  NDIS_CLASS_ID  ClassId;
-  UINT  Size;
-  UCHAR  ClassInformation[1];
-} MEDIA_SPECIFIC_INFORMATION;
+typedef struct _MEDIA_SPECIFIC_INFORMATION {
+  UINT NextEntryOffset;
+  NDIS_CLASS_ID ClassId;
+  UINT Size;
+  UCHAR ClassInformation[1];
+} MEDIA_SPECIFIC_INFORMATION, *PMEDIA_SPECIFIC_INFORMATION;
 
+#if NDIS_LEGACY_DRIVER
 typedef struct _NDIS_PACKET_OOB_DATA {
-  _ANONYMOUS_UNION union {
-    ULONGLONG  TimeToSend;
-    ULONGLONG  TimeSent;
-  } DUMMYUNIONNAME;
-  ULONGLONG  TimeReceived;
-  UINT  HeaderSize;
-  UINT  SizeMediaSpecificInfo;
-  PVOID  MediaSpecificInformation;
-  NDIS_STATUS  Status;
+  __MINGW_EXTENSION union {
+    ULONGLONG TimeToSend;
+    ULONGLONG TimeSent;
+  };
+  ULONGLONG TimeReceived;
+  UINT HeaderSize;
+  UINT SizeMediaSpecificInfo;
+  PVOID MediaSpecificInformation;
+  NDIS_STATUS Status;
 } NDIS_PACKET_OOB_DATA, *PNDIS_PACKET_OOB_DATA;
+#endif
 
 typedef struct _NDIS_PM_PACKET_PATTERN {
   ULONG  Priority;
@@ -432,11 +823,6 @@ typedef struct _NDIS_PM_PACKET_PATTERN {
   ULONG  PatternFlags;
 } NDIS_PM_PACKET_PATTERN,  *PNDIS_PM_PACKET_PATTERN;
 
-typedef struct _NDIS_PACKET_STACK {
-  ULONG_PTR IMReserved[2];
-  ULONG_PTR NdisReserved[4];
-} NDIS_PACKET_STACK, *PNDIS_PACKET_STACK;
-
 /* Request types used by NdisRequest */
 typedef enum _NDIS_REQUEST_TYPE {
   NdisRequestQueryInformation,
@@ -450,59 +836,62 @@ typedef enum _NDIS_REQUEST_TYPE {
   NdisRequestGeneric1,
   NdisRequestGeneric2,
   NdisRequestGeneric3,
-  NdisRequestGeneric4
+  NdisRequestGeneric4,
+#if NDIS_SUPPORT_NDIS6
+  NdisRequestMethod,
+#endif
 } NDIS_REQUEST_TYPE, *PNDIS_REQUEST_TYPE;
 
+#if NDIS_LEGACY_DRIVER
 typedef struct _NDIS_REQUEST {
-  UCHAR  MacReserved[4 * sizeof(PVOID)];
-  NDIS_REQUEST_TYPE  RequestType;
+  UCHAR MacReserved[4 * sizeof(PVOID)];
+  NDIS_REQUEST_TYPE RequestType;
   union _DATA {
     struct QUERY_INFORMATION {
-      NDIS_OID  Oid;
-      PVOID  InformationBuffer;
-      UINT  InformationBufferLength;
-      UINT  BytesWritten;
-      UINT  BytesNeeded;
+      NDIS_OID Oid;
+      PVOID InformationBuffer;
+      UINT InformationBufferLength;
+      UINT BytesWritten;
+      UINT BytesNeeded;
     } QUERY_INFORMATION;
     struct SET_INFORMATION {
-      NDIS_OID  Oid;
-      PVOID  InformationBuffer;
-      UINT  InformationBufferLength;
-      UINT  BytesRead;
-      UINT  BytesNeeded;
+      NDIS_OID Oid;
+      PVOID InformationBuffer;
+      UINT InformationBufferLength;
+      UINT BytesRead;
+      UINT BytesNeeded;
     } SET_INFORMATION;
  } DATA;
-#if (defined(NDIS50) || defined(NDIS51))
-  UCHAR  NdisReserved[9 * sizeof(PVOID)];
-  union {
-    UCHAR  CallMgrReserved[2 * sizeof(PVOID)];
-    UCHAR  ProtocolReserved[2 * sizeof(PVOID)];
+#if (defined(NDIS50) || defined(NDIS51) || defined(NDIS50_MINIPORT) || defined(NDIS51_MINIPORT))
+  UCHAR NdisReserved[9 * sizeof(PVOID)];
+  __MINGW_EXTENSION union {
+    UCHAR CallMgrReserved[2 * sizeof(PVOID)];
+    UCHAR ProtocolReserved[2 * sizeof(PVOID)];
   };
-  UCHAR  MiniportReserved[2 * sizeof(PVOID)];
+  UCHAR MiniportReserved[2 * sizeof(PVOID)];
 #endif
 } NDIS_REQUEST, *PNDIS_REQUEST;
-
-
+#endif /* NDIS_LEGACY_DRIVER */
 
 /* Wide Area Networks definitions */
 
+#if NDIS_LEGACY_DRIVER
 typedef struct _NDIS_WAN_PACKET {
-  LIST_ENTRY  WanPacketQueue;
-  PUCHAR  CurrentBuffer;
-  ULONG  CurrentLength;
-  PUCHAR  StartBuffer;
-  PUCHAR  EndBuffer;
-  PVOID  ProtocolReserved1;
-  PVOID  ProtocolReserved2;
-  PVOID  ProtocolReserved3;
-  PVOID  ProtocolReserved4;
-  PVOID  MacReserved1;
-  PVOID  MacReserved2;
-  PVOID  MacReserved3;
-  PVOID  MacReserved4;
+  LIST_ENTRY WanPacketQueue;
+  PUCHAR CurrentBuffer;
+  ULONG CurrentLength;
+  PUCHAR StartBuffer;
+  PUCHAR EndBuffer;
+  PVOID ProtocolReserved1;
+  PVOID ProtocolReserved2;
+  PVOID ProtocolReserved3;
+  PVOID ProtocolReserved4;
+  PVOID MacReserved1;
+  PVOID MacReserved2;
+  PVOID MacReserved3;
+  PVOID MacReserved4;
 } NDIS_WAN_PACKET, *PNDIS_WAN_PACKET;
-
-
+#endif
 
 /* DMA channel information */
 
@@ -531,41 +920,45 @@ typedef UCHAR NDIS_DMA_SIZE;
 #define NDIS_DMA_64BITS                         ((NDIS_DMA_SIZE)2)
 
 typedef enum _NDIS_PROCESSOR_TYPE {
-       NdisProcessorX86,
-       NdisProcessorMips,
-       NdisProcessorAlpha,
-       NdisProcessorPpc,
-       NdisProcessorAmd64
+  NdisProcessorX86,
+  NdisProcessorMips,
+  NdisProcessorAlpha,
+  NdisProcessorPpc,
+  NdisProcessorAmd64,
+  NdisProcessorIA64
 } NDIS_PROCESSOR_TYPE, *PNDIS_PROCESSOR_TYPE;
 
 typedef enum _NDIS_ENVIRONMENT_TYPE {
-       NdisEnvironmentWindows,
-       NdisEnvironmentWindowsNt
+  NdisEnvironmentWindows,
+  NdisEnvironmentWindowsNt
 } NDIS_ENVIRONMENT_TYPE, *PNDIS_ENVIRONMENT_TYPE;
 
 /* Possible hardware architecture */
 typedef enum _NDIS_INTERFACE_TYPE {
-       NdisInterfaceInternal = Internal,
-       NdisInterfaceIsa = Isa,
-       NdisInterfaceEisa = Eisa,
-       NdisInterfaceMca = MicroChannel,
-       NdisInterfaceTurboChannel = TurboChannel,
-       NdisInterfacePci = PCIBus,
-       NdisInterfacePcMcia = PCMCIABus,
-       NdisInterfaceCBus = CBus,
-       NdisInterfaceMPIBus = MPIBus,
-       NdisInterfaceMPSABus = MPSABus,
-       NdisInterfaceProcessorInternal = ProcessorInternal,
-       NdisInterfaceInternalPowerBus = InternalPowerBus,
-       NdisInterfacePNPISABus = PNPISABus,
-       NdisInterfacePNPBus = PNPBus,
-       NdisMaximumInterfaceType
+  NdisInterfaceInternal = Internal,
+  NdisInterfaceIsa = Isa,
+  NdisInterfaceEisa = Eisa,
+  NdisInterfaceMca = MicroChannel,
+  NdisInterfaceTurboChannel = TurboChannel,
+  NdisInterfacePci = PCIBus,
+  NdisInterfacePcMcia = PCMCIABus,
+  NdisInterfaceCBus = CBus,
+  NdisInterfaceMPIBus = MPIBus,
+  NdisInterfaceMPSABus = MPSABus,
+  NdisInterfaceProcessorInternal = ProcessorInternal,
+  NdisInterfaceInternalPowerBus = InternalPowerBus,
+  NdisInterfacePNPISABus = PNPISABus,
+  NdisInterfacePNPBus = PNPBus,
+  NdisInterfaceUSB,
+  NdisInterfaceIrda,
+  NdisInterface1394,
+  NdisMaximumInterfaceType
 } NDIS_INTERFACE_TYPE, *PNDIS_INTERFACE_TYPE;
 
 #define NdisInterruptLevelSensitive       LevelSensitive
 #define NdisInterruptLatched              Latched
-typedef KINTERRUPT_MODE NDIS_INTERRUPT_MODE, *PNDIS_INTERRUPT_MODE;
 
+typedef KINTERRUPT_MODE NDIS_INTERRUPT_MODE, *PNDIS_INTERRUPT_MODE;
 
 typedef enum _NDIS_PARAMETER_TYPE {
   NdisParameterInteger,
@@ -575,58 +968,56 @@ typedef enum _NDIS_PARAMETER_TYPE {
   NdisParameterBinary
 } NDIS_PARAMETER_TYPE, *PNDIS_PARAMETER_TYPE;
 
-typedef struct {
-       USHORT  Length;
-       PVOID  Buffer;
+typedef struct _BINARY_DATA {
+  USHORT Length;
+  PVOID Buffer;
 } BINARY_DATA;
 
 typedef struct _NDIS_CONFIGURATION_PARAMETER {
-  NDIS_PARAMETER_TYPE  ParameterType;
+  NDIS_PARAMETER_TYPE ParameterType;
   union {
-    ULONG  IntegerData;
-    NDIS_STRING  StringData;
-    BINARY_DATA  BinaryData;
+    ULONG IntegerData;
+    NDIS_STRING StringData;
+    BINARY_DATA BinaryData;
   } ParameterData;
 } NDIS_CONFIGURATION_PARAMETER, *PNDIS_CONFIGURATION_PARAMETER;
 
-
 typedef PHYSICAL_ADDRESS NDIS_PHYSICAL_ADDRESS, *PNDIS_PHYSICAL_ADDRESS;
 
 typedef struct _NDIS_PHYSICAL_ADDRESS_UNIT {
-  NDIS_PHYSICAL_ADDRESS  PhysicalAddress;
-  UINT  Length;
+  NDIS_PHYSICAL_ADDRESS PhysicalAddress;
+  UINT Length;
 } NDIS_PHYSICAL_ADDRESS_UNIT, *PNDIS_PHYSICAL_ADDRESS_UNIT;
 
 typedef struct _NDIS_WAN_LINE_DOWN {
-  UCHAR  RemoteAddress[6];
-  UCHAR  LocalAddress[6];
+  UCHAR RemoteAddress[6];
+  UCHAR LocalAddress[6];
 } NDIS_WAN_LINE_DOWN, *PNDIS_WAN_LINE_DOWN;
 
 typedef struct _NDIS_WAN_LINE_UP {
-  ULONG  LinkSpeed;
-  ULONG  MaximumTotalSize;
-  NDIS_WAN_QUALITY  Quality;
-  USHORT  SendWindow;
-  UCHAR  RemoteAddress[6];
-  OUT UCHAR  LocalAddress[6];
-  ULONG  ProtocolBufferLength;
-  PUCHAR  ProtocolBuffer;
-  USHORT  ProtocolType;
-  NDIS_STRING  DeviceName;
+  ULONG LinkSpeed;
+  ULONG MaximumTotalSize;
+  NDIS_WAN_QUALITY Quality;
+  USHORT SendWindow;
+  UCHAR RemoteAddress[6];
+  OUT UCHAR LocalAddress[6];
+  ULONG ProtocolBufferLength;
+  PUCHAR ProtocolBuffer;
+  USHORT ProtocolType;
+  NDIS_STRING DeviceName;
 } NDIS_WAN_LINE_UP, *PNDIS_WAN_LINE_UP;
 
-
 typedef VOID
-(DDKAPI *ADAPTER_SHUTDOWN_HANDLER)(
+(NTAPI *ADAPTER_SHUTDOWN_HANDLER)(
   IN PVOID  ShutdownContext);
 
 typedef NTSTATUS
-(DDKAPI *TDI_REGISTER_CALLBACK)(
+(NTAPI *TDI_REGISTER_CALLBACK)(
     IN  PUNICODE_STRING         DeviceName,
     OUT HANDLE*                 TdiHandle);
 
 typedef NTSTATUS
-(DDKAPI *TDI_PNP_HANDLER)(
+(NTAPI *TDI_PNP_HANDLER)(
     IN  PUNICODE_STRING         UpperComponent,
     IN  PUNICODE_STRING         LowerComponent,
     IN  PUNICODE_STRING         BindList,
@@ -680,14 +1071,12 @@ typedef struct _NETWORK_ADDRESS_LIST {
 #define        NDIS_PROTOCOL_ID_MAX            0x0F
 #define        NDIS_PROTOCOL_ID_MASK           0x0F
 
-
 /* OID_GEN_TRANSPORT_HEADER_OFFSET */
 typedef struct _TRANSPORT_HEADER_OFFSET {
        USHORT  ProtocolType;
        USHORT  HeaderOffset;
 } TRANSPORT_HEADER_OFFSET, *PTRANSPORT_HEADER_OFFSET;
 
-
 /* OID_GEN_CO_LINK_SPEED / OID_GEN_CO_MINIMUM_LINK_SPEED */
 typedef struct _NDIS_CO_LINK_SPEED {
   ULONG  Outbound;
@@ -695,21 +1084,23 @@ typedef struct _NDIS_CO_LINK_SPEED {
 } NDIS_CO_LINK_SPEED, *PNDIS_CO_LINK_SPEED;
 
 typedef ULONG NDIS_AF, *PNDIS_AF;
+
 #define CO_ADDRESS_FAMILY_Q2931           ((NDIS_AF)0x1)
 #define CO_ADDRESS_FAMILY_PSCHED          ((NDIS_AF)0x2)
 #define CO_ADDRESS_FAMILY_L2TP            ((NDIS_AF)0x3)
 #define CO_ADDRESS_FAMILY_IRDA            ((NDIS_AF)0x4)
 #define CO_ADDRESS_FAMILY_1394            ((NDIS_AF)0x5)
 #define CO_ADDRESS_FAMILY_PPP             ((NDIS_AF)0x6)
+#define CO_ADDRESS_FAMILY_INFINIBAND      ((NDIS_AF)0x7)
 #define CO_ADDRESS_FAMILY_TAPI            ((NDIS_AF)0x800)
 #define CO_ADDRESS_FAMILY_TAPI_PROXY      ((NDIS_AF)0x801)
 
 #define CO_ADDRESS_FAMILY_PROXY           0x80000000
 
-typedef struct {
-  NDIS_AF  AddressFamily;
-  ULONG  MajorVersion;
-  ULONG  MinorVersion;
+typedef struct _CO_ADDRESS_FAMILY {
+  NDIS_AF AddressFamily;
+  ULONG MajorVersion;
+  ULONG MinorVersion;
 } CO_ADDRESS_FAMILY, *PCO_ADDRESS_FAMILY;
 
 typedef struct _CO_SPECIFIC_PARAMETERS {
@@ -756,9 +1147,9 @@ typedef struct _CO_CALL_PARAMETERS {
 } CO_CALL_PARAMETERS, *PCO_CALL_PARAMETERS;
 
 typedef struct _CO_SAP {
-  ULONG  SapType;
-  ULONG  SapLength;
-  UCHAR  Sap[1];
+  ULONG SapType;
+  ULONG SapLength;
+  UCHAR Sap[1];
 } CO_SAP, *PCO_SAP;
 
 typedef struct _NDIS_IPSEC_PACKET_INFO {
@@ -803,41 +1194,39 @@ typedef struct _NDIS_MAC_LINE_UP {
 } NDIS_MAC_LINE_UP, *PNDIS_MAC_LINE_UP;
 
 typedef struct _NDIS_PACKET_8021Q_INFO {
-       _ANONYMOUS_UNION union {
-               struct {
-                       UINT32  UserPriority : 3;
-                       UINT32  CanonicalFormatId : 1;
-                       UINT32  VlanId : 12;
-                       UINT32  Reserved : 16;
-               } TagHeader;
-               PVOID  Value;
-       } DUMMYUNIONNAME;
+  __MINGW_EXTENSION union {
+    struct {
+      UINT32 UserPriority:3;
+      UINT32 CanonicalFormatId:1;
+      UINT32 VlanId:12;
+      UINT32 Reserved:16;
+    } TagHeader;
+    PVOID Value;
+  };
 } NDIS_PACKET_8021Q_INFO, *PNDIS_PACKET_8021Q_INFO;
 
 typedef enum _NDIS_PER_PACKET_INFO {
-       TcpIpChecksumPacketInfo,
-       IpSecPacketInfo,
-       TcpLargeSendPacketInfo,
-       ClassificationHandlePacketInfo,
-       NdisReserved,
-       ScatterGatherListPacketInfo,
-       Ieee8021QInfo,
-       OriginalPacketInfo,
-       PacketCancelId,
-       MaxPerPacketInfo
+  TcpIpChecksumPacketInfo,
+  IpSecPacketInfo,
+  TcpLargeSendPacketInfo,
+  ClassificationHandlePacketInfo,
+  NdisReserved,
+  ScatterGatherListPacketInfo,
+  Ieee8021QInfo,
+  OriginalPacketInfo,
+  PacketCancelId,
+  OriginalNetBufferList,
+  CachedNetBufferList,
+  ShortPacketPaddingInfo,
+  MaxPerPacketInfo
 } NDIS_PER_PACKET_INFO, *PNDIS_PER_PACKET_INFO;
 
+#if NDIS_LEGACY_DRIVER
+
 typedef struct _NDIS_PACKET_EXTENSION {
-  PVOID  NdisPacketInfo[MaxPerPacketInfo];
+  PVOID NdisPacketInfo[MaxPerPacketInfo];
 } NDIS_PACKET_EXTENSION, *PNDIS_PACKET_EXTENSION;
 
-typedef struct _NDIS_GENERIC_OBJECT {
-  NDIS_OBJECT_HEADER  Header;
-  PVOID  Caller;
-  PVOID  CallersCaller;
-  PDRIVER_OBJECT  DriverObject;
-} NDIS_GENERIC_OBJECT, *PNDIS_GENERIC_OBJECT;
-
 /*
  * PNDIS_PACKET
  * NDIS_GET_ORIGINAL_PACKET(
@@ -891,6 +1280,20 @@ typedef struct _NDIS_GENERIC_OBJECT {
 #define NDIS_SET_PACKET_CANCEL_ID(Packet, CancelId) \
   NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, PacketCancelId) = (CancelId)
 
+#define NdisSetPacketCancelId(_Packet, _CancelId) NDIS_SET_PACKET_CANCEL_ID(_Packet, _CancelId)
+#define NdisGetPacketCancelId(_Packet) NDIS_GET_PACKET_CANCEL_ID(_Packet)
+
+#endif /* NDIS_LEGACY_DRIVER */
+
+#if NDIS_SUPPORT_NDIS6
+typedef struct _NDIS_GENERIC_OBJECT {
+  NDIS_OBJECT_HEADER Header;
+  PVOID Caller;
+  PVOID CallersCaller;
+  PDRIVER_OBJECT DriverObject;
+} NDIS_GENERIC_OBJECT, *PNDIS_GENERIC_OBJECT;
+#endif
+
 typedef enum _NDIS_TASK {
   TcpIpChecksumNdisTask,
   IpSecNdisTask,
@@ -927,18 +1330,6 @@ typedef struct _NDIS_TASK_IPSEC {
   } V4ESP;
 } NDIS_TASK_IPSEC, *PNDIS_TASK_IPSEC;
 
-typedef struct _NDIS_TASK_OFFLOAD {
-  ULONG  Version;
-  ULONG  Size;
-  NDIS_TASK  Task;
-  ULONG  OffsetNextTask;
-  ULONG  TaskBufferLength;
-  UCHAR  TaskBuffer[1];
-} NDIS_TASK_OFFLOAD, *PNDIS_TASK_OFFLOAD;
-
-/* NDIS_TASK_OFFLOAD_HEADER.Version constants */
-#define NDIS_TASK_OFFLOAD_VERSION 1
-
 typedef enum _NDIS_ENCAPSULATION {
   UNSPECIFIED_Encapsulation,
   NULL_Encapsulation,
@@ -957,15 +1348,26 @@ typedef struct _NDIS_ENCAPSULATION_FORMAT {
   ULONG  EncapsulationHeaderSize;
 } NDIS_ENCAPSULATION_FORMAT, *PNDIS_ENCAPSULATION_FORMAT;
 
-typedef struct _NDIS_TASK_OFFLOAD_HEADER
-{
-    ULONG       Version;
-    ULONG       Size;
-    ULONG       Reserved;
-    ULONG       OffsetFirstTask;
-    NDIS_ENCAPSULATION_FORMAT  EncapsulationFormat;
+typedef struct _NDIS_TASK_OFFLOAD_HEADER {
+  ULONG Version;
+  ULONG Size;
+  ULONG Reserved;
+  ULONG OffsetFirstTask;
+  NDIS_ENCAPSULATION_FORMAT  EncapsulationFormat;
 } NDIS_TASK_OFFLOAD_HEADER, *PNDIS_TASK_OFFLOAD_HEADER;
 
+typedef struct _NDIS_TASK_OFFLOAD {
+  ULONG Version;
+  ULONG Size;
+  NDIS_TASK Task;
+  ULONG OffsetNextTask;
+  ULONG TaskBufferLength;
+  UCHAR TaskBuffer[1];
+} NDIS_TASK_OFFLOAD, *PNDIS_TASK_OFFLOAD;
+
+/* NDIS_TASK_OFFLOAD_HEADER.Version constants */
+#define NDIS_TASK_OFFLOAD_VERSION 1
+
 typedef struct _NDIS_TASK_TCP_IP_CHECKSUM {
   struct {
     ULONG  IpOptionsSupported:1;
@@ -1007,129 +1409,145 @@ typedef struct _NDIS_TASK_TCP_LARGE_SEND {
 } NDIS_TASK_TCP_LARGE_SEND, *PNDIS_TASK_TCP_LARGE_SEND;
 
 typedef struct _NDIS_TCP_IP_CHECKSUM_PACKET_INFO {
-  _ANONYMOUS_UNION union {
+  __MINGW_EXTENSION union {
     struct {
-      ULONG  NdisPacketChecksumV4 : 1;
-      ULONG  NdisPacketChecksumV6 : 1;
-      ULONG  NdisPacketTcpChecksum : 1;
-      ULONG  NdisPacketUdpChecksum : 1;
-      ULONG  NdisPacketIpChecksum : 1;
+      ULONG NdisPacketChecksumV4:1;
+      ULONG NdisPacketChecksumV6:1;
+      ULONG NdisPacketTcpChecksum:1;
+      ULONG NdisPacketUdpChecksum:1;
+      ULONG NdisPacketIpChecksum:1;
       } Transmit;
-
     struct {
-      ULONG  NdisPacketTcpChecksumFailed : 1;
-      ULONG  NdisPacketUdpChecksumFailed : 1;
-      ULONG  NdisPacketIpChecksumFailed : 1;
-      ULONG  NdisPacketTcpChecksumSucceeded : 1;
-      ULONG  NdisPacketUdpChecksumSucceeded : 1;
-      ULONG  NdisPacketIpChecksumSucceeded : 1;
-      ULONG  NdisPacketLoopback : 1;
+      ULONG NdisPacketTcpChecksumFailed:1;
+      ULONG NdisPacketUdpChecksumFailed:1;
+      ULONG NdisPacketIpChecksumFailed:1;
+      ULONG NdisPacketTcpChecksumSucceeded:1;
+      ULONG NdisPacketUdpChecksumSucceeded:1;
+      ULONG NdisPacketIpChecksumSucceeded:1;
+      ULONG NdisPacketLoopback:1;
     } Receive;
-    ULONG  Value;
-  } DUMMYUNIONNAME;
+    ULONG Value;
+  };
 } NDIS_TCP_IP_CHECKSUM_PACKET_INFO, *PNDIS_TCP_IP_CHECKSUM_PACKET_INFO;
 
 typedef struct _NDIS_WAN_CO_FRAGMENT {
-  ULONG  Errors;
+  ULONG Errors;
 } NDIS_WAN_CO_FRAGMENT, *PNDIS_WAN_CO_FRAGMENT;
 
 typedef struct _NDIS_WAN_FRAGMENT {
-  UCHAR  RemoteAddress[6];
-  UCHAR  LocalAddress[6];
+  UCHAR RemoteAddress[6];
+  UCHAR LocalAddress[6];
 } NDIS_WAN_FRAGMENT, *PNDIS_WAN_FRAGMENT;
 
 typedef struct _WAN_CO_LINKPARAMS {
-  ULONG  TransmitSpeed;
-  ULONG  ReceiveSpeed;
-  ULONG  SendWindow;
+  ULONG TransmitSpeed;
+  ULONG ReceiveSpeed;
+  ULONG SendWindow;
 } WAN_CO_LINKPARAMS, *PWAN_CO_LINKPARAMS;
 
+typedef struct _NDIS_WAN_GET_STATS {
+  UCHAR LocalAddress[6];
+  ULONG BytesSent;
+  ULONG BytesRcvd;
+  ULONG FramesSent;
+  ULONG FramesRcvd;
+  ULONG CRCErrors;
+  ULONG TimeoutErrors;
+  ULONG AlignmentErrors;
+  ULONG SerialOverrunErrors;
+  ULONG FramingErrors;
+  ULONG BufferOverrunErrors;
+  ULONG BytesTransmittedUncompressed;
+  ULONG BytesReceivedUncompressed;
+  ULONG BytesTransmittedCompressed;
+  ULONG BytesReceivedCompressed;
+} NDIS_WAN_GET_STATS, *PNDIS_WAN_GET_STATS;
 
 /* Call Manager */
 
 typedef VOID
-(DDKAPI *CM_ACTIVATE_VC_COMPLETE_HANDLER)(
+(NTAPI *CM_ACTIVATE_VC_COMPLETE_HANDLER)(
   IN NDIS_STATUS  Status,
   IN NDIS_HANDLE  CallMgrVcContext,
   IN PCO_CALL_PARAMETERS  CallParameters);
 
 typedef NDIS_STATUS
-(DDKAPI *CM_ADD_PARTY_HANDLER)(
+(NTAPI *CM_ADD_PARTY_HANDLER)(
   IN NDIS_HANDLE  CallMgrVcContext,
   IN OUT PCO_CALL_PARAMETERS  CallParameters,
   IN NDIS_HANDLE  NdisPartyHandle,
   OUT PNDIS_HANDLE  CallMgrPartyContext);
 
 typedef NDIS_STATUS
-(DDKAPI *CM_CLOSE_AF_HANDLER)(
+(NTAPI *CM_CLOSE_AF_HANDLER)(
   IN NDIS_HANDLE  CallMgrAfContext);
 
 typedef NDIS_STATUS
-(DDKAPI *CM_CLOSE_CALL_HANDLER)(
+(NTAPI *CM_CLOSE_CALL_HANDLER)(
   IN NDIS_HANDLE  CallMgrVcContext,
   IN NDIS_HANDLE  CallMgrPartyContext  OPTIONAL,
   IN PVOID  CloseData  OPTIONAL,
   IN UINT  Size  OPTIONAL);
 
 typedef NDIS_STATUS
-(DDKAPI *CM_DEREG_SAP_HANDLER)(
+(NTAPI *CM_DEREG_SAP_HANDLER)(
   IN NDIS_HANDLE  CallMgrSapContext);
 
 typedef VOID
-(DDKAPI *CM_DEACTIVATE_VC_COMPLETE_HANDLER)(
+(NTAPI *CM_DEACTIVATE_VC_COMPLETE_HANDLER)(
        IN NDIS_STATUS  Status,
        IN NDIS_HANDLE  CallMgrVcContext);
 
 typedef NDIS_STATUS
-(DDKAPI *CM_DROP_PARTY_HANDLER)(
+(NTAPI *CM_DROP_PARTY_HANDLER)(
   IN NDIS_HANDLE  CallMgrPartyContext,
   IN PVOID  CloseData  OPTIONAL,
   IN UINT  Size  OPTIONAL);
 
 typedef VOID
-(DDKAPI *CM_INCOMING_CALL_COMPLETE_HANDLER)(
+(NTAPI *CM_INCOMING_CALL_COMPLETE_HANDLER)(
   IN NDIS_STATUS  Status,
   IN NDIS_HANDLE  CallMgrVcContext,
   IN PCO_CALL_PARAMETERS  CallParameters);
 
 typedef NDIS_STATUS
-(DDKAPI *CM_MAKE_CALL_HANDLER)(
+(NTAPI *CM_MAKE_CALL_HANDLER)(
   IN NDIS_HANDLE  CallMgrVcContext,
   IN OUT PCO_CALL_PARAMETERS  CallParameters,
   IN NDIS_HANDLE  NdisPartyHandle      OPTIONAL,
   OUT PNDIS_HANDLE  CallMgrPartyContext  OPTIONAL);
 
 typedef NDIS_STATUS
-(DDKAPI *CM_MODIFY_CALL_QOS_HANDLER)(
+(NTAPI *CM_MODIFY_CALL_QOS_HANDLER)(
   IN NDIS_HANDLE  CallMgrVcContext,
   IN PCO_CALL_PARAMETERS  CallParameters);
 
 typedef NDIS_STATUS
-(DDKAPI *CM_OPEN_AF_HANDLER)(
+(NTAPI *CM_OPEN_AF_HANDLER)(
        IN NDIS_HANDLE  CallMgrBindingContext,
        IN PCO_ADDRESS_FAMILY  AddressFamily,
        IN NDIS_HANDLE  NdisAfHandle,
        OUT PNDIS_HANDLE  CallMgrAfContext);
 
 typedef NDIS_STATUS
-(DDKAPI *CM_REG_SAP_HANDLER)(
+(NTAPI *CM_REG_SAP_HANDLER)(
   IN NDIS_HANDLE  CallMgrAfContext,
   IN PCO_SAP  Sap,
   IN NDIS_HANDLE  NdisSapHandle,
   OUT  PNDIS_HANDLE  CallMgrSapContext);
 
 typedef NDIS_STATUS
-(DDKAPI *CO_CREATE_VC_HANDLER)(
+(NTAPI *CO_CREATE_VC_HANDLER)(
   IN NDIS_HANDLE  ProtocolAfContext,
   IN NDIS_HANDLE  NdisVcHandle,
   OUT PNDIS_HANDLE  ProtocolVcContext);
 
 typedef NDIS_STATUS
-(DDKAPI *CO_DELETE_VC_HANDLER)(
+(NTAPI *CO_DELETE_VC_HANDLER)(
   IN NDIS_HANDLE  ProtocolVcContext);
 
 typedef VOID
-(DDKAPI *CO_REQUEST_COMPLETE_HANDLER)(
+(NTAPI *CO_REQUEST_COMPLETE_HANDLER)(
   IN NDIS_STATUS  Status,
   IN NDIS_HANDLE  ProtocolAfContext  OPTIONAL,
   IN NDIS_HANDLE  ProtocolVcContext  OPTIONAL,
@@ -1137,7 +1555,7 @@ typedef VOID
   IN PNDIS_REQUEST  NdisRequest);
 
 typedef NDIS_STATUS
-(DDKAPI *CO_REQUEST_HANDLER)(
+(NTAPI *CO_REQUEST_HANDLER)(
   IN NDIS_HANDLE  ProtocolAfContext,
   IN NDIS_HANDLE  ProtocolVcContext  OPTIONAL,
   IN NDIS_HANDLE       ProtocolPartyContext  OPTIONAL,
@@ -1176,80 +1594,80 @@ typedef VOID (*CL_OPEN_AF_COMPLETE_HANDLER)(
   IN NDIS_HANDLE NdisAfHandle);
 
 typedef VOID
-(DDKAPI *CL_CLOSE_AF_COMPLETE_HANDLER)(
+(NTAPI *CL_CLOSE_AF_COMPLETE_HANDLER)(
   IN NDIS_STATUS  Status,
   IN NDIS_HANDLE  ProtocolAfContext);
 
 typedef VOID
-(DDKAPI *CL_REG_SAP_COMPLETE_HANDLER)(
+(NTAPI *CL_REG_SAP_COMPLETE_HANDLER)(
   IN NDIS_STATUS  Status,
   IN NDIS_HANDLE  ProtocolSapContext,
   IN PCO_SAP  Sap,
   IN NDIS_HANDLE  NdisSapHandle);
 
 typedef VOID
-(DDKAPI *CL_DEREG_SAP_COMPLETE_HANDLER)(
+(NTAPI *CL_DEREG_SAP_COMPLETE_HANDLER)(
   IN NDIS_STATUS  Status,
   IN NDIS_HANDLE  ProtocolSapContext);
 
 typedef VOID
-(DDKAPI *CL_MAKE_CALL_COMPLETE_HANDLER)(
+(NTAPI *CL_MAKE_CALL_COMPLETE_HANDLER)(
   IN NDIS_STATUS  Status,
   IN NDIS_HANDLE  ProtocolVcContext,
   IN NDIS_HANDLE  NdisPartyHandle  OPTIONAL,
   IN PCO_CALL_PARAMETERS  CallParameters);
 
 typedef VOID
-(DDKAPI *CL_MODIFY_CALL_QOS_COMPLETE_HANDLER)(
+(NTAPI *CL_MODIFY_CALL_QOS_COMPLETE_HANDLER)(
   IN NDIS_STATUS  Status,
   IN NDIS_HANDLE  ProtocolVcContext,
   IN PCO_CALL_PARAMETERS  CallParameters);
 
 typedef VOID
-(DDKAPI *CL_CLOSE_CALL_COMPLETE_HANDLER)(
+(NTAPI *CL_CLOSE_CALL_COMPLETE_HANDLER)(
   IN NDIS_STATUS  Status,
   IN NDIS_HANDLE  ProtocolVcContext,
   IN NDIS_HANDLE  ProtocolPartyContext  OPTIONAL);
 
 typedef VOID
-(DDKAPI *CL_ADD_PARTY_COMPLETE_HANDLER)(
+(NTAPI *CL_ADD_PARTY_COMPLETE_HANDLER)(
   IN NDIS_STATUS  Status,
   IN NDIS_HANDLE  ProtocolPartyContext,
   IN NDIS_HANDLE  NdisPartyHandle,
   IN PCO_CALL_PARAMETERS  CallParameters);
 
 typedef VOID
-(DDKAPI *CL_DROP_PARTY_COMPLETE_HANDLER)(
+(NTAPI *CL_DROP_PARTY_COMPLETE_HANDLER)(
   IN NDIS_STATUS  Status,
   IN NDIS_HANDLE  ProtocolPartyContext);
 
 typedef NDIS_STATUS
-(DDKAPI *CL_INCOMING_CALL_HANDLER)(
+(NTAPI *CL_INCOMING_CALL_HANDLER)(
   IN NDIS_HANDLE  ProtocolSapContext,
   IN NDIS_HANDLE  ProtocolVcContext,
   IN OUT PCO_CALL_PARAMETERS  CallParameters);
 
 typedef VOID
-(DDKAPI *CL_INCOMING_CALL_QOS_CHANGE_HANDLER)(
+(NTAPI *CL_INCOMING_CALL_QOS_CHANGE_HANDLER)(
   IN NDIS_HANDLE  ProtocolVcContext,
   IN PCO_CALL_PARAMETERS  CallParameters);
 
 typedef VOID
-(DDKAPI *CL_INCOMING_CLOSE_CALL_HANDLER)(
+(NTAPI *CL_INCOMING_CLOSE_CALL_HANDLER)(
   IN NDIS_STATUS  CloseStatus,
   IN NDIS_HANDLE  ProtocolVcContext,
   IN PVOID  CloseData  OPTIONAL,
   IN UINT  Size  OPTIONAL);
 
 typedef VOID
-(DDKAPI *CL_INCOMING_DROP_PARTY_HANDLER)(
+(NTAPI *CL_INCOMING_DROP_PARTY_HANDLER)(
   IN NDIS_STATUS  DropStatus,
   IN NDIS_HANDLE  ProtocolPartyContext,
   IN PVOID  CloseData  OPTIONAL,
   IN UINT  Size  OPTIONAL);
 
 typedef VOID
-(DDKAPI *CL_CALL_CONNECTED_HANDLER)(
+(NTAPI *CL_CALL_CONNECTED_HANDLER)(
   IN NDIS_HANDLE  ProtocolVcContext);
 
 
@@ -1284,64 +1702,64 @@ typedef struct _NDIS_CLIENT_CHARACTERISTICS {
 /* Prototypes for NDIS 3.0 protocol characteristics */
 
 typedef VOID
-(DDKAPI *OPEN_ADAPTER_COMPLETE_HANDLER)(
+(NTAPI *OPEN_ADAPTER_COMPLETE_HANDLER)(
   IN NDIS_HANDLE  ProtocolBindingContext,
   IN NDIS_STATUS  Status,
   IN NDIS_STATUS  OpenErrorStatus);
 
 typedef VOID
-(DDKAPI *CLOSE_ADAPTER_COMPLETE_HANDLER)(
+(NTAPI *CLOSE_ADAPTER_COMPLETE_HANDLER)(
   IN NDIS_HANDLE  ProtocolBindingContext,
   IN NDIS_STATUS  Status);
 
 typedef VOID
-(DDKAPI *RESET_COMPLETE_HANDLER)(
+(NTAPI *RESET_COMPLETE_HANDLER)(
   IN NDIS_HANDLE  ProtocolBindingContext,
   IN NDIS_STATUS  Status);
 
 typedef VOID
-(DDKAPI *REQUEST_COMPLETE_HANDLER)(
+(NTAPI *REQUEST_COMPLETE_HANDLER)(
   IN NDIS_HANDLE  ProtocolBindingContext,
   IN PNDIS_REQUEST  NdisRequest,
   IN NDIS_STATUS  Status);
 
 typedef VOID
-(DDKAPI *STATUS_HANDLER)(
+(NTAPI *STATUS_HANDLER)(
   IN NDIS_HANDLE  ProtocolBindingContext,
   IN NDIS_STATUS  GeneralStatus,
   IN PVOID  StatusBuffer,
   IN UINT  StatusBufferSize);
 
 typedef VOID
-(DDKAPI *STATUS_COMPLETE_HANDLER)(
+(NTAPI *STATUS_COMPLETE_HANDLER)(
   IN NDIS_HANDLE  ProtocolBindingContext);
 
 typedef VOID
-(DDKAPI *SEND_COMPLETE_HANDLER)(
+(NTAPI *SEND_COMPLETE_HANDLER)(
   IN NDIS_HANDLE  ProtocolBindingContext,
   IN PNDIS_PACKET  Packet,
   IN NDIS_STATUS  Status);
 
 typedef VOID
-(DDKAPI *WAN_SEND_COMPLETE_HANDLER)(
+(NTAPI *WAN_SEND_COMPLETE_HANDLER)(
   IN NDIS_HANDLE  ProtocolBindingContext,
   IN PNDIS_WAN_PACKET  Packet,
   IN NDIS_STATUS  Status);
 
 typedef VOID
-(DDKAPI *TRANSFER_DATA_COMPLETE_HANDLER)(
+(NTAPI *TRANSFER_DATA_COMPLETE_HANDLER)(
   IN NDIS_HANDLE  ProtocolBindingContext,
   IN PNDIS_PACKET  Packet,
   IN NDIS_STATUS  Status,
   IN UINT  BytesTransferred);
 
 typedef VOID
-(DDKAPI *WAN_TRANSFER_DATA_COMPLETE_HANDLER)(
+(NTAPI *WAN_TRANSFER_DATA_COMPLETE_HANDLER)(
     VOID);
 
 
 typedef NDIS_STATUS
-(DDKAPI *RECEIVE_HANDLER)(
+(NTAPI *RECEIVE_HANDLER)(
   IN NDIS_HANDLE  ProtocolBindingContext,
   IN NDIS_HANDLE  MacReceiveContext,
   IN PVOID  HeaderBuffer,
@@ -1351,13 +1769,13 @@ typedef NDIS_STATUS
   IN UINT  PacketSize);
 
 typedef NDIS_STATUS
-(DDKAPI *WAN_RECEIVE_HANDLER)(
+(NTAPI *WAN_RECEIVE_HANDLER)(
   IN NDIS_HANDLE  NdisLinkHandle,
   IN PUCHAR  Packet,
   IN ULONG  PacketSize);
 
 typedef VOID
-(DDKAPI *RECEIVE_COMPLETE_HANDLER)(
+(NTAPI *RECEIVE_COMPLETE_HANDLER)(
   IN NDIS_HANDLE  ProtocolBindingContext);
 
 
@@ -1400,12 +1818,12 @@ typedef struct _NDIS30_PROTOCOL_CHARACTERISTICS {
 /* Prototypes for NDIS 4.0 protocol characteristics */
 
 typedef INT
-(DDKAPI *RECEIVE_PACKET_HANDLER)(
+(NTAPI *RECEIVE_PACKET_HANDLER)(
   IN NDIS_HANDLE  ProtocolBindingContext,
   IN PNDIS_PACKET  Packet);
 
 typedef VOID
-(DDKAPI *BIND_HANDLER)(
+(NTAPI *BIND_HANDLER)(
   OUT PNDIS_STATUS  Status,
   IN NDIS_HANDLE  BindContext,
   IN PNDIS_STRING  DeviceName,
@@ -1413,18 +1831,18 @@ typedef VOID
   IN PVOID  SystemSpecific2);
 
 typedef VOID
-(DDKAPI *UNBIND_HANDLER)(
+(NTAPI *UNBIND_HANDLER)(
   OUT PNDIS_STATUS  Status,
   IN NDIS_HANDLE  ProtocolBindingContext,
   IN NDIS_HANDLE  UnbindContext);
 
 typedef NDIS_STATUS
-(DDKAPI *PNP_EVENT_HANDLER)(
+(NTAPI *PNP_EVENT_HANDLER)(
   IN NDIS_HANDLE  ProtocolBindingContext,
   IN PNET_PNP_EVENT  NetPnPEvent);
 
 typedef VOID
-(DDKAPI *UNLOAD_PROTOCOL_HANDLER)(
+(NTAPI *UNLOAD_PROTOCOL_HANDLER)(
   VOID);
 
 
@@ -1459,13 +1877,13 @@ typedef struct _NDIS40_PROTOCOL_CHARACTERISTICS {
 /* Prototypes for NDIS 5.0 protocol characteristics */
 
 typedef VOID
-(DDKAPI *CO_SEND_COMPLETE_HANDLER)(
+(NTAPI *CO_SEND_COMPLETE_HANDLER)(
   IN NDIS_STATUS  Status,
   IN NDIS_HANDLE  ProtocolVcContext,
   IN PNDIS_PACKET  Packet);
 
 typedef VOID
-(DDKAPI *CO_STATUS_HANDLER)(
+(NTAPI *CO_STATUS_HANDLER)(
        IN NDIS_HANDLE  ProtocolBindingContext,
        IN NDIS_HANDLE  ProtocolVcContext  OPTIONAL,
        IN NDIS_STATUS  GeneralStatus,
@@ -1473,13 +1891,13 @@ typedef VOID
        IN UINT  StatusBufferSize);
 
 typedef UINT
-(DDKAPI *CO_RECEIVE_PACKET_HANDLER)(
+(NTAPI *CO_RECEIVE_PACKET_HANDLER)(
   IN NDIS_HANDLE  ProtocolBindingContext,
   IN NDIS_HANDLE  ProtocolVcContext,
   IN PNDIS_PACKET  Packet);
 
 typedef VOID
-(DDKAPI *CO_AF_REGISTER_NOTIFY_HANDLER)(
+(NTAPI *CO_AF_REGISTER_NOTIFY_HANDLER)(
   IN NDIS_HANDLE  ProtocolBindingContext,
   IN PCO_ADDRESS_FAMILY  AddressFamily);
 
@@ -1529,7 +1947,7 @@ typedef struct _NDIS_PROTOCOL_CHARACTERISTICS {
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisAllocateBuffer(
   OUT PNDIS_STATUS  Status,
   OUT PNDIS_BUFFER  *Buffer,
@@ -1540,7 +1958,7 @@ NdisAllocateBuffer(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisAllocateBufferPool(
   OUT PNDIS_STATUS  Status,
   OUT PNDIS_HANDLE  PoolHandle,
@@ -1548,7 +1966,7 @@ NdisAllocateBufferPool(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisAllocatePacket(
   OUT PNDIS_STATUS  Status,
   OUT PNDIS_PACKET  *Packet,
@@ -1556,16 +1974,18 @@ NdisAllocatePacket(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisAllocatePacketPool(
   OUT PNDIS_STATUS  Status,
   OUT PNDIS_HANDLE  PoolHandle,
   IN UINT  NumberOfDescriptors,
   IN UINT  ProtocolReservedLength);
 
+#define PROTOCOL_RESERVED_SIZE_IN_PACKET (4 * sizeof(PVOID))
+
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisCopyBuffer(
   OUT PNDIS_STATUS  Status,
   OUT PNDIS_BUFFER  *Buffer,
@@ -1576,7 +1996,7 @@ NdisCopyBuffer(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisCopyFromPacketToPacket(
   IN PNDIS_PACKET  Destination,
   IN UINT  DestinationOffset,
@@ -1617,7 +2037,7 @@ NdisCopyFromPacketToPacket(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisDprAllocatePacket(
   OUT PNDIS_STATUS  Status,
   OUT PNDIS_PACKET  *Packet,
@@ -1625,7 +2045,7 @@ NdisDprAllocatePacket(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisDprAllocatePacketNonInterlocked(
   OUT PNDIS_STATUS  Status,
   OUT PNDIS_PACKET  *Packet,
@@ -1633,96 +2053,96 @@ NdisDprAllocatePacketNonInterlocked(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisDprFreePacket(
   IN PNDIS_PACKET  Packet);
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisDprFreePacketNonInterlocked(
   IN PNDIS_PACKET  Packet);
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisFreeBufferPool(
   IN NDIS_HANDLE  PoolHandle);
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisFreePacket(
   IN PNDIS_PACKET  Packet);
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisFreePacketPool(
   IN NDIS_HANDLE  PoolHandle);
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisReturnPackets(
   IN PNDIS_PACKET  *PacketsToReturn,
   IN UINT  NumberOfPackets);
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisUnchainBufferAtBack(
   IN OUT PNDIS_PACKET  Packet,
   OUT PNDIS_BUFFER  *Buffer);
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisUnchainBufferAtFront(
   IN OUT PNDIS_PACKET  Packet,
   OUT PNDIS_BUFFER  *Buffer);
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisAdjustBufferLength(
   IN PNDIS_BUFFER  Buffer,
   IN UINT  Length);
 
 NDISAPI
 ULONG
-DDKAPI
+NTAPI
 NdisBufferLength(
   IN PNDIS_BUFFER  Buffer);
 
 NDISAPI
 PVOID
-DDKAPI
+NTAPI
 NdisBufferVirtualAddress(
   IN PNDIS_BUFFER  Buffer);
 
 NDISAPI
 ULONG
-DDKAPI
+NTAPI
 NDIS_BUFFER_TO_SPAN_PAGES(
   IN PNDIS_BUFFER  Buffer);
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisFreeBuffer(
   IN PNDIS_BUFFER  Buffer);
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisGetBufferPhysicalArraySize(
   IN PNDIS_BUFFER  Buffer,
   OUT PUINT  ArraySize);
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisGetFirstBufferFromPacket(
   IN PNDIS_PACKET  _Packet,
   OUT PNDIS_BUFFER  *_FirstBuffer,
@@ -1730,9 +2150,49 @@ NdisGetFirstBufferFromPacket(
   OUT PUINT  _FirstBufferLength,
   OUT PUINT  _TotalBufferLength);
 
+/*
+ * VOID
+ * NdisGetFirstBufferFromPacketSafe(
+ * IN PNDIS_PACKET  _Packet,
+ * OUT PNDIS_BUFFER  * _FirstBuffer,
+ * OUT PVOID  * _FirstBufferVA,
+ * OUT PUINT  _FirstBufferLength,
+ * OUT PUINT  _TotalBufferLength),
+ * IN MM_PAGE_PRIORITY _Priority)
+ */
+#define NdisGetFirstBufferFromPacketSafe(_Packet,         \
+                                     _FirstBuffer,        \
+                                     _FirstBufferVA,      \
+                                     _FirstBufferLength,  \
+                                     _TotalBufferLength,  \
+                                     _Priority)           \
+{                                                         \
+  PNDIS_BUFFER _Buffer;                                   \
+                                                          \
+  _Buffer         = (_Packet)->Private.Head;              \
+  *(_FirstBuffer) = _Buffer;                              \
+  if (_Buffer != NULL)                                    \
+    {                                                     \
+            *(_FirstBufferVA)     = MmGetSystemAddressForMdlSafe(_Buffer, _Priority);  \
+            *(_FirstBufferLength) = MmGetMdlByteCount(_Buffer);         \
+            _Buffer = _Buffer->Next;                                    \
+                  *(_TotalBufferLength) = *(_FirstBufferLength);              \
+                  while (_Buffer != NULL) {                                   \
+                    *(_TotalBufferLength) += MmGetMdlByteCount(_Buffer);      \
+                    _Buffer = _Buffer->Next;                                  \
+                  }                                                           \
+    }                             \
+  else                            \
+    {                             \
+      *(_FirstBufferVA) = 0;      \
+      *(_FirstBufferLength) = 0;  \
+      *(_TotalBufferLength) = 0;  \
+    } \
+}
+
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisQueryBuffer(
   IN PNDIS_BUFFER  Buffer,
   OUT PVOID  *VirtualAddress OPTIONAL,
@@ -1740,7 +2200,7 @@ NdisQueryBuffer(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisQueryBufferOffset(
   IN PNDIS_BUFFER  Buffer,
   OUT PUINT  Offset,
@@ -1815,6 +2275,11 @@ NdisQueryBufferOffset(
   *(NextBuffer) = (CurrentBuffer)->Next;  \
 }
 
+#if NDIS_LEGACY_DRIVER
+
+#define NDIS_PACKET_FIRST_NDIS_BUFFER(_Packet) ((_Packet)->Private.Head)
+#define NDIS_PACKET_LAST_NDIS_BUFFER(_Packet) ((_Packet)->Private.Tail)
+#define NDIS_PACKET_VALID_COUNTS(_Packet) ((_Packet)->Private.ValidCounts)
 
 /*
  * UINT
@@ -1823,23 +2288,74 @@ NdisQueryBufferOffset(
  */
 #define NdisGetPacketFlags(Packet)(Packet)->Private.Flags;
 
+/*
+ * ULONG
+ * NDIS_GET_PACKET_PROTOCOL_TYPE(
+ *   IN PNDIS_PACKET Packet);
+ */
+#define NDIS_GET_PACKET_PROTOCOL_TYPE(_Packet) \
+  ((_Packet)->Private.Flags & NDIS_PROTOCOL_ID_MASK)
 
 /*
- * VOID
- * NdisClearPacketFlags(
- *   IN PNDIS_PACKET  Packet,
- *   IN UINT  Flags);
+ * PNDIS_PACKET_OOB_DATA
+ * NDIS_OOB_DATA_FROM_PACKET(
+ *   IN PNDIS_PACKET Packet);
  */
-#define NdisClearPacketFlags(Packet, Flags) \
-  (Packet)->Private.Flags &= ~(Flags)
+#define NDIS_OOB_DATA_FROM_PACKET(_Packet)    \
+  (PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
+  (_Packet)->Private.NdisPacketOobOffset)
 
+/*
+ * ULONG
+ * NDIS_GET_PACKET_HEADER_SIZE(
+ *   IN PNDIS_PACKET Packet);
+ */
+#define NDIS_GET_PACKET_HEADER_SIZE(_Packet)   \
+  ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
+  (_Packet)->Private.NdisPacketOobOffset))->HeaderSize
+
+/*
+ * NDIS_STATUS
+ * NDIS_GET_PACKET_STATUS(
+ *   IN PNDIS_PACKET Packet);
+ */
+#define NDIS_GET_PACKET_STATUS(_Packet)        \
+  ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
+  (_Packet)->Private.NdisPacketOobOffset))->Status
+
+/*
+ * ULONGLONG
+ * NDIS_GET_PACKET_TIME_TO_SEND(
+ *   IN PNDIS_PACKET Packet);
+ */
+#define NDIS_GET_PACKET_TIME_TO_SEND(_Packet)   \
+  ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) +  \
+  (_Packet)->Private.NdisPacketOobOffset))->TimeToSend
+
+/*
+ * ULONGLONG
+ * NDIS_GET_PACKET_TIME_SENT(
+ *   IN PNDIS_PACKET Packet);
+ */
+#define NDIS_GET_PACKET_TIME_SENT(_Packet)      \
+  ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) +  \
+  (_Packet)->Private.NdisPacketOobOffset))->TimeSent
+
+/*
+ * ULONGLONG
+ * NDIS_GET_PACKET_TIME_RECEIVED(
+ *   IN PNDIS_PACKET Packet);
+ */
+#define NDIS_GET_PACKET_TIME_RECEIVED(_Packet)  \
+  ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) +  \
+  (_Packet)->Private.NdisPacketOobOffset))->TimeReceived
 
 /*
  * VOID
  * NDIS_GET_PACKET_MEDIA_SPECIFIC_INFO(
- *   IN PNDIS_PACKET    Packet,
- *   IN PPVOID          pMediaSpecificInfo,
- *   IN PUINT           pSizeMediaSpecificInfo);
+ *   IN PNDIS_PACKET Packet,
+ *   IN PPVOID pMediaSpecificInfo,
+ *   IN PUINT pSizeMediaSpecificInfo);
  */
 #define NDIS_GET_PACKET_MEDIA_SPECIFIC_INFO(_Packet,                                  \
                                             _pMediaSpecificInfo,                      \
@@ -1847,87 +2363,109 @@ NdisQueryBufferOffset(
 {                                                                                     \
   if (!((_Packet)->Private.NdisPacketFlags & fPACKET_ALLOCATED_BY_NDIS) ||            \
       !((_Packet)->Private.NdisPacketFlags & fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO))   \
-         {                                                                                 \
-           *(_pMediaSpecificInfo) = NULL;                                                  \
-           *(_pSizeMediaSpecificInfo) = 0;                                                 \
-         }                                                                                 \
+    {                                                                                 \
+      *(_pMediaSpecificInfo) = NULL;                                                  \
+      *(_pSizeMediaSpecificInfo) = 0;                                                 \
+    }                                                                                 \
   else                                                                                \
-         {                                                                                 \
-           *(_pMediaSpecificInfo) = ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) +           \
+    {                                                                                 \
+      *(_pMediaSpecificInfo) = ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) +           \
         (_Packet)->Private.NdisPacketOobOffset))->MediaSpecificInformation;           \
-           *(_pSizeMediaSpecificInfo) = ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) +       \
-             (_Packet)->Private.NdisPacketOobOffset))->SizeMediaSpecificInfo;              \
-         }                                                                                 \
+      *(_pSizeMediaSpecificInfo) = ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) +       \
+        (_Packet)->Private.NdisPacketOobOffset))->SizeMediaSpecificInfo;              \
+    }                                                                                 \
 }
 
-
 /*
- * ULONG
- * NDIS_GET_PACKET_PROTOCOL_TYPE(
- *   IN PNDIS_PACKET  Packet);
+ * VOID
+ * NDIS_SET_PACKET_HEADER_SIZE(
+ *   IN PNDIS_PACKET Packet,
+ *   IN UINT HdrSize);
  */
-#define NDIS_GET_PACKET_PROTOCOL_TYPE(_Packet) \
-  ((_Packet)->Private.Flags & NDIS_PROTOCOL_ID_MASK)
+#define NDIS_SET_PACKET_HEADER_SIZE(_Packet, _HdrSize)              \
+  ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) +                      \
+  (_Packet)->Private.NdisPacketOobOffset))->HeaderSize = (_HdrSize)
 
 /*
- * ULONG
- * NDIS_GET_PACKET_HEADER_SIZE(
- *   IN PNDIS_PACKET  Packet);
+ * VOID
+ * NDIS_SET_PACKET_STATUS(
+ *   IN PNDIS_PACKET Packet,
+ *   IN NDIS_STATUS Status);
  */
-#define NDIS_GET_PACKET_HEADER_SIZE(_Packet) \
-       ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
-       (_Packet)->Private.NdisPacketOobOffset))->HeaderSize
-
+#define NDIS_SET_PACKET_STATUS(_Packet, _Status)  \
+  ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) +    \
+  (_Packet)->Private.NdisPacketOobOffset))->Status = (_Status)
 
 /*
- * NDIS_STATUS
- * NDIS_GET_PACKET_STATUS(
- *   IN PNDIS_PACKET  Packet);
+ * VOID
+ * NDIS_SET_PACKET_TIME_TO_SEND(
+ *   IN PNDIS_PACKET Packet,
+ *   IN ULONGLONG TimeToSend);
  */
-#define NDIS_GET_PACKET_STATUS(_Packet) \
-       ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
-       (_Packet)->Private.NdisPacketOobOffset))->Status
-
+#define NDIS_SET_PACKET_TIME_TO_SEND(_Packet, _TimeToSend)  \
+  ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) +              \
+  (_Packet)->Private.NdisPacketOobOffset))->TimeToSend = (_TimeToSend)
 
 /*
- * ULONGLONG
- * NDIS_GET_PACKET_TIME_RECEIVED(
- *   IN PNDIS_PACKET  Packet);
+ * VOID
+ * NDIS_SET_PACKET_TIME_SENT(
+ *   IN PNDIS_PACKET Packet,
+ *   IN ULONGLONG TimeSent);
  */
-#define NDIS_GET_PACKET_TIME_RECEIVED(_Packet)  \
-       ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) +  \
-       (_Packet)->Private.NdisPacketOobOffset))->TimeReceived
-
+#define NDIS_SET_PACKET_TIME_SENT(_Packet, _TimeSent) \
+  ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) +        \
+  (_Packet)->Private.NdisPacketOobOffset))->TimeSent = (_TimeSent)
 
 /*
- * ULONGLONG
- * NDIS_GET_PACKET_TIME_SENT(
- *   IN PNDIS_PACKET  Packet);
+ * VOID
+ * NDIS_SET_PACKET_TIME_RECEIVED(
+ *   IN PNDIS_PACKET Packet,
+ *   IN ULONGLONG TimeReceived);
  */
-#define NDIS_GET_PACKET_TIME_SENT(_Packet)      \
-       ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) +  \
-       (_Packet)->Private.NdisPacketOobOffset))->TimeSent
-
+#define NDIS_SET_PACKET_TIME_RECEIVED(_Packet, _TimeReceived) \
+  ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) +                \
+  (_Packet)->Private.NdisPacketOobOffset))->TimeReceived = (_TimeReceived)
 
 /*
- * ULONGLONG
- * NDIS_GET_PACKET_TIME_TO_SEND(
- *   IN PNDIS_PACKET  Packet);
+ * VOID
+ * NDIS_SET_PACKET_MEDIA_SPECIFIC_INFO(
+ *   IN PNDIS_PACKET Packet,
+ *   IN PVOID MediaSpecificInfo,
+ *   IN UINT SizeMediaSpecificInfo);
  */
-#define NDIS_GET_PACKET_TIME_TO_SEND(_Packet)   \
-       ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) +  \
-       (_Packet)->Private.NdisPacketOobOffset))->TimeToSend
+#define NDIS_SET_PACKET_MEDIA_SPECIFIC_INFO(_Packet,                      \
+                                            _MediaSpecificInfo,           \
+                                            _SizeMediaSpecificInfo)       \
+{                                                                         \
+  if ((_Packet)->Private.NdisPacketFlags & fPACKET_ALLOCATED_BY_NDIS)     \
+    {                                                                     \
+      (_Packet)->Private.NdisPacketFlags |= fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO; \
+      ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) +                        \
+        (_Packet)->Private.NdisPacketOobOffset))->MediaSpecificInformation = \
+          (_MediaSpecificInfo);                                           \
+      ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) +                        \
+        (_Packet)->Private.NdisPacketOobOffset))->SizeMediaSpecificInfo = \
+          (_SizeMediaSpecificInfo);                                       \
+    }                                                                     \
+}
 
+/*
+ * VOID
+ * NdisSetPacketFlags(
+ *   IN PNDIS_PACKET  Packet,
+ *   IN UINT  Flags);
+ */
+#define NdisSetPacketFlags(Packet, Flags) (Packet)->Private.Flags |= (Flags)
 
 /*
- * PNDIS_PACKET_OOB_DATA
- * NDIS_OOB_DATA_FROM_PACKET(
- *   IN PNDIS_PACKET  Packet);
+ * VOID
+ * NdisClearPacketFlags(
+ *   IN PNDIS_PACKET  Packet,
+ *   IN UINT  Flags);
  */
-#define NDIS_OOB_DATA_FROM_PACKET(_Packet)    \
-  (PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
-  (_Packet)->Private.NdisPacketOobOffset)
+#define NdisClearPacketFlags(Packet, Flags) (Packet)->Private.Flags &= ~(Flags)
 
+#endif /* NDIS_LEGACY_DRIVER */
 
 /*
  * VOID
@@ -2001,34 +2539,10 @@ NdisQueryPacketLength(
     IN PNDIS_PACKET  Packet,
     OUT PUINT  TotalPacketLength  OPTIONAL)
 {
-  if ((TotalPacketLength))                                                \
-  {                                                                       \
-    if (!(Packet)->Private.ValidCounts) {                                 \
-      UINT _Offset;                                                       \
-      UINT _PacketLength;                                                 \
-      PNDIS_BUFFER _NdisBuffer;                                           \
-      UINT _PhysicalBufferCount = 0;                                      \
-      UINT _TotalPacketLength   = 0;                                      \
-      UINT _Count               = 0;                                      \
-                                                                          \
-      for (_NdisBuffer = (Packet)->Private.Head;                          \
-        _NdisBuffer != (PNDIS_BUFFER)NULL;                                \
-        _NdisBuffer = _NdisBuffer->Next)                                  \
-      {                                                                   \
-        _PhysicalBufferCount += NDIS_BUFFER_TO_SPAN_PAGES(_NdisBuffer);   \
-        NdisQueryBufferOffset(_NdisBuffer, &_Offset, &_PacketLength);     \
-        _TotalPacketLength += _PacketLength;                              \
-        _Count++;                                                         \
-      }                                                                   \
-      (Packet)->Private.PhysicalCount = _PhysicalBufferCount;             \
-      (Packet)->Private.TotalLength   = _TotalPacketLength;               \
-      (Packet)->Private.Count         = _Count;                           \
-      (Packet)->Private.ValidCounts   = TRUE;                             \
-  }                                                                       \
-                                                                          \
-  if (TotalPacketLength)                                                  \
-      *((PUINT)TotalPacketLength) = (Packet)->Private.TotalLength;        \
-  } \
+  if (!(Packet)->Private.ValidCounts)                                     \
+    NdisQueryPacket(Packet, NULL, NULL, NULL, TotalPacketLength);         \
+  else                                                                    \
+    *(TotalPacketLength) = (Packet)->Private.TotalLength;                 \
 }
 
 
@@ -2063,96 +2577,6 @@ NdisQueryPacketLength(
        (Packet)->Private.ValidCounts = FALSE;        \
 }
 
-
-/*
- * VOID
- * NdisSetPacketFlags(
- *   IN PNDIS_PACKET  Packet,
- *   IN UINT  Flags);
- */
-#define NdisSetPacketFlags(Packet, Flags) \
-  (Packet)->Private.Flags |= (Flags);
-
-
-/*
- * VOID
- * NDIS_SET_PACKET_HEADER_SIZE(
- *   IN PNDIS_PACKET  Packet,
- *   IN UINT  HdrSize);
- */
-#define NDIS_SET_PACKET_HEADER_SIZE(_Packet, _HdrSize)              \
-  ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) +                      \
-  (_Packet)->Private.NdisPacketOobOffset))->HeaderSize = (_HdrSize)
-
-
-/*
- * VOID
- * NDIS_SET_PACKET_MEDIA_SPECIFIC_INFO(
- *   IN PNDIS_PACKET  Packet,
- *   IN PVOID  MediaSpecificInfo,
- *   IN UINT  SizeMediaSpecificInfo);
- */
-#define NDIS_SET_PACKET_MEDIA_SPECIFIC_INFO(_Packet,                      \
-                                            _MediaSpecificInfo,           \
-                                            _SizeMediaSpecificInfo)       \
-{                                                                         \
-  if ((_Packet)->Private.NdisPacketFlags & fPACKET_ALLOCATED_BY_NDIS)     \
-         {                                                                     \
-      (_Packet)->Private.NdisPacketFlags |= fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO; \
-      ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) +                        \
-        (_Packet)->Private.NdisPacketOobOffset))->MediaSpecificInformation = \
-          (_MediaSpecificInfo);                                           \
-      ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) +                        \
-        (_Packet)->Private.NdisPacketOobOffset))->SizeMediaSpecificInfo = \
-          (_SizeMediaSpecificInfo);                                       \
-         }                                                                     \
-}
-
-
-/*
- * VOID
- * NDIS_SET_PACKET_STATUS(
- *   IN PNDIS_PACKET    Packet,
- *   IN NDIS_STATUS     Status);
- */
-#define NDIS_SET_PACKET_STATUS(_Packet, _Status)  \
-  ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) +    \
-  (_Packet)->Private.NdisPacketOobOffset))->Status = (_Status)
-
-
-/*
- * VOID
- * NDIS_SET_PACKET_TIME_RECEIVED(
- *   IN PNDIS_PACKET  Packet,
- *   IN ULONGLONG  TimeReceived);
- */
-#define NDIS_SET_PACKET_TIME_RECEIVED(_Packet, _TimeReceived) \
-  ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) +                \
-  (_Packet)->Private.NdisPacketOobOffset))->TimeReceived = (_TimeReceived)
-
-
-/*
- * VOID
- * NDIS_SET_PACKET_TIME_SENT(
- *   IN PNDIS_PACKET  Packet,
- *   IN ULONGLONG  TimeSent);
- */
-#define NDIS_SET_PACKET_TIME_SENT(_Packet, _TimeSent) \
-  ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) +        \
-  (_Packet)->Private.NdisPacketOobOffset))->TimeSent = (_TimeSent)
-
-
-/*
- * VOID
- * NDIS_SET_PACKET_TIME_TO_SEND(
- *   IN PNDIS_PACKET  Packet,
- *   IN ULONGLONG  TimeToSend);
- */
-#define NDIS_SET_PACKET_TIME_TO_SEND(_Packet, _TimeToSend)  \
-  ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) +              \
-  (_Packet)->Private.NdisPacketOobOffset))->TimeToSend = (_TimeToSend)
-
-
 /*
  * VOID
  * NdisSetSendFlags(
@@ -2167,7 +2591,7 @@ NdisQueryPacketLength(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisCreateLookaheadBufferFromSharedMemory(
   IN PVOID  pSharedMemory,
   IN UINT  LookaheadLength,
@@ -2175,7 +2599,7 @@ NdisCreateLookaheadBufferFromSharedMemory(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisDestroyLookaheadBufferFromSharedMemory(
   IN PVOID  pLookaheadBuffer);
 
@@ -2251,7 +2675,7 @@ NdisDestroyLookaheadBufferFromSharedMemory(
 
 NDISAPI
 NDIS_STATUS
-DDKAPI
+NTAPI
 NdisAllocateMemory(
   OUT  PVOID  *VirtualAddress,
   IN UINT  Length,
@@ -2260,7 +2684,7 @@ NdisAllocateMemory(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisFreeMemory(
   IN PVOID  VirtualAddress,
   IN UINT  Length,
@@ -2268,7 +2692,7 @@ NdisFreeMemory(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisImmediateReadSharedMemory(
   IN NDIS_HANDLE WrapperConfigurationContext,
   IN ULONG       SharedMemoryAddress,
@@ -2277,7 +2701,7 @@ NdisImmediateReadSharedMemory(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisImmediateWriteSharedMemory(
   IN NDIS_HANDLE WrapperConfigurationContext,
   IN ULONG       SharedMemoryAddress,
@@ -2286,7 +2710,7 @@ NdisImmediateWriteSharedMemory(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisMAllocateSharedMemory(
   IN   NDIS_HANDLE  MiniportAdapterHandle,
   IN   ULONG  Length,
@@ -2296,7 +2720,7 @@ NdisMAllocateSharedMemory(
 
 NDISAPI
 NDIS_STATUS
-DDKAPI
+NTAPI
 NdisMAllocateSharedMemoryAsync(
   IN NDIS_HANDLE  MiniportAdapterHandle,
   IN ULONG  Length,
@@ -2314,7 +2738,7 @@ NdisMAllocateSharedMemoryAsync(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisUpdateSharedMemory(
   IN NDIS_HANDLE             NdisAdapterHandle,
   IN ULONG                   Length,
@@ -2428,7 +2852,7 @@ NdisUpdateSharedMemory(
   RtlZeroMemory(Destination, Length)
 
 typedef VOID
-(DDKAPI *NDIS_BLOCK_INITIALIZER) (
+(NTAPI *NDIS_BLOCK_INITIALIZER) (
     IN  PUCHAR  Block,
     IN  SIZE_T  NumberOfBytes
     );
@@ -2437,7 +2861,7 @@ typedef VOID
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisOpenConfiguration(
   OUT  PNDIS_STATUS  Status,
   OUT  PNDIS_HANDLE  ConfigurationHandle,
@@ -2445,7 +2869,7 @@ NdisOpenConfiguration(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisReadNetworkAddress(
   OUT PNDIS_STATUS  Status,
   OUT PVOID  *NetworkAddress,
@@ -2454,7 +2878,7 @@ NdisReadNetworkAddress(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisReadEisaSlotInformation(
   OUT PNDIS_STATUS  Status,
   IN NDIS_HANDLE  WrapperConfigurationContext,
@@ -2463,7 +2887,7 @@ NdisReadEisaSlotInformation(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisReadEisaSlotInformationEx(
   OUT PNDIS_STATUS  Status,
   IN NDIS_HANDLE  WrapperConfigurationContext,
@@ -2473,7 +2897,7 @@ NdisReadEisaSlotInformationEx(
 
 NDISAPI
 ULONG
-DDKAPI
+NTAPI
 NdisReadPciSlotInformation(
   IN NDIS_HANDLE  NdisAdapterHandle,
   IN ULONG  SlotNumber,
@@ -2483,7 +2907,7 @@ NdisReadPciSlotInformation(
 
 NDISAPI
 ULONG
-DDKAPI
+NTAPI
 NdisWritePciSlotInformation(
   IN NDIS_HANDLE  NdisAdapterHandle,
   IN ULONG  SlotNumber,
@@ -2497,7 +2921,7 @@ NdisWritePciSlotInformation(
 
 NDISAPI
 NDIS_STATUS
-DDKAPI
+NTAPI
 NdisAnsiStringToUnicodeString(
   IN OUT PNDIS_STRING  DestinationString,
   IN PNDIS_ANSI_STRING  SourceString);
@@ -2514,21 +2938,21 @@ NdisAnsiStringToUnicodeString(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisInitAnsiString(
   IN OUT PNDIS_ANSI_STRING  DestinationString,
   IN PCSTR  SourceString);
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisInitUnicodeString(
   IN OUT PNDIS_STRING  DestinationString,
   IN PCWSTR  SourceString);
 
 NDISAPI
 NDIS_STATUS
-DDKAPI
+NTAPI
 NdisUnicodeStringToAnsiString(
   IN OUT PNDIS_ANSI_STRING  DestinationString,
   IN PNDIS_STRING  SourceString);
@@ -2539,41 +2963,59 @@ NdisUnicodeStringToAnsiString(
 
 /* Spin lock reoutines */
 
+/*
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisAllocateSpinLock(
-  IN PNDIS_SPIN_LOCK  SpinLock);
+  IN PNDIS_SPIN_LOCK SpinLock);
+*/
+#define NdisAllocateSpinLock(_SpinLock) KeInitializeSpinLock(&(_SpinLock)->SpinLock)
 
+/*
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisFreeSpinLock(
   IN PNDIS_SPIN_LOCK  SpinLock);
+*/
+#define NdisFreeSpinLock(_SpinLock)
 
+/*
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisAcquireSpinLock(
   IN PNDIS_SPIN_LOCK  SpinLock);
+*/
+#define NdisAcquireSpinLock(_SpinLock) KeAcquireSpinLock(&(_SpinLock)->SpinLock, &(_SpinLock)->OldIrql)
 
+/*
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisReleaseSpinLock(
   IN PNDIS_SPIN_LOCK  SpinLock);
+*/
+#define NdisReleaseSpinLock(_SpinLock) KeReleaseSpinLock(&(_SpinLock)->SpinLock,(_SpinLock)->OldIrql)
 
+/*
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisDprAcquireSpinLock(
   IN PNDIS_SPIN_LOCK  SpinLock);
+*/
+#define NdisDprAcquireSpinLock(_SpinLock) KeAcquireSpinLockAtDpcLevel(&(_SpinLock)->SpinLock)
 
+/*
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisDprReleaseSpinLock(
   IN PNDIS_SPIN_LOCK  SpinLock);
+*/
+#define NdisDprReleaseSpinLock(_SpinLock) KeReleaseSpinLockFromDpcLevel(&(_SpinLock)->SpinLock)
 
 /* I/O routines */
 
@@ -2802,7 +3244,11 @@ NdisDprReleaseSpinLock(
  */
 #define NdisQueryDepthSList(SListHead) ExQueryDepthSList(SListHead)
 
+#define NdisInterlockedPushEntryList(ListHead, ListEntry, Lock) \
+  ExInterlockedPushEntryList(ListHead, ListEntry, &(Lock)->SpinLock)
 
+#define NdisInterlockedPopEntryList(ListHead, Lock) \
+  ExInterlockedPopEntryList(ListHead, &(Lock)->SpinLock)
 
 /* Interlocked routines */
 
@@ -2836,13 +3282,13 @@ NdisDprReleaseSpinLock(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisCloseConfiguration(
   IN NDIS_HANDLE  ConfigurationHandle);
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisReadConfiguration(
   OUT  PNDIS_STATUS  Status,
   OUT  PNDIS_CONFIGURATION_PARAMETER  *ParameterValue,
@@ -2852,7 +3298,7 @@ NdisReadConfiguration(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisWriteConfiguration(
   OUT  PNDIS_STATUS  Status,
   IN NDIS_HANDLE  WrapperConfigurationContext,
@@ -2861,7 +3307,7 @@ NdisWriteConfiguration(
 
 NDISAPI
 VOID
-DDKCDECLAPI
+__cdecl
 NdisWriteErrorLogEntry(
        IN NDIS_HANDLE  NdisAdapterHandle,
        IN NDIS_ERROR_CODE  ErrorCode,
@@ -2875,20 +3321,23 @@ NdisWriteErrorLogEntry(
  */
 #define NdisStallExecution KeStallExecutionProcessor
 
+/*
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisGetCurrentSystemTime(
   IN PLARGE_INTEGER  pSystemTime);
+*/
+#define NdisGetCurrentSystemTime KeQuerySystemTime
 
 NDISAPI
 CCHAR
-DDKAPI
+NTAPI
 NdisSystemProcessorCount(VOID);
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisGetCurrentProcessorCpuUsage(
   OUT PULONG  pCpuUsage);
 
@@ -2917,7 +3366,7 @@ NdisGetCurrentProcessorCpuUsage(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisMFreeSharedMemory(
        IN NDIS_HANDLE  MiniportAdapterHandle,
        IN ULONG  Length,
@@ -2927,7 +3376,7 @@ NdisMFreeSharedMemory(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisMWanIndicateReceive(
        OUT PNDIS_STATUS  Status,
        IN NDIS_HANDLE  MiniportAdapterHandle,
@@ -2937,13 +3386,13 @@ NdisMWanIndicateReceive(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisMWanIndicateReceiveComplete(
   IN NDIS_HANDLE  MiniportAdapterHandle);
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisMWanSendComplete(
        IN NDIS_HANDLE  MiniportAdapterHandle,
        IN PNDIS_WAN_PACKET  Packet,
@@ -2951,7 +3400,7 @@ NdisMWanSendComplete(
 
 NDISAPI
 NDIS_STATUS
-DDKAPI
+NTAPI
 NdisPciAssignResources(
        IN NDIS_HANDLE  NdisMacHandle,
        IN NDIS_HANDLE  NdisWrapperHandle,
@@ -2964,7 +3413,7 @@ NdisPciAssignResources(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisAcquireReadWriteLock(
   IN PNDIS_RW_LOCK  Lock,
   IN BOOLEAN  fWrite,
@@ -2972,7 +3421,7 @@ NdisAcquireReadWriteLock(
 
 NDISAPI
 NDIS_STATUS
-DDKAPI
+NTAPI
 NdisAllocateMemoryWithTag(
   OUT PVOID  *VirtualAddress,
   IN UINT  Length,
@@ -2980,7 +3429,7 @@ NdisAllocateMemoryWithTag(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisAllocatePacketPoolEx(
   OUT PNDIS_STATUS  Status,
   OUT PNDIS_HANDLE  PoolHandle,
@@ -2990,7 +3439,14 @@ NdisAllocatePacketPoolEx(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
+NdisSetPacketPoolProtocolId(
+  IN NDIS_HANDLE PacketPoolHandle,
+  IN UINT ProtocolId);
+
+NDISAPI
+VOID
+NTAPI
 NdisCompletePnPEvent(
   IN NDIS_STATUS  Status,
   IN NDIS_HANDLE  NdisBindingHandle,
@@ -2998,7 +3454,7 @@ NdisCompletePnPEvent(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisGetCurrentProcessorCounts(
   OUT PULONG  pIdleCount,
   OUT PULONG  pKernelAndUser,
@@ -3006,39 +3462,39 @@ NdisGetCurrentProcessorCounts(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisGetDriverHandle(
   IN PNDIS_HANDLE  NdisBindingHandle,
   OUT PNDIS_HANDLE  NdisDriverHandle);
 
 NDISAPI
 PNDIS_PACKET
-DDKAPI
+NTAPI
 NdisGetReceivedPacket(
   IN PNDIS_HANDLE  NdisBindingHandle,
   IN PNDIS_HANDLE  MacContext);
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisGetSystemUpTime(
   OUT PULONG  pSystemUpTime);
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisInitializeReadWriteLock(
   IN PNDIS_RW_LOCK  Lock);
 
 NDISAPI
 NDIS_STATUS
-DDKAPI
+NTAPI
 NdisMDeregisterDevice(
   IN NDIS_HANDLE  NdisDeviceHandle);
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisMGetDeviceProperty(
   IN NDIS_HANDLE  MiniportAdapterHandle,
   IN OUT PDEVICE_OBJECT  *PhysicalDeviceObject  OPTIONAL,
@@ -3049,7 +3505,7 @@ NdisMGetDeviceProperty(
 
 NDISAPI
 NDIS_STATUS
-DDKAPI
+NTAPI
 NdisMInitializeScatterGatherDma(
   IN NDIS_HANDLE  MiniportAdapterHandle,
   IN BOOLEAN  Dma64BitAddresses,
@@ -3057,20 +3513,20 @@ NdisMInitializeScatterGatherDma(
 
 NDISAPI
 NDIS_STATUS
-DDKAPI
+NTAPI
 NdisMPromoteMiniport(
   IN NDIS_HANDLE  MiniportAdapterHandle);
 
 NDISAPI
 NDIS_STATUS
-DDKAPI
+NTAPI
 NdisMQueryAdapterInstanceName(
   OUT PNDIS_STRING  AdapterInstanceName,
   IN NDIS_HANDLE  MiniportAdapterHandle);
 
 NDISAPI
 NDIS_STATUS
-DDKAPI
+NTAPI
 NdisMRegisterDevice(
   IN NDIS_HANDLE  NdisWrapperHandle,
   IN PNDIS_STRING  DeviceName,
@@ -3081,27 +3537,27 @@ NdisMRegisterDevice(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisMRegisterUnloadHandler(
   IN NDIS_HANDLE  NdisWrapperHandle,
   IN PDRIVER_UNLOAD  UnloadHandler);
 
 NDISAPI
 NDIS_STATUS
-DDKAPI
+NTAPI
 NdisMRemoveMiniport(
   IN NDIS_HANDLE  MiniportAdapterHandle);
 
 NDISAPI
 NDIS_STATUS
-DDKAPI
+NTAPI
 NdisMSetMiniportSecondary(
   IN NDIS_HANDLE  MiniportAdapterHandle,
   IN NDIS_HANDLE  PrimaryMiniportAdapterHandle);
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisOpenConfigurationKeyByIndex(
   OUT PNDIS_STATUS  Status,
   IN NDIS_HANDLE  ConfigurationHandle,
@@ -3111,7 +3567,7 @@ NdisOpenConfigurationKeyByIndex(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisOpenConfigurationKeyByName(
   OUT PNDIS_STATUS  Status,
   IN NDIS_HANDLE  ConfigurationHandle,
@@ -3120,20 +3576,20 @@ NdisOpenConfigurationKeyByName(
 
 NDISAPI
 UINT
-DDKAPI
+NTAPI
 NdisPacketPoolUsage(
   IN NDIS_HANDLE  PoolHandle);
 
 NDISAPI
 NDIS_STATUS
-DDKAPI
+NTAPI
 NdisQueryAdapterInstanceName(
   OUT PNDIS_STRING  AdapterInstanceName,
   IN NDIS_HANDLE  NdisBindingHandle);
 
 NDISAPI
 ULONG
-DDKAPI
+NTAPI
 NdisReadPcmciaAttributeMemory(
   IN NDIS_HANDLE  NdisAdapterHandle,
   IN ULONG  Offset,
@@ -3142,14 +3598,14 @@ NdisReadPcmciaAttributeMemory(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisReleaseReadWriteLock(
   IN PNDIS_RW_LOCK  Lock,
   IN PLOCK_STATE  LockState);
 
 NDISAPI
 NDIS_STATUS
-DDKAPI
+NTAPI
 NdisWriteEventLogEntry(
   IN PVOID  LogHandle,
   IN NDIS_STATUS  EventCode,
@@ -3161,7 +3617,7 @@ NdisWriteEventLogEntry(
 
 NDISAPI
 ULONG
-DDKAPI
+NTAPI
 NdisWritePcmciaAttributeMemory(
   IN NDIS_HANDLE  NdisAdapterHandle,
   IN ULONG  Offset,
@@ -3173,7 +3629,7 @@ NdisWritePcmciaAttributeMemory(
 
 NDISAPI
 NDIS_STATUS
-DDKAPI
+NTAPI
 NdisClAddParty(
   IN NDIS_HANDLE  NdisVcHandle,
   IN NDIS_HANDLE  ProtocolPartyContext,
@@ -3182,13 +3638,13 @@ NdisClAddParty(
 
 NDISAPI
 NDIS_STATUS
-DDKAPI
+NTAPI
 NdisClCloseAddressFamily(
   IN NDIS_HANDLE  NdisAfHandle);
 
 NDISAPI
 NDIS_STATUS
-DDKAPI
+NTAPI
 NdisClCloseCall(
   IN NDIS_HANDLE NdisVcHandle,
   IN NDIS_HANDLE NdisPartyHandle  OPTIONAL,
@@ -3197,13 +3653,13 @@ NdisClCloseCall(
 
 NDISAPI
 NDIS_STATUS
-DDKAPI
+NTAPI
 NdisClDeregisterSap(
   IN NDIS_HANDLE  NdisSapHandle);
 
 NDISAPI
 NDIS_STATUS
-DDKAPI
+NTAPI
 NdisClDropParty(
   IN NDIS_HANDLE  NdisPartyHandle,
   IN PVOID  Buffer  OPTIONAL,
@@ -3211,7 +3667,7 @@ NdisClDropParty(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisClIncomingCallComplete(
   IN NDIS_STATUS  Status,
   IN NDIS_HANDLE  NdisVcHandle,
@@ -3219,7 +3675,7 @@ NdisClIncomingCallComplete(
 
 NDISAPI
 NDIS_STATUS
-DDKAPI
+NTAPI
 NdisClMakeCall(
   IN NDIS_HANDLE  NdisVcHandle,
   IN OUT PCO_CALL_PARAMETERS  CallParameters,
@@ -3228,7 +3684,7 @@ NdisClMakeCall(
 
 NDISAPI
 NDIS_STATUS
-DDKAPI
+NTAPI
 NdisClModifyCallQoS(
   IN NDIS_HANDLE  NdisVcHandle,
   IN PCO_CALL_PARAMETERS  CallParameters);
@@ -3236,7 +3692,7 @@ NdisClModifyCallQoS(
 
 NDISAPI
 NDIS_STATUS
-DDKAPI
+NTAPI
 NdisClOpenAddressFamily(
   IN NDIS_HANDLE  NdisBindingHandle,
   IN PCO_ADDRESS_FAMILY  AddressFamily,
@@ -3247,7 +3703,7 @@ NdisClOpenAddressFamily(
 
 NDISAPI
 NDIS_STATUS
-DDKAPI
+NTAPI
 NdisClRegisterSap(
   IN NDIS_HANDLE  NdisAfHandle,
   IN NDIS_HANDLE  ProtocolSapContext,
@@ -3259,14 +3715,14 @@ NdisClRegisterSap(
 
 NDISAPI
 NDIS_STATUS
-DDKAPI
+NTAPI
 NdisCmActivateVc(
   IN NDIS_HANDLE  NdisVcHandle,
   IN OUT PCO_CALL_PARAMETERS  CallParameters);
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisCmAddPartyComplete(
   IN NDIS_STATUS  Status,
   IN NDIS_HANDLE  NdisPartyHandle,
@@ -3275,14 +3731,14 @@ NdisCmAddPartyComplete(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisCmCloseAddressFamilyComplete(
   IN NDIS_STATUS Status,
   IN NDIS_HANDLE NdisAfHandle);
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisCmCloseCallComplete(
   IN NDIS_STATUS  Status,
   IN NDIS_HANDLE  NdisVcHandle,
@@ -3290,26 +3746,26 @@ NdisCmCloseCallComplete(
 
 NDISAPI
 NDIS_STATUS
-DDKAPI
+NTAPI
 NdisCmDeactivateVc(
   IN NDIS_HANDLE  NdisVcHandle);
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisCmDeregisterSapComplete(
   IN NDIS_STATUS  Status,
   IN NDIS_HANDLE  NdisSapHandle);
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisCmDispatchCallConnected(
   IN NDIS_HANDLE  NdisVcHandle);
 
 NDISAPI
 NDIS_STATUS
-DDKAPI
+NTAPI
 NdisCmDispatchIncomingCall(
   IN NDIS_HANDLE  NdisSapHandle,
   IN NDIS_HANDLE  NdisVcHandle,
@@ -3317,14 +3773,14 @@ NdisCmDispatchIncomingCall(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisCmDispatchIncomingCallQoSChange(
   IN NDIS_HANDLE  NdisVcHandle,
   IN PCO_CALL_PARAMETERS  CallParameters);
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisCmDispatchIncomingCloseCall(
   IN NDIS_STATUS  CloseStatus,
   IN NDIS_HANDLE  NdisVcHandle,
@@ -3333,7 +3789,7 @@ NdisCmDispatchIncomingCloseCall(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisCmDispatchIncomingDropParty(
   IN NDIS_STATUS  DropStatus,
   IN NDIS_HANDLE  NdisPartyHandle,
@@ -3342,14 +3798,14 @@ NdisCmDispatchIncomingDropParty(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisCmDropPartyComplete(
   IN NDIS_STATUS  Status,
   IN NDIS_HANDLE  NdisPartyHandle);
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisCmMakeCallComplete(
   IN NDIS_STATUS  Status,
   IN NDIS_HANDLE  NdisVcHandle,
@@ -3359,7 +3815,7 @@ NdisCmMakeCallComplete(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisCmModifyCallQoSComplete(
   IN NDIS_STATUS  Status,
   IN NDIS_HANDLE  NdisVcHandle,
@@ -3367,7 +3823,7 @@ NdisCmModifyCallQoSComplete(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisCmOpenAddressFamilyComplete(
   IN NDIS_STATUS Status,
   IN NDIS_HANDLE NdisAfHandle,
@@ -3375,7 +3831,7 @@ NdisCmOpenAddressFamilyComplete(
 
 NDISAPI
 NDIS_STATUS
-DDKAPI
+NTAPI
 NdisCmRegisterAddressFamily(
   IN NDIS_HANDLE  NdisBindingHandle,
   IN PCO_ADDRESS_FAMILY  AddressFamily,
@@ -3384,7 +3840,7 @@ NdisCmRegisterAddressFamily(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisCmRegisterSapComplete(
   IN NDIS_STATUS  Status,
   IN NDIS_HANDLE  NdisSapHandle,
@@ -3393,14 +3849,14 @@ NdisCmRegisterSapComplete(
 
 NDISAPI
 NDIS_STATUS
-DDKAPI
+NTAPI
 NdisMCmActivateVc(
   IN NDIS_HANDLE  NdisVcHandle,
   IN PCO_CALL_PARAMETERS  CallParameters);
 
 NDISAPI
 NDIS_STATUS
-DDKAPI
+NTAPI
 NdisMCmCreateVc(
   IN NDIS_HANDLE  MiniportAdapterHandle,
   IN NDIS_HANDLE  NdisAfHandle,
@@ -3409,19 +3865,19 @@ NdisMCmCreateVc(
 
 NDISAPI
 NDIS_STATUS
-DDKAPI
+NTAPI
 NdisMCmDeactivateVc(
   IN NDIS_HANDLE  NdisVcHandle);
 
 NDISAPI
 NDIS_STATUS
-DDKAPI
+NTAPI
 NdisMCmDeleteVc(
   IN NDIS_HANDLE  NdisVcHandle);
 
 NDISAPI
 NDIS_STATUS
-DDKAPI
+NTAPI
 NdisMCmRegisterAddressFamily(
   IN NDIS_HANDLE  MiniportAdapterHandle,
   IN PCO_ADDRESS_FAMILY  AddressFamily,
@@ -3430,7 +3886,7 @@ NdisMCmRegisterAddressFamily(
 
 NDISAPI
 NDIS_STATUS
-DDKAPI
+NTAPI
 NdisMCmRequest(
   IN NDIS_HANDLE  NdisAfHandle,
   IN NDIS_HANDLE  NdisVcHandle  OPTIONAL,
@@ -3442,7 +3898,7 @@ NdisMCmRequest(
 
 NDISAPI
 NDIS_STATUS
-DDKAPI
+NTAPI
 NdisCoCreateVc(
   IN NDIS_HANDLE  NdisBindingHandle,
   IN NDIS_HANDLE  NdisAfHandle  OPTIONAL,
@@ -3451,13 +3907,13 @@ NdisCoCreateVc(
 
 NDISAPI
 NDIS_STATUS
-DDKAPI
+NTAPI
 NdisCoDeleteVc(
   IN NDIS_HANDLE  NdisVcHandle);
 
 NDISAPI
 NDIS_STATUS
-DDKAPI
+NTAPI
 NdisCoRequest(
   IN NDIS_HANDLE  NdisBindingHandle,
   IN NDIS_HANDLE  NdisAfHandle  OPTIONAL,
@@ -3467,7 +3923,7 @@ NdisCoRequest(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisCoRequestComplete(
   IN NDIS_STATUS  Status,
   IN NDIS_HANDLE  NdisAfHandle,
@@ -3477,7 +3933,7 @@ NdisCoRequestComplete(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisCoSendPackets(
   IN NDIS_HANDLE  NdisVcHandle,
   IN PPNDIS_PACKET  PacketArray,
@@ -3485,7 +3941,7 @@ NdisCoSendPackets(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisMCoActivateVcComplete(
   IN NDIS_STATUS  Status,
   IN NDIS_HANDLE  NdisVcHandle,
@@ -3493,14 +3949,14 @@ NdisMCoActivateVcComplete(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisMCoDeactivateVcComplete(
   IN NDIS_STATUS  Status,
   IN NDIS_HANDLE  NdisVcHandle);
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisMCoIndicateReceivePacket(
   IN NDIS_HANDLE  NdisVcHandle,
   IN PPNDIS_PACKET  PacketArray,
@@ -3508,7 +3964,7 @@ NdisMCoIndicateReceivePacket(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisMCoIndicateStatus(
   IN NDIS_HANDLE  MiniportAdapterHandle,
   IN NDIS_HANDLE  NdisVcHandle  OPTIONAL,
@@ -3518,13 +3974,13 @@ NdisMCoIndicateStatus(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisMCoReceiveComplete(
   IN NDIS_HANDLE  MiniportAdapterHandle);
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisMCoRequestComplete(
   IN NDIS_STATUS  Status,
   IN NDIS_HANDLE  MiniportAdapterHandle,
@@ -3532,7 +3988,7 @@ NdisMCoRequestComplete(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisMCoSendComplete(
   IN NDIS_STATUS  Status,
   IN NDIS_HANDLE  NdisVcHandle,
@@ -3543,53 +3999,53 @@ NdisMCoSendComplete(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisIMAssociateMiniport(
   IN NDIS_HANDLE  DriverHandle,
   IN NDIS_HANDLE  ProtocolHandle);
 
 NDISAPI
 NDIS_STATUS
-DDKAPI
+NTAPI
 NdisIMCancelInitializeDeviceInstance(
   IN NDIS_HANDLE  DriverHandle,
   IN PNDIS_STRING  DeviceInstance);
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisIMCopySendCompletePerPacketInfo(
   IN PNDIS_PACKET  DstPacket,
   IN PNDIS_PACKET  SrcPacket);
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisIMCopySendPerPacketInfo(
   IN PNDIS_PACKET  DstPacket,
   IN PNDIS_PACKET  SrcPacket);
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisIMDeregisterLayeredMiniport(
   IN NDIS_HANDLE  DriverHandle);
 
 NDISAPI
 NDIS_HANDLE
-DDKAPI
+NTAPI
 NdisIMGetBindingContext(
   IN NDIS_HANDLE  NdisBindingHandle);
 
 NDISAPI
 NDIS_HANDLE
-DDKAPI
+NTAPI
 NdisIMGetDeviceContext(
   IN NDIS_HANDLE  MiniportAdapterHandle);
 
 NDISAPI
 NDIS_STATUS
-DDKAPI
+NTAPI
 NdisIMInitializeDeviceInstanceEx(
   IN NDIS_HANDLE  DriverHandle,
   IN PNDIS_STRING  DriverInstance,
@@ -3597,14 +4053,14 @@ NdisIMInitializeDeviceInstanceEx(
 
 NDISAPI
 PSINGLE_LIST_ENTRY
-DDKAPI
+NTAPI
 NdisInterlockedPopEntrySList(
   IN PSLIST_HEADER  ListHead,
   IN PKSPIN_LOCK  Lock);
 
 NDISAPI
 PSINGLE_LIST_ENTRY
-DDKAPI
+NTAPI
 NdisInterlockedPushEntrySList(
   IN PSLIST_HEADER  ListHead,
   IN PSINGLE_LIST_ENTRY  ListEntry,
@@ -3612,7 +4068,7 @@ NdisInterlockedPushEntrySList(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisQueryBufferSafe(
   IN PNDIS_BUFFER  Buffer,
   OUT PVOID  *VirtualAddress  OPTIONAL,
@@ -3622,27 +4078,27 @@ NdisQueryBufferSafe(
 /* Prototypes for NDIS_MINIPORT_CHARACTERISTICS */
 
 typedef BOOLEAN
-(DDKAPI *W_CHECK_FOR_HANG_HANDLER)(
+(NTAPI *W_CHECK_FOR_HANG_HANDLER)(
   IN NDIS_HANDLE  MiniportAdapterContext);
 
 typedef VOID
-(DDKAPI *W_DISABLE_INTERRUPT_HANDLER)(
+(NTAPI *W_DISABLE_INTERRUPT_HANDLER)(
   IN NDIS_HANDLE  MiniportAdapterContext);
 
 typedef VOID
-(DDKAPI *W_ENABLE_INTERRUPT_HANDLER)(
+(NTAPI *W_ENABLE_INTERRUPT_HANDLER)(
   IN NDIS_HANDLE  MiniportAdapterContext);
 
 typedef VOID
-(DDKAPI *W_HALT_HANDLER)(
+(NTAPI *W_HALT_HANDLER)(
   IN NDIS_HANDLE  MiniportAdapterContext);
 
 typedef VOID
-(DDKAPI *W_HANDLE_INTERRUPT_HANDLER)(
+(NTAPI *W_HANDLE_INTERRUPT_HANDLER)(
   IN NDIS_HANDLE  MiniportAdapterContext);
 
 typedef NDIS_STATUS
-(DDKAPI *W_INITIALIZE_HANDLER)(
+(NTAPI *W_INITIALIZE_HANDLER)(
   OUT PNDIS_STATUS  OpenErrorStatus,
   OUT PUINT  SelectedMediumIndex,
   IN PNDIS_MEDIUM  MediumArray,
@@ -3651,13 +4107,13 @@ typedef NDIS_STATUS
   IN NDIS_HANDLE  WrapperConfigurationContext);
 
 typedef VOID
-(DDKAPI *W_ISR_HANDLER)(
+(NTAPI *W_ISR_HANDLER)(
   OUT PBOOLEAN  InterruptRecognized,
   OUT PBOOLEAN  QueueMiniportHandleInterrupt,
   IN   NDIS_HANDLE  MiniportAdapterContext);
 
 typedef NDIS_STATUS
-(DDKAPI *W_QUERY_INFORMATION_HANDLER)(
+(NTAPI *W_QUERY_INFORMATION_HANDLER)(
   IN NDIS_HANDLE  MiniportAdapterContext,
   IN NDIS_OID  Oid,
   IN PVOID  InformationBuffer,
@@ -3666,30 +4122,30 @@ typedef NDIS_STATUS
   OUT PULONG  BytesNeeded);
 
 typedef NDIS_STATUS
-(DDKAPI *W_RECONFIGURE_HANDLER)(
+(NTAPI *W_RECONFIGURE_HANDLER)(
   OUT PNDIS_STATUS  OpenErrorStatus,
   IN NDIS_HANDLE  MiniportAdapterContext,
   IN NDIS_HANDLE       WrapperConfigurationContext);
 
 typedef NDIS_STATUS
-(DDKAPI *W_RESET_HANDLER)(
+(NTAPI *W_RESET_HANDLER)(
   OUT PBOOLEAN  AddressingReset,
   IN NDIS_HANDLE  MiniportAdapterContext);
 
 typedef NDIS_STATUS
-(DDKAPI *W_SEND_HANDLER)(
+(NTAPI *W_SEND_HANDLER)(
   IN NDIS_HANDLE  MiniportAdapterContext,
   IN PNDIS_PACKET  Packet,
   IN UINT  Flags);
 
 typedef NDIS_STATUS
-(DDKAPI *WM_SEND_HANDLER)(
+(NTAPI *WM_SEND_HANDLER)(
   IN NDIS_HANDLE  MiniportAdapterContext,
   IN NDIS_HANDLE  NdisLinkHandle,
   IN PNDIS_WAN_PACKET  Packet);
 
 typedef NDIS_STATUS
-(DDKAPI *W_SET_INFORMATION_HANDLER)(
+(NTAPI *W_SET_INFORMATION_HANDLER)(
   IN NDIS_HANDLE  MiniportAdapterContext,
   IN NDIS_OID  Oid,
   IN PVOID  InformationBuffer,
@@ -3698,7 +4154,7 @@ typedef NDIS_STATUS
   OUT PULONG  BytesNeeded);
 
 typedef NDIS_STATUS
-(DDKAPI *W_TRANSFER_DATA_HANDLER)(
+(NTAPI *W_TRANSFER_DATA_HANDLER)(
   OUT PNDIS_PACKET  Packet,
   OUT PUINT  BytesTransferred,
   IN NDIS_HANDLE  MiniportAdapterContext,
@@ -3707,7 +4163,7 @@ typedef NDIS_STATUS
   IN UINT  BytesToTransfer);
 
 typedef NDIS_STATUS
-(DDKAPI *WM_TRANSFER_DATA_HANDLER)(
+(NTAPI *WM_TRANSFER_DATA_HANDLER)(
   VOID);
 
 
@@ -3739,18 +4195,18 @@ typedef struct _NDIS30_MINIPORT_CHARACTERISTICS {
 /* Extensions for NDIS 4.0 miniports */
 
 typedef VOID
-(DDKAPI *W_SEND_PACKETS_HANDLER)(
+(NTAPI *W_SEND_PACKETS_HANDLER)(
   IN NDIS_HANDLE  MiniportAdapterContext,
   IN PPNDIS_PACKET  PacketArray,
   IN UINT  NumberOfPackets);
 
 typedef VOID
-(DDKAPI *W_RETURN_PACKET_HANDLER)(
+(NTAPI *W_RETURN_PACKET_HANDLER)(
   IN NDIS_HANDLE  MiniportAdapterContext,
   IN PNDIS_PACKET  Packet);
 
 typedef VOID
-(DDKAPI *W_ALLOCATE_COMPLETE_HANDLER)(
+(NTAPI *W_ALLOCATE_COMPLETE_HANDLER)(
   IN NDIS_HANDLE  MiniportAdapterContext,
   IN PVOID  VirtualAddress,
   IN PNDIS_PHYSICAL_ADDRESS  PhysicalAddress,
@@ -3783,32 +4239,32 @@ typedef struct _NDIS40_MINIPORT_CHARACTERISTICS {
 /* Extensions for NDIS 5.0 miniports */
 
 typedef NDIS_STATUS
-(DDKAPI *W_CO_CREATE_VC_HANDLER)(
+(NTAPI *W_CO_CREATE_VC_HANDLER)(
   IN NDIS_HANDLE  MiniportAdapterContext,
   IN NDIS_HANDLE  NdisVcHandle,
   OUT PNDIS_HANDLE  MiniportVcContext);
 
 typedef NDIS_STATUS
-(DDKAPI *W_CO_DELETE_VC_HANDLER)(
+(NTAPI *W_CO_DELETE_VC_HANDLER)(
   IN NDIS_HANDLE  MiniportVcContext);
 
 typedef NDIS_STATUS
-(DDKAPI *W_CO_ACTIVATE_VC_HANDLER)(
+(NTAPI *W_CO_ACTIVATE_VC_HANDLER)(
   IN NDIS_HANDLE  MiniportVcContext,
   IN OUT PCO_CALL_PARAMETERS  CallParameters);
 
 typedef NDIS_STATUS
-(DDKAPI *W_CO_DEACTIVATE_VC_HANDLER)(
+(NTAPI *W_CO_DEACTIVATE_VC_HANDLER)(
   IN NDIS_HANDLE  MiniportVcContext);
 
 typedef VOID
-(DDKAPI *W_CO_SEND_PACKETS_HANDLER)(
+(NTAPI *W_CO_SEND_PACKETS_HANDLER)(
   IN NDIS_HANDLE  MiniportVcContext,
   IN PPNDIS_PACKET  PacketArray,
   IN UINT  NumberOfPackets);
 
 typedef NDIS_STATUS
-(DDKAPI *W_CO_REQUEST_HANDLER)(
+(NTAPI *W_CO_REQUEST_HANDLER)(
   IN NDIS_HANDLE  MiniportAdapterContext,
   IN NDIS_HANDLE  MiniportVcContext  OPTIONAL,
   IN OUT PNDIS_REQUEST  NdisRequest);
@@ -3845,19 +4301,19 @@ typedef struct _NDIS50_MINIPORT_CHARACTERISTICS {
 /* Extensions for NDIS 5.1 miniports */
 
 typedef VOID
-(DDKAPI *W_CANCEL_SEND_PACKETS_HANDLER)(
+(NTAPI *W_CANCEL_SEND_PACKETS_HANDLER)(
   IN NDIS_HANDLE  MiniportAdapterContext,
   IN PVOID  CancelId);
 
 typedef VOID
-(DDKAPI *W_PNP_EVENT_NOTIFY_HANDLER)(
+(NTAPI *W_PNP_EVENT_NOTIFY_HANDLER)(
   IN NDIS_HANDLE  MiniportAdapterContext,
   IN NDIS_DEVICE_PNP_EVENT  PnPEvent,
   IN PVOID  InformationBuffer,
   IN ULONG  InformationBufferLength);
 
 typedef VOID
-(DDKAPI *W_MINIPORT_SHUTDOWN_HANDLER)(
+(NTAPI *W_MINIPORT_SHUTDOWN_HANDLER)(
   IN PVOID  ShutdownContext);
 
 #ifdef __cplusplus
@@ -3902,12 +4358,12 @@ typedef struct _NDIS_MINIPORT_CHARACTERISTICS {
 
 
 typedef NDIS_STATUS
-(DDKAPI *SEND_HANDLER)(
+(NTAPI *SEND_HANDLER)(
   IN NDIS_HANDLE  MacBindingHandle,
   IN PNDIS_PACKET  Packet);
 
 typedef NDIS_STATUS
-(DDKAPI *TRANSFER_DATA_HANDLER)(
+(NTAPI *TRANSFER_DATA_HANDLER)(
   IN NDIS_HANDLE  MacBindingHandle,
   IN NDIS_HANDLE  MacReceiveContext,
   IN UINT  ByteOffset,
@@ -3916,11 +4372,11 @@ typedef NDIS_STATUS
   OUT PUINT  BytesTransferred);
 
 typedef NDIS_STATUS
-(DDKAPI *RESET_HANDLER)(
+(NTAPI *RESET_HANDLER)(
   IN NDIS_HANDLE  MacBindingHandle);
 
 typedef NDIS_STATUS
-(DDKAPI *REQUEST_HANDLER)(
+(NTAPI *REQUEST_HANDLER)(
   IN NDIS_HANDLE   MacBindingHandle,
   IN PNDIS_REQUEST   NdisRequest);
 
@@ -3929,11 +4385,11 @@ typedef NDIS_STATUS
 /* Structures available only to full MAC drivers */
 
 typedef BOOLEAN
-(DDKAPI *PNDIS_INTERRUPT_SERVICE)(
+(NTAPI *PNDIS_INTERRUPT_SERVICE)(
   IN PVOID  InterruptContext);
 
 typedef VOID
-(DDKAPI *PNDIS_DEFERRED_PROCESSING)(
+(NTAPI *PNDIS_DEFERRED_PROCESSING)(
   IN PVOID  SystemSpecific1,
   IN PVOID  InterruptContext,
   IN PVOID  SystemSpecific2,
@@ -4013,11 +4469,11 @@ typedef struct _NDIS_MINIPORT_WORK_ITEM {
 
 struct _NDIS_WORK_ITEM;
 typedef VOID (*NDIS_PROC)(struct _NDIS_WORK_ITEM *, PVOID);
-typedef struct _NDIS_WORK_ITEM
-{
-    PVOID Context;
-    NDIS_PROC Routine;
-    UCHAR WrapperReserved[8*sizeof(PVOID)];
+
+typedef struct _NDIS_WORK_ITEM {
+  PVOID Context;
+  NDIS_PROC Routine;
+  UCHAR WrapperReserved[8*sizeof(PVOID)];
 } NDIS_WORK_ITEM, *PNDIS_WORK_ITEM;
 
 typedef struct _NDIS_BIND_PATHS {
@@ -4027,11 +4483,11 @@ typedef struct _NDIS_BIND_PATHS {
 
 
 typedef VOID
-(DDKAPI *ETH_RCV_COMPLETE_HANDLER)(
+(NTAPI *ETH_RCV_COMPLETE_HANDLER)(
   IN PETH_FILTER  Filter);
 
 typedef VOID
-(DDKAPI *ETH_RCV_INDICATE_HANDLER)(
+(NTAPI *ETH_RCV_INDICATE_HANDLER)(
   IN PETH_FILTER  Filter,
   IN NDIS_HANDLE  MacReceiveContext,
   IN PCHAR  Address,
@@ -4042,11 +4498,11 @@ typedef VOID
   IN UINT  PacketSize);
 
 typedef VOID
-(DDKAPI *FDDI_RCV_COMPLETE_HANDLER)(
+(NTAPI *FDDI_RCV_COMPLETE_HANDLER)(
   IN PFDDI_FILTER  Filter);
 
 typedef VOID
-(DDKAPI *FDDI_RCV_INDICATE_HANDLER)(
+(NTAPI *FDDI_RCV_INDICATE_HANDLER)(
   IN PFDDI_FILTER  Filter,
   IN NDIS_HANDLE  MacReceiveContext,
   IN PCHAR  Address,
@@ -4058,17 +4514,17 @@ typedef VOID
   IN UINT  PacketSize);
 
 typedef VOID
-(DDKAPI *FILTER_PACKET_INDICATION_HANDLER)(
+(NTAPI *FILTER_PACKET_INDICATION_HANDLER)(
   IN NDIS_HANDLE  Miniport,
   IN PPNDIS_PACKET  PacketArray,
   IN UINT  NumberOfPackets);
 
 typedef VOID
-(DDKAPI *TR_RCV_COMPLETE_HANDLER)(
+(NTAPI *TR_RCV_COMPLETE_HANDLER)(
   IN PTR_FILTER  Filter);
 
 typedef VOID
-(DDKAPI *TR_RCV_INDICATE_HANDLER)(
+(NTAPI *TR_RCV_INDICATE_HANDLER)(
   IN PTR_FILTER  Filter,
   IN NDIS_HANDLE  MacReceiveContext,
   IN PVOID  HeaderBuffer,
@@ -4078,12 +4534,12 @@ typedef VOID
   IN UINT  PacketSize);
 
 typedef VOID
-(DDKAPI *WAN_RCV_COMPLETE_HANDLER)(
+(NTAPI *WAN_RCV_COMPLETE_HANDLER)(
   IN NDIS_HANDLE  MiniportAdapterHandle,
   IN NDIS_HANDLE  NdisLinkContext);
 
 typedef VOID
-(DDKAPI *WAN_RCV_HANDLER)(
+(NTAPI *WAN_RCV_HANDLER)(
   OUT PNDIS_STATUS  Status,
   IN NDIS_HANDLE  MiniportAdapterHandle,
   IN NDIS_HANDLE  NdisLinkContext,
@@ -4109,24 +4565,24 @@ typedef NDIS_STATUS
   IN PVOID  WorkItemContext);
 
 typedef VOID
-(DDKAPI *NDIS_M_REQ_COMPLETE_HANDLER)(
+(NTAPI *NDIS_M_REQ_COMPLETE_HANDLER)(
   IN NDIS_HANDLE  MiniportAdapterHandle,
   IN NDIS_STATUS  Status);
 
 typedef VOID
-(DDKAPI *NDIS_M_RESET_COMPLETE_HANDLER)(
+(NTAPI *NDIS_M_RESET_COMPLETE_HANDLER)(
   IN NDIS_HANDLE  MiniportAdapterHandle,
   IN NDIS_STATUS  Status,
   IN BOOLEAN  AddressingReset);
 
 typedef VOID
-(DDKAPI *NDIS_M_SEND_COMPLETE_HANDLER)(
+(NTAPI *NDIS_M_SEND_COMPLETE_HANDLER)(
   IN NDIS_HANDLE  MiniportAdapterHandle,
   IN PNDIS_PACKET  Packet,
   IN NDIS_STATUS  Status);
 
 typedef VOID
-(DDKAPI *NDIS_M_SEND_RESOURCES_HANDLER)(
+(NTAPI *NDIS_M_SEND_RESOURCES_HANDLER)(
   IN NDIS_HANDLE  MiniportAdapterHandle);
 
 typedef BOOLEAN
@@ -4134,24 +4590,24 @@ typedef BOOLEAN
   IN PNDIS_MINIPORT_BLOCK  Miniport);
 
 typedef VOID
-(DDKAPI *NDIS_M_STATUS_HANDLER)(
+(NTAPI *NDIS_M_STATUS_HANDLER)(
   IN NDIS_HANDLE  MiniportHandle,
   IN NDIS_STATUS  GeneralStatus,
   IN PVOID  StatusBuffer,
   IN UINT  StatusBufferSize);
 
 typedef VOID
-(DDKAPI *NDIS_M_STS_COMPLETE_HANDLER)(
+(NTAPI *NDIS_M_STS_COMPLETE_HANDLER)(
   IN NDIS_HANDLE  MiniportAdapterHandle);
 
 typedef VOID
-(DDKAPI *NDIS_M_TD_COMPLETE_HANDLER)(
+(NTAPI *NDIS_M_TD_COMPLETE_HANDLER)(
   IN NDIS_HANDLE  MiniportAdapterHandle,
   IN PNDIS_PACKET  Packet,
   IN NDIS_STATUS  Status,
   IN UINT  BytesTransferred);
 
-typedef VOID (DDKAPI *NDIS_WM_SEND_COMPLETE_HANDLER)(
+typedef VOID (NTAPI *NDIS_WM_SEND_COMPLETE_HANDLER)(
   IN NDIS_HANDLE  MiniportAdapterHandle,
   IN PVOID  Packet,
   IN NDIS_STATUS  Status);
@@ -4391,14 +4847,14 @@ struct _NDIS_MINIPORT_BLOCK {
 
 /* Handler prototypes for NDIS_OPEN_BLOCK */
 
-typedef NDIS_STATUS (DDKAPI *WAN_SEND_HANDLER)(
+typedef NDIS_STATUS (NTAPI *WAN_SEND_HANDLER)(
   IN NDIS_HANDLE  MacBindingHandle,
   IN NDIS_HANDLE  LinkHandle,
   IN PVOID  Packet);
 
 /* NDIS 4.0 extension */
 
-typedef VOID (DDKAPI *SEND_PACKETS_HANDLER)(
+typedef VOID (NTAPI *SEND_PACKETS_HANDLER)(
   IN NDIS_HANDLE  MiniportAdapterContext,
   IN PPNDIS_PACKET  PacketArray,
   IN UINT  NumberOfPackets);
@@ -4475,13 +4931,29 @@ struct _NDIS_OPEN_BLOCK
 #endif
 };
 
+/* Routines for NDIS miniport drivers */
 
+#if NDIS_SUPPORT_NDIS6
 
-/* Routines for NDIS miniport drivers */
+NDISAPI
+PNDIS_GENERIC_OBJECT
+NTAPI
+NdisAllocateGenericObject(
+  PDRIVER_OBJECT DriverObject OPTIONAL,
+  ULONG Tag,
+  USHORT Size);
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
+NdisFreeGenericObject(
+  IN PNDIS_GENERIC_OBJECT NdisObject);
+
+#endif /* NDIS_SUPPORT_NDIS6 */
+
+NDISAPI
+VOID
+NTAPI
 NdisInitializeWrapper(
   OUT PNDIS_HANDLE  NdisWrapperHandle,
   IN PVOID  SystemSpecific1,
@@ -4490,7 +4962,7 @@ NdisInitializeWrapper(
 
 NDISAPI
 NDIS_STATUS
-DDKAPI
+NTAPI
 NdisMAllocateMapRegisters(
   IN NDIS_HANDLE  MiniportAdapterHandle,
   IN UINT  DmaChannel,
@@ -4536,13 +5008,13 @@ NdisMAllocateMapRegisters(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisMCloseLog(
   IN NDIS_HANDLE  LogHandle);
 
 NDISAPI
 NDIS_STATUS
-DDKAPI
+NTAPI
 NdisMCreateLog(
   IN NDIS_HANDLE  MiniportAdapterHandle,
   IN UINT  Size,
@@ -4550,19 +5022,19 @@ NdisMCreateLog(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisMDeregisterAdapterShutdownHandler(
   IN NDIS_HANDLE  MiniportHandle);
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisMDeregisterInterrupt(
   IN PNDIS_MINIPORT_INTERRUPT  Interrupt);
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisMDeregisterIoPortRange(
   IN NDIS_HANDLE  MiniportAdapterHandle,
   IN UINT  InitialPort,
@@ -4658,13 +5130,13 @@ NdisMDeregisterIoPortRange(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisMFlushLog(
   IN NDIS_HANDLE  LogHandle);
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisMFreeMapRegisters(
   IN NDIS_HANDLE  MiniportAdapterHandle);
 
@@ -4723,7 +5195,7 @@ NdisMFreeMapRegisters(
 
 NDISAPI
 NDIS_STATUS
-DDKAPI
+NTAPI
 NdisMMapIoSpace(
   OUT PVOID  *VirtualAddress,
   IN NDIS_HANDLE  MiniportAdapterHandle,
@@ -4741,7 +5213,7 @@ NdisMMapIoSpace(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisMRegisterAdapterShutdownHandler(
   IN NDIS_HANDLE  MiniportHandle,
   IN PVOID  ShutdownContext,
@@ -4749,7 +5221,7 @@ NdisMRegisterAdapterShutdownHandler(
 
 NDISAPI
 NDIS_STATUS
-DDKAPI
+NTAPI
 NdisMRegisterInterrupt(
   OUT PNDIS_MINIPORT_INTERRUPT  Interrupt,
   IN NDIS_HANDLE  MiniportAdapterHandle,
@@ -4761,7 +5233,7 @@ NdisMRegisterInterrupt(
 
 NDISAPI
 NDIS_STATUS
-DDKAPI
+NTAPI
 NdisMRegisterIoPortRange(
   OUT PVOID  *PortOffset,
   IN NDIS_HANDLE  MiniportAdapterHandle,
@@ -4770,7 +5242,7 @@ NdisMRegisterIoPortRange(
 
 NDISAPI
 NDIS_STATUS
-DDKAPI
+NTAPI
 NdisMRegisterMiniport(
   IN NDIS_HANDLE  NdisWrapperHandle,
   IN PNDIS_MINIPORT_CHARACTERISTICS  MiniportCharacteristics,
@@ -4778,14 +5250,14 @@ NdisMRegisterMiniport(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisMSetTimer(
   IN PNDIS_MINIPORT_TIMER  Timer,
   IN UINT  MillisecondsToDelay);
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisMInitializeTimer(
   IN OUT PNDIS_MINIPORT_TIMER Timer,
   IN NDIS_HANDLE MiniportAdapterHandle,
@@ -4794,17 +5266,17 @@ NdisMInitializeTimer(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisMSetPeriodicTimer(
-  IN PNDIS_MINIPORT_TIMER  Timer,
-  IN UINT  MillisecondPeriod);
+  IN PNDIS_MINIPORT_TIMER Timer,
+  IN UINT MillisecondPeriod);
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisMCancelTimer(
-  IN PNDIS_MINIPORT_TIMER  Timer,
-  OUT PBOOLEAN  TimerCancelled);
+  IN PNDIS_MINIPORT_TIMER Timer,
+  OUT PBOOLEAN TimerCancelled);
 
 #if !defined(NDIS_WRAPPER)
 
@@ -4889,7 +5361,7 @@ NdisMCancelTimer(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisMSetAttributesEx(
   IN NDIS_HANDLE  MiniportAdapterHandle,
   IN NDIS_HANDLE  MiniportAdapterContext,
@@ -4910,13 +5382,13 @@ NdisMSetAttributesEx(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisMSleep(
   IN ULONG  MicrosecondsToSleep);
 
 NDISAPI
 BOOLEAN
-DDKAPI
+NTAPI
 NdisMSynchronizeWithInterrupt(
   IN PNDIS_MINIPORT_INTERRUPT  Interrupt,
   IN PVOID  SynchronizeFunction,
@@ -4965,7 +5437,7 @@ NdisMSynchronizeWithInterrupt(
 
 NDISAPI
 NDIS_STATUS
-DDKAPI
+NTAPI
 NdisMWriteLogData(
   IN NDIS_HANDLE  LogHandle,
   IN PVOID  LogBuffer,
@@ -4973,7 +5445,7 @@ NdisMWriteLogData(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisMQueryAdapterResources(
   OUT PNDIS_STATUS  Status,
   IN NDIS_HANDLE  WrapperConfigurationContext,
@@ -4982,14 +5454,14 @@ NdisMQueryAdapterResources(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisTerminateWrapper(
   IN NDIS_HANDLE  NdisWrapperHandle,
   IN PVOID  SystemSpecific);
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisMUnmapIoSpace(
   IN NDIS_HANDLE  MiniportAdapterHandle,
   IN PVOID  VirtualAddress,
@@ -5001,25 +5473,25 @@ NdisMUnmapIoSpace(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisInitializeEvent(
   IN PNDIS_EVENT  Event);
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisSetEvent(
   IN PNDIS_EVENT  Event);
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisResetEvent(
   IN PNDIS_EVENT  Event);
 
 NDISAPI
 BOOLEAN
-DDKAPI
+NTAPI
 NdisWaitEvent(
   IN PNDIS_EVENT  Event,
   IN UINT  Timeout);
@@ -5028,7 +5500,7 @@ NdisWaitEvent(
 
 /* NDIS intermediate miniport structures */
 
-typedef VOID (DDKAPI *W_MINIPORT_CALLBACK)(
+typedef VOID (NTAPI *W_MINIPORT_CALLBACK)(
   IN NDIS_HANDLE  MiniportAdapterContext,
   IN PVOID  CallbackContext);
 
@@ -5038,7 +5510,7 @@ typedef VOID (DDKAPI *W_MINIPORT_CALLBACK)(
 
 NDISAPI
 NDIS_STATUS
-DDKAPI
+NTAPI
 NdisIMDeInitializeDeviceInstance(
   IN NDIS_HANDLE NdisMiniportHandle);
 
@@ -5053,7 +5525,7 @@ NdisIMDeInitializeDeviceInstance(
 
 NDISAPI
 NDIS_STATUS
-DDKAPI
+NTAPI
 NdisIMRegisterLayeredMiniport(
   IN NDIS_HANDLE  NdisWrapperHandle,
   IN PNDIS_MINIPORT_CHARACTERISTICS  MiniportCharacteristics,
@@ -5065,13 +5537,13 @@ NdisIMRegisterLayeredMiniport(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisFreeDmaChannel(
   IN PNDIS_HANDLE  NdisDmaHandle);
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisSetupDmaTransfer(
   OUT PNDIS_STATUS  Status,
   IN PNDIS_HANDLE  NdisDmaHandle,
@@ -5082,7 +5554,7 @@ NdisSetupDmaTransfer(
 
 NDISAPI
 NTSTATUS
-DDKAPI
+NTAPI
 NdisUpcaseUnicodeString(
   OUT PUNICODE_STRING  DestinationString,
   IN PUNICODE_STRING  SourceString);
@@ -5092,7 +5564,7 @@ NdisUpcaseUnicodeString(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisRequest(
   OUT PNDIS_STATUS  Status,
   IN NDIS_HANDLE  NdisBindingHandle,
@@ -5100,14 +5572,14 @@ NdisRequest(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisReset(
   OUT PNDIS_STATUS  Status,
   IN NDIS_HANDLE  NdisBindingHandle);
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisSend(
   OUT PNDIS_STATUS  Status,
   IN NDIS_HANDLE  NdisBindingHandle,
@@ -5115,7 +5587,7 @@ NdisSend(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisSendPackets(
   IN NDIS_HANDLE  NdisBindingHandle,
   IN PPNDIS_PACKET  PacketArray,
@@ -5123,7 +5595,7 @@ NdisSendPackets(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisTransferData(
   OUT PNDIS_STATUS        Status,
   IN NDIS_HANDLE  NdisBindingHandle,
@@ -5135,14 +5607,14 @@ NdisTransferData(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisCloseAdapter(
   OUT PNDIS_STATUS  Status,
   IN NDIS_HANDLE  NdisBindingHandle);
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisCompleteBindAdapter(
   IN NDIS_HANDLE  BindAdapterContext,
   IN NDIS_STATUS  Status,
@@ -5150,21 +5622,21 @@ NdisCompleteBindAdapter(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisCompleteUnbindAdapter(
   IN NDIS_HANDLE  UnbindAdapterContext,
   IN NDIS_STATUS  Status);
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisDeregisterProtocol(
   OUT PNDIS_STATUS  Status,
   IN NDIS_HANDLE  NdisProtocolHandle);
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisOpenAdapter(
   OUT PNDIS_STATUS  Status,
   OUT PNDIS_STATUS  OpenErrorStatus,
@@ -5180,7 +5652,7 @@ NdisOpenAdapter(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisOpenProtocolConfiguration(
   OUT PNDIS_STATUS  Status,
   OUT PNDIS_HANDLE  ConfigurationHandle,
@@ -5188,7 +5660,7 @@ NdisOpenProtocolConfiguration(
 
 NDISAPI
 VOID
-DDKAPI
+NTAPI
 NdisRegisterProtocol(
   OUT PNDIS_STATUS  Status,
   OUT PNDIS_HANDLE  NdisProtocolHandle,
@@ -5197,7 +5669,7 @@ NdisRegisterProtocol(
 
 NDISAPI
 NDIS_STATUS
-DDKAPI
+NTAPI
 NdisScheduleWorkItem(
   IN  PNDIS_WORK_ITEM WorkItem);
 
@@ -5216,20 +5688,20 @@ typedef NDIS_STATUS (*OPEN_ADAPTER_HANDLER)(
   IN UINT  OpenOptions,
   IN PSTRING  AddressingInformation  OPTIONAL);
 
-typedef NDIS_STATUS (DDKAPI *CLOSE_ADAPTER_HANDLER)(
+typedef NDIS_STATUS (NTAPI *CLOSE_ADAPTER_HANDLER)(
   IN NDIS_HANDLE  MacBindingHandle);
 
-typedef NDIS_STATUS (DDKAPI *WAN_TRANSFER_DATA_HANDLER)(
+typedef NDIS_STATUS (NTAPI *WAN_TRANSFER_DATA_HANDLER)(
   VOID);
 
-typedef NDIS_STATUS (DDKAPI *QUERY_GLOBAL_STATISTICS_HANDLER)(
+typedef NDIS_STATUS (NTAPI *QUERY_GLOBAL_STATISTICS_HANDLER)(
   IN NDIS_HANDLE  MacAdapterContext,
   IN PNDIS_REQUEST  NdisRequest);
 
-typedef VOID (DDKAPI *UNLOAD_MAC_HANDLER)(
+typedef VOID (NTAPI *UNLOAD_MAC_HANDLER)(
   IN NDIS_HANDLE  MacMacContext);
 
-typedef NDIS_STATUS (DDKAPI *ADD_ADAPTER_HANDLER)(
+typedef NDIS_STATUS (NTAPI *ADD_ADAPTER_HANDLER)(
   IN NDIS_HANDLE  MacMacContext,
   IN NDIS_HANDLE  WrapperConfigurationContext,
   IN PNDIS_STRING  AdapterName);