314 lines
4.5 KiB
C
314 lines
4.5 KiB
C
/*++
|
|
|
|
Copyright (c) 1995 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
ws2help.h
|
|
|
|
Abstract:
|
|
|
|
Contains declarations for the interface to the OS-specific
|
|
WinSock 2.0 helper routines.
|
|
|
|
Author:
|
|
|
|
Keith Moore (keithmo) 19-Jun-1995
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
#ifndef _WS2HELP_H_
|
|
#define _WS2HELP_H_
|
|
|
|
|
|
#if defined __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
|
|
#if !defined(_WS2HELP_)
|
|
#define WS2HELPAPI DECLSPEC_IMPORT
|
|
#else
|
|
#define WS2HELPAPI
|
|
#endif
|
|
|
|
|
|
//
|
|
// APC functions.
|
|
//
|
|
|
|
WS2HELPAPI
|
|
DWORD
|
|
WINAPI
|
|
WahOpenApcHelper(
|
|
OUT LPHANDLE HelperHandle
|
|
);
|
|
|
|
WS2HELPAPI
|
|
DWORD
|
|
WINAPI
|
|
WahCloseApcHelper(
|
|
IN HANDLE HelperHandle
|
|
);
|
|
|
|
WS2HELPAPI
|
|
DWORD
|
|
WINAPI
|
|
WahOpenCurrentThread(
|
|
IN HANDLE HelperHandle,
|
|
OUT LPWSATHREADID ThreadId
|
|
);
|
|
|
|
WS2HELPAPI
|
|
DWORD
|
|
WINAPI
|
|
WahCloseThread(
|
|
IN HANDLE HelperHandle,
|
|
IN LPWSATHREADID ThreadId
|
|
);
|
|
|
|
WS2HELPAPI
|
|
DWORD
|
|
WINAPI
|
|
WahQueueUserApc(
|
|
IN HANDLE HelperHandle,
|
|
IN LPWSATHREADID ThreadId,
|
|
IN LPWSAUSERAPC ApcRoutine,
|
|
IN ULONG_PTR ApcContext OPTIONAL
|
|
);
|
|
|
|
//
|
|
// Context functions.
|
|
//
|
|
|
|
typedef struct _CONTEXT_TABLE FAR * LPCONTEXT_TABLE;
|
|
|
|
#define WAH_CONTEXT_FLAG_SERIALIZE 0x00000001
|
|
|
|
WS2HELPAPI
|
|
DWORD
|
|
WINAPI
|
|
WahCreateContextTable(
|
|
LPCONTEXT_TABLE FAR * Table,
|
|
DWORD Flags
|
|
);
|
|
|
|
WS2HELPAPI
|
|
DWORD
|
|
WINAPI
|
|
WahDestroyContextTable(
|
|
LPCONTEXT_TABLE Table
|
|
);
|
|
|
|
WS2HELPAPI
|
|
DWORD
|
|
WINAPI
|
|
WahSetContext(
|
|
LPCONTEXT_TABLE Table,
|
|
SOCKET Socket,
|
|
LPVOID Context
|
|
);
|
|
|
|
WS2HELPAPI
|
|
DWORD
|
|
WINAPI
|
|
WahGetContext(
|
|
LPCONTEXT_TABLE Table,
|
|
SOCKET Socket,
|
|
LPVOID FAR * Context
|
|
);
|
|
|
|
WS2HELPAPI
|
|
DWORD
|
|
WINAPI
|
|
WahRemoveContext(
|
|
LPCONTEXT_TABLE Table,
|
|
SOCKET Socket
|
|
);
|
|
|
|
WS2HELPAPI
|
|
DWORD
|
|
WINAPI
|
|
WahRemoveContextEx(
|
|
LPCONTEXT_TABLE Table,
|
|
SOCKET Socket,
|
|
LPVOID Context
|
|
);
|
|
|
|
// Handle function
|
|
|
|
WS2HELPAPI
|
|
DWORD
|
|
WINAPI
|
|
WahOpenHandleHelper(
|
|
OUT LPHANDLE HelperHandle
|
|
);
|
|
|
|
WS2HELPAPI
|
|
DWORD
|
|
WINAPI
|
|
WahCloseHandleHelper(
|
|
IN HANDLE HelperHandle
|
|
);
|
|
|
|
|
|
WS2HELPAPI
|
|
DWORD
|
|
WINAPI
|
|
WahCreateSocketHandle(
|
|
IN HANDLE HelperHandle,
|
|
OUT SOCKET *s
|
|
);
|
|
|
|
WS2HELPAPI
|
|
DWORD
|
|
WINAPI
|
|
WahCloseSocketHandle(
|
|
IN HANDLE HelperHandle,
|
|
IN SOCKET s
|
|
);
|
|
|
|
WS2HELPAPI
|
|
DWORD
|
|
WINAPI
|
|
WahCompleteRequest(
|
|
IN HANDLE HelperHandle,
|
|
IN SOCKET s,
|
|
IN LPWSAOVERLAPPED lpOverlapped,
|
|
IN DWORD dwError,
|
|
IN DWORD cbTransferred
|
|
);
|
|
|
|
WS2HELPAPI
|
|
DWORD
|
|
WINAPI
|
|
WahEnableNonIFSHandleSupport (
|
|
VOID
|
|
);
|
|
|
|
WS2HELPAPI
|
|
DWORD
|
|
WINAPI
|
|
WahDisableNonIFSHandleSupport (
|
|
VOID
|
|
);
|
|
|
|
|
|
// Notification handle functions
|
|
|
|
WS2HELPAPI
|
|
DWORD
|
|
WINAPI
|
|
WahOpenNotificationHandleHelper(
|
|
OUT LPHANDLE HelperHandle
|
|
);
|
|
|
|
WS2HELPAPI
|
|
DWORD
|
|
WINAPI
|
|
WahCloseNotificationHandleHelper(
|
|
IN HANDLE HelperHandle
|
|
);
|
|
|
|
WS2HELPAPI
|
|
DWORD
|
|
WINAPI
|
|
WahCreateNotificationHandle(
|
|
IN HANDLE HelperHandle,
|
|
OUT HANDLE *h
|
|
);
|
|
|
|
WS2HELPAPI
|
|
DWORD
|
|
WINAPI
|
|
WahWaitForNotification(
|
|
IN HANDLE HelperHandle,
|
|
IN HANDLE h,
|
|
IN LPWSAOVERLAPPED lpOverlapped,
|
|
IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
|
|
);
|
|
|
|
WS2HELPAPI
|
|
DWORD
|
|
WINAPI
|
|
WahNotifyAllProcesses (
|
|
IN HANDLE HelperHandle
|
|
);
|
|
|
|
|
|
//
|
|
// New handle -> context lookup functions
|
|
//
|
|
typedef struct _WSHANDLE_CONTEXT {
|
|
LONG RefCount; // Context reference count
|
|
HANDLE Handle; // Handle that corresponds to context
|
|
} WSHANDLE_CONTEXT, FAR * LPWSHANDLE_CONTEXT;
|
|
|
|
WS2HELPAPI
|
|
DWORD
|
|
WINAPI
|
|
WahCreateHandleContextTable(
|
|
LPCONTEXT_TABLE FAR * Table
|
|
);
|
|
|
|
WS2HELPAPI
|
|
DWORD
|
|
WINAPI
|
|
WahDestroyHandleContextTable(
|
|
LPCONTEXT_TABLE Table
|
|
);
|
|
|
|
WS2HELPAPI
|
|
LPWSHANDLE_CONTEXT
|
|
WINAPI
|
|
WahReferenceContextByHandle(
|
|
LPCONTEXT_TABLE Table,
|
|
HANDLE Handle
|
|
);
|
|
|
|
WS2HELPAPI
|
|
LPWSHANDLE_CONTEXT
|
|
WINAPI
|
|
WahInsertHandleContext(
|
|
LPCONTEXT_TABLE Table,
|
|
LPWSHANDLE_CONTEXT HContext
|
|
);
|
|
|
|
WS2HELPAPI
|
|
DWORD
|
|
WINAPI
|
|
WahRemoveHandleContext(
|
|
LPCONTEXT_TABLE Table,
|
|
LPWSHANDLE_CONTEXT HContext
|
|
);
|
|
|
|
|
|
typedef
|
|
BOOL
|
|
(WINAPI * LPFN_CONTEXT_ENUMERATOR)(
|
|
LPVOID EnumCtx,
|
|
LPWSHANDLE_CONTEXT HContext
|
|
);
|
|
|
|
WS2HELPAPI
|
|
BOOL
|
|
WINAPI
|
|
WahEnumerateHandleContexts(
|
|
LPCONTEXT_TABLE Table,
|
|
LPFN_CONTEXT_ENUMERATOR Enumerator,
|
|
LPVOID EnumCtx
|
|
);
|
|
|
|
#define WahReferenceHandleContext(_ctx) InterlockedIncrement(&(_ctx)->RefCount)
|
|
#define WahDereferenceHandleContext(_ctx) InterlockedDecrement(&(_ctx)->RefCount)
|
|
|
|
#if defined __cplusplus
|
|
} // extern "C"
|
|
#endif
|
|
|
|
|
|
#endif // _WS2HELP_H_
|
|
|