[BATTC]
authorAmine Khaldi <amine.khaldi@reactos.org>
Tue, 30 Mar 2010 21:50:05 +0000 (21:50 +0000)
committerAmine Khaldi <amine.khaldi@reactos.org>
Tue, 30 Mar 2010 21:50:05 +0000 (21:50 +0000)
- Correct the inclusion of wmilib
[PSDK]
- ws2tcpip.h improvements, some formatting fixes, remove some duplicate definitions between winsock2.h and ws2def.h
[XDK]
- Move some definitions from ntifs.template.h to more appropriate places.
[NTIFS]
- Reflect XDK changes.

svn path=/branches/header-work/; revision=46608

drivers/battery/battc/battc.h
include/ddk/ntifs.h
include/psdk/in6addr.h
include/psdk/winsock.h
include/psdk/winsock2.h
include/psdk/ws2tcpip.h
include/xdk/extypes.h
include/xdk/fsrtltypes.h
include/xdk/ntifs.template.h

index 0839cea..24e864a 100644 (file)
@@ -9,7 +9,7 @@
 #pragma once
 
 #include <ntddk.h>
-#include <wmlib.h>
+#include <wmilib.h>
 #include <initguid.h>
 #include <batclass.h>
 
index 73ae594..a872113 100644 (file)
@@ -4957,6 +4957,10 @@ KeRemoveQueueEx (
 
 
 
+#define INVALID_PROCESSOR_INDEX     0xffffffff
+
+#define EX_PUSH_LOCK ULONG_PTR
+#define PEX_PUSH_LOCK PULONG_PTR
 /******************************************************************************
  *                          Executive Functions                               *
  ******************************************************************************/
@@ -6179,6 +6183,12 @@ ObOpenObjectByPointerWithTag(
 
 /* FSRTL Types */
 
+typedef ULONG LBN;
+typedef LBN *PLBN;
+
+typedef ULONG VBN;
+typedef VBN *PVBN;
+
 typedef struct _FSRTL_COMMON_FCB_HEADER {
   CSHORT NodeTypeCode;
   CSHORT NodeByteSize;
@@ -6347,6 +6357,121 @@ typedef struct _FSRTL_PER_FILEOBJECT_CONTEXT {
 
 #define FSRTL_CC_FLUSH_ERROR_FLAG_NO_HARD_ERROR  0x1
 #define FSRTL_CC_FLUSH_ERROR_FLAG_NO_LOG_ENTRY   0x2
+
+typedef NTSTATUS
+(NTAPI *PCOMPLETE_LOCK_IRP_ROUTINE) (
+  IN PVOID Context,
+  IN PIRP Irp);
+
+typedef struct _FILE_LOCK_INFO {
+  LARGE_INTEGER StartingByte;
+  LARGE_INTEGER Length;
+  BOOLEAN ExclusiveLock;
+  ULONG Key;
+  PFILE_OBJECT FileObject;
+  PVOID ProcessId;
+  LARGE_INTEGER EndingByte;
+} FILE_LOCK_INFO, *PFILE_LOCK_INFO;
+
+typedef VOID
+(NTAPI *PUNLOCK_ROUTINE) (
+  IN PVOID Context,
+  IN PFILE_LOCK_INFO FileLockInfo);
+
+typedef struct _FILE_LOCK {
+  PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine;
+  PUNLOCK_ROUTINE UnlockRoutine;
+  BOOLEAN FastIoIsQuestionable;
+  BOOLEAN SpareC[3];
+  PVOID LockInformation;
+  FILE_LOCK_INFO LastReturnedLockInfo;
+  PVOID LastReturnedLock;
+  LONG volatile LockRequestsInProgress;
+} FILE_LOCK, *PFILE_LOCK;
+
+typedef struct _TUNNEL {
+  FAST_MUTEX Mutex;
+  PRTL_SPLAY_LINKS Cache;
+  LIST_ENTRY TimerQueue;
+  USHORT NumEntries;
+} TUNNEL, *PTUNNEL;
+
+typedef struct _BASE_MCB {
+  ULONG MaximumPairCount;
+  ULONG PairCount;
+  USHORT PoolType;
+  USHORT Flags;
+  PVOID Mapping;
+} BASE_MCB, *PBASE_MCB;
+
+typedef struct _LARGE_MCB {
+  PKGUARDED_MUTEX GuardedMutex;
+  BASE_MCB BaseMcb;
+} LARGE_MCB, *PLARGE_MCB;
+
+#define MCB_FLAG_RAISE_ON_ALLOCATION_FAILURE 1
+
+typedef struct _MCB {
+  LARGE_MCB DummyFieldThatSizesThisStructureCorrectly;
+} MCB, *PMCB;
+
+typedef enum _FAST_IO_POSSIBLE {
+  FastIoIsNotPossible = 0,
+  FastIoIsPossible,
+  FastIoIsQuestionable
+} FAST_IO_POSSIBLE;
+
+typedef struct _EOF_WAIT_BLOCK {
+  LIST_ENTRY EofWaitLinks;
+  KEVENT Event;
+} EOF_WAIT_BLOCK, *PEOF_WAIT_BLOCK;
+
+typedef PVOID OPLOCK, *POPLOCK;
+
+typedef VOID
+(NTAPI *POPLOCK_WAIT_COMPLETE_ROUTINE) (
+  IN PVOID Context,
+  IN PIRP Irp);
+
+typedef VOID
+(NTAPI *POPLOCK_FS_PREPOST_IRP) (
+  IN PVOID Context,
+  IN PIRP Irp);
+
+#if (NTDDI_VERSION >= NTDDI_VISTASP1)
+#define OPLOCK_FLAG_COMPLETE_IF_OPLOCKED    0x00000001
+#endif
+
+#if (NTDDI_VERSION >= NTDDI_WIN7)
+#define OPLOCK_FLAG_OPLOCK_KEY_CHECK_ONLY   0x00000002
+#define OPLOCK_FLAG_BACK_OUT_ATOMIC_OPLOCK  0x00000004
+#define OPLOCK_FLAG_IGNORE_OPLOCK_KEYS      0x00000008
+#define OPLOCK_FSCTRL_FLAG_ALL_KEYS_MATCH   0x00000001
+#endif
+
+#if (NTDDI_VERSION >= NTDDI_WIN7)
+
+typedef struct _OPLOCK_KEY_ECP_CONTEXT {
+  GUID OplockKey;
+  ULONG Reserved;
+} OPLOCK_KEY_ECP_CONTEXT, *POPLOCK_KEY_ECP_CONTEXT;
+
+DEFINE_GUID( GUID_ECP_OPLOCK_KEY, 0x48850596, 0x3050, 0x4be7, 0x98, 0x63, 0xfe, 0xc3, 0x50, 0xce, 0x8d, 0x7f );
+
+#endif
+
+typedef PVOID PNOTIFY_SYNC;
+
+typedef BOOLEAN
+(NTAPI *PCHECK_FOR_TRAVERSE_ACCESS) (
+  IN PVOID NotifyContext,
+  IN PVOID TargetContext OPTIONAL,
+  IN PSECURITY_SUBJECT_CONTEXT SubjectContext);
+
+typedef BOOLEAN
+(NTAPI *PFILTER_REPORT_CHANGE) (
+  IN PVOID NotifyContext,
+  IN PVOID FilterContext);
 /* FSRTL Functions */
 
 #define FsRtlEnterFileSystem    KeEnterCriticalRegion
@@ -8655,11 +8780,6 @@ ZwSetInformationToken(
 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
 
 
-#define INVALID_PROCESSOR_INDEX     0xffffffff
-
-#define EX_PUSH_LOCK ULONG_PTR
-#define PEX_PUSH_LOCK PULONG_PTR
-
 /* #if !defined(_X86AMD64_)  FIXME : WHAT ?! */
 #if defined(_WIN64)
 
@@ -8691,127 +8811,6 @@ HalGetDmaAlignmentRequirement(
 #define HalGetDmaAlignmentRequirement() 1L
 #endif
 
-typedef ULONG LBN;
-typedef LBN *PLBN;
-
-typedef ULONG VBN;
-typedef VBN *PVBN;
-
-typedef enum _FAST_IO_POSSIBLE {
-  FastIoIsNotPossible = 0,
-  FastIoIsPossible,
-  FastIoIsQuestionable
-} FAST_IO_POSSIBLE;
-
-typedef struct _EOF_WAIT_BLOCK {
-  LIST_ENTRY EofWaitLinks;
-  KEVENT Event;
-} EOF_WAIT_BLOCK, *PEOF_WAIT_BLOCK;
-
-typedef struct _FILE_LOCK_INFO {
-  LARGE_INTEGER StartingByte;
-  LARGE_INTEGER Length;
-  BOOLEAN ExclusiveLock;
-  ULONG Key;
-  PFILE_OBJECT FileObject;
-  PVOID ProcessId;
-  LARGE_INTEGER EndingByte;
-} FILE_LOCK_INFO, *PFILE_LOCK_INFO;
-
-typedef NTSTATUS
-(NTAPI *PCOMPLETE_LOCK_IRP_ROUTINE) (
-  IN PVOID Context,
-  IN PIRP Irp);
-
-typedef VOID
-(NTAPI *PUNLOCK_ROUTINE) (
-  IN PVOID Context,
-  IN PFILE_LOCK_INFO FileLockInfo);
-
-typedef struct _FILE_LOCK {
-  PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine;
-  PUNLOCK_ROUTINE UnlockRoutine;
-  BOOLEAN FastIoIsQuestionable;
-  BOOLEAN SpareC[3];
-  PVOID LockInformation;
-  FILE_LOCK_INFO LastReturnedLockInfo;
-  PVOID LastReturnedLock;
-  LONG volatile LockRequestsInProgress;
-} FILE_LOCK, *PFILE_LOCK;
-
-typedef struct _TUNNEL {
-  FAST_MUTEX Mutex;
-  PRTL_SPLAY_LINKS Cache;
-  LIST_ENTRY TimerQueue;
-  USHORT NumEntries;
-} TUNNEL, *PTUNNEL;
-
-typedef struct _BASE_MCB {
-  ULONG MaximumPairCount;
-  ULONG PairCount;
-  USHORT PoolType;
-  USHORT Flags;
-  PVOID Mapping;
-} BASE_MCB, *PBASE_MCB;
-
-typedef struct _LARGE_MCB {
-  PKGUARDED_MUTEX GuardedMutex;
-  BASE_MCB BaseMcb;
-} LARGE_MCB, *PLARGE_MCB;
-
-#define MCB_FLAG_RAISE_ON_ALLOCATION_FAILURE 1
-
-typedef struct _MCB {
-  LARGE_MCB DummyFieldThatSizesThisStructureCorrectly;
-} MCB, *PMCB;
-
-typedef PVOID OPLOCK, *POPLOCK;
-
-typedef VOID
-(NTAPI *POPLOCK_WAIT_COMPLETE_ROUTINE) (
-  IN PVOID Context,
-  IN PIRP Irp);
-
-typedef VOID
-(NTAPI *POPLOCK_FS_PREPOST_IRP) (
-  IN PVOID Context,
-  IN PIRP Irp);
-
-#if (NTDDI_VERSION >= NTDDI_VISTASP1)
-#define OPLOCK_FLAG_COMPLETE_IF_OPLOCKED    0x00000001
-#endif
-
-#if (NTDDI_VERSION >= NTDDI_WIN7)
-#define OPLOCK_FLAG_OPLOCK_KEY_CHECK_ONLY   0x00000002
-#define OPLOCK_FLAG_BACK_OUT_ATOMIC_OPLOCK  0x00000004
-#define OPLOCK_FLAG_IGNORE_OPLOCK_KEYS      0x00000008
-#define OPLOCK_FSCTRL_FLAG_ALL_KEYS_MATCH   0x00000001
-#endif
-
-#if (NTDDI_VERSION >= NTDDI_WIN7)
-
-typedef struct _OPLOCK_KEY_ECP_CONTEXT {
-  GUID OplockKey;
-  ULONG Reserved;
-} OPLOCK_KEY_ECP_CONTEXT, *POPLOCK_KEY_ECP_CONTEXT;
-
-DEFINE_GUID( GUID_ECP_OPLOCK_KEY, 0x48850596, 0x3050, 0x4be7, 0x98, 0x63, 0xfe, 0xc3, 0x50, 0xce, 0x8d, 0x7f );
-
-#endif
-
-typedef PVOID PNOTIFY_SYNC;
-
-typedef BOOLEAN
-(NTAPI *PCHECK_FOR_TRAVERSE_ACCESS) (
-  IN PVOID NotifyContext,
-  IN PVOID TargetContext OPTIONAL,
-  IN PSECURITY_SUBJECT_CONTEXT SubjectContext);
-
-typedef BOOLEAN
-(NTAPI *PFILTER_REPORT_CHANGE) (
-  IN PVOID NotifyContext,
-  IN PVOID FilterContext);
-
 extern NTKERNELAPI PUSHORT NlsOemLeadByteInfo;
 #define NLS_OEM_LEAD_BYTE_INFO            NlsOemLeadByteInfo
 
index defe83e..45d82e4 100644 (file)
@@ -1,12 +1,10 @@
 #ifndef s6_addr
 
-typedef struct in6_addr
-{
-    union
-    {
-        UCHAR Byte[16];
-        USHORT Word[8];
-    } u;
+typedef struct in6_addr {
+  union {
+    UCHAR Byte[16];
+    USHORT Word[8];
+  } u;
 } IN6_ADDR, *PIN6_ADDR, FAR *LPIN6_ADDR;
 
 #define in_addr6    in6_addr
index cca60cc..55ccc7b 100644 (file)
@@ -652,7 +652,7 @@ recvfrom(
   IN int len,
   IN int flags,
   OUT struct sockaddr FAR *from OPTIONAL,
-  IN OUY int FAR * fromlen OPTIONAL);
+  IN OUT int FAR * fromlen OPTIONAL);
 
 int
 PASCAL FAR
index 23e01e1..cd4b6ba 100644 (file)
@@ -1,6 +1,6 @@
 #pragma once
 
-#if !(defined _WINSOCK2API_ || defined _WINSOCK_H)
+#if !(defined _WINSOCK2API_ || defined _WINSOCKAPI_)
 #define _WINSOCK2API_
 #define _WINSOCKAPI_ /* to prevent later inclusion of winsock.h */
 
@@ -179,9 +179,6 @@ struct linger {
   u_short l_linger;
 };
 
-#define _IO(x,y) (IOC_VOID|((x)<<8)|(y))
-#define _IOR(x,y,t) (IOC_OUT|(((LONG)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y))
-#define _IOW(x,y,t) (IOC_IN|(((LONG)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y))
 #define FIONBIO _IOW('f', 126, u_long)
 
 struct netent {
@@ -192,14 +189,15 @@ struct netent {
 };
 
 struct servent {
-  char *s_name;
-  char **s_aliases;
+  char FAR *s_name;
+  char FAR **s_aliases;
 #ifdef _WIN64
-  char *s_proto;
+  char FAR *s_proto;
   short s_port;
 #else
   short s_port;
-  char *s_proto;
+  char FAR *s_proto;
+#endif
 };
 
 struct protoent {
@@ -208,9 +206,8 @@ struct protoent {
   short p_proto;
 };
 
-#define SO_CONDITIONAL_ACCEPT 0x3002
-
 #define SOMAXCONN 0x7fffffff
+
 #define MSG_OOB 1
 #define MSG_PEEK 2
 #define MSG_DONTROUTE 4
@@ -225,13 +222,7 @@ struct protoent {
 #define NO_DATA WSANO_DATA
 #define NO_ADDRESS WSANO_ADDRESS
 
-#endif /* ! (__INSIDE_CYGWIN__ || __INSIDE_MSYS__) */
-
-#define IOCPARM_MASK 0x7f
-#define IOC_VOID 0x20000000
-#define IOC_OUT 0x40000000
-#define IOC_IN 0x80000000
-#define IOC_INOUT (IOC_IN|IOC_OUT)
+#endif /* !(defined (__INSIDE_CYGWIN__) || defined (__INSIDE_MSYS__)) */
 
 #define FIONREAD _IOR('f', 127, u_long)
 #define FIOASYNC _IOW('f', 125, u_long)
@@ -241,31 +232,6 @@ struct protoent {
 #define SIOCGLOWAT _IOR('s',  3, u_long)
 #define SIOCATMARK _IOR('s',  7, u_long)
 
-#define IPPORT_ECHO 7
-#define IPPORT_DISCARD 9
-#define IPPORT_SYSTAT 11
-#define IPPORT_DAYTIME 13
-#define IPPORT_NETSTAT 15
-#define IPPORT_FTP 21
-#define IPPORT_TELNET 23
-#define IPPORT_SMTP 25
-#define IPPORT_TIMESERVER 37
-#define IPPORT_NAMESERVER 42
-#define IPPORT_WHOIS 43
-#define IPPORT_MTP 57
-#define IPPORT_TFTP 69
-#define IPPORT_RJE 77
-#define IPPORT_FINGER 79
-#define IPPORT_TTYLINK 87
-#define IPPORT_SUPDUP 95
-#define IPPORT_EXECSERVER 512
-#define IPPORT_LOGINSERVER 513
-#define IPPORT_CMDSERVER 514
-#define IPPORT_EFSSERVER 520
-#define IPPORT_BIFFUDP 512
-#define IPPORT_WHOSERVER 513
-#define IPPORT_ROUTESERVER 520
-#define IPPORT_RESERVED 1024
 #define IMPLINK_IP 155
 #define IMPLINK_LOWEXPER 156
 #define IMPLINK_HIGHEXPER 158
@@ -281,36 +247,6 @@ struct protoent {
 
 #define FROM_PROTOCOL_INFO (-1)
 
-#define SOCK_STREAM 1
-#define SOCK_DGRAM 2
-#define SOCK_RAW 3
-#define SOCK_RDM 4
-#define SOCK_SEQPACKET 5
-
-#define SO_DEBUG 1
-#define SO_ACCEPTCONN 2
-#define SO_REUSEADDR 4
-#define SO_KEEPALIVE 8
-#define SO_DONTROUTE 16
-#define SO_BROADCAST 32
-#define SO_USELOOPBACK 64
-#define SO_LINGER 128
-#define SO_OOBINLINE 256
-#define SO_DONTLINGER (int)(~SO_LINGER)
-#define SO_EXCLUSIVEADDRUSE ((int)(~SO_REUSEADDR))
-
-#define SO_SNDBUF 0x1001
-#define SO_RCVBUF 0x1002
-#define SO_SNDLOWAT 0x1003
-#define SO_RCVLOWAT 0x1004
-#define SO_SNDTIMEO 0x1005
-#define SO_RCVTIMEO 0x1006
-#define SO_ERROR 0x1007
-#define SO_TYPE 0x1008
-
-#define SO_GROUP_ID 0x2001
-#define SO_GROUP_PRIORITY 0x2002
-#define SO_MAX_MSG_SIZE 0x2003
 #define SO_PROTOCOL_INFOA 0x2004
 #define SO_PROTOCOL_INFOW 0x2005
 #ifdef UNICODE
@@ -350,8 +286,6 @@ struct protoent {
 #endif
 #define PF_MAX AF_MAX
 
-#define SOL_SOCKET 0xffff
-
 #define MSG_PARTIAL 0x8000
 #define MSG_INTERRUPT 0x10
 #define MSG_MAXIOVLEN 16
@@ -541,38 +475,6 @@ struct protoent {
 
 #define SERVICE_MULTIPLE                    0x00000001
 
-#define NS_ALL         0
-#define NS_SAP         1
-#define NS_NDS         2
-#define NS_PEER_BROWSE 3
-#define NS_SLP         5
-#define NS_DHCP        6
-#define NS_TCPIP_LOCAL 10
-#define NS_TCPIP_HOSTS 11
-#define NS_DNS         12
-#define NS_NETBT       13
-#define NS_WINS        14
-#if(_WIN32_WINNT >= 0x0501)
-#define NS_NLA         15
-#endif
-#if(_WIN32_WINNT >= 0x0600)
-#define NS_BTH         16
-#endif
-#define NS_NBP         20
-#define NS_MS          30
-#define NS_STDA        31
-#define NS_NTDS        32
-#if(_WIN32_WINNT >= 0x0600)
-#define NS_EMAIL       37
-#define NS_PNRPNAME    38
-#define NS_PNRPCLOUD   39
-#endif
-#define NS_X500        40
-#define NS_NIS         41
-#define NS_NISPLUS     42
-#define NS_WRQ         50
-#define NS_NETDES      60
-
 #define RES_UNUSED_1    0x00000001
 #define RES_FLUSH_CACHE 0x00000002
 #ifndef RES_SERVICE
@@ -635,11 +537,6 @@ struct protoent {
 #define RESULT_IS_DELETED    0x0040
 #endif
 
-
-
-
-
-
 #ifndef s_addr
 
 #define s_addr S_un.S_addr
@@ -665,7 +562,7 @@ typedef struct WSAData {
 #ifdef _WIN64
   unsigned short iMaxSockets;
   unsigned short iMaxUdpDg;
-  char *lpVendorInfo;
+  char FAR *lpVendorInfo;
   char szDescription[WSADESCRIPTION_LEN+1];
   char szSystemStatus[WSASYS_STATUS_LEN+1];
 #else
@@ -673,7 +570,8 @@ typedef struct WSAData {
   char szSystemStatus[WSASYS_STATUS_LEN+1];
   unsigned short iMaxSockets;
   unsigned short iMaxUdpDg;
-  char *lpVendorInfo;
+  char FAR *lpVendorInfo;
+#endif
 } WSADATA, FAR *LPWSADATA;
 
 struct sockproto {
@@ -1204,7 +1102,7 @@ typedef int
   IN int len,
   IN int flags,
   OUT struct sockaddr FAR *from OPTIONAL,
-  IN OUY int FAR * fromlen OPTIONAL);
+  IN OUT int FAR * fromlen OPTIONAL);
 
 typedef int
 (WSAAPI *LPFN_SELECT)(
@@ -1820,7 +1718,6 @@ typedef INT
 
 #if INCL_WINSOCK_API_PROTOTYPES
 
-
 WINSOCK_API_LINKAGE
 SOCKET
 WSAAPI
@@ -1946,7 +1843,7 @@ recvfrom(
   IN int len,
   IN int flags,
   OUT struct sockaddr FAR *from OPTIONAL,
-  IN OUY int FAR *fromlen OPTIONAL);
+  IN OUT int FAR *fromlen OPTIONAL);
 
 WINSOCK_API_LINKAGE
 int
@@ -2828,3 +2725,5 @@ typedef struct timeval FAR *LPTIMEVAL;
 #include <wsipv6ok.h>
 #endif
 #endif */
+
+#endif /* !(defined _WINSOCK2API_ || defined _WINSOCK_H) */
index 42f7e62..21a43d4 100644 (file)
  *
  */
 
-#ifndef _WS2TCPIP_H
-#define _WS2TCPIP_H
+#pragma once
 
-#if (defined _WINSOCK_H && !defined _WINSOCK2_H)
-#error "ws2tcpip.h is not compatable with winsock.h. Include winsock2.h instead."
-#endif
+#define _WS2TCPIP_H
 
 #include <winsock2.h>
 #include <ws2ipdef.h>
-#ifdef  __cplusplus
+#include <limits.h>
+
+#ifdef __cplusplus
 extern "C" {
 #endif
 
-/*
- * The IP_* macros are also defined in winsock.h, but some values are different there.
- * The values defined in winsock.h for 1.1 and used in wsock32.dll are consistent
- * with the original values Steve Deering defined in his document "IP Multicast Extensions
- * for 4.3BSD UNIX related systems (MULTICAST 1.2 Release)." However, these conflicted with
- * the definitions for some IPPROTO_IP level socket options already assigned by BSD,
- * so Berkeley changed all the values by adding 7.  WinSock2 (ws2_32.dll)  uses
- * the BSD 4.4 compatible values defined here.
- *
- * See also: msdn kb article Q257460
- * http://support.microsoft.com/support/kb/articles/Q257/4/60.asp
- */
+#define UDP_NOCHECKSUM 1
+#define UDP_CHECKSUM_COVERAGE 20
 
-/* This is also defined in winsock.h; value hasn't changed */
-#define        IP_OPTIONS  1
+#ifdef _MSC_VER
+#define WS2TCPIP_INLINE __inline
+#else
+#define WS2TCPIP_INLINE extern inline
+#endif
 
-#define        IP_HDRINCL  2
-/*
- * These are also be defined in winsock.h,
- * but values have changed for WinSock2 interface
- */
-#define IP_TOS                 3   /* old (winsock 1.1) value 8 */
-#define IP_TTL                 4   /* old value 7 */
-#define IP_MULTICAST_IF                9   /* old value 2 */
-#define IP_MULTICAST_TTL       10  /* old value 3 */
-#define IP_MULTICAST_LOOP      11  /* old value 4 */
-#define IP_ADD_MEMBERSHIP      12  /* old value 5 */
-#define IP_DROP_MEMBERSHIP     13  /* old value 6 */
-#define IP_DONTFRAGMENT                14  /* old value 9 */
-#define IP_ADD_SOURCE_MEMBERSHIP       15
-#define IP_DROP_SOURCE_MEMBERSHIP      16
-#define IP_BLOCK_SOURCE                        17
-#define IP_UNBLOCK_SOURCE              18
-#define IP_PKTINFO                     19
+/* getaddrinfo error codes */
+#define EAI_AGAIN WSATRY_AGAIN
+#define EAI_BADFLAGS WSAEINVAL
+#define EAI_FAIL WSANO_RECOVERY
+#define EAI_FAMILY WSAEAFNOSUPPORT
+#define EAI_MEMORY WSA_NOT_ENOUGH_MEMORY
+#define EAI_NODATA EAI_NONAME
+#define EAI_NOSECURENAME WSA_SECURE_HOST_NOT_FOUND
+#define EAI_NONAME WSAHOST_NOT_FOUND
+#define EAI_SERVICE WSATYPE_NOT_FOUND
+#define EAI_SOCKTYPE WSAESOCKTNOSUPPORT
+#define EAI_IPSECPOLICY WSA_IPSEC_NAME_POLICY_ERROR
 
-/*
- * As with BSD implementation, IPPROTO_IPV6 level socket options have
- * same values as IPv4 counterparts.
- */
-#define IPV6_UNICAST_HOPS      4
-#define IPV6_MULTICAST_IF      9
-#define IPV6_MULTICAST_HOPS    10
-#define IPV6_MULTICAST_LOOP    11
-#define IPV6_ADD_MEMBERSHIP    12
-#define IPV6_DROP_MEMBERSHIP   13
-#define IPV6_JOIN_GROUP                IPV6_ADD_MEMBERSHIP
-#define IPV6_LEAVE_GROUP       IPV6_DROP_MEMBERSHIP
-#define IPV6_PKTINFO           19
-
-#define IP_DEFAULT_MULTICAST_TTL 1
-#define IP_DEFAULT_MULTICAST_LOOP 1
-#define IP_MAX_MEMBERSHIPS 20
-
-#define TCP_EXPEDITED_1122  2
+#ifdef UNICODE
+typedef ADDRINFOW ADDRINFOT,*PADDRINFOT;
+#else
+typedef ADDRINFOA ADDRINFOT,*PADDRINFOT;
+#endif
 
-#define UDP_NOCHECKSUM 1
+typedef ADDRINFOA ADDRINFO, FAR *LPADDRINFO;
 
-/* INTERFACE_INFO iiFlags */
-#define IFF_UP  1
-#define IFF_BROADCAST   2
-#define IFF_LOOPBACK    4
-#define IFF_POINTTOPOINT    8
-#define IFF_MULTICAST   16
+#if (_WIN32_WINNT >= 0x0600)
 
-#define SIO_GET_INTERFACE_LIST  _IOR('t', 127, u_long)
+#ifdef UNICODE
+typedef ADDRINFOEXW ADDRINFOEX, *PADDRINFOEX;
+#else
+typedef ADDRINFOEXA ADDRINFOEX, *PADDRINFOEX;
+#endif
 
-#define INET_ADDRSTRLEN  16
-#define INET6_ADDRSTRLEN 46
+#endif /* (_WIN32_WINNT >= 0x0600) */
 
-/* getnameinfo constants */
-#define NI_MAXHOST     1025
-#define NI_MAXSERV     32
+WINSOCK_API_LINKAGE
+INT
+WSAAPI
+getaddrinfo(
+  IN PCSTR pNodeName OPTIONAL,
+  IN PCSTR pServiceName OPTIONAL,
+  IN const ADDRINFOA *pHints OPTIONAL,
+  OUT PADDRINFOA *ppResult);
 
-#define NI_NOFQDN      0x01
-#define NI_NUMERICHOST 0x02
-#define NI_NAMEREQD    0x04
-#define NI_NUMERICSERV 0x08
-#define NI_DGRAM       0x10
+#if (NTDDI_VERSION >= NTDDI_WINXPSP2) || (_WIN32_WINNT >= 0x0502)
 
-/* getaddrinfo constants */
-#define AI_PASSIVE     1
-#define AI_CANONNAME   2
-#define AI_NUMERICHOST 4
+WINSOCK_API_LINKAGE
+INT
+WSAAPI
+GetAddrInfoW(
+  IN PCWSTR pNodeName OPTIONAL,
+  IN PCWSTR pServiceName OPTIONAL,
+  IN const ADDRINFOW *pHints OPTIONAL,
+  OUT PADDRINFOW *ppResult);
 
-/* getaddrinfo error codes */
-#define EAI_AGAIN      WSATRY_AGAIN
-#define EAI_BADFLAGS   WSAEINVAL
-#define EAI_FAIL       WSANO_RECOVERY
-#define EAI_FAMILY     WSAEAFNOSUPPORT
-#define EAI_MEMORY     WSA_NOT_ENOUGH_MEMORY
-#define EAI_NODATA     WSANO_DATA
-#define EAI_NONAME     WSAHOST_NOT_FOUND
-#define EAI_SERVICE    WSATYPE_NOT_FOUND
-#define EAI_SOCKTYPE   WSAESOCKTNOSUPPORT
+#define GetAddrInfoA getaddrinfo
 
-/*
- *   ip_mreq also in winsock.h for WinSock1.1,
- *   but online msdn docs say it is defined here for WinSock2.
- */
+#ifdef UNICODE
+#define GetAddrInfo GetAddrInfoW
+#else
+#define GetAddrInfo GetAddrInfoA
+#endif
 
-struct ip_mreq {
-       struct in_addr  imr_multiaddr;
-       struct in_addr  imr_interface;
-};
-
-struct ip_mreq_source {
-       struct in_addr  imr_multiaddr;
-       struct in_addr  imr_sourceaddr;
-       struct in_addr  imr_interface;
-};
-
-struct ip_msfilter {
-       struct in_addr  imsf_multiaddr;
-       struct in_addr  imsf_interface;
-       u_long          imsf_fmode;
-       u_long          imsf_numsrc;
-       struct in_addr  imsf_slist[1];
-};
-
-#define IP_MSFILTER_SIZE(numsrc) \
-   (sizeof(struct ip_msfilter) - sizeof(struct in_addr) \
-   + (numsrc) * sizeof(struct in_addr))
-
-
-/* ipv6 */
-/* These require XP or .NET Server or use of add-on IPv6 stacks on NT 4
-  or higher */
-
-/* This is based on the example given in RFC 2553 with stdint types
-   changed to BSD types.  For now, use these  field names until there
-   is some consistency in MS docs. In this file, we only use the
-   in6_addr structure start address, with casts to get the right offsets
-   when testing addresses */
-
-struct in6_addr {
-    union {
-        u_char Byte[16];
-        u_short        Word[8];
-        u_long _S6_u32[4];
-        } u;
-};
-
-/* s6_addr is the standard name */
-#define s6_addr                u.Byte
-
-/* These are GLIBC names */
-#define s6_addr16      u.Word
-#define s6_addr32      u.Word
-
-/* These are used in some MS code */
-#define in_addr6       in6_addr
-#define _s6_bytes      u.Byte
-#define _s6_words      u.Word
-
-typedef struct in6_addr IN6_ADDR,  *PIN6_ADDR, *LPIN6_ADDR;
-
-struct sockaddr_in6 {
-       short sin6_family;      /* AF_INET6 */
-       u_short sin6_port;      /* transport layer port # */
-       u_long sin6_flowinfo;   /* IPv6 traffic class & flow info */
-       struct in6_addr sin6_addr;  /* IPv6 address */
-       u_long sin6_scope_id;   /* set of interfaces for a scope */
-};
-typedef struct sockaddr_in6 SOCKADDR_IN6, *PSOCKADDR_IN6, *LPSOCKADDR_IN6;
-
-extern const struct in6_addr in6addr_any;
-extern const struct in6_addr in6addr_loopback;
-/* the above can get initialised using: */
-#define IN6ADDR_ANY_INIT        { 0 }
-#define IN6ADDR_LOOPBACK_INIT   { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 }
-
-/* Described in RFC 2292, but not in 2553 */
-/* int IN6_ARE_ADDR_EQUAL(const struct in6_addr * a, const struct in6_addr * b) */
-#define IN6_ARE_ADDR_EQUAL(a, b)       \
-    (memcmp ((void*)(a), (void*)(b), sizeof (struct in6_addr)) == 0)
-
-
-/* Address Testing Macros
-
- These macro functions all take const struct in6_addr* as arg.
- Static inlines would allow type checking, but RFC 2553 says they
- macros.
- NB: These are written specifically for little endian host */
-
-#define IN6_IS_ADDR_UNSPECIFIED(_addr) \
-       (   (((const u_long *)(_addr))[0] == 0) \
-        && (((const u_long *)(_addr))[1] == 0) \
-        && (((const u_long *)(_addr))[2] == 0) \
-        && (((const u_long *)(_addr))[3] == 0))
-
-#define IN6_IS_ADDR_LOOPBACK(_addr) \
-       (   (((const u_long *)(_addr))[0] == 0) \
-        && (((const u_long *)(_addr))[1] == 0) \
-        && (((const u_long *)(_addr))[2] == 0) \
-        && (((const u_long *)(_addr))[3] == 0x01000000)) /* Note byte order reversed */
-/*         (((const u_long *)(_addr))[3] == ntohl(1))  */
-
-#define IN6_IS_ADDR_MULTICAST(_addr) (((const u_char *) (_addr))[0] == 0xff)
-
-#define IN6_IS_ADDR_LINKLOCAL(_addr) \
-       (   (((const u_char *)(_addr))[0] == 0xfe)      \
-        && ((((const u_char *)(_addr))[1] & 0xc0) == 0x80))
-
-#define IN6_IS_ADDR_SITELOCAL(_addr) \
-       (   (((const u_char *)(_addr))[0] == 0xfe)      \
-        && ((((const u_char *)(_addr))[1] & 0xc0) == 0xc0))
-
-#define IN6_IS_ADDR_V4MAPPED(_addr) \
-       (   (((const u_long *)(_addr))[0] == 0)         \
-        && (((const u_long *)(_addr))[1] == 0)         \
-        && (((const u_long *)(_addr))[2] == 0xffff0000)) /* Note byte order reversed */
-/*         (((const u_long *)(_addr))[2] == ntohl(0x0000ffff))) */
-
-#define IN6_IS_ADDR_V4COMPAT(_addr) \
-       (   (((const u_long *)(_addr))[0] == 0)         \
-        && (((const u_long *)(_addr))[1] == 0)         \
-        && (((const u_long *)(_addr))[2] == 0)         \
-        && (((const u_long *)(_addr))[3] != 0)         \
-        && (((const u_long *)(_addr))[3] != 0x01000000)) /* Note byte order reversed */
-/*           (ntohl (((const u_long *)(_addr))[3]) > 1 ) */
-
-
-#define IN6_IS_ADDR_MC_NODELOCAL(_addr)        \
-       (   IN6_IS_ADDR_MULTICAST(_addr)                \
-        && ((((const u_char *)(_addr))[1] & 0xf) == 0x1))
-
-#define IN6_IS_ADDR_MC_LINKLOCAL(_addr)        \
-       (   IN6_IS_ADDR_MULTICAST (_addr)               \
-        && ((((const u_char *)(_addr))[1] & 0xf) == 0x2))
-
-#define IN6_IS_ADDR_MC_SITELOCAL(_addr)        \
-       (   IN6_IS_ADDR_MULTICAST(_addr)                \
-        && ((((const u_char *)(_addr))[1] & 0xf) == 0x5))
-
-#define IN6_IS_ADDR_MC_ORGLOCAL(_addr) \
-       (   IN6_IS_ADDR_MULTICAST(_addr)                \
-        && ((((const u_char *)(_addr))[1] & 0xf) == 0x8))
-
-#define IN6_IS_ADDR_MC_GLOBAL(_addr)   \
-       (   IN6_IS_ADDR_MULTICAST(_addr)        \
-        && ((((const u_char *)(_addr))[1] & 0xf) == 0xe))
+#endif /* (NTDDI_VERSION >= NTDDI_WINXPSP2) || (_WIN32_WINNT >= 0x0502) */
 
+#if INCL_WINSOCK_API_TYPEDEFS
 
-typedef int socklen_t;
+typedef INT
+(WSAAPI *LPFN_GETADDRINFO)(
+  IN PCSTR pNodeName OPTIONAL,
+  IN PCSTR pServiceName OPTIONAL,
+  IN const ADDRINFOA *pHints OPTIONAL,
+  OUT PADDRINFOA *ppResult);
 
-struct ipv6_mreq {
-       struct in6_addr ipv6mr_multiaddr;
-       unsigned int    ipv6mr_interface;
-};
-typedef struct ipv6_mreq IPV6_MREG;
+typedef INT
+(WSAAPI *LPFN_GETADDRINFOW)(
+  IN PCWSTR pNodeName OPTIONAL,
+  IN PCWSTR pServiceName OPTIONAL,
+  IN const ADDRINFOW *pHints OPTIONAL,
+  OUT PADDRINFOW *ppResult);
 
-struct in6_pktinfo {
-       IN6_ADDR ipi6_addr;
-       UINT     ipi6_ifindex;
-};
-typedef struct  in6_pktinfo IN6_PKTINFO;
+#define LPFN_GETADDRINFOA LPFN_GETADDRINFO
 
-typedef struct addrinfo
-{
-    int ai_flags;
-    int ai_family;
-    int ai_socktype;
-    int ai_protocol;
-    size_t ai_addrlen;
-    char *ai_canonname;
-    struct sockaddr *ai_addr;
-    struct addrinfo *ai_next;
-} ADDRINFOA, *PADDRINFOA;
-
-typedef struct addrinfoW
-{
-    int ai_flags;
-    int ai_family;
-    int ai_socktype;
-    int ai_protocol;
-    size_t ai_addrlen;
-    PWSTR ai_canonname;
-    struct sockaddr *ai_addr;
-    struct addrinfoW *ai_next;
-} ADDRINFOW, *PADDRINFOW;
+#ifdef UNICODE
+#define LPFN_GETADDRINFOT LPFN_GETADDRINFOW
+#else
+#define LPFN_GETADDRINFOT LPFN_GETADDRINFOA
+#endif
+
+#endif /* INCL_WINSOCK_API_TYPEDEFS */
+
+#if (_WIN32_WINNT >= 0x0600)
+
+typedef void
+(CALLBACK *LPLOOKUPSERVICE_COMPLETION_ROUTINE)(
+  IN DWORD dwError,
+  IN DWORD dwBytes,
+  IN LPWSAOVERLAPPED lpOverlapped);
+
+WINSOCK_API_LINKAGE
+INT
+WSAAPI
+GetAddrInfoExA(
+  IN PCSTR pName OPTIONAL,
+  IN PCSTR pServiceName OPTIONAL,
+  IN DWORD dwNameSpace,
+  IN LPGUID lpNspId OPTIONAL,
+  IN const ADDRINFOEXA *hints,
+  OUT PADDRINFOEXA *ppResult,
+  IN struct timeval *timeout OPTIONAL,
+  IN LPOVERLAPPED lpOverlapped OPTIONAL,
+  IN LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine OPTIONAL,
+  OUT LPHANDLE lpNameHandle OPTIONAL);
+
+WINSOCK_API_LINKAGE
+INT
+WSAAPI
+GetAddrInfoExW(
+  IN PCWSTR pName OPTIONAL,
+  IN PCWSTR pServiceName OPTIONAL,
+  IN DWORD dwNameSpace,
+  IN LPGUID lpNspId OPTIONAL,
+  IN const ADDRINFOEXW *hints OPTIONAL,
+  OUT PADDRINFOEXW *ppResult,
+  IN struct timeval *timeout OPTIONAL,
+  IN LPOVERLAPPED lpOverlapped OPTIONAL,
+  IN LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine OPTIONAL,
+  OUT LPHANDLE lpHandle OPTIONAL);
 
 #ifdef UNICODE
-typedef ADDRINFOW ADDRINFOT,*PADDRINFOT;
+#define GetAddrInfoEx GetAddrInfoExW
 #else
-typedef ADDRINFOA ADDRINFOT,*PADDRINFOT;
+#define GetAddrInfoEx GetAddrInfoExA
 #endif
 
-typedef ADDRINFOA ADDRINFO, FAR *LPADDRINFO;
+#if INCL_WINSOCK_API_TYPEDEFS
+
+typedef INT
+(WSAAPI *LPFN_GETADDRINFOEXA)(
+  IN PCSTR pName,
+  IN PCSTR pServiceName OPTIONAL,
+  IN DWORD dwNameSpace,
+  IN LPGUID lpNspId OPTIONAL,
+  IN const ADDRINFOEXA *hints OPTIONAL,
+  OUT PADDRINFOEXA *ppResult,
+  IN struct timeval *timeout OPTIONAL,
+  IN LPOVERLAPPED lpOverlapped OPTIONAL,
+  IN LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine OPTIONAL,
+  OUT LPHANDLE lpNameHandle OPTIONAL);
+
+typedef INT
+(WSAAPI *LPFN_GETADDRINFOEXW)(
+  IN PCWSTR pName,
+  IN PCWSTR pServiceName OPTIONAL,
+  IN DWORD dwNameSpace,
+  IN LPGUID lpNspId OPTIONAL,
+  IN const ADDRINFOEXW *hints OPTIONAL,
+  OUT PADDRINFOEXW *ppResult,
+  IN struct timeval *timeout OPTIONAL,
+  IN LPOVERLAPPED lpOverlapped OPTIONAL,
+  IN LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine OPTIONAL,
+  OUT LPHANDLE lpHandle OPTIONAL);
+
+#ifdef UNICODE
+#define LPFN_GETADDRINFOEX LPFN_GETADDRINFOEXW
+#else
+#define LPFN_GETADDRINFOEX LPFN_GETADDRINFOEXA
+#endif
+#endif
 
-void WSAAPI freeaddrinfo (struct addrinfo*);
-int WSAAPI getaddrinfo (const char*,const char*,const struct addrinfo*,
-                       struct addrinfo**);
+#endif
 
-#define GAI_STRERROR_BUFFER_SIZE    1024
+#if (_WIN32_WINNT >= 0x0600)
+
+WINSOCK_API_LINKAGE
+INT
+WSAAPI
+SetAddrInfoExA(
+  IN PCSTR pName,
+  IN PCSTR pServiceName OPTIONAL,
+  IN SOCKET_ADDRESS *pAddresses OPTIONAL,
+  IN DWORD dwAddressCount,
+  IN LPBLOB lpBlob OPTIONAL,
+  IN DWORD dwFlags,
+  IN DWORD dwNameSpace,
+  IN LPGUID lpNspId OPTIONAL,
+  IN struct timeval *timeout OPTIONAL,
+  IN LPOVERLAPPED lpOverlapped OPTIONAL,
+  IN LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine OPTIONAL,
+  OUT LPHANDLE lpNameHandle OPTIONAL);
+
+WINSOCK_API_LINKAGE
+INT
+WSAAPI
+SetAddrInfoExW(
+  IN PCWSTR pName,
+  IN PCWSTR pServiceName OPTIONAL,
+  IN SOCKET_ADDRESS *pAddresses OPTIONAL,
+  IN DWORD dwAddressCount,
+  IN LPBLOB lpBlob OPTIONAL,
+  IN DWORD dwFlags,
+  IN DWORD dwNameSpace,
+  IN LPGUID lpNspId OPTIONAL,
+  IN struct timeval *timeout OPTIONAL,
+  IN LPOVERLAPPED lpOverlapped OPTIONAL,
+  IN LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine OPTIONAL,
+  OUT LPHANDLE lpNameHandle OPTIONAL);
 
-static __inline char*
-gai_strerrorA(int ecode)
-{
-    static char buff[GAI_STRERROR_BUFFER_SIZE + 1];
-
-    FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_MAX_WIDTH_MASK,
-                   NULL,
-                   ecode,
-                   MAKELANGID(LANG_NEUTRAL,
-                              SUBLANG_DEFAULT),
-                   (LPSTR)buff,
-                   GAI_STRERROR_BUFFER_SIZE,
-                   NULL);
-
-    return buff;
-}
+#ifdef UNICODE
+#define SetAddrInfoEx SetAddrInfoExW
+#else
+#define SetAddrInfoEx SetAddrInfoExA
+#endif
 
-static __inline WCHAR*
-gai_strerrorW(int ecode)
-{
-    static WCHAR buff[GAI_STRERROR_BUFFER_SIZE + 1];
-
-    FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_MAX_WIDTH_MASK,
-                   NULL,
-                   ecode,
-                   MAKELANGID(LANG_NEUTRAL,
-                              SUBLANG_DEFAULT),
-                   (LPWSTR)buff,
-                   GAI_STRERROR_BUFFER_SIZE,
-                   NULL);
-
-    return buff;
-}
+#if INCL_WINSOCK_API_TYPEDEFS
+
+typedef INT
+(WSAAPI *LPFN_SETADDRINFOEXA)(
+  IN PCSTR pName,
+  IN PCSTR pServiceName OPTIONAL,
+  IN SOCKET_ADDRESS *pAddresses OPTIONAL,
+  IN DWORD dwAddressCount,
+  IN LPBLOB lpBlob OPTIONAL,
+  IN DWORD dwFlags,
+  IN DWORD dwNameSpace,
+  IN LPGUID lpNspId OPTIONAL,
+  IN struct timeval *timeout OPTIONAL,
+  IN LPOVERLAPPED lpOverlapped OPTIONAL,
+  IN LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine OPTIONAL,
+  OUT LPHANDLE lpNameHandle OPTIONAL);
+
+typedef INT
+(WSAAPI *LPFN_SETADDRINFOEXW)(
+  IN PCWSTR pName,
+  IN PCWSTR pServiceName OPTIONAL,
+  IN SOCKET_ADDRESS *pAddresses OPTIONAL,
+  IN DWORD dwAddressCount,
+  IN LPBLOB lpBlob OPTIONAL,
+  IN DWORD dwFlags,
+  IN DWORD dwNameSpace,
+  IN LPGUID lpNspId OPTIONAL,
+  IN struct timeval *timeout OPTIONAL,
+  IN LPOVERLAPPED lpOverlapped OPTIONAL,
+  IN LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine OPTIONAL,
+  OUT LPHANDLE lpNameHandle OPTIONAL);
+
+#ifdef UNICODE
+#define LPFN_SETADDRINFOEX LPFN_SETADDRINFOEXW
+#else
+#define LPFN_SETADDRINFOEX LPFN_SETADDRINFOEXA
+#endif
+#endif
+
+#endif
+
+WINSOCK_API_LINKAGE
+VOID
+WSAAPI
+freeaddrinfo(
+  IN PADDRINFOA pAddrInfo OPTIONAL);
+
+#if (NTDDI_VERSION >= NTDDI_WINXPSP2) || (_WIN32_WINNT >= 0x0502)
+
+WINSOCK_API_LINKAGE
+VOID
+WSAAPI
+FreeAddrInfoW(
+  IN PADDRINFOW pAddrInfo OPTIONAL);
+
+#define FreeAddrInfoA freeaddrinfo
+
+#ifdef UNICODE
+#define FreeAddrInfo FreeAddrInfoW
+#else
+#define FreeAddrInfo FreeAddrInfoA
+#endif
+#endif
+
+#if INCL_WINSOCK_API_TYPEDEFS
+
+typedef VOID
+(WSAAPI *LPFN_FREEADDRINFO)(
+  IN PADDRINFOA pAddrInfo OPTIONAL);
+
+typedef VOID
+(WSAAPI *LPFN_FREEADDRINFOW)(
+  IN PADDRINFOW pAddrInfo OPTIONAL);
+
+#define LPFN_FREEADDRINFOA LPFN_FREEADDRINFO
 
 #ifdef UNICODE
-#define gai_strerror   gai_strerrorW
+#define LPFN_FREEADDRINFOT LPFN_FREEADDRINFOW
 #else
-#define gai_strerror   gai_strerrorA
-#endif  /* UNICODE */
+#define LPFN_FREEADDRINFOT LPFN_FREEADDRINFOA
+#endif
+
+#endif
+
+#if (_WIN32_WINNT >= 0x0600)
 
-int WSAAPI getnameinfo(const struct sockaddr*,socklen_t,char*,DWORD,
-                      char*,DWORD,int);
+WINSOCK_API_LINKAGE
+void
+WSAAPI
+FreeAddrInfoEx(
+  IN PADDRINFOEXA pAddrInfoEx OPTIONAL);
+
+WINSOCK_API_LINKAGE
+void
+WSAAPI
+FreeAddrInfoExW(
+  IN PADDRINFOEXW pAddrInfoEx OPTIONAL);
+
+#define FreeAddrInfoExA FreeAddrInfoEx
+
+#ifdef UNICODE
+#define FreeAddrInfoEx FreeAddrInfoExW
+#endif
+
+#ifdef INCL_WINSOCK_API_TYPEDEFS
+
+typedef void
+(WSAAPI *LPFN_FREEADDRINFOEXA)(
+  IN PADDRINFOEXA pAddrInfoEx);
+
+typedef void
+(WSAAPI *LPFN_FREEADDRINFOEXW)(
+  IN PADDRINFOEXW pAddrInfoEx);
+
+
+#ifdef UNICODE
+#define LPFN_FREEADDRINFOEX LPFN_FREEADDRINFOEXW
+#else
+#define LPFN_FREEADDRINFOEX LPFN_FREEADDRINFOEXA
+#endif
+
+#endif
+#endif
+
+typedef int socklen_t;
+
+WINSOCK_API_LINKAGE
+INT
+WSAAPI
+getnameinfo(
+  IN const SOCKADDR *pSockaddr,
+  IN socklen_t SockaddrLength,
+  OUT PCHAR pNodeBuffer OPTIONAL,
+  IN DWORD NodeBufferSize,
+  OUT PCHAR pServiceBuffer,
+  IN DWORD ServiceBufferSize,
+  IN INT Flags);
+
+#if (NTDDI_VERSION >= NTDDI_WINXPSP2) || (_WIN32_WINNT >= 0x0502)
+
+WINSOCK_API_LINKAGE
+INT
+WSAAPI
+GetNameInfoW(
+  IN const SOCKADDR *pSockaddr,
+  IN socklen_t SockaddrLength,
+  OUT PWCHAR pNodeBuffer,
+  IN DWORD NodeBufferSize,
+  OUT PWCHAR pServiceBuffer OPTIONAL,
+  IN DWORD ServiceBufferSize,
+  IN INT Flags);
 
-#if (_WIN32_WINNT >= 0x0502)
-INT WSAAPI GetNameInfoW(const SOCKADDR*,socklen_t,PWCHAR,DWORD,PWCHAR,DWORD,INT);
 #define GetNameInfoA getnameinfo
 
 #ifdef UNICODE
-#define GetNameInfo     GetNameInfoW
+#define GetNameInfo GetNameInfoW
 #else
-#define GetNameInfo     GetNameInfoA
-#endif /* UNICODE */
+#define GetNameInfo GetNameInfoA
+#endif
 
-#endif /* (_WIN32_WINNT >= 0x0502) */
+#endif
 
-/* Some older IPv4/IPv6 compatability stuff */
+#if INCL_WINSOCK_API_TYPEDEFS
+
+typedef int
+(WSAAPI *LPFN_GETNAMEINFO)(
+  IN const SOCKADDR *pSockaddr,
+  IN socklen_t SockaddrLength,
+  OUT PCHAR pNodeBuffer,
+  IN DWORD NodeBufferSize,
+  OUT PCHAR pServiceBuffer OPTIONAL,
+  IN DWORD ServiceBufferSize,
+  IN INT Flags);
+
+typedef INT
+(WSAAPI *LPFN_GETNAMEINFOW)(
+  IN const SOCKADDR *pSockaddr,
+  IN socklen_t SockaddrLength,
+  OUT PWCHAR pNodeBuffer,
+  IN DWORD NodeBufferSize,
+  OUT PWCHAR pServiceBuffer OPTIONAL,
+  IN DWORD ServiceBufferSize,
+  IN INT Flags);
+
+#define LPFN_GETNAMEINFOA LPFN_GETNAMEINFO
 
-/* This struct lacks sin6_scope_id; retained for use in sockaddr_gen */
-struct sockaddr_in6_old {
-       short   sin6_family;
-       u_short sin6_port;
-       u_long  sin6_flowinfo;
-       struct in6_addr sin6_addr;
-};
+#ifdef UNICODE
+#define LPFN_GETNAMEINFOT LPFN_GETNAMEINFOW
+#else
+#define LPFN_GETNAMEINFOT LPFN_GETNAMEINFOA
+#endif
+#endif
 
-typedef union sockaddr_gen{
-       struct sockaddr         Address;
-       struct sockaddr_in      AddressIn;
-       struct sockaddr_in6_old AddressIn6;
-} sockaddr_gen;
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+
+WINSOCK_API_LINKAGE
+INT
+WSAAPI
+inet_pton(
+  IN INT Family,
+  IN PCSTR pszAddrString,
+  OUT PVOID pAddrBuf);
+
+INT
+WSAAPI
+InetPtonW(
+  IN INT Family,
+  IN PCWSTR pszAddrString,
+  OUT PVOID pAddrBuf);
+
+PCSTR
+WSAAPI
+inet_ntop(
+  IN INT Family,
+  IN PVOID pAddr,
+  OUT PSTR pStringBuf,
+  IN size_t StringBufSize);
+
+PCWSTR
+WSAAPI
+InetNtopW(
+  IN INT Family,
+  IN PVOID pAddr,
+  OUT PWSTR pStringBuf,
+  IN size_t StringBufSize);
+
+#define InetPtonA inet_pton
+#define InetNtopA inet_ntop
 
+#ifdef UNICODE
+#define InetPton InetPtonW
+#define InetNtop InetNtopW
+#else
+#define InetPton InetPtonA
+#define InetNtop InetNtopA
+#endif
 
-typedef struct _INTERFACE_INFO {
-       u_long          iiFlags;
-       sockaddr_gen    iiAddress;
-       sockaddr_gen    iiBroadcastAddress;
-       sockaddr_gen    iiNetmask;
-} INTERFACE_INFO, *LPINTERFACE_INFO;
+#if INCL_WINSOCK_API_TYPEDEFS
+
+typedef INT
+(WSAAPI *LPFN_INET_PTONA)(
+  IN INT Family,
+  IN PCSTR pszAddrString,
+  OUT PVOID pAddrBuf);
+
+typedef INT
+(WSAAPI *LPFN_INET_PTONW)(
+  IN INT Family,
+  IN PCWSTR pszAddrString,
+  OUT PVOID pAddrBuf);
+
+typedef PCSTR
+(WSAAPI *LPFN_INET_NTOPA)(
+  IN INT Family,
+  IN PVOID pAddr,
+  OUT PSTR pStringBuf,
+  IN size_t StringBufSize);
+
+typedef PCWSTR
+(WSAAPI *LPFN_INET_NTOPW)(
+  IN INT Family,
+  IN PVOID pAddr,
+  OUT PWSTR pStringBuf,
+  IN size_t StringBufSize);
 
-/*
-   The definition above can cause problems on NT4,prior to sp4.
-   To workaround, include the following struct and typedef and
-   #define INTERFACE_INFO OLD_INTERFACE_INFO
-   See: FIX: WSAIoctl SIO_GET_INTERFACE_LIST Option Problem
-   (Q181520) in MSDN KB.
-
-   The old definition causes problems on newer NT and on XP.
-
-typedef struct _OLD_INTERFACE_INFO {
-       u_long          iiFlags;
-       struct sockaddr iiAddress;
-       struct sockaddr iiBroadcastAddress;
-       struct sockaddr iiNetmask;
-} OLD_INTERFACE_INFO;
-*/
-
-#ifdef  __cplusplus
+#ifdef UNICODE
+#define LPFN_INET_PTON LPFN_INET_PTONW
+#define LPFN_INET_NTOP LPFN_INET_NTOPW
+#else
+#define LPFN_INET_PTON LPFN_INET_PTONA
+#define LPFN_INET_NTOP LPFN_INET_NTOPA
+#endif
+
+#endif /* TYPEDEFS */
+#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
+
+#if INCL_WINSOCK_API_PROTOTYPES
+
+#ifdef UNICODE
+#define gai_strerror gai_strerrorW
+#else
+#define gai_strerror gai_strerrorA
+#endif
+
+#define GAI_STRERROR_BUFFER_SIZE 1024
+
+static __inline
+char *
+gai_strerrorA(
+  IN int ecode)
+{
+  DWORD dwMsgLen;
+  static char buff[GAI_STRERROR_BUFFER_SIZE + 1];
+
+  dwMsgLen = FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM
+                           |FORMAT_MESSAGE_IGNORE_INSERTS
+                           |FORMAT_MESSAGE_MAX_WIDTH_MASK,
+                            NULL,
+                            ecode,
+                            MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
+                            (LPSTR)buff,
+                            GAI_STRERROR_BUFFER_SIZE,
+                            NULL);
+
+  return buff;
+}
+
+static __inline
+WCHAR *
+gai_strerrorW(
+  IN int ecode)
+{
+  DWORD dwMsgLen;
+  static WCHAR buff[GAI_STRERROR_BUFFER_SIZE + 1];
+
+  dwMsgLen = FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM
+                           |FORMAT_MESSAGE_IGNORE_INSERTS
+                           |FORMAT_MESSAGE_MAX_WIDTH_MASK,
+                            NULL,
+                            ecode,
+                            MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
+                            (LPWSTR)buff,
+                            GAI_STRERROR_BUFFER_SIZE,
+                            NULL);
+
+  return buff;
+}
+
+#endif /* INCL_WINSOCK_API_PROTOTYPES */
+
+WS2TCPIP_INLINE
+int
+setipv4sourcefilter(
+  IN SOCKET Socket,
+  IN IN_ADDR Interface,
+  IN IN_ADDR Group,
+  IN MULTICAST_MODE_TYPE FilterMode,
+  IN ULONG SourceCount,
+  IN CONST IN_ADDR *SourceList)
+{
+  int Error;
+  DWORD Size, Returned;
+  PIP_MSFILTER Filter;
+
+  if (SourceCount >
+    (((ULONG) (ULONG_MAX - sizeof(*Filter))) / sizeof(*SourceList))) {
+    WSASetLastError(WSAENOBUFS);
+    return SOCKET_ERROR;
+  }
+
+  Size = IP_MSFILTER_SIZE(SourceCount);
+  Filter = (PIP_MSFILTER) HeapAlloc(GetProcessHeap(), 0, Size);
+  if (Filter == NULL) {
+    WSASetLastError(WSAENOBUFS);
+    return SOCKET_ERROR;
+  }
+
+  Filter->imsf_multiaddr = Group;
+  Filter->imsf_interface = Interface;
+  Filter->imsf_fmode = FilterMode;
+  Filter->imsf_numsrc = SourceCount;
+  if (SourceCount > 0) {
+    CopyMemory(Filter->imsf_slist, SourceList,
+               SourceCount * sizeof(*SourceList));
+  }
+
+  Error = WSAIoctl(Socket, SIOCSIPMSFILTER, Filter, Size, NULL, 0,
+                   &Returned, NULL, NULL);
+
+  HeapFree(GetProcessHeap(), 0, Filter);
+
+  return Error;
+}
+
+WS2TCPIP_INLINE
+int
+getipv4sourcefilter(
+  IN SOCKET Socket,
+  IN IN_ADDR Interface,
+  IN IN_ADDR Group,
+  OUT MULTICAST_MODE_TYPE *FilterMode,
+  IN OUT ULONG *SourceCount,
+  OUT IN_ADDR *SourceList)
+{
+  int Error;
+  DWORD Size, Returned;
+  PIP_MSFILTER Filter;
+
+  if (*SourceCount >
+      (((ULONG) (ULONG_MAX - sizeof(*Filter))) / sizeof(*SourceList))) {
+    WSASetLastError(WSAENOBUFS);
+    return SOCKET_ERROR;
+  }
+
+  Size = IP_MSFILTER_SIZE(*SourceCount);
+  Filter = (PIP_MSFILTER) HeapAlloc(GetProcessHeap(), 0, Size);
+  if (Filter == NULL) {
+    WSASetLastError(WSAENOBUFS);
+    return SOCKET_ERROR;
+  }
+
+  Filter->imsf_multiaddr = Group;
+  Filter->imsf_interface = Interface;
+  Filter->imsf_numsrc = *SourceCount;
+
+  Error = WSAIoctl(Socket, SIOCGIPMSFILTER, Filter, Size, Filter, Size,
+                   &Returned, NULL, NULL);
+
+  if (Error == 0) {
+    if (*SourceCount > 0) {
+        CopyMemory(SourceList, Filter->imsf_slist,
+                   *SourceCount * sizeof(*SourceList));
+        *SourceCount = Filter->imsf_numsrc;
+    }
+    *FilterMode = Filter->imsf_fmode;
+  }
+
+  HeapFree(GetProcessHeap(), 0, Filter);
+
+  return Error;
 }
+
+#if (NTDDI_VERSION >= NTDDI_WINXP)
+
+WS2TCPIP_INLINE
+int
+setsourcefilter(
+  IN SOCKET Socket,
+  IN ULONG Interface,
+  IN CONST SOCKADDR *Group,
+  IN int GroupLength,
+  IN MULTICAST_MODE_TYPE FilterMode,
+  IN ULONG SourceCount,
+  IN CONST SOCKADDR_STORAGE *SourceList)
+{
+  int Error;
+  DWORD Size, Returned;
+  PGROUP_FILTER Filter;
+
+  if (SourceCount >= (((ULONG) (ULONG_MAX - sizeof(*Filter))) / sizeof(*SourceList))) {
+    WSASetLastError(WSAENOBUFS);
+    return SOCKET_ERROR;
+  }
+
+  Size = GROUP_FILTER_SIZE(SourceCount);
+  Filter = (PGROUP_FILTER) HeapAlloc(GetProcessHeap(), 0, Size);
+  if (Filter == NULL) {
+    WSASetLastError(WSAENOBUFS);
+    return SOCKET_ERROR;
+  }
+
+  Filter->gf_interface = Interface;
+  ZeroMemory(&Filter->gf_group, sizeof(Filter->gf_group));
+  CopyMemory(&Filter->gf_group, Group, GroupLength);
+  Filter->gf_fmode = FilterMode;
+  Filter->gf_numsrc = SourceCount;
+  if (SourceCount > 0) {
+    CopyMemory(Filter->gf_slist, SourceList, SourceCount * sizeof(*SourceList));
+  }
+
+  Error = WSAIoctl(Socket, SIOCSMSFILTER, Filter, Size, NULL, 0, &Returned, NULL, NULL);
+  HeapFree(GetProcessHeap(), 0, Filter);
+
+  return Error;
+}
+
+WS2TCPIP_INLINE
+int
+getsourcefilter(
+  IN SOCKET Socket,
+  IN ULONG Interface,
+  IN CONST SOCKADDR *Group,
+  IN int GroupLength,
+  OUT MULTICAST_MODE_TYPE *FilterMode,
+  IN OUT ULONG *SourceCount,
+  OUT SOCKADDR_STORAGE *SourceList)
+{
+  int Error;
+  DWORD Size, Returned;
+  PGROUP_FILTER Filter;
+
+  if (*SourceCount > (((ULONG) (ULONG_MAX - sizeof(*Filter))) / sizeof(*SourceList))) {
+    WSASetLastError(WSAENOBUFS);
+    return SOCKET_ERROR;
+  }
+
+  Size = GROUP_FILTER_SIZE(*SourceCount);
+  Filter = (PGROUP_FILTER) HeapAlloc(GetProcessHeap(), 0, Size);
+  if (Filter == NULL) {
+    WSASetLastError(WSAENOBUFS);
+    return SOCKET_ERROR;
+  }
+
+  Filter->gf_interface = Interface;
+  ZeroMemory(&Filter->gf_group, sizeof(Filter->gf_group));
+  CopyMemory(&Filter->gf_group, Group, GroupLength);
+  Filter->gf_numsrc = *SourceCount;
+
+  Error = WSAIoctl(Socket, SIOCGMSFILTER, Filter, Size, Filter, Size, &Returned, NULL, NULL);
+  if (Error == 0) {
+    if (*SourceCount > 0) {
+      CopyMemory(SourceList, Filter->gf_slist, *SourceCount * sizeof(*SourceList));
+      *SourceCount = Filter->gf_numsrc;
+    }
+    *FilterMode = Filter->gf_fmode;
+  }
+
+  HeapFree(GetProcessHeap(), 0, Filter);
+
+  return Error;
+}
+#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
+
+#ifdef IDEAL_SEND_BACKLOG_IOCTLS
+
+WS2TCPIP_INLINE
+int
+idealsendbacklogquery(
+  IN SOCKET s,
+  OUT ULONG *pISB)
+{
+  DWORD bytes;
+
+  return WSAIoctl(s, SIO_IDEAL_SEND_BACKLOG_QUERY, 
+                  NULL, 0, pISB, sizeof(*pISB), &bytes, NULL, NULL);
+}
+
+WS2TCPIP_INLINE
+int
+idealsendbacklognotify(
+  IN SOCKET s,
+  IN LPWSAOVERLAPPED lpOverlapped OPTIONAL,
+  IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine OPTIONAL)
+{
+  DWORD bytes;
+
+  return WSAIoctl(s, SIO_IDEAL_SEND_BACKLOG_CHANGE, 
+                  NULL, 0, NULL, 0, &bytes, 
+                  lpOverlapped, lpCompletionRoutine);
+}
+
+#endif /* IDEAL_SEND_BACKLOG_IOCTLS */
+
+#if (_WIN32_WINNT >= 0x0600)
+
+#ifdef _SECURE_SOCKET_TYPES_DEFINED_
+
+WINSOCK_API_LINKAGE
+INT
+WSAAPI
+WSASetSocketSecurity(
+  IN SOCKET Socket,
+  IN const SOCKET_SECURITY_SETTINGS *SecuritySettings OPTIONAL,
+  IN ULONG SecuritySettingsLen,
+  IN LPWSAOVERLAPPED Overlapped OPTIONAL,
+  IN LPWSAOVERLAPPED_COMPLETION_ROUTINE CompletionRoutine OPTIONAL);
+
+WINSOCK_API_LINKAGE
+INT
+WSAAPI
+WSAQuerySocketSecurity(
+  IN SOCKET Socket,
+  IN const SOCKET_SECURITY_QUERY_TEMPLATE *SecurityQueryTemplate OPTIONAL,
+  IN ULONG SecurityQueryTemplateLen,
+  OUT SOCKET_SECURITY_QUERY_INFO* SecurityQueryInfo OPTIONAL,
+  IN OUT ULONG *SecurityQueryInfoLen,
+  IN LPWSAOVERLAPPED Overlapped OPTIONAL,
+  IN LPWSAOVERLAPPED_COMPLETION_ROUTINE CompletionRoutine OPTIONAL);
+
+WINSOCK_API_LINKAGE
+INT
+WSAAPI
+WSASetSocketPeerTargetName(
+  IN SOCKET Socket,
+  IN const SOCKET_PEER_TARGET_NAME *PeerTargetName,
+  IN ULONG PeerTargetNameLen,
+  IN LPWSAOVERLAPPED Overlapped OPTIONAL,
+  IN LPWSAOVERLAPPED_COMPLETION_ROUTINE CompletionRoutine OPTIONAL);
+
+WINSOCK_API_LINKAGE
+INT
+WSAAPI
+WSADeleteSocketPeerTargetName(
+  IN SOCKET Socket,
+  IN const struct sockaddr *PeerAddr,
+  IN ULONG PeerAddrLen,
+  IN LPWSAOVERLAPPED Overlapped OPTIONAL,
+  IN LPWSAOVERLAPPED_COMPLETION_ROUTINE CompletionRoutine OPTIONAL);
+
+WINSOCK_API_LINKAGE
+INT
+WSAAPI
+WSAImpersonateSocketPeer(
+  IN SOCKET Socket,
+  IN const struct sockaddr *PeerAddr OPTIONAL,
+  IN ULONG PeerAddrLen);
+
+WINSOCK_API_LINKAGE
+INT
+WSAAPI
+WSARevertImpersonation();
+
+#endif /* _SECURE_SOCKET_TYPES_DEFINED_ */
+#endif /* (_WIN32_WINNT >= 0x0600) */
+
+#if !defined(_WIN32_WINNT) || (_WIN32_WINNT <= 0x0500)
+#include <wspiapi.h>
 #endif
 
-#endif /* _WS2TCPIP_H */
+#ifdef __cplusplus
+}
+#endif
index c734d3b..6014fe5 100644 (file)
@@ -1,7 +1,8 @@
+$if (_WDMDDK_ || _NTDDK_)
 /******************************************************************************
  *                            Executive Types                                 *
  ******************************************************************************/
-
+$endif
 $if (_WDMDDK_)
 #define EX_RUNDOWN_ACTIVE                 0x1
 #define EX_RUNDOWN_COUNT_SHIFT            0x1
@@ -285,3 +286,9 @@ typedef struct _ZONE_HEADER {
 #define PROTECTED_POOL                    0x80000000
 
 $endif (_NTDDK_)
+$if (_NTIFS_)
+#define INVALID_PROCESSOR_INDEX     0xffffffff
+
+#define EX_PUSH_LOCK ULONG_PTR
+#define PEX_PUSH_LOCK PULONG_PTR
+$endif (_NTIFS_)
index 497d0dd..7305e84 100644 (file)
@@ -1,6 +1,12 @@
 $if (_NTIFS_)
 /* FSRTL Types */
 
+typedef ULONG LBN;
+typedef LBN *PLBN;
+
+typedef ULONG VBN;
+typedef VBN *PVBN;
+
 typedef struct _FSRTL_COMMON_FCB_HEADER {
   CSHORT NodeTypeCode;
   CSHORT NodeByteSize;
@@ -169,4 +175,119 @@ typedef struct _FSRTL_PER_FILEOBJECT_CONTEXT {
 
 #define FSRTL_CC_FLUSH_ERROR_FLAG_NO_HARD_ERROR  0x1
 #define FSRTL_CC_FLUSH_ERROR_FLAG_NO_LOG_ENTRY   0x2
+
+typedef NTSTATUS
+(NTAPI *PCOMPLETE_LOCK_IRP_ROUTINE) (
+  IN PVOID Context,
+  IN PIRP Irp);
+
+typedef struct _FILE_LOCK_INFO {
+  LARGE_INTEGER StartingByte;
+  LARGE_INTEGER Length;
+  BOOLEAN ExclusiveLock;
+  ULONG Key;
+  PFILE_OBJECT FileObject;
+  PVOID ProcessId;
+  LARGE_INTEGER EndingByte;
+} FILE_LOCK_INFO, *PFILE_LOCK_INFO;
+
+typedef VOID
+(NTAPI *PUNLOCK_ROUTINE) (
+  IN PVOID Context,
+  IN PFILE_LOCK_INFO FileLockInfo);
+
+typedef struct _FILE_LOCK {
+  PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine;
+  PUNLOCK_ROUTINE UnlockRoutine;
+  BOOLEAN FastIoIsQuestionable;
+  BOOLEAN SpareC[3];
+  PVOID LockInformation;
+  FILE_LOCK_INFO LastReturnedLockInfo;
+  PVOID LastReturnedLock;
+  LONG volatile LockRequestsInProgress;
+} FILE_LOCK, *PFILE_LOCK;
+
+typedef struct _TUNNEL {
+  FAST_MUTEX Mutex;
+  PRTL_SPLAY_LINKS Cache;
+  LIST_ENTRY TimerQueue;
+  USHORT NumEntries;
+} TUNNEL, *PTUNNEL;
+
+typedef struct _BASE_MCB {
+  ULONG MaximumPairCount;
+  ULONG PairCount;
+  USHORT PoolType;
+  USHORT Flags;
+  PVOID Mapping;
+} BASE_MCB, *PBASE_MCB;
+
+typedef struct _LARGE_MCB {
+  PKGUARDED_MUTEX GuardedMutex;
+  BASE_MCB BaseMcb;
+} LARGE_MCB, *PLARGE_MCB;
+
+#define MCB_FLAG_RAISE_ON_ALLOCATION_FAILURE 1
+
+typedef struct _MCB {
+  LARGE_MCB DummyFieldThatSizesThisStructureCorrectly;
+} MCB, *PMCB;
+
+typedef enum _FAST_IO_POSSIBLE {
+  FastIoIsNotPossible = 0,
+  FastIoIsPossible,
+  FastIoIsQuestionable
+} FAST_IO_POSSIBLE;
+
+typedef struct _EOF_WAIT_BLOCK {
+  LIST_ENTRY EofWaitLinks;
+  KEVENT Event;
+} EOF_WAIT_BLOCK, *PEOF_WAIT_BLOCK;
+
+typedef PVOID OPLOCK, *POPLOCK;
+
+typedef VOID
+(NTAPI *POPLOCK_WAIT_COMPLETE_ROUTINE) (
+  IN PVOID Context,
+  IN PIRP Irp);
+
+typedef VOID
+(NTAPI *POPLOCK_FS_PREPOST_IRP) (
+  IN PVOID Context,
+  IN PIRP Irp);
+
+#if (NTDDI_VERSION >= NTDDI_VISTASP1)
+#define OPLOCK_FLAG_COMPLETE_IF_OPLOCKED    0x00000001
+#endif
+
+#if (NTDDI_VERSION >= NTDDI_WIN7)
+#define OPLOCK_FLAG_OPLOCK_KEY_CHECK_ONLY   0x00000002
+#define OPLOCK_FLAG_BACK_OUT_ATOMIC_OPLOCK  0x00000004
+#define OPLOCK_FLAG_IGNORE_OPLOCK_KEYS      0x00000008
+#define OPLOCK_FSCTRL_FLAG_ALL_KEYS_MATCH   0x00000001
+#endif
+
+#if (NTDDI_VERSION >= NTDDI_WIN7)
+
+typedef struct _OPLOCK_KEY_ECP_CONTEXT {
+  GUID OplockKey;
+  ULONG Reserved;
+} OPLOCK_KEY_ECP_CONTEXT, *POPLOCK_KEY_ECP_CONTEXT;
+
+DEFINE_GUID( GUID_ECP_OPLOCK_KEY, 0x48850596, 0x3050, 0x4be7, 0x98, 0x63, 0xfe, 0xc3, 0x50, 0xce, 0x8d, 0x7f );
+
+#endif
+
+typedef PVOID PNOTIFY_SYNC;
+
+typedef BOOLEAN
+(NTAPI *PCHECK_FOR_TRAVERSE_ACCESS) (
+  IN PVOID NotifyContext,
+  IN PVOID TargetContext OPTIONAL,
+  IN PSECURITY_SUBJECT_CONTEXT SubjectContext);
+
+typedef BOOLEAN
+(NTAPI *PFILTER_REPORT_CHANGE) (
+  IN PVOID NotifyContext,
+  IN PVOID FilterContext);
 $endif (_NTIFS_)
index 8004464..ddaecfc 100644 (file)
@@ -1064,6 +1064,7 @@ typedef struct _KQUEUE {
 } KQUEUE, *PKQUEUE, *RESTRICTED_POINTER PRKQUEUE;
 
 $include (kefuncs.h)
+$include (extypes.h)
 $include (exfuncs.h)
 $include (sefuncs.h)
 $include (psfuncs.h)
@@ -1079,11 +1080,6 @@ $include (cctypes.h)
 $include (ccfuncs.h)
 $include (zwfuncs.h)
 
-#define INVALID_PROCESSOR_INDEX     0xffffffff
-
-#define EX_PUSH_LOCK ULONG_PTR
-#define PEX_PUSH_LOCK PULONG_PTR
-
 /* #if !defined(_X86AMD64_)  FIXME : WHAT ?! */
 #if defined(_WIN64)
 
@@ -1115,127 +1111,6 @@ HalGetDmaAlignmentRequirement(
 #define HalGetDmaAlignmentRequirement() 1L
 #endif
 
-typedef ULONG LBN;
-typedef LBN *PLBN;
-
-typedef ULONG VBN;
-typedef VBN *PVBN;
-
-typedef enum _FAST_IO_POSSIBLE {
-  FastIoIsNotPossible = 0,
-  FastIoIsPossible,
-  FastIoIsQuestionable
-} FAST_IO_POSSIBLE;
-
-typedef struct _EOF_WAIT_BLOCK {
-  LIST_ENTRY EofWaitLinks;
-  KEVENT Event;
-} EOF_WAIT_BLOCK, *PEOF_WAIT_BLOCK;
-
-typedef struct _FILE_LOCK_INFO {
-  LARGE_INTEGER StartingByte;
-  LARGE_INTEGER Length;
-  BOOLEAN ExclusiveLock;
-  ULONG Key;
-  PFILE_OBJECT FileObject;
-  PVOID ProcessId;
-  LARGE_INTEGER EndingByte;
-} FILE_LOCK_INFO, *PFILE_LOCK_INFO;
-
-typedef NTSTATUS
-(NTAPI *PCOMPLETE_LOCK_IRP_ROUTINE) (
-  IN PVOID Context,
-  IN PIRP Irp);
-
-typedef VOID
-(NTAPI *PUNLOCK_ROUTINE) (
-  IN PVOID Context,
-  IN PFILE_LOCK_INFO FileLockInfo);
-
-typedef struct _FILE_LOCK {
-  PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine;
-  PUNLOCK_ROUTINE UnlockRoutine;
-  BOOLEAN FastIoIsQuestionable;
-  BOOLEAN SpareC[3];
-  PVOID LockInformation;
-  FILE_LOCK_INFO LastReturnedLockInfo;
-  PVOID LastReturnedLock;
-  LONG volatile LockRequestsInProgress;
-} FILE_LOCK, *PFILE_LOCK;
-
-typedef struct _TUNNEL {
-  FAST_MUTEX Mutex;
-  PRTL_SPLAY_LINKS Cache;
-  LIST_ENTRY TimerQueue;
-  USHORT NumEntries;
-} TUNNEL, *PTUNNEL;
-
-typedef struct _BASE_MCB {
-  ULONG MaximumPairCount;
-  ULONG PairCount;
-  USHORT PoolType;
-  USHORT Flags;
-  PVOID Mapping;
-} BASE_MCB, *PBASE_MCB;
-
-typedef struct _LARGE_MCB {
-  PKGUARDED_MUTEX GuardedMutex;
-  BASE_MCB BaseMcb;
-} LARGE_MCB, *PLARGE_MCB;
-
-#define MCB_FLAG_RAISE_ON_ALLOCATION_FAILURE 1
-
-typedef struct _MCB {
-  LARGE_MCB DummyFieldThatSizesThisStructureCorrectly;
-} MCB, *PMCB;
-
-typedef PVOID OPLOCK, *POPLOCK;
-
-typedef VOID
-(NTAPI *POPLOCK_WAIT_COMPLETE_ROUTINE) (
-  IN PVOID Context,
-  IN PIRP Irp);
-
-typedef VOID
-(NTAPI *POPLOCK_FS_PREPOST_IRP) (
-  IN PVOID Context,
-  IN PIRP Irp);
-
-#if (NTDDI_VERSION >= NTDDI_VISTASP1)
-#define OPLOCK_FLAG_COMPLETE_IF_OPLOCKED    0x00000001
-#endif
-
-#if (NTDDI_VERSION >= NTDDI_WIN7)
-#define OPLOCK_FLAG_OPLOCK_KEY_CHECK_ONLY   0x00000002
-#define OPLOCK_FLAG_BACK_OUT_ATOMIC_OPLOCK  0x00000004
-#define OPLOCK_FLAG_IGNORE_OPLOCK_KEYS      0x00000008
-#define OPLOCK_FSCTRL_FLAG_ALL_KEYS_MATCH   0x00000001
-#endif
-
-#if (NTDDI_VERSION >= NTDDI_WIN7)
-
-typedef struct _OPLOCK_KEY_ECP_CONTEXT {
-  GUID OplockKey;
-  ULONG Reserved;
-} OPLOCK_KEY_ECP_CONTEXT, *POPLOCK_KEY_ECP_CONTEXT;
-
-DEFINE_GUID( GUID_ECP_OPLOCK_KEY, 0x48850596, 0x3050, 0x4be7, 0x98, 0x63, 0xfe, 0xc3, 0x50, 0xce, 0x8d, 0x7f );
-
-#endif
-
-typedef PVOID PNOTIFY_SYNC;
-
-typedef BOOLEAN
-(NTAPI *PCHECK_FOR_TRAVERSE_ACCESS) (
-  IN PVOID NotifyContext,
-  IN PVOID TargetContext OPTIONAL,
-  IN PSECURITY_SUBJECT_CONTEXT SubjectContext);
-
-typedef BOOLEAN
-(NTAPI *PFILTER_REPORT_CHANGE) (
-  IN PVOID NotifyContext,
-  IN PVOID FilterContext);
-
 extern NTKERNELAPI PUSHORT NlsOemLeadByteInfo;
 #define NLS_OEM_LEAD_BYTE_INFO            NlsOemLeadByteInfo