reactos操作系统实现(157)

上面介绍了USER32的入口函数,在那里调用Init函数进行初始化,这里就来分析这个函数的代码,看看它怎么样进行初始化,如下:

#001  BOOL

#002  Init(VOID)

#003  {

 

这里设置内核的回调函数。

#004     /* Set up the kernel callbacks. */

#005     NtCurrentPeb()->KernelCallbackTable[USER32_CALLBACK_WINDOWPROC] =

#006        (PVOID)User32CallWindowProcFromKernel;

#007     NtCurrentPeb()->KernelCallbackTable[USER32_CALLBACK_SENDASYNCPROC] =

#008        (PVOID)User32CallSendAsyncProcForKernel;

#009     NtCurrentPeb()->KernelCallbackTable[USER32_CALLBACK_LOADSYSMENUTEMPLATE] =

#010        (PVOID)User32LoadSysMenuTemplateForKernel;

#011     NtCurrentPeb()->KernelCallbackTable[USER32_CALLBACK_LOADDEFAULTCURSORS] =

#012        (PVOID)User32SetupDefaultCursors;

#013     NtCurrentPeb()->KernelCallbackTable[USER32_CALLBACK_HOOKPROC] =

#014        (PVOID)User32CallHookProcFromKernel;

#015     NtCurrentPeb()->KernelCallbackTable[USER32_CALLBACK_EVENTPROC] =

#016        (PVOID)User32CallEventProcFromKernel;

#017 

 

获取当前进程,并设置进程信息,然后返回当前进程的信息。

#018     g_pi = GetW32ProcessInfo();

 

共享用户进程信息给内核使用。

#019     g_kpi = SharedPtrToKernel(g_pi);

#020     g_psi = SharedPtrToUser(g_pi->psi);

#021     gHandleTable = SharedPtrToUser(g_pi->UserHandleTable);

#022     gHandleEntries = SharedPtrToUser(gHandleTable->handles);

#023 

 

分配用户线程相关的数据空间。

#024     /* Allocate an index for user32 thread local data. */

#025     User32TlsIndex = TlsAlloc();

#026     if (User32TlsIndex != TLS_OUT_OF_INDEXES)

#027     {

 

初始化消息使用临界区。

#028        if (MessageInit())

#029        {

 

初始化每个应用程序的系统菜单。

#030           if (MenuInit())

#031           {

#032              InitializeCriticalSection(&U32AccelCacheLock);

 

初始化GDI32图形库。

#033              GdiDllInitialize(NULL, DLL_PROCESS_ATTACH, NULL);

#034              InitStockObjects();

 

加载应用程序所有要加载的动态连接库。

#035              LoadAppInitDlls();

#036 

#037              return TRUE;

#038           }

 

清空消息的临界区。

#039           MessageCleanup();

#040        }

 

删除本线程使用的空间。

#041        TlsFree(User32TlsIndex);

#042     }

#043 

#044     return FALSE;

#045  }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

caimouse

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值