DllEntryPoint
The DllEntryPoint
function is an optional method of entry into a dynamic-link library (DLL). If
the function is used, it is called by the system when processes and threads are
initialized and terminated, or upon calls to the LoadLibrary
BOOL WINAPI DllEntryPoint(
HINSTANCE hinstDLL, |
// handle to DLL
module |
DWORD fdwReason, |
// reason for
calling function |
LPVOID lpvReserved |
// reserved |
); |
|
Parameters
hinstDLL
A handle to
the DLL. The value is the base address of the DLL. The HINSTANCE of a DLL is
the same as the HMODULE of the DLL, so hinstDLL can be used in
subsequent calls to the GetModuleFileName
fdwReason
Specifies a
flag indicating why the DLL entry-point function is being called. This
parameter can be one of the following values:
Value |
Meaning |
DLL_PROCESS_ATTACH |
|
|
Indicates
that the DLL is attaching to the address space of the current process as a
result of the process starting up or as a result of a call to LoadLibrary.
DLLs can use this opportunity to initialize any instance data or to use the TlsAlloc |
|
During
initial process startup or after a call to LoadLibrary, the operating
system scans the list of loaded DLLs for the process. For each DLL that has
not already been called with the DLL_PROCESS_ATTACH value, the system calls
the DLL s entry-point function. This call is made in the context of the
thread that caused the process address space to change, such as the primary
thread of the process or the thread that called LoadLibrary. |
DLL_THREAD_ATTACH |
|
|
Indicates that
the current process is creating a new thread. When this occurs, the system
calls the entry-point function of all DLLs currently attached to the process.
The call is made in the context of the new thread. DLLs can use this
opportunity to initialize a TLS slot for the thread. A thread calling the DLL
entry-point function with the DLL_PROCESS_ATTACH value does not call the DLL
entry-point function with the DLL_THREAD_ATTACH value. |
|
Note that a
DLL s entry-point function is called with this value only by threads created
after the DLL is attached to the process. When a DLL is attached by LoadLibrary |
DLL_THREAD_DETACH |
|
|
Indicates
that a thread is exiting cleanly. If the DLL has stored a pointer to
allocated memory in a TLS slot, it uses this opportunity to free the memory.
The operating system calls the entry-point function of all currently loaded
DLLs with this value. The call is made in the context of the exiting thread.
There are cases in which the entry-point function is called for a terminating
thread even if the DLL never attached to the thread for example, the entry-point function was never
called with the DLL_THREAD_ATTACH value in the context of the thread in either
of these two situations: The thread
was the initial thread in the process, so the system called the entry-point
function with the DLL_PROCESS_ATTACH value. The thread
was already running when a call to the LoadLibrary function was made,
so the system never called the entry-point function for it. |
DLL_PROCESS_DETACH |
|
|
Indicates
that the DLL is detaching from the address space of the calling process as a
result of either a clean process exit or of a call to FreeLibrary |
lpvReserved
Specifies
further aspects of DLL initialization and cleanup.
If fdwReason
is DLL_PROCESS_ATTACH, lpvReserved is NULL for dynamic loads and
non-NULL for static loads.
If fdwReason
is DLL_PROCESS_DETACH, lpvReserved is NULL if DllEntryPoint has
been called by using FreeLibrary and non-NULL if DllEntryPoint
has been called during process termination.
Return Values
When the
system calls the DllEntryPoint function with the DLL_PROCESS_ATTACH
value, the function returns TRUE if it succeeds or FALSE if initialization
fails. If the return value is FALSE when DllEntryPoint is called because
the process uses the LoadLibrary function, LoadLibrary returns
NULL. If the return value is FALSE when DllEntryPoint is called during
process initialization, the process terminates with an error. To get extended
error information, call GetLastError
When the
system calls the DllEntryPoint function with any value other than
DLL_PROCESS_ATTACH, the return value is ignored.
See Also