2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS WinSock 2.2 Library
4 * FILE: dll/win32/ws2_32_new/inc/ws2_32p.h
5 * PURPOSE: WinSock 2.2 Main Header
10 #define WINSOCK_ROOT "System\\CurrentControlSet\\Services\\WinSock2\\Parameters"
13 typedef enum _WSASYNCOPS
17 WsAsyncGetProtoByName
,
18 WsAsyncGetProtoByNumber
,
24 typedef struct _WSASYNCBLOCK
26 LIST_ENTRY AsyncQueue
;
61 } WSASYNCBLOCK
, *PWSASYNCBLOCK
;
63 typedef struct _WSASYNCCONTEXT
65 LIST_ENTRY AsyncQueue
;
67 LIST_ENTRY SocketList
;
68 } WSASYNCCONTEXT
, *PWSASYNCCONTEXT
;
70 typedef struct _WSPROTO_BUFFER
73 PCHAR Aliases
[MAXALIASES
];
75 } WSPROTO_BUFFER
, *PWSPROTO_BUFFER
;
77 typedef struct _TPROVIDER
80 WSPPROC_TABLE Service
;
82 WSPUPCALLTABLE UpcallTable
;
83 } TPROVIDER
, *PTPROVIDER
;
85 typedef struct _TCATALOG_ENTRY
87 LIST_ENTRY CatalogLink
;
90 CHAR DllPath
[MAX_PATH
];
91 WSAPROTOCOL_INFOW ProtocolInfo
;
92 } TCATALOG_ENTRY
, *PTCATALOG_ENTRY
;
94 typedef struct _TCATALOG
96 LIST_ENTRY ProtocolList
;
101 CRITICAL_SECTION Lock
;
103 } TCATALOG
, *PTCATALOG
;
105 typedef struct _NSPROVIDER
112 } NSPROVIDER
, *PNS_PROVIDER
;
114 typedef struct _NSQUERY_PROVIDER
116 LIST_ENTRY QueryLink
;
117 PNS_PROVIDER Provider
;
119 } NSQUERY_PROVIDER
, *PNSQUERY_PROVIDER
;
121 typedef struct _NSCATALOG_ENTRY
123 LIST_ENTRY CatalogLink
;
125 PNS_PROVIDER Provider
;
131 BOOLEAN StoresServiceClassInfo
;
133 WCHAR DllPath
[MAX_PATH
];
134 } NSCATALOG_ENTRY
, *PNSCATALOG_ENTRY
;
136 typedef struct _NSCATALOG
138 LIST_ENTRY CatalogList
;
142 CRITICAL_SECTION Lock
;
143 } NSCATALOG
, *PNSCATALOG
;
145 typedef struct _NSQUERY
149 BOOLEAN ShuttingDown
;
150 LIST_ENTRY ProviderList
;
151 PNSQUERY_PROVIDER ActiveProvider
;
152 CRITICAL_SECTION Lock
;
153 PNSQUERY_PROVIDER CurrentProvider
;
154 LPWSAQUERYSETW QuerySet
;
158 } NSQUERY
, *PNSQUERY
;
160 typedef struct _WSPROCESS
165 HANDLE NotificationHelper
;
166 PTCATALOG ProtocolCatalog
;
167 PNSCATALOG NamespaceCatalog
;
168 HANDLE ProtocolCatalogEvent
;
169 HANDLE NamespaceCatalogEvent
;
172 CRITICAL_SECTION ThreadLock
;
173 } WSPROCESS
, *PWSPROCESS
;
175 typedef struct _WSTHREAD
178 WSATHREADID WahThreadId
;
180 LPWSPCANCELBLOCKINGCALL CancelBlockingCall
;
181 LPBLOCKINGCALLBACK BlockingCallback
;
182 FARPROC BlockingHook
;
192 } WSTHREAD
, *PWSTHREAD
;
194 typedef struct _WSSOCKET
200 PTCATALOG_ENTRY CatalogEntry
;
204 } WSSOCKET
, *PWSSOCKET
;
206 typedef struct _ENUM_CONTEXT
208 LPWSAQUERYSETW lpqsRestrictions
;
212 } ENUM_CONTEXT
, *PENUM_CONTEXT
;
214 typedef struct _NSPROVIDER_ENUM_CONTEXT
217 LPVOID ProtocolBuffer
;
223 } NSPROVIDER_ENUM_CONTEXT
, *PNSPROVIDER_ENUM_CONTEXT
;
225 typedef struct _PROTOCOL_ENUM_CONTEXT
228 LPWSAPROTOCOL_INFOW ProtocolBuffer
;
233 } PROTOCOL_ENUM_CONTEXT
, *PPROTOCOL_ENUM_CONTEXT
;
235 typedef struct _PROVIDER_ENUM_CONTEXT
238 LPWSTR ProviderDllPath
;
239 INT ProviderDllPathLen
;
243 } PROVIDER_ENUM_CONTEXT
, *PPROVIDER_ENUM_CONTEXT
;
245 typedef struct _WS_BUFFER
250 } WS_BUFFER
, *PWS_BUFFER
;
253 (WINAPI
*PNSCATALOG_ENUMERATE_PROC
)(
255 IN PNSCATALOG_ENTRY Entry
259 (WINAPI
*PTCATALOG_ENUMERATE_PROC
)(
261 IN PTCATALOG_ENTRY Entry
265 (WINAPI
*PWS_SOCK_POST_ROUTINE
)(
272 extern HINSTANCE WsDllHandle
;
273 extern HANDLE WsSockHeap
;
274 extern PWAH_HANDLE_TABLE WsSockHandleTable
;
275 extern PWSPROCESS CurrentWsProcess
;
276 extern DWORD GlobalTlsIndex
;
277 #define TlsIndex GlobalTlsIndex
278 extern BOOLEAN WsAsyncThreadInitialized
;
279 extern PWS_SOCK_POST_ROUTINE WsSockPostRoutine
;
283 AnsiDupFromUnicode(IN LPCWSTR UnicodeString
);
287 UnicodeDupFromAnsi(IN LPCSTR AnsiString
);
291 WsRasInitializeAutodial(VOID
);
295 WsRasUninitializeAutodial(VOID
);
299 WSAttemptAutodialName(IN CONST LPWSAQUERYSETW lpqsRestrictions
);
303 WSAttemptAutodialAddr(
304 IN CONST SOCKADDR FAR
*Name
,
310 WSNoteSuccessfulHostentLookup(
311 IN CONST CHAR FAR
*Name
,
312 IN CONST ULONG Address
317 MapUnicodeProtocolInfoToAnsi(IN LPWSAPROTOCOL_INFOW UnicodeInfo
,
318 OUT LPWSAPROTOCOL_INFOA AnsiInfo
);
322 MapAnsiQuerySetToUnicode(IN LPWSAQUERYSETA AnsiSet
,
323 IN OUT PSIZE_T SetSize
,
324 OUT LPWSAQUERYSETW UnicodeSet
);
328 MapUnicodeQuerySetToAnsi(IN LPWSAQUERYSETW UnicodeSet
,
329 IN OUT PSIZE_T SetSize
,
330 OUT LPWSAQUERYSETA AnsiSet
);
334 CopyQuerySetW(IN LPWSAQUERYSETW UnicodeSet
,
335 OUT LPWSAQUERYSETW
*UnicodeCopy
);
343 WsSlowPrologTid(OUT LPWSATHREADID
*ThreadId
);
347 WsSockGetSocket(IN SOCKET Handle
);
351 WsApiProlog(OUT PWSPROCESS
*Process
,
352 OUT PWSTHREAD
*Thread
);
356 WsOpenRegistryRoot(VOID
);
360 WsCreateStartupSynchronization(VOID
);
364 WsDestroyStartupSynchronization(VOID
);
368 WsSetupCatalogProtection(IN HKEY CatalogKey
,
369 IN HANDLE CatalogEvent
,
370 OUT LPDWORD UniqueId
);
374 WsCheckCatalogState(IN HANDLE Event
);
382 WsNcDelete(IN PNSCATALOG Catalog
);
386 WsNcInitializeFromRegistry(IN PNSCATALOG Catalog
,
388 IN HANDLE CatalogEvent
);
392 WsNcRefreshFromRegistry(IN PNSCATALOG Catalog
,
393 IN HANDLE CatalogEvent
);
397 WsNcUpdateNamespaceList(IN PNSCATALOG Catalog
,
398 IN PLIST_ENTRY List
);
402 WsNcMatchProtocols(IN DWORD NameSpace
,
403 IN LONG AddressFamily
,
404 IN LPWSAQUERYSETW QuerySet
);
408 WsNcLoadProvider(IN PNSCATALOG Catalog
,
409 IN PNSCATALOG_ENTRY CatalogEntry
);
413 WsNcGetCatalogFromProviderId(IN PNSCATALOG Catalog
,
414 IN LPGUID ProviderId
,
415 OUT PNSCATALOG_ENTRY
*CatalogEntry
);
419 WsNcEnumerateCatalogItems(IN PNSCATALOG Catalog
,
420 IN PNSCATALOG_ENUMERATE_PROC Callback
,
425 WsNcGetServiceClassInfo(IN PNSCATALOG Catalog
,
426 IN OUT LPDWORD BugSize
,
427 IN OUT LPWSASERVICECLASSINFOW lpServiceClassInfo
);
431 WsNcEntryAllocate(VOID
);
435 WsNcEntryInitializeFromRegistry(IN PNSCATALOG_ENTRY CatalogEntry
,
441 WsNcEntryDereference(IN PNSCATALOG_ENTRY CatalogEntry
);
445 WsNcEntrySetProvider(IN PNSCATALOG_ENTRY Entry
,
446 IN PNS_PROVIDER Provider
);
452 IN PNS_PROVIDER Provider
461 WsNqBeginEnumerationProc(
463 PNSCATALOG_ENTRY CatalogEntry
468 WsNqDelete(IN PNSQUERY NsQuery
);
472 WsNqInitialize(IN PNSQUERY NsQuery
);
476 WsNqLookupServiceBegin(
478 IN LPWSAQUERYSETW QuerySet
,
479 IN DWORD ControlFlags
,
480 IN PNSCATALOG Catalog
485 WsNqLookupServiceEnd(IN PNSQUERY NsQuery
);
489 WsNqLookupServiceNext(
493 OUT LPWSAQUERYSETW QuerySet
500 IN PNSQUERY_PROVIDER Provider
505 WsNqPreviousProvider(
507 IN PNSQUERY_PROVIDER Provider
512 WsNqDereference(IN PNSQUERY Query
);
516 WsNqValidateAndReference(IN PNSQUERY Query
);
520 WsNqProvLookupServiceNext(
521 IN PNSQUERY_PROVIDER QueryProvider
,
524 LPWSAQUERYSETW QuerySet
529 WsNqProvLookupServiceEnd(IN PNSQUERY_PROVIDER QueryProvider
);
534 IN PNSQUERY_PROVIDER QueryProvider
,
535 IN PNS_PROVIDER Provider
540 WsNqProvAllocate(VOID
);
544 WsNqProvDelete(IN PNSQUERY_PROVIDER QueryProvider
);
548 WsNqProvLookupServiceBegin(
549 IN PNSQUERY_PROVIDER QueryProvider
,
550 IN LPWSAQUERYSETW QuerySet
,
551 IN LPWSASERVICECLASSINFOW ServiceClassInfo
,
557 WsNpDelete(IN PNS_PROVIDER Provider
);
561 WsNpLookupServiceBegin (
562 IN PNS_PROVIDER Provider
,
563 IN LPWSAQUERYSETW Restrictions
,
564 struct _WSAServiceClassInfoW
*,
565 IN DWORD ControlFlags
,
566 OUT PHANDLE LookupHandle
571 WsNpNSPCleanup(IN PNS_PROVIDER Provider
);
575 WsNpLookupServiceEnd(
576 IN PNS_PROVIDER Provider
,
577 IN HANDLE LookupHandle
583 IN PNS_PROVIDER Provider
,
585 IN LPGUID ProviderGuid
594 WsNpDereference(IN PNS_PROVIDER Provider
);
598 WsNpLookupServiceNext(
599 IN PNS_PROVIDER Provider
,
600 IN HANDLE LookupHandle
,
601 IN DWORD ControlFlags
,
602 OUT PDWORD BufferLength
,
603 OUT LPWSAQUERYSETW Results
608 WsTpDelete(IN PTPROVIDER Provider
);
613 IN PTPROVIDER Provider
,
624 IN PTPROVIDER Provider
,
626 LPWSAPROTOCOL_INFOW ProtocolInfo
631 WsTpDereference(IN PTPROVIDER Provider
);
635 WsThreadDelete(IN PWSTHREAD Thread
);
639 WsThreadDestroyCurrentThread(VOID
);
644 IN PWSPROCESS Process
,
650 WsThreadGetCurrentThread(
651 IN PWSPROCESS Process
,
657 WsThreadGetThreadId(IN PWSPROCESS Process
);
661 WsThreadStartup(VOID
);
665 WsThreadCleanup(VOID
);
669 WsThreadCancelBlockingCall(IN PWSTHREAD Thread
);
673 WsThreadUnhookBlockingHook(IN PWSTHREAD Thread
);
677 WsThreadSetBlockingHook(IN PWSTHREAD Thread
,
678 IN FARPROC BlockingHook
);
683 WsThreadBlobToHostent(IN PWSTHREAD Thread
,
688 WsThreadBlobToServent(IN PWSTHREAD Thread
,
693 WsThreadGetProtoBuffer(IN PWSTHREAD Thread
);
697 WsThreadAllocate(VOID
);
701 WsThreadDefaultBlockingHook(VOID
);
707 IN PWSPROCESS Process
712 WsTcFindIfsProviderForSocket(IN PTCATALOG TCatalog
, SOCKET Socket
);
716 WsTcEntryInitializeFromRegistry(IN PTCATALOG_ENTRY CatalogEntry
, IN HKEY
, unsigned long);
720 WsTcGetEntryFromAf(IN PTCATALOG TCatalog
, IN INT AddressFamily
, IN PTCATALOG_ENTRY
*CatalogEntry
);
724 WsTcEntryAllocate(VOID
);
728 WsTcEntrySetProvider(IN PTCATALOG_ENTRY CatalogEntry
, IN PTPROVIDER Provider
);
732 WsTcRefreshFromRegistry(IN PTCATALOG TCatalog
, PVOID
);
736 WsTcOpen(IN PTCATALOG TCatalog
, IN HKEY
);
740 WsTcFindProvider(IN PTCATALOG TCatalog
, IN LPGUID ProviderId
);
744 WsTcEnumerateCatalogItems(IN PTCATALOG Catalog
,
745 IN PTCATALOG_ENUMERATE_PROC Callback
,
750 WsTcEntryDereference(IN PTCATALOG_ENTRY CatalogEntry
);
758 WsTcDelete(IN PTCATALOG Catalog
);
762 WsTcGetEntryFromTriplet(IN PTCATALOG TCatalog
, IN INT AddressFamily
, IN INT SocketType
, IN INT Protocol
, IN DWORD StartId
, IN PTCATALOG_ENTRY
*CatalogEntry
);
766 WsTcUpdateProtocolList(IN PTCATALOG TCatalog
, PLIST_ENTRY ProtocolList
);
770 WsTcEntryDelete(IN PTCATALOG_ENTRY CatalogEntry
);
774 WsTcGetEntryFromCatalogEntryId(IN PTCATALOG TCatalog
, IN DWORD CatalogEntryId
, IN PTCATALOG_ENTRY
*CatalogEntry
);
778 WsTcLoadProvider(IN PTCATALOG TCatalog
, IN PTCATALOG_ENTRY CatalogEntry
);
782 WsTcInitializeFromRegistry(IN PTCATALOG TCatalog
, HKEY
, PVOID
);
794 WsSockDeleteSockets(IN LPVOID Context
,
795 IN PWAH_HANDLE Handle
);
799 WsSockDereference(IN PWSSOCKET Socket
);
803 WsSockAllocate(VOID
);
807 WsSockInitialize(IN PWSSOCKET Socket
,
808 IN PTCATALOG_ENTRY CatalogEntry
);
812 WsSockAssociateHandle(IN PWSSOCKET Socket
,
814 IN BOOLEAN IsProvider
);
818 WsSockDisassociateHandle(IN PWSSOCKET Socket
);
822 WsSockAddApiReference(IN SOCKET Handle
);
826 WsProcGetTCatalog(IN PWSPROCESS Process
);
830 WsProcDetachSocket(IN PWSPROCESS Process
,
831 IN PWAH_HANDLE Handle
);
835 WsProcGetAsyncHelper(IN PWSPROCESS Process
,
840 WsProcDelete(IN PWSPROCESS Process
);
848 WsProcGetNsCatalog(IN PWSPROCESS Process
);
852 WsProcSetVersion(IN PWSPROCESS Process
,
853 IN WORD VersionRequested
);
857 WsAsyncQueueRequest(IN PWSASYNCBLOCK AsyncBlock
);
861 WsAsyncCheckAndInitThread(VOID
);
865 WsAsyncCancelRequest(IN HANDLE TaskHandle
);
869 WsAsyncAllocateBlock(IN SIZE_T ExtraLength
);
873 WsAsyncTerminateThread(VOID
);
877 WsAsyncGlobalTerminate(VOID
);
881 WsAsyncGlobalInitialize(VOID
);
887 return CurrentWsProcess
;
894 /* Try to see if we're initialized. If not, do the full prolog */
895 return WsGetProcess() ? ERROR_SUCCESS
: WsSlowProlog();
900 WsQuickPrologTid(LPWSATHREADID
*Tid
)
902 /* Try to see if we're initialized. If not, do the full prolog */
903 if ((WsGetProcess()) && (*Tid
= WsThreadGetThreadId(WsGetProcess())))
905 return ERROR_SUCCESS
;
909 return WsSlowPrologTid(Tid
);