|
|
/* 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
/* * Ensure structures are packed consistently. */
#if !defined(_WIN64) #include <pshpack4.h> #endif
/* * Pull in WINSOCK2.H if necessary */
#ifndef _WINSOCK2API_ #include <winsock2.h> #endif /* _WINSOCK2API_ */
#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 SOCKET (WSPAPI * LPWSPACCEPT)( SOCKET s, struct sockaddr FAR * addr, LPINT addrlen, LPCONDITIONPROC lpfnCondition, DWORD_PTR dwCallbackData, LPINT lpErrno );
typedef INT (WSPAPI * LPWSPADDRESSTOSTRING)( LPSOCKADDR lpsaAddress, DWORD dwAddressLength, LPWSAPROTOCOL_INFOW lpProtocolInfo, LPWSTR lpszAddressString, LPDWORD lpdwAddressStringLength, LPINT lpErrno );
typedef int (WSPAPI * LPWSPASYNCSELECT)( SOCKET s, HWND hWnd, unsigned int wMsg, long lEvent, LPINT lpErrno );
typedef int (WSPAPI * LPWSPBIND)( SOCKET s, const struct sockaddr FAR * name, int namelen, LPINT lpErrno );
typedef int (WSPAPI * LPWSPCANCELBLOCKINGCALL)( LPINT lpErrno );
typedef int (WSPAPI * LPWSPCLEANUP)( LPINT lpErrno );
typedef int (WSPAPI * LPWSPCLOSESOCKET)( SOCKET s, LPINT lpErrno );
typedef int (WSPAPI * LPWSPCONNECT)( SOCKET s, const struct sockaddr FAR * name, int namelen, LPWSABUF lpCallerData, LPWSABUF lpCalleeData, LPQOS lpSQOS, LPQOS lpGQOS, LPINT lpErrno );
typedef int (WSPAPI * LPWSPDUPLICATESOCKET)( SOCKET s, DWORD dwProcessId, LPWSAPROTOCOL_INFOW lpProtocolInfo, LPINT lpErrno );
typedef int (WSPAPI * LPWSPENUMNETWORKEVENTS)( SOCKET s, WSAEVENT hEventObject, LPWSANETWORKEVENTS lpNetworkEvents, LPINT lpErrno );
typedef int (WSPAPI * LPWSPEVENTSELECT)( SOCKET s, WSAEVENT hEventObject, long lNetworkEvents, LPINT lpErrno );
typedef BOOL (WSPAPI * LPWSPGETOVERLAPPEDRESULT)( SOCKET s, LPWSAOVERLAPPED lpOverlapped, LPDWORD lpcbTransfer, BOOL fWait, LPDWORD lpdwFlags, LPINT lpErrno );
typedef int (WSPAPI * LPWSPGETPEERNAME)( SOCKET s, struct sockaddr FAR * name, LPINT namelen, LPINT lpErrno );
typedef int (WSPAPI * LPWSPGETSOCKNAME)( SOCKET s, struct sockaddr FAR * name, LPINT namelen, LPINT lpErrno );
typedef int (WSPAPI * LPWSPGETSOCKOPT)( SOCKET s, int level, int optname, char FAR * optval, LPINT optlen, LPINT lpErrno );
typedef BOOL (WSPAPI * LPWSPGETQOSBYNAME)( SOCKET s, LPWSABUF lpQOSName, LPQOS lpQOS, LPINT lpErrno );
typedef int (WSPAPI * LPWSPIOCTL)( SOCKET s, DWORD dwIoControlCode, LPVOID lpvInBuffer, DWORD cbInBuffer, LPVOID lpvOutBuffer, DWORD cbOutBuffer, LPDWORD lpcbBytesReturned, LPWSAOVERLAPPED lpOverlapped, LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine, LPWSATHREADID lpThreadId, LPINT lpErrno );
typedef SOCKET (WSPAPI * LPWSPJOINLEAF)( SOCKET s, const struct sockaddr FAR * name, int namelen, LPWSABUF lpCallerData, LPWSABUF lpCalleeData, LPQOS lpSQOS, LPQOS lpGQOS, DWORD dwFlags, LPINT lpErrno );
typedef int (WSPAPI * LPWSPLISTEN)( SOCKET s, int backlog, LPINT lpErrno );
typedef int (WSPAPI * LPWSPRECV)( SOCKET s, LPWSABUF lpBuffers, DWORD dwBufferCount, LPDWORD lpNumberOfBytesRecvd, LPDWORD lpFlags, LPWSAOVERLAPPED lpOverlapped, LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine, LPWSATHREADID lpThreadId, LPINT lpErrno );
typedef int (WSPAPI * LPWSPRECVDISCONNECT)( SOCKET s, LPWSABUF lpInboundDisconnectData, LPINT lpErrno );
typedef int (WSPAPI * LPWSPRECVFROM)( SOCKET s, LPWSABUF lpBuffers, DWORD dwBufferCount, LPDWORD lpNumberOfBytesRecvd, LPDWORD lpFlags, struct sockaddr FAR * lpFrom, LPINT lpFromlen, LPWSAOVERLAPPED lpOverlapped, LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine, LPWSATHREADID lpThreadId, LPINT lpErrno );
typedef int (WSPAPI * LPWSPSELECT)( int nfds, fd_set FAR * readfds, fd_set FAR * writefds, fd_set FAR * exceptfds, const struct timeval FAR * timeout, LPINT lpErrno );
typedef int (WSPAPI * LPWSPSEND)( SOCKET s, LPWSABUF lpBuffers, DWORD dwBufferCount, LPDWORD lpNumberOfBytesSent, DWORD dwFlags, LPWSAOVERLAPPED lpOverlapped, LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine, LPWSATHREADID lpThreadId, LPINT lpErrno );
typedef int (WSPAPI * LPWSPSENDDISCONNECT)( SOCKET s, LPWSABUF lpOutboundDisconnectData, LPINT lpErrno );
typedef int (WSPAPI * LPWSPSENDTO)( SOCKET s, LPWSABUF lpBuffers, DWORD dwBufferCount, LPDWORD lpNumberOfBytesSent, DWORD dwFlags, const struct sockaddr FAR * lpTo, int iTolen, LPWSAOVERLAPPED lpOverlapped, LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine, LPWSATHREADID lpThreadId, LPINT lpErrno );
typedef int (WSPAPI * LPWSPSETSOCKOPT)( SOCKET s, int level, int optname, const char FAR * optval, int optlen, LPINT lpErrno );
typedef int (WSPAPI * LPWSPSHUTDOWN)( SOCKET s, int how, LPINT lpErrno );
typedef SOCKET (WSPAPI * LPWSPSOCKET)( int af, int type, int protocol, LPWSAPROTOCOL_INFOW lpProtocolInfo, GROUP g, DWORD dwFlags, LPINT lpErrno );
typedef INT (WSPAPI * LPWSPSTRINGTOADDRESS)( LPWSTR AddressString, INT AddressFamily, LPWSAPROTOCOL_INFOW lpProtocolInfo, LPSOCKADDR lpAddress, LPINT lpAddressLength, 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)( WSAEVENT hEvent, LPINT lpErrno );
typedef int (WSPAPI * LPWPUCLOSESOCKETHANDLE)( SOCKET s, LPINT lpErrno );
typedef WSAEVENT (WSPAPI * LPWPUCREATEEVENT)( LPINT lpErrno );
typedef SOCKET (WSPAPI * LPWPUCREATESOCKETHANDLE)( DWORD dwCatalogEntryId, DWORD_PTR dwContext, LPINT lpErrno );
typedef int (WSPAPI * LPWPUFDISSET)( SOCKET s, fd_set FAR * fdset );
typedef int (WSPAPI * LPWPUGETPROVIDERPATH)( LPGUID lpProviderId, WCHAR FAR * lpszProviderDllPath, LPINT lpProviderDllPathLen, LPINT lpErrno );
typedef SOCKET (WSPAPI * LPWPUMODIFYIFSHANDLE)( DWORD dwCatalogEntryId, SOCKET ProposedHandle, LPINT lpErrno );
typedef BOOL (WSPAPI * LPWPUPOSTMESSAGE)( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam );
typedef int (WSPAPI * LPWPUQUERYBLOCKINGCALLBACK)( DWORD dwCatalogEntryId, LPBLOCKINGCALLBACK FAR * lplpfnCallback, PDWORD_PTR lpdwContext, LPINT lpErrno );
typedef int (WSPAPI * LPWPUQUERYSOCKETHANDLECONTEXT)( SOCKET s, PDWORD_PTR lpContext, LPINT lpErrno );
typedef int (WSPAPI * LPWPUQUEUEAPC)( LPWSATHREADID lpThreadId, LPWSAUSERAPC lpfnUserApc, DWORD_PTR dwContext, LPINT lpErrno );
typedef BOOL (WSPAPI * LPWPURESETEVENT)( WSAEVENT hEvent, LPINT lpErrno );
typedef BOOL (WSPAPI * LPWPUSETEVENT)( WSAEVENT hEvent, LPINT lpErrno );
typedef int (WSPAPI * LPWPUOPENCURRENTTHREAD)( LPWSATHREADID lpThreadId, LPINT lpErrno );
typedef int (WSPAPI * LPWPUCLOSETHREAD)( LPWSATHREADID lpThreadId, LPINT lpErrno );
// Available only directly from ws2_32.dll typedef int (WSPAPI * LPWPUCOMPLETEOVERLAPPEDREQUEST) ( IN SOCKET s, LPWSAOVERLAPPED lpOverlapped, DWORD dwError, DWORD cbTransferred, 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 */
int WSPAPI WSPStartup( IN WORD wVersionRequested, OUT LPWSPDATA lpWSPData, IN LPWSAPROTOCOL_INFOW lpProtocolInfo, IN WSPUPCALLTABLE UpcallTable, OUT LPWSPPROC_TABLE lpProcTable );
typedef int (WSPAPI * LPWSPSTARTUP)( WORD wVersionRequested, LPWSPDATA lpWSPData, LPWSAPROTOCOL_INFOW lpProtocolInfo, WSPUPCALLTABLE UpcallTable, LPWSPPROC_TABLE lpProcTable );
/* * Installation and configuration entrypoints. */
int WSPAPI WSCEnumProtocols( IN LPINT lpiProtocols, OUT LPWSAPROTOCOL_INFOW lpProtocolBuffer, IN OUT LPDWORD lpdwBufferLength, OUT LPINT lpErrno );
typedef int (WSPAPI * LPWSCENUMPROTOCOLS)( LPINT lpiProtocols, LPWSAPROTOCOL_INFOW lpProtocolBuffer, LPDWORD lpdwBufferLength, LPINT lpErrno );
#if defined(_WIN64) /* * 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. */ int WSPAPI WSCEnumProtocols32( IN LPINT lpiProtocols, OUT LPWSAPROTOCOL_INFOW lpProtocolBuffer, IN OUT LPDWORD lpdwBufferLength, OUT LPINT lpErrno ); #endif
int WSPAPI WSCDeinstallProvider( IN LPGUID lpProviderId, OUT LPINT lpErrno );
typedef int (WSPAPI * LPWSCDEINSTALLPROVIDER)( LPGUID lpProviderId, LPINT lpErrno );
#if defined(_WIN64) int WSPAPI WSCDeinstallProvider32( IN LPGUID lpProviderId, OUT LPINT lpErrno ); #endif
int WSPAPI WSCInstallProvider( IN LPGUID lpProviderId, IN const WCHAR FAR * lpszProviderDllPath, IN const LPWSAPROTOCOL_INFOW lpProtocolInfoList, IN DWORD dwNumberOfEntries, OUT LPINT lpErrno );
typedef int (WSPAPI * LPWSCINSTALLPROVIDER)( LPGUID lpProviderId, const WCHAR FAR * lpszProviderDllPath, const LPWSAPROTOCOL_INFOW lpProtocolInfoList, DWORD dwNumberOfEntries, LPINT lpErrno );
#if defined(_WIN64) /* * 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. */ int WSPAPI WSCInstallProvider64_32( IN LPGUID lpProviderId, IN const WCHAR FAR * lpszProviderDllPath, IN const LPWSAPROTOCOL_INFOW lpProtocolInfoList, IN DWORD dwNumberOfEntries, OUT LPINT lpErrno ); #endif
int WSPAPI WSCGetProviderPath( IN LPGUID lpProviderId, OUT WCHAR FAR * lpszProviderDllPath, IN OUT LPINT lpProviderDllPathLen, OUT LPINT lpErrno );
typedef int (WSPAPI * LPWSCGETPROVIDERPATH)( LPGUID lpProviderId, WCHAR FAR * lpszProviderDllPath, LPINT lpProviderDllPathLen, LPINT lpErrno );
#if defined(_WIN64) int WSPAPI WSCGetProviderPath32( IN LPGUID lpProviderId, OUT WCHAR FAR * lpszProviderDllPath, IN OUT LPINT lpProviderDllPathLen, OUT LPINT lpErrno ); #endif
int WSPAPI WSCUpdateProvider( IN LPGUID lpProviderId, IN const WCHAR FAR * lpszProviderDllPath, IN const LPWSAPROTOCOL_INFOW lpProtocolInfoList, IN DWORD dwNumberOfEntries, OUT LPINT lpErrno );
typedef int (WSPAPI * LPWSCUPDATEPROVIDER)( LPGUID lpProviderId, const WCHAR FAR * lpszProviderDllPath, const LPWSAPROTOCOL_INFOW lpProtocolInfoList, DWORD dwNumberOfEntries, LPINT lpErrno );
#if defined(_WIN64) int WSPAPI WSCUpdateProvider32( IN LPGUID lpProviderId, IN const WCHAR FAR * lpszProviderDllPath, IN const LPWSAPROTOCOL_INFOW lpProtocolInfoList, IN DWORD dwNumberOfEntries, OUT LPINT lpErrno ); #endif
int WSPAPI WSCInstallQOSTemplate ( IN const LPGUID Guid, IN LPWSABUF QosName, IN LPQOS Qos );
typedef int (WSPAPI * LPWSCINSTALLQOSTEMPLATE)( const LPGUID Guid, LPWSABUF QosName, LPQOS Qos );
int WSPAPI WSCRemoveQOSTemplate ( IN const LPGUID Guid, IN LPWSABUF QosName );
typedef int (WSPAPI * LPWSCREMOVEQOSTEMPLATE)( const LPGUID Guid, LPWSABUF QosName );
/* * 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 );
int WSPAPI WPUFDIsSet( IN SOCKET s, IN fd_set FAR * fdset );
int WSPAPI WPUGetProviderPath( IN LPGUID lpProviderId, OUT WCHAR FAR * lpszProviderDllPath, IN OUT LPINT lpProviderDllPathLen, OUT LPINT lpErrno );
SOCKET WSPAPI WPUModifyIFSHandle( IN DWORD dwCatalogEntryId, IN SOCKET ProposedHandle, OUT LPINT lpErrno );
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 );
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 );
int WSPAPI WPUCompleteOverlappedRequest ( SOCKET s, LPWSAOVERLAPPED lpOverlapped, DWORD dwError, DWORD cbTransferred, LPINT lpErrno );
int WSPAPI WPUOpenCurrentThread( LPWSATHREADID lpThreadId, LPINT lpErrno );
int WSPAPI WPUCloseThread( LPWSATHREADID lpThreadId, LPINT lpErrno );
/* * Installing and uninstalling name space providers. */
/* * 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( IN OUT LPDWORD lpdwBufferLength, OUT LPWSANAMESPACE_INFOW lpnspBuffer ); #endif
INT WSPAPI WSCInstallNameSpace ( IN LPWSTR lpszIdentifier, IN LPWSTR lpszPathName, IN DWORD dwNameSpace, IN DWORD dwVersion, IN LPGUID lpProviderId );
typedef INT (WSPAPI * LPWSCINSTALLNAMESPACE)( LPWSTR lpszIdentifier, LPWSTR lpszPathName, DWORD dwNameSpace, DWORD dwVersion, LPGUID lpProviderId );
#if defined(_WIN64) INT WSPAPI WSCInstallNameSpace32 ( IN LPWSTR lpszIdentifier, IN LPWSTR lpszPathName, IN DWORD dwNameSpace, IN DWORD dwVersion, IN LPGUID lpProviderId ); #endif
INT WSPAPI WSCUnInstallNameSpace ( IN LPGUID lpProviderId );
typedef INT (WSPAPI * LPWSCUNINSTALLNAMESPACE)( LPGUID lpProviderId );
#if defined(_WIN64) INT WSPAPI WSCUnInstallNameSpace32 ( IN LPGUID lpProviderId ); #endif
INT WSPAPI WSCEnableNSProvider ( IN LPGUID lpProviderId, IN BOOL fEnable );
typedef INT (WSPAPI * LPWSCENABLENSPROVIDER)( LPGUID lpProviderId, BOOL fEnable );
#if defined(_WIN64) INT WSPAPI WSCEnableNSProvider32 ( IN LPGUID lpProviderId, IN BOOL fEnable ); #endif
/* * Pointers to the individual entries in the namespace proc table. */
typedef INT (WSAAPI * LPNSPCLEANUP)( LPGUID lpProviderId );
typedef INT (WSAAPI * LPNSPLOOKUPSERVICEBEGIN)( LPGUID lpProviderId, LPWSAQUERYSETW lpqsRestrictions, LPWSASERVICECLASSINFOW lpServiceClassInfo, DWORD dwControlFlags, LPHANDLE lphLookup );
typedef INT (WSAAPI * LPNSPLOOKUPSERVICENEXT)( HANDLE hLookup, DWORD dwControlFlags, LPDWORD lpdwBufferLength, LPWSAQUERYSETW lpqsResults );
typedef INT (WSAAPI * LPNSPIOCTL)( HANDLE hLookup, DWORD dwControlCode, LPVOID lpvInBuffer, DWORD cbInBuffer, LPVOID lpvOutBuffer, DWORD cbOutBuffer, LPDWORD lpcbBytesReturned, LPWSACOMPLETION lpCompletion, LPWSATHREADID lpThreadId );
typedef INT (WSAAPI * LPNSPLOOKUPSERVICEEND)( HANDLE hLookup );
typedef INT (WSAAPI * LPNSPSETSERVICE)( LPGUID lpProviderId, LPWSASERVICECLASSINFOW lpServiceClassInfo, LPWSAQUERYSETW lpqsRegInfo, WSAESETSERVICEOP essOperation, DWORD dwControlFlags );
typedef INT (WSAAPI * LPNSPINSTALLSERVICECLASS)( LPGUID lpProviderId, LPWSASERVICECLASSINFOW lpServiceClassInfo );
typedef INT (WSAAPI * LPNSPREMOVESERVICECLASS)( LPGUID lpProviderId, LPGUID lpServiceClassId );
typedef INT (WSAAPI * LPNSPGETSERVICECLASSINFO)( LPGUID lpProviderId, LPDWORD lpdwBufSize, 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;
// 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;
} NSP_ROUTINE, FAR * LPNSP_ROUTINE;
/* * Startup procedures. */
INT WSAAPI NSPStartup( LPGUID lpProviderId, LPNSP_ROUTINE lpnspRoutines );
typedef INT (WSAAPI * LPNSPSTARTUP)( LPGUID lpProviderId, LPNSP_ROUTINE lpnspRoutines );
#ifdef __cplusplus } #endif
#if !defined(_WIN64) #include <poppack.h> #endif
#endif /* _WINSOCK2SPI_ */
|