Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

706 lines
11 KiB

/*++
Copyright (c) 1992-1996 Microsoft Corporation
Module Name:
SockProc.h
Abstract:
This module contains prototypes for WinSock support routines.
Author:
David Treadwell (davidtr) 20-Feb-1992
Revision History:
--*/
#ifndef _SOCKPROC_
#define _SOCKPROC_
//
// SPI entrypoints.
//
SOCKET
WSPAPI
WSPAccept(
SOCKET s,
struct sockaddr FAR * addr,
LPINT addrlen,
LPCONDITIONPROC lpfnCondition,
DWORD dwCallbackData,
LPINT lpErrno
);
int
WSPAPI
WSPAddressToString(
LPSOCKADDR lpsaAddress,
DWORD dwAddressLength,
LPWSAPROTOCOL_INFOW lpProtocolInfo,
LPWSTR lpszAddressString,
LPDWORD lpdwAddressStringLength,
LPINT lpErrno
);
int
WSPAPI
WSPAsyncSelect(
SOCKET s,
HWND hWnd,
unsigned int wMsg,
long lEvent,
LPINT lpErrno
);
int
WSPAPI
WSPBind(
SOCKET s,
const struct sockaddr FAR * name,
int namelen,
LPINT lpErrno
);
int
WSPAPI
WSPCancelBlockingCall(
LPINT lpErrno
);
int
WSPAPI
WSPCleanup(
LPINT lpErrno
);
int
WSPAPI
WSPCloseSocket(
SOCKET s,
LPINT lpErrno
);
int
WSPAPI
WSPConnect(
SOCKET s,
const struct sockaddr FAR * name,
int namelen,
LPWSABUF lpCallerData,
LPWSABUF lpCalleeData,
LPQOS lpSQOS,
LPQOS lpGQOS,
LPINT lpErrno
);
int
WSPAPI
WSPDuplicateSocket(
SOCKET s,
DWORD dwProcessId,
LPWSAPROTOCOL_INFOW lpProtocolInfo,
LPINT lpErrno
);
int
WSPAPI
WSPEnumNetworkEvents(
SOCKET s,
WSAEVENT hEventObject,
LPWSANETWORKEVENTS lpNetworkEvents,
LPINT lpErrno
);
int
WSPAPI
WSPEventSelect(
SOCKET s,
WSAEVENT hEventObject,
long lNetworkEvents,
LPINT lpErrno
);
int
WSPAPI
WSPGetOverlappedResult(
SOCKET s,
LPWSAOVERLAPPED lpOverlapped,
LPDWORD lpcbTransfer,
BOOL fWait,
LPDWORD lpdwFlags,
LPINT lpErrno
);
int
WSPAPI
WSPGetPeerName(
SOCKET s,
struct sockaddr FAR * name,
LPINT namelen,
LPINT lpErrno
);
int
WSPAPI
WSPGetSockName(
SOCKET s,
struct sockaddr FAR * name,
LPINT namelen,
LPINT lpErrno
);
int
WSPAPI
WSPGetSockOpt(
SOCKET s,
int level,
int optname,
char FAR * optval,
LPINT optlen,
LPINT lpErrno
);
BOOL
WSPAPI
WSPGetQOSByName(
SOCKET s,
LPWSABUF lpQOSName,
LPQOS lpQOS,
LPINT lpErrno
);
int
WSPAPI
WSPIoctl(
SOCKET s,
DWORD dwIoControlCode,
LPVOID lpvInBuffer,
DWORD cbInBuffer,
LPVOID lpvOutBuffer,
DWORD cbOutBuffer,
LPDWORD lpcbBytesReturned,
LPWSAOVERLAPPED lpOverlapped,
LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
LPWSATHREADID lpThreadId,
LPINT lpErrno
);
SOCKET
WSPAPI
WSPJoinLeaf(
SOCKET s,
const struct sockaddr FAR * name,
int namelen,
LPWSABUF lpCallerData,
LPWSABUF lpCalleeData,
LPQOS lpSQOS,
LPQOS lpGQOS,
DWORD dwFlags,
LPINT lpErrno
);
int
WSPAPI
WSPListen(
SOCKET s,
int backlog,
LPINT lpErrno
);
int
WSPAPI
WSPRecv(
SOCKET s,
LPWSABUF lpBuffers,
DWORD dwBufferCount,
LPDWORD lpNumberOfBytesRecvd,
LPDWORD lpFlags,
LPWSAOVERLAPPED lpOverlapped,
LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
LPWSATHREADID lpThreadId,
LPINT lpErrno
);
int
WSPAPI
WSPRecvDisconnect(
SOCKET s,
LPWSABUF lpInboundDisconnectData,
LPINT lpErrno
);
int
WSPAPI
WSPRecvFrom(
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
);
int
WSPAPI
WSPSelect(
int nfds,
fd_set FAR * readfds,
fd_set FAR * writefds,
fd_set FAR * exceptfds,
const struct timeval FAR * timeout,
LPINT lpErrno
);
int
WSPAPI
WSPSend(
SOCKET s,
LPWSABUF lpBuffers,
DWORD dwBufferCount,
LPDWORD lpNumberOfBytesSent,
DWORD dwFlags,
LPWSAOVERLAPPED lpOverlapped,
LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
LPWSATHREADID lpThreadId,
LPINT lpErrno
);
int
WSPAPI
WSPSendDisconnect(
SOCKET s,
LPWSABUF lpOutboundDisconnectData,
LPINT lpErrno
);
int
WSPAPI
WSPSendTo(
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
);
int
WSPAPI
WSPSetSockOpt(
SOCKET s,
int level,
int optname,
const char FAR * optval,
int optlen,
LPINT lpErrno
);
int
WSPAPI
WSPShutdown(
SOCKET s,
int how,
LPINT lpErrno
);
SOCKET
WSPAPI
WSPSocket(
int af,
int type,
int protocol,
LPWSAPROTOCOL_INFOW lpProtocolInfo,
GROUP g,
DWORD dwFlags,
LPINT lpErrno
);
int
WSPAPI
WSPStringToAddress(
LPWSTR AddressString,
INT AddressFamily,
LPWSAPROTOCOL_INFOW lpProtocolInfo,
LPSOCKADDR lpAddress,
LPINT lpAddressLength,
LPINT lpErrno
);
//
// Reference/dereference routines for socket blocks.
//
VOID
SockDereferenceSocket (
IN PSOCKET_INFORMATION Socket
);
PSOCKET_INFORMATION
SockFindAndReferenceSocket (
IN SOCKET Handle,
IN BOOLEAN AttemptImport
);
PSOCKET_INFORMATION
SockGetHandleContext (
IN SOCKET Handle
);
VOID
SockReferenceSocket (
IN PSOCKET_INFORMATION Socket
);
BOOLEAN
SockIsSocketConnected (
IN PSOCKET_INFORMATION Socket
);
BOOLEAN
SockIsAddressConsistentWithConstrainedGroup(
IN PSOCKET_INFORMATION Socket,
IN GROUP Group,
IN PSOCKADDR SocketAddress,
IN INT SocketAddressLength
);
//
// Standard routine for blocking on a handle.
//
BOOL
SockWaitForSingleObject (
IN HANDLE Handle,
IN SOCKET SocketHandle,
IN DWORD BlockingHookUsage,
IN DWORD TimeoutUsage
);
//
// Standard I/O completion routine.
//
VOID
WINAPI
SockIoCompletion (
PVOID ApcContext,
PIO_STATUS_BLOCK IoStatusBlock,
DWORD Reserved
);
//
// Error translation routines.
//
int
SockNtStatusToSocketError (
IN NTSTATUS Status
);
//
// Routines for interacting with the asynchronous processing thread.
//
PWINSOCK_CONTEXT_BLOCK
SockAllocateContextBlock (
VOID
);
BOOLEAN
SockCheckAndInitAsyncThread (
VOID
);
VOID
SockFreeContextBlock (
IN PWINSOCK_CONTEXT_BLOCK ContextBlock
);
VOID
SockQueueRequestToAsyncThread(
IN PWINSOCK_CONTEXT_BLOCK ContextBlock
);
VOID
SockProcessAsyncSelect (
SOCKET Handle,
DWORD SocketSerialNumber,
DWORD AsyncSelectSerialNumber
);
VOID
SockRemoveAsyncSelectRequests (
IN SOCKET Handle
);
VOID
SockTerminateAsyncThread (
VOID
);
//
// Routine to handle reenabling of async select events.
//
VOID
SockReenableAsyncSelectEvent (
IN PSOCKET_INFORMATION Socket,
IN ULONG Event
);
//
// Routine called at every entrypoint of the winsock DLL.
//
int
SockEnterApi (
IN BOOLEAN MustBeStarted,
IN BOOLEAN BlockingIllegal,
IN BOOLEAN GetXByYCall
);
//
// Routines for interacting with helper DLLs.
//
VOID
SockFreeHelperDlls (
VOID
);
INT
SockGetTdiHandles (
IN PSOCKET_INFORMATION Socket
);
INT
SockGetTdiName (
IN PINT AddressFamily,
IN PINT SocketType,
IN PINT Protocol,
IN GROUP Group,
IN DWORD Flags,
OUT PUNICODE_STRING TransportDeviceName,
OUT PVOID *HelperDllSocketContext,
OUT PWINSOCK_HELPER_DLL_INFO *HelperDll,
OUT PDWORD NotificationEvents
);
BOOL
SockIsTripleInMapping (
IN PWINSOCK_MAPPING Mapping,
IN INT AddressFamily,
OUT PBOOLEAN AddressFamilyFound,
IN INT SocketType,
OUT PBOOLEAN SocketTypeFound,
IN INT Protocol,
OUT PBOOLEAN ProtocolFound,
OUT PBOOLEAN InvalidProtocolMatch
);
INT
SockLoadHelperDll (
IN PWSTR TransportName,
IN PWINSOCK_MAPPING Mapping,
OUT PWINSOCK_HELPER_DLL_INFO *HelperDll
);
INT
SockLoadTransportList (
OUT PTSTR *TransportList
);
INT
SockLoadTransportMapping (
IN PWSTR TransportName,
OUT PWINSOCK_MAPPING *Mapping
);
INT
SockNotifyHelperDll (
IN PSOCKET_INFORMATION Socket,
IN DWORD Event
);
INT
SockSetHandleContext (
IN PSOCKET_INFORMATION Socket
);
INT
SockUpdateWindowSizes (
IN PSOCKET_INFORMATION Socket,
IN BOOLEAN AlwaysUpdate
);
BOOL
SockDefaultValidateAddressForConstrainedGroup(
IN PSOCKADDR Sockaddr1,
IN PSOCKADDR Sockaddr2,
IN INT SockaddrLength
);
//
// Routines for building addresses.
//
VOID
SockBuildSockaddr (
OUT PSOCKADDR Sockaddr,
OUT PINT SockaddrLength,
IN PTRANSPORT_ADDRESS TdiAddress
);
VOID
SockBuildTdiAddress (
OUT PTRANSPORT_ADDRESS TdiAddress,
IN PSOCKADDR Sockaddr,
IN INT SockaddrLength
);
//
// The default blocking function we'll use.
//
BOOL
SockDefaultBlockingHook (
VOID
);
//
// DLL initialization routines.
//
BOOL
SockInitialize (
IN PVOID DllHandle,
IN ULONG Reason,
IN PVOID Context OPTIONAL
);
BOOL
SockThreadInitialize(
VOID
);
//
// Routine for getting and setting socket information from/to AFD.
//
INT
SockGetInformation (
IN PSOCKET_INFORMATION Socket,
IN ULONG InformationType,
IN PVOID AdditionalInputInfo OPTIONAL,
IN ULONG AdditionalInputInfoLength,
IN OUT PBOOLEAN Boolean OPTIONAL,
IN OUT PULONG Ulong OPTIONAL,
IN OUT PLARGE_INTEGER LargeInteger OPTIONAL
);
INT
SockSetInformation (
IN PSOCKET_INFORMATION Socket,
IN ULONG InformationType,
IN PBOOLEAN Boolean OPTIONAL,
IN PULONG Ulong OPTIONAL,
IN PLARGE_INTEGER LargeInteger OPTIONAL
);
VOID
SockBuildProtocolInfoForSocket(
IN PSOCKET_INFORMATION Socket,
OUT LPWSAPROTOCOL_INFOW ProtocolInfo
);
//
// Routine for passing connect data and options to and from AFD.
//
INT
SockPassConnectData(
IN PSOCKET_INFORMATION Socket,
IN ULONG AfdIoctl,
IN PCHAR Buffer,
IN INT BufferLength,
OUT PINT OutBufferLength
);
//
// Core accept code.
//
INT
SockCoreAccept (
IN PSOCKET_INFORMATION ListenSocket,
IN PSOCKET_INFORMATION AcceptSocket
);
//
// Helper routines for WSPAsyncSelect and WSPEventSelect.
//
int
SockAsyncSelectHelper(
PSOCKET_INFORMATION Socket,
HWND hWnd,
unsigned int wMsg,
long lEvent
);
int
SockEventSelectHelper(
PSOCKET_INFORMATION Socket,
WSAEVENT hEventObject,
long lNetworkEvents
);
//
// Routine for handling async (nonblocking) connects.
//
DWORD
SockDoAsyncConnect (
IN PSOCK_ASYNC_CONNECT_CONTEXT ConnectContext
);
//
// Routine for cancelling I/O.
//
VOID
SockCancelIo(
IN SOCKET Socket
);
//
// Routine for passing connect/disconnect data to a socket.
//
INT
SockPassConnectData (
IN PSOCKET_INFORMATION Socket,
IN ULONG AfdIoctl,
IN PCHAR Buffer,
IN INT BufferLength,
OUT PINT OutBufferLength
);
#endif // ndef _SOCKPROC_