reactos操作系统实现(156)
在USER32.DLL里也不例外,它的入口函数也是DllMain,当每个应用程序启动时就会调用本函数进行实始化。具体实现代码如下: #001 INT WINAPI #002 DllMain( #003 IN PVOID hInstanceDll, #004 IN ULONG dwReason, #005 IN PVOID reserved) #006 { #007 switch (dwReason) #008 {
当进程创建时,就会调用下面的代码进行初始化,其中包括GDI32的初始化。 #009 case DLL_PROCESS_ATTACH:
保存当前DLL的句柄。 #010 User32Instance = hInstanceDll;
设置当前DLL的句柄到当前线程结构里,并注册系统缺省的窗口类到系统里。 #011 if (!NtUserRegisterUserModule(hInstanceDll) || #012 !RegisterSystemControls()) #013 { #014 return FALSE; #015 } #016
在这里进行初始化,当然也包括初始化GDI32.DLL。 #017 if (!Init()) #018 return FALSE;
初始化当前用户结构保存到用户索引的空间里。 #019 if (!InitThread()) #020 { #021 Cleanup(); #022 return FALSE; #023 } #024
初始化消息查看。 #025 /* Initialize message spying */ #026 if (!SPY_Init()) return FALSE; #027 #028 break; #029
当创建线程时调用这段代码,主要进行线程初始化。 #030 case DLL_THREAD_ATTACH: #031 if (!InitThread()) #032 return FALSE; #033 break; #034
当删除线程时调用这段代码,主要清空线程占用空间。 #035 case DLL_THREAD_DETACH: #036 CleanupThread(); #037 break; #038
当进程退出时调用这里的代码。 #039 case DLL_PROCESS_DETACH:
释放加载的hImmInstance动态连接库。 #040 if (hImmInstance) FreeLibrary(hImmInstance);
清空主线程的占用空间。 #041 CleanupThread(); #042 Cleanup(); #043 break; #044 } #045 #046 return TRUE; #047} (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |