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 _WS_BUFFER
240 } WS_BUFFER
, *PWS_BUFFER
;
243 (WINAPI
*PNSCATALOG_ENUMERATE_PROC
)(
245 IN PNSCATALOG_ENTRY Entry
249 (WINAPI
*PTCATALOG_ENUMERATE_PROC
)(
251 IN PTCATALOG_ENTRY Entry
255 (WINAPI
*PWS_SOCK_POST_ROUTINE
)(
262 extern HINSTANCE WsDllHandle
;
263 extern HANDLE WsSockHeap
;
264 extern PWAH_HANDLE_TABLE WsSockHandleTable
;
265 extern PWSPROCESS CurrentWsProcess
;
266 extern DWORD GlobalTlsIndex
;
267 #define TlsIndex GlobalTlsIndex
268 extern BOOLEAN WsAsyncThreadInitialized
;
269 extern PWS_SOCK_POST_ROUTINE WsSockPostRoutine
;
273 AnsiDupFromUnicode(IN LPCWSTR UnicodeString
);
277 UnicodeDupFromAnsi(IN LPCSTR AnsiString
);
281 WsRasInitializeAutodial(VOID
);
285 WsRasUninitializeAutodial(VOID
);
289 WSAttemptAutodialName(IN CONST LPWSAQUERYSETW lpqsRestrictions
);
293 WSAttemptAutodialAddr(
294 IN CONST SOCKADDR FAR
*Name
,
300 WSNoteSuccessfulHostentLookup(
301 IN CONST CHAR FAR
*Name
,
302 IN CONST ULONG Address
307 MapUnicodeProtocolInfoToAnsi(IN LPWSAPROTOCOL_INFOW UnicodeInfo
,
308 OUT LPWSAPROTOCOL_INFOA AnsiInfo
);
312 MapAnsiQuerySetToUnicode(IN LPWSAQUERYSETA AnsiSet
,
313 IN OUT PSIZE_T SetSize
,
314 OUT LPWSAQUERYSETW UnicodeSet
);
318 MapUnicodeQuerySetToAnsi(OUT LPWSAQUERYSETW UnicodeSet
,
319 IN OUT PSIZE_T SetSize
,
320 IN LPWSAQUERYSETA AnsiSet
);
324 CopyQuerySetW(IN LPWSAQUERYSETW UnicodeSet
,
325 OUT LPWSAQUERYSETW
*UnicodeCopy
);
333 WsSlowPrologTid(OUT LPWSATHREADID
*ThreadId
);
337 WsSockGetSocket(IN SOCKET Handle
);
341 WsApiProlog(OUT PWSPROCESS
*Process
,
342 OUT PWSTHREAD
*Thread
);
346 WsOpenRegistryRoot(VOID
);
350 WsCreateStartupSynchronization(VOID
);
354 WsDestroyStartupSynchronization(VOID
);
358 WsSetupCatalogProtection(IN HKEY CatalogKey
,
359 IN HANDLE CatalogEvent
,
360 OUT LPDWORD UniqueId
);
364 WsCheckCatalogState(IN HANDLE Event
);
372 WsNcDelete(IN PNSCATALOG Catalog
);
376 WsNcInitializeFromRegistry(IN PNSCATALOG Catalog
,
378 IN HANDLE CatalogEvent
);
382 WsNcRefreshFromRegistry(IN PNSCATALOG Catalog
,
383 IN HANDLE CatalogEvent
);
387 WsNcUpdateNamespaceList(IN PNSCATALOG Catalog
,
388 IN PLIST_ENTRY List
);
392 WsNcMatchProtocols(IN DWORD NameSpace
,
393 IN LONG AddressFamily
,
394 IN LPWSAQUERYSETW QuerySet
);
398 WsNcLoadProvider(IN PNSCATALOG Catalog
,
399 IN PNSCATALOG_ENTRY CatalogEntry
);
403 WsNcGetCatalogFromProviderId(IN PNSCATALOG Catalog
,
404 IN LPGUID ProviderId
,
405 OUT PNSCATALOG_ENTRY
*CatalogEntry
);
409 WsNcEnumerateCatalogItems(IN PNSCATALOG Catalog
,
410 IN PNSCATALOG_ENUMERATE_PROC Callback
,
415 WsNcGetServiceClassInfo(IN PNSCATALOG Catalog
,
416 IN OUT LPDWORD BugSize
,
417 IN OUT LPWSASERVICECLASSINFOW lpServiceClassInfo
);
421 WsNcEntryAllocate(VOID
);
425 WsNcEntryInitializeFromRegistry(IN PNSCATALOG_ENTRY CatalogEntry
,
431 WsNcEntryDereference(IN PNSCATALOG_ENTRY CatalogEntry
);
435 WsNcEntrySetProvider(IN PNSCATALOG_ENTRY Entry
,
436 IN PNS_PROVIDER Provider
);
442 IN PNS_PROVIDER Provider
451 WsNqBeginEnumerationProc(
453 PNSCATALOG_ENTRY CatalogEntry
458 WsNqDelete(IN PNSQUERY NsQuery
);
462 WsNqInitialize(IN PNSQUERY NsQuery
);
466 WsNqLookupServiceBegin(
468 IN LPWSAQUERYSETW QuerySet
,
469 IN DWORD ControlFlags
,
470 IN PNSCATALOG Catalog
475 WsNqLookupServiceEnd(IN PNSQUERY NsQuery
);
479 WsNqLookupServiceNext(
483 OUT LPWSAQUERYSETW QuerySet
490 IN PNSQUERY_PROVIDER Provider
495 WsNqDereference(IN PNSQUERY Query
);
499 WsNqValidateAndReference(IN PNSQUERY Query
);
503 WsNqPreviousProvider(IN PNSQUERY Query
,
504 IN PNSQUERY_PROVIDER Provider
);
508 WsNqProvLookupServiceNext(
509 IN PNSQUERY_PROVIDER QueryProvider
,
512 LPWSAQUERYSETW QuerySet
517 WsNqProvLookupServiceEnd(IN PNSQUERY_PROVIDER QueryProvider
);
522 IN PNSQUERY_PROVIDER QueryProvider
,
523 IN PNS_PROVIDER Provider
528 WsNqProvAllocate(VOID
);
532 WsNqProvDelete(IN PNSQUERY_PROVIDER QueryProvider
);
536 WsNqProvLookupServiceBegin(
537 IN PNSQUERY_PROVIDER QueryProvider
,
538 IN LPWSAQUERYSETW QuerySet
,
539 IN LPWSASERVICECLASSINFOW ServiceClassInfo
,
545 WsNpDelete(IN PNS_PROVIDER Provider
);
549 WsNpLookupServiceBegin (
550 IN PNS_PROVIDER Provider
,
551 IN LPWSAQUERYSETW Restrictions
,
552 struct _WSAServiceClassInfoW
*,
553 IN DWORD ControlFlags
,
554 OUT PHANDLE LookupHandle
559 WsNpNSPCleanup(IN PNS_PROVIDER Provider
);
563 WsNpLookupServiceEnd(
564 IN PNS_PROVIDER Provider
,
565 IN HANDLE LookupHandle
571 IN PNS_PROVIDER Provider
,
573 IN LPGUID ProviderGuid
582 WsNpDereference(IN PNS_PROVIDER Provider
);
586 WsNpLookupServiceNext(
587 IN PNS_PROVIDER Provider
,
588 IN HANDLE LookupHandle
,
589 IN DWORD ControlFlags
,
590 OUT PDWORD BufferLength
,
591 OUT LPWSAQUERYSETW Results
596 WsTpDelete(IN PTPROVIDER Provider
);
601 IN PTPROVIDER Provider
,
612 IN PTPROVIDER Provider
,
614 LPWSAPROTOCOL_INFOW ProtocolInfo
619 WsTpDereference(IN PTPROVIDER Provider
);
623 WsThreadDelete(IN PWSTHREAD Thread
);
627 WsThreadDestroyCurrentThread(VOID
);
632 IN PWSPROCESS Process
,
638 WsThreadGetCurrentThread(
639 IN PWSPROCESS Process
,
645 WsThreadGetThreadId(IN PWSPROCESS Process
);
649 WsThreadStartup(VOID
);
653 WsThreadCleanup(VOID
);
657 WsThreadCancelBlockingCall(IN PWSTHREAD Thread
);
661 WsThreadUnhookBlockingHook(IN PWSTHREAD Thread
);
665 WsThreadSetBlockingHook(IN PWSTHREAD Thread
,
666 IN FARPROC BlockingHook
);
671 WsThreadBlobToHostent(IN PWSTHREAD Thread
,
676 WsThreadBlobToServent(IN PWSTHREAD Thread
,
681 WsThreadGetProtoBuffer(IN PWSTHREAD Thread
);
685 WsThreadAllocate(VOID
);
689 WsThreadDefaultBlockingHook(VOID
);
695 IN PWSPROCESS Process
700 WsTcFindIfsProviderForSocket(IN PTCATALOG TCatalog
, SOCKET Socket
);
704 WsTcEntryInitializeFromRegistry(IN PTCATALOG_ENTRY CatalogEntry
, IN HKEY
, unsigned long);
708 WsTcGetEntryFromAf(IN PTCATALOG TCatalog
, IN INT AddressFamily
, IN PTCATALOG_ENTRY
*CatalogEntry
);
712 WsTcEntryAllocate(VOID
);
716 WsTcEntrySetProvider(IN PTCATALOG_ENTRY CatalogEntry
, IN PTPROVIDER Provider
);
720 WsTcRefreshFromRegistry(IN PTCATALOG TCatalog
, PVOID
);
724 WsTcOpen(IN PTCATALOG TCatalog
, IN HKEY
);
728 WsTcFindProvider(IN PTCATALOG TCatalog
, IN LPGUID ProviderId
);
732 WsTcEnumerateCatalogItems(IN PTCATALOG Catalog
,
733 IN PTCATALOG_ENUMERATE_PROC Callback
,
738 WsTcEntryDereference(IN PTCATALOG_ENTRY CatalogEntry
);
746 WsTcDelete(IN PTCATALOG Catalog
);
750 WsTcGetEntryFromTriplet(IN PTCATALOG TCatalog
, IN INT AddressFamily
, IN INT SocketType
, IN INT Protocol
, IN DWORD StartId
, IN PTCATALOG_ENTRY
*CatalogEntry
);
754 WsTcUpdateProtocolList(IN PTCATALOG TCatalog
, PLIST_ENTRY ProtocolList
);
758 WsTcEntryDelete(IN PTCATALOG_ENTRY CatalogEntry
);
762 WsTcGetEntryFromCatalogEntryId(IN PTCATALOG TCatalog
, IN DWORD CatalogEntryId
, IN PTCATALOG_ENTRY
*CatalogEntry
);
766 WsTcLoadProvider(IN PTCATALOG TCatalog
, IN PTCATALOG_ENTRY CatalogEntry
);
770 WsTcInitializeFromRegistry(IN PTCATALOG TCatalog
, HKEY
, PVOID
);
782 WsSockDeleteSockets(IN LPVOID Context
,
783 IN PWAH_HANDLE Handle
);
787 WsSockDereference(IN PWSSOCKET Socket
);
791 WsSockAllocate(VOID
);
795 WsSockInitialize(IN PWSSOCKET Socket
,
796 IN PTCATALOG_ENTRY CatalogEntry
);
800 WsSockAssociateHandle(IN PWSSOCKET Socket
,
802 IN BOOLEAN IsProvider
);
806 WsSockDisassociateHandle(IN PWSSOCKET Socket
);
810 WsSockAddApiReference(IN SOCKET Handle
);
814 WsProcGetTCatalog(IN PWSPROCESS Process
);
818 WsProcDetachSocket(IN PWSPROCESS Process
,
819 IN PWAH_HANDLE Handle
);
823 WsProcGetAsyncHelper(IN PWSPROCESS Process
,
828 WsProcDelete(IN PWSPROCESS Process
);
836 WsProcGetNsCatalog(IN PWSPROCESS Process
);
840 WsProcSetVersion(IN PWSPROCESS Process
,
841 IN WORD VersionRequested
);
845 WsAsyncQueueRequest(IN PWSASYNCBLOCK AsyncBlock
);
849 WsAsyncCheckAndInitThread(VOID
);
853 WsAsyncCancelRequest(IN HANDLE TaskHandle
);
857 WsAsyncAllocateBlock(IN SIZE_T ExtraLength
);
861 WsAsyncTerminateThread(VOID
);
865 WsAsyncGlobalTerminate(VOID
);
869 WsAsyncGlobalInitialize(VOID
);
875 return CurrentWsProcess
;
882 /* Try to see if we're initialized. If not, do the full prolog */
883 return WsGetProcess() ? ERROR_SUCCESS
: WsSlowProlog();
888 WsQuickPrologTid(LPWSATHREADID
*Tid
)
890 /* Try to see if we're initialized. If not, do the full prolog */
891 if ((WsGetProcess()) && (*Tid
= WsThreadGetThreadId(WsGetProcess())))
893 return ERROR_SUCCESS
;
897 return WsSlowPrologTid(Tid
);