xpmgr/BuildTools/Include/WS2spi.h

1506 lines
33 KiB
C

//$TAG BIZDEV
// $IPCategory:
// $DealPointID: 118736
// $AgreementName: berkeley software distribution license
// $AgreementType: oss license
// $ExternalOrigin: regents of the university of california
//$ENDTAG
//$TAG ENGR
// $Owner: vadime
// $Module: published_inc
//
//$ENDTAG
/* WS2SPI.H -- definitions to be used with the WinSock service provider.
*
* Copyright (c) Microsoft Corporation. All rights reserved.
*
* This header file corresponds to version 2.2.x of the WinSock SPI
* specification.
*
* This file includes parts which are Copyright (c) 1982-1986 Regents
* of the University of California. All rights reserved. The
* Berkeley Software License Agreement specifies the terms and
* conditions for redistribution.
*/
#ifndef _WINSOCK2SPI_
#define _WINSOCK2SPI_
#if _MSC_VER > 1000
#pragma once
#endif
/*
* Pull in WINSOCK2.H if necessary
*/
#ifndef _WINSOCK2API_
#include <winsock2.h>
#endif /* _WINSOCK2API_ */
/*
* Ensure structures are packed consistently.
*/
#if !defined(_WIN64)
#include <pshpack4.h>
#endif
#define WSPDESCRIPTION_LEN 255
#define WSS_OPERATION_IN_PROGRESS 0x00000103L
typedef struct WSPData {
WORD wVersion;
WORD wHighVersion;
WCHAR szDescription[WSPDESCRIPTION_LEN+1];
} WSPDATA, FAR * LPWSPDATA;
typedef struct _WSATHREADID {
HANDLE ThreadHandle;
DWORD_PTR Reserved;
} WSATHREADID, FAR * LPWSATHREADID;
/*
* SPI function linkage.
*/
#define WSPAPI WSAAPI
#ifdef __cplusplus
extern "C" {
#endif
/*
* Pointer to a blocking callback. A pointer to a blocking callback is
* returned from the WPUQueryBlockingCallback() upcall. Note that this
* function's signature is not identical to an application's blocking
* hook function.
*/
typedef
BOOL
(CALLBACK FAR * LPBLOCKINGCALLBACK)(
DWORD_PTR dwContext
);
/*
* Pointer to a user APC function. This is used as a parameter to the
* WPUQueueUserApc() upcall. Note that this function's signature is not
* identical to an application's completion routine.
*/
typedef
VOID
(CALLBACK FAR * LPWSAUSERAPC)(
DWORD_PTR dwContext
);
/*
* Pointers to the individual entries in a service provider's proc table.
*/
typedef
__checkReturn
SOCKET
(WSPAPI * LPWSPACCEPT)(
__in SOCKET s,
__out_bcount_part_opt(*addrlen, *addrlen) struct sockaddr FAR * addr,
__inout_opt LPINT addrlen,
__in_opt LPCONDITIONPROC lpfnCondition,
__in_opt DWORD_PTR dwCallbackData,
__out LPINT lpErrno
);
typedef
INT
(WSPAPI * LPWSPADDRESSTOSTRING)(
__in_bcount(dwAddressLength) LPSOCKADDR lpsaAddress,
__in DWORD dwAddressLength,
__in_opt LPWSAPROTOCOL_INFOW lpProtocolInfo,
__out_ecount_part(*lpdwAddressStringLength, *lpdwAddressStringLength) LPWSTR lpszAddressString,
__inout LPDWORD lpdwAddressStringLength,
__out LPINT lpErrno
);
typedef
int
(WSPAPI * LPWSPASYNCSELECT)(
__in SOCKET s,
__in HWND hWnd,
__in unsigned int wMsg,
__in long lEvent,
__out LPINT lpErrno
);
typedef
int
(WSPAPI * LPWSPBIND)(
__in SOCKET s,
__in_bcount(namelen) const struct sockaddr FAR * name,
__in int namelen,
__out LPINT lpErrno
);
typedef
int
(WSPAPI * LPWSPCANCELBLOCKINGCALL)(
__out LPINT lpErrno
);
typedef
int
(WSPAPI * LPWSPCLEANUP)(
__out LPINT lpErrno
);
typedef
int
(WSPAPI * LPWSPCLOSESOCKET)(
__in SOCKET s,
__out LPINT lpErrno
);
typedef
int
(WSPAPI * LPWSPCONNECT)(
__in SOCKET s,
__in_bcount(namelen) const struct sockaddr FAR * name,
__in int namelen,
__in_opt LPWSABUF lpCallerData,
__out_opt LPWSABUF lpCalleeData,
__in_opt LPQOS lpSQOS,
__in_opt LPQOS lpGQOS,
__out LPINT lpErrno
);
typedef
int
(WSPAPI * LPWSPDUPLICATESOCKET)(
__in SOCKET s,
__in DWORD dwProcessId,
__out LPWSAPROTOCOL_INFOW lpProtocolInfo,
__out LPINT lpErrno
);
typedef
int
(WSPAPI * LPWSPENUMNETWORKEVENTS)(
__in SOCKET s,
__in WSAEVENT hEventObject,
__out LPWSANETWORKEVENTS lpNetworkEvents,
__out LPINT lpErrno
);
typedef
int
(WSPAPI * LPWSPEVENTSELECT)(
__in SOCKET s,
__in WSAEVENT hEventObject,
__in long lNetworkEvents,
__out LPINT lpErrno
);
typedef
BOOL
(WSPAPI * LPWSPGETOVERLAPPEDRESULT)(
__in SOCKET s,
__in LPWSAOVERLAPPED lpOverlapped,
__out LPDWORD lpcbTransfer,
__in BOOL fWait,
__out LPDWORD lpdwFlags,
__out LPINT lpErrno
);
typedef
int
(WSPAPI * LPWSPGETPEERNAME)(
__in SOCKET s,
__out_bcount_part(*namelen, *namelen) struct sockaddr FAR * name,
__inout LPINT namelen,
__out LPINT lpErrno
);
typedef
int
(WSPAPI * LPWSPGETSOCKNAME)(
__in SOCKET s,
__out_bcount_part(*namelen, *namelen) struct sockaddr FAR * name,
__inout LPINT namelen,
__out LPINT lpErrno
);
typedef
int
(WSPAPI * LPWSPGETSOCKOPT)(
__in SOCKET s,
__in int level,
__in int optname,
__out_bcount(*optlen) char FAR * optval,
__inout LPINT optlen,
__out LPINT lpErrno
);
typedef
BOOL
(WSPAPI * LPWSPGETQOSBYNAME)(
__in SOCKET s,
__in LPWSABUF lpQOSName,
__out LPQOS lpQOS,
__out LPINT lpErrno
);
typedef
int
(WSPAPI * LPWSPIOCTL)(
__in SOCKET s,
__in DWORD dwIoControlCode,
__in_bcount_opt(cbInBuffer) LPVOID lpvInBuffer,
__in DWORD cbInBuffer,
__out_bcount_part_opt(cbOutBuffer, *lpcbBytesReturned) LPVOID lpvOutBuffer,
__in DWORD cbOutBuffer,
__out LPDWORD lpcbBytesReturned,
__inout_opt LPWSAOVERLAPPED lpOverlapped,
__in_opt LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
__in_opt LPWSATHREADID lpThreadId,
__out LPINT lpErrno
);
typedef
SOCKET
(WSPAPI * LPWSPJOINLEAF)(
__in SOCKET s,
__in_bcount(namelen) const struct sockaddr FAR * name,
__in int namelen,
__in_opt LPWSABUF lpCallerData,
__out_opt LPWSABUF lpCalleeData,
__in_opt LPQOS lpSQOS,
__in_opt LPQOS lpGQOS,
__in DWORD dwFlags,
__out LPINT lpErrno
);
typedef
int
(WSPAPI * LPWSPLISTEN)(
__in SOCKET s,
__in int backlog,
__out LPINT lpErrno
);
typedef
int
(WSPAPI * LPWSPRECV)(
__in SOCKET s,
__in_ecount(dwBufferCount) LPWSABUF lpBuffers,
__in DWORD dwBufferCount,
__out_opt LPDWORD lpNumberOfBytesRecvd,
__inout LPDWORD lpFlags,
__inout_opt LPWSAOVERLAPPED lpOverlapped,
__in_opt LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
__in_opt LPWSATHREADID lpThreadId,
__in LPINT lpErrno
);
typedef
int
(WSPAPI * LPWSPRECVDISCONNECT)(
__in SOCKET s,
__in_opt LPWSABUF lpInboundDisconnectData,
__out LPINT lpErrno
);
typedef
int
(WSPAPI * LPWSPRECVFROM)(
__in SOCKET s,
__in_ecount(dwBufferCount) LPWSABUF lpBuffers,
__in DWORD dwBufferCount,
__out_opt LPDWORD lpNumberOfBytesRecvd,
__inout LPDWORD lpFlags,
__out_bcount_part_opt(*lpFromLen, *lpFromLen) struct sockaddr FAR * lpFrom,
__inout_opt LPINT lpFromlen,
__inout_opt LPWSAOVERLAPPED lpOverlapped,
__in_opt LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
__in_opt LPWSATHREADID lpThreadId,
__out LPINT lpErrno
);
typedef
int
(WSPAPI * LPWSPSELECT)(
__in int nfds,
__inout_opt fd_set FAR * readfds,
__inout_opt fd_set FAR * writefds,
__inout_opt fd_set FAR * exceptfds,
__in_opt const struct timeval FAR * timeout,
__out LPINT lpErrno
);
typedef
int
(WSPAPI * LPWSPSEND)(
__in SOCKET s,
__in_ecount(dwBufferCount) LPWSABUF lpBuffers,
__in DWORD dwBufferCount,
__out_opt LPDWORD lpNumberOfBytesSent,
__in DWORD dwFlags,
__inout_opt LPWSAOVERLAPPED lpOverlapped,
__in_opt LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
__in_opt LPWSATHREADID lpThreadId,
__out LPINT lpErrno
);
typedef
int
(WSPAPI * LPWSPSENDDISCONNECT)(
__in SOCKET s,
__in_opt LPWSABUF lpOutboundDisconnectData,
__out LPINT lpErrno
);
typedef
int
(WSPAPI * LPWSPSENDTO)(
__in SOCKET s,
__in_ecount(dwBufferCount) LPWSABUF lpBuffers,
__in DWORD dwBufferCount,
__out_opt LPDWORD lpNumberOfBytesSent,
__in DWORD dwFlags,
__in_bcount_opt(iToLen) const struct sockaddr FAR * lpTo,
__in int iTolen,
__inout_opt LPWSAOVERLAPPED lpOverlapped,
__in_opt LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
__in_opt LPWSATHREADID lpThreadId,
__out LPINT lpErrno
);
typedef
int
(WSPAPI * LPWSPSETSOCKOPT)(
__in SOCKET s,
__in int level,
__in int optname,
__in_bcount_opt(optlen) const char FAR * optval,
__in int optlen,
__out LPINT lpErrno
);
typedef
int
(WSPAPI * LPWSPSHUTDOWN)(
__in SOCKET s,
__in int how,
__out LPINT lpErrno
);
typedef
__checkReturn
SOCKET
(WSPAPI * LPWSPSOCKET)(
__in int af,
__in int type,
__in int protocol,
__in_opt LPWSAPROTOCOL_INFOW lpProtocolInfo,
__in GROUP g,
__in DWORD dwFlags,
__out LPINT lpErrno
);
typedef
INT
(WSPAPI * LPWSPSTRINGTOADDRESS)(
__in LPWSTR AddressString,
__in INT AddressFamily,
__in_opt LPWSAPROTOCOL_INFOW lpProtocolInfo,
__out_bcount_part(*lpAddressLength, *lpAddressLength) LPSOCKADDR lpAddress,
__inout LPINT lpAddressLength,
__out LPINT lpErrno
);
/*
* A service provider proc table. This structure is returned by value
* from the service provider's WSPStartup() entrypoint.
*/
typedef struct _WSPPROC_TABLE {
LPWSPACCEPT lpWSPAccept;
LPWSPADDRESSTOSTRING lpWSPAddressToString;
LPWSPASYNCSELECT lpWSPAsyncSelect;
LPWSPBIND lpWSPBind;
LPWSPCANCELBLOCKINGCALL lpWSPCancelBlockingCall;
LPWSPCLEANUP lpWSPCleanup;
LPWSPCLOSESOCKET lpWSPCloseSocket;
LPWSPCONNECT lpWSPConnect;
LPWSPDUPLICATESOCKET lpWSPDuplicateSocket;
LPWSPENUMNETWORKEVENTS lpWSPEnumNetworkEvents;
LPWSPEVENTSELECT lpWSPEventSelect;
LPWSPGETOVERLAPPEDRESULT lpWSPGetOverlappedResult;
LPWSPGETPEERNAME lpWSPGetPeerName;
LPWSPGETSOCKNAME lpWSPGetSockName;
LPWSPGETSOCKOPT lpWSPGetSockOpt;
LPWSPGETQOSBYNAME lpWSPGetQOSByName;
LPWSPIOCTL lpWSPIoctl;
LPWSPJOINLEAF lpWSPJoinLeaf;
LPWSPLISTEN lpWSPListen;
LPWSPRECV lpWSPRecv;
LPWSPRECVDISCONNECT lpWSPRecvDisconnect;
LPWSPRECVFROM lpWSPRecvFrom;
LPWSPSELECT lpWSPSelect;
LPWSPSEND lpWSPSend;
LPWSPSENDDISCONNECT lpWSPSendDisconnect;
LPWSPSENDTO lpWSPSendTo;
LPWSPSETSOCKOPT lpWSPSetSockOpt;
LPWSPSHUTDOWN lpWSPShutdown;
LPWSPSOCKET lpWSPSocket;
LPWSPSTRINGTOADDRESS lpWSPStringToAddress;
} WSPPROC_TABLE, FAR * LPWSPPROC_TABLE;
/*
* Pointers to the individual entries in the upcall table.
*/
typedef
BOOL
(WSPAPI * LPWPUCLOSEEVENT)(
__in WSAEVENT hEvent,
__out LPINT lpErrno
);
typedef
int
(WSPAPI * LPWPUCLOSESOCKETHANDLE)(
__in SOCKET s,
__out LPINT lpErrno
);
typedef
WSAEVENT
(WSPAPI * LPWPUCREATEEVENT)(
__out LPINT lpErrno
);
typedef
__checkReturn
SOCKET
(WSPAPI * LPWPUCREATESOCKETHANDLE)(
__in DWORD dwCatalogEntryId,
__in DWORD_PTR dwContext,
__out LPINT lpErrno
);
typedef
int
(WSPAPI * LPWPUFDISSET)(
__in SOCKET s,
__in fd_set FAR * fdset
);
typedef
int
(WSPAPI * LPWPUGETPROVIDERPATH)(
__in LPGUID lpProviderId,
__out_ecount(*lpProviderDllPathLen) WCHAR FAR * lpszProviderDllPath,
__inout LPINT lpProviderDllPathLen,
__out LPINT lpErrno
);
typedef
SOCKET
(WSPAPI * LPWPUMODIFYIFSHANDLE)(
__in DWORD dwCatalogEntryId,
__in SOCKET ProposedHandle,
__out LPINT lpErrno
);
typedef
BOOL
(WSPAPI * LPWPUPOSTMESSAGE)(
__in HWND hWnd,
__in UINT Msg,
__in WPARAM wParam,
__in LPARAM lParam
);
typedef
int
(WSPAPI * LPWPUQUERYBLOCKINGCALLBACK)(
__in DWORD dwCatalogEntryId,
__out LPBLOCKINGCALLBACK FAR * lplpfnCallback,
__out PDWORD_PTR lpdwContext,
__out LPINT lpErrno
);
typedef
int
(WSPAPI * LPWPUQUERYSOCKETHANDLECONTEXT)(
__in SOCKET s,
__out PDWORD_PTR lpContext,
__out LPINT lpErrno
);
typedef
int
(WSPAPI * LPWPUQUEUEAPC)(
__in LPWSATHREADID lpThreadId,
__in LPWSAUSERAPC lpfnUserApc,
__in DWORD_PTR dwContext,
__out LPINT lpErrno
);
typedef
BOOL
(WSPAPI * LPWPURESETEVENT)(
__in WSAEVENT hEvent,
__out LPINT lpErrno
);
typedef
BOOL
(WSPAPI * LPWPUSETEVENT)(
__in WSAEVENT hEvent,
__out LPINT lpErrno
);
typedef
int
(WSPAPI * LPWPUOPENCURRENTTHREAD)(
__out LPWSATHREADID lpThreadId,
__out LPINT lpErrno
);
typedef
int
(WSPAPI * LPWPUCLOSETHREAD)(
__in LPWSATHREADID lpThreadId,
__out LPINT lpErrno
);
// Available only directly from ws2_32.dll
typedef
int
(WSPAPI * LPWPUCOMPLETEOVERLAPPEDREQUEST) (
__in SOCKET s,
__inout LPWSAOVERLAPPED lpOverlapped,
__in DWORD dwError,
__in DWORD cbTransferred,
__out LPINT lpErrno
);
/*
* The upcall table. This structure is passed by value to the service
* provider's WSPStartup() entrypoint.
*/
typedef struct _WSPUPCALLTABLE {
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;
} WSPUPCALLTABLE, FAR * LPWSPUPCALLTABLE;
/*
* WinSock 2 SPI socket function prototypes
*/
__control_entrypoint(DllExport)
__checkReturn
int
WSPAPI
WSPStartup(
__in WORD wVersionRequested,
__in LPWSPDATA lpWSPData,
__in LPWSAPROTOCOL_INFOW lpProtocolInfo,
__in WSPUPCALLTABLE UpcallTable,
__out LPWSPPROC_TABLE lpProcTable
);
typedef
__checkReturn
int
(WSPAPI * LPWSPSTARTUP)(
__in WORD wVersionRequested,
__in LPWSPDATA lpWSPData,
__in LPWSAPROTOCOL_INFOW lpProtocolInfo,
__in WSPUPCALLTABLE UpcallTable,
__out LPWSPPROC_TABLE lpProcTable
);
/*
* Installation and configuration entrypoints.
*/
__control_entrypoint(DllExport)
int
WSPAPI
WSCEnumProtocols(
__in_opt LPINT lpiProtocols,
__out_bcount_part_opt(*lpdwBufferLength, *lpdwBufferLength) LPWSAPROTOCOL_INFOW lpProtocolBuffer,
__inout LPDWORD lpdwBufferLength,
__out LPINT lpErrno
);
typedef
int
(WSPAPI * LPWSCENUMPROTOCOLS)(
__in_opt LPINT lpiProtocols,
__out_bcount_part_opt(*lpdwBufferLength, *lpdwBufferlength) LPWSAPROTOCOL_INFOW lpProtocolBuffer,
__inout LPDWORD lpdwBufferLength,
__out LPINT lpErrno
);
#if(defined(_WIN64) && (_WIN32_WINNT >= 0x0501))
/*
* 64-bit architectures capable of running 32-bit code have
* separate 64-bit and 32-bit catalogs. API with '32' prefix
* allow 32 bit catalog manipulations by 64 bit process.
*/
__control_entrypoint(DllExport)
int
WSPAPI
WSCEnumProtocols32(
__in_opt LPINT lpiProtocols,
__out_bcount(*lpdwBufferLength) LPWSAPROTOCOL_INFOW lpProtocolBuffer,
__inout LPDWORD lpdwBufferLength,
__out LPINT lpErrno
);
#endif //(defined(_WIN64) && _WIN32_WINNT >= 0x0501)
__control_entrypoint(DllExport)
int
WSPAPI
WSCDeinstallProvider(
__in LPGUID lpProviderId,
__out LPINT lpErrno
);
typedef
int
(WSPAPI * LPWSCDEINSTALLPROVIDER)(
__in LPGUID lpProviderId,
__out LPINT lpErrno
);
#if(defined(_WIN64) && (_WIN32_WINNT >= 0x0501))
__control_entrypoint(DllExport)
int
WSPAPI
WSCDeinstallProvider32(
__in LPGUID lpProviderId,
__out LPINT lpErrno
);
#endif //(defined(_WIN64) && _WIN32_WINNT >= 0x0501)
__control_entrypoint(DllExport)
int
WSPAPI
WSCInstallProvider(
__in LPGUID lpProviderId,
__in_z const WCHAR FAR * lpszProviderDllPath,
__in_ecount(dwNumberOfEntries) const LPWSAPROTOCOL_INFOW lpProtocolInfoList,
__in DWORD dwNumberOfEntries,
__out LPINT lpErrno
);
typedef
int
(WSPAPI * LPWSCINSTALLPROVIDER)(
__in LPGUID lpProviderId,
__in_z const WCHAR FAR * lpszProviderDllPath,
__in_ecount(dwNumberOfEntries) const LPWSAPROTOCOL_INFOW lpProtocolInfoList,
__in DWORD dwNumberOfEntries,
__out LPINT lpErrno
);
#if(defined(_WIN64) && (_WIN32_WINNT >= 0x0501))
/*
* This API manipulates 64-bit and 32-bit catalogs simulteneously.
* It is needed to guarantee the same catalog IDs for provider catalog
* entries in both 64-bit and 32-bit catalogs.
*/
__control_entrypoint(DllExport)
int
WSPAPI
WSCInstallProvider64_32(
__in LPGUID lpProviderId,
__in_z const WCHAR FAR * lpszProviderDllPath,
__in_ecount(dwNumberOfEntries) const LPWSAPROTOCOL_INFOW lpProtocolInfoList,
__in DWORD dwNumberOfEntries,
__out LPINT lpErrno
);
#endif //(defined(_WIN64) && (_WIN32_WINNT >= 0x0501))
__control_entrypoint(DllExport)
int
WSPAPI
WSCGetProviderPath(
__in LPGUID lpProviderId,
__out_ecount_part(*lpProviderDllPathLen, *lpProviderDllPathLen) WCHAR FAR * lpszProviderDllPath,
__inout LPINT lpProviderDllPathLen,
__out LPINT lpErrno
);
typedef
int
(WSPAPI * LPWSCGETPROVIDERPATH)(
__in LPGUID lpProviderId,
__out_ecount_part(*lpProviderDllPathLen, *lpProviderDllPathLen) WCHAR FAR * lpszProviderDllPath,
__inout LPINT lpProviderDllPathLen,
__out LPINT lpErrno
);
#if(_WIN32_WINNT >= 0x0501)
#if defined(_WIN64)
__control_entrypoint(DllExport)
int
WSPAPI
WSCGetProviderPath32(
__in LPGUID lpProviderId,
__out_ecount_part(*lpProviderDllPathLen, *lpProviderDllPathLen) WCHAR FAR * lpszProviderDllPath,
__inout LPINT lpProviderDllPathLen,
__out LPINT lpErrno
);
#endif
__control_entrypoint(DllExport)
int
WSPAPI
WSCUpdateProvider(
__in LPGUID lpProviderId,
__in_z const WCHAR FAR * lpszProviderDllPath,
__in_ecount(dwNumberOfEntries) const LPWSAPROTOCOL_INFOW lpProtocolInfoList,
__in DWORD dwNumberOfEntries,
__out LPINT lpErrno
);
typedef
int
(WSPAPI * LPWSCUPDATEPROVIDER)(
__in LPGUID lpProviderId,
__in_z const WCHAR FAR * lpszProviderDllPath,
__in_ecount(dwNumberOfEntries) const LPWSAPROTOCOL_INFOW lpProtocolInfoList,
__in DWORD dwNumberOfEntries,
__out LPINT lpErrno
);
#if defined(_WIN64)
__control_entrypoint(DllExport)
int
WSPAPI
WSCUpdateProvider32(
__in LPGUID lpProviderId,
__in_z const WCHAR FAR * lpszProviderDllPath,
__in_ecount(dwNumberOfEntries) const LPWSAPROTOCOL_INFOW lpProtocolInfoList,
__in DWORD dwNumberOfEntries,
__out LPINT lpErrno
);
#endif
#endif //(_WIN32_WINNT >= 0x0501)
#if (_WIN32_WINNT < 0x0600)
int
WSPAPI
WSCInstallQOSTemplate (
__in const LPGUID Guid,
__in LPWSABUF QosName,
__in LPQOS Qos
);
typedef
int
(WSPAPI * LPWSCINSTALLQOSTEMPLATE)(
__in const LPGUID Guid,
__in LPWSABUF QosName,
__in LPQOS Qos
);
int
WSPAPI
WSCRemoveQOSTemplate (
__in const LPGUID Guid,
__in LPWSABUF QosName
);
typedef
int
(WSPAPI * LPWSCREMOVEQOSTEMPLATE)(
__in const LPGUID Guid,
__in LPWSABUF QosName
);
#endif //(_WIN32_WINNT < 0x0600)
#if(_WIN32_WINNT >= 0x0600)
//
// LSP Categorization
//
#define LSP_SYSTEM 0x80000000
#define LSP_INSPECTOR 0x00000001
#define LSP_REDIRECTOR 0x00000002
#define LSP_PROXY 0x00000004
#define LSP_FIREWALL 0x00000008
#define LSP_INBOUND_MODIFY 0x00000010
#define LSP_OUTBOUND_MODIFY 0x00000020
#define LSP_CRYPTO_COMPRESS 0x00000040
#define LSP_LOCAL_CACHE 0x00000080
//
// Provider Information APIs
//
typedef enum _WSC_PROVIDER_INFO_TYPE {
// InfoType is: Info points to:
ProviderInfoLspCategories, // DWORD (LspCategories)
ProviderInfoAudit, // struct WSC_PROVIDER_AUDIT_INFO
} WSC_PROVIDER_INFO_TYPE ;
typedef struct _WSC_PROVIDER_AUDIT_INFO {
DWORD RecordSize; // Size of this audit record, in bytes (includes this field)
PVOID Reserved; // Reserved
// Install Time (GMT)
// User SID of account performing install
// Length (in characters) of Full Path
// Full Path of EXE performing install
} WSC_PROVIDER_AUDIT_INFO;
__control_entrypoint(DllExport)
int
WSPAPI
WSCSetProviderInfo(
__in LPGUID lpProviderId,
__in WSC_PROVIDER_INFO_TYPE InfoType,
__in_bcount(InfoSize) PBYTE Info,
__in size_t InfoSize,
__in DWORD Flags,
__out LPINT lpErrno
);
__control_entrypoint(DllExport)
int
WSPAPI
WSCGetProviderInfo(
__in LPGUID lpProviderId,
__in WSC_PROVIDER_INFO_TYPE InfoType,
__out_bcount_part(*InfoSize, *InfoSize) PBYTE Info,
__inout size_t *InfoSize,
__in DWORD Flags,
__out LPINT lpErrno
);
#if defined(_WIN64)
__control_entrypoint(DllExport)
int
WSPAPI
WSCSetProviderInfo32(
__in LPGUID lpProviderId,
__in WSC_PROVIDER_INFO_TYPE InfoType,
__in_bcount(InfoSize) PBYTE Info,
__in size_t InfoSize,
__in DWORD Flags,
__out LPINT lpErrno
);
__control_entrypoint(DllExport)
int
WSPAPI
WSCGetProviderInfo32(
__in LPGUID lpProviderId,
__in WSC_PROVIDER_INFO_TYPE InfoType,
__out_bcount_part(*InfoSize, *InfoSize) PBYTE Info,
__inout size_t *InfoSize,
__in DWORD Flags,
__out LPINT lpErrno
);
#endif // (_WIN64)
//
// App Permitted LSP Categorization APIs
//
__control_entrypoint(DllExport)
int
WSPAPI
WSCSetApplicationCategory(
__in_ecount(PathLength) LPCWSTR Path,
__in DWORD PathLength,
__in_ecount_opt(ExtraLength) LPCWSTR Extra,
__in DWORD ExtraLength,
__in DWORD PermittedLspCategories,
__out_opt DWORD * pPrevPermLspCat,
__out LPINT lpErrno
);
__control_entrypoint(DllExport)
int
WSPAPI
WSCGetApplicationCategory(
__in_ecount(PathLength) LPCWSTR Path,
__in DWORD PathLength,
__in_ecount_opt(ExtraLength) LPCWSTR Extra,
__in DWORD ExtraLength,
__out DWORD * pPermittedLspCategories,
__out LPINT lpErrno
);
#endif //(_WIN32_WINNT >= 0x0600)
/*
* The following upcall function prototypes are only used by WinSock 2 DLL and
* should not be used by any service providers.
*/
BOOL
WSPAPI
WPUCloseEvent(
__in WSAEVENT hEvent,
__out LPINT lpErrno
);
int
WSPAPI
WPUCloseSocketHandle(
__in SOCKET s,
__out LPINT lpErrno
);
WSAEVENT
WSPAPI
WPUCreateEvent(
__out LPINT lpErrno
);
SOCKET
WSPAPI
WPUCreateSocketHandle(
__in DWORD dwCatalogEntryId,
__in DWORD_PTR dwContext,
__out LPINT lpErrno
);
__control_entrypoint(DispatchTable)
int
WSPAPI
WPUFDIsSet(
__in SOCKET s,
__in fd_set FAR * fdset
);
int
WSPAPI
WPUGetProviderPath(
__in LPGUID lpProviderId,
__out_ecount(*lpProviderDllPathLen) WCHAR FAR * lpszProviderDllPath,
__inout LPINT lpProviderDllPathLen,
__out LPINT lpErrno
);
SOCKET
WSPAPI
WPUModifyIFSHandle(
__in DWORD dwCatalogEntryId,
__in SOCKET ProposedHandle,
__out LPINT lpErrno
);
__control_entrypoint(DispatchTable)
BOOL
WSPAPI
WPUPostMessage(
__in HWND hWnd,
__in UINT Msg,
__in WPARAM wParam,
__in LPARAM lParam
);
int
WSPAPI
WPUQueryBlockingCallback(
__in DWORD dwCatalogEntryId,
__out LPBLOCKINGCALLBACK FAR * lplpfnCallback,
__out PDWORD_PTR lpdwContext,
__out LPINT lpErrno
);
int
WSPAPI
WPUQuerySocketHandleContext(
__in SOCKET s,
__out PDWORD_PTR lpContext,
__out LPINT lpErrno
);
__control_entrypoint(DispatchTable)
int
WSPAPI
WPUQueueApc(
__in LPWSATHREADID lpThreadId,
__in LPWSAUSERAPC lpfnUserApc,
__in DWORD_PTR dwContext,
__out LPINT lpErrno
);
BOOL
WSPAPI
WPUResetEvent(
__in WSAEVENT hEvent,
__out LPINT lpErrno
);
BOOL
WSPAPI
WPUSetEvent(
__in WSAEVENT hEvent,
__out LPINT lpErrno
);
__control_entrypoint(DispatchTable)
int
WSPAPI
WPUCompleteOverlappedRequest (
__in SOCKET s,
__inout LPWSAOVERLAPPED lpOverlapped,
__in DWORD dwError,
__in DWORD cbTransferred,
__out LPINT lpErrno
);
#if(_WIN32_WINNT >= 0x0501)
__control_entrypoint(DispatchTable)
int
WSPAPI
WPUOpenCurrentThread(
__out LPWSATHREADID lpThreadId,
__out LPINT lpErrno
);
__control_entrypoint(DispatchTable)
int
WSPAPI
WPUCloseThread(
__in LPWSATHREADID lpThreadId,
__out LPINT lpErrno
);
#endif //(_WIN32_WINNT >= 0x0501)
/*
* Installing and uninstalling name space providers.
*/
#if(_WIN32_WINNT >= 0x0501)
/*
* SPI and API for enumerating name space providers are
* currently equivalent since there is no concept of a hidden
* name space provider
*/
#define WSCEnumNameSpaceProviders WSAEnumNameSpaceProvidersW
#define LPFN_WSCENUMNAMESPACEPROVIDERS LPFN_WSAENUMNAMESPACEPROVIDERSW
#if defined(_WIN64)
INT
WSAAPI
WSCEnumNameSpaceProviders32(
__inout LPDWORD lpdwBufferLength,
__out_bcount(*lpdwBufferLength) LPWSANAMESPACE_INFOW lpnspBuffer
);
#endif
#endif //(_WIN32_WINNT >= 0x0501)
#if(_WIN32_WINNT >= 0x0600)
#define WSCEnumNameSpaceProvidersEx WSAEnumNameSpaceProvidersExW
#define LPFN_WSCENUMNAMESPACEPROVIDERSEX LPFN_WSAENUMNAMESPACEPROVIDERSEXW
#if defined(_WIN64)
INT
WSAAPI
WSCEnumNameSpaceProvidersEx32(
__inout LPDWORD lpdwBufferLength,
__out_bcount(*lpdwBufferLength) LPWSANAMESPACE_INFOEXW lpnspBuffer
);
#endif //(_WIN64)
#endif //(_WIN32_WINNT >= 0x0600)
INT
WSPAPI
WSCInstallNameSpace (
__in LPWSTR lpszIdentifier,
__in LPWSTR lpszPathName,
__in DWORD dwNameSpace,
__in DWORD dwVersion,
__in LPGUID lpProviderId
);
typedef
INT
(WSPAPI * LPWSCINSTALLNAMESPACE)(
__in LPWSTR lpszIdentifier,
__in LPWSTR lpszPathName,
__in DWORD dwNameSpace,
__in DWORD dwVersion,
__in LPGUID lpProviderId
);
#if(defined(_WIN64) && (_WIN32_WINNT >= 0x0501))
INT
WSPAPI
WSCInstallNameSpace32 (
__in LPWSTR lpszIdentifier,
__in LPWSTR lpszPathName,
__in DWORD dwNameSpace,
__in DWORD dwVersion,
__in LPGUID lpProviderId
);
#endif //(defined(_WIN64) && (_WIN32_WINNT >= 0x0501))
INT
WSPAPI
WSCUnInstallNameSpace (
__in LPGUID lpProviderId
);
typedef
INT
(WSPAPI * LPWSCUNINSTALLNAMESPACE)(
__in LPGUID lpProviderId
);
#if (_WIN32_WINNT >= 0x0600 )
INT
WSPAPI
WSCInstallNameSpaceEx(
__in LPWSTR lpszIdentifier,
__in LPWSTR lpszPathName,
__in DWORD dwNameSpace,
__in DWORD dwVersion,
__in LPGUID lpProviderId,
__in LPBLOB lpProviderSpecific
);
#endif //(defined(_WIN32_WINNT >= 0x0600)
#if(defined(_WIN64) && (_WIN32_WINNT >= 0x0600))
INT
WSPAPI
WSCInstallNameSpaceEx32(
__in LPWSTR lpszIdentifier,
__in LPWSTR lpszPathName,
__in DWORD dwNameSpace,
__in DWORD dwVersion,
__in LPGUID lpProviderId,
__in LPBLOB lpProviderSpecific
);
#endif //(defined(_WIN64) && (_WIN32_WINNT >= 0x0600))
#if(defined(_WIN64) && (_WIN32_WINNT >= 0x0501))
INT
WSPAPI
WSCUnInstallNameSpace32 (
__in LPGUID lpProviderId
);
#endif //(defined(_WIN64) && (_WIN32_WINNT >= 0x0501))
INT
WSPAPI
WSCEnableNSProvider (
__in LPGUID lpProviderId,
__in BOOL fEnable
);
typedef
INT
(WSPAPI * LPWSCENABLENSPROVIDER)(
__in LPGUID lpProviderId,
__in BOOL fEnable
);
#if(defined(_WIN64) && (_WIN32_WINNT >= 0x0501))
INT
WSPAPI
WSCEnableNSProvider32 (
__in LPGUID lpProviderId,
__in BOOL fEnable
);
#endif //(defined(_WIN64) && (_WIN32_WINNT >= 0x0501))
#if (_WIN32_WINNT >= 0x0600)
#if defined(_WIN64)
int WSPAPI WSCInstallProviderAndChains64_32(
#else
int WSPAPI WSCInstallProviderAndChains(
#endif
__in LPGUID lpProviderId,
__in const LPWSTR lpszProviderDllPath,
#if defined(_WIN64)
__in const LPWSTR lpszProviderDllPath32,
#endif
__in const LPWSTR lpszLspName,
__in DWORD dwServiceFlags,
__inout_ecount(dwNumberOfEntries) LPWSAPROTOCOL_INFOW lpProtocolInfoList,
__in DWORD dwNumberOfEntries,
__out_opt LPDWORD lpdwCatalogEntryId,
__out LPINT lpErrno);
#endif //(_WIN32_WINNT >= 0x0600)
/*
* Pointers to the individual entries in the namespace proc table.
*/
typedef
INT
(WSAAPI * LPNSPCLEANUP)(
__in LPGUID lpProviderId
);
typedef
INT
(WSAAPI * LPNSPLOOKUPSERVICEBEGIN)(
__in LPGUID lpProviderId,
__in LPWSAQUERYSETW lpqsRestrictions,
__in LPWSASERVICECLASSINFOW lpServiceClassInfo,
__in DWORD dwControlFlags,
__out LPHANDLE lphLookup
);
typedef
INT
(WSAAPI * LPNSPLOOKUPSERVICENEXT)(
__in HANDLE hLookup,
__in DWORD dwControlFlags,
__inout LPDWORD lpdwBufferLength,
__out_bcount_part(*lpdwBufferLength, *lpdwBufferlength) LPWSAQUERYSETW lpqsResults
);
#if(_WIN32_WINNT >= 0x0501)
typedef
INT
(WSAAPI * LPNSPIOCTL)(
__in HANDLE hLookup,
__in DWORD dwControlCode,
__in_bcount(cbInBuffer) LPVOID lpvInBuffer,
__in DWORD cbInBuffer,
__out_bcount_part(cbOutBuffer, *lpcbBytesreturned) LPVOID lpvOutBuffer,
__in DWORD cbOutBuffer,
__out LPDWORD lpcbBytesReturned,
__in_opt LPWSACOMPLETION lpCompletion,
__in LPWSATHREADID lpThreadId
);
#endif //(_WIN32_WINNT >= 0x0501)
typedef
INT
(WSAAPI * LPNSPLOOKUPSERVICEEND)(
__in HANDLE hLookup
);
typedef
INT
(WSAAPI * LPNSPSETSERVICE)(
__in LPGUID lpProviderId,
__in LPWSASERVICECLASSINFOW lpServiceClassInfo,
__in LPWSAQUERYSETW lpqsRegInfo,
__in WSAESETSERVICEOP essOperation,
__in DWORD dwControlFlags
);
typedef
INT
(WSAAPI * LPNSPINSTALLSERVICECLASS)(
__in LPGUID lpProviderId,
__in LPWSASERVICECLASSINFOW lpServiceClassInfo
);
typedef
INT
(WSAAPI * LPNSPREMOVESERVICECLASS)(
__in LPGUID lpProviderId,
__in LPGUID lpServiceClassId
);
typedef
INT
(WSAAPI * LPNSPGETSERVICECLASSINFO)(
__in LPGUID lpProviderId,
__in LPDWORD lpdwBufSize,
__in LPWSASERVICECLASSINFOW lpServiceClassInfo
);
/*
* The name space service provider procedure table.
*/
typedef struct _NSP_ROUTINE {
/* Structure version information: */
DWORD cbSize;
DWORD dwMajorVersion;
DWORD dwMinorVersion;
/* Procedure-pointer table: */
LPNSPCLEANUP NSPCleanup;
LPNSPLOOKUPSERVICEBEGIN NSPLookupServiceBegin;
LPNSPLOOKUPSERVICENEXT NSPLookupServiceNext;
LPNSPLOOKUPSERVICEEND NSPLookupServiceEnd;
LPNSPSETSERVICE NSPSetService;
LPNSPINSTALLSERVICECLASS NSPInstallServiceClass;
LPNSPREMOVESERVICECLASS NSPRemoveServiceClass;
LPNSPGETSERVICECLASSINFO NSPGetServiceClassInfo;
#if(_WIN32_WINNT >= 0x0501)
// These APIs were added later, so must appear here
// to keep the pointers in the structure in order.
// Namespaces unaware of these APIs will set cbSize
// to match the size of FIELD_OFFSET(NSP_ROUTINE, NSPIoctl).
LPNSPIOCTL NSPIoctl;
#endif //(_WIN32_WINNT >= 0x0501)
} NSP_ROUTINE, FAR * LPNSP_ROUTINE;
/*
* Startup procedures.
*/
__checkReturn
INT
WSAAPI
NSPStartup(
__in LPGUID lpProviderId,
__inout LPNSP_ROUTINE lpnspRoutines
);
typedef
__checkReturn
INT
(WSAAPI * LPNSPSTARTUP)(
__in LPGUID lpProviderId,
__inout LPNSP_ROUTINE lpnspRoutines
);
typedef
__checkReturn
INT
(WSAAPI * LPNSPV2STARTUP)(
__in LPGUID lpProviderId,
__deref_out LPVOID * ppvClientSessionArg
);
typedef
INT
(WSAAPI * LPNSPV2CLEANUP)(
__in LPGUID lpProviderId,
__in LPVOID pvClientSessionArg
);
typedef
INT
(WSAAPI * LPNSPV2LOOKUPSERVICEBEGIN)(
__in LPGUID lpProviderId,
__in LPWSAQUERYSET2W lpqsRestrictions,
__in DWORD dwControlFlags,
__in LPVOID lpvClientSessionArg,
__out LPHANDLE lphLookup
);
typedef
VOID
(WSAAPI * LPNSPV2LOOKUPSERVICENEXTEX)(
__in HANDLE hAsyncCall,
__in HANDLE hLookup,
__in DWORD dwControlFlags,
__in LPDWORD lpdwBufferLength,
__out LPWSAQUERYSET2W lpqsResults
);
typedef
INT
(WSAAPI * LPNSPV2LOOKUPSERVICEEND)(
__in HANDLE hLookup
);
typedef
VOID
(WSAAPI * LPNSPV2SETSERVICEEX)(
__in HANDLE hAsyncCall,
__in LPGUID lpProviderId,
__in LPWSAQUERYSET2W lpqsRegInfo,
__in WSAESETSERVICEOP essOperation,
__in DWORD dwControlFlags,
__in LPVOID lpvClientSessionArg
);
typedef
VOID
(WSAAPI * LPNSPV2CLIENTSESSIONRUNDOWN)(
__in LPGUID lpProviderId,
__in LPVOID pvClientSessionArg
);
typedef struct _NSPV2_ROUTINE {
DWORD cbSize;
DWORD dwMajorVersion;
DWORD dwMinorVersion;
LPNSPV2STARTUP NSPv2Startup;
LPNSPV2CLEANUP NSPv2Cleanup;
LPNSPV2LOOKUPSERVICEBEGIN NSPv2LookupServiceBegin;
LPNSPV2LOOKUPSERVICENEXTEX NSPv2LookupServiceNextEx;
LPNSPV2LOOKUPSERVICEEND NSPv2LookupServiceEnd;
LPNSPV2SETSERVICEEX NSPv2SetServiceEx;
LPNSPV2CLIENTSESSIONRUNDOWN NSPv2ClientSessionRundown;
} NSPV2_ROUTINE, *PNSPV2_ROUTINE, *LPNSPV2_ROUTINE;
typedef const NSPV2_ROUTINE * PCNSPV2_ROUTINE, * LPCNSPV2_ROUTINE;
#if(_WIN32_WINNT >= 0x0600)
INT WSAAPI WSAAdvertiseProvider(
__in const GUID * puuidProviderId,
__in const LPCNSPV2_ROUTINE pNSPv2Routine);
INT WSAAPI WSAUnadvertiseProvider(
__in const GUID * puuidProviderId);
INT WSAAPI WSAProviderCompleteAsyncCall(
__in HANDLE hAsyncCall,
__in INT iRetCode);
#endif //(_WIN32_WINNT >= 0x0600)
#ifdef __cplusplus
}
#endif
#if !defined(_WIN64)
#include <poppack.h>
#endif
#endif /* _WINSOCK2SPI_ */