Changeset 9704 for trunk/src


Ignore:
Timestamp:
Jan 22, 2003, 1:56:08 PM (23 years ago)
Author:
sandervl
Message:

Dll load/unload changes

Location:
trunk/src/NTDLL
Files:
2 added
1 deleted
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/NTDLL/initterm.cpp

    r9684 r9704  
    3535#include <misc.h>       /*PLF Wed  98-03-18 23:18:15*/
    3636#include <initdll.h>
     37#include <exitlist.h>
    3738
    3839extern "C" {
    39  //Win32 resource table (produced by wrc)
    40  extern DWORD _Resource_PEResTab;
    4140 void __ctordtorInit (void);
    4241 void __ctordtorTerm (void);
     42 int _CRT_init (void);
     43 void _CRT_term (void);
    4344}
    44 static HMODULE dllHandle = 0;
    4545
    46 BOOL WINAPI NTDLL_LibMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved);
    4746
    48 //******************************************************************************
    49 //******************************************************************************
    50 BOOL WIN32API LibMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID fImpLoad)
    51 {
    52    switch (fdwReason)
    53    {
    54    case DLL_PROCESS_ATTACH:
    55    case DLL_THREAD_ATTACH:
    56    case DLL_THREAD_DETACH:
    57         return NTDLL_LibMain(hinstDLL, fdwReason, fImpLoad);
     47static void APIENTRY cleanup(ULONG reason);
    5848
    59    case DLL_PROCESS_DETACH:
    60         NTDLL_LibMain(hinstDLL, fdwReason, fImpLoad);
    61         __ctordtorTerm();
    62         return TRUE;
    63    }
    64    return FALSE;
    65 }
    6649/****************************************************************************/
    6750/* _DLL_InitTerm is the function that gets called by the operating system   */
     
    8669   switch (ulFlag) {
    8770      case 0 :
    88          __ctordtorInit();
     71         if (_CRT_init () != 0)
     72           return 0;
     73         __ctordtorInit ();
    8974
    90          CheckVersionFromHMOD(PE2LX_VERSION, hModule); /*PLF Wed  98-03-18 05:28:48*/
     75         rc = DosExitList(EXITLIST_NONCRITDLL|EXLST_ADD, cleanup);
     76         if (rc)
     77            return 0UL;
    9178
    92          dllHandle = RegisterLxDll(hModule, (WIN32DLLENTRY)LibMain, (PVOID)&_Resource_PEResTab);
    93          if(dllHandle == 0)
    94                 return 0UL;
     79         return inittermNTDLL(hModule, ulFlag);
    9580
    96          break;
    9781      case 1 :
    98          if(dllHandle) {
    99                 UnregisterLxDll(dllHandle);
    100          }
    101          break;
     82         return inittermNTDLL(hModule, ulFlag);
    10283
    10384      default  :
     
    11293//******************************************************************************
    11394//******************************************************************************
     95static void APIENTRY cleanup(ULONG ulReason)
     96{
     97    dprintf(("NTDLL exit"));
     98    __ctordtorTerm();
     99    _CRT_term ();
     100
     101    DosExitList(EXLST_EXIT, cleanup);
     102    return ;
     103}
     104//******************************************************************************
     105//******************************************************************************
  • trunk/src/NTDLL/makefile

    r9684 r9704  
    1 # $Id: makefile,v 1.33 2003-01-16 15:22:36 sandervl Exp $
     1# $Id: makefile,v 1.34 2003-01-22 12:56:07 sandervl Exp $
    22
    33#
     
    3333$(OBJDIR)\sync.obj \
    3434$(OBJDIR)\initterm.obj \
     35$(OBJDIR)\initntdll.obj \
    3536$(OBJDIR)\time.obj \
    3637$(OBJDIR)\unknown.obj \
Note: See TracChangeset for help on using the changeset viewer.