ReactOS
0.4.16-dev-732-g2d1144a
dllmain.c
Go to the documentation of this file.
1
/*
2
* COPYRIGHT: See COPYING in the top level directory
3
* PROJECT: ReactOS WinSock 2 API
4
* FILE: dll/win32/ws2_32/src/dllmain.c
5
* PURPOSE: DLL Entrypoint
6
* PROGRAMMER: Alex Ionescu (alex@relsoft.net)
7
*/
8
9
/*
10
* BUGS:
11
* - GetAddrInfoW is completely IPv4 hacked and has some dirty code.
12
* - LookupNodeByAddr is missing some IPv6 support.
13
*/
14
15
/* INCLUDES ******************************************************************/
16
17
#include <ws2_32.h>
18
19
/* DATA **********************************************************************/
20
21
HANDLE
WsSockHeap
;
22
HINSTANCE
WsDllHandle
;
23
DWORD
GlobalTlsIndex
=
TLS_OUT_OF_INDEXES
;
24
25
/* FUNCTIONS *****************************************************************/
26
27
BOOL
28
APIENTRY
29
DllMain
(
HANDLE
hModule
,
30
DWORD
dwReason
,
31
LPVOID
lpReserved
)
32
{
33
PWSPROCESS
WsProcess;
34
35
/* Main Entrypoint */
36
switch
(
dwReason
)
37
{
38
case
DLL_PROCESS_ATTACH
:
39
/* Save DLL Handle */
40
WsDllHandle
=
hModule
;
41
42
/* Get Global Heap */
43
WsSockHeap
=
GetProcessHeap
();
44
45
/* TLS Allocation */
46
if
(
GlobalTlsIndex
==
TLS_OUT_OF_INDEXES
)
47
{
48
GlobalTlsIndex
=
TlsAlloc
();
49
if
(
GlobalTlsIndex
==
TLS_OUT_OF_INDEXES
)
50
{
51
return
FALSE
;
52
}
53
}
54
55
/* Initialize some critical sections */
56
WsCreateStartupSynchronization
();
57
WsAsyncGlobalInitialize
();
58
WsRasInitializeAutodial
();
59
break
;
60
61
case
DLL_THREAD_ATTACH
:
62
break
;
63
64
case
DLL_THREAD_DETACH
:
65
/* Destroy the attached Winsock Thread */
66
WsThreadDestroyCurrentThread
();
67
break
;
68
69
case
DLL_PROCESS_DETACH
:
70
/* Make sure we were initialized */
71
if
(!
WsDllHandle
)
break
;
72
73
/* Check if this was a FreeLibrary call (ie: not process cleanup) */
74
if
(
lpReserved
)
75
{
76
/* Destroy the thread which is exiting */
77
WsThreadDestroyCurrentThread
();
78
79
/* Check if we have a process and destroy it */
80
WsProcess =
WsGetProcess
();
81
if
(WsProcess)
WsProcDelete
(WsProcess);
82
83
/* Cleanup the Thread and Socket managers */
84
WsThreadCleanup
();
85
WsSockCleanup
();
86
87
/* Cleanup critical sections */
88
WsDestroyStartupSynchronization
();
89
WsAsyncGlobalTerminate
();
90
91
/* Free the TLS Index */
92
TlsFree
(
GlobalTlsIndex
);
93
}
94
95
/* Cleanup RAS auto-dial helper */
96
WsRasUninitializeAutodial
();
97
98
/* Clear our handle */
99
WsDllHandle
=
NULL
;
100
break
;
101
}
102
103
/* Return to OS */
104
return
TRUE
;
105
}
106
107
/*
108
* @implemented
109
*/
110
INT
111
WSAAPI
112
WSAGetLastError
(
VOID
)
113
{
114
/* Let the Windows Function do the work */
115
return
GetLastError
();
116
}
117
118
/*
119
* @implemented
120
*/
121
VOID
122
WSAAPI
123
WSASetLastError
(
IN
INT
iError)
124
{
125
/* Let the Windows Function do the work */
126
SetLastError
(iError);
127
}
lpReserved
static DWORD const LPVOID const lpReserved
Definition:
appcrt_dllmain.cpp:58
dwReason
DWORD dwReason
Definition:
misc.cpp:135
NULL
#define NULL
Definition:
types.h:112
TRUE
#define TRUE
Definition:
types.h:120
FALSE
#define FALSE
Definition:
types.h:117
DllMain
BOOL WINAPI DllMain(HINSTANCE hDLLInst, DWORD fdwReason, LPVOID lpvReserved)
Definition:
dllmain.c:52
APIENTRY
#define APIENTRY
Definition:
api.h:79
hModule
HMODULE hModule
Definition:
animate.c:44
GetProcessHeap
#define GetProcessHeap()
Definition:
compat.h:736
DLL_THREAD_DETACH
#define DLL_THREAD_DETACH
Definition:
compat.h:133
DLL_PROCESS_ATTACH
#define DLL_PROCESS_ATTACH
Definition:
compat.h:131
DLL_PROCESS_DETACH
#define DLL_PROCESS_DETACH
Definition:
compat.h:130
SetLastError
#define SetLastError(x)
Definition:
compat.h:752
DLL_THREAD_ATTACH
#define DLL_THREAD_ATTACH
Definition:
compat.h:132
TlsAlloc
DWORD WINAPI TlsAlloc(VOID)
Definition:
thread.c:1100
TlsFree
BOOL WINAPI TlsFree(IN DWORD Index)
Definition:
thread.c:1166
GlobalTlsIndex
DWORD GlobalTlsIndex
Definition:
dllmain.c:23
WSASetLastError
VOID WSAAPI WSASetLastError(IN INT iError)
Definition:
dllmain.c:123
WsDllHandle
HINSTANCE WsDllHandle
Definition:
dllmain.c:22
WsSockHeap
HANDLE WsSockHeap
Definition:
dllmain.c:21
BOOL
unsigned int BOOL
Definition:
ntddk_ex.h:94
DWORD
unsigned long DWORD
Definition:
ntddk_ex.h:95
void
Definition:
nsiface.idl:2307
_WSPROCESS
Definition:
ws2_32p.h:161
INT
int32_t INT
Definition:
typedefs.h:58
IN
#define IN
Definition:
typedefs.h:39
GetLastError
DWORD WINAPI GetLastError(void)
Definition:
except.c:1042
TLS_OUT_OF_INDEXES
#define TLS_OUT_OF_INDEXES
Definition:
winbase.h:575
WSAAPI
#define WSAAPI
Definition:
winsock2.h:605
WSAGetLastError
int PASCAL FAR WSAGetLastError(void)
Definition:
dllmain.c:112
WsSockCleanup
VOID WSAAPI WsSockCleanup(VOID)
Definition:
dsocket.c:36
WsRasInitializeAutodial
VOID WSAAPI WsRasInitializeAutodial(VOID)
Definition:
rasdial.c:47
WsGetProcess
FORCEINLINE PWSPROCESS WsGetProcess(VOID)
Definition:
ws2_32p.h:885
WsThreadCleanup
VOID WSAAPI WsThreadCleanup(VOID)
Definition:
dthread.c:170
WsProcDelete
VOID WSAAPI WsProcDelete(IN PWSPROCESS Process)
Definition:
dprocess.c:247
WsDestroyStartupSynchronization
VOID WSAAPI WsDestroyStartupSynchronization(VOID)
Definition:
startup.c:36
WsCreateStartupSynchronization
VOID WSAAPI WsCreateStartupSynchronization(VOID)
Definition:
startup.c:28
WsRasUninitializeAutodial
VOID WSAAPI WsRasUninitializeAutodial(VOID)
Definition:
rasdial.c:55
WsThreadDestroyCurrentThread
VOID WSAAPI WsThreadDestroyCurrentThread(VOID)
Definition:
dthread.c:225
WsAsyncGlobalTerminate
VOID WSAAPI WsAsyncGlobalTerminate(VOID)
Definition:
async.c:39
WsAsyncGlobalInitialize
VOID WSAAPI WsAsyncGlobalInitialize(VOID)
Definition:
async.c:31
dll
win32
ws2_32
src
dllmain.c
Generated on Sat Feb 8 2025 06:15:30 for ReactOS by
1.9.6