Added networking code from Casper Hornstrup
authorDavid Welch <welch@cwcom.net>
Tue, 1 Aug 2000 23:54:06 +0000 (23:54 +0000)
committerDavid Welch <welch@cwcom.net>
Tue, 1 Aug 2000 23:54:06 +0000 (23:54 +0000)
svn path=/trunk/; revision=1281

13 files changed:
reactos/drivers/net/tcpip/Makefile_rex [deleted file]
reactos/drivers/net/tcpip/misc/iface.c [deleted file]
reactos/drivers/net/tcpip/misc/main.c [deleted file]
reactos/drivers/net/tcpip/misc/tcpip.def [deleted file]
reactos/drivers/net/tcpip/misc/tcpip.edf [deleted file]
reactos/drivers/net/tcpip/misc/tcpip.rc [deleted file]
reactos/include/net/miniport.h [new file with mode: 0644]
reactos/include/net/ndis.h [new file with mode: 0644]
reactos/include/net/ndisoid.h [new file with mode: 0644]
reactos/include/net/netevent.h [new file with mode: 0644]
reactos/include/net/tdi.h [new file with mode: 0644]
reactos/include/net/tdiinfo.h [new file with mode: 0644]
reactos/include/net/tdikrnl.h [new file with mode: 0644]

diff --git a/reactos/drivers/net/tcpip/Makefile_rex b/reactos/drivers/net/tcpip/Makefile_rex
deleted file mode 100644 (file)
index 5adb05c..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-# $Id: Makefile_rex,v 1.2 2000/03/08 22:37:02 ea Exp $
-#
-# TCPIP.SYS build spec
-#
-
-TARGETNAME=tcpip
-
-BASE_CFLAGS = -I../../../include
-
-OBJECTS_MISC = misc/main.o misc/iface.o misc/$(TARGETNAME).coff
-
-OBJECTS = $(OBJECTS_MISC)
-
-all: $(TARGETNAME).sys
-
-misc/$(TARGETNAME).coff: misc/$(TARGETNAME).rc ../../../include/reactos/resource.h
-
-ifeq ($(DOSCLI),yes)
-CLEAN_FILES = \
-               misc\*.o misc\*.coff \
-               $(TARGETNAME).o $(TARGETNAME).a \
-               junk.tmp base.tmp temp.exp \
-               $(TARGETNAME).sys $(TARGETNAME).sym
-else
-CLEAN_FILES = \
-               misc/*.o misc/*.coff \
-               $(TARGETNAME).o $(TARGETNAME).a \
-               junk.tmp base.tmp temp.exp \
-               $(TARGETNAME).sys $(TARGETNAME).sym
-endif
-
-$(TARGETNAME).sys: $(OBJECTS) misc/$(TARGETNAME).def
-       $(LD) -r $(OBJECTS) -o $(TARGETNAME).o
-       $(DLLTOOL) \
-               --dllname $(TARGETNAME).sys \
-               --def misc/$(TARGETNAME).def \
-               --output-lib $(TARGETNAME).a \
-               --kill-at
-       $(CC) \
-               --subsystem=native \
-               -mdll \
-               --dll \
-               -e _DriverEntry@8 \
-               -o junk.tmp \
-               -Wl,--image-base,0x0 \
-               -Wl,--file-alignment,0x1000 \
-               -Wl,--section-alignment,0x1000 \
-               -Wl,--defsym,_end=end \
-               -Wl,--defsym,_edata=__data_end__ \
-               -Wl,--defsym,_etext=etext \
-               -Wl,--base-file,base.tmp $(TARGETNAME).o \
-               -specs=../../../specs \
-               ../../../ntoskrnl/ntoskrnl.a
-       - $(RM) junk.tmp
-       $(DLLTOOL) \
-               --dllname $(TARGETNAME).sys \
-               --base-file base.tmp \
-               --output-exp temp.exp \
-               --def misc/$(TARGETNAME).edf \
-               --kill-at
-       - $(RM) base.tmp
-       $(CC) \
-               --subsystem=native \
-               -mdll \
-               --dll \
-               -e _DllMain@8 \
-               -o $(TARGETNAME).sys \
-               $(TARGETNAME).o \
-               ../../../ntoskrnl/ntoskrnl.a \
-               -Wl,--image-base,0x0 \
-               -Wl,--file-alignment,0x1000 \
-               -Wl,--section-alignment,0x1000 \
-               -Wl,--defsym,_end=end \
-               -Wl,--defsym,_edata=__data_end__ \
-               -Wl,--defsym,_etext=etext \
-               -Wl,temp.exp \
-               -specs=../../../specs
-       - $(RM) temp.exp
-       $(NM) --numeric-sort $(TARGETNAME).sys > $(TARGETNAME).sym
-
-clean: $(CLEAN_FILES:%=%_clean)
-
-$(CLEAN_FILES:%=%_clean): %_clean:
-       - $(RM) $*
-
-.PHONY: clean $(CLEAN_FILES:%=%_clean)
-
-floppy: $(FLOPPY_DIR)/drivers/$(TARGETNAME).sys
-
-$(FLOPPY_DIR)/drivers/$(TARGETNAME).sys: $(TARGETNAME).sys
-ifeq ($(DOSCLI),yes)
-       $(CP) $(TARGETNAME).sys $(FLOPPY_DIR)\drivers\$(TARGETNAME).sys
-else
-       $(CP) $(TARGETNAME).sys $(FLOPPY_DIR)/drivers/$(TARGETNAME).sys
-endif
-
-dist: $(DIST_DIR)/drivers/$(TARGETNAME).sys
-
-$(DIST_DIR)/drivers/$(TARGETNAME).sys: $(TARGETNAME).sys
-ifeq ($(DOSCLI),yes)
-       $(CP) $(TARGETNAME).sys ..\..\$(DIST_DIR)\drivers\$(TARGETNAME).sys
-else
-       $(CP) $(TARGETNAME).sys ../../$(DIST_DIR)/drivers/$(TARGETNAME).sys
-endif
-
-#WITH_DEBUGGING = yes
-#WIN32_LEAN_AND_MEAN = yes
-#WARNINGS_ARE_ERRORS = yes
-include ../../../rules.mak
-
diff --git a/reactos/drivers/net/tcpip/misc/iface.c b/reactos/drivers/net/tcpip/misc/iface.c
deleted file mode 100644 (file)
index 2f78bd6..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/* $Id: iface.c,v 1.1 1999/11/20 20:36:46 ea Exp $
- *
- * reactos/services/net/tcpip/misc/iface.c
- */
-#include <ntos.h>
-
-VOID
-STDCALL
-IPAddInterface (
-       DWORD   Unknown0,
-       DWORD   Unknown1,
-       DWORD   Unknown2,
-       DWORD   Unknown3,
-       DWORD   Unknown4
-       )
-{
-}
-
-
-VOID
-STDCALL
-IPDelInterface (
-       DWORD   Unknown0
-       )
-{
-}
-
-
-VOID
-STDCALL
-LookupRoute (
-       DWORD   Unknown0,
-       DWORD   Unknown1
-       )
-{
-}
-
-
-/* EOF */
diff --git a/reactos/drivers/net/tcpip/misc/main.c b/reactos/drivers/net/tcpip/misc/main.c
deleted file mode 100644 (file)
index 52c89f3..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-/* $Id: main.c,v 1.2 2000/03/08 22:37:02 ea Exp $ */
-#include <ntos.h>
-
-NTSTATUS
-STDCALL
-DriverEntry (
-       IN      PDRIVER_OBJECT  DriverObject,
-       IN      PUNICODE_STRING RegistryPath
-       )
-{
-       return STATUS_UNSUCCESSFUL;
-}
-
-
-
-/* EOF */
diff --git a/reactos/drivers/net/tcpip/misc/tcpip.def b/reactos/drivers/net/tcpip/misc/tcpip.def
deleted file mode 100644 (file)
index 7d39f67..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-; $Id: tcpip.def,v 1.1 1999/11/20 20:36:46 ea Exp $
-;
-; TCPIP.SYS
-;
-LIBRARY tcpip.sys
-
-EXPORTS
-IPAddInterface@20
-IPDelInterface@4
-LookupRoute@8
-
-; EOF
diff --git a/reactos/drivers/net/tcpip/misc/tcpip.edf b/reactos/drivers/net/tcpip/misc/tcpip.edf
deleted file mode 100644 (file)
index e77a97d..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-; $Id: tcpip.edf,v 1.1 1999/11/20 20:36:46 ea Exp $
-;
-; TCPIP.SYS
-;
-LIBRARY tcpip.sys
-
-EXPORTS
-IPAddInterface=IPAddInterface@20
-IPDelInterface=IPDelInterface@4
-LookupRoute=LookupRoute@8
-
-; EOF
diff --git a/reactos/drivers/net/tcpip/misc/tcpip.rc b/reactos/drivers/net/tcpip/misc/tcpip.rc
deleted file mode 100644 (file)
index 57af7b4..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/* $Id: tcpip.rc,v 1.1 1999/11/20 20:36:46 ea Exp $ */
-#include <defines.h>
-#include <reactos/resource.h>
-
-LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
-
-VS_VERSION_INFO VERSIONINFO
-       FILEVERSION     RES_UINT_FV_MAJOR,RES_UINT_FV_MINOR,RES_UINT_FV_REVISION,RES_UINT_FV_BUILD
-       PRODUCTVERSION  RES_UINT_PV_MAJOR,RES_UINT_PV_MINOR,RES_UINT_PV_REVISION,RES_UINT_PV_BUILD
-       FILEFLAGSMASK   0x3fL
-#ifdef _DEBUG
-       FILEFLAGS       0x1L
-#else
-       FILEFLAGS       0x0L
-#endif
-       FILEOS          0x40004L
-       FILETYPE        0x2L
-       FILESUBTYPE     0x0L
-BEGIN
-    BLOCK "StringFileInfo"
-    BEGIN
-        BLOCK "040904b0"
-        BEGIN
-            VALUE "CompanyName",       RES_STR_COMPANY_NAME
-            VALUE "FileDescription",   "TCP/IP kernel module\0"
-            VALUE "FileVersion",       "0.0.0\0"
-            VALUE "InternalName",      "tcpip\0"
-            VALUE "LegalCopyright",    RES_STR_LEGAL_COPYRIGHT
-            VALUE "OriginalFilename",  "tcpip.sys\0"
-            VALUE "ProductName",       RES_STR_PRODUCT_NAME
-            VALUE "ProductVersion",    RES_STR_PRODUCT_VERSION
-        END
-    END
-    BLOCK "VarFileInfo"
-    BEGIN
-        VALUE "Translation", 0x409, 1200
-    END
-END
-
diff --git a/reactos/include/net/miniport.h b/reactos/include/net/miniport.h
new file mode 100644 (file)
index 0000000..4db5711
--- /dev/null
@@ -0,0 +1,849 @@
+/*\r
+ * COPYRIGHT:   See COPYING in the top level directory\r
+ * PROJECT:     ReactOS NDIS library\r
+ * FILE:        include/net/miniport.h\r
+ * PURPOSE:     Type definitions available only to NDIS miniport drivers\r
+ */\r
+#ifndef __MINIPORT_H\r
+#define __MINIPORT_H\r
+\r
+#ifdef _MSC_VER\r
+#include <ntstatus.h>\r
+#else /* _MSC_VER */\r
+#include <ddk/status.h>\r
+#endif /* _MSC_VER */\r
+\r
+/* Base types */\r
+\r
+#define IN\r
+#define OUT\r
+#define OPTIONAL\r
+\r
+#define ANYSIZE_ARRAY   1\r
+\r
+#define CONST const\r
+\r
+#ifdef _MSC_VER\r
+\r
+#ifdef i386\r
+#define STDCALL _stdcall\r
+#define CDECL   _cdecl\r
+#else /* i386 */\r
+#define STDCALL\r
+#define CDECL\r
+#endif /* i386 */\r
+\r
+#else /* _MSC_VER */\r
+\r
+#ifdef i386\r
+#define STDCALL __attribute__ ((stdcall))\r
+#define CDECL   __attribute__ ((cdecl))\r
+#else /* i386 */\r
+#define STDCALL\r
+#define CDECL\r
+#endif /* i386 */\r
+\r
+#endif /* _MSC_VER */\r
+\r
+typedef void VOID, *PVOID;\r
+typedef char CHAR, *PCHAR;\r
+typedef unsigned char UCHAR, *PUCHAR;\r
+typedef short SHORT, *PSHORT;\r
+typedef unsigned short USHORT, *PUSHORT;\r
+typedef long LONG,*PLONG;\r
+typedef unsigned long ULONG,*PULONG;\r
+typedef double DOUBLE, *PDOUBLE;\r
+typedef struct _QUAD {\r
+    double  DoNotUseThisField;\r
+} QUAD,*PQUAD;\r
+typedef QUAD UQUAD, *PUQUAD;\r
+typedef signed int INT, *PINT;\r
+typedef unsigned int UINT, *PUINT;\r
+typedef double LONGLONG, *PLONGLONG;\r
+typedef double ULONGLONG, *PULONGLONG;\r
+\r
+typedef UCHAR BOOLEAN, *PBOOLEAN;\r
+typedef ULONG DWORD, *PDWORD;\r
+\r
+/* Cardinal types */\r
+typedef CHAR CCHAR, *PCCHAR;\r
+typedef SHORT CSHORT, *PCSHORT;\r
+typedef ULONG CLONG, *PCLONG;\r
+\r
+/* UNICODE (wide character) types */\r
+#ifndef __cplusplus\r
+typedef short unsigned int wchar_t;\r
+#endif /* __cplusplus */\r
+typedef wchar_t WCHAR;\r
+typedef WCHAR *PWCHAR;\r
+typedef WCHAR *LPWCH, *PWCH;\r
+typedef CONST WCHAR *LPCWCH, *PCWCH;\r
+typedef WCHAR *NWPSTR;\r
+typedef WCHAR *LPWSTR, *PWSTR;\r
+typedef CONST WCHAR *LPCWSTR, *PCWSTR;\r
+\r
+/* ANSI (multi-byte character) types */\r
+typedef CHAR *LPCH, *PCH;\r
+typedef CONST CHAR *LPCCH, *PCCH;\r
+typedef CHAR *NPSTR;\r
+typedef CHAR *LPSTR, *PSTR;\r
+typedef CONST CHAR *LPCSTR, *PCSTR;\r
+\r
+/* Neutral ANSI/UNICODE types */\r
+#ifdef UNICODE\r
+\r
+typedef WCHAR TCHAR, *PTCHAR;\r
+typedef WCHAR TUCHAR, *PTUCHAR;\r
+\r
+typedef LPWSTR LPTCH, PTCH;\r
+typedef LPWSTR PTSTR, LPTSTR;\r
+typedef LPCWSTR LPCTSTR;\r
+typedef LPWSTR LP;\r
+#define _TEXT(string) L##string\r
+#define _T(string) L##string\r
+\r
+#else /* UNICODE */\r
+\r
+typedef CHAR TCHAR, *PTCHAR;\r
+typedef UCHAR TUCHAR, *PTUCHAR;\r
+\r
+typedef LPSTR LPTCH, PTCH;\r
+typedef LPSTR PTSTR, LPTSTR;\r
+typedef LPCSTR LPCTSTR;\r
+#define _TEXT(string) string\r
+#define _T(string) string\r
+\r
+#endif /* UNICODE */\r
+\r
+#define TEXT(string) __TEXT(string)\r
+\r
+\r
+typedef union _LARGE_INTEGER {\r
+    struct {\r
+        ULONG LowPart;\r
+        LONG HighPart;\r
+    };\r
+    struct {\r
+        ULONG LowPart;\r
+        LONG HighPart;\r
+    } u;\r
+    LONGLONG QuadPart;\r
+} LARGE_INTEGER;\r
+\r
+typedef LARGE_INTEGER *PLARGE_INTEGER;\r
+\r
+typedef union _ULARGE_INTEGER {\r
+    struct {\r
+        ULONG LowPart;\r
+        ULONG HighPart;\r
+    };\r
+    struct {\r
+        ULONG LowPart;\r
+        ULONG HighPart;\r
+    } u;\r
+    ULONGLONG QuadPart;\r
+} ULARGE_INTEGER;\r
+\r
+typedef ULARGE_INTEGER *PULARGE_INTEGER;\r
+\r
+\r
+typedef LARGE_INTEGER PHYSICAL_ADDRESS, *PPHYSICAL_ADDRESS;\r
+\r
+\r
+\r
+/* NT status type and macros for checking status */\r
+typedef LONG NTSTATUS;\r
+typedef NTSTATUS *PNTSTATUS;\r
+\r
+#ifdef _MSC_VER\r
+#define NT_SUCCESS(Status)      ((ULONG)(Status) >= 0)\r
+#endif /* _MSC_VER */\r
+#define NT_INFORMATION(Status)  ((ULONG)(Status) >> 30 == 1)\r
+#define NT_WARNING(Status)      ((ULONG)(Status) >> 30 == 2)\r
+#define NT_ERROR(Status)        ((ULONG)(Status) >> 30 == 3)\r
+\r
+#define APPLICATION_ERROR_MASK       0x20000000\r
+#define ERROR_SEVERITY_SUCCESS       0x00000000\r
+#define ERROR_SEVERITY_INFORMATIONAL 0x40000000\r
+#define ERROR_SEVERITY_WARNING       0x80000000\r
+#define ERROR_SEVERITY_ERROR         0xC0000000\r
+\r
+\r
+\r
+/* Basic constants */\r
+\r
+#define FALSE   0\r
+#define TRUE    1\r
+\r
+#define NULL    ((PVOID)0)\r
+\r
+\r
+\r
+/* Counted strings */\r
+\r
+typedef struct _STRING\r
+{\r
+    USHORT  Length;\r
+    USHORT  MaximumLength;\r
+    PCHAR   Buffer;\r
+} STRING, *PSTRING;\r
+\r
+typedef STRING ANSI_STRING, *PANSI_STRING;\r
+typedef STRING OEM_STRING, *POEM_STRING;\r
+\r
+#define ANSI_NULL   ((CHAR)0)\r
+\r
+typedef struct _CSTRING\r
+{\r
+    USHORT      Length;\r
+    USHORT      MaximumLength;\r
+    CONST CHAR  *Buffer;\r
+} CSTRING, *PCSTRING;\r
+\r
+typedef CSTRING CANSI_STRING, *PCANSI_STRING;\r
+\r
+\r
+typedef struct _UNICODE_STRING\r
+{\r
+    USHORT  Length;\r
+    USHORT  MaximumLength;\r
+    PWSTR   Buffer;\r
+} UNICODE_STRING, *PUNICODE_STRING;\r
+\r
+typedef struct _CUNICODE_STRING\r
+{\r
+    USHORT      Length;\r
+    USHORT      MaximumLength;\r
+    CONST PWSTR Buffer;\r
+} CUNICODE_STRING, *PCUNICODE_STRING;\r
+\r
+#define UNICODE_NULL    ((WCHAR)0)\r
+\r
+\r
+\r
+/* Linked lists */\r
+\r
+typedef struct _LIST_ENTRY\r
+{\r
+    struct _LIST_ENTRY *Flink;\r
+    struct _LIST_ENTRY *Blink;\r
+} LIST_ENTRY, *PLIST_ENTRY;\r
+\r
+typedef struct _SINGLE_LIST_ENTRY\r
+{\r
+    struct _SINGLE_LIST_ENTRY *Next;\r
+} SINGLE_LIST_ENTRY, *PSINGLE_LIST_ENTRY;\r
+\r
+\r
+/*\r
+ * VOID InitializeListHead(\r
+ *     PLIST_ENTRY ListHead);\r
+ */\r
+#define InitializeListHead(ListHead) \\r
+{                                    \\r
+    (ListHead)->Flink = (ListHead);  \\r
+    (ListHead)->Blink = (ListHead);  \\r
+}\r
+\r
+\r
+/*\r
+ * VOID InsertHeadList(\r
+ *     LIST_ENTRY ListHead,\r
+ *     PLIST_ENTRY Entry);\r
+ */\r
+#define InsertHeadList(ListHead, ListEntry) \\r
+{                                           \\r
+    PLIST_ENTRY OldFlink;                   \\r
+    OldFlink           = (ListHead)->Flink; \\r
+    (ListEntry)->Flink = OldFlink;          \\r
+    (ListEntry)->Blink = (ListHead);        \\r
+    OldFlink->Blink    = (ListEntry);       \\r
+    (ListHead)->Flink  = (ListEntry);       \\r
+}\r
+\r
+\r
+/*\r
+ * VOID InsertTailList(\r
+ *     PLIST_ENTRY ListHead,\r
+ *        PLIST_ENTRY Entry);\r
+ */\r
+#define InsertTailList(ListHead, ListEntry) \\r
+{                                           \\r
+    PLIST_ENTRY OldBlink;                   \\r
+       OldBlink           = (ListHead)->Blink; \\r
+       (ListEntry)->Flink = (ListHead);        \\r
+       (ListEntry)->Blink = OldBlink;          \\r
+       OldBlink->Flink    = (ListEntry);       \\r
+       (ListHead)->Blink  = (ListEntry);       \\r
+}\r
+\r
+/*\r
+ * BOOLEAN IsListEmpty(\r
+ *     PLIST_ENTRY ListHead);\r
+ */\r
+#define IsListEmpty(ListHead) \\r
+    ((ListHead)->Flink == (ListHead))\r
+\r
+\r
+/*\r
+ * PSINGLE_LIST_ENTRY PopEntryList(\r
+ *     PSINGLE_LIST_ENTRY ListHead);\r
+ */\r
+#define PopEntryList(ListHead)               \\r
+    (ListHead)->Next;                        \\r
+{                                            \\r
+    PSINGLE_LIST_ENTRY FirstEntry;           \\r
+                                             \\r
+    FirstEntry = (ListHead)->Next;           \\r
+    if (FirstEntry != NULL)                  \\r
+    {                                        \\r
+        (ListHead)->Next = FirstEntry->Next; \\r
+    }                                        \\r
+}\r
+\r
+\r
+/*\r
+ * VOID PushEntryList(\r
+ *     PSINGLE_LIST_ENTRY ListHead,\r
+ *     PSINGLE_LIST_ENTRY Entry);\r
+ */\r
+#define PushEntryList(ListHead, Entry)   \\r
+    (Entry)->Next    = (ListHead)->Next; \\r
+    (ListHead)->Next = (Entry)\r
+\r
+\r
+/*\r
+ * VOID RemoveEntryList(\r
+ *     PLIST_ENTRY Entry);\r
+ */\r
+#define RemoveEntryList(ListEntry)        \\r
+{                                         \\r
+    PLIST_ENTRY OldFlink;                 \\r
+    PLIST_ENTRY OldBlink;                 \\r
+    OldFlink        = (ListEntry)->Flink; \\r
+    OldBlink        = (ListEntry)->Blink; \\r
+    OldFlink->Blink = OldBlink;           \\r
+    OldBlink->Flink = OldFlink;           \\r
+}\r
+\r
+\r
+/*\r
+ * PLIST_ENTRY RemoveHeadList(\r
+ *     PLIST_ENTRY ListHead);\r
+ */\r
+#define RemoveHeadList(ListHead)       \\r
+       (ListHead)->Flink;                 \\r
+{                                      \\r
+    RemoveEntryList((ListHead)->Flink) \\r
+}\r
+\r
+\r
+/*\r
+ * PLIST_ENTRY RemoveTailList(\r
+ *     PLIST_ENTRY ListHead);\r
+ */\r
+#define RemoveTailList(ListHead)       \\r
+    (ListHead)->Blink;                 \\r
+{                                      \\r
+    RemoveEntryList((ListHead)->Blink) \\r
+}\r
+\r
+\r
+/* Hardware */\r
+\r
+typedef UCHAR KIRQL, *PKIRQL;\r
+\r
+typedef struct _KSPIN_LOCK\r
+{\r
+    ULONG    Lock;\r
+} KSPIN_LOCK, *PKSPIN_LOCK;\r
+\r
+\r
+typedef struct _ADAPTER_OBJECT  *PADAPTER_OBJECT;\r
+typedef struct _DEVICE_OBJECT   *PDEVICE_OBJECT;\r
+typedef struct _DRIVER_OBJECT   *PDRIVER_OBJECT;\r
+typedef struct _FILE_OBJECT     *PFILE_OBJECT;\r
+\r
+typedef struct _KINTERRUPT      *PKINTERRUPT;\r
+\r
+\r
+/* Memory Descriptor List */\r
+typedef struct _MDL {\r
+    struct _MDL *Next;\r
+    CSHORT Size;\r
+    CSHORT MdlFlags;\r
+    struct _EPROCESS *Process;\r
+    PVOID MappedSystemVa;\r
+    PVOID StartVa;\r
+    ULONG ByteCount;\r
+    ULONG ByteOffset;\r
+} MDL, *PMDL;\r
+\r
+#define MDL_MAPPED_TO_SYSTEM_VA     0x0001\r
+#define MDL_PAGES_LOCKED            0x0002\r
+#define MDL_SOURCE_IS_NONPAGED_POOL 0x0004\r
+#define MDL_ALLOCATED_FIXED_SIZE    0x0008\r
+#define MDL_PARTIAL                 0x0010\r
+#define MDL_PARTIAL_HAS_BEEN_MAPPED 0x0020\r
+#define MDL_IO_PAGE_READ            0x0040\r
+#define MDL_WRITE_OPERATION         0x0080\r
+#define MDL_PARENT_MAPPED_SYSTEM_VA 0x0100\r
+#define MDL_LOCK_HELD               0x0200\r
+#define MDL_PHYSICAL_VIEW           0x0400\r
+#define MDL_IO_SPACE                0x0800\r
+#define MDL_NETWORK_HEADER          0x1000\r
+#define MDL_MAPPING_CAN_FAIL        0x2000\r
+#define MDL_ALLOCATED_MUST_SUCCEED  0x4000\r
+\r
+\r
+#define MDL_MAPPING_FLAGS (MDL_MAPPED_TO_SYSTEM_VA     | \\r
+                           MDL_PAGES_LOCKED            | \\r
+                           MDL_SOURCE_IS_NONPAGED_POOL | \\r
+                           MDL_PARTIAL_HAS_BEEN_MAPPED | \\r
+                           MDL_PARENT_MAPPED_SYSTEM_VA | \\r
+                           MDL_LOCK_HELD               | \\r
+                           MDL_SYSTEM_VA               | \\r
+                           MDL_IO_SPACE )\r
+\r
+\r
+typedef struct _DISPATCHER_HEADER\r
+{\r
+    UCHAR       Type;\r
+    UCHAR       Absolute;\r
+    UCHAR       Size;\r
+    UCHAR       Inserted;\r
+    LONG        SignalState;\r
+    LIST_ENTRY  WaitListHead;\r
+} DISPATCHER_HEADER;\r
+\r
+typedef struct _KEVENT\r
+{\r
+    DISPATCHER_HEADER   Header;\r
+} KEVENT, *PKEVENT;\r
+\r
+\r
+typedef struct _KTIMER\r
+{\r
+    DISPATCHER_HEADER   Header;\r
+    ULARGE_INTEGER      DueTime;\r
+    LIST_ENTRY          TimerListEntry;\r
+    struct _KDPC        *Dpc;\r
+    LONG                Period;\r
+} KTIMER, *PKTIMER;\r
+\r
+\r
+typedef enum _KDPC_IMPORTANCE\r
+{\r
+    LowImportance,\r
+    MediumImportance,\r
+    HighImportance\r
+} KDPC_IMPORTANCE;\r
+\r
+/* Forward declaration */\r
+struct _KDPC;\r
+\r
+typedef VOID (*PKDEFERRED_ROUTINE)(\r
+    IN  struct _KDPC    *Dpc,\r
+    IN  PVOID           DeferredContext,\r
+    IN  PVOID           SystemArgument1,\r
+    IN  PVOID           SystemArgument2);\r
+\r
+/* Deferred Procedure Call */\r
+\r
+typedef struct _KDPC {\r
+    CSHORT              Type;\r
+    UCHAR               Number;\r
+    UCHAR               Importance;\r
+    LIST_ENTRY          DpcListEntry;\r
+    PKDEFERRED_ROUTINE  DeferredRoutine;\r
+    PVOID               DeferredContext;\r
+    PVOID               SystemArgument1;\r
+    PVOID               SystemArgument2;\r
+    PULONG              Lock;\r
+} KDPC, *PKDPC;\r
+\r
+\r
+typedef enum _INTERFACE_TYPE\r
+{\r
+    InterfaceTypeUndefined = -1,\r
+    Internal,\r
+    Isa,\r
+    Eisa,\r
+    MicroChannel,\r
+    TurboChannel,\r
+    PCIBus,\r
+    VMEBus,\r
+    NuBus,\r
+    PCMCIABus,\r
+    CBus,\r
+    MPIBus,\r
+    MPSABus,\r
+    ProcessorInternal,\r
+    InternalPowerBus,\r
+    PNPISABus,\r
+    MaximumInterfaceType\r
+} INTERFACE_TYPE, *PINTERFACE_TYPE;\r
+\r
+\r
+typedef enum _DMA_WIDTH\r
+{\r
+    Width8Bits,\r
+    Width16Bits,\r
+    Width32Bits,\r
+    MaximumDmaWidth\r
+} DMA_WIDTH, *PDMA_WIDTH;\r
+\r
+typedef enum _DMA_SPEED\r
+{\r
+    Compatible,\r
+    TypeA,\r
+    TypeB,\r
+    TypeC,\r
+    TypeF,\r
+    MaximumDmaSpeed\r
+} DMA_SPEED, *PDMA_SPEED;\r
+\r
+\r
+typedef enum _KINTERRUPT_MODE\r
+{\r
+    LevelSensitive,\r
+    Latched\r
+} KINTERRUPT_MODE;\r
+\r
+\r
+typedef struct _DMA_CONFIGURATION_BYTE0\r
+{\r
+    UCHAR   Channel:3;\r
+    UCHAR   Reserved:3;\r
+    UCHAR   Shared:1;\r
+    UCHAR   MoreEntries:1;\r
+} DMA_CONFIGURATION_BYTE0;\r
+\r
+typedef struct _DMA_CONFIGURATION_BYTE1\r
+{\r
+    UCHAR   Reserved0:2;\r
+    UCHAR   TransferSize:2;\r
+    UCHAR   Timing:2;\r
+    UCHAR   Reserved1:2;\r
+} DMA_CONFIGURATION_BYTE1;\r
+\r
+\r
+typedef struct _CM_MCA_POS_DATA\r
+{\r
+    USHORT  AdapterId;\r
+    UCHAR   PosData1;\r
+    UCHAR   PosData2;\r
+    UCHAR   PosData3;\r
+    UCHAR   PosData4;\r
+} CM_MCA_POS_DATA, *PCM_MCA_POS_DATA;\r
+\r
+typedef struct _EISA_MEMORY_TYPE\r
+{\r
+    UCHAR   ReadWrite:1;\r
+    UCHAR   Cached:1;\r
+    UCHAR   Reserved0:1;\r
+    UCHAR   Type:2;\r
+    UCHAR   Shared:1;\r
+    UCHAR   Reserved1:1;\r
+    UCHAR   MoreEntries:1;\r
+} EISA_MEMORY_TYPE, *PEISA_MEMORY_TYPE;\r
+\r
+typedef struct _EISA_MEMORY_CONFIGURATION\r
+{\r
+    EISA_MEMORY_TYPE    ConfigurationByte;\r
+    UCHAR   DataSize;\r
+    USHORT  AddressLowWord;\r
+    UCHAR   AddressHighByte;\r
+    USHORT  MemorySize;\r
+} EISA_MEMORY_CONFIGURATION, *PEISA_MEMORY_CONFIGURATION;\r
+\r
+\r
+typedef struct _EISA_IRQ_DESCRIPTOR\r
+{\r
+    UCHAR   Interrupt:4;\r
+    UCHAR   Reserved:1;\r
+    UCHAR   LevelTriggered:1;\r
+    UCHAR   Shared:1;\r
+    UCHAR   MoreEntries:1;\r
+} EISA_IRQ_DESCRIPTOR, *PEISA_IRQ_DESCRIPTOR;\r
+\r
+typedef struct _EISA_IRQ_CONFIGURATION\r
+{\r
+    EISA_IRQ_DESCRIPTOR ConfigurationByte;\r
+    UCHAR   Reserved;\r
+} EISA_IRQ_CONFIGURATION, *PEISA_IRQ_CONFIGURATION;\r
+\r
+typedef struct _EISA_DMA_CONFIGURATION\r
+{\r
+    DMA_CONFIGURATION_BYTE0 ConfigurationByte0;\r
+    DMA_CONFIGURATION_BYTE1 ConfigurationByte1;\r
+} EISA_DMA_CONFIGURATION, *PEISA_DMA_CONFIGURATION;\r
+\r
+\r
+typedef struct _EISA_PORT_DESCRIPTOR\r
+{\r
+    UCHAR   NumberPorts:5;\r
+    UCHAR   Reserved:1;\r
+    UCHAR   Shared:1;\r
+    UCHAR   MoreEntries:1;\r
+} EISA_PORT_DESCRIPTOR, *PEISA_PORT_DESCRIPTOR;\r
+\r
+typedef struct _EISA_PORT_CONFIGURATION\r
+{\r
+    EISA_PORT_DESCRIPTOR    Configuration;\r
+    USHORT  PortAddress;\r
+} EISA_PORT_CONFIGURATION, *PEISA_PORT_CONFIGURATION;\r
+\r
+typedef struct _CM_EISA_SLOT_INFORMATION\r
+{\r
+    UCHAR   ReturnCode;\r
+    UCHAR   ReturnFlags;\r
+    UCHAR   MajorRevision;\r
+    UCHAR   MinorRevision;\r
+    USHORT  Checksum;\r
+    UCHAR   NumberFunctions;\r
+    UCHAR   FunctionInformation;\r
+    ULONG   CompressedId;\r
+} CM_EISA_SLOT_INFORMATION, *PCM_EISA_SLOT_INFORMATION;\r
+\r
+typedef struct _CM_EISA_FUNCTION_INFORMATION\r
+{\r
+    ULONG   CompressedId;\r
+    UCHAR   IdSlotFlags1;\r
+    UCHAR   IdSlotFlags2;\r
+    UCHAR   MinorRevision;\r
+    UCHAR   MajorRevision;\r
+    UCHAR   Selections[26];\r
+    UCHAR   FunctionFlags;\r
+    UCHAR   TypeString[80];\r
+    EISA_MEMORY_CONFIGURATION   EisaMemory[9];\r
+    EISA_IRQ_CONFIGURATION      EisaIrq[7];\r
+    EISA_DMA_CONFIGURATION      EisaDma[4];\r
+    EISA_PORT_CONFIGURATION     EisaPort[20];\r
+    UCHAR   InitializationData[60];\r
+} CM_EISA_FUNCTION_INFORMATION, *PCM_EISA_FUNCTION_INFORMATION;\r
+\r
+\r
+typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR\r
+{\r
+    UCHAR   Type;\r
+    UCHAR   ShareDisposition;\r
+    USHORT  Flags;\r
+    union {\r
+        struct {\r
+            PHYSICAL_ADDRESS    Start;\r
+            ULONG               Length;\r
+        } Generic;\r
+\r
+        struct {\r
+            PHYSICAL_ADDRESS    Start;\r
+            ULONG               Length;\r
+        } Port;\r
+\r
+        struct {\r
+            ULONG   Level;\r
+            ULONG   Vector;\r
+            ULONG   Affinity;\r
+        } Interrupt;\r
+\r
+        struct {\r
+            PHYSICAL_ADDRESS    Start;\r
+            ULONG               Length;\r
+        } Memory;\r
+\r
+        struct {\r
+            ULONG   Channel;\r
+            ULONG   Port;\r
+            ULONG   Reserved1;\r
+        } Dma;\r
+\r
+        struct {\r
+            ULONG   Data[3];\r
+        } DevicePrivate;\r
+\r
+        struct {\r
+            ULONG   Start;\r
+            ULONG   Length;\r
+            ULONG   Reserved;\r
+        } BusNumber;\r
+\r
+        struct {\r
+            ULONG   DataSize;\r
+            ULONG   Reserved1;\r
+            ULONG   Reserved2;\r
+        } DeviceSpecificData;\r
+    } u;\r
+} CM_PARTIAL_RESOURCE_DESCRIPTOR, *PCM_PARTIAL_RESOURCE_DESCRIPTOR;\r
+\r
+typedef struct _CM_PARTIAL_RESOURCE_LIST\r
+{\r
+    USHORT  Version;\r
+    USHORT  Revision;\r
+    ULONG   Count;\r
+    CM_PARTIAL_RESOURCE_DESCRIPTOR  PartialDescriptors[1];\r
+} CM_PARTIAL_RESOURCE_LIST, *PCM_PARTIAL_RESOURCE_LIST;\r
+\r
+typedef struct _CM_FULL_RESOURCE_DESCRIPTOR\r
+{\r
+    INTERFACE_TYPE  InterfaceType;\r
+    ULONG           BusNumber;\r
+    CM_PARTIAL_RESOURCE_LIST    PartialResourceList;\r
+} CM_FULL_RESOURCE_DESCRIPTOR, *PCM_FULL_RESOURCE_DESCRIPTOR;\r
+\r
+typedef struct _CM_RESOURCE_LIST\r
+{\r
+    ULONG   Count;\r
+    CM_FULL_RESOURCE_DESCRIPTOR List[1];\r
+} CM_RESOURCE_LIST, *PCM_RESOURCE_LIST;\r
+\r
+\r
+\r
+/* Operating System services */\r
+\r
+/* Debugging */\r
+\r
+ULONG CDECL DbgPrint(\r
+    PCH Format,\r
+    ...);\r
+\r
+#ifdef DBG\r
+\r
+VOID\r
+STDCALL\r
+RtlAssert(\r
+    PVOID   FailedAssertion,\r
+    PVOID   FileName,\r
+    ULONG   LineNumber,\r
+    PCHAR   Message);\r
+\r
+#define ASSERT(exp) \\r
+    if (!(exp)) \\r
+        RtlAssert(#exp, __FILE__, __LINE__, NULL)\r
+\r
+#define ASSERTMSG(msg, exp) \\r
+    if (!(exp)) \\r
+        RtlAssert(#exp, __FILE__, __LINE__, msg)\r
+\r
+#else /* DBG */\r
+\r
+#define ASSERT(exp)\r
+#define ASSERTMSG(msg, exp)\r
+\r
+#endif /* DBG */\r
+\r
+\r
+/* Runtime library */\r
+\r
+#define RtlEqualMemory(Destination,Source,Length)   (!memcmp((Destination), (Source), (Length)))\r
+#define RtlMoveMemory(Destination,Source,Length)    memmove((Destination), (Source), (Length))\r
+#define RtlCopyMemory(Destination,Source,Length)    memcpy((Destination), (Source), (Length))\r
+#define RtlFillMemory(Destination,Length,Fill)      memset((Destination), (Fill),(Length))\r
+#define RtlZeroMemory(Destination,Length)           memset((Destination), 0, (Length))\r
+\r
+\r
+/* Core kernel functions */\r
+\r
+VOID\r
+STDCALL\r
+KeStallExecutionProcessor(\r
+    ULONG   MicroSeconds);\r
+\r
+\r
+/* I/O functions */\r
+\r
+VOID\r
+STDCALL\r
+READ_PORT_BUFFER_UCHAR(\r
+    PUCHAR  Port,\r
+    PUCHAR  Value,\r
+    ULONG   Count);\r
+\r
+VOID\r
+STDCALL\r
+READ_PORT_BUFFER_ULONG(\r
+    PULONG  Port,\r
+    PULONG  Value,\r
+    ULONG   Count);\r
+\r
+VOID\r
+STDCALL\r
+READ_PORT_BUFFER_USHORT(\r
+    PUSHORT Port,\r
+    PUSHORT Value,\r
+    ULONG   Count);\r
+\r
+UCHAR\r
+STDCALL\r
+READ_PORT_UCHAR(\r
+    PUCHAR  Port);\r
+\r
+ULONG\r
+STDCALL\r
+READ_PORT_ULONG(\r
+    PULONG  Port);\r
+\r
+USHORT\r
+STDCALL\r
+READ_PORT_USHORT(\r
+    PUSHORT Port);\r
+\r
+VOID\r
+STDCALL\r
+WRITE_PORT_BUFFER_UCHAR(\r
+    PUCHAR  Port,\r
+    PUCHAR  Value,\r
+    ULONG   Count);\r
+\r
+VOID\r
+STDCALL\r
+WRITE_PORT_BUFFER_ULONG(\r
+    PULONG  Port,\r
+    PULONG  Value,\r
+    ULONG   Count);\r
+\r
+VOID\r
+STDCALL\r
+WRITE_PORT_BUFFER_USHORT(\r
+    PUSHORT Port,\r
+    PUSHORT Value,\r
+    ULONG   Count);\r
+\r
+VOID\r
+STDCALL\r
+WRITE_PORT_UCHAR(\r
+    PUCHAR  Port,\r
+    UCHAR   Value);\r
+\r
+VOID\r
+STDCALL\r
+WRITE_PORT_ULONG(\r
+    PULONG  Port,\r
+    ULONG   Value);\r
+\r
+VOID\r
+STDCALL\r
+WRITE_PORT_USHORT(\r
+    PUSHORT Port,\r
+    USHORT  Value);\r
+\r
+VOID\r
+STDCALL\r
+WRITE_REGISTER_UCHAR(\r
+    PUCHAR  Register,\r
+    UCHAR   Value);\r
+\r
+VOID\r
+STDCALL\r
+WRITE_REGISTER_ULONG(\r
+    PULONG  Register,\r
+    ULONG   Value);\r
+\r
+VOID\r
+STDCALL\r
+WRITE_REGISTER_USHORT(\r
+    PUSHORT Register,\r
+    USHORT  Value);\r
+\r
+#endif /* __MINIPORT_H */\r
+\r
+/* EOF */\r
diff --git a/reactos/include/net/ndis.h b/reactos/include/net/ndis.h
new file mode 100644 (file)
index 0000000..703d608
--- /dev/null
@@ -0,0 +1,4455 @@
+/*\r
+ * COPYRIGHT:   See COPYING in the top level directory\r
+ * PROJECT:     ReactOS NDIS library\r
+ * FILE:        include/net/ndis.h\r
+ * PURPOSE:     Structures used by NDIS drivers\r
+ * DEFINES:     i386                 - Target platform is i386\r
+ *              NDIS_WRAPPER         - Define only for NDIS wrapper library\r
+ *              NDIS_MINIPORT_DRIVER - Define only for NDIS miniport drivers\r
+ *              BINARY_COMPATIBLE    - 0 = Use macros for some features\r
+ *                                   - 1 = Use imports for features not available\r
+ *              NDIS40               - Use NDIS 4.0 structures by default\r
+ *              NDIS50               - Use NDIS 5.0 structures by default\r
+ */\r
+#ifndef __NDIS_H\r
+#define __NDIS_H\r
+\r
+#ifdef __cplusplus\r
+extern "C"\r
+{\r
+#endif /* __cplusplus */\r
+\r
+#ifdef NDIS50\r
+#undef NDIS40\r
+#define NDIS40\r
+#endif\r
+\r
+\r
+/* Windows 9x compatibillity for miniports on x86 platform */\r
+#ifndef BINARY_COMPATIBLE\r
+#if defined(NDIS_MINIPORT_DRIVER) && defined(i386)\r
+#define BINARY_COMPATIBLE 1\r
+#else\r
+#define BINARY_COMPATIBLE 0\r
+#endif\r
+#endif\r
+\r
+#define UNALIGNED\r
+\r
+\r
+/* The NDIS library export functions. NDIS miniport drivers import functions */\r
+#ifdef NDIS_WRAPPER\r
+\r
+#ifdef _MSC_VER\r
+#define EXPIMP __declspec(dllexport)\r
+#else\r
+#define EXPIMP STDCALL\r
+#endif\r
+\r
+#else /* NDIS_WRAPPER */\r
+\r
+#ifdef _MSC_VER\r
+#define EXPIMP __declspec(dllimport)\r
+#else\r
+#define EXPIMP STDCALL\r
+#endif\r
+\r
+#endif /* NDIS_WRAPPER */\r
+\r
+\r
+\r
+#ifdef NDIS_MINIPORT_DRIVER\r
+\r
+#include "miniport.h"\r
+\r
+#else /* NDIS_MINIPORT_DRIVER */\r
+\r
+#ifdef _MSC_VER\r
+#include <ntddk.h>\r
+\r
+typedef ULONG ULONG_PTR, *PULONG_PTR;\r
+\r
+#else /* _MSC_VER */\r
+#include <ddk/ntddk.h>\r
+\r
+/* FIXME: Missed some definitions in there */\r
+\r
+typedef struct _DMA_CONFIGURATION_BYTE0\r
+{\r
+    UCHAR   Channel:3;\r
+    UCHAR   Reserved:3;\r
+    UCHAR   Shared:1;\r
+    UCHAR   MoreEntries:1;\r
+} DMA_CONFIGURATION_BYTE0;\r
+\r
+typedef struct _DMA_CONFIGURATION_BYTE1\r
+{\r
+    UCHAR   Reserved0:2;\r
+    UCHAR   TransferSize:2;\r
+    UCHAR   Timing:2;\r
+    UCHAR   Reserved1:2;\r
+} DMA_CONFIGURATION_BYTE1;\r
+\r
+\r
+typedef struct _CM_MCA_POS_DATA\r
+{\r
+    USHORT  AdapterId;\r
+    UCHAR   PosData1;\r
+    UCHAR   PosData2;\r
+    UCHAR   PosData3;\r
+    UCHAR   PosData4;\r
+} CM_MCA_POS_DATA, *PCM_MCA_POS_DATA;\r
+\r
+typedef struct _EISA_MEMORY_TYPE\r
+{\r
+    UCHAR   ReadWrite:1;\r
+    UCHAR   Cached:1;\r
+    UCHAR   Reserved0:1;\r
+    UCHAR   Type:2;\r
+    UCHAR   Shared:1;\r
+    UCHAR   Reserved1:1;\r
+    UCHAR   MoreEntries:1;\r
+} EISA_MEMORY_TYPE, *PEISA_MEMORY_TYPE;\r
+\r
+typedef struct _EISA_MEMORY_CONFIGURATION\r
+{\r
+    EISA_MEMORY_TYPE    ConfigurationByte;\r
+    UCHAR   DataSize;\r
+    USHORT  AddressLowWord;\r
+    UCHAR   AddressHighByte;\r
+    USHORT  MemorySize;\r
+} EISA_MEMORY_CONFIGURATION, *PEISA_MEMORY_CONFIGURATION;\r
+\r
+\r
+typedef struct _EISA_IRQ_DESCRIPTOR\r
+{\r
+    UCHAR   Interrupt:4;\r
+    UCHAR   Reserved:1;\r
+    UCHAR   LevelTriggered:1;\r
+    UCHAR   Shared:1;\r
+    UCHAR   MoreEntries:1;\r
+} EISA_IRQ_DESCRIPTOR, *PEISA_IRQ_DESCRIPTOR;\r
+\r
+typedef struct _EISA_IRQ_CONFIGURATION\r
+{\r
+    EISA_IRQ_DESCRIPTOR ConfigurationByte;\r
+    UCHAR   Reserved;\r
+} EISA_IRQ_CONFIGURATION, *PEISA_IRQ_CONFIGURATION;\r
+\r
+typedef struct _EISA_DMA_CONFIGURATION\r
+{\r
+    DMA_CONFIGURATION_BYTE0 ConfigurationByte0;\r
+    DMA_CONFIGURATION_BYTE1 ConfigurationByte1;\r
+} EISA_DMA_CONFIGURATION, *PEISA_DMA_CONFIGURATION;\r
+\r
+\r
+typedef struct _EISA_PORT_DESCRIPTOR\r
+{\r
+    UCHAR   NumberPorts:5;\r
+    UCHAR   Reserved:1;\r
+    UCHAR   Shared:1;\r
+    UCHAR   MoreEntries:1;\r
+} EISA_PORT_DESCRIPTOR, *PEISA_PORT_DESCRIPTOR;\r
+\r
+typedef struct _EISA_PORT_CONFIGURATION\r
+{\r
+    EISA_PORT_DESCRIPTOR    Configuration;\r
+    USHORT  PortAddress;\r
+} EISA_PORT_CONFIGURATION, *PEISA_PORT_CONFIGURATION;\r
+\r
+typedef struct _CM_EISA_SLOT_INFORMATION\r
+{\r
+    UCHAR   ReturnCode;\r
+    UCHAR   ReturnFlags;\r
+    UCHAR   MajorRevision;\r
+    UCHAR   MinorRevision;\r
+    USHORT  Checksum;\r
+    UCHAR   NumberFunctions;\r
+    UCHAR   FunctionInformation;\r
+    ULONG   CompressedId;\r
+} CM_EISA_SLOT_INFORMATION, *PCM_EISA_SLOT_INFORMATION;\r
+\r
+typedef struct _CM_EISA_FUNCTION_INFORMATION\r
+{\r
+    ULONG   CompressedId;\r
+    UCHAR   IdSlotFlags1;\r
+    UCHAR   IdSlotFlags2;\r
+    UCHAR   MinorRevision;\r
+    UCHAR   MajorRevision;\r
+    UCHAR   Selections[26];\r
+    UCHAR   FunctionFlags;\r
+    UCHAR   TypeString[80];\r
+    EISA_MEMORY_CONFIGURATION   EisaMemory[9];\r
+    EISA_IRQ_CONFIGURATION      EisaIrq[7];\r
+    EISA_DMA_CONFIGURATION      EisaDma[4];\r
+    EISA_PORT_CONFIGURATION     EisaPort[20];\r
+    UCHAR   InitializationData[60];\r
+} CM_EISA_FUNCTION_INFORMATION, *PCM_EISA_FUNCTION_INFORMATION;\r
+\r
+#endif /* _MSC_VER */\r
+\r
+/* FIXME: Missed some definitions in there */\r
+\r
+typedef CONST CHAR *PCSTR;\r
+\r
+/* Could be defined in tdi.h */\r
+#ifndef __TDI_H\r
+typedef signed int INT, *PINT;\r
+#endif /* __TDI_H */\r
+\r
+#endif /* NDIS_MINIPORT_DRIVER */\r
+\r
+#include "netevent.h"\r
+#include "ndisoid.h"\r
+\r
+\r
+\r
+/* More types */\r
+\r
+typedef ULONG ULONG_PTR, *PULONG_PTR;\r
+\r
+\r
+#if defined(NDIS_MINIPORT_DRIVER) || !defined(_MSC_VER)\r
+\r
+typedef struct _GUID {\r
+    ULONG   Data1;\r
+    USHORT  Data2;\r
+    USHORT  Data3;\r
+    UCHAR   Data4[8];\r
+} GUID;\r
+\r
+#endif /* NDIS_MINIPORT_DRIVER || _MSC_VER */\r
+\r
+\r
+/* NDIS base types */\r
+\r
+typedef struct _NDIS_SPIN_LOCK\r
+{\r
+    KSPIN_LOCK  SpinLock;\r
+    KIRQL       OldIrql;\r
+} NDIS_SPIN_LOCK, * PNDIS_SPIN_LOCK;\r
+\r
+typedef struct _NDIS_EVENT\r
+{\r
+    KEVENT  Event;\r
+} NDIS_EVENT, *PNDIS_EVENT;\r
+\r
+typedef PVOID NDIS_HANDLE, *PNDIS_HANDLE;\r
+typedef int NDIS_STATUS, *PNDIS_STATUS;\r
+\r
+typedef UNICODE_STRING NDIS_STRING, *PNDIS_STRING;\r
+\r
+typedef PCSTR NDIS_ANSI_STRING, *PNDIS_ANSI_STRING;\r
+\r
+typedef MDL NDIS_BUFFER, *PNDIS_BUFFER;\r
+\r
+/* NDIS_STATUS constants */\r
+#define NDIS_STATUS_SUCCESS                     ((NDIS_STATUS)STATUS_SUCCESS)\r
+#define NDIS_STATUS_PENDING                     ((NDIS_STATUS)STATUS_PENDING)\r
+#define NDIS_STATUS_NOT_RECOGNIZED              ((NDIS_STATUS)0x00010001L)\r
+#define NDIS_STATUS_NOT_COPIED                  ((NDIS_STATUS)0x00010002L)\r
+#define NDIS_STATUS_NOT_ACCEPTED                ((NDIS_STATUS)0x00010003L)\r
+#define NDIS_STATUS_CALL_ACTIVE                 ((NDIS_STATUS)0x00010007L)\r
+\r
+#define NDIS_STATUS_ONLINE                      ((NDIS_STATUS)0x40010003L)\r
+#define NDIS_STATUS_RESET_START                 ((NDIS_STATUS)0x40010004L)\r
+#define NDIS_STATUS_RESET_END                   ((NDIS_STATUS)0x40010005L)\r
+#define NDIS_STATUS_RING_STATUS                 ((NDIS_STATUS)0x40010006L)\r
+#define NDIS_STATUS_CLOSED                      ((NDIS_STATUS)0x40010007L)\r
+#define NDIS_STATUS_WAN_LINE_UP                 ((NDIS_STATUS)0x40010008L)\r
+#define NDIS_STATUS_WAN_LINE_DOWN               ((NDIS_STATUS)0x40010009L)\r
+#define NDIS_STATUS_WAN_FRAGMENT                ((NDIS_STATUS)0x4001000AL)\r
+#define        NDIS_STATUS_MEDIA_CONNECT               ((NDIS_STATUS)0x4001000BL)\r
+#define        NDIS_STATUS_MEDIA_DISCONNECT            ((NDIS_STATUS)0x4001000CL)\r
+#define NDIS_STATUS_HARDWARE_LINE_UP            ((NDIS_STATUS)0x4001000DL)\r
+#define NDIS_STATUS_HARDWARE_LINE_DOWN          ((NDIS_STATUS)0x4001000EL)\r
+#define NDIS_STATUS_INTERFACE_UP                ((NDIS_STATUS)0x4001000FL)\r
+#define NDIS_STATUS_INTERFACE_DOWN              ((NDIS_STATUS)0x40010010L)\r
+#define NDIS_STATUS_MEDIA_BUSY                  ((NDIS_STATUS)0x40010011L)\r
+#define        NDIS_STATUS_WW_INDICATION               ((NDIS_STATUS)0x40010012L)\r
+#define NDIS_STATUS_TAPI_INDICATION             ((NDIS_STATUS)0x40010080L)\r
+\r
+#define NDIS_STATUS_NOT_RESETTABLE              ((NDIS_STATUS)0x80010001L)\r
+#define NDIS_STATUS_SOFT_ERRORS                        ((NDIS_STATUS)0x80010003L)\r
+#define NDIS_STATUS_HARD_ERRORS                 ((NDIS_STATUS)0x80010004L)\r
+#define NDIS_STATUS_BUFFER_OVERFLOW                ((NDIS_STATUS)STATUS_BUFFER_OVERFLOW)\r
+\r
+#define NDIS_STATUS_FAILURE                        ((NDIS_STATUS)STATUS_UNSUCCESSFUL)\r
+#define NDIS_STATUS_RESOURCES                   ((NDIS_STATUS)STATUS_INSUFFICIENT_RESOURCES)\r
+#define NDIS_STATUS_CLOSING                        ((NDIS_STATUS)0xC0010002L)\r
+#define NDIS_STATUS_BAD_VERSION                        ((NDIS_STATUS)0xC0010004L)\r
+#define NDIS_STATUS_BAD_CHARACTERISTICS         ((NDIS_STATUS)0xC0010005L)\r
+#define NDIS_STATUS_ADAPTER_NOT_FOUND           ((NDIS_STATUS)0xC0010006L)\r
+#define NDIS_STATUS_OPEN_FAILED                        ((NDIS_STATUS)0xC0010007L)\r
+#define NDIS_STATUS_DEVICE_FAILED               ((NDIS_STATUS)0xC0010008L)\r
+#define NDIS_STATUS_MULTICAST_FULL              ((NDIS_STATUS)0xC0010009L)\r
+#define NDIS_STATUS_MULTICAST_EXISTS            ((NDIS_STATUS)0xC001000AL)\r
+#define NDIS_STATUS_MULTICAST_NOT_FOUND                ((NDIS_STATUS)0xC001000BL)\r
+#define NDIS_STATUS_REQUEST_ABORTED                ((NDIS_STATUS)0xC001000CL)\r
+#define NDIS_STATUS_RESET_IN_PROGRESS           ((NDIS_STATUS)0xC001000DL)\r
+#define NDIS_STATUS_CLOSING_INDICATING          ((NDIS_STATUS)0xC001000EL)\r
+#define NDIS_STATUS_NOT_SUPPORTED               ((NDIS_STATUS)STATUS_NOT_SUPPORTED)\r
+#define NDIS_STATUS_INVALID_PACKET              ((NDIS_STATUS)0xC001000FL)\r
+#define NDIS_STATUS_OPEN_LIST_FULL              ((NDIS_STATUS)0xC0010010L)\r
+#define NDIS_STATUS_ADAPTER_NOT_READY           ((NDIS_STATUS)0xC0010011L)\r
+#define NDIS_STATUS_ADAPTER_NOT_OPEN            ((NDIS_STATUS)0xC0010012L)\r
+#define NDIS_STATUS_NOT_INDICATING              ((NDIS_STATUS)0xC0010013L)\r
+#define NDIS_STATUS_INVALID_LENGTH              ((NDIS_STATUS)0xC0010014L)\r
+#define NDIS_STATUS_INVALID_DATA                ((NDIS_STATUS)0xC0010015L)\r
+#define NDIS_STATUS_BUFFER_TOO_SHORT            ((NDIS_STATUS)0xC0010016L)\r
+#define NDIS_STATUS_INVALID_OID                        ((NDIS_STATUS)0xC0010017L)\r
+#define NDIS_STATUS_ADAPTER_REMOVED                ((NDIS_STATUS)0xC0010018L)\r
+#define NDIS_STATUS_UNSUPPORTED_MEDIA           ((NDIS_STATUS)0xC0010019L)\r
+#define NDIS_STATUS_GROUP_ADDRESS_IN_USE        ((NDIS_STATUS)0xC001001AL)\r
+#define NDIS_STATUS_FILE_NOT_FOUND              ((NDIS_STATUS)0xC001001BL)\r
+#define NDIS_STATUS_ERROR_READING_FILE          ((NDIS_STATUS)0xC001001CL)\r
+#define NDIS_STATUS_ALREADY_MAPPED              ((NDIS_STATUS)0xC001001DL)\r
+#define NDIS_STATUS_RESOURCE_CONFLICT           ((NDIS_STATUS)0xC001001EL)\r
+#define NDIS_STATUS_NO_CABLE                    ((NDIS_STATUS)0xC001001FL)\r
+\r
+#define NDIS_STATUS_INVALID_SAP                        ((NDIS_STATUS)0xC0010020L)\r
+#define NDIS_STATUS_SAP_IN_USE                  ((NDIS_STATUS)0xC0010021L)\r
+#define NDIS_STATUS_INVALID_ADDRESS             ((NDIS_STATUS)0xC0010022L)\r
+#define NDIS_STATUS_VC_NOT_ACTIVATED            ((NDIS_STATUS)0xC0010023L)\r
+#define NDIS_STATUS_DEST_OUT_OF_ORDER           ((NDIS_STATUS)0xC0010024L)\r
+#define NDIS_STATUS_VC_NOT_AVAILABLE            ((NDIS_STATUS)0xC0010025L)\r
+#define NDIS_STATUS_CELLRATE_NOT_AVAILABLE      ((NDIS_STATUS)0xC0010026L)\r
+#define NDIS_STATUS_INCOMPATABLE_QOS            ((NDIS_STATUS)0xC0010027L)\r
+#define NDIS_STATUS_AAL_PARAMS_UNSUPPORTED      ((NDIS_STATUS)0xC0010028L)\r
+#define NDIS_STATUS_NO_ROUTE_TO_DESTINATION     ((NDIS_STATUS)0xC0010029L)\r
+\r
+#define NDIS_STATUS_TOKEN_RING_OPEN_ERROR       ((NDIS_STATUS)0xC0011000L)\r
+\r
+\r
+/* NDIS error codes for error logging */\r
+\r
+#define NDIS_ERROR_CODE ULONG\r
+\r
+#define NDIS_ERROR_CODE_RESOURCE_CONFLICT                      EVENT_NDIS_RESOURCE_CONFLICT\r
+#define NDIS_ERROR_CODE_OUT_OF_RESOURCES                       EVENT_NDIS_OUT_OF_RESOURCE\r
+#define NDIS_ERROR_CODE_HARDWARE_FAILURE                       EVENT_NDIS_HARDWARE_FAILURE\r
+#define NDIS_ERROR_CODE_ADAPTER_NOT_FOUND                      EVENT_NDIS_ADAPTER_NOT_FOUND\r
+#define NDIS_ERROR_CODE_INTERRUPT_CONNECT                      EVENT_NDIS_INTERRUPT_CONNECT\r
+#define NDIS_ERROR_CODE_DRIVER_FAILURE                         EVENT_NDIS_DRIVER_FAILURE\r
+#define NDIS_ERROR_CODE_BAD_VERSION                                    EVENT_NDIS_BAD_VERSION\r
+#define NDIS_ERROR_CODE_TIMEOUT                                                EVENT_NDIS_TIMEOUT\r
+#define NDIS_ERROR_CODE_NETWORK_ADDRESS                                EVENT_NDIS_NETWORK_ADDRESS\r
+#define NDIS_ERROR_CODE_UNSUPPORTED_CONFIGURATION      EVENT_NDIS_UNSUPPORTED_CONFIGURATION\r
+#define NDIS_ERROR_CODE_INVALID_VALUE_FROM_ADAPTER     EVENT_NDIS_INVALID_VALUE_FROM_ADAPTER\r
+#define NDIS_ERROR_CODE_MISSING_CONFIGURATION_PARAMETER        EVENT_NDIS_MISSING_CONFIGURATION_PARAMETER\r
+#define NDIS_ERROR_CODE_BAD_IO_BASE_ADDRESS                    EVENT_NDIS_BAD_IO_BASE_ADDRESS\r
+#define NDIS_ERROR_CODE_RECEIVE_SPACE_SMALL                    EVENT_NDIS_RECEIVE_SPACE_SMALL\r
+#define NDIS_ERROR_CODE_ADAPTER_DISABLED                       EVENT_NDIS_ADAPTER_DISABLED\r
+\r
+\r
+/* Memory allocation flags. Used by Ndis(Allocate|Free)Memory */\r
+#define NDIS_MEMORY_CONTIGUOUS  0x00000001\r
+#define NDIS_MEMORY_NONCACHED   0x00000002\r
+\r
+/* NIC attribute flags. Used by NdisMSetAttributes(Ex) */\r
+#define        NDIS_ATTRIBUTE_IGNORE_PACKET_TIMEOUT    0x00000001\r
+#define NDIS_ATTRIBUTE_IGNORE_REQUEST_TIMEOUT   0x00000002\r
+#define NDIS_ATTRIBUTE_IGNORE_TOKEN_RING_ERRORS 0x00000004\r
+#define NDIS_ATTRIBUTE_BUS_MASTER               0x00000008\r
+#define NDIS_ATTRIBUTE_INTERMEDIATE_DRIVER      0x00000010\r
+\r
+\r
+\r
+#define        MAXIMUM_PROCESSORS  32\r
+\r
+\r
+\r
+/* Lock */\r
+\r
+typedef union _NDIS_RW_LOCK_REFCOUNT\r
+{\r
+    UINT    RefCount;\r
+    UCHAR   cacheLine[16];\r
+} NDIS_RW_LOCK_REFCOUNT;\r
+\r
+typedef struct _NDIS_RW_LOCK\r
+{\r
+    union\r
+    {\r
+        struct\r
+        {\r
+            KSPIN_LOCK          SpinLock;\r
+            PVOID               Context;\r
+        };\r
+        UCHAR                   Reserved[16];\r
+        };\r
+\r
+    NDIS_RW_LOCK_REFCOUNT       RefCount[MAXIMUM_PROCESSORS];\r
+} NDIS_RW_LOCK, *PNDIS_RW_LOCK;\r
+\r
+typedef struct _LOCK_STATE\r
+{\r
+    USHORT  LockState;\r
+    KIRQL   OldIrql;\r
+} LOCK_STATE, *PLOCK_STATE;\r
+\r
+\r
+\r
+/* Timer */\r
+\r
+typedef VOID (*PNDIS_TIMER_FUNCTION)(\r
+    IN  PVOID   SystemSpecific1,\r
+    IN  PVOID   FunctionContext,\r
+    IN  PVOID   SystemSpecific2,\r
+    IN  PVOID   SystemSpecific3);\r
+\r
+typedef struct _NDIS_TIMER\r
+{\r
+    KTIMER  Timer;\r
+    KDPC    Dpc;\r
+} NDIS_TIMER, *PNDIS_TIMER;\r
+\r
+\r
+\r
+/* Hardware */\r
+\r
+typedef CM_MCA_POS_DATA NDIS_MCA_POS_DATA, *PNDIS_MCA_POS_DATA;\r
+typedef CM_EISA_SLOT_INFORMATION NDIS_EISA_SLOT_INFORMATION, *PNDIS_EISA_SLOT_INFORMATION;\r
+typedef CM_EISA_FUNCTION_INFORMATION NDIS_EISA_FUNCTION_INFORMATION, *PNDIS_EISA_FUNCTION_INFORMATION;\r
+typedef CM_PARTIAL_RESOURCE_LIST NDIS_RESOURCE_LIST, *PNDIS_RESOURCE_LIST;\r
+\r
+/* Hardware status codes (OID_GEN_HARDWARE_STATUS) */\r
+typedef enum _NDIS_HARDWARE_STATUS\r
+{\r
+    NdisHardwareStatusReady,\r
+    NdisHardwareStatusInitializing,\r
+    NdisHardwareStatusReset,\r
+    NdisHardwareStatusClosing,\r
+    NdisHardwareStatusNotReady\r
+} NDIS_HARDWARE_STATUS, *PNDIS_HARDWARE_STATUS;\r
+\r
+/* OID_GEN_GET_TIME_CAPS */\r
+typedef struct _GEN_GET_TIME_CAPS\r
+{\r
+    ULONG                       Flags;\r
+    ULONG                       ClockPrecision;\r
+} GEN_GET_TIME_CAPS, *PGEN_GET_TIME_CAPS;\r
+\r
+/* Flag bits */\r
+#define        READABLE_LOCAL_CLOCK                    0x00000001\r
+#define        CLOCK_NETWORK_DERIVED                   0x00000002\r
+#define        CLOCK_PRECISION                         0x00000004\r
+#define        RECEIVE_TIME_INDICATION_CAPABLE         0x00000008\r
+#define        TIMED_SEND_CAPABLE                      0x00000010\r
+#define        TIME_STAMP_CAPABLE                      0x00000020\r
+\r
+/* OID_GEN_GET_NETCARD_TIME */\r
+typedef struct _GEN_GET_NETCARD_TIME\r
+{\r
+    ULONGLONG   ReadTime;\r
+} GEN_GET_NETCARD_TIME, *PGEN_GET_NETCARD_TIME;\r
+\r
+/* NDIS driver medium (OID_GEN_MEDIA_SUPPORTED / OID_GEN_MEDIA_IN_USE) */\r
+typedef enum _NDIS_MEDIUM\r
+{\r
+    NdisMedium802_3,\r
+    NdisMedium802_5,\r
+    NdisMediumFddi,\r
+    NdisMediumWan,\r
+    NdisMediumLocalTalk,\r
+    NdisMediumDix,              /* Defined for convenience, not a real medium */\r
+    NdisMediumArcnetRaw,\r
+    NdisMediumArcnet878_2,\r
+    NdisMediumAtm,\r
+    NdisMediumWirelessWan,\r
+    NdisMediumIrda,\r
+    NdisMediumBpc,\r
+    NdisMediumCoWan,\r
+    NdisMedium1394,\r
+    NdisMediumMax\r
+} NDIS_MEDIUM, *PNDIS_MEDIUM;\r
+\r
+/* NDIS packet filter bits (OID_GEN_CURRENT_PACKET_FILTER) */\r
+#define NDIS_PACKET_TYPE_DIRECTED               0x00000001\r
+#define NDIS_PACKET_TYPE_MULTICAST              0x00000002\r
+#define NDIS_PACKET_TYPE_ALL_MULTICAST          0x00000004\r
+#define NDIS_PACKET_TYPE_BROADCAST              0x00000008\r
+#define NDIS_PACKET_TYPE_SOURCE_ROUTING         0x00000010\r
+#define NDIS_PACKET_TYPE_PROMISCUOUS            0x00000020\r
+#define NDIS_PACKET_TYPE_SMT                    0x00000040\r
+#define NDIS_PACKET_TYPE_ALL_LOCAL              0x00000080\r
+#define NDIS_PACKET_TYPE_GROUP                  0x00001000\r
+#define NDIS_PACKET_TYPE_ALL_FUNCTIONAL         0x00002000\r
+#define NDIS_PACKET_TYPE_FUNCTIONAL             0x00004000\r
+#define NDIS_PACKET_TYPE_MAC_FRAME              0x00008000\r
+\r
+/* NDIS protocol option bits (OID_GEN_PROTOCOL_OPTIONS) */\r
+#define NDIS_PROT_OPTION_ESTIMATED_LENGTH       0x00000001\r
+#define NDIS_PROT_OPTION_NO_LOOPBACK            0x00000002\r
+#define NDIS_PROT_OPTION_NO_RSVD_ON_RCVPKT      0x00000004\r
+\r
+/* NDIS MAC option bits (OID_GEN_MAC_OPTIONS) */\r
+#define NDIS_MAC_OPTION_COPY_LOOKAHEAD_DATA     0x00000001\r
+#define NDIS_MAC_OPTION_RECEIVE_SERIALIZED      0x00000002\r
+#define NDIS_MAC_OPTION_TRANSFERS_NOT_PEND      0x00000004\r
+#define NDIS_MAC_OPTION_NO_LOOPBACK             0x00000008\r
+#define NDIS_MAC_OPTION_FULL_DUPLEX             0x00000010\r
+#define        NDIS_MAC_OPTION_EOTX_INDICATION         0x00000020\r
+#define        NDIS_MAC_OPTION_8021P_PRIORITY          0x00000040\r
+#define NDIS_MAC_OPTION_RESERVED                0x80000000\r
+\r
+/* State of the LAN media (OID_GEN_MEDIA_CONNECT_STATUS) */\r
+typedef enum _NDIS_MEDIA_STATE\r
+{\r
+    NdisMediaStateConnected,\r
+    NdisMediaStateDisconnected\r
+} NDIS_MEDIA_STATE, *PNDIS_MEDIA_STATE;\r
+\r
+/* OID_GEN_SUPPORTED_GUIDS */\r
+typedef struct _NDIS_GUID\r
+{\r
+    GUID            Guid;\r
+    union\r
+    {\r
+        NDIS_OID    Oid;\r
+        NDIS_STATUS Status;\r
+    };\r
+    ULONG           Size;\r
+    ULONG           Flags;\r
+} NDIS_GUID, *PNDIS_GUID;\r
+\r
+#define        NDIS_GUID_TO_OID            0x00000001\r
+#define        NDIS_GUID_TO_STATUS         0x00000002\r
+#define        NDIS_GUID_ANSI_STRING       0x00000004\r
+#define        NDIS_GUID_UNICODE_STRING    0x00000008\r
+#define        NDIS_GUID_ARRAY             0x00000010\r
+\r
+\r
+\r
+typedef struct _NDIS_PACKET_POOL\r
+{\r
+    NDIS_SPIN_LOCK      SpinLock;\r
+    struct _NDIS_PACKET *FreeList;\r
+    UINT                PacketLength;\r
+    UCHAR               Buffer[1];\r
+} NDIS_PACKET_POOL, * PNDIS_PACKET_POOL;\r
+\r
+typedef struct _NDIS_PACKET_PRIVATE\r
+{\r
+    UINT                PhysicalCount;\r
+    UINT                TotalLength;\r
+    PNDIS_BUFFER        Head;\r
+    PNDIS_BUFFER        Tail;\r
+    PNDIS_PACKET_POOL   Pool;\r
+    UINT                Count;\r
+    ULONG               Flags;                  /* See fPACKET_xxx bits below */\r
+    BOOLEAN                ValidCounts;\r
+    UCHAR               NdisPacketFlags;\r
+    USHORT              NdisPacketOobOffset;\r
+} NDIS_PACKET_PRIVATE, * PNDIS_PACKET_PRIVATE;\r
+\r
+#define fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO    0x40\r
+#define fPACKET_ALLOCATED_BY_NDIS               0x80\r
+\r
+typedef struct _NDIS_PACKET {\r
+    NDIS_PACKET_PRIVATE  Private;\r
+    union {\r
+        struct {\r
+             UCHAR       MiniportReserved[2*sizeof(PVOID)];\r
+             UCHAR       WrapperReserved[2*sizeof(PVOID)];\r
+        };\r
+        struct {\r
+             UCHAR       MiniportReservedEx[3*sizeof(PVOID)];\r
+             UCHAR       WrapperReservedEx[sizeof(PVOID)];\r
+        };\r
+        struct {\r
+             UCHAR       MacReserved[4*sizeof(PVOID)];\r
+        };\r
+    };\r
+    ULONG_PTR            Reserved[2];\r
+    UCHAR                ProtocolReserved[1];\r
+} NDIS_PACKET, *PNDIS_PACKET, **PPNDIS_PACKET;\r
+\r
+typedef struct _NDIS_PACKET_OOB_DATA {\r
+    union {\r
+        ULONGLONG  TimeToSend;\r
+        ULONGLONG  TimeSent;\r
+    };\r
+    ULONGLONG      TimeReceived;\r
+    UINT           HeaderSize;\r
+    UINT           SizeMediaSpecificInfo;\r
+    PVOID          MediaSpecificInformation;\r
+    NDIS_STATUS    Status;\r
+} NDIS_PACKET_OOB_DATA, *PNDIS_PACKET_OOB_DATA;\r
+\r
+typedef struct _NDIS_PM_PACKET_PATTERN\r
+{\r
+    ULONG  Priority;\r
+    ULONG  Reserved;\r
+    ULONG  MaskSize;\r
+    ULONG  PatternOffset;\r
+    ULONG  PatternSize;\r
+    ULONG  PatternFlags;\r
+} NDIS_PM_PACKET_PATTERN,  *PNDIS_PM_PACKET_PATTERN;\r
+\r
+\r
+/* Request types used by NdisRequest */\r
+typedef enum _NDIS_REQUEST_TYPE\r
+{\r
+    NdisRequestQueryInformation,\r
+    NdisRequestSetInformation,\r
+    NdisRequestQueryStatistics,\r
+    NdisRequestOpen,\r
+    NdisRequestClose,\r
+    NdisRequestSend,\r
+    NdisRequestTransferData,\r
+    NdisRequestReset,\r
+    NdisRequestGeneric1,\r
+    NdisRequestGeneric2,\r
+    NdisRequestGeneric3,\r
+    NdisRequestGeneric4\r
+} NDIS_REQUEST_TYPE, *PNDIS_REQUEST_TYPE;\r
+\r
+typedef struct _NDIS_REQUEST {\r
+    UCHAR             MacReserved[16];\r
+    NDIS_REQUEST_TYPE RequestType;\r
+    union _DATA {\r
+        struct QUERY_INFORMATION {\r
+            NDIS_OID  Oid;\r
+            PVOID     InformationBuffer;\r
+            UINT      InformationBufferLength;\r
+            UINT      BytesWritten;\r
+            UINT      BytesNeeded;\r
+        } QUERY_INFORMATION;\r
+        struct SET_INFORMATION {\r
+            NDIS_OID  Oid;\r
+            PVOID     InformationBuffer;\r
+            UINT      InformationBufferLength;\r
+            UINT      BytesRead;\r
+            UINT      BytesNeeded;\r
+        } SET_INFORMATION;\r
+   } DATA;\r
+} NDIS_REQUEST, *PNDIS_REQUEST;\r
+\r
+\r
+\r
+/* Wide Area Networks definitions */\r
+\r
+typedef struct _NDIS_WAN_PACKET\r
+{\r
+    LIST_ENTRY  WanPacketQueue;\r
+    PUCHAR      CurrentBuffer;\r
+    ULONG       CurrentLength;\r
+    PUCHAR      StartBuffer;\r
+    PUCHAR      EndBuffer;\r
+    PVOID       ProtocolReserved1;\r
+    PVOID       ProtocolReserved2;\r
+    PVOID       ProtocolReserved3;\r
+    PVOID       ProtocolReserved4;\r
+    PVOID       MacReserved1;\r
+    PVOID       MacReserved2;\r
+    PVOID       MacReserved3;\r
+    PVOID       MacReserved4;\r
+} NDIS_WAN_PACKET, *PNDIS_WAN_PACKET;\r
+\r
+\r
+\r
+/* DMA channel information */\r
+\r
+typedef struct _NDIS_DMA_DESCRIPTION\r
+{\r
+    BOOLEAN     DemandMode;\r
+    BOOLEAN     AutoInitialize;\r
+    BOOLEAN     DmaChannelSpecified;\r
+    DMA_WIDTH   DmaWidth;\r
+    DMA_SPEED   DmaSpeed;\r
+    ULONG       DmaPort;\r
+    ULONG       DmaChannel;\r
+} NDIS_DMA_DESCRIPTION, *PNDIS_DMA_DESCRIPTION;\r
+\r
+typedef struct _NDIS_DMA_BLOCK\r
+{\r
+    PVOID           MapRegisterBase;\r
+    KEVENT          AllocationEvent;\r
+    PADAPTER_OBJECT SystemAdapterObject;\r
+    BOOLEAN         InProgress;\r
+} NDIS_DMA_BLOCK, *PNDIS_DMA_BLOCK;\r
+\r
+\r
+/* Possible hardware architecture */\r
+typedef enum _NDIS_INTERFACE_TYPE\r
+{\r
+       NdisInterfaceInternal       = Internal,\r
+       NdisInterfaceIsa            = Isa,\r
+       NdisInterfaceEisa           = Eisa,\r
+       NdisInterfaceMca            = MicroChannel,\r
+       NdisInterfaceTurboChannel   = TurboChannel,\r
+       NdisInterfacePci            = PCIBus,\r
+       NdisInterfacePcMcia         = PCMCIABus\r
+} NDIS_INTERFACE_TYPE, *PNDIS_INTERFACE_TYPE;\r
+\r
+#define NdisInterruptLatched        Latched\r
+#define NdisInterruptLevelSensitive LevelSensitive\r
+typedef KINTERRUPT_MODE NDIS_INTERRUPT_MODE, *PNDIS_INTERRUPT_MODE;\r
+\r
+\r
+typedef enum _NDIS_PARAMETER_TYPE\r
+{\r
+    NdisParameterInteger,\r
+    NdisParameterHexInteger,\r
+    NdisParameterString,\r
+    NdisParameterMultiString\r
+} NDIS_PARAMETER_TYPE, *PNDIS_PARAMETER_TYPE;\r
+\r
+typedef struct _NDIS_CONFIGURATION_PARAMETER\r
+{\r
+    NDIS_PARAMETER_TYPE ParameterType;\r
+    union\r
+    {\r
+        ULONG IntegerData;\r
+        NDIS_STRING StringData;\r
+    } ParameterData;\r
+} NDIS_CONFIGURATION_PARAMETER, *PNDIS_CONFIGURATION_PARAMETER;\r
+\r
+\r
+typedef PHYSICAL_ADDRESS NDIS_PHYSICAL_ADDRESS, *PNDIS_PHYSICAL_ADDRESS;\r
+\r
+typedef struct _NDIS_PHYSICAL_ADDRESS_UNIT\r
+{\r
+       NDIS_PHYSICAL_ADDRESS           PhysicalAddress;\r
+       UINT                                            Length;\r
+} NDIS_PHYSICAL_ADDRESS_UNIT, *PNDIS_PHYSICAL_ADDRESS_UNIT;\r
+\r
+\r
+typedef VOID (*ADAPTER_SHUTDOWN_HANDLER)(\r
+    IN  PVOID   ShutdownContext);\r
+\r
+\r
+\r
+#if defined(NDIS_WRAPPER) || !defined(NDIS_MINIPORT_DRIVER)\r
+\r
+/* Structures available only to full MAC drivers */\r
+\r
+typedef BOOLEAN (*PNDIS_INTERRUPT_SERVICE)(\r
+    IN  PVOID   InterruptContext);\r
+\r
+typedef VOID (*PNDIS_DEFERRED_PROCESSING)(\r
+    IN  PVOID   SystemSpecific1,\r
+    IN  PVOID   InterruptContext,\r
+    IN  PVOID   SystemSpecific2,\r
+    IN  PVOID   SystemSpecific3);\r
+\r
+\r
+typedef struct _NDIS_INTERRUPT\r
+{\r
+    PKINTERRUPT                 InterruptObject;\r
+    KSPIN_LOCK                  DpcCountLock;\r
+    PNDIS_INTERRUPT_SERVICE     MacIsr;\r
+    PNDIS_DEFERRED_PROCESSING   MacDpc;\r
+    KDPC                        InterruptDpc;\r
+    PVOID                       InterruptContext;\r
+    UCHAR                       DpcCount;\r
+    BOOLEAN                     Removing;\r
+    /* Used to tell when all DPCs for the adapter are completed */\r
+    KEVENT                                             DpcsCompletedEvent;\r
+} NDIS_INTERRUPT, *PNDIS_INTERRUPT;\r
+\r
+\r
+/* NDIS adapter information */\r
+\r
+typedef NDIS_STATUS (*PNDIS_ACTIVATE_CALLBACK)(\r
+    IN  NDIS_HANDLE NdisAdatperHandle,\r
+    IN  NDIS_HANDLE MacAdapterContext,\r
+    IN  ULONG       DmaChannel);\r
+\r
+typedef struct _NDIS_PORT_DESCRIPTOR\r
+{\r
+    ULONG   InitialPort;\r
+    ULONG   NumberOfPorts;\r
+    PVOID * PortOffset;\r
+} NDIS_PORT_DESCRIPTOR, *PNDIS_PORT_DESCRIPTOR;\r
+\r
+typedef struct _NDIS_ADAPTER_INFORMATION\r
+{\r
+    ULONG                   DmaChannel;\r
+    BOOLEAN                    Master;\r
+    BOOLEAN                    Dma32BitAddresses;\r
+    PNDIS_ACTIVATE_CALLBACK ActivateCallback;\r
+    NDIS_INTERFACE_TYPE     AdapterType;\r
+    ULONG                   PhysicalMapRegistersNeeded;\r
+    ULONG                   MaximumPhysicalMapping;\r
+    ULONG                   NumberOfPortDescriptors;\r
+    NDIS_PORT_DESCRIPTOR    PortDescriptors[1];\r
+} NDIS_ADAPTER_INFORMATION, *PNDIS_ADAPTER_INFORMATION;\r
+\r
+\r
+/* Prototypes for NDIS_MAC_CHARACTERISTICS */\r
+\r
+typedef NDIS_STATUS (*OPEN_ADAPTER_HANDLER)(\r
+    OUT PNDIS_STATUS    OpenErrorStatus,\r
+    OUT NDIS_HANDLE *   MacBindingHandle,\r
+    OUT PUINT           SelectedMediumIndex,\r
+    IN  PNDIS_MEDIUM    MediumArray,\r
+    IN  UINT            MediumArraySize,\r
+    IN  NDIS_HANDLE     NdisBindingContext,\r
+    IN  NDIS_HANDLE     MacAdapterContext,\r
+    IN  UINT            OpenOptions,\r
+    IN  PSTRING         AddressingInformation OPTIONAL);\r
+\r
+typedef NDIS_STATUS (*CLOSE_ADAPTER_HANDLER)(\r
+    IN  NDIS_HANDLE MacBindingHandle);\r
+\r
+typedef NDIS_STATUS (*SEND_HANDLER)(\r
+    IN  NDIS_HANDLE     MacBindingHandle,\r
+    IN  PNDIS_PACKET    Packet);\r
+\r
+typedef NDIS_STATUS (*WAN_SEND_HANDLER)(\r
+    IN  NDIS_HANDLE         MacBindingHandle,\r
+    IN  PNDIS_WAN_PACKET    Packet);\r
+\r
+typedef NDIS_STATUS (*TRANSFER_DATA_HANDLER)(\r
+    IN  NDIS_HANDLE     MacBindingHandle,\r
+    IN  NDIS_HANDLE     MacReceiveContext,\r
+    IN  UINT            ByteOffset,\r
+    IN  UINT            BytesToTransfer,\r
+    OUT PNDIS_PACKET    Packet,\r
+    OUT PUINT           BytesTransferred);\r
+\r
+typedef NDIS_STATUS (*WAN_TRANSFER_DATA_HANDLER)(\r
+    VOID);\r
+\r
+typedef NDIS_STATUS (*RESET_HANDLER)(\r
+    IN  NDIS_HANDLE MacBindingHandle);\r
+\r
+typedef NDIS_STATUS (*REQUEST_HANDLER)(\r
+    IN  NDIS_HANDLE     MacBindingHandle,\r
+    IN  PNDIS_REQUEST   NdisRequest);\r
+\r
+typedef NDIS_STATUS (*QUERY_GLOBAL_STATISTICS_HANDLER)(\r
+    IN  NDIS_HANDLE     MacAdapterContext,\r
+    IN  PNDIS_REQUEST   NdisRequest);\r
+\r
+typedef VOID (*UNLOAD_MAC_HANDLER)(\r
+    IN  NDIS_HANDLE MacMacContext);\r
+\r
+typedef NDIS_STATUS (*ADD_ADAPTER_HANDLER)(\r
+    IN  NDIS_HANDLE     MacMacContext,\r
+    IN  NDIS_HANDLE     WrapperConfigurationContext,\r
+    IN  PNDIS_STRING    AdapterName);\r
+\r
+typedef VOID (*REMOVE_ADAPTER_HANDLER)(\r
+    IN  NDIS_HANDLE MacAdapterContext);\r
+\r
+typedef struct _NDIS_MAC_CHARACTERISTICS\r
+{\r
+    UCHAR                           MajorNdisVersion;\r
+    UCHAR                           MinorNdisVersion;\r
+    UINT                            Reserved;\r
+    OPEN_ADAPTER_HANDLER            OpenAdapterHandler;\r
+    CLOSE_ADAPTER_HANDLER           CloseAdapterHandler;\r
+    SEND_HANDLER                    SendHandler;\r
+    TRANSFER_DATA_HANDLER           TransferDataHandler;\r
+    RESET_HANDLER                   ResetHandler;\r
+    REQUEST_HANDLER                 RequestHandler;\r
+    QUERY_GLOBAL_STATISTICS_HANDLER QueryGlobalStatisticsHandler;\r
+    UNLOAD_MAC_HANDLER              UnloadMacHandler;\r
+    ADD_ADAPTER_HANDLER             AddAdapterHandler;\r
+    REMOVE_ADAPTER_HANDLER          RemoveAdapterHandler;\r
+    NDIS_STRING                     Name;\r
+} NDIS_MAC_CHARACTERISTICS, *PNDIS_MAC_CHARACTERISTICS;\r
+\r
+typedef        NDIS_MAC_CHARACTERISTICS        NDIS_WAN_MAC_CHARACTERISTICS;\r
+typedef        NDIS_WAN_MAC_CHARACTERISTICS    *PNDIS_WAN_MAC_CHARACTERISTICS;\r
+\r
+\r
+\r
+/* Functions available only to full MAC drivers */\r
+\r
+VOID\r
+EXPIMP\r
+NdisAllocateSharedMemory(\r
+    IN  NDIS_HANDLE             NdisAdapterHandle,\r
+    IN  ULONG                   Length,\r
+    IN  BOOLEAN                 Cached,\r
+    OUT PVOID                   *VirtualAddress,\r
+    OUT PNDIS_PHYSICAL_ADDRESS  PhysicalAddress);\r
+\r
+VOID\r
+EXPIMP\r
+NdisCompleteCloseAdapter(\r
+    IN  NDIS_HANDLE NdisBindingContext,\r
+    IN  NDIS_STATUS Status);\r
+\r
+VOID\r
+EXPIMP\r
+NdisCompleteOpenAdapter(\r
+    IN  NDIS_HANDLE NdisBindingContext,\r
+    IN  NDIS_STATUS Status,\r
+    IN  NDIS_STATUS OpenErrorStatus);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisDeregisterAdapter(\r
+    IN  NDIS_HANDLE NdisAdapterHandle);\r
+\r
+VOID\r
+EXPIMP\r
+NdisDeregisterAdapterShutdownHandler(\r
+    IN  NDIS_HANDLE NdisAdapterHandle);\r
+\r
+VOID\r
+EXPIMP\r
+NdisFreeSharedMemory(\r
+    IN  NDIS_HANDLE             NdisAdapterHandle,\r
+    IN  ULONG                   Length,\r
+    IN  BOOLEAN                 Cached,\r
+    IN  PVOID                   VirtualAddress,\r
+    IN  NDIS_PHYSICAL_ADDRESS   PhysicalAddress);\r
+\r
+VOID\r
+EXPIMP\r
+NdisInitializeInterrupt(\r
+    OUT     PNDIS_STATUS                Status,\r
+    IN OUT  PNDIS_INTERRUPT             Interrupt,\r
+    IN      NDIS_HANDLE                 NdisAdapterHandle,\r
+    IN      PNDIS_INTERRUPT_SERVICE     InterruptServiceRoutine,\r
+    IN      PVOID                       InterruptContext,\r
+    IN      PNDIS_DEFERRED_PROCESSING   DeferredProcessingRoutine,\r
+    IN      UINT                        InterruptVector,\r
+    IN      UINT                        InterruptLevel,\r
+    IN      BOOLEAN                     SharedInterrupt,\r
+    IN      NDIS_INTERRUPT_MODE         InterruptMode);\r
+\r
+VOID\r
+EXPIMP\r
+NdisMapIoSpace(\r
+    OUT PNDIS_STATUS            Status,\r
+    OUT PVOID                   *VirtualAddress,\r
+    IN  NDIS_HANDLE             NdisAdapterHandle,\r
+    IN  NDIS_PHYSICAL_ADDRESS   PhysicalAddress,\r
+    IN  UINT                    Length);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisRegisterAdapter(\r
+    OUT PNDIS_HANDLE    NdisAdapterHandle,\r
+    IN  NDIS_HANDLE     NdisMacHandle,\r
+    IN  NDIS_HANDLE     MacAdapterContext,\r
+    IN  NDIS_HANDLE     WrapperConfigurationContext,\r
+    IN  PNDIS_STRING    AdapterName,\r
+    IN  PVOID           AdapterInformation);\r
+\r
+VOID\r
+EXPIMP\r
+NdisRegisterAdapterShutdownHandler(\r
+    IN  NDIS_HANDLE                 NdisAdapterHandle,\r
+    IN  PVOID                       ShutdownContext,\r
+    IN  ADAPTER_SHUTDOWN_HANDLER    ShutdownHandler);\r
+\r
+VOID\r
+EXPIMP\r
+NdisRegisterMac(\r
+    OUT PNDIS_STATUS                Status,\r
+    OUT PNDIS_HANDLE                NdisMacHandle,\r
+    IN  NDIS_HANDLE                 NdisWrapperHandle,\r
+    IN  NDIS_HANDLE                 MacMacContext,\r
+    IN  PNDIS_MAC_CHARACTERISTICS   MacCharacteristics,\r
+    IN  UINT                        CharacteristicsLength);\r
+\r
+VOID\r
+EXPIMP\r
+NdisReleaseAdapterResources(\r
+    IN  NDIS_HANDLE NdisAdapterHandle);\r
+\r
+VOID\r
+EXPIMP\r
+NdisRemoveInterrupt(\r
+    IN  PNDIS_INTERRUPT Interrupt);\r
+\r
+#endif /* NDIS_WRAPPER || !NDIS_MINIPORT_DRIVER */\r
+\r
+\r
+\r
+#ifdef NDIS50\r
+\r
+typedef struct _ATM_ADDRESS ATM_ADDRESS, *PATM_ADDRESS;\r
+\r
+\r
+/* OID_GEN_NETWORK_LAYER_ADDRESSES */\r
+typedef struct _NETWORK_ADDRESS\r
+{\r
+    USHORT  AddressLength; \r
+    USHORT  AddressType; \r
+    UCHAR   Address[1]; \r
+} NETWORK_ADDRESS, *PNETWORK_ADDRESS;\r
+\r
+typedef struct _NETWORK_ADDRESS_LIST \r
+{\r
+    LONG    AddressCount; \r
+    USHORT  AddressType; \r
+    NETWORK_ADDRESS Address[1]; \r
+} NETWORK_ADDRESS_LIST, *PNETWORK_ADDRESS_LIST;\r
+\r
+/* Protocol types supported by NDIS */\r
+#define        NDIS_PROTOCOL_ID_DEFAULT        0x00\r
+#define        NDIS_PROTOCOL_ID_TCP_IP         0x02\r
+#define        NDIS_PROTOCOL_ID_IPX            0x06\r
+#define        NDIS_PROTOCOL_ID_NBF            0x07\r
+#define        NDIS_PROTOCOL_ID_MAX            0x0F\r
+#define        NDIS_PROTOCOL_ID_MASK           0x0F\r
+\r
+/* OID_GEN_TRANSPORT_HEADER_OFFSET */\r
+typedef struct _TRANSPORT_HEADER_OFFSET\r
+{\r
+    USHORT  ProtocolType; \r
+    USHORT  HeaderOffset; \r
+} TRANSPORT_HEADER_OFFSET, *PTRANSPORT_HEADER_OFFSET;\r
+\r
+\r
+/* OID_GEN_CO_LINK_SPEED / OID_GEN_CO_MINIMUM_LINK_SPEED */\r
+typedef struct _NDIS_CO_LINK_SPEED\r
+{\r
+    ULONG   Outbound;\r
+    ULONG   Inbound;\r
+} NDIS_CO_LINK_SPEED, *PNDIS_CO_LINK_SPEED;\r
+\r
+\r
+typedef enum _NDIS_AF\r
+{\r
+    CO_ADDRESS_FAMILY_Q2931 = 1,\r
+    CO_ADDRESS_FAMILY_SPANS,\r
+} NDIS_AF, *PNDIS_AF;\r
+\r
+typedef struct\r
+{\r
+    NDIS_AF  AddressFamily;\r
+    ULONG    MajorVersion;\r
+    ULONG    MinorVersion;\r
+} CO_ADDRESS_FAMILY, *PCO_ADDRESS_FAMILY;\r
+\r
+typedef enum\r
+{\r
+    BestEffortService,\r
+    PredictiveService,\r
+    GuaranteedService\r
+} GUARANTEE;\r
+\r
+typedef struct _CO_FLOW_PARAMETERS\r
+{\r
+    ULONG       TokenRate;              /* In Bytes/sec */\r
+    ULONG       TokenBucketSize;        /* In Bytes */\r
+    ULONG       PeakBandwidth;          /* In Bytes/sec */\r
+    ULONG       Latency;                /* In microseconds */\r
+    ULONG       DelayVariation;         /* In microseconds */\r
+    GUARANTEE   LevelOfGuarantee;       /* Guaranteed, Predictive or Best Effort */\r
+    ULONG       CostOfCall;             /* Reserved for future use, */\r
+                                        /* must be set to 0 now */\r
+    ULONG       NetworkAvailability;    /* read-only: 1 if accessible, 0 if not */\r
+    ULONG       MaxSduSize;             /* In Bytes */\r
+} CO_FLOW_PARAMETERS, *PCO_FLOW_PARAMETERS;\r
+\r
+typedef struct _CO_SPECIFIC_PARAMETERS\r
+{\r
+    ULONG   ParamType;\r
+    ULONG   Length;\r
+    UCHAR   Parameters[1];\r
+} CO_SPECIFIC_PARAMETERS, *PCO_SPECIFIC_PARAMETERS;\r
+\r
+typedef struct _CO_CALL_MANAGER_PARAMETERS {\r
+    CO_FLOW_PARAMETERS      Transmit;\r
+    CO_FLOW_PARAMETERS      Receive;\r
+    CO_SPECIFIC_PARAMETERS  CallMgrSpecific;\r
+} CO_CALL_MANAGER_PARAMETERS, *PCO_CALL_MANAGER_PARAMETERS;\r
+\r
+typedef struct _CO_MEDIA_PARAMETERS\r
+{\r
+    ULONG                       Flags;\r
+    ULONG                       ReceivePriority;\r
+    ULONG                       ReceiveSizeHint;\r
+    CO_SPECIFIC_PARAMETERS      MediaSpecific;\r
+} CO_MEDIA_PARAMETERS, *PCO_MEDIA_PARAMETERS;\r
+\r
+/* Definitions for the flags in CO_MEDIA_PARAMETERS */\r
+#define RECEIVE_TIME_INDICATION         0x00000001\r
+#define USE_TIME_STAMPS                 0x00000002\r
+#define TRANSMIT_VC                        0x00000004\r
+#define RECEIVE_VC                      0x00000008\r
+#define INDICATE_ERRED_PACKETS          0x00000010\r
+#define INDICATE_END_OF_TX              0x00000020\r
+#define RESERVE_RESOURCES_VC            0x00000040\r
+#define        ROUND_DOWN_FLOW                 0x00000080\r
+#define        ROUND_UP_FLOW                   0x00000100\r
+\r
+typedef struct _CO_CALL_PARAMETERS\r
+{\r
+    ULONG                           Flags;\r
+    PCO_CALL_MANAGER_PARAMETERS     CallMgrParameters;\r
+    PCO_MEDIA_PARAMETERS            MediaParameters;\r
+} CO_CALL_PARAMETERS, *PCO_CALL_PARAMETERS;\r
+\r
+typedef struct _CO_SAP {\r
+    ULONG   SapType;\r
+    ULONG   SapLength;\r
+    UCHAR   Sap[1];\r
+} CO_SAP, *PCO_SAP;\r
+\r
+typedef struct _NDIS_IPSEC_PACKET_INFO\r
+{\r
+    union\r
+    {\r
+        struct\r
+        {\r
+            NDIS_HANDLE    OffloadHandle;\r
+            NDIS_HANDLE    NextOffloadHandle;\r
+        } Transmit;\r
\r
+        struct\r
+        {\r
+            ULONG    SA_DELETE_REQ:1;\r
+            ULONG    CRYPTO_DONE:1;\r
+            ULONG    NEXT_CRYPTO_DONE:1;\r
+            ULONG    CryptoStatus;\r
+        } Receive;\r
+    };\r
+} NDIS_IPSEC_PACKET_INFO, *PNDIS_IPSEC_PACKET_INFO;\r
+\r
+\r
+/* Plug and play and power management */\r
+\r
+/* PnP and PM event codes */\r
+typedef enum _NET_PNP_EVENT_CODE\r
+{\r
+    NetEventSetPower,\r
+    NetEventQueryPower,\r
+    NetEventQueryRemoveDevice,\r
+    NetEventCancelRemoveDevice,\r
+    NetEventReconfigure,\r
+    NetEventBindList,\r
+    NetEventBindsComplete,\r
+    NetEventPnPCapabilities,\r
+    NetEventMaximum\r
+} NET_PNP_EVENT_CODE, *PNET_PNP_EVENT_CODE;\r
+\r
+/* Networking PnP event indication structure */\r
+typedef struct _NET_PNP_EVENT\r
+{\r
+    /* Event code */\r
+    NET_PNP_EVENT_CODE  NetEvent;\r
+    /* Event specific data */\r
+    PVOID               Buffer;\r
+    /* Length of event specific data */\r
+    ULONG               BufferLength;\r
+\r
+    /* Reserved areas */\r
+       ULONG_PTR           NdisReserved[4];\r
+       ULONG_PTR           TransportReserved[4];\r
+       ULONG_PTR           TdiReserved[4];\r
+       ULONG_PTR           TdiClientReserved[4];\r
+} NET_PNP_EVENT, *PNET_PNP_EVENT;\r
+\r
+/* Device power state structure */\r
+typedef enum _NET_DEVICE_POWER_STATE\r
+{\r
+    NetDeviceStateUnspecified = 0,\r
+    NetDeviceStateD0,\r
+    NetDeviceStateD1,\r
+    NetDeviceStateD2,\r
+    NetDeviceStateD3,\r
+    NetDeviceStateMaximum\r
+} NET_DEVICE_POWER_STATE, *PNET_DEVICE_POWER_STATE;\r
+\r
+\r
+\r
+/* Call Manager */\r
+\r
+typedef NDIS_STATUS (*CO_CREATE_VC_HANDLER)(\r
+    IN  NDIS_HANDLE     ProtocolAfContext,\r
+    IN  NDIS_HANDLE     NdisVcHandle,\r
+    OUT PNDIS_HANDLE    ProtocolVcContext);\r
+\r
+typedef NDIS_STATUS (*CO_DELETE_VC_HANDLER)(\r
+    IN  NDIS_HANDLE ProtocolVcContext);\r
+\r
+typedef NDIS_STATUS (*CO_REQUEST_HANDLER)(\r
+    IN  NDIS_HANDLE         ProtocolAfContext,\r
+    IN  NDIS_HANDLE         ProtocolVcContext       OPTIONAL,\r
+    IN  NDIS_HANDLE            ProtocolPartyContext    OPTIONAL,\r
+    IN  OUT PNDIS_REQUEST   NdisRequest);\r
+\r
+typedef VOID (*CO_REQUEST_COMPLETE_HANDLER)(\r
+    IN  NDIS_STATUS     Status,\r
+    IN  NDIS_HANDLE     ProtocolAfContext       OPTIONAL,\r
+    IN  NDIS_HANDLE     ProtocolVcContext       OPTIONAL,\r
+    IN  NDIS_HANDLE     ProtocolPartyContext    OPTIONAL,\r
+    IN  PNDIS_REQUEST   NdisRequest);\r
+\r
+\r
+typedef NDIS_STATUS (*CM_OPEN_AF_HANDLER)(\r
+       IN      NDIS_HANDLE                             CallMgrBindingContext,\r
+       IN      PCO_ADDRESS_FAMILY              AddressFamily,\r
+       IN      NDIS_HANDLE                             NdisAfHandle,\r
+       OUT     PNDIS_HANDLE                    CallMgrAfContext\r
+       );\r
+\r
+typedef\r
+NDIS_STATUS\r
+(*CM_CLOSE_AF_HANDLER)(\r
+       IN      NDIS_HANDLE                             CallMgrAfContext\r
+       );\r
+\r
+typedef\r
+NDIS_STATUS\r
+(*CM_REG_SAP_HANDLER)(\r
+       IN      NDIS_HANDLE                             CallMgrAfContext,\r
+       IN      PCO_SAP                                 Sap,\r
+       IN      NDIS_HANDLE                             NdisSapHandle,\r
+       OUT     PNDIS_HANDLE                    CallMgrSapContext\r
+       );\r
+\r
+typedef\r
+NDIS_STATUS\r
+(*CM_DEREG_SAP_HANDLER)(\r
+       IN      NDIS_HANDLE                             CallMgrSapContext\r
+       );\r
+\r
+typedef\r
+NDIS_STATUS\r
+(*CM_MAKE_CALL_HANDLER)(\r
+       IN      NDIS_HANDLE                             CallMgrVcContext,\r
+       IN OUT PCO_CALL_PARAMETERS      CallParameters,\r
+       IN      NDIS_HANDLE                             NdisPartyHandle         OPTIONAL,\r
+       OUT     PNDIS_HANDLE                    CallMgrPartyContext OPTIONAL\r
+       );\r
+\r
+typedef\r
+NDIS_STATUS\r
+(*CM_CLOSE_CALL_HANDLER)(\r
+       IN      NDIS_HANDLE                             CallMgrVcContext,\r
+       IN      NDIS_HANDLE                             CallMgrPartyContext     OPTIONAL,\r
+       IN      PVOID                                   CloseData                       OPTIONAL,\r
+       IN      UINT                                    Size                            OPTIONAL\r
+       );\r
+\r
+typedef\r
+VOID\r
+(*CM_INCOMING_CALL_COMPLETE_HANDLER)(\r
+       IN      NDIS_STATUS                             Status,\r
+       IN      NDIS_HANDLE                             CallMgrVcContext,\r
+       IN      PCO_CALL_PARAMETERS             CallParameters\r
+       );\r
+\r
+typedef\r
+NDIS_STATUS\r
+(*CM_ADD_PARTY_HANDLER)(\r
+       IN      NDIS_HANDLE                             CallMgrVcContext,\r
+       IN OUT PCO_CALL_PARAMETERS      CallParameters,\r
+       IN      NDIS_HANDLE                             NdisPartyHandle,\r
+       OUT     PNDIS_HANDLE                    CallMgrPartyContext\r
+       );\r
+\r
+typedef\r
+NDIS_STATUS\r
+(*CM_DROP_PARTY_HANDLER)(\r
+       IN      NDIS_HANDLE                             CallMgrPartyContext,\r
+       IN      PVOID                                   CloseData       OPTIONAL,\r
+       IN      UINT                                    Size            OPTIONAL\r
+       );\r
+\r
+typedef\r
+VOID\r
+(*CM_ACTIVATE_VC_COMPLETE_HANDLER)(\r
+       IN      NDIS_STATUS                             Status,\r
+       IN      NDIS_HANDLE                             CallMgrVcContext,\r
+       IN      PCO_CALL_PARAMETERS             CallParameters\r
+       );\r
+\r
+typedef\r
+VOID\r
+(*CM_DEACTIVATE_VC_COMPLETE_HANDLER)(\r
+       IN      NDIS_STATUS                             Status,\r
+       IN      NDIS_HANDLE                             CallMgrVcContext\r
+       );\r
+\r
+typedef\r
+NDIS_STATUS\r
+(*CM_MODIFY_CALL_QOS_HANDLER)(\r
+       IN      NDIS_HANDLE                             CallMgrVcContext,\r
+       IN      PCO_CALL_PARAMETERS             CallParameters\r
+       );\r
+\r
+typedef struct _NDIS_CALL_MANAGER_CHARACTERISTICS\r
+{\r
+    UCHAR   MajorVersion;\r
+    UCHAR   MinorVersion;\r
+\r
+    USHORT  Filler;\r
+    UINT    Reserved;\r
+\r
+    CO_CREATE_VC_HANDLER                CmCreateVcHandler;\r
+    CO_DELETE_VC_HANDLER                CmDeleteVcHandler;\r
+    CM_OPEN_AF_HANDLER                  CmOpenAfHandler;\r
+    CM_CLOSE_AF_HANDLER                        CmCloseAfHandler;\r
+    CM_REG_SAP_HANDLER                  CmRegisterSapHandler;\r
+    CM_DEREG_SAP_HANDLER                CmDeregisterSapHandler;\r
+    CM_MAKE_CALL_HANDLER                CmMakeCallHandler;\r
+    CM_CLOSE_CALL_HANDLER               CmCloseCallHandler;\r
+    CM_INCOMING_CALL_COMPLETE_HANDLER   CmIncomingCallCompleteHandler;\r
+    CM_ADD_PARTY_HANDLER                CmAddPartyHandler;\r
+    CM_DROP_PARTY_HANDLER               CmDropPartyHandler;\r
+    CM_ACTIVATE_VC_COMPLETE_HANDLER     CmActivateVcCompleteHandler;\r
+    CM_DEACTIVATE_VC_COMPLETE_HANDLER   CmDeactivateVcCompleteHandler;\r
+    CM_MODIFY_CALL_QOS_HANDLER          CmModifyCallQoSHandler;\r
+    CO_REQUEST_HANDLER                  CmRequestHandler;\r
+    CO_REQUEST_COMPLETE_HANDLER         CmRequestCompleteHandler;\r
+} NDIS_CALL_MANAGER_CHARACTERISTICS, *PNDIS_CALL_MANAGER_CHARACTERISTICS;\r
+\r
+\r
+\r
+/* Call Manager clients */\r
+\r
+typedef VOID (*CL_OPEN_AF_COMPLETE_HANDLER)(\r
+    IN  NDIS_STATUS Status,\r
+    IN  NDIS_HANDLE ProtocolAfContext,\r
+    IN  NDIS_HANDLE NdisAfHandle);\r
+\r
+typedef VOID (*CL_CLOSE_AF_COMPLETE_HANDLER)(\r
+    IN  NDIS_STATUS Status,\r
+    IN  NDIS_HANDLE ProtocolAfContext);\r
+\r
+typedef VOID (*CL_REG_SAP_COMPLETE_HANDLER)(\r
+    IN  NDIS_STATUS Status,\r
+    IN  NDIS_HANDLE ProtocolSapContext,\r
+    IN  PCO_SAP     Sap,\r
+    IN  NDIS_HANDLE NdisSapHandle);\r
+\r
+typedef VOID (*CL_DEREG_SAP_COMPLETE_HANDLER)(\r
+    IN  NDIS_STATUS Status,\r
+    IN  NDIS_HANDLE ProtocolSapContext);\r
+\r
+typedef VOID (*CL_MAKE_CALL_COMPLETE_HANDLER)(\r
+    IN  NDIS_STATUS         Status,\r
+    IN  NDIS_HANDLE         ProtocolVcContext,\r
+    IN  NDIS_HANDLE         NdisPartyHandle     OPTIONAL,\r
+    IN  PCO_CALL_PARAMETERS CallParameters);\r
+\r
+typedef VOID (*CL_MODIFY_CALL_QOS_COMPLETE_HANDLER)(\r
+    IN  NDIS_STATUS         Status,\r
+    IN  NDIS_HANDLE         ProtocolVcContext,\r
+    IN  PCO_CALL_PARAMETERS CallParameters);\r
+\r
+typedef VOID (*CL_CLOSE_CALL_COMPLETE_HANDLER)(\r
+    IN  NDIS_STATUS Status,\r
+    IN  NDIS_HANDLE ProtocolVcContext,\r
+    IN  NDIS_HANDLE ProtocolPartyContext    OPTIONAL);\r
+\r
+typedef VOID (*CL_ADD_PARTY_COMPLETE_HANDLER)(\r
+    IN  NDIS_STATUS         Status,\r
+    IN  NDIS_HANDLE         ProtocolPartyContext,\r
+    IN  NDIS_HANDLE         NdisPartyHandle,\r
+    IN  PCO_CALL_PARAMETERS CallParameters);\r
+\r
+typedef VOID (*CL_DROP_PARTY_COMPLETE_HANDLER)(\r
+    IN  NDIS_STATUS Status,\r
+    IN  NDIS_HANDLE ProtocolPartyContext);\r
+\r
+typedef NDIS_STATUS (*CL_INCOMING_CALL_HANDLER)(\r
+    IN  NDIS_HANDLE             ProtocolSapContext,\r
+    IN  NDIS_HANDLE             ProtocolVcContext,\r
+    IN  OUT PCO_CALL_PARAMETERS CallParameters);\r
+\r
+typedef VOID (*CL_INCOMING_CALL_QOS_CHANGE_HANDLER)(\r
+    IN  NDIS_HANDLE         ProtocolVcContext,\r
+    IN  PCO_CALL_PARAMETERS CallParameters);\r
+\r
+typedef VOID (*CL_INCOMING_CLOSE_CALL_HANDLER)(\r
+    IN  NDIS_STATUS CloseStatus,\r
+    IN  NDIS_HANDLE ProtocolVcContext,\r
+    IN  PVOID       CloseData   OPTIONAL,\r
+    IN  UINT        Size        OPTIONAL);\r
+\r
+typedef VOID (*CL_INCOMING_DROP_PARTY_HANDLER)(\r
+    IN  NDIS_STATUS DropStatus,\r
+    IN  NDIS_HANDLE ProtocolPartyContext,\r
+    IN  PVOID       CloseData   OPTIONAL,\r
+    IN  UINT        Size        OPTIONAL);\r
+\r
+typedef VOID (*CL_CALL_CONNECTED_HANDLER)(\r
+    IN  NDIS_HANDLE ProtocolVcContext);\r
+\r
+\r
+typedef struct _NDIS_CLIENT_CHARACTERISTICS\r
+{\r
+    UCHAR   MajorVersion;\r
+    UCHAR   MinorVersion;\r
+\r
+    USHORT  Filler;\r
+    UINT    Reserved;\r
+\r
+    CO_CREATE_VC_HANDLER                ClCreateVcHandler;\r
+    CO_DELETE_VC_HANDLER                ClDeleteVcHandler;\r
+    CO_REQUEST_HANDLER                  ClRequestHandler;\r
+    CO_REQUEST_COMPLETE_HANDLER         ClRequestCompleteHandler;\r
+    CL_OPEN_AF_COMPLETE_HANDLER         ClOpenAfCompleteHandler;\r
+    CL_CLOSE_AF_COMPLETE_HANDLER        ClCloseAfCompleteHandler;\r
+    CL_REG_SAP_COMPLETE_HANDLER         ClRegisterSapCompleteHandler;\r
+    CL_DEREG_SAP_COMPLETE_HANDLER       ClDeregisterSapCompleteHandler;\r
+    CL_MAKE_CALL_COMPLETE_HANDLER       ClMakeCallCompleteHandler;\r
+    CL_MODIFY_CALL_QOS_COMPLETE_HANDLER        ClModifyCallQoSCompleteHandler;\r
+    CL_CLOSE_CALL_COMPLETE_HANDLER      ClCloseCallCompleteHandler;\r
+    CL_ADD_PARTY_COMPLETE_HANDLER       ClAddPartyCompleteHandler;\r
+    CL_DROP_PARTY_COMPLETE_HANDLER      ClDropPartyCompleteHandler;\r
+    CL_INCOMING_CALL_HANDLER            ClIncomingCallHandler;\r
+    CL_INCOMING_CALL_QOS_CHANGE_HANDLER ClIncomingCallQoSChangeHandler;\r
+    CL_INCOMING_CLOSE_CALL_HANDLER      ClIncomingCloseCallHandler;\r
+    CL_INCOMING_DROP_PARTY_HANDLER      ClIncomingDropPartyHandler;\r
+    CL_CALL_CONNECTED_HANDLER           ClCallConnectedHandler;\r
+} NDIS_CLIENT_CHARACTERISTICS, *PNDIS_CLIENT_CHARACTERISTICS;\r
+\r
+#endif /* NDIS50 */\r
+\r
+\r
+\r
+/* NDIS protocol structures */\r
+\r
+/* Prototypes for NDIS 3.0 protocol characteristics */\r
+\r
+typedef VOID (*OPEN_ADAPTER_COMPLETE_HANDLER)(\r
+    IN  NDIS_HANDLE     ProtocolBindingContext,\r
+    IN  NDIS_STATUS     Status,\r
+    IN  NDIS_STATUS     OpenErrorStatus);\r
+\r
+typedef VOID (*CLOSE_ADAPTER_COMPLETE_HANDLER)(\r
+    IN  NDIS_HANDLE     ProtocolBindingContext,\r
+    IN  NDIS_STATUS     Status);\r
+\r
+typedef VOID (*RESET_COMPLETE_HANDLER)(\r
+    IN  NDIS_HANDLE     ProtocolBindingContext,\r
+    IN  NDIS_STATUS     Status);\r
+\r
+typedef VOID (*REQUEST_COMPLETE_HANDLER)(\r
+    IN  NDIS_HANDLE     ProtocolBindingContext,\r
+    IN  PNDIS_REQUEST   NdisRequest,\r
+    IN  NDIS_STATUS     Status);\r
+\r
+typedef VOID (*STATUS_HANDLER)(\r
+    IN  NDIS_HANDLE     ProtocolBindingContext,\r
+    IN  NDIS_STATUS     GeneralStatus,\r
+    IN  PVOID           StatusBuffer,\r
+    IN  UINT            StatusBufferSize);\r
+\r
+typedef VOID (*STATUS_COMPLETE_HANDLER)(\r
+    IN  NDIS_HANDLE     ProtocolBindingContext);\r
+\r
+typedef VOID (*SEND_COMPLETE_HANDLER)(\r
+    IN  NDIS_HANDLE     ProtocolBindingContext,\r
+    IN  PNDIS_PACKET    Packet,\r
+    IN  NDIS_STATUS     Status);\r
+\r
+typedef VOID (*WAN_SEND_COMPLETE_HANDLER)(\r
+    IN  NDIS_HANDLE         ProtocolBindingContext,\r
+    IN  PNDIS_WAN_PACKET    Packet,\r
+    IN  NDIS_STATUS         Status);\r
+\r
+typedef VOID (*TRANSFER_DATA_COMPLETE_HANDLER)(\r
+    IN  NDIS_HANDLE     ProtocolBindingContext,\r
+    IN  PNDIS_PACKET    Packet,\r
+    IN  NDIS_STATUS     Status,\r
+    IN  UINT            BytesTransferred);\r
+\r
+typedef VOID (*WAN_TRANSFER_DATA_COMPLETE_HANDLER)(\r
+    VOID);\r
+\r
+typedef NDIS_STATUS (*RECEIVE_HANDLER)(\r
+    IN  NDIS_HANDLE     ProtocolBindingContext,\r
+    IN  NDIS_HANDLE     MacReceiveContext,\r
+    IN  PVOID           HeaderBuffer,\r
+    IN  UINT            HeaderBufferSize,\r
+    IN  PVOID           LookAheadBuffer,\r
+    IN  UINT            LookaheadBufferSize,\r
+    IN  UINT            PacketSize);\r
+\r
+typedef NDIS_STATUS (*WAN_RECEIVE_HANDLER)(\r
+    IN  NDIS_HANDLE     NdisLinkHandle,\r
+    IN  PUCHAR          Packet,\r
+    IN  ULONG           PacketSize);\r
+\r
+typedef VOID (*RECEIVE_COMPLETE_HANDLER)(\r
+    IN  NDIS_HANDLE     ProtocolBindingContext);\r
+\r
+\r
+/* Protocol characteristics for NDIS 3.0 protocols */\r
+typedef struct _NDIS30_PROTOCOL_CHARACTERISTICS\r
+{\r
+    UCHAR                           MajorNdisVersion;\r
+    UCHAR                           MinorNdisVersion;\r
+    union\r
+    {\r
+        UINT                        Reserved;\r
+        UINT                        Flags;\r
+    };\r
+    OPEN_ADAPTER_COMPLETE_HANDLER   OpenAdapterCompleteHandler;\r
+    CLOSE_ADAPTER_COMPLETE_HANDLER  CloseAdapterCompleteHandler;\r
+    union\r
+    {\r
+        SEND_COMPLETE_HANDLER       SendCompleteHandler;\r
+        WAN_SEND_COMPLETE_HANDLER   WanSendCompleteHandler;\r
+    };\r
+    union\r
+    {\r
+        TRANSFER_DATA_COMPLETE_HANDLER      TransferDataCompleteHandler;\r
+        WAN_TRANSFER_DATA_COMPLETE_HANDLER  WanTransferDataCompleteHandler;\r
+       };\r
+\r
+    RESET_COMPLETE_HANDLER          ResetCompleteHandler;\r
+    REQUEST_COMPLETE_HANDLER        RequestCompleteHandler;\r
+    union\r
+    {\r
+        RECEIVE_HANDLER                    ReceiveHandler;\r
+        WAN_RECEIVE_HANDLER         WanReceiveHandler;\r
+    };\r
+    RECEIVE_COMPLETE_HANDLER        ReceiveCompleteHandler;\r
+    STATUS_HANDLER                  StatusHandler;\r
+    STATUS_COMPLETE_HANDLER            StatusCompleteHandler;\r
+    NDIS_STRING                            Name;\r
+} NDIS30_PROTOCOL_CHARACTERISTICS;\r
+\r
+\r
+/* Prototypes for NDIS 4.0 protocol characteristics */\r
+\r
+typedef INT (*RECEIVE_PACKET_HANDLER)(\r
+    IN  NDIS_HANDLE     ProtocolBindingContext,\r
+    IN  PNDIS_PACKET    Packet);\r
+\r
+typedef VOID (*BIND_HANDLER)(\r
+    OUT PNDIS_STATUS    Status,\r
+    IN  NDIS_HANDLE     BindContext,\r
+    IN  PNDIS_STRING    DeviceName,\r
+    IN  PVOID           SystemSpecific1,\r
+    IN  PVOID           SystemSpecific2);\r
+\r
+typedef VOID (*UNBIND_HANDLER)(\r
+    OUT PNDIS_STATUS    Status,\r
+    IN  NDIS_HANDLE     ProtocolBindingContext,\r
+    IN  NDIS_HANDLE     UnbindContext);\r
+\r
+typedef VOID (*TRANSLATE_HANDLER)(\r
+    OUT PNDIS_STATUS    Status,\r
+    IN  NDIS_HANDLE     ProtocolBindingContext,\r
+    OUT PNET_PNP_ID     IdList,\r
+    IN  ULONG           IdListLength,\r
+    OUT PULONG          BytesReturned);\r
+\r
+typedef VOID (*UNLOAD_PROTOCOL_HANDLER)(\r
+    VOID);\r
+\r
+\r
+/* Protocol characteristics for NDIS 4.0 protocols */\r
+\r
+typedef struct _NDIS40_PROTOCOL_CHARACTERISTICS\r
+{\r
+    NDIS30_PROTOCOL_CHARACTERISTICS;\r
+\r
+    RECEIVE_PACKET_HANDLER  ReceivePacketHandler;\r
+    BIND_HANDLER            BindAdapterHandler;\r
+    UNBIND_HANDLER          UnbindAdapterHandler;\r
+    TRANSLATE_HANDLER       TranslateHandler;\r
+    UNLOAD_PROTOCOL_HANDLER UnloadHandler;\r
+} NDIS40_PROTOCOL_CHARACTERISTICS;\r
+\r
+\r
+\r
+/* Prototypes for NDIS 5.0 protocol characteristics */\r
+\r
+#ifdef NDIS50\r
+\r
+typedef VOID (*CO_SEND_COMPLETE_HANDLER)(\r
+    IN  NDIS_STATUS     Status,\r
+    IN  NDIS_HANDLE     ProtocolVcContext,\r
+    IN  PNDIS_PACKET    Packet);\r
+\r
+typedef VOID (*CO_STATUS_HANDLER)(\r
+    IN  NDIS_HANDLE ProtocolBindingContext,\r
+    IN  NDIS_HANDLE ProtocolVcContext   OPTIONAL,\r
+    IN  NDIS_STATUS GeneralStatus,\r
+    IN  PVOID       StatusBuffer,\r
+    IN  UINT        StatusBufferSize);\r
+\r
+typedef UINT (*CO_RECEIVE_PACKET_HANDLER)(\r
+    IN  NDIS_HANDLE     ProtocolBindingContext,\r
+    IN  NDIS_HANDLE     ProtocolVcContext,\r
+    IN  PNDIS_PACKET    Packet);\r
+\r
+typedef VOID (*CO_AF_REGISTER_NOTIFY_HANDLER)(\r
+    IN  NDIS_HANDLE         ProtocolBindingContext,\r
+    IN  PCO_ADDRESS_FAMILY  AddressFamily);\r
+\r
+\r
+typedef struct _NDIS50_PROTOCOL_CHARACTERISTICS\r
+{\r
+    NDIS40_PROTOCOL_CHARACTERISTICS;\r
+\r
+    PVOID                           ReservedHandlers[4];\r
+\r
+    CO_SEND_COMPLETE_HANDLER        CoSendCompleteHandler;\r
+    CO_STATUS_HANDLER               CoStatusHandler;\r
+    CO_RECEIVE_PACKET_HANDLER       CoReceivePacketHandler;\r
+    CO_AF_REGISTER_NOTIFY_HANDLER   CoAfRegisterNotifyHandler;\r
+} NDIS50_PROTOCOL_CHARACTERISTICS;\r
+\r
+#endif /* NDIS50 */\r
+\r
+\r
+#ifndef NDIS50\r
+#ifndef NDIS40\r
+typedef struct _NDIS30_PROTOCOL_CHARACTERISTICS NDIS_PROTOCOL_CHARACTERISTICS;\r
+#else /* NDIS40 */\r
+typedef struct _NDIS40_PROTOCOL_CHARACTERISTICS NDIS_PROTOCOL_CHARACTERISTICS;\r
+#endif /* NDIS40 */\r
+#else /* NDIS50 */\r
+typedef struct _NDIS50_PROTOCOL_CHARACTERISTICS NDIS_PROTOCOL_CHARACTERISTICS;\r
+#endif /* NDIS50 */\r
+\r
+typedef NDIS_PROTOCOL_CHARACTERISTICS *PNDIS_PROTOCOL_CHARACTERISTICS;\r
+\r
+\r
+\r
+/* Buffer management routines */\r
+\r
+VOID\r
+EXPIMP\r
+NdisAllocateBuffer(\r
+    OUT PNDIS_STATUS    Status,\r
+    OUT PNDIS_BUFFER    *Buffer,\r
+    IN  NDIS_HANDLE     PoolHandle,\r
+    IN  PVOID           VirtualAddress,\r
+    IN  UINT            Length);\r
+\r
+VOID\r
+EXPIMP\r
+NdisAllocateBufferPool(\r
+    OUT PNDIS_STATUS    Status,\r
+    OUT PNDIS_HANDLE    PoolHandle,\r
+    IN  UINT            NumberOfDescriptors);\r
+\r
+VOID\r
+EXPIMP\r
+NdisAllocatePacket(\r
+    OUT PNDIS_STATUS    Status,\r
+    OUT PNDIS_PACKET    *Packet,\r
+    IN  NDIS_HANDLE     PoolHandle);\r
+\r
+VOID\r
+EXPIMP\r
+NdisAllocatePacketPool(\r
+    OUT PNDIS_STATUS    Status,\r
+    OUT PNDIS_HANDLE    PoolHandle,\r
+    IN  UINT            NumberOfDescriptors,\r
+    IN  UINT            ProtocolReservedLength);\r
+\r
+VOID\r
+EXPIMP\r
+NdisCopyBuffer(\r
+    OUT PNDIS_STATUS    Status,\r
+    OUT PNDIS_BUFFER    *Buffer,\r
+    IN  NDIS_HANDLE     PoolHandle,\r
+    IN  PVOID           MemoryDescriptor,\r
+    IN  UINT            Offset,\r
+    IN  UINT            Length);\r
+\r
+VOID\r
+EXPIMP\r
+NdisCopyFromPacketToPacket(\r
+    IN  PNDIS_PACKET    Destination,\r
+    IN  UINT            DestinationOffset,\r
+    IN  UINT            BytesToCopy,\r
+    IN  PNDIS_PACKET    Source,\r
+    IN  UINT            SourceOffset,\r
+    OUT PUINT           BytesCopied);\r
+\r
+VOID\r
+EXPIMP\r
+NdisDprAllocatePacket(\r
+    OUT PNDIS_STATUS    Status,\r
+    OUT PNDIS_PACKET    *Packet,\r
+    IN  NDIS_HANDLE     PoolHandle);\r
+\r
+VOID\r
+EXPIMP\r
+NdisDprAllocatePacketNonInterlocked(\r
+    OUT PNDIS_STATUS    Status,\r
+    OUT PNDIS_PACKET    *Packet,\r
+    IN NDIS_HANDLE      PoolHandle);\r
+\r
+VOID\r
+EXPIMP\r
+NdisDprFreePacket(\r
+    IN  PNDIS_PACKET    Packet);\r
+\r
+VOID\r
+EXPIMP\r
+NdisDprFreePacketNonInterlocked(\r
+    IN  PNDIS_PACKET    Packet);\r
+\r
+VOID\r
+EXPIMP\r
+NdisFreeBufferPool(\r
+    IN  NDIS_HANDLE PoolHandle);\r
+\r
+VOID\r
+EXPIMP\r
+NdisFreePacket(\r
+    IN   PNDIS_PACKET   Packet);\r
+\r
+VOID\r
+EXPIMP\r
+NdisFreePacketPool(\r
+    IN  NDIS_HANDLE PoolHandle);\r
+\r
+VOID\r
+EXPIMP\r
+NdisReturnPackets(\r
+    IN  PNDIS_PACKET    *PacketsToReturn,\r
+    IN  UINT            NumberOfPackets);\r
+\r
+VOID\r
+EXPIMP\r
+NdisUnchainBufferAtBack(\r
+    IN OUT  PNDIS_PACKET    Packet,\r
+    OUT     PNDIS_BUFFER    *Buffer);\r
+\r
+VOID\r
+EXPIMP\r
+NdisUnchainBufferAtFront(\r
+    IN OUT  PNDIS_PACKET    Packet,\r
+    OUT     PNDIS_BUFFER    *Buffer);\r
+\r
+#if BINARY_COMPATIBLE\r
+\r
+VOID\r
+EXPIMP\r
+NdisAdjustBufferLength(\r
+    IN PNDIS_BUFFER Buffer,\r
+    IN UINT         Length);\r
+\r
+ULONG\r
+EXPIMP\r
+NDIS_BUFFER_TO_SPAN_PAGES(\r
+    IN PNDIS_BUFFER  Buffer);\r
+\r
+VOID\r
+EXPIMP\r
+NdisFreeBuffer(\r
+    IN  PNDIS_BUFFER    Buffer);\r
+\r
+VOID\r
+EXPIMP\r
+NdisGetBufferPhysicalArraySize(\r
+    IN  PNDIS_BUFFER    Buffer,\r
+    OUT PUINT           ArraySize);\r
+\r
+VOID\r
+EXPIMP\r
+NdisGetFirstBufferFromPacket(\r
+    IN  PNDIS_PACKET    _Packet,\r
+    OUT PNDIS_BUFFER    *_FirstBuffer,\r
+    OUT PVOID           *_FirstBufferVA,\r
+    OUT PUINT           _FirstBufferLength,\r
+    OUT PUINT           _TotalBufferLength);\r
+\r
+VOID\r
+EXPIMP\r
+NdisQueryBuffer(\r
+    IN  PNDIS_BUFFER    Buffer,\r
+    OUT PVOID           *VirtualAddress OPTIONAL,\r
+    OUT PUINT           Length);\r
+\r
+VOID\r
+EXPIMP\r
+NdisQueryBufferOffset(\r
+    IN  PNDIS_BUFFER    Buffer,\r
+    OUT PUINT           Offset,\r
+    OUT PUINT           Length);\r
+\r
+#else /* BINARY_COMPATIBLE */\r
+\r
+/*\r
+ * PVOID NdisAdjustBufferLength(\r
+ *     IN  PNDIS_BUFFER    Buffer,\r
+ *     IN  UINT            Length);\r
+ */\r
+#define NdisAdjustBufferLength(Buffer,  \\r
+                               Length)  \\r
+{                                       \\r
+    (Buffer)->ByteCount = (Length);     \\r
+}\r
+\r
+\r
+/*\r
+ * ULONG NDIS_BUFFER_TO_SPAN_PAGES(\r
+ *     IN  PNDIS_BUFFER    Buffer);\r
+ */\r
+#define NDIS_BUFFER_TO_SPAN_PAGES(Buffer)   \\r
+(                                           \\r
+    MmGetMdlByteCount(Buffer) == 0 ?        \\r
+        1 :                                 \\r
+        ADDRESS_AND_SIZE_TO_SPAN_PAGES(     \\r
+            MmGetMdlVirtualAddress(Buffer), \\r
+            MmGetMdlByteCount(Buffer))      \\r
+)\r
+\r
+\r
+#if 0\r
+\r
+/*\r
+ * VOID NdisFreeBuffer(\r
+ *     IN  PNDIS_BUFFER    Buffer);\r
+ */\r
+#define NdisFreeBuffer(Buffer)  \\r
+{                               \\r
+    IoFreeMdl(Buffer) /* ??? */ \\r
+}\r
+\r
+#else\r
+\r
+VOID\r
+EXPIMP\r
+NdisFreeBuffer(\r
+    IN  PNDIS_BUFFER    Buffer);\r
+\r
+#endif\r
+\r
+\r
+/*\r
+ * VOID NdisGetBufferPhysicalArraySize(\r
+ *     IN  PNDIS_BUFFER    Buffer,\r
+ *     OUT PUINT           ArraySize);\r
+ */\r
+#define NdisGetBufferPhysicalArraySize(Buffer,      \\r
+                                       ArraySize)   \\r
+{                                                   \\r
+}\r
+\r
+\r
+/*\r
+ * VOID NdisGetFirstBufferFromPacket(\r
+ *     IN  PNDIS_PACKET    _Packet,\r
+ *     OUT PNDIS_BUFFER    * _FirstBuffer,\r
+ *     OUT PVOID           * _FirstBufferVA,\r
+ *     OUT PUINT           _FirstBufferLength,\r
+ *     OUT PUINT           _TotalBufferLength)\r
+ */\r
+#define        NdisGetFirstBufferFromPacket(Packet,                \\r
+                                     FirstBuffer,           \\r
+                                     FirstBufferVA,         \\r
+                                     FirstBufferLength,     \\r
+                                     TotalBufferLength)     \\r
+{                                                           \\r
+    PNDIS_BUFFER _Buffer;                                   \\r
+                                                            \\r
+    _Buffer              = (Packet)->Private.Head;          \\r
+    *(FirstBuffer)       = _Buffer;                         \\r
+    *(FirstBufferVA)     = MmGetMdlVirtualAddress(_Buffer); \\r
+    if (_Buffer != NULL) {                                  \\r
+        *(FirstBufferLength) = MmGetMdlByteCount(_Buffer);  \\r
+        _Buffer = _Buffer->Next;                            \\r
+    } else                                                  \\r
+        *(FirstBufferLength) = 0;                           \\r
+    *(TotalBufferLength) = *(FirstBufferLength);            \\r
+    while (_Buffer != NULL) {                               \\r
+        *(TotalBufferLength) += MmGetMdlByteCount(_Buffer); \\r
+        _Buffer = _Buffer->Next;                            \\r
+    }                                                       \\r
+}\r
+\r
+/*\r
+ * VOID NdisQueryBuffer(\r
+ *     IN  PNDIS_BUFFER    Buffer,\r
+ *     OUT PVOID           *VirtualAddress OPTIONAL,\r
+ *     OUT PUINT           Length)\r
+ */\r
+#define NdisQueryBuffer(Buffer,                                         \\r
+                        VirtualAddress,                                 \\r
+                        Length)                                         \\r
+{                                                                       \\r
+       if (VirtualAddress != NULL)                                         \\r
+               *(PVOID*)(VirtualAddress) = MmGetSystemAddressForMdl(Buffer);   \\r
+                                                                        \\r
+       *(Length) = MmGetMdlByteCount(Buffer);                              \\r
+}\r
+\r
+\r
+/*\r
+ * VOID NdisQueryBufferOffset(\r
+ *     IN  PNDIS_BUFFER    Buffer,\r
+ *     OUT PUINT           Offset,\r
+ *     OUT PUINT           Length);\r
+ */\r
+#define NdisQueryBufferOffset(Buffer,               \\r
+                              Offset,               \\r
+                              Length)               \\r
+{                                                   \\r
+    *(PUINT)(Offset) = MmGetMdlByteOffset(Buffer);  \\r
+    *(PUINT)(Length) = MmGetMdlByteCount(Buffer);   \\r
+}\r
+\r
+#endif /* BINARY_COMPATIBLE */\r
+\r
+\r
+/*\r
+ * PVOID NDIS_BUFFER_LINKAGE(\r
+ *     IN  PNDIS_BUFFER    Buffer);\r
+ */\r
+#define NDIS_BUFFER_LINKAGE(Buffer) \\r
+{                                   \\r
+    (Buffer)->Next;                 \\r
+}\r
+\r
+\r
+/*\r
+ * VOID NdisChainBufferAtBack(\r
+ *     IN OUT  PNDIS_PACKET    Packet,\r
+ *     IN OUT  PNDIS_BUFFER    Buffer)\r
+ */\r
+#define NdisChainBufferAtBack(Packet,               \\r
+                              Buffer)               \\r
+{                                                   \\r
+       PNDIS_BUFFER NdisBuffer = (Buffer);             \\r
+                                                    \\r
+    while (NdisBuffer->Next != NULL)                \\r
+        NdisBuffer = NdisBuffer->Next;              \\r
+                                                    \\r
+    NdisBuffer->Next = NULL;                        \\r
+                                                    \\r
+    if ((Packet)->Private.Head != NULL)             \\r
+        (Packet)->Private.Tail->Next = (Buffer);    \\r
+    else                                            \\r
+        (Packet)->Private.Head = (Buffer);          \\r
+                                                    \\r
+       (Packet)->Private.Tail        = NdisBuffer;     \\r
+       (Packet)->Private.ValidCounts = FALSE;          \\r
+}\r
+\r
+\r
+/*\r
+ * VOID NdisChainBufferAtFront(\r
+ *     IN OUT  PNDIS_PACKET    Packet,\r
+ *     IN OUT  PNDIS_BUFFER    Buffer)\r
+ */\r
+#define NdisChainBufferAtFront(Packet,          \\r
+                               Buffer)          \\r
+{                                               \\r
+       PNDIS_BUFFER _NdisBuffer = (Buffer);        \\r
+                                                \\r
+    while (_NdisBuffer->Next != NULL)           \\r
+        _NdisBuffer = _NdisBuffer->Next;        \\r
+                                                \\r
+    if ((Packet)->Private.Head == NULL)         \\r
+        (Packet)->Private.Tail = _NdisBuffer;   \\r
+                                                \\r
+       _NdisBuffer->Next = (Packet)->Private.Head; \\r
+       (Packet)->Private.Head        = (Buffer);   \\r
+       (Packet)->Private.ValidCounts = FALSE;      \\r
+}\r
+\r
+\r
+/*\r
+ * VOID NdisGetNextBuffer(\r
+ *     IN  PNDIS_BUFFER    CurrentBuffer,\r
+ *     OUT PNDIS_BUFFER    * NextBuffer)\r
+ */\r
+#define NdisGetNextBuffer(CurrentBuffer,    \\r
+                          NextBuffer)       \\r
+{                                           \\r
+    *(NextBuffer) = (CurrentBuffer)->Next;  \\r
+}\r
+\r
+\r
+/*\r
+ * UINT NdisGetPacketFlags(\r
+ *     IN  PNDIS_PACKET    Packet); \r
+ */\r
+#define NdisGetPacketFlags(Packet)  \\r
+{                                   \\r
+    (Packet)->Private.Flags;        \\r
+}\r
+\r
+\r
+/*\r
+ * UINT NDIS_GET_PACKET_HEADER_SIZE(\r
+ *     IN  PNDIS_PACKET    Packet);\r
+ */\r
+#define NDIS_GET_PACKET_HEADER_SIZE(Packet) \\r
+{                                           \\r
+}\r
+\r
+\r
+/*\r
+ * VOID NDIS_GET_PACKET_MEDIA_SPECIFIC_INFO(\r
+ *     IN  PNDIS_PACKET    Packet,\r
+ *     IN  PPVOID          pMediaSpecificInfo,\r
+ *     IN  PUINT           pSizeMediaSpecificInfo);\r
+ */\r
+#define NDIS_GET_PACKET_MEDIA_SPECIFIC_INFO(Packet,                 \\r
+                                            pMediaSpecificInfo,     \\r
+                                            pSizeMediaSpecificInfo) \\r
+{                                                                   \\r
+}\r
+\r
+\r
+/*\r
+ * VOID NDIS_STATUS NDIS_GET_PACKET_STATUS(\r
+ *     IN  PNDIS_PACKET    Packet);\r
+ */\r
+#define NDIS_GET_PACKET_STATUS (Packet) \\r
+{                                       \\r
+}\r
+\r
+\r
+/*\r
+ * ULONGLONG NDIS_GET_PACKET_TIME_RECEIVED(\r
+ *     IN  PNDIS_PACKET    Packet);\r
+ */\r
+#define NDIS_GET_PACKET_TIME_RECEIVED(Packet)   \\r
+{                                               \\r
+}\r
+\r
+\r
+/*\r
+ * ULONGLONG NDIS_GET_PACKET_TIME_SENT(\r
+ *     IN  PNDIS_PACKET    Packet);\r
+ */\r
+#define NDIS_GET_PACKET_TIME_SENT(Packet)   \\r
+{                                           \\r
+}\r
+\r
+\r
+/*\r
+ * ULONGLONG NDIS_GET_PACKET_TIME_TO_SEND(\r
+ *     IN  PNDIS_PACKET    Packet);\r
+ */\r
+#define NDIS_GET_PACKET_TIME_TO_SEND(Packet)    \\r
+{                                               \\r
+}\r
+\r
+\r
+/*\r
+ * PNDIS_PACKET_OOB_DATA NDIS_OOB_DATA_FROM_PACKET(\r
+ *     IN  PNDIS_PACKET    _Packet);\r
+ */\r
+#define NDIS_OOB_DATA_FROM_PACKET(_Packet)  \\r
+{                                           \\r
+}\r
+\r
\r
+/*\r
+ * VOID NdisQueryPacket(\r
+ *     IN  PNDIS_PACKET    Packet,\r
+ *     OUT PUINT           PhysicalBufferCount OPTIONAL,\r
+ *     OUT PUINT           BufferCount         OPTIONAL,\r
+ *     OUT PNDIS_BUFFER    *FirstBuffer        OPTIONAL,\r
+ *     OUT PUINT           TotalPacketLength   OPTIONAL);\r
+ */\r
+#define NdisQueryPacket(Packet,                                                 \\r
+                        PhysicalBufferCount,                                    \\r
+                        BufferCount,                                            \\r
+                        FirstBuffer,                                            \\r
+                        TotalPacketLength)                                      \\r
+{                                                                               \\r
+    if ((FirstBuffer) != NULL)                                                  \\r
+        *(FirstBuffer) = (Packet)->Private.Head;                                \\r
+    if ((TotalPacketLength) || (BufferCount) || (PhysicalBufferCount)) {        \\r
+        if (!(Packet)->Private.ValidCounts) {                                   \\r
+            UINT _Offset;                                                       \\r
+            UINT _PacketLength;                                                 \\r
+            PNDIS_BUFFER _NdisBuffer;                                           \\r
+            UINT _PhysicalBufferCount = 0;                                      \\r
+            UINT _TotalPacketLength   = 0;                                      \\r
+            UINT _Count               = 0;                                      \\r
+                                                                                \\r
+            for (_NdisBuffer = (Packet)->Private.Head;                          \\r
+                _NdisBuffer != (PNDIS_BUFFER)NULL;                              \\r
+                _NdisBuffer = _NdisBuffer->Next) {                              \\r
+                _PhysicalBufferCount += NDIS_BUFFER_TO_SPAN_PAGES(_NdisBuffer); \\r
+                NdisQueryBufferOffset(_NdisBuffer, &_Offset, &_PacketLength);   \\r
+                _TotalPacketLength += _PacketLength;                            \\r
+                _Count++;                                                       \\r
+            }                                                                   \\r
+            (Packet)->Private.PhysicalCount = _PhysicalBufferCount;             \\r
+            (Packet)->Private.TotalLength   = _TotalPacketLength;               \\r
+            (Packet)->Private.Count         = _Count;                           \\r
+            (Packet)->Private.ValidCounts   = TRUE;                             \\r
+               }                                                                       \\r
+                                                                                \\r
+        if (PhysicalBufferCount)                                                \\r
+            *(PUINT)(PhysicalBufferCount) = (Packet)->Private.PhysicalCount;    \\r
+                                                                                \\r
+        if (BufferCount)                                                        \\r
+            *(PUINT)(BufferCount) = (Packet)->Private.Count;                    \\r
+                                                                                \\r
+        if (TotalPacketLength)                                                  \\r
+            *(PUINT)(TotalPacketLength) = (Packet)->Private.TotalLength;        \\r
+    }                                                                           \\r
+}\r
+\r
+/*\r
+ * VOID NdisRecalculatePacketCounts(\r
+ *     IN OUT  PNDIS_PACKET    Packet);\r
+ */\r
+#define NdisRecalculatePacketCounts(Packet) \\r
+{                                           \\r
+}\r
+\r
+\r
+/*\r
+ * VOID NdisReinitializePacket(\r
+ *     IN OUT  PNDIS_PACKET    Packet);\r
+ */\r
+#define NdisReinitializePacketCounts(Packet)    \\r
+{                                               \\r
+}\r
+\r
+\r
+/*\r
+ * VOID NdisSetPacketFlags(\r
+ *     IN  PNDIS_PACKET    Packet,\r
+ *     IN  UINT            Flags); \r
+ */\r
+#define NdisSetPacketFlags(Packet, Flags)   \\r
+    (Packet)->Private.Flags = (Flags);\r
+\r
+\r
+/*\r
+ * NDIS_SET_PACKET_HEADER_SIZE(\r
+ *     IN  PNDIS_PACKET    Packet,\r
+ *     IN  UINT            HdrSize);\r
+ */\r
+#define NDIS_SET_PACKET_HEADER_SIZE(Packet,     \\r
+                                    HdrSize)    \\r
+{                                               \\r
+}\r
+\r
+\r
+/*\r
+ * NDIS_SET_PACKET_MEDIA_SPECIFIC_INFO(\r
+ *     IN  PNDIS_PACKET    Packet,\r
+ *     IN  PVOID           MediaSpecificInfo,\r
+ *     IN  UINT            SizeMediaSpecificInfo);\r
+ */\r
+#define NDIS_SET_PACKET_MEDIA_SPECIFIC_INFO(Packet,                 \\r
+                                            MediaSpecificInfo,      \\r
+                                            SizeMediaSpecificInfo)  \\r
+{                                                                   \\r
+}\r
+\r
+\r
+/*\r
+ * NDIS_SET_PACKET_STATUS(\r
+ *     IN  PNDIS_PACKET    Packet,\r
+ *     IN  NDIS_STATUS     Status);\r
+ */\r
+#define NDIS_SET_PACKET_STATUS(Packet,  \\r
+                               Status)  \\r
+{                                       \\r
+}\r
+\r
+\r
+/*\r
+ * NDIS_SET_PACKET_TIME_RECEIVED(\r
+ *     IN  PNDIS_PACKET    Packet,\r
+ *     IN  ULONGLONG       TimeReceived);\r
+ */\r
+#define NDIS_SET_PACKET_TIME_RECEIVED(Packet)       \\r
+                                      TimeReceived) \\r
+{                                                   \\r
+}\r
+\r
+\r
+/*\r
+ * NDIS_SET_PACKET_TIME_SENT(\r
+ *     IN  PNDIS_PACKET    Packet,\r
+ *     IN  ULONGLONG       TimeSent);\r
+ */\r
+#define NDIS_SET_PACKET_TIME_SENT(Packet,   \\r
+                                  TimeSent) \\r
+{                                           \\r
+}\r
+\r
+\r
+/*\r
+ *\r
+ * NDIS_SET_PACKET_TIME_TO_SEND(\r
+ *     IN  PNDIS_PACKET    Packet,\r
+ *     IN  ULONGLONG       TimeToSend);\r
+ */\r
+#define NDIS_SET_PACKET_TIME_TO_SEND(Packet,        \\r
+                                     TimeToSend)    \\r
+{                                                   \\r
+}\r
+\r
+\r
+/*\r
+ * VOID NdisSetSendFlags(\r
+ *   IN  PNDIS_PACKET    Packet,\r
+ *   IN  UINT            Flags);\r
+ */\r
+#define NdisSetSendFlags(Packet, Flags)(    \\r
+    NdisSetPacketFlags((Packet), (Flags)))\r
+\r
+\r
+\r
+/* Memory management routines */\r
+\r
+VOID\r
+EXPIMP\r
+NdisCreateLookaheadBufferFromSharedMemory(\r
+    IN  PVOID   pSharedMemory,\r
+    IN  UINT    LookaheadLength,\r
+    OUT PVOID   *pLookaheadBuffer);\r
+\r
+VOID\r
+EXPIMP\r
+NdisDestroyLookaheadBufferFromSharedMemory(\r
+    IN  PVOID   pLookaheadBuffer);\r
+\r
+VOID\r
+EXPIMP\r
+NdisMoveFromMappedMemory(\r
+    OUT PVOID   Destination,\r
+    IN  PVOID   Source,\r
+    IN  ULONG   Length);\r
+\r
+VOID\r
+EXPIMP\r
+NdisMoveMappedMemory(\r
+    OUT PVOID   Destination,\r
+    IN  PVOID   Source,\r
+    IN  ULONG   Length);\r
+\r
+VOID\r
+EXPIMP\r
+NdisMoveToMappedMemory(\r
+    OUT PVOID   Destination,\r
+    IN  PVOID   Source,\r
+    IN  ULONG   Length);\r
+\r
+VOID\r
+EXPIMP\r
+NdisMUpdateSharedMemory(\r
+    IN  NDIS_HANDLE             MiniportAdapterHandle,\r
+    IN  ULONG                   Length,\r
+    IN  PVOID                   VirtualAddress,\r
+    IN  NDIS_PHYSICAL_ADDRESS   PhysicalAddress);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisAllocateMemory(\r
+    OUT PVOID                   *VirtualAddress,\r
+    IN  UINT                    Length,\r
+    IN  UINT                    MemoryFlags,\r
+    IN  NDIS_PHYSICAL_ADDRESS   HighestAcceptableAddress);\r
+\r
+VOID\r
+EXPIMP\r
+NdisFreeMemory(\r
+    IN  PVOID   VirtualAddress,\r
+    IN  UINT    Length,\r
+    IN  UINT    MemoryFlags);\r
+\r
+VOID\r
+EXPIMP\r
+NdisImmediateReadSharedMemory(\r
+    IN  NDIS_HANDLE WrapperConfigurationContext,\r
+    IN  ULONG       SharedMemoryAddress,\r
+    OUT PUCHAR      Buffer,\r
+    IN  ULONG       Length);\r
+\r
+VOID\r
+EXPIMP\r
+NdisImmediateWriteSharedMemory(\r
+    IN  NDIS_HANDLE WrapperConfigurationContext,\r
+    IN  ULONG       SharedMemoryAddress,\r
+    IN  PUCHAR      Buffer,\r
+    IN  ULONG       Length);\r
+\r
+VOID\r
+EXPIMP\r
+NdisMAllocateSharedMemory(\r
+    IN NDIS_HANDLE             MiniportAdapterHandle,\r
+    IN ULONG                   Length,\r
+    IN BOOLEAN                 Cached,\r
+    OUT        PVOID                   *VirtualAddress,\r
+    OUT        PNDIS_PHYSICAL_ADDRESS  PhysicalAddress);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisMAllocateSharedMemoryAsync(\r
+    IN  NDIS_HANDLE MiniportAdapterHandle,\r
+    IN  ULONG       Length,\r
+    IN  BOOLEAN     Cached,\r
+    IN  PVOID       Context);\r
+\r
+VOID\r
+EXPIMP\r
+NdisMFreeSharedMemory(\r
+    IN  NDIS_HANDLE             MiniportAdapterHandle,\r
+    IN  ULONG                   Length,\r
+    IN  BOOLEAN                 Cached,\r
+    IN  PVOID                   VirtualAddress,\r
+    IN  NDIS_PHYSICAL_ADDRESS   PhysicalAddress);\r
+\r
+VOID\r
+EXPIMP\r
+NdisUpdateSharedMemory(\r
+    IN  NDIS_HANDLE             NdisAdapterHandle,\r
+    IN  ULONG                   Length,\r
+    IN  PVOID                   VirtualAddress,\r
+    IN  NDIS_PHYSICAL_ADDRESS   PhysicalAddress);\r
+\r
+\r
+/*\r
+ * ULONG NdisGetPhysicalAddressHigh(\r
+ *     IN  NDIS_PHYSICAL_ADDRESS   PhysicalAddress);\r
+ */\r
+#define NdisGetPhysicalAddressHigh(PhysicalAddress) \\r
+    ((PhysicalAddress).HighPart)\r
+\r
+/*\r
+ * VOID NdisSetPhysicalAddressHigh(\r
+ *     IN   NDIS_PHYSICAL_ADDRESS   PhysicalAddress,\r
+ *     IN   ULONG                   Value);\r
+ */\r
+#define NdisSetPhysicalAddressHigh(PhysicalAddress, Value)  \\r
+    ((PhysicalAddress).HighPart) = (Value)\r
+\r
+/*\r
+ * ULONG NdisGetPhysicalAddressLow(\r
+ *     IN   NDIS_PHYSICAL_ADDRESS   PhysicalAddress);\r
+ */\r
+#define NdisGetPhysicalAddressLow(PhysicalAddress)  \\r
+    ((PhysicalAddress).LowPart)\r
+\r
+\r
+/*\r
+ * VOID NdisSetPhysicalAddressLow(\r
+ *     IN  NDIS_PHYSICAL_ADDRESS   PhysicalAddress,\r
+ *     IN  ULONG                   Value);\r
+ */\r
+#define NdisSetPhysicalAddressLow(PhysicalAddress, Value)   \\r
+    ((PhysicalAddress).LowPart) = (Value)\r
+\r
+/*\r
+ * VOID NDIS_PHYSICAL_ADDRESS_CONST(\r
+ *     IN  ULONG   Low,\r
+ *     IN  LONG    High); \r
+ */\r
+#define NDIS_PHYSICAL_ADDRESS_CONST(Low, High)  \\r
+    { {(ULONG)(Low), (LONG)(High)} }\r
+\r
+\r
+/*\r
+ * VOID NdisMoveMemory(\r
+ *     OUT PVOID   Destination,\r
+ *     IN  PVOID   Source,\r
+ *     IN  ULONG   Length);\r
+ */\r
+#define NdisMoveMemory(Destination, Source, Length) \\r
+    RtlCopyMemory(Destination, Source, Length)\r
+\r
+\r
+/*\r
+ * VOID NdisRetrieveUlong(\r
+ *     IN  PULONG  DestinationAddress,\r
+ *     IN  PULONG  SourceAddress);\r
+ */\r
+#define NdisRetrieveUlong(DestinationAddress, SourceAddress)    \\r
+    RtlRetrieveUlong(DestinationAddress, SourceAddress)\r
+\r
+\r
+/*\r
+ * VOID NdisStoreUlong(\r
+ *     IN  PULONG  DestinationAddress,\r
+ *     IN  ULONG   Value); \r
+ */\r
+#define NdisStoreUlong(DestinationAddress, Value)   \\r
+    RtlStoreUlong(DestinationAddress, Value)\r
+\r
+\r
+/*\r
+ * VOID NdisZeroMemory(\r
+ *     IN PVOID    Destination,\r
+ *     IN ULONG    Length)\r
+ */\r
+#define NdisZeroMemory(Destination, Length) \\r
+    RtlZeroMemory(Destination, Length)\r
+\r
+\r
+\r
+/* String management routines */\r
+\r
+#if BINARY_COMPATIBLE\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisAnsiStringToUnicodeString(\r
+    IN OUT  PNDIS_STRING        DestinationString,\r
+    IN      PNDIS_ANSI_STRING   SourceString);\r
+\r
+BOOLEAN\r
+EXPIMP\r
+NdisEqualString(\r
+    IN  PNDIS_STRING    String1,\r
+    IN  PNDIS_STRING    String2,\r
+    IN  BOOLEAN         CaseInsensitive);\r
+\r
+VOID\r
+EXPIMP\r
+NdisInitAnsiString(\r
+    IN OUT  PNDIS_ANSI_STRING   DestinationString,\r
+    IN      PCSTR               SourceString);\r
+\r
+VOID\r
+EXPIMP\r
+NdisInitUnicodeString(\r
+    IN OUT  PNDIS_STRING    DestinationString,\r
+    IN      PCWSTR          SourceString);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisUnicodeStringToAnsiString(\r
+    IN OUT  PNDIS_ANSI_STRING   DestinationString,\r
+    IN      PNDIS_STRING        SourceString);\r
+\r
+#else /* BINARY_COMPATIBLE */\r
+\r
+/*\r
+ * NDIS_STATUS NdisAnsiStringToUnicodeString(\r
+ *     IN OUT  PNDIS_STRING        DestinationString,\r
+ *     IN      PNDIS_ANSI_STRING   SourceString);\r
+ */\r
+#define        NdisAnsiStringToUnicodeString(DestinationString,    \\r
+                                      SourceString)         \\r
+    RtlAnsiStringToUnicodeString((DestinationString), (SourceString), FALSE)\r
+\r
+/*\r
+ * BOOLEAN NdisEqualString(\r
+ *     IN  PNDIS_STRING    String1,\r
+ *     IN  PNDIS_STRING    String2,\r
+ *     IN  BOOLEAN         CaseInsensitive)\r
+ */\r
+#define NdisEqualString(String1,            \\r
+                        String2,            \\r
+                        CaseInsensitive)    \\r
+    RtlEqualUnicodeString((String1), (String2), (CaseInsensitive))\r
+\r
+/*\r
+ * VOID NdisInitAnsiString(\r
+ *     IN OUT  PNDIS_ANSI_STRING   DestinationString,\r
+ *     IN      PCSTR               SourceString)\r
+ */\r
+#define        NdisInitAnsiString(DestinationString,   \\r
+                           SourceString)        \\r
+    RtlInitString((DestinationString), (SourceString))\r
+\r
+/*\r
+ * VOID NdisInitUnicodeString(\r
+ *     IN OUT  PNDIS_STRING    DestinationString,\r
+ *     IN      PCWSTR          SourceString)\r
+ */\r
+#define        NdisInitUnicodeString(DestinationString,    \\r
+                              SourceString)         \\r
+    RtlInitUnicodeString((DestinationString), (SourceString))\r
+\r
+/*\r
+ * NDIS_STATUS NdisUnicodeStringToAnsiString(\r
+ *     IN OUT  PNDIS_ANSI_STRING   DestinationString,\r
+ *     IN      PNDIS_STRING        SourceString)\r
+ */\r
+#define        NdisUnicodeStringToAnsiString(DestinationString,    \\r
+                                      SourceString)         \\r
+    RtlUnicodeStringToAnsiString((DestinationString), (SourceString), FALSE)\r
+\r
+#endif /* BINARY_COMPATIBLE */\r
+\r
+#define NdisFreeString(_s)  NdisFreeMemory((s).Buffer, (s).MaximumLength, 0)\r
+#define NdisPrintString(_s) DbgPrint("%ls", (s).Buffer)\r
+\r
+\r
+\r
+/* I/O routines */\r
+\r
+/*\r
+ * VOID NdisRawReadPortBufferUchar(\r
+ *     IN  ULONG   Port,\r
+ *     OUT PUCHAR  Buffer,\r
+ *     IN  ULONG   Length);\r
+ */\r
+#define NdisRawReadPortBufferUchar(Port, Buffer, Length)    \\r
+    READ_PORT_BUFFER_UCHAR((PUCHAR)(Port), (PUCHAR)(Buffer), (Length))\r
+\r
+/*\r
+ * VOID NdisRawReadPortBufferUlong(\r
+ *     IN  ULONG   Port,\r
+ *     OUT PULONG  Buffer,\r
+ *     IN  ULONG   Length);\r
+ */\r
+#define NdisRawReadPortBufferUlong(Port, Buffer, Length)  \\r
+    READ_PORT_BUFFER_ULONG((PULONG)(Port), (PULONG)(Buffer), (Length))\r
+\r
+/*\r
+ * VOID NdisRawReadPortBufferUshort(\r
+ *     IN  ULONG   Port,\r
+ *     OUT PUSHORT Buffer,\r
+ *     IN  ULONG   Length);\r
+ */\r
+#define NdisRawReadPortBufferUshort(Port, Buffer, Length)   \\r
+    READ_PORT_BUFFER_USHORT((PUSHORT)(Port), (PUSHORT)(Buffer), (Length))\r
+\r
+\r
+/*\r
+ * VOID NdisRawReadPortUchar(\r
+ *     IN  ULONG   Port,\r
+ *     OUT PUCHAR  Data);\r
+ */\r
+#define NdisRawReadPortUchar(Port, Data)    \\r
+    *(Data) = READ_PORT_UCHAR((PUCHAR)(Port))\r
+\r
+/*\r
+ * VOID NdisRawReadPortUlong(\r
+ *     IN  ULONG   Port,\r
+ *     OUT PULONG  Data);\r
+ */\r
+#define NdisRawReadPortUlong(Port, Data)    \\r
+    *(Data) = READ_PORT_ULONG((PULONG)(Port))\r
+\r
+/*\r
+ * VOID NdisRawReadPortUshort(\r
+ *     IN  ULONG   Port,\r
+ *     OUT PUSHORT Data);\r
+ */\r
+#define NdisRawReadPortUshort(Port, Data)   \\r
+    *(Data) = READ_PORT_USHORT((PUSHORT)(Port))\r
+\r
+\r
+/*\r
+ * VOID NdisRawWritePortBufferUchar(\r
+ *     IN  ULONG   Port,\r
+ *     IN  PUCHAR  Buffer,\r
+ *     IN  ULONG   Length);\r
+ */\r
+#define NdisRawWritePortBufferUchar(Port, Buffer, Length) \\r
+    WRITE_PORT_BUFFER_UCHAR((PUCHAR)(Port), (PUCHAR)(Buffer), (Length))\r
+\r
+/*\r
+ * VOID NdisRawWritePortBufferUlong(\r
+ *     IN  ULONG   Port,\r
+ *     IN  PULONG  Buffer,\r
+ *     IN  ULONG   Length);\r
+ */\r
+#define NdisRawWritePortBufferUlong(Port, Buffer, Length)   \\r
+    WRITE_PORT_BUFFER_ULONG((PULONG)(Port), (PULONG)(Buffer), (Length))\r
+\r
+/*\r
+ * VOID NdisRawWritePortBufferUshort(\r
+ *     IN  ULONG   Port,\r
+ *     IN  PUSHORT Buffer,\r
+ *     IN  ULONG   Length);\r
+ */\r
+#define NdisRawWritePortBufferUshort(Port, Buffer, Length)  \\r
+    WRITE_PORT_BUFFER_USHORT((PUSHORT)(Port), (PUSHORT)(Buffer), (Length))\r
+\r
+\r
+/*\r
+ * VOID NdisRawWritePortUchar(\r
+ *     IN  ULONG   Port,\r
+ *     IN  UCHAR   Data);\r
+ */\r
+#define NdisRawWritePortUchar(Port, Data)   \\r
+    WRITE_PORT_UCHAR((PUCHAR)(Port), (UCHAR)(Data))\r
+\r
+/*\r
+ * VOID NdisRawWritePortUlong(\r
+ *     IN  ULONG   Port,\r
+ *     IN  ULONG   Data);\r
+ */\r
+#define NdisRawWritePortUlong(Port, Data)   \\r
+    WRITE_PORT_ULONG((PULONG)(Port), (ULONG)(Data))\r
+\r
+/*\r
+ * VOID NdisRawWritePortUshort(\r
+ *     IN  ULONG   Port,\r
+ *     IN  USHORT  Data);\r
+ */\r
+#define NdisRawWritePortUshort(Port, Data) \\r
+    WRITE_PORT_USHORT((PUSHORT)(Port), (USHORT)(Data))\r
+\r
+\r
+/*\r
+ * VOID NdisReadRegisterUchar(\r
+ *     IN  PUCHAR  Register,\r
+ *     OUT PUCHAR  Data);\r
+ */\r
+#define NdisReadRegisterUchar(Register, Data)   \\r
+    *((PUCHAR)(Data)) = *(Register)\r
+\r
+/*\r
+ * VOID NdisReadRegisterUlong(\r
+ *     IN  PULONG  Register,\r
+ *     OUT PULONG  Data);\r
+ */\r
+#define NdisReadRegisterUlong(Register, Data)   \\r
+    *((PULONG)(Data)) = *(Register)\r
+\r
+/*\r
+ * VOID NdisReadRegisterUshort(\r
+ *     IN  PUSHORT Register,\r
+ *     OUT PUSHORT Data);\r
+ */\r
+#define NdisReadRegisterUshort(Register, Data)  \\r
+    *((PUSHORT)(Data)) = *(Register)\r
+\r
+\r
+/*\r
+ * VOID NdisReadRegisterUchar(\r
+ *     IN  PUCHAR  Register,\r
+ *     IN  UCHAR   Data);\r
+ */\r
+#define NdisWriteRegisterUchar(Register, Data)  \\r
+    WRITE_REGISTER_UCHAR((Register), (Data))\r
+\r
+/*\r
+ * VOID NdisReadRegisterUlong(\r
+ *     IN  PULONG  Register,\r
+ *     IN  ULONG   Data);\r
+ */\r
+#define NdisWriteRegisterUlong(Register, Data)  \\r
+       WRITE_REGISTER_ULONG((Register), (Data))\r
+\r
+/*\r
+ * VOID NdisReadRegisterUshort(\r
+ *     IN  PUSHORT Register,\r
+ *     IN  USHORT  Data);\r
+ */\r
+#define NdisWriteRegisterUshort(Register, Data) \\r
+    WRITE_REGISTER_USHORT((Register), (Data))\r
+\r
+\r
+\r
+VOID\r
+EXPIMP\r
+NdisCloseAdapter(\r
+    OUT PNDIS_STATUS    Status,\r
+    IN  NDIS_HANDLE     NdisBindingHandle);\r
+\r
+VOID\r
+EXPIMP\r
+NdisCloseConfiguration(\r
+    IN  NDIS_HANDLE ConfigurationHandle);\r
+\r
+VOID\r
+EXPIMP\r
+NdisCompleteBindAdapter(\r
+    IN  NDIS_HANDLE BindAdapterContext,\r
+    IN  NDIS_STATUS Status,\r
+    IN  NDIS_STATUS OpenStatus);\r
+\r
+VOID\r
+EXPIMP\r
+NdisCompleteUnbindAdapter(\r
+    IN  NDIS_HANDLE UnbindAdapterContext,\r
+    IN  NDIS_STATUS Status);\r
+\r
+VOID\r
+EXPIMP\r
+NdisDeregisterProtocol(\r
+    OUT PNDIS_STATUS    Status,\r
+    IN  NDIS_HANDLE     NdisProtocolHandle);\r
+\r
+VOID\r
+EXPIMP\r
+NdisInitializeListHead(\r
+    IN  PLIST_ENTRY ListHead);\r
+\r
+VOID\r
+EXPIMP\r
+NdisInterlockedAddUlong(\r
+    IN  PULONG          Addend,\r
+    IN  ULONG           Increment,\r
+    IN  PNDIS_SPIN_LOCK SpinLock);\r
+\r
+PLIST_ENTRY\r
+EXPIMP\r
+NdisInterlockedInsertHeadList(\r
+    IN  PLIST_ENTRY     ListHead,\r
+    IN  PLIST_ENTRY     ListEntry,\r
+    IN  PNDIS_SPIN_LOCK SpinLock);\r
+\r
+PLIST_ENTRY\r
+EXPIMP\r
+NdisInterlockedInsertTailList(\r
+    IN  PLIST_ENTRY     ListHead,\r
+    IN  PLIST_ENTRY     ListEntry,\r
+    IN  PNDIS_SPIN_LOCK SpinLock); \r
+\r
+PLIST_ENTRY\r
+EXPIMP\r
+NdisInterlockedRemoveHeadList(\r
+    IN  PLIST_ENTRY     ListHead,\r
+    IN  PNDIS_SPIN_LOCK SpinLock); \r
+\r
+VOID\r
+EXPIMP\r
+NdisOpenAdapter(\r
+    OUT PNDIS_STATUS    Status,\r
+    OUT PNDIS_STATUS    OpenErrorStatus,\r
+    OUT PNDIS_HANDLE    NdisBindingHandle,\r
+    OUT PUINT           SelectedMediumIndex,\r
+    IN  PNDIS_MEDIUM    MediumArray,\r
+    IN  UINT            MediumArraySize,\r
+    IN  NDIS_HANDLE     NdisProtocolHandle,\r
+    IN  NDIS_HANDLE     ProtocolBindingContext,\r
+    IN  PNDIS_STRING    AdapterName,\r
+    IN  UINT            OpenOptions,\r
+    IN  PSTRING         AddressingInformation);\r
+\r
+VOID\r
+EXPIMP\r
+NdisOpenProtocolConfiguration(\r
+    OUT PNDIS_STATUS    Status,\r
+    OUT PNDIS_HANDLE    ConfigurationHandle,\r
+    IN  PNDIS_STRING    ProtocolSection);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisQueryReceiveInformation(\r
+    IN  NDIS_HANDLE NdisBindingHandle,\r
+    IN  NDIS_HANDLE MacContext,\r
+    OUT PLONGLONG   TimeSent            OPTIONAL,\r
+    OUT PLONGLONG   TimeReceived        OPTIONAL,\r
+    IN  PUCHAR      Buffer,\r
+    IN  UINT        BufferSize,\r
+    OUT PUINT       SizeNeeded);\r
+\r
+VOID\r
+EXPIMP\r
+NdisReadConfiguration(\r
+    OUT PNDIS_STATUS                    Status,\r
+    OUT PNDIS_CONFIGURATION_PARAMETER   *ParameterValue,\r
+    IN  NDIS_HANDLE                     ConfigurationHandle,\r
+    IN  PNDIS_STRING                    Keyword,\r
+    IN  NDIS_PARAMETER_TYPE             ParameterType);\r
+\r
+VOID\r
+EXPIMP\r
+NdisRegisterProtocol(\r
+    OUT PNDIS_STATUS                    Status,\r
+    OUT PNDIS_HANDLE                    NdisProtocolHandle,\r
+    IN  PNDIS_PROTOCOL_CHARACTERISTICS  ProtocolCharacteristics,\r
+    IN  UINT                            CharacteristicsLength);\r
+\r
+VOID\r
+EXPIMP\r
+NdisRequest(\r
+    OUT PNDIS_STATUS    Status,\r
+    IN  NDIS_HANDLE     NdisBindingHandle,\r
+    IN  PNDIS_REQUEST   NdisRequest);\r
+\r
+VOID\r
+EXPIMP\r
+NdisReset(\r
+    OUT PNDIS_STATUS    Status,\r
+    IN  NDIS_HANDLE     NdisBindingHandle);\r
+\r
+VOID\r
+EXPIMP\r
+NdisReturnPackets(\r
+    IN  PNDIS_PACKET    *PacketsToReturn,\r
+    IN  UINT            NumberOfPackets);\r
+\r
+VOID\r
+EXPIMP\r
+NdisSend(\r
+    OUT PNDIS_STATUS    Status,\r
+    IN  NDIS_HANDLE     NdisBindingHandle,\r
+    IN  PNDIS_PACKET    Packet);\r
+\r
+VOID\r
+EXPIMP\r
+NdisSendPackets(\r
+    IN  NDIS_HANDLE     NdisBindingHandle,\r
+    IN  PPNDIS_PACKET   PacketArray,\r
+    IN  UINT            NumberOfPackets);\r
+\r
+VOID\r
+EXPIMP\r
+NdisTransferData(\r
+    OUT PNDIS_STATUS        Status,\r
+    IN  NDIS_HANDLE         NdisBindingHandle,\r
+    IN  NDIS_HANDLE         MacReceiveContext,\r
+    IN  UINT                ByteOffset,\r
+    IN  UINT                BytesToTransfer,\r
+    IN  OUT PNDIS_PACKET    Packet,\r
+    OUT PUINT               BytesTransferred);\r
+\r
+VOID\r
+EXPIMP\r
+NdisWriteConfiguration(\r
+    OUT PNDIS_STATUS                    Status,\r
+    IN  NDIS_HANDLE                     WrapperConfigurationContext,\r
+    IN  PNDIS_STRING                    Keyword,\r
+    IN  PNDIS_CONFIGURATION_PARAMETER   *ParameterValue);\r
+\r
+/*\r
+VOID\r
+EXPIMP\r
+NdisWriteErrorLogEntry(\r
+    IN  NDIS_HANDLE     NdisAdapterHandle,\r
+    IN  NDIS_ERROR_CODE ErrorCode,\r
+    IN  ULONG           NumberOfErrorValues,\r
+    IN  ULONG           ...);\r
+*/\r
+\r
+\r
+\r
+/*\r
+ * VOID NdisStallExecution(\r
+ *     IN  UINT    MicrosecondsToStall)\r
+ */\r
+#define NdisStallExecution(MicroSecondsToStall)     \\r
+    KeStallExecutionProcessor(MicroSecondsToStall)\r
+\r
+\r
+\r
+/* NDIS helper macros */\r
+\r
+/*\r
+ * NDIS_INIT_FUNCTION(FunctionName)\r
+ */\r
+#define NDIS_INIT_FUNCTION(FunctionName)    \\r
+    alloc_text(init, FunctionName)\r
+\r
+/*\r
+ * NDIS_PAGABLE_FUNCTION(FunctionName) \r
+ */\r
+#define NDIS_PAGABLE_FUNCTION(FunctionName) \\r
+    alloc_text(page, FunctionName)\r
+\r
+\r
+\r
+/* NDIS 4.0 extensions */\r
+\r
+#ifdef NDIS40\r
+\r
+VOID\r
+EXPIMP\r
+NdisMFreeSharedMemory(\r
+    IN  NDIS_HANDLE             MiniportAdapterHandle,\r
+    IN  ULONG                   Length,\r
+    IN  BOOLEAN                 Cached,\r
+    IN  PVOID                   VirtualAddress,\r
+    IN  NDIS_PHYSICAL_ADDRESS   PhysicalAddress);\r
+\r
+VOID\r
+EXPIMP\r
+NdisMWanIndicateReceive(\r
+    OUT PNDIS_STATUS    Status,\r
+    IN  NDIS_HANDLE     MiniportAdapterHandle,\r
+    IN  NDIS_HANDLE     NdisLinkContext,\r
+    IN  PUCHAR          PacketBuffer,\r
+    IN  UINT            PacketSize);\r
+\r
+VOID\r
+EXPIMP\r
+NdisMWanIndicateReceiveComplete(\r
+    IN  NDIS_HANDLE MiniportAdapterHandle);\r
+\r
+VOID\r
+EXPIMP\r
+NdisMWanSendComplete(\r
+    IN  NDIS_HANDLE         MiniportAdapterHandle,\r
+    IN  PNDIS_WAN_PACKET    Packet,\r
+    IN  NDIS_STATUS         Status);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisPciAssignResources(\r
+    IN  NDIS_HANDLE         NdisMacHandle,\r
+    IN  NDIS_HANDLE         NdisWrapperHandle,\r
+    IN  NDIS_HANDLE         WrapperConfigurationContext,\r
+    IN  ULONG               SlotNumber,\r
+    OUT PNDIS_RESOURCE_LIST *AssignedResources);\r
+\r
+VOID\r
+EXPIMP\r
+NdisReadEisaSlotInformationEx(\r
+    OUT PNDIS_STATUS                    Status,\r
+    IN  NDIS_HANDLE                     WrapperConfigurationContext,\r
+    OUT PUINT                           SlotNumber,\r
+    OUT PNDIS_EISA_FUNCTION_INFORMATION *EisaData,\r
+    OUT PUINT                           NumberOfFunctions);\r
+\r
+VOID\r
+EXPIMP\r
+NdisReadMcaPosInformation(\r
+    OUT PNDIS_STATUS        Status,\r
+    IN  NDIS_HANDLE         WrapperConfigurationContext,\r
+    IN  PUINT               ChannelNumber,\r
+    OUT PNDIS_MCA_POS_DATA  McaData);\r
+\r
+#endif /* NDIS40 */\r
+\r
+\r
+\r
+/* NDIS 5.0 extensions */\r
+\r
+#ifdef NDIS50\r
+\r
+VOID\r
+EXPIMP\r
+NdisAcquireReadWriteLock(\r
+    IN  PNDIS_RW_LOCK   Lock,\r
+    IN  BOOLEAN         fWrite,\r
+    IN  PLOCK_STATE     LockState);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisAllocateMemoryWithTag(\r
+    OUT PVOID   *VirtualAddress,\r
+    IN  UINT    Length,\r
+    IN  ULONG   Tag);\r
+\r
+VOID\r
+EXPIMP\r
+NdisAllocatePacketPoolEx(\r
+    OUT PNDIS_STATUS    Status,\r
+    OUT PNDIS_HANDLE    PoolHandle,\r
+    IN  UINT            NumberOfDescriptors,\r
+    IN  UINT            NumberOfOverflowDescriptors,\r
+    IN  UINT            ProtocolReservedLength);\r
+\r
+ULONG\r
+EXPIMP\r
+NdisBufferLength(\r
+    IN  PNDIS_BUFFER    Buffer);\r
+\r
+PVOID\r
+EXPIMP\r
+NdisBufferVirtualAddress(\r
+    IN  PNDIS_BUFFER    Buffer);\r
+\r
+VOID\r
+EXPIMP\r
+NdisCompletePnPEvent(\r
+    IN  NDIS_STATUS     Status,\r
+    IN  NDIS_HANDLE     NdisBindingHandle,\r
+    IN  PNET_PNP_EVENT  NetPnPEvent);\r
+\r
+VOID\r
+EXPIMP\r
+NdisConvertStringToAtmAddress(\r
+    OUT PNDIS_STATUS    Status,\r
+    IN  PNDIS_STRING    String,\r
+    OUT PATM_ADDRESS    AtmAddress);\r
+\r
+VOID\r
+EXPIMP\r
+NdisGetCurrentProcessorCounts(\r
+    OUT PULONG  pIdleCount,\r
+    OUT PULONG  pKernelAndUser,\r
+    OUT PULONG  pIndex);\r
+\r
+VOID\r
+EXPIMP\r
+NdisGetDriverHandle(\r
+    IN  PNDIS_HANDLE    NdisBindingHandle,\r
+    OUT PNDIS_HANDLE    NdisDriverHandle);\r
+\r
+PNDIS_PACKET\r
+EXPIMP\r
+NdisGetReceivedPacket(\r
+    IN  PNDIS_HANDLE    NdisBindingHandle,\r
+    IN  PNDIS_HANDLE    MacContext);\r
+\r
+VOID\r
+EXPIMP\r
+NdisGetSystemUptime(\r
+    OUT PULONG  pSystemUpTime);\r
+\r
+VOID\r
+EXPIMP\r
+NdisInitializeReadWriteLock(\r
+    IN  PNDIS_RW_LOCK   Lock);\r
+\r
+LONG\r
+EXPIMP\r
+NdisInterlockedDecrement(\r
+    IN  PLONG   Addend);\r
+\r
+LONG\r
+EXPIMP\r
+NdisInterlockedIncrement(\r
+    IN  PLONG   Addend);\r
+\r
+PSINGLE_LIST_ENTRY\r
+EXPIMP\r
+NdisInterlockedPopEntrySList(\r
+    IN  PSLIST_HEADER   ListHead,\r
+    IN  PKSPIN_LOCK     Lock);\r
+\r
+PSINGLE_LIST_ENTRY\r
+EXPIMP\r
+NdisInterlockedPushEntrySList(\r
+    IN  PSLIST_HEADER       ListHead,\r
+    IN  PSINGLE_LIST_ENTRY  ListEntry,\r
+    IN  PKSPIN_LOCK         Lock);\r
+\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisMDeregisterDevice(\r
+    IN  NDIS_HANDLE NdisDeviceHandle);\r
+\r
+VOID\r
+EXPIMP\r
+NdisMGetDeviceProperty(\r
+    IN      NDIS_HANDLE         MiniportAdapterHandle,\r
+    IN OUT  PDEVICE_OBJECT      *PhysicalDeviceObject           OPTIONAL,\r
+    IN OUT  PDEVICE_OBJECT      *FunctionalDeviceObject         OPTIONAL,\r
+    IN OUT  PDEVICE_OBJECT      *NextDeviceObject               OPTIONAL,\r
+    IN OUT  PCM_RESOURCE_LIST   *AllocatedResources             OPTIONAL,\r
+    IN OUT  PCM_RESOURCE_LIST   *AllocatedResourcesTranslated   OPTIONAL);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisMInitializeScatterGatherDma(\r
+    IN  NDIS_HANDLE MiniportAdapterHandle,\r
+    IN  BOOLEAN     Dma64BitAddresses,\r
+    IN  ULONG       MaximumPhysicalMapping);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisMPromoteMiniport(\r
+    IN  NDIS_HANDLE MiniportAdapterHandle);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisMQueryAdapterInstanceName(\r
+    OUT PNDIS_STRING    AdapterInstanceName,\r
+    IN  NDIS_HANDLE     MiniportAdapterHandle);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisMRegisterDevice(\r
+    IN  NDIS_HANDLE         NdisWrapperHandle,\r
+    IN  PNDIS_STRING        DeviceName,\r
+    IN  PNDIS_STRING        SymbolicName,\r
+    IN  PDRIVER_DISPATCH    MajorFunctions[],\r
+    OUT PDEVICE_OBJECT      *pDeviceObject,\r
+    OUT NDIS_HANDLE         *NdisDeviceHandle);\r
+\r
+VOID\r
+EXPIMP\r
+NdisMRegisterUnloadHandler(\r
+    IN  NDIS_HANDLE     NdisWrapperHandle,\r
+    IN  PDRIVER_UNLOAD  UnloadHandler);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisMRemoveMiniport(\r
+    IN  NDIS_HANDLE MiniportAdapterHandle);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisMSetMiniportSecondary(\r
+    IN  NDIS_HANDLE MiniportAdapterHandle,\r
+    IN  NDIS_HANDLE PrimaryMiniportAdapterHandle);\r
+\r
+VOID\r
+EXPIMP\r
+NdisOpenConfigurationKeyByIndex(\r
+    OUT PNDIS_STATUS    Status,\r
+    IN  NDIS_HANDLE     ConfigurationHandle,\r
+    IN  ULONG           Index,\r
+    OUT PNDIS_STRING    KeyName,\r
+    OUT PNDIS_HANDLE    KeyHandle);\r
+\r
+VOID\r
+EXPIMP\r
+NdisOpenConfigurationKeyByName(\r
+    OUT PNDIS_STATUS    Status,\r
+    IN  NDIS_HANDLE     ConfigurationHandle,\r
+    IN  PNDIS_STRING    SubKeyName,\r
+    OUT PNDIS_HANDLE    SubKeyHandle);\r
+\r
+UINT\r
+EXPIMP\r
+NdisPacketPoolUsage(\r
+    IN  NDIS_HANDLE PoolHandle);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisQueryAdapterInstanceName(\r
+    OUT PNDIS_STRING    AdapterInstanceName,\r
+    IN  NDIS_HANDLE     NdisBindingHandle);\r
+\r
+VOID\r
+EXPIMP\r
+NdisQueryBufferSafe(\r
+    IN  PNDIS_BUFFER    Buffer,\r
+    OUT PVOID           *VirtualAddress OPTIONAL,\r
+    OUT PUINT           Length,\r
+    IN  UINT            Priority);\r
+\r
+ULONG\r
+EXPIMP\r
+NdisReadPcmciaAttributeMemory(\r
+    IN  NDIS_HANDLE NdisAdapterHandle,\r
+    IN  ULONG       Offset,\r
+    IN  PVOID       Buffer,\r
+    IN  ULONG       Length);\r
+\r
+VOID\r
+EXPIMP\r
+NdisReleaseReadWriteLock(\r
+    IN  PNDIS_RW_LOCK   Lock,\r
+    IN  PLOCK_STATE     LockState);\r
+\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisWriteEventLogEntry(\r
+    IN  PVOID       LogHandle,\r
+    IN  NDIS_STATUS EventCode,\r
+    IN  ULONG       UniqueEventValue,\r
+    IN  USHORT      NumStrings,\r
+    IN  PVOID       StringsList OPTIONAL,\r
+    IN  ULONG       DataSize,\r
+    IN  PVOID       Data        OPTIONAL);\r
+\r
+ULONG\r
+EXPIMP\r
+NdisWritePcmciaAttributeMemory(\r
+    IN  NDIS_HANDLE NdisAdapterHandle,\r
+    IN  ULONG       Offset,\r
+    IN  PVOID       Buffer,\r
+    IN  ULONG       Length);\r
+\r
+\r
+/* Connectionless services */\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisClAddParty(\r
+    IN      NDIS_HANDLE         NdisVcHandle,\r
+    IN      NDIS_HANDLE         ProtocolPartyContext,\r
+    IN OUT  PCO_CALL_PARAMETERS CallParameters,\r
+    OUT     PNDIS_HANDLE        NdisPartyHandle);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisClCloseAddressFamily(\r
+    IN  NDIS_HANDLE NdisAfHandle);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisClCloseCall(\r
+    IN  NDIS_HANDLE NdisVcHandle,\r
+    IN  NDIS_HANDLE NdisPartyHandle OPTIONAL,\r
+    IN  PVOID       Buffer          OPTIONAL,\r
+    IN  UINT        Size);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisClDeregisterSap(\r
+    IN  NDIS_HANDLE NdisSapHandle);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisClDropParty(\r
+    IN  NDIS_HANDLE NdisPartyHandle,\r
+    IN  PVOID       Buffer  OPTIONAL,\r
+    IN  UINT        Size);\r
+\r
+VOID\r
+EXPIMP\r
+NdisClIncomingCallComplete(\r
+    IN  NDIS_STATUS         Status,\r
+    IN  NDIS_HANDLE         NdisVcHandle,\r
+    IN  PCO_CALL_PARAMETERS CallParameters);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisClMakeCall(\r
+    IN      NDIS_HANDLE         NdisVcHandle,\r
+    IN OUT  PCO_CALL_PARAMETERS CallParameters,\r
+    IN      NDIS_HANDLE         ProtocolPartyContext    OPTIONAL,\r
+    OUT     PNDIS_HANDLE        NdisPartyHandle         OPTIONAL);\r
+\r
+NDIS_STATUS \r
+EXPIMP\r
+NdisClModifyCallQoS(\r
+    IN  NDIS_HANDLE         NdisVcHandle,\r
+    IN  PCO_CALL_PARAMETERS CallParameters);\r
+\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisClOpenAddressFamily(\r
+    IN  NDIS_HANDLE                     NdisBindingHandle,\r
+    IN  PCO_ADDRESS_FAMILY              AddressFamily,\r
+    IN  NDIS_HANDLE                     ProtocolAfContext,\r
+    IN  PNDIS_CLIENT_CHARACTERISTICS    ClCharacteristics,\r
+    IN  UINT                            SizeOfClCharacteristics,\r
+    OUT PNDIS_HANDLE                    NdisAfHandle);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisClRegisterSap(\r
+    IN  NDIS_HANDLE     NdisAfHandle,\r
+    IN  NDIS_HANDLE     ProtocolSapContext,\r
+    IN  PCO_SAP         Sap,\r
+    OUT PNDIS_HANDLE    NdisSapHandle);\r
+\r
+\r
+/* Call Manager services */\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisCmActivateVc(\r
+    IN      NDIS_HANDLE         NdisVcHandle,\r
+    IN OUT  PCO_CALL_PARAMETERS CallParameters);\r
+\r
+VOID\r
+EXPIMP\r
+NdisCmAddPartyComplete(\r
+    IN  NDIS_STATUS         Status,\r
+    IN  NDIS_HANDLE         NdisPartyHandle,\r
+    IN  NDIS_HANDLE         CallMgrPartyContext OPTIONAL,\r
+    IN  PCO_CALL_PARAMETERS CallParameters);\r
+\r
+VOID\r
+EXPIMP\r
+NdisCmCloseAddressFamilyComplete(\r
+    IN  NDIS_STATUS Status,\r
+    IN  NDIS_HANDLE NdisAfHandle);\r
+\r
+VOID\r
+EXPIMP\r
+NdisCmCloseCallComplete(\r
+    IN  NDIS_STATUS Status,\r
+    IN  NDIS_HANDLE NdisVcHandle,\r
+    IN  NDIS_HANDLE NdisPartyHandle OPTIONAL);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisCmDeactivateVc(\r
+    IN  NDIS_HANDLE NdisVcHandle);\r
+\r
+VOID\r
+EXPIMP\r
+NdisCmDeregisterSapComplete(\r
+    IN  NDIS_STATUS Status,\r
+    IN  NDIS_HANDLE NdisSapHandle);\r
+\r
+VOID\r
+EXPIMP\r
+NdisCmDispatchCallConnected(\r
+    IN  NDIS_HANDLE NdisVcHandle);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisCmDispatchIncomingCall(\r
+    IN  NDIS_HANDLE         NdisSapHandle,\r
+    IN  NDIS_HANDLE         NdisVcHandle,\r
+    IN  PCO_CALL_PARAMETERS CallParameters);\r
+\r
+VOID\r
+EXPIMP\r
+NdisCmDispatchIncomingCallQoSChange(\r
+    IN  NDIS_HANDLE         NdisVcHandle,\r
+    IN  PCO_CALL_PARAMETERS CallParameters);\r
+\r
+VOID\r
+EXPIMP\r
+NdisCmDispatchIncomingCloseCall(\r
+    IN  NDIS_STATUS CloseStatus,\r
+    IN  NDIS_HANDLE NdisVcHandle,\r
+    IN  PVOID       Buffer  OPTIONAL,\r
+    IN  UINT        Size);\r
+\r
+VOID\r
+EXPIMP\r
+NdisCmDispatchIncomingDropParty(\r
+    IN  NDIS_STATUS DropStatus,\r
+    IN  NDIS_HANDLE NdisPartyHandle,\r
+    IN  PVOID       Buffer  OPTIONAL,\r
+    IN  UINT        Size);\r
+\r
+VOID\r
+EXPIMP\r
+NdisCmDropPartyComplete(\r
+    IN  NDIS_STATUS Status,\r
+    IN  NDIS_HANDLE NdisPartyHandle);\r
+\r
+VOID\r
+EXPIMP\r
+NdisCmMakeCallComplete(\r
+    IN  NDIS_STATUS         Status,\r
+    IN  NDIS_HANDLE         NdisVcHandle,\r
+    IN  NDIS_HANDLE         NdisPartyHandle     OPTIONAL,\r
+    IN  NDIS_HANDLE         CallMgrPartyContext OPTIONAL,\r
+    IN  PCO_CALL_PARAMETERS CallParameters);\r
+\r
+VOID\r
+EXPIMP\r
+NdisCmModifyCallQoSComplete(\r
+    IN  NDIS_STATUS         Status,\r
+    IN  NDIS_HANDLE         NdisVcHandle,\r
+    IN  PCO_CALL_PARAMETERS CallParameters);\r
+\r
+VOID\r
+EXPIMP\r
+NdisCmOpenAddressFamilyComplete(\r
+    IN  NDIS_STATUS Status,\r
+    IN  NDIS_HANDLE NdisAfHandle,\r
+    IN  NDIS_HANDLE CallMgrAfContext);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisCmRegisterAddressFamily(\r
+    IN  NDIS_HANDLE                         NdisBindingHandle,\r
+    IN  PCO_ADDRESS_FAMILY                  AddressFamily,\r
+    IN  PNDIS_CALL_MANAGER_CHARACTERISTICS  CmCharacteristics,\r
+    IN  UINT                                SizeOfCmCharacteristics);\r
+\r
+VOID\r
+EXPIMP\r
+NdisCmRegisterSapComplete(\r
+    IN  NDIS_STATUS Status,\r
+    IN  NDIS_HANDLE NdisSapHandle,\r
+    IN  NDIS_HANDLE CallMgrSapContext);\r
+\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisMCmActivateVc(\r
+    IN  NDIS_HANDLE         NdisVcHandle,\r
+    IN  PCO_CALL_PARAMETERS CallParameters);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisMCmCreateVc(\r
+    IN  NDIS_HANDLE     MiniportAdapterHandle,\r
+    IN  NDIS_HANDLE     NdisAfHandle,\r
+    IN  NDIS_HANDLE     MiniportVcContext,\r
+    OUT PNDIS_HANDLE    NdisVcHandle);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisMCmDeactivateVc(\r
+    IN  NDIS_HANDLE NdisVcHandle);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisMCmDeleteVc(\r
+    IN  NDIS_HANDLE NdisVcHandle);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisMCmRegisterAddressFamily(\r
+    IN  NDIS_HANDLE                         MiniportAdapterHandle,\r
+    IN  PCO_ADDRESS_FAMILY                  AddressFamily,\r
+    IN  PNDIS_CALL_MANAGER_CHARACTERISTICS  CmCharacteristics,\r
+    IN  UINT                                SizeOfCmCharacteristics);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisMCmRequest(\r
+    IN      NDIS_HANDLE     NdisAfHandle,\r
+    IN      NDIS_HANDLE     NdisVcHandle    OPTIONAL,\r
+    IN      NDIS_HANDLE     NdisPartyHandle OPTIONAL,\r
+    IN OUT  PNDIS_REQUEST   NdisRequest);\r
+\r
+\r
+/* Connection-oriented services */\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisCoCreateVc(\r
+    IN  NDIS_HANDLE         NdisBindingHandle,\r
+    IN  NDIS_HANDLE         NdisAfHandle  OPTIONAL,\r
+    IN  NDIS_HANDLE         ProtocolVcContext,\r
+    IN  OUT PNDIS_HANDLE    NdisVcHandle);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisCoDeleteVc(\r
+    IN  NDIS_HANDLE NdisVcHandle);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisCoRequest(\r
+    IN      NDIS_HANDLE     NdisBindingHandle,\r
+    IN      NDIS_HANDLE     NdisAfHandle    OPTIONAL,\r
+    IN      NDIS_HANDLE     NdisVcHandle    OPTIONAL,\r
+    IN      NDIS_HANDLE     NdisPartyHandle OPTIONAL,\r
+    IN OUT  PNDIS_REQUEST   NdisRequest);\r
+\r
+VOID\r
+EXPIMP\r
+NdisCoRequestComplete(\r
+    IN  NDIS_STATUS     Status,\r
+    IN  NDIS_HANDLE     NdisAfHandle,\r
+    IN  NDIS_HANDLE     NdisVcHandle    OPTIONAL,\r
+    IN  NDIS_HANDLE     NdisPartyHandle OPTIONAL,\r
+    IN  PNDIS_REQUEST   NdisRequest);\r
+\r
+VOID\r
+EXPIMP\r
+NdisCoSendPackets(\r
+    IN  NDIS_HANDLE     NdisVcHandle,\r
+    IN  PPNDIS_PACKET   PacketArray,\r
+    IN  UINT            NumberOfPackets);\r
+\r
+\r
+VOID\r
+EXPIMP\r
+NdisMCoActivateVcComplete(\r
+    IN  NDIS_STATUS         Status,\r
+    IN  NDIS_HANDLE         NdisVcHandle,\r
+    IN  PCO_CALL_PARAMETERS CallParameters);\r
+\r
+VOID\r
+EXPIMP\r
+NdisMCoDeactivateVcComplete(\r
+    IN  NDIS_STATUS Status,\r
+    IN  NDIS_HANDLE NdisVcHandle);\r
+\r
+VOID\r
+EXPIMP\r
+NdisMCoIndicateReceivePacket(\r
+    IN  NDIS_HANDLE     NdisVcHandle,\r
+    IN  PPNDIS_PACKET   PacketArray,\r
+    IN  UINT            NumberOfPackets);\r
+\r
+VOID\r
+EXPIMP\r
+NdisMCoIndicateStatus(\r
+    IN  NDIS_HANDLE MiniportAdapterHandle,\r
+    IN  NDIS_HANDLE NdisVcHandle    OPTIONAL,\r
+    IN  NDIS_STATUS GeneralStatus,\r
+    IN  PVOID       StatusBuffer    OPTIONAL,\r
+    IN  ULONG       StatusBufferSize);\r
+\r
+VOID\r
+EXPIMP\r
+NdisMCoReceiveComplete(\r
+    IN  NDIS_HANDLE MiniportAdapterHandle);\r
+\r
+VOID\r
+EXPIMP\r
+NdisMCoRequestComplete(\r
+    IN  NDIS_STATUS     Status,\r
+    IN  NDIS_HANDLE     MiniportAdapterHandle,\r
+    IN  PNDIS_REQUEST   Request);\r
+\r
+VOID \r
+EXPIMP\r
+NdisMCoSendComplete(\r
+    IN  NDIS_STATUS     Status,\r
+    IN  NDIS_HANDLE     NdisVcHandle,\r
+    IN  PNDIS_PACKET    Packet);\r
+\r
+\r
+/* NDIS 5.0 extensions for intermediate drivers */\r
+\r
+VOID\r
+EXPIMP\r
+NdisIMAssociateMiniport(\r
+    IN  NDIS_HANDLE DriverHandle,\r
+    IN  NDIS_HANDLE ProtocolHandle);\r
+\r
+NDIS_STATUS \r
+EXPIMP\r
+NdisIMCancelInitializeDeviceInstance(\r
+    IN  NDIS_HANDLE     DriverHandle,\r
+    IN  PNDIS_STRING    DeviceInstance);\r
+\r
+VOID\r
+EXPIMP\r
+NdisIMCopySendCompletePerPacketInfo(\r
+    IN  PNDIS_PACKET    DstPacket,\r
+    IN  PNDIS_PACKET    SrcPacket);\r
+\r
+VOID\r
+EXPIMP\r
+NdisIMCopySendPerPacketInfo(\r
+    IN  PNDIS_PACKET    DstPacket,\r
+    IN  PNDIS_PACKET    SrcPacket);\r
+\r
+VOID\r
+EXPIMP\r
+NdisIMDeregisterLayeredMiniport(\r
+    IN  NDIS_HANDLE DriverHandle);\r
+\r
+NDIS_HANDLE\r
+EXPIMP\r
+NdisIMGetBindingContext(\r
+    IN  NDIS_HANDLE NdisBindingHandle);\r
+\r
+NDIS_HANDLE\r
+EXPIMP\r
+NdisIMGetDeviceContext(\r
+    IN  NDIS_HANDLE MiniportAdapterHandle);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisIMInitializeDeviceInstanceEx(\r
+    IN  NDIS_HANDLE     DriverHandle,\r
+    IN  PNDIS_STRING    DriverInstance,\r
+    IN  NDIS_HANDLE     DeviceContext   OPTIONAL);\r
+\r
+#endif /* NDIS50 */\r
+\r
+\r
+\r
+/* NDIS structures available only to miniport drivers */\r
+\r
+#if defined(NDIS_WRAPPER) || defined(NDIS_MINIPORT_DRIVER)\r
+\r
+/* Obsolete technology specific defines */\r
+\r
+#define DECLARE_UNKNOWN_STRUCT(BaseName) \\r
+    typedef struct _##BaseName BaseName, *P##BaseName;\r
+\r
+#define DECLARE_UNKNOWN_PROTOTYPE(Name) \\r
+    typedef VOID (*##Name)(VOID);\r
+\r
+\r
+/* ARCnet */\r
+\r
+DECLARE_UNKNOWN_STRUCT(ARC_FILTER)\r
+\r
+\r
+VOID\r
+EXPIMP\r
+ArcFilterDprIndicateReceive(\r
+    IN  PARC_FILTER Filter,\r
+    IN  PUCHAR      pRawHeader,\r
+    IN  PUCHAR      pData,\r
+    IN  UINT        Length);\r
+\r
+VOID\r
+EXPIMP\r
+ArcFilterDprIndicateReceiveComplete(\r
+    IN  PARC_FILTER Filter);\r
+\r
+\r
+/* Ethernet */\r
+\r
+#define ETH_LENGTH_OF_ADDRESS   6\r
+\r
+DECLARE_UNKNOWN_STRUCT(ETH_FILTER)\r
+\r
+DECLARE_UNKNOWN_PROTOTYPE(ETH_ADDRESS_CHANGE)\r
+DECLARE_UNKNOWN_PROTOTYPE(ETH_FILTER_CHANGE)\r
+DECLARE_UNKNOWN_PROTOTYPE(ETH_DEFERRED_CLOSE)\r
+\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+EthChangeFilterAddresses(\r
+    IN  PETH_FILTER     Filter,\r
+    IN  NDIS_HANDLE     NdisFilterHandle,\r
+    IN  PNDIS_REQUEST   NdisRequest,\r
+    IN  UINT            AddressCount,\r
+    IN  CHAR            Addresses[] [ETH_LENGTH_OF_ADDRESS],\r
+    IN  BOOLEAN         Set);\r
+\r
+BOOLEAN\r
+EXPIMP\r
+EthCreateFilter(\r
+    IN  UINT                MaximumMulticastAddresses,\r
+    IN  ETH_ADDRESS_CHANGE  AddressChangeAction,\r
+    IN  ETH_FILTER_CHANGE   FilterChangeAction,\r
+    IN  ETH_DEFERRED_CLOSE  CloseAction,\r
+    IN  PUCHAR              AdapterAddress,\r
+    IN  PNDIS_SPIN_LOCK     Lock,\r
+    OUT PETH_FILTER         *Filter);\r
+\r
+VOID\r
+EXPIMP\r
+EthDeleteFilter(\r
+    IN  PETH_FILTER Filter);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+EthDeleteFilterOpenAdapter(\r
+    IN  PETH_FILTER    Filter,\r
+    IN  NDIS_HANDLE    NdisFilterHandle,\r
+    IN  PNDIS_REQUEST  NdisRequest);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+EthFilterAdjust(\r
+    IN  PETH_FILTER     Filter,\r
+    IN  NDIS_HANDLE     NdisFilterHandle,\r
+    IN  PNDIS_REQUEST   NdisRequest,\r
+    IN  UINT            FilterClasses,\r
+    IN  BOOLEAN         Set);\r
+\r
+VOID\r
+EXPIMP\r
+EthFilterIndicateReceive(\r
+    IN PETH_FILTER Filter,\r
+    IN NDIS_HANDLE MacReceiveContext,\r
+    IN PCHAR       Address,\r
+    IN PVOID       HeaderBuffer,\r
+    IN UINT        HeaderBufferSize,\r
+    IN PVOID       LookaheadBuffer,\r
+    IN UINT        LookaheadBufferSize,\r
+    IN UINT        PacketSize);\r
+\r
+VOID\r
+EXPIMP\r
+EthFilterIndicateReceiveComplete(\r
+    IN  PETH_FILTER Filter);\r
+\r
+BOOLEAN\r
+EXPIMP\r
+EthNoteFilterOpenAdapter(\r
+    IN  PETH_FILTER     Filter,\r
+    IN  NDIS_HANDLE     MacBindingHandle,\r
+    IN  NDIS_HANDLE     NdisBindingContext,\r
+    OUT PNDIS_HANDLE    NdisFilterHandle);\r
+\r
+UINT\r
+EXPIMP\r
+EthNumberOfOpenFilterAddresses(\r
+    IN  PETH_FILTER Filter,\r
+    IN  NDIS_HANDLE NdisFilterHandle);\r
+\r
+VOID\r
+EXPIMP\r
+EthQueryGlobalFilterAddresses (\r
+    OUT PNDIS_STATUS    Status,\r
+    IN  PETH_FILTER     Filter,\r
+    IN  UINT            SizeOfArray,\r
+    OUT PUINT           NumberOfAddresses,\r
+    IN  OUT    CHAR        AddressArray[] [ETH_LENGTH_OF_ADDRESS]);\r
+\r
+VOID\r
+EXPIMP\r
+EthQueryOpenFilterAddresses(\r
+    OUT            PNDIS_STATUS    Status,\r
+    IN     PETH_FILTER     Filter,\r
+    IN     NDIS_HANDLE     NdisFilterHandle,\r
+    IN     UINT            SizeOfArray,\r
+    OUT            PUINT           NumberOfAddresses,\r
+    IN OUT  CHAR            AddressArray[] [ETH_LENGTH_OF_ADDRESS]);\r
+\r
+BOOLEAN\r
+EXPIMP\r
+EthShouldAddressLoopBack(\r
+    IN  PETH_FILTER Filter,\r
+    IN  CHAR        Address[ETH_LENGTH_OF_ADDRESS]);\r
+\r
+\r
+/* FDDI */\r
+\r
+#define FDDI_LENGTH_OF_LONG_ADDRESS     6\r
+#define FDDI_LENGTH_OF_SHORT_ADDRESS    2\r
+\r
+DECLARE_UNKNOWN_STRUCT(FDDI_FILTER)\r
+\r
+DECLARE_UNKNOWN_PROTOTYPE(FDDI_ADDRESS_CHANGE)\r
+DECLARE_UNKNOWN_PROTOTYPE(FDDI_FILTER_CHANGE)\r
+DECLARE_UNKNOWN_PROTOTYPE(FDDI_DEFERRED_CLOSE)\r
+\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+FddiChangeFilterLongAddresses(\r
+    IN  PFDDI_FILTER    Filter,\r
+    IN  NDIS_HANDLE     NdisFilterHandle,\r
+    IN  PNDIS_REQUEST   NdisRequest,\r
+    IN  UINT            AddressCount,\r
+    IN  CHAR            Addresses[] [FDDI_LENGTH_OF_LONG_ADDRESS],\r
+    IN  BOOLEAN         Set);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+FddiChangeFilterShortAddresses(\r
+    IN  PFDDI_FILTER    Filter,\r
+    IN  NDIS_HANDLE     NdisFilterHandle,\r
+    IN  PNDIS_REQUEST   NdisRequest,\r
+    IN  UINT            AddressCount,\r
+    IN  CHAR            Addresses[] [FDDI_LENGTH_OF_SHORT_ADDRESS],\r
+    IN  BOOLEAN         Set);\r
+\r
+BOOLEAN\r
+EXPIMP\r
+FddiCreateFilter(\r
+    IN  UINT                MaximumMulticastLongAddresses,\r
+    IN  UINT                MaximumMulticastShortAddresses,\r
+    IN  FDDI_ADDRESS_CHANGE AddressChangeAction,\r
+    IN  FDDI_FILTER_CHANGE  FilterChangeAction,\r
+    IN  FDDI_DEFERRED_CLOSE CloseAction,\r
+    IN  PUCHAR              AdapterLongAddress,\r
+    IN  PUCHAR              AdapterShortAddress,\r
+    IN  PNDIS_SPIN_LOCK     Lock,\r
+    OUT PFDDI_FILTER        *Filter);\r
+\r
+VOID\r
+EXPIMP\r
+FddiDeleteFilter(\r
+    IN  PFDDI_FILTER    Filter);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+FddiDeleteFilterOpenAdapter(\r
+    IN  PFDDI_FILTER    Filter,\r
+    IN  NDIS_HANDLE     NdisFilterHandle,\r
+    IN  PNDIS_REQUEST   NdisRequest);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+FddiFilterAdjust(\r
+    IN  PFDDI_FILTER    Filter,\r
+    IN  NDIS_HANDLE     NdisFilterHandle,\r
+    IN  PNDIS_REQUEST   NdisRequest,\r
+    IN  UINT            FilterClasses,\r
+    IN  BOOLEAN         Set);\r
+\r
+VOID\r
+EXPIMP\r
+FddiFilterIndicateReceive(\r
+    IN  PFDDI_FILTER    Filter,\r
+    IN  NDIS_HANDLE     MacReceiveContext,\r
+    IN  PCHAR           Address,\r
+    IN  UINT            AddressLength,\r
+    IN  PVOID           HeaderBuffer,\r
+    IN  UINT            HeaderBufferSize,\r
+    IN  PVOID           LookaheadBuffer,\r
+    IN  UINT            LookaheadBufferSize,\r
+    IN  UINT            PacketSize);\r
+\r
+VOID\r
+EXPIMP\r
+FddiFilterIndicateReceiveComplete(\r
+    IN  PFDDI_FILTER    Filter);\r
+\r
+BOOLEAN\r
+EXPIMP\r
+FddiNoteFilterOpenAdapter(\r
+    IN  PFDDI_FILTER    Filter,\r
+    IN  NDIS_HANDLE     MacBindingHandle,\r
+    IN  NDIS_HANDLE     NdisBindingContext,\r
+    OUT PNDIS_HANDLE    NdisFilterHandle);\r
+\r
+UINT\r
+EXPIMP\r
+FddiNumberOfOpenFilterLongAddresses(\r
+    IN  PFDDI_FILTER    Filter,\r
+    IN  NDIS_HANDLE     NdisFilterHandle);\r
+\r
+UINT\r
+EXPIMP\r
+FddiNumberOfOpenFilterShortAddresses(\r
+    IN  PFDDI_FILTER    Filter,\r
+    IN  NDIS_HANDLE     NdisFilterHandle);\r
+\r
+VOID\r
+EXPIMP\r
+FddiQueryGlobalFilterLongAddresses(\r
+    OUT     PNDIS_STATUS    Status,\r
+    IN      PFDDI_FILTER    Filter,\r
+    IN      UINT            SizeOfArray,\r
+    OUT     PUINT           NumberOfAddresses,\r
+    IN OUT  CHAR            AddressArray[] [FDDI_LENGTH_OF_LONG_ADDRESS]);\r
+\r
+VOID\r
+EXPIMP\r
+FddiQueryGlobalFilterShortAddresses(\r
+    OUT     PNDIS_STATUS    Status,\r
+    IN      PFDDI_FILTER    Filter,\r
+    IN      UINT            SizeOfArray,\r
+    OUT     PUINT           NumberOfAddresses,\r
+    IN OUT  CHAR            AddressArray[] [FDDI_LENGTH_OF_SHORT_ADDRESS]);\r
+\r
+VOID\r
+EXPIMP\r
+FddiQueryOpenFilterLongAddresses(\r
+    OUT     PNDIS_STATUS    Status,\r
+    IN      PFDDI_FILTER    Filter,\r
+    IN      NDIS_HANDLE     NdisFilterHandle,\r
+    IN      UINT            SizeOfArray,\r
+    OUT     PUINT           NumberOfAddresses,\r
+    IN OUT  CHAR            AddressArray[] [FDDI_LENGTH_OF_LONG_ADDRESS]);\r
+\r
+VOID\r
+EXPIMP\r
+FddiQueryOpenFilterShortAddresses(\r
+    OUT     PNDIS_STATUS    Status,\r
+    IN      PFDDI_FILTER    Filter,\r
+    IN      NDIS_HANDLE     NdisFilterHandle,\r
+    IN      UINT            SizeOfArray,\r
+    OUT     PUINT           NumberOfAddresses,\r
+    IN OUT  CHAR            AddressArray[] [FDDI_LENGTH_OF_SHORT_ADDRESS]);\r
+\r
+BOOLEAN\r
+EXPIMP\r
+FddiShouldAddressLoopBack(\r
+    IN  PFDDI_FILTER    Filter,\r
+    IN  CHAR            Address[],\r
+    IN  UINT            LengthOfAddress);\r
+\r
+\r
+/* Token Ring */\r
+\r
+#define TR_LENGTH_OF_FUNCTIONAL 4\r
+#define TR_LENGTH_OF_ADDRESS    6\r
+\r
+DECLARE_UNKNOWN_STRUCT(TR_FILTER)\r
+\r
+DECLARE_UNKNOWN_PROTOTYPE(TR_ADDRESS_CHANGE)\r
+DECLARE_UNKNOWN_PROTOTYPE(TR_GROUP_CHANGE)\r
+DECLARE_UNKNOWN_PROTOTYPE(TR_FILTER_CHANGE)\r
+DECLARE_UNKNOWN_PROTOTYPE(TR_DEFERRED_CLOSE)\r
+\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+TrChangeFunctionalAddress(\r
+    IN  PTR_FILTER      Filter,\r
+    IN  NDIS_HANDLE     NdisFilterHandle,\r
+    IN  PNDIS_REQUEST   NdisRequest,\r
+    IN  CHAR            FunctionalAddressArray[TR_LENGTH_OF_FUNCTIONAL],\r
+    IN  BOOLEAN         Set);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+TrChangeGroupAddress(\r
+    IN  PTR_FILTER      Filter,\r
+    IN  NDIS_HANDLE     NdisFilterHandle,\r
+    IN  PNDIS_REQUEST   NdisRequest,\r
+    IN  CHAR            GroupAddressArray[TR_LENGTH_OF_FUNCTIONAL],\r
+    IN  BOOLEAN         Set);\r
+\r
+BOOLEAN\r
+EXPIMP\r
+TrCreateFilter(\r
+    IN  TR_ADDRESS_CHANGE   AddressChangeAction,\r
+    IN  TR_GROUP_CHANGE     GroupChangeAction,\r
+    IN  TR_FILTER_CHANGE    FilterChangeAction,\r
+    IN  TR_DEFERRED_CLOSE   CloseAction,\r
+    IN  PUCHAR              AdapterAddress,\r
+    IN  PNDIS_SPIN_LOCK     Lock,\r
+    OUT PTR_FILTER          *Filter);\r
+\r
+VOID\r
+EXPIMP\r
+TrDeleteFilter(\r
+    IN  PTR_FILTER  Filter);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+TrDeleteFilterOpenAdapter (\r
+    IN  PTR_FILTER      Filter,\r
+    IN  NDIS_HANDLE     NdisFilterHandle,\r
+    IN  PNDIS_REQUEST   NdisRequest);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+TrFilterAdjust(\r
+    IN  PTR_FILTER      Filter,\r
+    IN  NDIS_HANDLE     NdisFilterHandle,\r
+    IN  PNDIS_REQUEST   NdisRequest,\r
+    IN  UINT            FilterClasses,\r
+    IN  BOOLEAN         Set);\r
+\r
+VOID\r
+EXPIMP\r
+TrFilterIndicateReceive(\r
+    IN  PTR_FILTER  Filter,\r
+    IN  NDIS_HANDLE MacReceiveContext,\r
+    IN  PVOID       HeaderBuffer,\r
+    IN  UINT        HeaderBufferSize,\r
+    IN  PVOID       LookaheadBuffer,\r
+    IN  UINT        LookaheadBufferSize,\r
+    IN  UINT        PacketSize);\r
+\r
+VOID\r
+EXPIMP\r
+TrFilterIndicateReceiveComplete(\r
+    IN  PTR_FILTER  Filter);\r
+\r
+BOOLEAN\r
+EXPIMP\r
+TrNoteFilterOpenAdapter(\r
+    IN  PTR_FILTER      Filter,\r
+    IN  NDIS_HANDLE     MacBindingHandle,\r
+    IN  NDIS_HANDLE     NdisBindingContext,\r
+    OUT PNDIS_HANDLE    NdisFilterHandle);\r
+\r
+BOOLEAN\r
+EXPIMP\r
+TrShouldAddressLoopBack(\r
+    IN  PTR_FILTER  Filter,\r
+    IN  CHAR        DestinationAddress[TR_LENGTH_OF_ADDRESS],\r
+    IN  CHAR        SourceAddress[TR_LENGTH_OF_ADDRESS]);\r
+\r
+\r
+\r
+/* Prototypes for NDIS_MINIPORT_CHARACTERISTICS */\r
+\r
+typedef BOOLEAN (*W_CHECK_FOR_HANG_HANDLER)(\r
+    IN  NDIS_HANDLE MiniportAdapterContext);\r
+\r
+typedef VOID (*W_DISABLE_INTERRUPT_HANDLER)(\r
+    IN  NDIS_HANDLE MiniportAdapterContext);\r
+\r
+typedef VOID (*W_ENABLE_INTERRUPT_HANDLER)(\r
+    IN  NDIS_HANDLE MiniportAdapterContext);\r
+\r
+typedef VOID (*W_HALT_HANDLER)(\r
+    IN  NDIS_HANDLE MiniportAdapterContext);\r
+\r
+typedef VOID (*W_HANDLE_INTERRUPT_HANDLER)(\r
+    IN  NDIS_HANDLE MiniportAdapterContext);\r
+\r
+typedef NDIS_STATUS (*W_INITIALIZE_HANDLER)(\r
+    OUT PNDIS_STATUS    OpenErrorStatus,\r
+    OUT PUINT           SelectedMediumIndex,\r
+    IN  PNDIS_MEDIUM    MediumArray,\r
+    IN  UINT            MediumArraySize,\r
+    IN  NDIS_HANDLE     MiniportAdapterContext,\r
+    IN  NDIS_HANDLE     WrapperConfigurationContext);\r
+\r
+typedef VOID (*W_ISR_HANDLER)(\r
+    OUT PBOOLEAN                               InterruptRecognized,\r
+    OUT PBOOLEAN                               QueueMiniportHandleInterrupt,\r
+    IN NDIS_HANDLE                             MiniportAdapterContext);\r
+\r
+typedef NDIS_STATUS (*W_QUERY_INFORMATION_HANDLER)(\r
+    IN  NDIS_HANDLE MiniportAdapterContext,\r
+    IN  NDIS_OID    Oid,\r
+    IN  PVOID       InformationBuffer,\r
+    IN  ULONG       InformationBufferLength,\r
+    OUT PULONG      BytesWritten,\r
+    OUT PULONG      BytesNeeded);\r
+\r
+typedef NDIS_STATUS (*W_RECONFIGURE_HANDLER)(\r
+    OUT PNDIS_STATUS    OpenErrorStatus,\r
+    IN  NDIS_HANDLE     MiniportAdapterContext,\r
+    IN  NDIS_HANDLE        WrapperConfigurationContext);\r
+\r
+typedef NDIS_STATUS (*W_RESET_HANDLER)(\r
+    OUT PBOOLEAN    AddressingReset,\r
+    IN  NDIS_HANDLE MiniportAdapterContext);\r
+\r
+typedef NDIS_STATUS (*W_SEND_HANDLER)(\r
+    IN  NDIS_HANDLE     MiniportAdapterContext,\r
+    IN  PNDIS_PACKET    Packet,\r
+    IN  UINT            Flags);\r
+\r
+typedef NDIS_STATUS (*WM_SEND_HANDLER)(\r
+    IN  NDIS_HANDLE         MiniportAdapterContext,\r
+    IN  NDIS_HANDLE         NdisLinkHandle,\r
+    IN  PNDIS_WAN_PACKET    Packet);\r
+\r
+typedef NDIS_STATUS (*W_SET_INFORMATION_HANDLER)(\r
+    IN  NDIS_HANDLE MiniportAdapterContext,\r
+    IN  NDIS_OID    Oid,\r
+    IN  PVOID       InformationBuffer,\r
+    IN  ULONG       InformationBufferLength,\r
+    OUT PULONG      BytesRead,\r
+    OUT PULONG      BytesNeeded);\r
+\r
+typedef NDIS_STATUS (*W_TRANSFER_DATA_HANDLER)(\r
+    OUT PNDIS_PACKET    Packet,\r
+    OUT PUINT           BytesTransferred,\r
+    IN  NDIS_HANDLE     MiniportAdapterContext,\r
+    IN  NDIS_HANDLE     MiniportReceiveContext,\r
+    IN  UINT            ByteOffset,\r
+    IN  UINT            BytesToTransfer);\r
+\r
+typedef NDIS_STATUS (*WM_TRANSFER_DATA_HANDLER)(\r
+    VOID);\r
+\r
+typedef struct _NDIS30_MINIPORT_CHARACTERISTICS\r
+{\r
+    UCHAR                           MajorNdisVersion;\r
+    UCHAR                           MinorNdisVersion;\r
+    UINT                            Reserved;\r
+    W_CHECK_FOR_HANG_HANDLER        CheckForHangHandler;\r
+    W_DISABLE_INTERRUPT_HANDLER     DisableInterruptHandler;\r
+    W_ENABLE_INTERRUPT_HANDLER      EnableInterruptHandler;\r
+    W_HALT_HANDLER                  HaltHandler;\r
+    W_HANDLE_INTERRUPT_HANDLER      HandleInterruptHandler;\r
+    W_INITIALIZE_HANDLER            InitializeHandler;\r
+    W_ISR_HANDLER                   ISRHandler;\r
+    W_QUERY_INFORMATION_HANDLER     QueryInformationHandler;\r
+    W_RECONFIGURE_HANDLER           ReconfigureHandler;\r
+    W_RESET_HANDLER                 ResetHandler;\r
+    union\r
+    {\r
+        W_SEND_HANDLER              SendHandler;\r
+        WM_SEND_HANDLER             WanSendHandler;\r
+    };\r
+    W_SET_INFORMATION_HANDLER       SetInformationHandler;\r
+    union\r
+    {\r
+        W_TRANSFER_DATA_HANDLER     TransferDataHandler;\r
+        WM_TRANSFER_DATA_HANDLER    WanTransferDataHandler;\r
+    };\r
+} NDIS30_MINIPORT_CHARACTERISTICS;\r
+\r
+\r
+/* Extensions for NDIS 4.0 miniports */\r
+#ifdef NDIS40\r
+\r
+typedef VOID (*W_RETURN_PACKET_HANDLER)(\r
+    IN  NDIS_HANDLE     MiniportAdapterContext,\r
+    IN  PNDIS_PACKET    Packet);\r
+\r
+typedef VOID (*W_SEND_PACKETS_HANDLER)(\r
+    IN  NDIS_HANDLE     MiniportAdapterContext,\r
+    IN  PPNDIS_PACKET   PacketArray,\r
+    IN  UINT            NumberOfPackets);\r
+\r
+typedef VOID (*W_ALLOCATE_COMPLETE_HANDLER)(\r
+    IN  NDIS_HANDLE             MiniportAdapterContext,\r
+    IN  PVOID                   VirtualAddress,\r
+    IN  PNDIS_PHYSICAL_ADDRESS  PhysicalAddress,\r
+    IN  ULONG                   Length,\r
+    IN  PVOID                   Context);\r
+\r
+typedef struct _NDIS40_MINIPORT_CHARACTERISTICS\r
+{\r
+    NDIS30_MINIPORT_CHARACTERISTICS;\r
+\r
+    W_RETURN_PACKET_HANDLER     ReturnPacketHandler;\r
+    W_SEND_PACKETS_HANDLER      SendPacketsHandler;\r
+    W_ALLOCATE_COMPLETE_HANDLER AllocateCompleteHandler;\r
+} NDIS40_MINIPORT_CHARACTERISTICS;\r
+\r
+#endif /* NDIS40 */\r
+\r
+/* Extensions for NDIS 5.0 miniports */\r
+\r
+#ifdef NDIS50\r
+\r
+typedef NDIS_STATUS (*W_CO_CREATE_VC_HANDLER)(\r
+    IN  NDIS_HANDLE     MiniportAdapterContext,\r
+    IN  NDIS_HANDLE     NdisVcHandle,\r
+    OUT PNDIS_HANDLE    MiniportVcContext);\r
+\r
+typedef NDIS_STATUS (*W_CO_DELETE_VC_HANDLER)(\r
+    IN  NDIS_HANDLE MiniportVcContext);\r
+\r
+typedef NDIS_STATUS (*W_CO_ACTIVATE_VC_HANDLER)(\r
+    IN      NDIS_HANDLE         MiniportVcContext,\r
+    IN OUT  PCO_CALL_PARAMETERS CallParameters);\r
+\r
+typedef NDIS_STATUS (*W_CO_DEACTIVATE_VC_HANDLER)(\r
+    IN  NDIS_HANDLE MiniportVcContext);\r
+\r
+typedef VOID (*W_CO_SEND_PACKETS_HANDLER)(\r
+    IN  NDIS_HANDLE     MiniportVcContext,\r
+    IN  PPNDIS_PACKET   PacketArray,\r
+    IN  UINT            NumberOfPackets);\r
+\r
+typedef NDIS_STATUS (*W_CO_REQUEST_HANDLER)(\r
+    IN      NDIS_HANDLE     MiniportAdapterContext,\r
+    IN      NDIS_HANDLE     MiniportVcContext   OPTIONAL,\r
+    IN OUT  PNDIS_REQUEST   NdisRequest);\r
+\r
+typedef struct _NDIS50_MINIPORT_CHARACTERISTICS\r
+{\r
+    NDIS40_MINIPORT_CHARACTERISTICS;\r
+\r
+    W_CO_CREATE_VC_HANDLER      CoCreateVcHandler;\r
+    W_CO_DELETE_VC_HANDLER         CoDeleteVcHandler;\r
+    W_CO_ACTIVATE_VC_HANDLER    CoActivateVcHandler;\r
+    W_CO_DEACTIVATE_VC_HANDLER  CoDeactivateVcHandler;\r
+    W_CO_SEND_PACKETS_HANDLER   CoSendPacketsHandler;\r
+    W_CO_REQUEST_HANDLER        CoRequestHandler;\r
+} NDIS50_MINIPORT_CHARACTERISTICS;\r
+\r
+#endif /* NDIS50 */\r
+\r
+\r
+#ifndef NDIS50\r
+#ifndef NDIS40\r
+typedef struct _NDIS30_MINIPORT_CHARACTERISTICS        NDIS_MINIPORT_CHARACTERISTICS;\r
+#else /* NDIS40 */\r
+typedef struct _NDIS40_MINIPORT_CHARACTERISTICS        NDIS_MINIPORT_CHARACTERISTICS;\r
+#endif /* NDIS40 */\r
+#else /* NDIS50 */\r
+typedef struct _NDIS50_MINIPORT_CHARACTERISTICS        NDIS_MINIPORT_CHARACTERISTICS;\r
+#endif /* NDIS50 */\r
+\r
+typedef        NDIS_MINIPORT_CHARACTERISTICS *PNDIS_MINIPORT_CHARACTERISTICS;\r
+\r
+\r
+typedef struct _NDIS_MINIPORT_BLOCK NDIS_MINIPORT_BLOCK, *PNDIS_MINIPORT_BLOCK;\r
+\r
+\r
+typedef struct _NDIS_MINIPORT_INTERRUPT\r
+{\r
+    PKINTERRUPT                 InterruptObject;\r
+    KSPIN_LOCK                  DpcCountLock;\r
+    PVOID                       MiniportIdField;\r
+    W_ISR_HANDLER               MiniportIsr;\r
+    W_HANDLE_INTERRUPT_HANDLER  MiniportDpc;\r
+    KDPC                        InterruptDpc;\r
+    PNDIS_MINIPORT_BLOCK        Miniport;\r
+\r
+    UCHAR                       DpcCount;\r
+    BOOLEAN                     Filler1;\r
+\r
+    KEVENT                      DpcsCompletedEvent;\r
+\r
+    BOOLEAN                     SharedInterrupt;\r
+    BOOLEAN                        IsrRequested;\r
+} NDIS_MINIPORT_INTERRUPT, *PNDIS_MINIPORT_INTERRUPT;\r
+\r
+\r
+typedef struct _NDIS_MINIPORT_TIMER\r
+{\r
+    KTIMER                      Timer;\r
+    KDPC                        Dpc;\r
+    PNDIS_TIMER_FUNCTION        MiniportTimerFunction;\r
+    PVOID                       MiniportTimerContext;\r
+    PNDIS_MINIPORT_BLOCK        Miniport;\r
+    struct _NDIS_MINIPORT_TIMER *NextDeferredTimer;\r
+} NDIS_MINIPORT_TIMER, *PNDIS_MINIPORT_TIMER;\r
+\r
+\r
+\r
+/* NDIS intermediate miniport structures */\r
+\r
+typedef VOID (*W_MINIPORT_CALLBACK)(\r
+    IN  NDIS_HANDLE MiniportAdapterContext,\r
+    IN  PVOID       CallbackContext);\r
+\r
+\r
+/* Routines for NDIS miniport drivers */\r
+\r
+VOID\r
+EXPIMP\r
+NdisMCloseLog(\r
+    IN  NDIS_HANDLE LogHandle);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisMCreateLog(\r
+    IN  NDIS_HANDLE     MiniportAdapterHandle,\r
+    IN  UINT            Size,\r
+    OUT PNDIS_HANDLE    LogHandle);\r
+\r
+VOID\r
+EXPIMP\r
+NdisMDeregisterAdapterShutdownHandler(\r
+    IN  NDIS_HANDLE MiniportHandle);\r
+\r
+VOID\r
+EXPIMP\r
+NdisMFlushLog(\r
+    IN  NDIS_HANDLE LogHandle);\r
+\r
+VOID\r
+EXPIMP\r
+NdisMIndicateStatus(\r
+    IN  NDIS_HANDLE MiniportAdapterHandle,\r
+    IN  NDIS_STATUS GeneralStatus,\r
+    IN  PVOID       StatusBuffer,\r
+    IN  UINT        StatusBufferSize);\r
+\r
+VOID\r
+EXPIMP\r
+NdisMIndicateStatusComplete(\r
+    IN  NDIS_HANDLE MiniportAdapterHandle);\r
+\r
+VOID\r
+EXPIMP\r
+NdisInitializeWrapper(\r
+    OUT PNDIS_HANDLE    NdisWrapperHandle,\r
+    IN  PVOID           SystemSpecific1,\r
+    IN  PVOID           SystemSpecific2,\r
+    IN  PVOID           SystemSpecific3);\r
+\r
+/*\r
+ * VOID NdisMInitializeWrapper(\r
+ *    OUT PNDIS_HANDLE    NdisWrapperHandle,\r
+ *    IN  PVOID           SystemSpecific1,\r
+ *    IN  PVOID           SystemSpecific2,\r
+ *    IN  PVOID           SystemSpecific3);\r
+ */\r
+#define NdisMInitializeWrapper(n, s1, s2, s3) \\r
+    NdisInitializeWrapper((n),(s1),(s2),(s3))\r
+\r
+VOID\r
+EXPIMP\r
+NdisMRegisterAdapterShutdownHandler(\r
+    IN  NDIS_HANDLE                 MiniportHandle,\r
+    IN  PVOID                       ShutdownContext,\r
+    IN  ADAPTER_SHUTDOWN_HANDLER    ShutdownHandler);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisMRegisterMiniport(\r
+    IN  NDIS_HANDLE                     NdisWrapperHandle,\r
+    IN  PNDIS_MINIPORT_CHARACTERISTICS  MiniportCharacteristics,\r
+    IN  UINT                            CharacteristicsLength);\r
+\r
+VOID\r
+EXPIMP\r
+NdisMResetComplete(\r
+    IN  NDIS_HANDLE MiniportAdapterHandle,\r
+    IN  NDIS_STATUS Status,\r
+    IN  BOOLEAN     AddressingReset);\r
+\r
+VOID\r
+EXPIMP\r
+NdisMSendComplete(\r
+    IN  NDIS_HANDLE     MiniportAdapterHandle,\r
+    IN  PNDIS_PACKET    Packet,\r
+    IN  NDIS_STATUS     Status);\r
+\r
+VOID\r
+EXPIMP\r
+NdisMSendResourcesAvailable(\r
+    IN  NDIS_HANDLE MiniportAdapterHandle);\r
+\r
+VOID\r
+EXPIMP\r
+NdisMSetAttributes(\r
+    IN  NDIS_HANDLE         MiniportAdapterHandle,\r
+    IN  NDIS_HANDLE         MiniportAdapterContext,\r
+    IN  BOOLEAN             BusMaster,\r
+    IN  NDIS_INTERFACE_TYPE AdapterType);\r
+\r
+VOID \r
+EXPIMP\r
+NdisMSetAttributesEx(\r
+    IN  NDIS_HANDLE         MiniportAdapterHandle,\r
+    IN  NDIS_HANDLE         MiniportAdapterContext,\r
+    IN  UINT                CheckForHangTimeInSeconds   OPTIONAL,\r
+    IN  ULONG               AttributeFlags,\r
+    IN  NDIS_INTERFACE_TYPE AdapterType); \r
+\r
+VOID\r
+EXPIMP\r
+NdisMSleep(\r
+    IN  ULONG   MicrosecondsToSleep);\r
+\r
+BOOLEAN\r
+EXPIMP\r
+NdisMSynchronizeWithInterrupt(\r
+    IN  PNDIS_MINIPORT_INTERRUPT    Interrupt,\r
+    IN  PVOID                       SynchronizeFunction,\r
+    IN  PVOID                       SynchronizeContext);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisMWriteLogData(\r
+    IN  NDIS_HANDLE LogHandle,\r
+    IN  PVOID       LogBuffer,\r
+    IN  UINT        LogBufferSize);\r
+\r
+VOID\r
+EXPIMP\r
+NdisTerminateWrapper(\r
+    IN  NDIS_HANDLE NdisWrapperHandle,\r
+    IN  PVOID       SystemSpecific);\r
+\r
+\r
+\r
+/* Routines for intermediate miniport drivers */\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisIMDeInitializeDeviceInstance(\r
+    IN  NDIS_HANDLE NdisMiniportHandle);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisIMInitializeDeviceInstance(\r
+    IN  NDIS_HANDLE     DriverHandle,\r
+    IN  PNDIS_STRING    DeviceInstance);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisIMQueueMiniportCallback(\r
+    IN  NDIS_HANDLE         MiniportAdapterHandle,\r
+    IN  W_MINIPORT_CALLBACK CallbackRoutine,\r
+    IN  PVOID               CallbackContext);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisIMRegisterLayeredMiniport(\r
+    IN  NDIS_HANDLE                     NdisWrapperHandle,\r
+    IN  PNDIS_MINIPORT_CHARACTERISTICS  MiniportCharacteristics,\r
+    IN  UINT                            CharacteristicsLength,\r
+    OUT PNDIS_HANDLE                    DriverHandle);\r
+\r
+VOID\r
+EXPIMP\r
+NdisIMRevertBack(\r
+    IN  NDIS_HANDLE MiniportAdapterHandle,\r
+    IN  NDIS_HANDLE SwitchHandle);\r
+\r
+BOOLEAN\r
+EXPIMP\r
+NdisIMSwitchToMiniport(\r
+    IN  NDIS_HANDLE     MiniportAdapterHandle,\r
+    OUT PNDIS_HANDLE    SwitchHandle);\r
+\r
+\r
+VOID\r
+EXPIMP\r
+NdisMSetResetTimeout(\r
+    IN  NDIS_HANDLE MiniportAdapterHandle,\r
+    IN  UINT        TimeInSeconds);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisMAllocateMapRegisters(\r
+    IN  NDIS_HANDLE MiniportAdapterHandle,\r
+    IN  UINT        DmaChannel,\r
+    IN  BOOLEAN     Dma32BitAddresses,\r
+    IN  ULONG       PhysicalMapRegistersNeeded,\r
+    IN  ULONG       MaximumPhysicalMapping);\r
+\r
+VOID\r
+EXPIMP\r
+NdisMFreeMapRegisters(\r
+    IN  NDIS_HANDLE MiniportAdapterHandle);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisMRegisterIoPortRange(\r
+    OUT PVOID *     PortOffset,\r
+    IN  NDIS_HANDLE MiniportAdapterHandle,\r
+    IN  UINT        InitialPort,\r
+    IN  UINT        NumberOfPorts);\r
+\r
+VOID\r
+EXPIMP\r
+NdisMDeregisterIoPortRange(\r
+    IN  NDIS_HANDLE MiniportAdapterHandle,\r
+    IN  UINT        InitialPort,\r
+    IN  UINT        NumberOfPorts,\r
+    IN  PVOID       PortOffset);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisMMapIoSpace(\r
+    OUT PVOID *                 VirtualAddress,\r
+    IN  NDIS_HANDLE             MiniportAdapterHandle,\r
+    IN  NDIS_PHYSICAL_ADDRESS   PhysicalAddress,\r
+    IN  UINT                    Length);\r
+\r
+VOID\r
+EXPIMP\r
+NdisMUnmapIoSpace(\r
+    IN  NDIS_HANDLE MiniportAdapterHandle,\r
+    IN  PVOID       VirtualAddress,\r
+    IN  UINT        Length);\r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisMRegisterInterrupt(\r
+    OUT PNDIS_MINIPORT_INTERRUPT    Interrupt,\r
+    IN  NDIS_HANDLE                 MiniportAdapterHandle,\r
+    IN  UINT                        InterruptVector,\r
+    IN  UINT                        InterruptLevel,\r
+    IN  BOOLEAN                            RequestIsr,\r
+    IN  BOOLEAN                     SharedInterrupt,\r
+    IN  NDIS_INTERRUPT_MODE         InterruptMode);\r
+\r
+VOID\r
+EXPIMP\r
+NdisMDeregisterInterrupt(\r
+    IN  PNDIS_MINIPORT_INTERRUPT    Interrupt);\r
+\r
+BOOLEAN\r
+EXPIMP\r
+NdisMSynchronizeWithInterrupt(\r
+    IN  PNDIS_MINIPORT_INTERRUPT    Interrupt,\r
+    IN  PVOID                       SynchronizeFunction,\r
+    IN  PVOID                       SynchronizeContext);\r
+\r
+VOID\r
+EXPIMP\r
+NdisMQueryAdapterResources(\r
+    OUT PNDIS_STATUS        Status,\r
+    IN  NDIS_HANDLE         WrapperConfigurationContext,\r
+    OUT PNDIS_RESOURCE_LIST ResourceList,\r
+    IN  OUT PUINT           BufferSize);\r
+\r
+\r
+/* Functions obsoleted by NDIS 5.0 */\r
+\r
+VOID\r
+EXPIMP\r
+NdisFreeDmaChannel(\r
+    IN  PNDIS_HANDLE    NdisDmaHandle);\r
+\r
+VOID\r
+EXPIMP\r
+NdisFreeSharedMemory(\r
+    IN NDIS_HANDLE              NdisAdapterHandle,\r
+    IN ULONG                    Length,\r
+    IN BOOLEAN                  Cached,\r
+    IN PVOID                    VirtualAddress,\r
+    IN NDIS_PHYSICAL_ADDRESS    PhysicalAddress); \r
+\r
+NDIS_STATUS\r
+EXPIMP\r
+NdisIMQueueMiniportCallback(\r
+    IN  NDIS_HANDLE         MiniportAdapterHandle,\r
+    IN  W_MINIPORT_CALLBACK CallbackRoutine,\r
+    IN  PVOID               CallbackContext);\r
+\r
+VOID\r
+EXPIMP\r
+NdisIMRevertBack(\r
+    IN  NDIS_HANDLE MiniportAdapterHandle,\r
+    IN  NDIS_HANDLE SwitchHandle);\r
+\r
+BOOLEAN\r
+EXPIMP\r
+NdisIMSwitchToMiniport(\r
+    IN  NDIS_HANDLE     MiniportAdapterHandle,\r
+    OUT PNDIS_HANDLE    SwitchHandle);\r
+\r
+VOID\r
+EXPIMP\r
+NdisSetupDmaTransfer(\r
+    OUT PNDIS_STATUS    Status,\r
+    IN  PNDIS_HANDLE    NdisDmaHandle,\r
+    IN  PNDIS_BUFFER    Buffer,\r
+    IN  ULONG           Offset,\r
+    IN  ULONG           Length,\r
+    IN  BOOLEAN         WriteToDevice);\r
+\r
+NTSTATUS\r
+EXPIMP\r
+NdisUpcaseUnicodeString(\r
+    OUT PUNICODE_STRING DestinationString,  \r
+    IN  PUNICODE_STRING SourceString);\r
+\r
+VOID\r
+EXPIMP\r
+NdisUpdateSharedMemory(\r
+    IN  NDIS_HANDLE             NdisAdapterHandle,\r
+    IN  ULONG                   Length,\r
+    IN  PVOID                   VirtualAddress,\r
+    IN  NDIS_PHYSICAL_ADDRESS   PhysicalAddress);\r
+\r
+#endif /* NDIS_WRAPPER || NDIS_MINIPORT_DRIVER */\r
+\r
+#ifdef __cplusplus\r
+};\r
+#endif /* __cplusplus */\r
+\r
+#endif /* __NDIS_H */\r
+\r
+/* EOF */\r
diff --git a/reactos/include/net/ndisoid.h b/reactos/include/net/ndisoid.h
new file mode 100644 (file)
index 0000000..8680868
--- /dev/null
@@ -0,0 +1,410 @@
+/*\r
+ * COPYRIGHT:   See COPYING in the top level directory\r
+ * PROJECT:     ReactOS NDIS library\r
+ * FILE:        include/net/ndisoid.h\r
+ * PURPOSE:     NDIS Object ID constants\r
+ */\r
+#ifndef __NDISOID_H\r
+#define __NDISOID_H\r
+\r
+\r
+typedef ULONG NDIS_OID, *PNDIS_OID;\r
+\r
+/* Self-contained variable data structure */\r
+typedef struct _NDIS_VAR_DATA_DESC\r
+{\r
+    USHORT  Length;           /* Number of bytes of data */\r
+    USHORT  MaximumLength; /* Number of bytes available */\r
+    LONG    Offset;        /* Offset of data relative to the descriptor */\r
+} NDIS_VAR_DATA_DESC, *PNDIS_VAR_DATA_DESC;\r
+\r
+\r
+\r
+/* NDIS 4.0 structures */\r
+\r
+/* Structure used by TRANSLATE_NAME IOCTL */\r
+typedef struct _NET_PNP_ID\r
+{\r
+    ULONG   ClassId;\r
+    ULONG   Token;\r
+} NET_PNP_ID, *PNET_PNP_ID;\r
+\r
+\r
+typedef struct _NET_PNP_TRANSLATE_LIST\r
+{\r
+    ULONG       BytesNeeded;\r
+    NET_PNP_ID  IdArray[ANYSIZE_ARRAY];\r
+} NET_PNP_TRANSLATE_LIST, *PNET_PNP_TRANSLATE_LIST;\r
+\r
+\r
+\r
+/* Generel objects */\r
+\r
+/* General operational characteristics */\r
+\r
+/* Mandatory */\r
+#define OID_GEN_SUPPORTED_LIST                  0x00010101\r
+#define OID_GEN_HARDWARE_STATUS                 0x00010102\r
+#define OID_GEN_MEDIA_SUPPORTED                 0x00010103\r
+#define OID_GEN_MEDIA_IN_USE                    0x00010104\r
+#define OID_GEN_MAXIMUM_LOOKAHEAD               0x00010105\r
+#define OID_GEN_MAXIMUM_FRAME_SIZE              0x00010106\r
+#define OID_GEN_LINK_SPEED                      0x00010107\r
+#define OID_GEN_TRANSMIT_BUFFER_SPACE           0x00010108\r
+#define OID_GEN_RECEIVE_BUFFER_SPACE            0x00010109\r
+#define OID_GEN_TRANSMIT_BLOCK_SIZE             0x0001010A\r
+#define OID_GEN_RECEIVE_BLOCK_SIZE              0x0001010B\r
+#define OID_GEN_VENDOR_ID                       0x0001010C\r
+#define OID_GEN_VENDOR_DESCRIPTION              0x0001010D\r
+#define OID_GEN_CURRENT_PACKET_FILTER           0x0001010E\r
+#define OID_GEN_CURRENT_LOOKAHEAD               0x0001010F\r
+#define OID_GEN_DRIVER_VERSION                  0x00010110\r
+#define OID_GEN_MAXIMUM_TOTAL_SIZE              0x00010111\r
+#define OID_GEN_PROTOCOL_OPTIONS                0x00010112\r
+#define OID_GEN_MAC_OPTIONS                     0x00010113\r
+#define OID_GEN_MEDIA_CONNECT_STATUS            0x00010114\r
+#define OID_GEN_MAXIMUM_SEND_PACKETS            0x00010115\r
+#define OID_GEN_VENDOR_DRIVER_VERSION           0x00010116\r
+\r
+/* Optional */\r
+#define        OID_GEN_SUPPORTED_GUIDS                 0x00010117\r
+#define        OID_GEN_NETWORK_LAYER_ADDRESSES         0x00010118\r
+#define OID_GEN_TRANSPORT_HEADER_OFFSET         0x00010119\r
+\r
+/* General statistics */\r
+\r
+/* Mandatory */\r
+#define OID_GEN_XMIT_OK                         0x00020101\r
+#define OID_GEN_RCV_OK                          0x00020102\r
+#define OID_GEN_XMIT_ERROR                      0x00020103\r
+#define OID_GEN_RCV_ERROR                       0x00020104\r
+#define OID_GEN_RCV_NO_BUFFER                   0x00020105\r
+\r
+/* Optional */\r
+#define OID_GEN_DIRECTED_BYTES_XMIT             0x00020201\r
+#define OID_GEN_DIRECTED_FRAMES_XMIT            0x00020202\r
+#define OID_GEN_MULTICAST_BYTES_XMIT            0x00020203\r
+#define OID_GEN_MULTICAST_FRAMES_XMIT           0x00020204\r
+#define OID_GEN_BROADCAST_BYTES_XMIT            0x00020205\r
+#define OID_GEN_BROADCAST_FRAMES_XMIT           0x00020206\r
+#define OID_GEN_DIRECTED_BYTES_RCV              0x00020207\r
+#define OID_GEN_DIRECTED_FRAMES_RCV             0x00020208\r
+#define OID_GEN_MULTICAST_BYTES_RCV             0x00020209\r
+#define OID_GEN_MULTICAST_FRAMES_RCV            0x0002020A\r
+#define OID_GEN_BROADCAST_BYTES_RCV             0x0002020B\r
+#define OID_GEN_BROADCAST_FRAMES_RCV            0x0002020C\r
+#define OID_GEN_RCV_CRC_ERROR                   0x0002020D\r
+#define OID_GEN_TRANSMIT_QUEUE_LENGTH           0x0002020E\r
+\r
+\r
+/* Ethernet objects */\r
+\r
+/* Ethernet operational characteristics */\r
+\r
+/* Mandatory */\r
+#define OID_802_3_PERMANENT_ADDRESS             0x01010101\r
+#define OID_802_3_CURRENT_ADDRESS               0x01010102\r
+#define OID_802_3_MULTICAST_LIST                0x01010103\r
+#define OID_802_3_MAXIMUM_LIST_SIZE             0x01010104\r
+\r
+/* Optional */\r
+#define OID_802_3_MAC_OPTIONS                   0x01010105\r
+\r
+/* Ethernet statistics */\r
+\r
+/* Mandatory */\r
+#define OID_802_3_RCV_ERROR_ALIGNMENT           0x01020101\r
+#define OID_802_3_XMIT_ONE_COLLISION            0x01020102\r
+#define OID_802_3_XMIT_MORE_COLLISIONS          0x01020103\r
+\r
+/* Optional */\r
+#define OID_802_3_XMIT_DEFERRED                 0x01020201\r
+#define OID_802_3_XMIT_MAX_COLLISIONS           0x01020202\r
+#define OID_802_3_RCV_OVERRUN                   0x01020203\r
+#define OID_802_3_XMIT_UNDERRUN                 0x01020204\r
+#define OID_802_3_XMIT_HEARTBEAT_FAILURE        0x01020205\r
+#define OID_802_3_XMIT_TIMES_CRS_LOST           0x01020206\r
+#define OID_802_3_XMIT_LATE_COLLISIONS          0x01020207\r
+\r
+\r
+/* Token Ring objects */\r
+\r
+/* Token Ring operational characteristics */\r
+\r
+/* Mandatory */\r
+#define OID_802_5_PERMANENT_ADDRESS             0x02010101\r
+#define OID_802_5_CURRENT_ADDRESS               0x02010102\r
+#define OID_802_5_CURRENT_FUNCTIONAL            0x02010103\r
+#define OID_802_5_CURRENT_GROUP                 0x02010104\r
+#define OID_802_5_LAST_OPEN_STATUS              0x02010105\r
+#define OID_802_5_CURRENT_RING_STATUS           0x02010106\r
+#define OID_802_5_CURRENT_RING_STATE            0x02010107\r
+\r
+/* Token Ring statistics */\r
+\r
+/* Mandatory */\r
+#define OID_802_5_LINE_ERRORS                   0x02020101\r
+#define OID_802_5_LOST_FRAMES                   0x02020102\r
+#define OID_802_5_BURST_ERRORS                  0x02020201\r
+#define OID_802_5_AC_ERRORS                     0x02020202\r
+#define OID_802_5_ABORT_DELIMETERS              0x02020203\r
+#define OID_802_5_FRAME_COPIED_ERRORS           0x02020204\r
+#define OID_802_5_FREQUENCY_ERRORS              0x02020205\r
+#define OID_802_5_TOKEN_ERRORS                  0x02020206\r
+#define OID_802_5_INTERNAL_ERRORS               0x02020207\r
+\r
+\r
+/* FDDI objects */\r
+\r
+/* FDDI operational characteristics */\r
+\r
+/* Mandatory */\r
+#define OID_FDDI_LONG_PERMANENT_ADDR            0x03010101\r
+#define OID_FDDI_LONG_CURRENT_ADDR              0x03010102\r
+#define OID_FDDI_LONG_MULTICAST_LIST            0x03010103\r
+#define OID_FDDI_LONG_MAX_LIST_SIZE             0x03010104\r
+#define OID_FDDI_SHORT_PERMANENT_ADDR           0x03010105\r
+#define OID_FDDI_SHORT_CURRENT_ADDR             0x03010106\r
+#define OID_FDDI_SHORT_MULTICAST_LIST           0x03010107\r
+#define OID_FDDI_SHORT_MAX_LIST_SIZE            0x03010108\r
+\r
+/* FDDI statistics */\r
+\r
+/* Mandatory */\r
+#define OID_FDDI_ATTACHMENT_TYPE                0x03020101\r
+#define OID_FDDI_UPSTREAM_NODE_LONG             0x03020102\r
+#define OID_FDDI_DOWNSTREAM_NODE_LONG           0x03020103\r
+#define OID_FDDI_FRAME_ERRORS                   0x03020104\r
+#define OID_FDDI_FRAMES_LOST                    0x03020105\r
+#define OID_FDDI_RING_MGT_STATE                 0x03020106\r
+#define OID_FDDI_LCT_FAILURES                   0x03020107\r
+#define OID_FDDI_LEM_REJECTS                    0x03020108\r
+#define OID_FDDI_LCONNECTION_STATE              0x03020109\r
+\r
+\r
+/* LocalTalk objects */\r
+\r
+/* LocalTalk operational characteristics */\r
+\r
+/* Mandatory */\r
+#define OID_LTALK_CURRENT_NODE_ID               0x05010102\r
+\r
+/* LocalTalk statistics */\r
+\r
+/* Mandatory */\r
+#define OID_LTALK_IN_BROADCASTS                        0x05020101\r
+#define OID_LTALK_IN_LENGTH_ERRORS              0x05020102\r
+\r
+/* Optional */\r
+#define OID_LTALK_OUT_NO_HANDLERS               0x05020201\r
+#define OID_LTALK_COLLISIONS                    0x05020202\r
+#define OID_LTALK_DEFERS                        0x05020203\r
+#define OID_LTALK_NO_DATA_ERRORS                0x05020204\r
+#define OID_LTALK_RANDOM_CTS_ERRORS             0x05020205\r
+#define OID_LTALK_FCS_ERRORS                    0x05020206\r
+\r
+\r
+/* ARCNET objects */\r
+\r
+/* ARCNET operational characteristics */\r
+\r
+/* Mandatory */\r
+#define OID_ARCNET_PERMANENT_ADDRESS            0x06010101\r
+#define OID_ARCNET_CURRENT_ADDRESS              0x06010102\r
+\r
+/* ARCNET statistics */\r
+\r
+/* Optional */\r
+#define OID_ARCNET_RECONFIGURATIONS             0x06020201\r
+\r
+\r
+/* WAN objects */\r
+\r
+/* Mandatory */\r
+#define OID_WAN_PERMANENT_ADDRESS               0x04010101\r
+#define OID_WAN_CURRENT_ADDRESS                 0x04010102\r
+#define OID_WAN_QUALITY_OF_SERVICE              0x04010103\r
+#define OID_WAN_PROTOCOL_TYPE                   0x04010104\r
+#define OID_WAN_MEDIUM_SUBTYPE                  0x04010105\r
+#define OID_WAN_HEADER_FORMAT                   0x04010106\r
+#define OID_WAN_GET_INFO                        0x04010107\r
+#define OID_WAN_SET_LINK_INFO                   0x04010108\r
+#define OID_WAN_GET_LINK_INFO                   0x04010109\r
+#define OID_WAN_LINE_COUNT                      0x0401010A\r
+#define OID_WAN_PROTOCOL_CAPS                   0x0401010B\r
+#define OID_WAN_GET_BRIDGE_INFO                 0x0401020A\r
+#define OID_WAN_SET_BRIDGE_INFO                 0x0401020B\r
+\r
+/* Optional */\r
+#define OID_WAN_GET_COMP_INFO                   0x0401020C\r
+#define OID_WAN_SET_COMP_INFO                   0x0401020D\r
+#define OID_WAN_GET_STATS_INFO                  0x0401020E\r
+\r
+\r
+/* TAPI objects */\r
+\r
+/* Madatory */\r
+#define OID_TAPI_ANSWER                         0x07030102\r
+#define OID_TAPI_CLOSE                          0x07030103\r
+#define OID_TAPI_CLOSE_CALL                     0x07030104\r
+#define OID_TAPI_CONDITIONAL_MEDIA_DETECTION    0x07030105\r
+#define OID_TAPI_DROP                           0x07030109\r
+#define OID_TAPI_GET_ADDRESS_CAPS               0x0703010A\r
+#define OID_TAPI_GET_ADDRESS_ID                 0x0703010B\r
+#define OID_TAPI_GET_ADDRESS_STATUS             0x0703010C\r
+#define OID_TAPI_GET_CALL_ADDRESS_ID            0x0703010D\r
+#define OID_TAPI_GET_CALL_INFO                  0x0703010E\r
+#define OID_TAPI_GET_CALL_STATUS                0x0703010F\r
+#define OID_TAPI_GET_DEV_CAPS                   0x07030110\r
+#define OID_TAPI_GET_DEV_CONFIG                 0x07030111\r
+#define OID_TAPI_GET_ID                         0x07030113\r
+#define OID_TAPI_GET_LINE_DEV_STATUS            0x07030114\r
+#define OID_TAPI_MAKE_CALL                      0x07030115\r
+#define OID_TAPI_OPEN                           0x07030117\r
+#define OID_TAPI_PROVIDER_INITIALIZE            0x07030118\r
+#define OID_TAPI_PROVIDER_SHUTDOWN              0x07030119\r
+#define OID_TAPI_SET_APP_SPECIFIC               0x0703011D\r
+#define OID_TAPI_SET_CALL_PARAMS                0x0703011E\r
+#define OID_TAPI_SET_DEFAULT_MEDIA_DETECTION    0x0703011F\r
+#define OID_TAPI_SET_MEDIA_MODE                 0x07030121\r
+#define OID_TAPI_SET_STATUS_MESSAGES            0x07030122\r
+\r
+/* Optional */\r
+#define OID_TAPI_ACCEPT                         0x07030101\r
+#define OID_TAPI_CONFIG_DIALOG                  0x07030106\r
+#define OID_TAPI_DEV_SPECIFIC                   0x07030107\r
+#define OID_TAPI_DIAL                           0x07030108\r
+#define OID_TAPI_GET_EXTENSION_ID               0x07030112\r
+#define OID_TAPI_NEGOTIATE_EXT_VERSION          0x07030116\r
+#define OID_TAPI_SET_DEV_CONFIG                 0x07030120\r
+#define OID_TAPI_SECURE_CALL                    0x0703011A\r
+#define OID_TAPI_SELECT_EXT_VERSION             0x0703011B\r
+#define OID_TAPI_SEND_USER_USER_INFO            0x0703011C\r
+\r
+\r
+/* Wireless objects */\r
+\r
+/* Mandatory */\r
+#define OID_WW_GEN_NETWORK_TYPES_SUPPORTED      0x09010101\r
+#define OID_WW_GEN_NETWORK_TYPE_IN_USE          0x09010102\r
+#define OID_WW_GEN_HEADER_FORMATS_SUPPORTED     0x09010103\r
+#define OID_WW_GEN_HEADER_FORMAT_IN_USE         0x09010104\r
+#define OID_WW_GEN_INDICATION_REQUEST           0x09010105\r
+#define OID_WW_GEN_DEVICE_INFO                  0x09010106\r
+#define OID_WW_GEN_OPERATION_MODE               0x09010107\r
+#define OID_WW_GEN_LOCK_STATUS                  0x09010108\r
+#define OID_WW_GEN_DISABLE_TRANSMITTER          0x09010109\r
+#define OID_WW_GEN_NETWORK_ID                   0x0901010A\r
+#define OID_WW_GEN_PERMANENT_ADDRESS            0x0901010B\r
+#define OID_WW_GEN_CURRENT_ADDRESS              0x0901010C\r
+#define OID_WW_GEN_SUSPEND_DRIVER               0x0901010D\r
+#define OID_WW_GEN_BASESTATION_ID               0x0901010E\r
+#define OID_WW_GEN_CHANNEL_ID                   0x0901010F\r
+#define OID_WW_GEN_ENCRYPTION_SUPPORTED         0x09010110\r
+#define OID_WW_GEN_ENCRYPTION_IN_USE            0x09010111\r
+#define OID_WW_GEN_ENCRYPTION_STATE             0x09010112\r
+#define OID_WW_GEN_CHANNEL_QUALITY              0x09010113\r
+#define OID_WW_GEN_REGISTRATION_STATUS          0x09010114\r
+#define OID_WW_GEN_RADIO_LINK_SPEED             0x09010115\r
+#define OID_WW_GEN_LATENCY                      0x09010116\r
+#define OID_WW_GEN_BATTERY_LEVEL                0x09010117\r
+#define OID_WW_GEN_EXTERNAL_POWER               0x09010118\r
+\r
+/* Optional */\r
+#define OID_WW_GEN_PING_ADDRESS                        0x09010201\r
+#define OID_WW_GEN_RSSI                         0x09010202\r
+#define OID_WW_GEN_SIM_STATUS                   0x09010203\r
+#define OID_WW_GEN_ENABLE_SIM_PIN               0x09010204\r
+#define OID_WW_GEN_CHANGE_SIM_PIN               0x09010205\r
+#define OID_WW_GEN_SIM_PUK                      0x09010206\r
+#define OID_WW_GEN_SIM_EXCEPTION                0x09010207\r
+\r
+/* Metricom OIDs */\r
+#define OID_WW_MET_FUNCTION                     0x09190101\r
+\r
+/* DataTac OIDs */\r
+#define OID_WW_TAC_COMPRESSION                  0x09150101\r
+\r
+#define OID_WW_TAC_SET_CONFIG                   0x09150102\r
+#define OID_WW_TAC_GET_STATUS                   0x09150103\r
+#define OID_WW_TAC_USER_HEADER                  0x09150104\r
+\r
+/* Ardis OIDs */\r
+\r
+#define OID_WW_ARD_SNDCP                        0x09110101\r
+#define OID_WW_ARD_TMLY_MSG                        0x09110102\r
+#define OID_WW_ARD_DATAGRAM                     0x09110103\r
+\r
+/* CDPD OIDs */\r
+\r
+#define OID_WW_CDPD_CIRCUIT_SWITCHED            0x090D010E\r
+#define        OID_WW_CDPD_TEI                         0x090D010F\r
+#define        OID_WW_CDPD_RSSI                        0x090D0110\r
+\r
+#define OID_WW_CDPD_CS_SERVICE_PREFERENCE       0x090D0111\r
+#define OID_WW_CDPD_CS_SERVICE_STATUS           0x090D0112\r
+#define OID_WW_CDPD_CS_INFO                        0x090D0113\r
+#define OID_WW_CDPD_CS_SUSPEND                  0x090D0114\r
+#define OID_WW_CDPD_CS_DEFAULT_DIAL_CODE        0x090D0115\r
+#define OID_WW_CDPD_CS_CALLBACK                        0x090D0116\r
+#define OID_WW_CDPD_CS_SID_LIST                        0x090D0117\r
+#define OID_WW_CDPD_CS_CONFIGURATION            0x090D0118\r
+\r
+/* Pinpoint OIDs */\r
+\r
+#define OID_WW_PIN_LOC_AUTHORIZE                0x09090101\r
+#define OID_WW_PIN_LAST_LOCATION                0x09090102\r
+#define OID_WW_PIN_LOC_FIX                      0x09090103\r
+\r
+/* Mobitex OIDs */\r
+#define OID_WW_MBX_SUBADDR                      0x09050101\r
+/*  OID 0x09050102 is reserved and may not be used */\r
+#define OID_WW_MBX_FLEXLIST                        0x09050103\r
+#define OID_WW_MBX_GROUPLIST                    0x09050104\r
+#define OID_WW_MBX_TRAFFIC_AREA                        0x09050105\r
+#define OID_WW_MBX_LIVE_DIE                        0x09050106\r
+#define OID_WW_MBX_TEMP_DEFAULTLIST             0x09050107\r
+\r
+\r
+/* Connection-oriented objects */\r
+\r
+/* Connection-oriented operational characteristics */\r
+\r
+/* Mandatory */\r
+#define OID_GEN_CO_SUPPORTED_LIST               OID_GEN_SUPPORTED_LIST\r
+#define OID_GEN_CO_HARDWARE_STATUS              OID_GEN_HARDWARE_STATUS\r
+#define OID_GEN_CO_MEDIA_SUPPORTED              OID_GEN_MEDIA_SUPPORTED\r
+#define OID_GEN_CO_MEDIA_IN_USE                        OID_GEN_MEDIA_IN_USE\r
+#define OID_GEN_CO_LINK_SPEED                   OID_GEN_LINK_SPEED\r
+#define OID_GEN_CO_VENDOR_ID                    OID_GEN_VENDOR_ID\r
+#define OID_GEN_CO_VENDOR_DESCRIPTION           OID_GEN_VENDOR_DESCRIPTION\r
+#define OID_GEN_CO_DRIVER_VERSION               OID_GEN_DRIVER_VERSION\r
+#define OID_GEN_CO_PROTOCOL_OPTIONS                OID_GEN_PROTOCOL_OPTIONS\r
+#define OID_GEN_CO_MAC_OPTIONS                  OID_GEN_MAC_OPTIONS\r
+#define OID_GEN_CO_MEDIA_CONNECT_STATUS                OID_GEN_MEDIA_CONNECT_STATUS\r
+#define OID_GEN_CO_VENDOR_DRIVER_VERSION        OID_GEN_VENDOR_DRIVER_VERSION\r
+\r
+/* Optional */\r
+#define        OID_GEN_CO_SUPPORTED_GUIDS              OID_GEN_SUPPORTED_GUIDS\r
+#define OID_GEN_CO_GET_TIME_CAPS                OID_GEN_GET_TIME_CAPS\r
+#define OID_GEN_CO_GET_NETCARD_TIME                OID_GEN_GET_NETCARD_TIME\r
+#define OID_GEN_CO_MINIMUM_LINK_SPEED           0x00020120\r
+\r
+/* Connection-oriented statistics */\r
+\r
+#define        OID_GEN_CO_XMIT_PDUS_OK                 OID_GEN_XMIT_OK\r
+#define        OID_GEN_CO_RCV_PDUS_OK                  OID_GEN_RCV_OK\r
+#define        OID_GEN_CO_XMIT_PDUS_ERROR              OID_GEN_XMIT_ERROR\r
+#define        OID_GEN_CO_RCV_PDUS_ERROR               OID_GEN_RCV_ERROR\r
+#define        OID_GEN_CO_RCV_PDUS_NO_BUFFER           OID_GEN_RCV_NO_BUFFER\r
+#define        OID_GEN_CO_RCV_CRC_ERROR                OID_GEN_RCV_CRC_ERROR\r
+#define OID_GEN_CO_TRANSMIT_QUEUE_LENGTH        OID_GEN_TRANSMIT_QUEUE_LENGTH\r
+#define        OID_GEN_CO_BYTES_XMIT                   OID_GEN_DIRECTED_BYTES_XMIT\r
+#define OID_GEN_CO_BYTES_RCV                    OID_GEN_DIRECTED_BYTES_RCV\r
+#define        OID_GEN_CO_NETCARD_LOAD                 OID_GEN_NETCARD_LOAD\r
+#define        OID_GEN_CO_DEVICE_PROFILE               OID_GEN_DEVICE_PROFILE\r
+#define        OID_GEN_CO_BYTES_XMIT_OUTSTANDING       0x00020221\r
+\r
+#endif /* __NDISOID_H */\r
+\r
+/* EOF */\r
diff --git a/reactos/include/net/netevent.h b/reactos/include/net/netevent.h
new file mode 100644 (file)
index 0000000..2478a97
--- /dev/null
@@ -0,0 +1,16 @@
+/*\r
+ * COPYRIGHT:   See COPYING in the top level directory\r
+ * PROJECT:     ReactOS NDIS library\r
+ * FILE:        include/net/netevent.h\r
+ * PURPOSE:     Network event constants\r
+ */\r
+#ifndef __NETEVENT_H\r
+#define __NETEVENT_H\r
+\r
+#define EVENT_TRANSPORT_REGISTER_FAILED  0xC000232CL\r
+\r
+#define EVENT_TRANSPORT_ADAPTER_NOT_FOUND 0xC000232EL\r
+\r
+#endif /* __NETEVENT_H */\r
+\r
+/* EOF */\r
diff --git a/reactos/include/net/tdi.h b/reactos/include/net/tdi.h
new file mode 100644 (file)
index 0000000..88197f5
--- /dev/null
@@ -0,0 +1,644 @@
+/*\r
+ * COPYRIGHT:   See COPYING in the top level directory\r
+ * PROJECT:     ReactOS TDI library\r
+ * FILE:        include/net/tdi.h\r
+ * PURPOSE:     TDI definitions for user mode clients\r
+ */\r
+#ifndef __TDI_H\r
+#define __TDI_H\r
+\r
+/* FIXME: Missed some definitions in ntddk.h */\r
+\r
+/* Could be defined in ndis.h */\r
+#ifndef __NDIS_H\r
+typedef signed int INT, *PINT;\r
+#endif\r
+\r
+\r
+\r
+/* Basic types */\r
+\r
+typedef LONG    TDI_STATUS;\r
+typedef PVOID   CONNECTION_CONTEXT;\r
+\r
+\r
+\r
+/* TDI status codes */\r
+\r
+#define TDI_SUCCESS             STATUS_SUCCESS\r
+#define TDI_NO_RESOURCES        STATUS_INSUFFICIENT_RESOURCES\r
+#define TDI_ADDR_IN_USE         STATUS_ADDRESS_ALREADY_EXISTS\r
+#define TDI_BAD_ADDR            STATUS_INVALID_ADDRESS_COMPONENT\r
+#define TDI_NO_FREE_ADDR        STATUS_TOO_MANY_ADDRESSES\r
+#define TDI_ADDR_INVALID        STATUS_INVALID_ADDRESS\r
+#define TDI_ADDR_DELETED        STATUS_ADDRESS_CLOSED\r
+#define TDI_BUFFER_OVERFLOW     STATUS_BUFFER_OVERFLOW\r
+#define TDI_BAD_EVENT_TYPE      STATUS_INVALID_PARAMETER\r
+#define TDI_BAD_OPTION          STATUS_INVALID_PARAMETER\r
+#define TDI_CONN_REFUSED        STATUS_CONNECTION_REFUSED\r
+#define TDI_INVALID_CONNECTION  STATUS_CONNECTION_INVALID\r
+#define TDI_ALREADY_ASSOCIATED  STATUS_ADDRESS_ALREADY_ASSOCIATED\r
+#define TDI_NOT_ASSOCIATED      STATUS_ADDRESS_NOT_ASSOCIATED\r
+#define TDI_CONNECTION_ACTIVE   STATUS_CONNECTION_ACTIVE\r
+#define TDI_CONNECTION_ABORTED  STATUS_CONNECTION_ABORTED\r
+#define TDI_CONNECTION_RESET    STATUS_CONNECTION_RESET\r
+#define TDI_TIMED_OUT           STATUS_IO_TIMEOUT\r
+#define TDI_GRACEFUL_DISC       STATUS_GRACEFUL_DISCONNECT\r
+#define TDI_NOT_ACCEPTED        STATUS_DATA_NOT_ACCEPTED\r
+#define TDI_MORE_PROCESSING     STATUS_MORE_PROCESSING_REQUIRED\r
+#define TDI_INVALID_STATE       STATUS_INVALID_DEVICE_STATE\r
+#define TDI_INVALID_PARAMETER   STATUS_INVALID_PARAMETER\r
+#define TDI_DEST_NET_UNREACH    STATUS_NETWORK_UNREACHABLE\r
+#define TDI_DEST_HOST_UNREACH   STATUS_HOST_UNREACHABLE\r
+#define TDI_DEST_UNREACHABLE    TDI_DEST_HOST_UNREACH\r
+#define TDI_DEST_PROT_UNREACH   STATUS_PROTOCOL_UNREACHABLE\r
+#define TDI_DEST_PORT_UNREACH   STATUS_PORT_UNREACHABLE\r
+#define TDI_INVALID_QUERY       STATUS_INVALID_DEVICE_REQUEST\r
+#define TDI_REQ_ABORTED         STATUS_REQUEST_ABORTED\r
+#define TDI_BUFFER_TOO_SMALL    STATUS_BUFFER_TOO_SMALL\r
+#define TDI_CANCELLED           STATUS_CANCELLED\r
+#define        TDI_BUFFER_TOO_BIG              STATUS_INVALID_BUFFER_SIZE\r
+#define TDI_INVALID_REQUEST     STATUS_INVALID_DEVICE_REQUEST\r
+#define TDI_PENDING             STATUS_PENDING\r
+#define TDI_ITEM_NOT_FOUND      STATUS_OBJECT_NAME_NOT_FOUND\r
+\r
+#define        TDI_OPTION_EOL              0\r
+#define        TDI_ADDRESS_OPTION_REUSE    1\r
+#define        TDI_ADDRESS_OPTION_DHCP     2\r
+\r
+\r
+\r
+/* TDI IOCTL codes */\r
+\r
+#define TDI_CONTROL_CODE(Request, Method) \\r
+            CTL_CODE(FILE_DEVICE_TRANSPORT, Request, Method, FILE_ANY_ACCESS)\r
+\r
+#define IOCTL_TDI_ACCEPT                TDI_CONTROL_CODE(0,  METHOD_BUFFERED)\r
+#define IOCTL_TDI_CONNECT               TDI_CONTROL_CODE(1,  METHOD_BUFFERED)\r
+#define IOCTL_TDI_DISCONNECT            TDI_CONTROL_CODE(2,  METHOD_BUFFERED)\r
+#define IOCTL_TDI_LISTEN                TDI_CONTROL_CODE(3,  METHOD_BUFFERED)\r
+#define IOCTL_TDI_QUERY_INFORMATION     TDI_CONTROL_CODE(4,  METHOD_OUT_DIRECT)\r
+#define IOCTL_TDI_RECEIVE               TDI_CONTROL_CODE(5,  METHOD_OUT_DIRECT)\r
+#define IOCTL_TDI_RECEIVE_DATAGRAM      TDI_CONTROL_CODE(6,  METHOD_OUT_DIRECT)\r
+#define IOCTL_TDI_SEND                  TDI_CONTROL_CODE(7,  METHOD_IN_DIRECT)\r
+#define IOCTL_TDI_SEND_DATAGRAM         TDI_CONTROL_CODE(8,  METHOD_IN_DIRECT)\r
+#define IOCTL_TDI_SET_EVENT_HANDLER     TDI_CONTROL_CODE(9,  METHOD_BUFFERED)\r
+#define IOCTL_TDI_SET_INFORMATION       TDI_CONTROL_CODE(10, METHOD_IN_DIRECT)\r
+#define IOCTL_TDI_ASSOCIATE_ADDRESS     TDI_CONTROL_CODE(11, METHOD_BUFFERED)\r
+#define IOCTL_TDI_DISASSOCIATE_ADDRESS  TDI_CONTROL_CODE(12, METHOD_BUFFERED)\r
+#define IOCTL_TDI_ACTION                TDI_CONTROL_CODE(13, METHOD_OUT_DIRECT)\r
+\r
+\r
+\r
+/* TDI transport driver dispatch routines */\r
+\r
+NTSTATUS TdiDispatchCleanup(\r
+    IN PDEVICE_OBJECT  DeviceObject,\r
+    IN PIRP  Irp);\r
+\r
+NTSTATUS TdiDispatchClose(\r
+    IN PDEVICE_OBJECT  DeviceObject,\r
+    IN PIRP  Irp);\r
+\r
+NTSTATUS TdiDispatchCreate(\r
+    IN PDEVICE_OBJECT  DeviceObject,\r
+    IN PIRP  Irp);\r
+\r
+NTSTATUS TdiDispatchDeviceControl(\r
+    IN PDEVICE_OBJECT  DeviceObject,\r
+    IN PIRP  Irp,\r
+    IN PIO_STACK_LOCATION  IrpSp);\r
+\r
+BOOLEAN TdiDispatchFastDeviceControl(\r
+    IN PFILE_OBJECT  FileObject,\r
+    IN BOOLEAN  Wait,\r
+    IN PVOID  InputBuffer,\r
+    IN ULONG  InputBufferLength,\r
+    IN OUT PVOID  OutputBuffer,\r
+    IN ULONG  OutputBufferLength,\r
+    IN ULONG  IoControlCode,\r
+    OUT PIO_STATUS_BLOCK  IoStatus);\r
+\r
+NTSTATUS TdiDispatchInternalDeviceControl(\r
+    IN PDEVICE_OBJECT  DeviceObject,\r
+    IN PIRP  Irp);\r
+\r
+\r
+\r
+/* TDI structures */\r
+\r
+typedef struct _TDI_CONNECTION_INFORMATION\r
+{\r
+    LONG   UserDataLength;\r
+    PVOID  UserData;\r
+    LONG   OptionsLength;\r
+    PVOID  Options;\r
+    LONG   RemoteAddressLength;\r
+    PVOID  RemoteAddress;\r
+} TDI_CONNECTION_INFORMATION, *PTDI_CONNECTION_INFORMATION;\r
+\r
+typedef struct _TDI_REQUEST\r
+{\r
+    union {\r
+        HANDLE              AddressHandle;\r
+        CONNECTION_CONTEXT  ConnectionContext;\r
+        HANDLE              ControlChannel;\r
+    } Handle;\r
+    PVOID      RequestNotifyObject;\r
+    PVOID      RequestContext;\r
+    TDI_STATUS TdiStatus;\r
+} TDI_REQUEST, *PTDI_REQUEST;\r
+\r
+typedef struct _TDI_REQUEST_STATUS\r
+{\r
+    TDI_STATUS  Status;\r
+    PVOID  RequestContext;\r
+    ULONG  BytesTransferred;\r
+} TDI_REQUEST_STATUS, *PTDI_REQUEST_STATUS;\r
+\r
+\r
+typedef struct _TA_ADDRESS\r
+{\r
+    USHORT  AddressLength;\r
+    USHORT  AddressType;\r
+    UCHAR   Address[1];\r
+} TA_ADDRESS, *PTA_ADDRESS;\r
+\r
+#define TDI_ADDRESS_TYPE_UNSPEC      0\r
+#define TDI_ADDRESS_TYPE_UNIX        1\r
+#define TDI_ADDRESS_TYPE_IP          2\r
+#define TDI_ADDRESS_TYPE_IMPLINK     3\r
+#define TDI_ADDRESS_TYPE_PUP         4\r
+#define TDI_ADDRESS_TYPE_CHAOS       5\r
+#define TDI_ADDRESS_TYPE_NS          6\r
+#define TDI_ADDRESS_TYPE_IPX         6\r
+#define TDI_ADDRESS_TYPE_NBS         7\r
+#define TDI_ADDRESS_TYPE_ECMA        8\r
+#define TDI_ADDRESS_TYPE_DATAKIT     9\r
+#define TDI_ADDRESS_TYPE_CCITT      10\r
+#define TDI_ADDRESS_TYPE_SNA        11\r
+#define TDI_ADDRESS_TYPE_DECnet     12\r
+#define TDI_ADDRESS_TYPE_DLI        13\r
+#define TDI_ADDRESS_TYPE_LAT        14\r
+#define TDI_ADDRESS_TYPE_HYLINK     15\r
+#define TDI_ADDRESS_TYPE_APPLETALK  16\r
+#define TDI_ADDRESS_TYPE_NETBIOS    17\r
+#define TDI_ADDRESS_TYPE_8022       18\r
+#define TDI_ADDRESS_TYPE_OSI_TSAP   19\r
+#define TDI_ADDRESS_TYPE_NETONE     20\r
+#define TDI_ADDRESS_TYPE_VNS        21\r
+#define TDI_ADDRESS_TYPE_NETBIOS_EX 22\r
+\r
+\r
+#define TdiTransportAddress             "TransportAddress"\r
+#define TdiConnectionContext            "ConnectionContext"\r
+#define TDI_TRANSPORT_ADDRESS_LENGTH    (sizeof(TdiTransportAddress) - 1)\r
+#define TDI_CONNECTION_CONTEXT_LENGTH   (sizeof(TdiConnectionContext) - 1)\r
+\r
+\r
+typedef struct _TRANSPORT_ADDRESS\r
+{\r
+    LONG        TAAddressCount;\r
+    TA_ADDRESS  Address[1];\r
+} TRANSPORT_ADDRESS, *PTRANSPORT_ADDRESS;\r
+\r
+typedef struct _TDI_ADDRESS_INFO\r
+{\r
+    ULONG              ActivityCount;\r
+    TRANSPORT_ADDRESS  Address;\r
+} TDI_ADDRESS_INFO, *PTDI_ADDRESS_INFO;\r
+\r
+typedef struct _TDI_ACTION_HEADER\r
+{\r
+    ULONG   TransportId;\r
+    USHORT  ActionCode;\r
+    USHORT  Reserved;\r
+} TDI_ACTION_HEADER, *PTDI_ACTION_HEADER;\r
+\r
+typedef struct _TDI_ADDRESS_8022\r
+{\r
+    UCHAR MACAddress[6];\r
+} TDI_ADDRESS_8022, *PTDI_ADDRESS_8022;\r
+\r
+typedef struct _TDI_ADDRESS_APPLETALK\r
+{\r
+    USHORT  Network;\r
+    UCHAR   Node;\r
+    UCHAR   Socket;\r
+} TDI_ADDRESS_APPLETALK, *PTDI_ADDRESS_APPLETALK;\r
+\r
+#define TDI_ADDRESS_LENGTH_APPLETALK    sizeof(TDI_ADDRESS_APPLETALK)\r
+\r
+typedef struct _TDI_ADDRESS_IP\r
+{\r
+    USHORT  sin_port;\r
+    ULONG   in_addr;\r
+    UCHAR   sin_zero[8];\r
+} TDI_ADDRESS_IP, *PTDI_ADDRESS_IP;\r
+\r
+#define TDI_ADDRESS_LENGTH_IP   sizeof(TDI_ADDRESS_IP)\r
+\r
+typedef struct _TDI_ADDRESS_IPX\r
+{\r
+    ULONG   NetworkAddress;\r
+    UCHAR   NodeAddress[6];\r
+    USHORT  Socket;\r
+} TDI_ADDRESS_IPX, *PTDI_ADDRESS_IPX;\r
+\r
+#define TDI_ADDRESS_LENGTH_IPX  sizeof(TDI_ADDRESS_IPX)\r
+\r
+typedef struct _TDI_ADDRESS_NETBIOS\r
+{\r
+    USHORT  NetbiosNameType;\r
+    UCHAR   NetbiosName[16];\r
+} TDI_ADDRESS_NETBIOS, *PTDI_ADDRESS_NETBIOS;\r
+\r
+#define TDI_ADDRESS_NETBIOS_TYPE_UNIQUE         0x0000\r
+#define TDI_ADDRESS_NETBIOS_TYPE_GROUP          0x0001\r
+#define TDI_ADDRESS_NETBIOS_TYPE_QUICK_UNIQUE   0x0002\r
+#define TDI_ADDRESS_NETBIOS_TYPE_QUICK_GROUP    0x0003\r
+\r
+#define TDI_ADDRESS_LENGTH_NETBIOS  sizeof(TDI_ADDRESS_NETBIOS)\r
+\r
+typedef struct _TDI_ADDRESS_NETBIOS_EX\r
+{\r
+    UCHAR               EndpointName[16];\r
+    TDI_ADDRESS_NETBIOS NetbiosAddress;\r
+} TDI_ADDRESS_NETBIOS_EX, *PTDI_ADDRESS_NETBIOS_EX;\r
+\r
+#define TDI_ADDRESS_LENGTH_NETBIOS_EX   sizeof(TDI_ADDRESS_NETBIOS_EX)\r
+\r
+typedef struct _TDI_ADDRESS_NETONE\r
+{\r
+    USHORT  NetoneNameType;\r
+    UCHAR   NetoneName[20];\r
+} TDI_ADDRESS_NETONE, *PTDI_ADDRESS_NETONE;\r
+\r
+#define TDI_ADDRESS_NETONE_TYPE_UNIQUE  0x0000\r
+#define TDI_ADDRESS_NETONE_TYPE_ROTORED 0x0001\r
+\r
+#define TDI_ADDRESS_LENGTH_NETONE   sizeof(TDI_ADDRESS_NETONE)\r
+\r
+typedef struct _TDI_ADDRESS_NS\r
+{\r
+    ULONG   NetworkAddress;\r
+    UCHAR   NodeAddress[6];\r
+    USHORT  Socket;\r
+} TDI_ADDRESS_NS, *PTDI_ADDRESS_NS;\r
+\r
+#define TDI_ADDRESS_LENGTH_NS   sizeof(TDI_ADDRESS_NS)\r
+\r
+#define ISO_MAX_ADDR_LENGTH 64\r
+\r
+#define ISO_HIERARCHICAL        0\r
+#define ISO_NON_HIERARCHICAL    1\r
+\r
+typedef struct _TDI_ADDRESS_OSI_TSAP\r
+{\r
+    USHORT  tp_addr_type;\r
+    USHORT  tp_taddr_len;\r
+    USHORT  tp_tsel_len;\r
+    UCHAR   tp_addr[ISO_MAX_ADDR_LENGTH];\r
+} TDI_ADDRESS_OSI_TSAP, *PTDI_ADDRESS_OSI_TSAP;\r
+\r
+#define TDI_ADDRESS_LENGTH_OSI_TSAP sizeof(TDI_ADDRESS_OSI_TSAP)\r
+\r
+typedef struct _TDI_ADDRESS_VNS\r
+{\r
+    UCHAR  net_address[4];\r
+    UCHAR  subnet_addr[2];\r
+    UCHAR  port[2];\r
+    UCHAR  hops;\r
+    UCHAR  filler[5];\r
+} TDI_ADDRESS_VNS, *PTDI_ADDRESS_VNS;\r
+\r
+#define TDI_ADDRESS_LENGTH_VNS  sizeof(TDI_ADDRESS_VNS)\r
+\r
+\r
+/* TDI request structures */\r
+\r
+typedef struct _TDI_CONNECT_REQUEST\r
+{\r
+    TDI_REQUEST     Request;\r
+    PTDI_CONNECTION_INFORMATION RequestConnectionInformation;\r
+    PTDI_CONNECTION_INFORMATION ReturnConnectionInformation;\r
+    LARGE_INTEGER   Timeout;\r
+} TDI_REQUEST_CONNECT, *PTDI_REQUEST_CONNECT;\r
+\r
+typedef struct _TDI_REQUEST_ACCEPT\r
+{\r
+    TDI_REQUEST Request;\r
+    PTDI_CONNECTION_INFORMATION RequestConnectionInformation;\r
+    PTDI_CONNECTION_INFORMATION ReturnConnectionInformation;\r
+} TDI_REQUEST_ACCEPT, *PTDI_REQUEST_ACCEPT;\r
+\r
+typedef struct _TDI_REQUEST_LISTEN\r
+{\r
+    TDI_REQUEST Request;\r
+    PTDI_CONNECTION_INFORMATION RequestConnectionInformation;\r
+    PTDI_CONNECTION_INFORMATION ReturnConnectionInformation;\r
+    USHORT      ListenFlags;\r
+} TDI_REQUEST_LISTEN, *PTDI_REQUEST_LISTEN;\r
+\r
+typedef struct _TDI_DISCONNECT_REQUEST\r
+{\r
+    TDI_REQUEST     Request;\r
+    LARGE_INTEGER   Timeout;\r
+} TDI_REQUEST_DISCONNECT, *PTDI_REQUEST_DISCONNECT;\r
+\r
+typedef struct _TDI_REQUEST_SEND\r
+{\r
+    TDI_REQUEST Request;\r
+    USHORT      SendFlags;\r
+} TDI_REQUEST_SEND, *PTDI_REQUEST_SEND;\r
+\r
+typedef struct _TDI_REQUEST_RECEIVE\r
+{\r
+    TDI_REQUEST Request;\r
+    USHORT      ReceiveFlags;\r
+} TDI_REQUEST_RECEIVE, *PTDI_REQUEST_RECEIVE;\r
+\r
+typedef struct _TDI_REQUEST_SEND_DATAGRAM\r
+{\r
+    TDI_REQUEST Request;\r
+    PTDI_CONNECTION_INFORMATION SendDatagramInformation;\r
+} TDI_REQUEST_SEND_DATAGRAM, *PTDI_REQUEST_SEND_DATAGRAM;\r
+\r
+typedef struct _TDI_REQUEST_RECEIVE_DATAGRAM\r
+{\r
+    TDI_REQUEST Request;\r
+    PTDI_CONNECTION_INFORMATION ReceiveDatagramInformation;\r
+    PTDI_CONNECTION_INFORMATION ReturnInformation;\r
+    USHORT      ReceiveFlags;\r
+} TDI_REQUEST_RECEIVE_DATAGRAM, *PTDI_REQUEST_RECEIVE_DATAGRAM;\r
+\r
+typedef struct _TDI_REQUEST_SET_EVENT\r
+{\r
+    TDI_REQUEST Request;\r
+    LONG        EventType;\r
+    PVOID       EventHandler;\r
+    PVOID       EventContext;\r
+} TDI_REQUEST_SET_EVENT_HANDLER, *PTDI_REQUEST_SET_EVENT_HANDLER;\r
+\r
+#define TDI_RECEIVE_BROADCAST           0x00000004\r
+#define TDI_RECEIVE_MULTICAST           0x00000008\r
+#define TDI_RECEIVE_PARTIAL             0x00000010\r
+#define TDI_RECEIVE_NORMAL              0x00000020\r
+#define TDI_RECEIVE_EXPEDITED           0x00000040\r
+#define TDI_RECEIVE_PEEK                0x00000080\r
+#define TDI_RECEIVE_NO_RESPONSE_EXP     0x00000100\r
+#define TDI_RECEIVE_COPY_LOOKAHEAD      0x00000200\r
+#define TDI_RECEIVE_ENTIRE_MESSAGE      0x00000400\r
+#define TDI_RECEIVE_AT_DISPATCH_LEVEL   0x00000800\r
+\r
+/* Listen flags */\r
+#define TDI_QUERY_ACCEPT    0x00000001\r
+\r
+/* Options used for both SendOptions and ReceiveIndicators */\r
+#define TDI_SEND_EXPEDITED              0x0020\r
+#define TDI_SEND_PARTIAL                0x0040\r
+#define TDI_SEND_NO_RESPONSE_EXPECTED   0x0080\r
+#define TDI_SEND_NON_BLOCKING           0x0100\r
+\r
+/* Disconnect Flags */\r
+#define TDI_DISCONNECT_WAIT     0x0001\r
+#define TDI_DISCONNECT_ABORT    0x0002\r
+#define TDI_DISCONNECT_RELEASE  0x0004\r
+\r
+/* TdiRequest structure for TdiQueryInformation request */\r
+typedef struct _TDI_REQUEST_QUERY_INFORMATION\r
+{\r
+    TDI_REQUEST Request;\r
+    ULONG       QueryType;\r
+    PTDI_CONNECTION_INFORMATION RequestConnectionInformation;\r
+} TDI_REQUEST_QUERY_INFORMATION, *PTDI_REQUEST_QUERY_INFORMATION;\r
+\r
+/* TdiRequest structure for TdiSetInformation request */\r
+typedef struct _TDI_REQUEST_SET_INFORMATION\r
+{\r
+    TDI_REQUEST Request;\r
+    ULONG       SetType;\r
+    PTDI_CONNECTION_INFORMATION RequestConnectionInformation;\r
+} TDI_REQUEST_SET_INFORMATION, *PTDI_REQUEST_SET_INFORMATION;\r
+\r
+typedef union _TDI_REQUEST_TYPE\r
+{\r
+    TDI_REQUEST_ACCEPT              TdiAccept;\r
+    TDI_REQUEST_CONNECT             TdiConnect;\r
+    TDI_REQUEST_DISCONNECT          TdiDisconnect;\r
+    TDI_REQUEST_LISTEN              TdiListen;\r
+    TDI_REQUEST_QUERY_INFORMATION   TdiQueryInformation;\r
+    TDI_REQUEST_RECEIVE             TdiReceive;\r
+    TDI_REQUEST_RECEIVE_DATAGRAM    TdiReceiveDatagram;\r
+    TDI_REQUEST_SEND                TdiSend;\r
+    TDI_REQUEST_SEND_DATAGRAM       TdiSendDatagram;\r
+    TDI_REQUEST_SET_EVENT_HANDLER   TdiSetEventHandler;\r
+    TDI_REQUEST_SET_INFORMATION     TdiSetInformation;\r
+} TDI_REQUEST_TYPE, *PTDI_REQUEST_TYPE;\r
+\r
+\r
+\r
+/* Query information types */\r
+\r
+/* Generic query info types that must be supported by all transports */\r
+#define TDI_QUERY_BROADCAST_ADDRESS     0x00000001\r
+#define TDI_QUERY_PROVIDER_INFO         0x00000002\r
+#define TDI_QUERY_ADDRESS_INFO          0x00000003\r
+#define TDI_QUERY_CONNECTION_INFO       0x00000004\r
+#define TDI_QUERY_PROVIDER_STATISTICS   0x00000005\r
+#define TDI_QUERY_DATAGRAM_INFO         0x00000006\r
+#define TDI_QUERY_DATA_LINK_ADDRESS     0x00000007\r
+#define TDI_QUERY_NETWORK_ADDRESS       0x00000008\r
+#define TDI_QUERY_MAX_DATAGRAM_INFO     0x00000009\r
+\r
+/* Netbios specific query information types */\r
+#define TDI_QUERY_ADAPTER_STATUS        0x00000100\r
+#define TDI_QUERY_SESSION_STATUS        0x00000200\r
+#define TDI_QUERY_FIND_NAME             0x00000300\r
+\r
+typedef struct _TA_APPLETALK_ADDR\r
+{\r
+    LONG    TAAddressCount;\r
+    struct  _AddrAtalk {\r
+        USHORT                  AddressLength;\r
+        USHORT                  AddressType;\r
+        TDI_ADDRESS_APPLETALK   Address[1];\r
+    } Address[1];\r
+} TA_APPLETALK_ADDRESS, *PTA_APPLETALK_ADDRESS;\r
+\r
+typedef struct _TA_ADDRESS_IP\r
+{\r
+    LONG    TAAddressCount;\r
+    struct  _AddrIp {\r
+        USHORT          AddressLength;\r
+        USHORT          AddressType;\r
+        TDI_ADDRESS_IP  Address[1];\r
+    } Address[1];\r
+} TA_ADDRESS_IP, *PTA_ADDRESS_IP;\r
+\r
+typedef struct _TA_ADDRESS_IPX\r
+{\r
+    LONG    TAAddressCount;\r
+    struct  _AddrIpx {\r
+        USHORT          AddressLength;\r
+        USHORT          AddressType;\r
+        TDI_ADDRESS_IP  Address[1];\r
+    } Address[1];\r
+} TA_IPX_ADDRESS, *PTA_IPX_ADDRESS;\r
+\r
+typedef struct _TA_NETBIOS_ADDRESS\r
+{\r
+    LONG    TAAddressCount;\r
+    struct _Addr{\r
+        USHORT              AddressLength;\r
+        USHORT              AddressType;\r
+        TDI_ADDRESS_NETBIOS Address[1];\r
+    } Address[1];\r
+} TA_NETBIOS_ADDRESS, *PTA_NETBIOS_ADDRESS;\r
+\r
+typedef struct _TA_ADDRESS_NS\r
+{\r
+    LONG    TAAddressCount;\r
+    struct  _AddrNs {\r
+        USHORT          AddressLength;\r
+        USHORT          AddressType;\r
+        TDI_ADDRESS_NS  Address[1];\r
+    } Address[1];\r
+} TA_NS_ADDRESS, *PTA_NS_ADDRESS;\r
+\r
+typedef struct _TA_ADDRESS_VNS\r
+{\r
+    LONG    TAAddressCount;\r
+    struct  _AddrVns {\r
+        USHORT          AddressLength;\r
+        USHORT          AddressType;\r
+        TDI_ADDRESS_VNS Address[1];\r
+    } Address[1];\r
+} TA_VNS_ADDRESS, *PTA_VNS_ADDRESS;\r
+\r
+\r
+/* Structures used for TdiQueryInformation and TdiSetInformation */\r
+\r
+typedef struct _TDI_ENDPOINT_INFO\r
+{\r
+    ULONG   State;\r
+    ULONG   Event;\r
+    ULONG   TransmittedTsdus;\r
+    ULONG   ReceivedTsdus;\r
+    ULONG   TransmissionErrors;\r
+    ULONG   ReceiveErrors;\r
+    ULONG   MinimumLookaheadData;\r
+    ULONG   MaximumLookaheadData;\r
+    ULONG   PriorityLevel;\r
+    ULONG   SecurityLevel;\r
+    ULONG   SecurityCompartment;\r
+} TDI_ENDPOINT_INFO, *PTDI_ENDPOINT_INFO;\r
+\r
+typedef struct _TDI_CONNECTION_INFO\r
+{\r
+    ULONG           State;\r
+    ULONG           Event; \r
+    ULONG           TransmittedTsdus;\r
+    ULONG           ReceivedTsdus;\r
+    ULONG           TransmissionErrors;\r
+    ULONG           ReceiveErrors;\r
+    LARGE_INTEGER   Throughput;\r
+    LARGE_INTEGER   Delay;\r
+    ULONG           SendBufferSize;\r
+    ULONG           ReceiveBufferSize;\r
+    BOOLEAN         Unreliable;\r
+} TDI_CONNECTION_INFO, *PTDI_CONNECTION_INFO;\r
+\r
+typedef struct _TDI_DATAGRAM_INFO\r
+{\r
+    ULONG   MaximumDatagramBytes;\r
+    ULONG   MaximumDatagramCount;\r
+} TDI_DATAGRAM_INFO, *PTDI_DATAGRAM_INFO;\r
+\r
+typedef struct _TDI_MAX_DATAGRAM_INFO\r
+{\r
+    ULONG   MaxDatagramSize;\r
+} TDI_MAX_DATAGRAM_INFO, *PTDI_MAX_DATAGRAM_INFO;\r
+\r
+typedef struct _TDI_PROVIDER_INFO\r
+{\r
+    ULONG           Version;\r
+    ULONG           MaxSendSize;\r
+    ULONG           MaxConnectionUserData;\r
+    ULONG           MaxDatagramSize;\r
+    ULONG           ServiceFlags;\r
+    ULONG           MinimumLookaheadData;\r
+    ULONG           MaximumLookaheadData;\r
+    ULONG           NumberOfResources;\r
+    LARGE_INTEGER   StartTime;\r
+} TDI_PROVIDER_INFO, *PTDI_PROVIDER_INFO;\r
+\r
+#define TDI_SERVICE_CONNECTION_MODE     0x00000001\r
+#define TDI_SERVICE_ORDERLY_RELEASE     0x00000002\r
+#define TDI_SERVICE_CONNECTIONLESS_MODE 0x00000004\r
+#define TDI_SERVICE_ERROR_FREE_DELIVERY 0x00000008\r
+#define TDI_SERVICE_SECURITY_LEVEL      0x00000010\r
+#define TDI_SERVICE_BROADCAST_SUPPORTED 0x00000020\r
+#define TDI_SERVICE_MULTICAST_SUPPORTED 0x00000040\r
+#define TDI_SERVICE_DELAYED_ACCEPTANCE  0x00000080\r
+#define TDI_SERVICE_EXPEDITED_DATA      0x00000100\r
+#define TDI_SERVICE_INTERNAL_BUFFERING  0x00000200\r
+#define TDI_SERVICE_ROUTE_DIRECTED      0x00000400\r
+#define TDI_SERVICE_NO_ZERO_LENGTH      0x00000800\r
+#define TDI_SERVICE_POINT_TO_POINT      0x00001000\r
+#define TDI_SERVICE_MESSAGE_MODE        0x00002000\r
+#define TDI_SERVICE_HALF_DUPLEX         0x00004000\r
+\r
+typedef struct _TDI_PROVIDER_RESOURCE_STATS\r
+{\r
+    ULONG   ResourceId;\r
+    ULONG   MaximumResourceUsed;\r
+    ULONG   AverageResourceUsed;\r
+    ULONG   ResourceExhausted;\r
+} TDI_PROVIDER_RESOURCE_STATS, *PTDI_PROVIDER_RESOURCE_STATS;\r
+\r
+typedef struct _TDI_PROVIDER_STATISTICS\r
+{\r
+    ULONG           Version;\r
+    ULONG           OpenConnections;\r
+    ULONG           ConnectionsAfterNoRetry;\r
+    ULONG           ConnectionsAfterRetry;\r
+    ULONG           LocalDisconnects;\r
+    ULONG           RemoteDisconnects;\r
+    ULONG           LinkFailures;\r
+    ULONG           AdapterFailures;\r
+    ULONG           SessionTimeouts;\r
+    ULONG           CancelledConnections;\r
+    ULONG           RemoteResourceFailures;\r
+    ULONG           LocalResourceFailures;\r
+    ULONG           NotFoundFailures;\r
+    ULONG           NoListenFailures;\r
+    ULONG           DatagramsSent;\r
+    LARGE_INTEGER   DatagramBytesSent;\r
+    ULONG           DatagramsReceived;\r
+    LARGE_INTEGER   DatagramBytesReceived;\r
+    ULONG           PacketsSent;\r
+    ULONG           PacketsReceived;\r
+    ULONG           DataFramesSent;\r
+    LARGE_INTEGER   DataFrameBytesSent;\r
+    ULONG           DataFramesReceived;\r
+    LARGE_INTEGER   DataFrameBytesReceived;\r
+    ULONG           DataFramesResent;\r
+    LARGE_INTEGER   DataFrameBytesResent;\r
+    ULONG           DataFramesRejected;\r
+    LARGE_INTEGER   DataFrameBytesRejected;\r
+    ULONG           ResponseTimerExpirations;\r
+    ULONG           AckTimerExpirations;\r
+    ULONG           MaximumSendWindow;\r
+    ULONG           AverageSendWindow;\r
+    ULONG           PiggybackAckQueued;\r
+    ULONG           PiggybackAckTimeouts;\r
+    LARGE_INTEGER   WastedPacketSpace;\r
+    ULONG           WastedSpacePackets;\r
+    ULONG           NumberOfResources;\r
+    TDI_PROVIDER_RESOURCE_STATS Resources[1];\r
+} TDI_PROVIDER_STATISTICS, *PTDI_PROVIDER_STATISTICS;\r
+\r
+#endif /* __TDI_H */\r
+\r
+/* EOF */\r
diff --git a/reactos/include/net/tdiinfo.h b/reactos/include/net/tdiinfo.h
new file mode 100644 (file)
index 0000000..c8d0826
--- /dev/null
@@ -0,0 +1,96 @@
+/*\r
+ * COPYRIGHT:   See COPYING in the top level directory\r
+ * PROJECT:     ReactOS TDI library\r
+ * FILE:        include/net/tdiinfo.h\r
+ * PURPOSE:     TDI definitions for Tdi(Query/Set)InformationEx\r
+ */\r
+#ifndef __TDIINFO_H\r
+#define __TDIINFO_H\r
+\r
+typedef struct TDIEntityID\r
+{\r
+    ULONG   tei_entity;\r
+       ULONG   tei_instance;\r
+} TDIEntityID;\r
+\r
+typedef struct TDIObjectID\r
+{\r
+    TDIEntityID        toi_entity;\r
+    ULONG   toi_class;\r
+       ULONG   toi_type;\r
+       ULONG   toi_id;\r
+} TDIObjectID;\r
+\r
+#define        CONTEXT_SIZE                16\r
+\r
+#define        MAX_TDI_ENTITIES                        512\r
+\r
+#define        INFO_CLASS_GENERIC          0x100\r
+#define        INFO_CLASS_PROTOCOL             0x200\r
+#define        INFO_CLASS_IMPLEMENTATION   0x300\r
+\r
+#define        INFO_TYPE_PROVIDER          0x100\r
+#define        INFO_TYPE_ADDRESS_OBJECT    0x200\r
+#define        INFO_TYPE_CONNECTION        0x300\r
+\r
+\r
+#define        ENTITY_LIST_ID              0\r
+\r
+#define        GENERIC_ENTITY              0\r
+\r
+\r
+#define        IF_ENTITY                   0x200\r
+\r
+#define        AT_ENTITY                   0x280\r
+\r
+#define        CO_NL_ENTITY                0x300\r
+#define        CL_NL_ENTITY                0x301\r
+\r
+#define        ER_ENTITY                   0x380\r
+\r
+#define        CO_TL_ENTITY                0x400\r
+#define        CL_TL_ENTITY                0x401\r
+\r
+\r
+/* IDs supported by all entities */\r
+\r
+#define        ENTITY_TYPE_ID              1\r
+\r
+\r
+#define        IF_GENERIC                                      0x200\r
+#define        IF_MIB                                          0x202\r
+\r
+#define        AT_ARP                                          0x280\r
+#define        AT_NULL                                         0x282\r
+\r
+#define        CL_NL_IPX                                       0x301\r
+#define        CL_NL_IP                                        0x303\r
+\r
+#define        ER_ICMP                                         0x380\r
+\r
+#define        CO_TL_NBF                                       0x400\r
+#define        CO_TL_SPX                                       0x402\r
+#define        CO_TL_TCP                                       0x404\r
+#define        CO_TL_SPP                                       0x406\r
+\r
+#define        CL_TL_NBF                                       0x401\r
+#define        CL_TL_UDP                                       0x403\r
+\r
+/* TCP specific structures */\r
+\r
+typedef struct _TCP_REQUEST_QUERY_INFORMATION_EX\r
+{\r
+       TDIObjectID ID;\r
+       UCHAR       Context[CONTEXT_SIZE];\r
+} TCP_REQUEST_QUERY_INFORMATION_EX, *PTCP_REQUEST_QUERY_INFORMATION_EX;\r
+\r
+typedef struct _TCP_REQUEST_SET_INFORMATION_EX\r
+{\r
+       TDIObjectID ID;\r
+       UINT        BufferSize;\r
+       UCHAR       Buffer[1];\r
+} TCP_REQUEST_SET_INFORMATION_EX, *PTCP_REQUEST_SET_INFORMATION_EX;\r
+\r
+#endif /* __TDIINFO_H */\r
+\r
+/* EOF */\r
diff --git a/reactos/include/net/tdikrnl.h b/reactos/include/net/tdikrnl.h
new file mode 100644 (file)
index 0000000..a88a04d
--- /dev/null
@@ -0,0 +1,805 @@
+/*\r
+ * COPYRIGHT:   See COPYING in the top level directory\r
+ * PROJECT:     ReactOS TDI library\r
+ * FILE:        include/net/tdikrnl.h\r
+ * PURPOSE:     TDI definitions for kernel mode drivers\r
+ */\r
+#ifndef __TDIKRNL_H\r
+#define __TDIKRNL_H\r
+\r
+#include "tdi.h"\r
+\r
+#ifndef STDCALL\r
+#define STDCALL\r
+#endif\r
+\r
+typedef struct _TDI_REQUEST_KERNEL\r
+{\r
+    ULONG   RequestFlags;\r
+    PTDI_CONNECTION_INFORMATION RequestConnectionInformation;\r
+    PTDI_CONNECTION_INFORMATION ReturnConnectionInformation;\r
+    PVOID   RequestSpecific;\r
+} TDI_REQUEST_KERNEL, *PTDI_REQUEST_KERNEL;\r
+\r
+/* Request codes */\r
+#define TDI_ASSOCIATE_ADDRESS       0x01\r
+#define TDI_DISASSOCIATE_ADDRESS    0x02\r
+#define TDI_CONNECT                 0x03\r
+#define TDI_LISTEN                  0x04\r
+#define TDI_ACCEPT                  0x05\r
+#define TDI_DISCONNECT              0x06\r
+#define TDI_SEND                    0x07\r
+#define TDI_RECEIVE                 0x08\r
+#define TDI_SEND_DATAGRAM           0x09\r
+#define TDI_RECEIVE_DATAGRAM        0x0A\r
+#define TDI_SET_EVENT_HANDLER       0x0B\r
+#define TDI_QUERY_INFORMATION       0x0C\r
+#define TDI_SET_INFORMATION         0x0D\r
+#define TDI_ACTION                  0x0E\r
+\r
+#define TDI_DIRECT_SEND             0x27\r
+#define TDI_DIRECT_SEND_DATAGRAM    0x29\r
+\r
+\r
+#define TDI_TRANSPORT_ADDRESS_FILE  1\r
+#define TDI_CONNECTION_FILE         2\r
+#define TDI_CONTROL_CHANNEL_FILE    3\r
+\r
+/* Internal TDI IOCTLS */\r
+#define IOCTL_TDI_QUERY_DIRECT_SEND_HANDLER     TDI_CONTROL_CODE(0x80, METHOD_NEITHER)\r
+#define IOCTL_TDI_QUERY_DIRECT_SENDDG_HANDLER   TDI_CONTROL_CODE(0x81, METHOD_NEITHER)\r
+\r
+/* TdiAssociateAddress */\r
+typedef struct _TDI_REQUEST_KERNEL_ASSOCIATE\r
+{\r
+    HANDLE AddressHandle;\r
+} TDI_REQUEST_KERNEL_ASSOCIATE, *PTDI_REQUEST_KERNEL_ASSOCIATE;\r
+\r
+/* TdiDisassociateAddress */\r
+typedef TDI_REQUEST_KERNEL TDI_REQUEST_KERNEL_DISASSOCIATE,\r
+    *PTDI_REQUEST_KERNEL_DISASSOCIATE;\r
+\r
+/* TdiAccept */\r
+typedef struct _TDI_REQUEST_KERNEL_ACCEPT\r
+{\r
+    PTDI_CONNECTION_INFORMATION RequestConnectionInformation;\r
+    PTDI_CONNECTION_INFORMATION ReturnConnectionInformation;\r
+} TDI_REQUEST_KERNEL_ACCEPT, *PTDI_REQUEST_KERNEL_ACCEPT;\r
+\r
+/* TdiReceive */\r
+typedef struct _TDI_REQUEST_KERNEL_RECEIVE\r
+{\r
+    ULONG   ReceiveLength;\r
+    ULONG   ReceiveFlags;\r
+} TDI_REQUEST_KERNEL_RECEIVE, *PTDI_REQUEST_KERNEL_RECEIVE;\r
+\r
+/* TdiReceiveDatagram */\r
+typedef struct _TDI_REQUEST_KERNEL_RECEIVEDG\r
+{\r
+    ULONG   ReceiveLength;\r
+    PTDI_CONNECTION_INFORMATION ReceiveDatagramInformation;\r
+    PTDI_CONNECTION_INFORMATION ReturnDatagramInformation;\r
+    ULONG   ReceiveFlags;\r
+} TDI_REQUEST_KERNEL_RECEIVEDG, *PTDI_REQUEST_KERNEL_RECEIVEDG;\r
+\r
+/* TdiSend */\r
+typedef struct _TDI_REQUEST_KERNEL_SEND\r
+{\r
+    ULONG   SendLength;\r
+    ULONG   SendFlags;\r
+} TDI_REQUEST_KERNEL_SEND, *PTDI_REQUEST_KERNEL_SEND;\r
+\r
+/* TdiSendDatagram */\r
+typedef struct _TDI_REQUEST_KERNEL_SENDDG\r
+{\r
+    ULONG   SendLength;\r
+    PTDI_CONNECTION_INFORMATION SendDatagramInformation;\r
+} TDI_REQUEST_KERNEL_SENDDG, *PTDI_REQUEST_KERNEL_SENDDG;\r
+\r
+/* TdiSetEventHandler */\r
+typedef struct _TDI_REQUEST_KERNEL_SET_EVENT\r
+{\r
+    LONG    EventType;\r
+    PVOID   EventHandler;\r
+    PVOID   EventContext;\r
+} TDI_REQUEST_KERNEL_SET_EVENT, *PTDI_REQUEST_KERNEL_SET_EVENT;\r
+\r
+/* TdiQueryInformation */\r
+typedef struct _TDI_REQUEST_KERNEL_QUERY_INFO\r
+{\r
+    LONG    QueryType;\r
+    PTDI_CONNECTION_INFORMATION RequestConnectionInformation;\r
+} TDI_REQUEST_KERNEL_QUERY_INFORMATION, *PTDI_REQUEST_KERNEL_QUERY_INFORMATION;\r
+\r
+/* TdiSetInformation */\r
+typedef struct _TDI_REQUEST_KERNEL_SET_INFO\r
+{\r
+    LONG    SetType;\r
+    PTDI_CONNECTION_INFORMATION RequestConnectionInformation;\r
+} TDI_REQUEST_KERNEL_SET_INFORMATION, *PTDI_REQUEST_KERNEL_SET_INFORMATION;\r
+\r
+\r
+/* Event types */\r
+#define TDI_EVENT_CONNECT                   0\r
+#define TDI_EVENT_DISCONNECT                1\r
+#define TDI_EVENT_ERROR                     2\r
+#define TDI_EVENT_RECEIVE                   3\r
+#define TDI_EVENT_RECEIVE_DATAGRAM          4\r
+#define TDI_EVENT_RECEIVE_EXPEDITED         5\r
+#define TDI_EVENT_SEND_POSSIBLE             6\r
+#define TDI_EVENT_CHAINED_RECEIVE           7\r
+#define TDI_EVENT_CHAINED_RECEIVE_DATAGRAM  8\r
+#define TDI_EVENT_CHAINED_RECEIVE_EXPEDITED 9\r
+\r
+typedef NTSTATUS (*PTDI_IND_CONNECT)(\r
+    IN PVOID  TdiEventContext,\r
+    IN LONG   RemoteAddressLength,\r
+    IN PVOID  RemoteAddress,\r
+    IN LONG   UserDataLength,\r
+    IN PVOID  UserData,\r
+    IN LONG   OptionsLength,\r
+    IN PVOID  Options,\r
+    OUT CONNECTION_CONTEXT  *ConnectionContext,\r
+    OUT PIRP  *AcceptIrp);\r
+\r
+NTSTATUS STDCALL TdiDefaultConnectHandler(\r
+    IN PVOID  TdiEventContext,\r
+    IN LONG   RemoteAddressLength,\r
+    IN PVOID  RemoteAddress,\r
+    IN LONG   UserDataLength,\r
+    IN PVOID  UserData,\r
+    IN LONG   OptionsLength,\r
+    IN PVOID  Options,\r
+    OUT CONNECTION_CONTEXT *ConnectionContext,\r
+    OUT PIRP  *AcceptIrp);\r
+\r
+typedef NTSTATUS (*PTDI_IND_DISCONNECT)(\r
+    IN PVOID  TdiEventContext,\r
+    IN CONNECTION_CONTEXT  ConnectionContext,\r
+    IN LONG   DisconnectDataLength,\r
+    IN PVOID  DisconnectData,\r
+    IN LONG   DisconnectInformationLength,\r
+    IN PVOID  DisconnectInformation,\r
+    IN ULONG  DisconnectFlags);\r
+\r
+NTSTATUS STDCALL TdiDefaultDisconnectHandler(\r
+    IN PVOID  TdiEventContext,\r
+    IN CONNECTION_CONTEXT  ConnectionContext,\r
+    IN LONG   DisconnectDataLength,\r
+    IN PVOID  DisconnectData,\r
+    IN LONG   DisconnectInformationLength,\r
+    IN PVOID  DisconnectInformation,\r
+    IN ULONG  DisconnectFlags);\r
+\r
+typedef NTSTATUS (*PTDI_IND_ERROR)(\r
+    IN PVOID     TdiEventContext,\r
+    IN NTSTATUS  Status);\r
+\r
+NTSTATUS STDCALL TdiDefaultErrorHandler(\r
+    IN PVOID     TdiEventContext,\r
+    IN NTSTATUS  Status);\r
+\r
+typedef NTSTATUS (*PTDI_IND_RECEIVE)(\r
+    IN PVOID   TdiEventContext,\r
+    IN CONNECTION_CONTEXT ConnectionContext,\r
+    IN ULONG   ReceiveFlags,\r
+    IN ULONG   BytesIndicated,\r
+    IN ULONG   BytesAvailable,\r
+    OUT ULONG  *BytesTaken,\r
+    IN PVOID   Tsdu,\r
+    OUT PIRP   *IoRequestPacket);\r
+\r
+NTSTATUS STDCALL  TdiDefaultReceiveHandler(\r
+    IN PVOID   TdiEventContext,\r
+    IN CONNECTION_CONTEXT ConnectionContext,\r
+    IN ULONG   ReceiveFlags,\r
+    IN ULONG   BytesIndicated,\r
+    IN ULONG   BytesAvailable,\r
+    OUT ULONG  *BytesTaken,\r
+    IN PVOID   Tsdu,\r
+    OUT PIRP   *IoRequestPacket);\r
+\r
+typedef NTSTATUS (*PTDI_IND_RECEIVE_DATAGRAM)(\r
+    IN PVOID   TdiEventContext,\r
+    IN LONG    SourceAddressLength,\r
+    IN PVOID   SourceAddress,\r
+    IN LONG    OptionsLength,\r
+    IN PVOID   Options,\r
+    IN ULONG   ReceiveDatagramFlags,\r
+    IN ULONG   BytesIndicated,\r
+    IN ULONG   BytesAvailable,\r
+    OUT ULONG  *BytesTaken,\r
+    IN PVOID   Tsdu,\r
+    OUT PIRP   *IoRequestPacket);\r
+\r
+NTSTATUS STDCALL TdiDefaultRcvDatagramHandler(\r
+    IN PVOID   TdiEventContext,\r
+    IN LONG    SourceAddressLength,\r
+    IN PVOID   SourceAddress,\r
+    IN LONG    OptionsLength,\r
+    IN PVOID   Options,\r
+    IN ULONG   ReceiveDatagramFlags,\r
+    IN ULONG   BytesIndicated,\r
+    IN ULONG   BytesAvailable,\r
+    OUT ULONG  *BytesTaken,\r
+    IN PVOID   Tsdu,\r
+    OUT PIRP   *IoRequestPacket);\r
+\r
+typedef NTSTATUS (*PTDI_IND_RECEIVE_EXPEDITED)(\r
+    IN PVOID   TdiEventContext,\r
+    IN CONNECTION_CONTEXT  ConnectionContext,\r
+    IN ULONG   ReceiveFlags,\r
+    IN ULONG   BytesIndicated,\r
+    IN ULONG   BytesAvailable,\r
+    OUT ULONG  *BytesTaken,\r
+    IN PVOID   Tsdu,\r
+    OUT PIRP   *IoRequestPacket);\r
+\r
+NTSTATUS STDCALL TdiDefaultRcvExpeditedHandler(\r
+    IN PVOID   TdiEventContext,\r
+    IN CONNECTION_CONTEXT ConnectionContext,\r
+    IN ULONG   ReceiveFlags,\r
+    IN ULONG   BytesIndicated,\r
+    IN ULONG   BytesAvailable,\r
+    OUT ULONG  *BytesTaken,\r
+    IN PVOID   Tsdu,\r
+    OUT PIRP   *IoRequestPacket);\r
+\r
+typedef NTSTATUS (*PTDI_IND_CHAINED_RECEIVE)(\r
+    IN PVOID  TdiEventContext,\r
+    IN CONNECTION_CONTEXT  ConnectionContext,\r
+    IN ULONG  ReceiveFlags,\r
+    IN ULONG  ReceiveLength,\r
+    IN ULONG  StartingOffset,\r
+    IN PMDL   Tsdu,\r
+    IN PVOID  TsduDescriptor);\r
+\r
+NTSTATUS STDCALL TdiDefaultChainedReceiveHandler(\r
+    IN PVOID  TdiEventContext,\r
+    IN CONNECTION_CONTEXT  ConnectionContext,\r
+    IN ULONG  ReceiveFlags,\r
+    IN ULONG  ReceiveLength,\r
+    IN ULONG  StartingOffset,\r
+    IN PMDL   Tsdu,\r
+    IN PVOID  TsduDescriptor);\r
+\r
+typedef NTSTATUS (*PTDI_IND_CHAINED_RECEIVE_DATAGRAM)(\r
+    IN PVOID  TdiEventContext,\r
+    IN LONG   SourceAddressLength,\r
+    IN PVOID  SourceAddress,\r
+    IN LONG   OptionsLength,\r
+    IN PVOID  Options,\r
+    IN ULONG  ReceiveDatagramFlags,\r
+    IN ULONG  ReceiveDatagramLength,\r
+    IN ULONG  StartingOffset,\r
+    IN PMDL   Tsdu,\r
+    IN PVOID  TsduDescriptor);\r
+\r
+NTSTATUS STDCALL TdiDefaultChainedRcvDatagramHandler(\r
+    IN PVOID  TdiEventContext,\r
+    IN LONG   SourceAddressLength,\r
+    IN PVOID  SourceAddress,\r
+    IN LONG   OptionsLength,\r
+    IN PVOID  Options,\r
+    IN ULONG  ReceiveDatagramFlags,\r
+    IN ULONG  ReceiveDatagramLength,\r
+    IN ULONG  StartingOffset,\r
+    IN PMDL   Tsdu,\r
+    IN PVOID  TsduDescriptor);\r
+\r
+typedef NTSTATUS (*PTDI_IND_CHAINED_RECEIVE_EXPEDITED)(\r
+    IN PVOID  TdiEventContext,\r
+    IN CONNECTION_CONTEXT  ConnectionContext,\r
+    IN ULONG  ReceiveFlags,\r
+    IN ULONG  ReceiveLength,\r
+    IN ULONG  StartingOffset,\r
+    IN PMDL   Tsdu,\r
+    IN PVOID  TsduDescriptor);\r
+\r
+NTSTATUS STDCALL TdiDefaultChainedRcvExpeditedHandler(\r
+    IN PVOID  TdiEventContext,\r
+    IN CONNECTION_CONTEXT  ConnectionContext,\r
+    IN ULONG  ReceiveFlags,\r
+    IN ULONG  ReceiveLength,\r
+    IN ULONG  StartingOffset,\r
+    IN PMDL   Tsdu,\r
+    IN PVOID  TsduDescriptor);\r
+\r
+typedef NTSTATUS (*PTDI_IND_SEND_POSSIBLE)(\r
+    IN PVOID  TdiEventContext,\r
+    IN PVOID  ConnectionContext,\r
+    IN ULONG  BytesAvailable);\r
+\r
+NTSTATUS STDCALL TdiDefaultSendPossibleHandler(\r
+    IN PVOID  TdiEventContext,\r
+    IN PVOID  ConnectionContext,\r
+    IN ULONG  BytesAvailable);\r
+\r
+\r
+\r
+/* Macros and functions to build IRPs */\r
+\r
+#define TdiBuildBaseIrp(                                                    \\r
+    Irp, DevObj, FileObj, CompRoutine, Contxt, IrpSp, Minor)                \\r
+{                                                                           \\r
+    IrpSp                = IoGetNextIrpStackLocation(Irp);                  \\r
+    IrpSp->MajorFunction = IRP_MJ_INTERNAL_DEVICE_CONTROL;                  \\r
+    IrpSp->MinorFunction = (Minor);                                         \\r
+    IrpSp->DeviceObject  = (DevObj);                                        \\r
+    IrpSp->FileObject    = (FileObj);                                       \\r
+                                                                            \\r
+    if (CompRoutine)                                                        \\r
+        IoSetCompletionRoutine(Irp, CompRoutine, Contxt, TRUE, TRUE, TRUE)  \\r
+    else                                                                    \\r
+        IoSetCompletionRoutine(Irp, NULL, NULL, FALSE, FALSE, FALSE);       \\r
+}\r
+\r
+/*\r
+ * VOID TdiBuildAccept(\r
+ *     IN PIRP  Irp,\r
+ *     IN PDEVICE_OBJECT  DevObj,\r
+ *     IN PFILE_OBJECT  FileObj,\r
+ *     IN PVOID  CompRoutine,\r
+ *     IN PVOID  Contxt,\r
+ *     IN PTDI_CONNECTION_INFORMATION  RequestConnectionInfo,\r
+ *     OUT PTDI_CONNECTION_INFORMATION  ReturnConnectionInfo);\r
+ */\r
+#define TdiBuildAccept(                                               \\r
+    Irp, DevObj, FileObj, CompRoutine, Contxt,                        \\r
+    RequestConnectionInfo, ReturnConnectionInfo)                      \\r
+    {                                                                 \\r
+    PTDI_REQUEST_KERNEL_ACCEPT _Request;                              \\r
+    PIO_STACK_LOCATION _IrpSp;                                        \\r
+                                                                      \\r
+    _IrpSp = IoGetNextIrpStackLocation(Irp);                          \\r
+                                                                      \\r
+    TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine,                \\r
+                    Contxt, _IrpSp, TDI_ACCEPT);                      \\r
+                                                                      \\r
+    _Request = (PTDI_REQUEST_KERNEL_ACCEPT)&_IrpSp->Parameters;       \\r
+    _Request->RequestConnectionInformation = (RequestConnectionInfo); \\r
+    _Request->ReturnConnectionInformation  = (ReturnConnectionInfo);  \\r
+}\r
+\r
+/*\r
+ * VOID TdiBuildAction(\r
+ *     IN PIRP  Irp,\r
+ *     IN PDEVICE_OBJECT  DevObj,\r
+ *     IN PFILE_OBJECT  FileObj,\r
+ *     IN PVOID  CompRoutine,\r
+ *     IN PVOID  Contxt,\r
+ *     IN PMDL  MdlAddr);\r
+ */\r
+#define TdiBuildAction(                                 \\r
+    Irp, DevObj, FileObj, CompRoutine, Contxt, MdlAddr) \\r
+{                                                       \\r
+    PIO_STACK_LOCATION _IrpSp;                          \\r
+                                                        \\r
+    _IrpSp = IoGetNextIrpStackLocation(Irp);            \\r
+                                                        \\r
+    TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine,  \\r
+                    Contxt, _IrpSp, TDI_ACTION);        \\r
+                                                        \\r
+    (Irp)->MdlAddress = (MdlAddr);                      \\r
+}\r
+\r
+/*\r
+ * VOID TdiBuildAssociateAddress(\r
+ *    IN PIRP  Irp,\r
+ *    IN PDEVICE_OBJECT  DevObj,\r
+ *    IN PFILE_OBJECT  FileObj,\r
+ *    IN PVOID  CompRoutine,\r
+ *    IN PVOID  Contxt,\r
+ *    IN HANDLE  AddrHandle);\r
+ */\r
+#define TdiBuildAssociateAddress(                                  \\r
+    Irp, DevObj, FileObj, CompRoutine, Contxt, AddrHandle)         \\r
+{                                                                  \\r
+    PTDI_REQUEST_KERNEL_ASSOCIATE _Request;                        \\r
+    PIO_STACK_LOCATION _IrpSp;                                     \\r
+                                                                   \\r
+    _IrpSp = IoGetNextIrpStackLocation(Irp);                       \\r
+                                                                   \\r
+    TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine,             \\r
+                    Contxt, _IrpSp, TDI_ASSOCIATE_ADDRESS);        \\r
+                                                                   \\r
+    _Request = (PTDI_REQUEST_KERNEL_ASSOCIATE)&_IrpSp->Parameters; \\r
+    _Request->AddressHandle = (HANDLE)(AddrHandle);                \\r
+}\r
+\r
+/*\r
+ * VOID TdiBuildConnect(\r
+ *    IN PIRP  Irp,\r
+ *    IN PDEVICE_OBJECT  DevObj,\r
+ *    IN PFILE_OBJECT  FileObj,\r
+ *    IN PVOID  CompRoutine,\r
+ *    IN PVOID  Contxt,\r
+ *    IN PLARGE_INTEGER  Time,\r
+ *    IN PTDI_CONNECTION_INFORMATION  RequestConnectionInfo,\r
+ *    OUT PTDI_CONNECTION_INFORMATION  ReturnConnectionInfo); \r
+ */\r
+#define TdiBuildConnect(                                              \\r
+    Irp, DevObj, FileObj, CompRoutine, Contxt,                        \\r
+    Time, RequestConnectionInfo, ReturnConnectionInfo)                \\r
+{                                                                     \\r
+    PTDI_REQUEST_KERNEL _Request;                                     \\r
+    PIO_STACK_LOCATION _IrpSp;                                        \\r
+                                                                      \\r
+    _IrpSp = IoGetNextIrpStackLocation(Irp);                          \\r
+                                                                      \\r
+    TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine,                \\r
+                    Contxt, _IrpSp, TDI_CONNECT);                     \\r
+                                                                      \\r
+    _Request = (PTDI_REQUEST_KERNEL)&_IrpSp->Parameters;              \\r
+    _Request->RequestConnectionInformation = (RequestConnectionInfo); \\r
+    _Request->ReturnConnectionInformation  = (ReturnConnectionInfo);  \\r
+    _Request->RequestSpecific              = (PVOID)(Time);           \\r
+}\r
+\r
+/*\r
+ * VOID TdiBuildDisassociateAddress(\r
+ *     IN PIRP  Irp,\r
+ *     IN PDEVICE_OBJECT  DevObj,\r
+ *     IN PFILE_OBJECT  FileObj,\r
+ *     IN PVOID  CompRoutine,\r
+ *     IN PVOID  Contxt);\r
+ */\r
+#define TdiBuildDisassociateAddress(                                  \\r
+    Irp, DevObj, FileObj, CompRoutine, Contxt)                        \\r
+{                                                                     \\r
+    PIO_STACK_LOCATION _IrpSp;                                        \\r
+                                                                      \\r
+    _IrpSp = IoGetNextIrpStackLocation(Irp);                          \\r
+                                                                      \\r
+    TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine,                \\r
+                    Contxt, _IrpSp, TDI_DISASSOCIATE_ADDRESS);        \\r
+}\r
+\r
+/*\r
+ * VOID TdiBuildDisconnect(\r
+ *     IN PIRP  Irp,\r
+ *     IN PDEVICE_OBJECT  DevObj,\r
+ *     IN PFILE_OBJECT  FileObj,\r
+ *     IN PVOID  CompRoutine,\r
+ *     IN PVOID  Contxt,\r
+ *     IN PLARGE_INTEGER  Time,\r
+ *     IN PULONG  Flags,\r
+ *     IN PTDI_CONNECTION_INFORMATION  RequestConnectionInfo,\r
+ *     OUT PTDI_CONNECTION_INFORMATION  ReturnConnectionInfo); \r
+ */\r
+#define TdiBuildDisconnect(                                           \\r
+    Irp, DevObj, FileObj, CompRoutine, Contxt, Time,                  \\r
+    Flags, RequestConnectionInfo, ReturnConnectionInfo)               \\r
+{                                                                     \\r
+    PTDI_REQUEST_KERNEL _Request;                                     \\r
+    PIO_STACK_LOCATION _IrpSp;                                        \\r
+                                                                      \\r
+    _IrpSp = IoGetNextIrpStackLocation(Irp);                          \\r
+                                                                      \\r
+    TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine,                \\r
+                    Contxt, _IrpSp, TDI_DISCONNECT);                  \\r
+                                                                      \\r
+    _Request = (PTDI_REQUEST_KERNEL)&_IrpSp->Parameters;              \\r
+    _Request->RequestConnectionInformation = (RequestConnectionInfo); \\r
+    _Request->ReturnConnectionInformation  = (ReturnConnectionInfo);  \\r
+    _Request->RequestSpecific = (PVOID)(Time);                        \\r
+    _Request->RequestFlags    = (Flags);                              \\r
+}\r
+\r
+/*\r
+ * PIRP TdiBuildInternalDeviceControlIrp(\r
+ *     IN CCHAR IrpSubFunction,\r
+ *     IN PDEVICE_OBJECT DeviceObject,\r
+ *     IN PFILE_OBJECT FileObject,\r
+ *     IN PKEVENT Event,\r
+ *     IN PIO_STATUS_BLOCK IoStatusBlock);\r
+ */\r
+#define TdiBuildInternalDeviceControlIrp( \\r
+    IrpSubFunction, DeviceObject,         \\r
+    FileObject, Event, IoStatusBlock)     \\r
+    IoBuildDeviceIoControlRequest(        \\r
+        0x00000003, DeviceObject,         \\r
+        NULL, 0, NULL, 0,                 \\r
+        TRUE, Event, IoStatusBlock)\r
+\r
+/*\r
+ * VOID TdiBuildListen(\r
+ *     IN PIRP  Irp,\r
+ *     IN PDEVICE_OBJECT  DevObj,\r
+ *     IN PFILE_OBJECT  FileObj,\r
+ *     IN PVOID  CompRoutine,\r
+ *     IN PVOID  Contxt,\r
+ *     IN ULONG  Flags,\r
+ *     IN PTDI_CONNECTION_INFORMATION  RequestConnectionInfo,\r
+ *     OUT PTDI_CONNECTION_INFORMATION  ReturnConnectionInfo); \r
+ */\r
+#define TdiBuildListen(                                               \\r
+    Irp, DevObj, FileObj, CompRoutine, Contxt,                        \\r
+    Flags, RequestConnectionInfo, ReturnConnectionInfo)               \\r
+{                                                                     \\r
+    PTDI_REQUEST_KERNEL _Request;                                     \\r
+    PIO_STACK_LOCATION _IrpSp;                                        \\r
+                                                                      \\r
+    _IrpSp = IoGetNextIrpStackLocation(Irp);                          \\r
+                                                                      \\r
+    TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine,                \\r
+                    Contxt, _IrpSp, TDI_LISTEN);                      \\r
+                                                                      \\r
+    _Request = (PTDI_REQUEST_KERNEL)&_IrpSp->Parameters;              \\r
+    _Request->RequestConnectionInformation = (RequestConnectionInfo); \\r
+    _Request->ReturnConnectionInformation  = (ReturnConnectionInfo);  \\r
+    _Request->RequestFlags = (Flags);                                 \\r
+}\r
+\r
+VOID STDCALL TdiBuildNetbiosAddress(\r
+    IN PUCHAR NetbiosName,\r
+    IN BOOLEAN IsGroupName,\r
+    IN OUT PTA_NETBIOS_ADDRESS NetworkName);\r
+\r
+NTSTATUS STDCALL TdiBuildNetbiosAddressEa(\r
+    IN PUCHAR Buffer,\r
+    IN BOOLEAN IsGroupName,\r
+    IN PUCHAR NetbiosName);\r
+\r
+/*\r
+ * VOID TdiBuildQueryInformation(\r
+ *     IN PIRP  Irp,\r
+ *     IN PDEVICE_OBJECT  DevObj,\r
+ *     IN PFILE_OBJECT  FileObj,\r
+ *     IN PVOID  CompRoutine,\r
+ *     IN PVOID  Contxt,\r
+ *     IN UINT  QType,\r
+ *     IN PMDL  MdlAddr);\r
+ */\r
+#define TdiBuildQueryInformation(                                          \\r
+    Irp, DevObj, FileObj, CompRoutine, Contxt, QType, MdlAddr)             \\r
+{                                                                          \\r
+    PTDI_REQUEST_KERNEL_QUERY_INFORMATION _Request;                        \\r
+    PIO_STACK_LOCATION _IrpSp;                                             \\r
+                                                                           \\r
+    _IrpSp = IoGetNextIrpStackLocation(Irp);                               \\r
+                                                                           \\r
+    TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine,                     \\r
+                    Contxt, _IrpSp, TDI_QUERY_INFORMATION);                \\r
+                                                                           \\r
+    _Request = (PTDI_REQUEST_KERNEL_QUERY_INFORMATION)&_IrpSp->Parameters; \\r
+    _Request->RequestConnectionInformation = NULL;                         \\r
+    _Request->QueryType = (ULONG)(QType);                                  \\r
+    (Irp)->MdlAddress   = (MdlAddr);                                       \\r
+}\r
+\r
+/*\r
+ * VOID TdiBuildReceive(\r
+ *     IN PIRP  Irp,\r
+ *     IN PDEVICE_OBJECT  DevObj,\r
+ *     IN PFILE_OBJECT  FileObj,\r
+ *     IN PVOID  CompRoutine,\r
+ *     IN PVOID  Contxt,\r
+ *     IN PMDL  MdlAddr,\r
+ *     IN ULONG  InFlags, \r
+ *     IN ULONG  ReceiveLen); \r
+ */\r
+#define TdiBuildReceive(                                         \\r
+    Irp, DevObj, FileObj, CompRoutine, Contxt,                   \\r
+    MdlAddr, InFlags, ReceiveLen)                                \\r
+{                                                                \\r
+    PTDI_REQUEST_KERNEL_RECEIVE _Request;                        \\r
+    PIO_STACK_LOCATION _IrpSp;                                   \\r
+                                                                 \\r
+    _IrpSp = IoGetNextIrpStackLocation(Irp);                     \\r
+                                                                 \\r
+    TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine,           \\r
+                    Contxt, _IrpSp, TDI_RECEIVE);                \\r
+                                                                 \\r
+    _Request = (PTDI_REQUEST_KERNEL_RECEIVE)&_IrpSp->Parameters; \\r
+    _Request->ReceiveFlags  = (InFlags);                         \\r
+    _Request->ReceiveLength = (ReceiveLen);                      \\r
+    (Irp)->MdlAddress       = (MdlAddr);                         \\r
+}\r
+\r
+/*\r
+ * VOID TdiBuildReceiveDatagram(\r
+ *     IN PIRP  Irp,\r
+ *     IN PDEVICE_OBJECT  DevObj,\r
+ *     IN PFILE_OBJECT  FileObj,\r
+ *     IN PVOID  CompRoutine,\r
+ *     IN PVOID  Contxt,\r
+ *     IN PMDL  MdlAddr,\r
+ *     IN ULONG  ReceiveLen,\r
+ *     IN PTDI_CONNECTION_INFORMATION  ReceiveDatagramInfo,\r
+ *     OUT PTDI_CONNECTION_INFORMATION  ReturnInfo,\r
+ *     ULONG InFlags); \r
+ */\r
+#define TdiBuildReceiveDatagram(                                   \\r
+    Irp, DevObj, FileObj, CompRoutine, Contxt, MdlAddr,            \\r
+    ReceiveLen, ReceiveDatagramInfo, ReturnInfo, InFlags)          \\r
+{                                                                  \\r
+    PTDI_REQUEST_KERNEL_RECEIVEDG _Request;                        \\r
+    PIO_STACK_LOCATION _IrpSp;                                     \\r
+                                                                   \\r
+    _IrpSp = IoGetNextIrpStackLocation(Irp);                       \\r
+                                                                   \\r
+    TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine,             \\r
+                    Contxt, _IrpSp, TDI_RECEIVE_DATAGRAM);         \\r
+                                                                   \\r
+    _Request = (PTDI_REQUEST_KERNEL_RECEIVEDG)&_IrpSp->Parameters; \\r
+    _Request->ReceiveDatagramInformation = (ReceiveDatagramInfo);  \\r
+    _Request->ReturnDatagramInformation  = (ReturnInfo);           \\r
+    _Request->ReceiveLength = (ReceiveLen);                        \\r
+    _Request->ReceiveFlags  = (InFlags);                           \\r
+    (Irp)->MdlAddress       = (MdlAddr);                           \\r
+}\r
+\r
+/*\r
+ * VOID TdiBuildSend(\r
+ *     IN PIRP  Irp,\r
+ *     IN PDEVICE_OBJECT  DevObj,\r
+ *     IN PFILE_OBJECT  FileObj,\r
+ *     IN PVOID  CompRoutine,\r
+ *     IN PVOID  Contxt,\r
+ *     IN PMDL  MdlAddr,\r
+ *     IN ULONG  InFlags,\r
+ *     IN ULONG  SendLen);\r
+ */\r
+#define TdiBuildSend(                                         \\r
+    Irp, DevObj, FileObj, CompRoutine, Contxt,                \\r
+    MdlAddr, InFlags, SendLen)                                \\r
+{                                                             \\r
+    PTDI_REQUEST_KERNEL_SEND _Request;                        \\r
+    PIO_STACK_LOCATION _IrpSp;                                \\r
+                                                              \\r
+    _IrpSp = IoGetNextIrpStackLocation(Irp);                  \\r
+                                                              \\r
+    TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine,        \\r
+                    Contxt, _IrpSp, TDI_SEND);                \\r
+                                                              \\r
+    _Request = (PTDI_REQUEST_KERNEL_SEND)&_IrpSp->Parameters; \\r
+    _Request->SendFlags  = (InFlags);                         \\r
+    _Request->SendLength = (SendLen);                         \\r
+    (Irp)->MdlAddress    = (MdlAddr);                         \\r
+}\r
+\r
+/*\r
+ * VOID TdiBuildSendDatagram(\r
+ *     IN PIRP  Irp,\r
+ *     IN PDEVICE_OBJECT  DevObj,\r
+ *     IN PFILE_OBJECT  FileObj,\r
+ *     IN PVOID  CompRoutine,\r
+ *     IN PVOID  Contxt,\r
+ *     IN PMDL  MdlAddr,\r
+ *     IN ULONG  SendLen,\r
+ *     IN PTDI_CONNECTION_INFORMATION  SendDatagramInfo); \r
+ */\r
+#define TdiBuildSendDatagram(                                   \\r
+    Irp, DevObj, FileObj, CompRoutine, Contxt,                  \\r
+    MdlAddr, SendLen, SendDatagramInfo)                         \\r
+{                                                               \\r
+    PTDI_REQUEST_KERNEL_SENDDG _Request;                        \\r
+    PIO_STACK_LOCATION _IrpSp;                                  \\r
+                                                                \\r
+    _IrpSp = IoGetNextIrpStackLocation(Irp);                    \\r
+                                                                \\r
+    TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine,          \\r
+                    Contxt, _IrpSp, TDI_SEND_DATAGRAM);         \\r
+                                                                \\r
+    _Request = (PTDI_REQUEST_KERNEL_SENDDG)&_IrpSp->Parameters; \\r
+    _Request->SendDatagramInformation = (SendDatagramInfo);     \\r
+    _Request->SendLength = (SendLen);                           \\r
+    (Irp)->MdlAddress    = (MdlAddr);                           \\r
+}\r
+\r
+/*\r
+ * VOID TdiBuildSetEventHandler(\r
+ *     IN PIRP  Irp,\r
+ *     IN PDEVICE_OBJECT  DevObj,\r
+ *     IN PFILE_OBJECT  FileObj,\r
+ *     IN PVOID  CompRoutine,\r
+ *     IN PVOID  Contxt,\r
+ *     IN INT  InEventType,\r
+ *     IN PVOID  InEventHandler,\r
+ *     IN PVOID  InEventContext);\r
+ */\r
+#define TdiBuildSetEventHandler(                                   \\r
+    Irp, DevObj, FileObj, CompRoutine, Contxt,                     \\r
+    InEventType, InEventHandler, InEventContext)                   \\r
+{                                                                  \\r
+    PTDI_REQUEST_KERNEL_SET_EVENT _Request;                        \\r
+    PIO_STACK_LOCATION _IrpSp;                                     \\r
+                                                                   \\r
+    _IrpSp = IoGetNextIrpStackLocation(Irp);                       \\r
+                                                                   \\r
+    TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine,             \\r
+                    Contxt, _IrpSp, TDI_SET_EVENT_HANDLER);        \\r
+                                                                   \\r
+    _Request = (PTDI_REQUEST_KERNEL_SET_EVENT)&_IrpSp->Parameters; \\r
+    _Request->EventType    = (InEventType);                        \\r
+    _Request->EventHandler = (PVOID)(InEventHandler);              \\r
+    _Request->EventContext = (PVOID)(InEventContext);              \\r
+}\r
+\r
+/*\r
+ * VOID TdiBuildSetInformation(\r
+ *     IN PIRP  Irp,\r
+ *     IN PDEVICE_OBJECT  DevObj,\r
+ *     IN PFILE_OBJECT  FileObj,\r
+ *     IN PVOID  CompRoutine,\r
+ *     IN PVOID  Contxt,\r
+ *     IN UINT  SType,\r
+ *     IN PMDL  MdlAddr);\r
+ */\r
+#define TdiBuildSetInformation(                                          \\r
+    Irp, DevObj, FileObj, CompRoutine, Contxt, SType, MdlAddr)           \\r
+{                                                                        \\r
+    PTDI_REQUEST_KERNEL_SET_INFORMATION _Request;                        \\r
+    PIO_STACK_LOCATION _IrpSp;                                           \\r
+                                                                         \\r
+    _IrpSp = IoGetNextIrpStackLocation(Irp);                             \\r
+                                                                         \\r
+    TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine,                   \\r
+                    Contxt, _IrpSp, TDI_SET_INFORMATION);                \\r
+                                                                         \\r
+    _Request = (PTDI_REQUEST_KERNEL_SET_INFORMATION)&_IrpSp->Parameters; \\r
+    _Request->RequestConnectionInformation = NULL;                       \\r
+    _Request->SetType = (ULONG)(SType);                                  \\r
+    (Irp)->MdlAddress = (MdlAddr);                                       \\r
+}\r
+\r
+\r
+\r
+/* TDI functions */\r
+\r
+/*\r
+ * VOID TdiCompleteRequest(\r
+ *     IN PIRP Irp,\r
+ *     IN NTSTATUS Status);\r
+ */\r
+#define TdiCompleteRequest(Irp, Status)             \\r
+{                                                   \\r
+    (Irp)->IoStatus.Status = (Status);              \\r
+    IoCompleteRequest((Irp), IO_NETWORK_INCREMENT); \\r
+}\r
+\r
+NTSTATUS STDCALL TdiCopyBufferToMdl(\r
+    IN PVOID SourceBuffer,\r
+    IN ULONG SourceOffset,\r
+    IN ULONG SourceBytesToCopy,\r
+    IN PMDL DestinationMdlChain,\r
+    IN ULONG DestinationOffset,\r
+    IN PULONG BytesCopied);\r
+\r
+/*\r
+ * VOID TdiCopyLookaheadData(\r
+ *     IN PVOID Destination,\r
+ *     IN PVOID Source,\r
+ *     IN ULONG Length,\r
+ *     IN ULONG ReceiveFlags);\r
+ */\r
+#define TdiCopyLookaheadData(Destination, Source, Length, ReceiveFlags) \\r
+    RtlCopyMemory(Destination, Source, Length)\r
+\r
+NTSTATUS STDCALL TdiCopyMdlToBuffer(\r
+    IN PMDL SourceMdlChain,\r
+    IN ULONG SourceOffset,\r
+    IN PVOID DestinationBuffer,\r
+    IN ULONG DestinationOffset,\r
+    IN ULONG DestinationBufferSize,\r
+    OUT PULONG BytesCopied);\r
+\r
+VOID STDCALL TdiMapBuffer(\r
+    IN PMDL MdlChain);\r
+\r
+NTSTATUS STDCALL TdiMapUserRequest(\r
+    IN PDEVICE_OBJECT DeviceObject,\r
+    IN PIRP Irp,\r
+    IN PIO_STACK_LOCATION IrpSp);\r
+\r
+VOID STDCALL TdiReturnChainedReceives(\r
+    IN PVOID *TsduDescriptors,\r
+    IN ULONG  NumberOfTsdus);\r
+\r
+VOID STDCALL TdiUnmapBuffer(\r
+    IN PMDL MdlChain);\r
+\r
+#endif /* __TDIKRNL_H */\r
+\r
+/* EOF */\r