*
*/
-#ifndef __WS2SAN_H
-#define __WS2SAN_H
+#pragma once
-#include <winsock2.h>
+#ifndef _WS2SAN_H_
+#define _WS2SAN_H_
#ifdef __cplusplus
extern "C" {
#endif
-#define WSPAPI WINAPI
-
-/* FIXME: Unknown definitions */
-typedef PVOID LPWSPDATA;
-typedef PDWORD LPWSATHREADID;
-typedef PVOID LPWSPPROC_TABLE;
-typedef struct _WSPUPCALLTABLEEX WSPUPCALLTABLEEX;
-typedef WSPUPCALLTABLEEX *LPWSPUPCALLTABLEEX;
-
#define SO_MAX_RDMA_SIZE 0x700D
#define SO_RDMA_THRESHOLD_SIZE 0x700E
+#define MEM_READ 1
+#define MEM_WRITE 2
+#define MEM_READWRITE 3
+
#define WSAID_REGISTERMEMORY \
{0xC0B422F5, 0xF58C, 0x11d1, {0xAD, 0x6C, 0x00, 0xC0, 0x4F, 0xA3, 0x4A, 0x2D}}
#define WSAID_RDMAREAD \
{0xC0B422FA, 0xF58C, 0x11d1, {0xAD, 0x6C, 0x00, 0xC0, 0x4F, 0xA3, 0x4A, 0x2D}}
+#if(_WIN32_WINNT >= 0x0501)
#define WSAID_MEMORYREGISTRATIONCACHECALLBACK \
{0xE5DA4AF8, 0xD824, 0x48CD, {0xA7, 0x99, 0x63, 0x37, 0xA9, 0x8E, 0xD2, 0xAF}}
+#endif
+
+typedef struct _WSPUPCALLTABLEEX {
+ LPWPUCLOSEEVENT lpWPUCloseEvent;
+ LPWPUCLOSESOCKETHANDLE lpWPUCloseSocketHandle;
+ LPWPUCREATEEVENT lpWPUCreateEvent;
+ LPWPUCREATESOCKETHANDLE lpWPUCreateSocketHandle;
+ LPWPUFDISSET lpWPUFDIsSet;
+ LPWPUGETPROVIDERPATH lpWPUGetProviderPath;
+ LPWPUMODIFYIFSHANDLE lpWPUModifyIFSHandle;
+ LPWPUPOSTMESSAGE lpWPUPostMessage;
+ LPWPUQUERYBLOCKINGCALLBACK lpWPUQueryBlockingCallback;
+ LPWPUQUERYSOCKETHANDLECONTEXT lpWPUQuerySocketHandleContext;
+ LPWPUQUEUEAPC lpWPUQueueApc;
+ LPWPURESETEVENT lpWPUResetEvent;
+ LPWPUSETEVENT lpWPUSetEvent;
+ LPWPUOPENCURRENTTHREAD lpWPUOpenCurrentThread;
+ LPWPUCLOSETHREAD lpWPUCloseThread;
+ LPWPUCOMPLETEOVERLAPPEDREQUEST lpWPUCompleteOverlappedRequest;
+} WSPUPCALLTABLEEX, FAR *LPWSPUPCALLTABLEEX;
typedef struct _WSABUFEX {
- u_long len;
- char FAR *buf;
- HANDLE handle;
+ u_long len;
+ _Field_size_bytes_(len) char FAR *buf;
+ HANDLE handle;
} WSABUFEX, FAR * LPWSABUFEX;
-#if 0
-typedef struct _WSPUPCALLTABLEEX {
- LPWPUCLOSEEVENT lpWPUCloseEvent;
- LPWPUCLOSESOCKETHANDLE lpWPUCloseSocketHandle;
- LPWPUCREATEEVENT lpWPUCreateEvent;
- LPWPUCREATESOCKETHANDLE lpWPUCreateSocketHandle;
- LPWPUFDISSET lpWPUFDIsSet;
- LPWPUGETPROVIDERPATH lpWPUGetProviderPath;
- LPWPUMODIFYIFSHANDLE lpWPUModifyIFSHandle;
- LPWPUPOSTMESSAGE lpWPUPostMessage;
- LPWPUQUERYBLOCKINGCALLBACK lpWPUQueryBlockingCallback;
- LPWPUQUERYSOCKETHANDLECONTEXT lpWPUQuerySocketHandleContext;
- LPWPUQUEUEAPC lpWPUQueueApc;
- LPWPURESETEVENT lpWPUResetEvent;
- LPWPUSETEVENT lpWPUSetEvent;
- LPWPUOPENCURRENTTHREAD lpWPUOpenCurrentThread;
- LPWPUCLOSETHREAD lpWPUCloseThread;
- LPWPUCOMPLETEOVERLAPPEDREQUEST lpWPUCompleteOverlappedRequest;
-} WSPUPCALLTABLEEX, FAR * LPWSPUPCALLTABLEEX;
+typedef
+_Must_inspect_result_
+int
+(WSPAPI *LPWSPSTARTUPEX)(
+ _In_ WORD wVersionRequested,
+ _Out_ LPWSPDATA lpWSPData,
+ _In_ LPWSAPROTOCOL_INFOW lpProtocolInfo,
+ _In_ LPWSPUPCALLTABLEEX lpUpcallTable,
+ _Out_ LPWSPPROC_TABLE lpProcTable);
+
+typedef
+_Must_inspect_result_
+HANDLE
+(WSPAPI *LPFN_WSPREGISTERMEMORY)(
+ _In_ SOCKET s,
+ _In_reads_bytes_(dwBufferLength) PVOID lpBuffer,
+ _In_ DWORD dwBufferLength,
+ _In_ DWORD dwFlags,
+ _Out_ LPINT lpErrno);
+
+typedef int
+(WSPAPI *LPFN_WSPDEREGISTERMEMORY)(
+ _In_ SOCKET s,
+ _In_ HANDLE Handle,
+ _Out_ LPINT lpErrno);
+
+typedef
+_Must_inspect_result_
+int
+(WSPAPI *LPFN_WSPREGISTERRDMAMEMORY)(
+ _In_ SOCKET s,
+ _In_reads_bytes_(dwBufferLength) PVOID lpBuffer,
+ _In_ DWORD dwBufferLength,
+ _In_ DWORD dwFlags,
+ _Out_writes_bytes_(*lpdwDescriptorLength) LPVOID lpRdmaBufferDescriptor,
+ _Inout_ LPDWORD lpdwDescriptorLength,
+ _Out_ LPINT lpErrno);
+
+typedef int
+(WSPAPI *LPFN_WSPDEREGISTERRDMAMEMORY)(
+ _In_ SOCKET s,
+ _In_reads_bytes_(dwDescriptorLength) LPVOID lpRdmaBufferDescriptor,
+ _In_ DWORD dwDescriptorLength,
+ _Out_ LPINT lpErrno);
+
+typedef int
+(WSPAPI *LPFN_WSPRDMAWRITE)(
+ _In_ SOCKET s,
+ _In_reads_(dwBufferCount) LPWSABUFEX lpBuffers,
+ _In_ DWORD dwBufferCount,
+ _In_reads_bytes_(dwTargetDescriptorLength) LPVOID lpTargetBufferDescriptor,
+ _In_ DWORD dwTargetDescriptorLength,
+ _In_ DWORD dwTargetBufferOffset,
+ _Out_ LPDWORD lpdwNumberOfBytesWritten,
+ _In_ DWORD dwFlags,
+ _In_opt_ LPWSAOVERLAPPED lpOverlapped,
+ _In_opt_ LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
+ _In_ LPWSATHREADID lpThreadId,
+ _Out_ LPINT lpErrno);
+
+typedef int
+(WSPAPI *LPFN_WSPRDMAREAD)(
+ _In_ SOCKET s,
+ _In_reads_(dwBufferCount) LPWSABUFEX lpBuffers,
+ _In_ DWORD dwBufferCount,
+ _In_reads_bytes_(dwTargetDescriptorLength) LPVOID lpTargetBufferDescriptor,
+ _In_ DWORD dwTargetDescriptorLength,
+ _In_ DWORD dwTargetBufferOffset,
+ _Out_ LPDWORD lpdwNumberOfBytesRead,
+ _In_ DWORD dwFlags,
+ _In_opt_ LPWSAOVERLAPPED lpOverlapped,
+ _In_opt_ LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
+ _In_ LPWSATHREADID lpThreadId,
+ _Out_ LPINT lpErrno);
+
+#if(_WIN32_WINNT >= 0x0501)
+typedef
+_Must_inspect_result_
+int
+(WSPAPI *LPFN_WSPMEMORYREGISTRATIONCACHECALLBACK)(
+ _In_reads_bytes_(Size) PVOID lpvAddress,
+ _In_ SIZE_T Size,
+ _Out_ LPINT lpErrno);
#endif
-int WSPAPI
+_Must_inspect_result_
+int
+WSPAPI
WSPStartupEx(
- IN WORD wVersionRequested,
- OUT LPWSPDATA lpWSPData,
- IN LPWSAPROTOCOL_INFOW lpProtocolInfo,
- IN LPWSPUPCALLTABLEEX lpUpcallTable,
- OUT LPWSPPROC_TABLE lpProcTable);
-
-typedef int WSPAPI
-(*LPWSPSTARTUPEX)(
- IN WORD wVersionRequested,
- OUT LPWSPDATA lpWSPData,
- IN LPWSAPROTOCOL_INFOW lpProtocolInfo,
- IN LPWSPUPCALLTABLEEX lpUpcallTable,
- OUT LPWSPPROC_TABLE lpProcTable);
-
-#define MEM_READ 1
-#define MEM_WRITE 2
-#define MEM_READWRITE 3
-
-int WSPAPI
+ _In_ WORD wVersionRequested,
+ _Out_ LPWSPDATA lpWSPData,
+ _In_ LPWSAPROTOCOL_INFOW lpProtocolInfo,
+ _In_ LPWSPUPCALLTABLEEX lpUpcallTable,
+ _Out_ LPWSPPROC_TABLE lpProcTable);
+
+_Must_inspect_result_
+HANDLE
+WSPAPI
+WSPRegisterMemory(
+ _In_ SOCKET s,
+ _In_reads_bytes_(dwBufferLength) PVOID lpBuffer,
+ _In_ DWORD dwBufferLength,
+ _In_ DWORD dwFlags,
+ _Out_ LPINT lpErrno);
+
+int
+WSPAPI
WSPDeregisterMemory(
- IN SOCKET s,
- IN HANDLE Handle,
- OUT LPINT lpErrno);
+ _In_ SOCKET s,
+ _In_ HANDLE Handle,
+ _Out_ LPINT lpErrno);
-typedef int WSPAPI
-(*LPFN_WSPDEREGISTERMEMORY)(
- IN SOCKET s,
- IN HANDLE Handle,
- OUT LPINT lpErrno);
-
-int WSPAPI
+_Must_inspect_result_
+int
+WSPAPI
+WSPRegisterRdmaMemory(
+ _In_ SOCKET s,
+ _In_reads_bytes_(dwBufferLength) PVOID lpBuffer,
+ _In_ DWORD dwBufferLength,
+ _In_ DWORD dwFlags,
+ _Out_writes_bytes_(*lpdwDescriptorLength) LPVOID lpRdmaBufferDescriptor,
+ _Inout_ LPDWORD lpdwDescriptorLength,
+ _Out_ LPINT lpErrno);
+
+int
+WSPAPI
WSPDeregisterRdmaMemory(
- IN SOCKET s,
- IN LPVOID lpRdmaBufferDescriptor,
- IN DWORD dwDescriptorLength,
- OUT LPINT lpErrno);
-
-typedef int WSPAPI
-(*LPFN_WSPDEREGISTERRDMAMEMORY)(
- IN SOCKET s,
- IN LPVOID lpRdmaBufferDescriptor,
- IN DWORD dwDescriptorLength,
- OUT LPINT lpErrno);
-
-int WSPAPI
-WSPMemoryRegistrationCacheCallback(
- IN PVOID lpvAddress,
- IN SIZE_T Size,
- OUT LPINT lpErrno);
-
-typedef int WSPAPI
-(*LPFN_WSPMEMORYREGISTRATIONCACHECALLBACK)(
- IN PVOID lpvAddress,
- IN SIZE_T Size,
- OUT LPINT lpErrno);
+ _In_ SOCKET s,
+ _In_reads_bytes_(dwDescriptorLength) LPVOID lpRdmaBufferDescriptor,
+ _In_ DWORD dwDescriptorLength,
+ _Out_ LPINT lpErrno);
-int WSPAPI
-WSPRdmaRead(
- IN SOCKET s,
- IN LPWSABUFEX lpBuffers,
- IN DWORD dwBufferCount,
- IN LPVOID lpTargetBufferDescriptor,
- IN DWORD dwTargetDescriptorLength,
- IN DWORD dwTargetBufferOffset,
- OUT LPDWORD lpdwNumberOfBytesRead,
- IN DWORD dwFlags,
- IN LPWSAOVERLAPPED lpOverlapped,
- IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
- IN LPWSATHREADID lpThreadId,
- OUT LPINT lpErrno);
-
-typedef int WSPAPI
-(*LPFN_WSPRDMAREAD)(
- IN SOCKET s,
- IN LPWSABUFEX lpBuffers,
- IN DWORD dwBufferCount,
- IN LPVOID lpTargetBufferDescriptor,
- IN DWORD dwTargetDescriptorLength,
- IN DWORD dwTargetBufferOffset,
- OUT LPDWORD lpdwNumberOfBytesRead,
- IN DWORD dwFlags,
- IN LPWSAOVERLAPPED lpOverlapped,
- IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
- IN LPWSATHREADID lpThreadId,
- OUT LPINT lpErrno);
-
-int WSPAPI
+int
+WSPAPI
WSPRdmaWrite(
- IN SOCKET s,
- IN LPWSABUFEX lpBuffers,
- IN DWORD dwBufferCount,
- IN LPVOID lpTargetBufferDescriptor,
- IN DWORD dwTargetDescriptorLength,
- IN DWORD dwTargetBufferOffset,
- OUT LPDWORD lpdwNumberOfBytesWritten,
- IN DWORD dwFlags,
- IN LPWSAOVERLAPPED lpOverlapped,
- IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
- IN LPWSATHREADID lpThreadId,
- OUT LPINT lpErrno);
-
-typedef int WSPAPI
-(*LPFN_WSPRDMAWRITE)(
- IN SOCKET s,
- IN LPWSABUFEX lpBuffers,
- IN DWORD dwBufferCount,
- IN LPVOID lpTargetBufferDescriptor,
- IN DWORD dwTargetDescriptorLength,
- IN DWORD dwTargetBufferOffset,
- OUT LPDWORD lpdwNumberOfBytesWritten,
- IN DWORD dwFlags,
- IN LPWSAOVERLAPPED lpOverlapped,
- IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
- IN LPWSATHREADID lpThreadId,
- OUT LPINT lpErrno);
-
-HANDLE WSPAPI
-WSPRegisterMemory(
- IN SOCKET s,
- IN PVOID lpBuffer,
- IN DWORD dwBufferLength,
- IN DWORD dwFlags,
- OUT LPINT lpErrno);
-
-int WSPAPI
-WSPRegisterRdmaMemory(
- IN SOCKET s,
- IN PVOID lpBuffer,
- IN DWORD dwBufferLength,
- IN DWORD dwFlags,
- OUT LPVOID lpRdmaBufferDescriptor,
- IN OUT LPDWORD lpdwDescriptorLength,
- OUT LPINT lpErrno);
-
-typedef int WSPAPI
-(*LPFN_WSPREGISTERRDMAMEMORY)(
- IN SOCKET s,
- IN PVOID lpBuffer,
- IN DWORD dwBufferLength,
- IN DWORD dwFlags,
- OUT LPVOID lpRdmaBufferDescriptor,
- IN OUT LPDWORD lpdwDescriptorLength,
- OUT LPINT lpErrno);
+ _In_ SOCKET s,
+ _In_reads_(dwBufferCount) LPWSABUFEX lpBuffers,
+ _In_ DWORD dwBufferCount,
+ _In_reads_bytes_(dwTargetDescriptorLength) LPVOID lpTargetBufferDescriptor,
+ _In_ DWORD dwTargetDescriptorLength,
+ _In_ DWORD dwTargetBufferOffset,
+ _Out_ LPDWORD lpdwNumberOfBytesWritten,
+ _In_ DWORD dwFlags,
+ _In_opt_ LPWSAOVERLAPPED lpOverlapped,
+ _In_opt_ LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
+ _In_ LPWSATHREADID lpThreadId,
+ _Out_ LPINT lpErrno);
+
+int
+WSPAPI
+WSPRdmaRead(
+ _In_ SOCKET s,
+ _In_reads_(dwBufferCount) LPWSABUFEX lpBuffers,
+ _In_ DWORD dwBufferCount,
+ _In_reads_bytes_(dwTargetDescriptorLength) LPVOID lpTargetBufferDescriptor,
+ _In_ DWORD dwTargetDescriptorLength,
+ _In_ DWORD dwTargetBufferOffset,
+ _Out_ LPDWORD lpdwNumberOfBytesRead,
+ _In_ DWORD dwFlags,
+ _In_opt_ LPWSAOVERLAPPED lpOverlapped,
+ _In_opt_ LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
+ _In_ LPWSATHREADID lpThreadId,
+ _Out_ LPINT lpErrno);
+
+#if(_WIN32_WINNT >= 0x0501)
+_Must_inspect_result_
+int
+WSPAPI
+WSPMemoryRegistrationCacheCallback(
+ _In_reads_bytes_(Size) PVOID lpvAddress,
+ _In_ SIZE_T Size,
+ _Out_ LPINT lpErrno);
+#endif
#ifdef __cplusplus
}
#endif
-#endif /* __WS2SAN_H */
+#endif /* _WS2SAN_H_ */