阅读:2266回复:4
能不能讨论一下Session Manager?
据说ntldr调用smss,然后smss调用csrss然后winlogon然后完成初始化的,对吗?
可是ntldr载入smss后smss是从哪里开始执行的呢? smss.exe中是用哪一个函数来调用csrss的呢? 而且smss中有一个函数叫SmpParseCommandLine(x,x,x,x,x);难道smss可以接受命令行参数? |
|
最新喜欢:vxer_m...
|
沙发#
发布于:2005-03-02 10:30
smss的入口点应该是NtProcessStartupForGS(x),对不对?或者是_main?
[编辑 - 3/2/05 by seahawk] |
|
|
板凳#
发布于:2005-03-02 11:55
据说ntldr调用smss,然后smss调用csrss然后winlogon然后完成初始化的,对吗? 我觉得ntldr不会调用smss,ntoskrnl.exe才是核心,只有有了它,系统才能展开,加载驱动,创建各个子系统,加载各种文件的Image。ntoskrnl.exe才会启动smss |
|
|
地板#
发布于:2005-03-02 14:29
[quote]据说ntldr调用smss,然后smss调用csrss然后winlogon然后完成初始化的,对吗? 我觉得ntldr不会调用smss,ntoskrnl.exe才是核心,只有有了它,系统才能展开,加载驱动,创建各个子系统,加载各种文件的Image。ntoskrnl.exe才会启动smss [/quote] 说的是!应该是ntoskrnl调用smss.exe,smss大量使用ntXXX函数。 根据某牛人的总结,smss应该是按照如下顺序工作: 1、创建 LPC 端口对象( \\SmApiPort )和两个等待客户请求的线程。客户请求包括装载一个新的子系统或者创建一个会话等。 2、为 MS-DOS 设备名,如 COM1 和 LPT1 定义符号链接。 3、如果安装了终端服务(Terminal Services),在对象管理器的名字空间创建 \\Sessions 目录。 4、运行 HKLM\\SYSTEM\\CurrentControlSet\\ Control\\Session Manager\\BootExecute 定义的程序,典型的是运行 Autochk (Chkdsk在引导其间的版本)。 5、按照 HKLM\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\PendingFileRenameOperations 的指令,进行延迟文件改名操作。挂起文件删除在 PendingFileRenameOperations2 。 6、打开已知的 DLL 。 7、创建另外的分页文件。 8、初始化注册表。配置管理器刷新注册表, 为HKLM\\SAM, HKLM\\SECURITY, 和 HKLM\\SOFTWARE 关键字装载注册文件。HKLM\\SYSTEM\\ CurrentControlSet\\Control\\hivelist 在硬盘上搜索注册表文件,配置管理器在 \\Winnt\\System32\\Config 寻找。 9、创建系统环境变量。 10、装载Win32子系统内核模式部分(Win32k.sys)。Smss 在 HKLM\\SYSTEM\\CurrentControlSet\\Control\\Session Manager 下寻找 Win32k.sys 和其它要装载组件的路径,确定它们的位置。Win32k.sys 中的初始化代码使用视频驱动程序,屏幕的分辨率转换到缺省概貌文件定义的值。因此,屏幕从引导视频驱动程序使用的VGA模式转到系统选择的缺省的分辨率。 11、启动子系统进程,包括 Csrss 。 12、启动登陆进程 (Winlogon) 。 13、为调试事件信息创建LPC口(DbgSsApiPort 和 DbgUiApiPort),并创建监听这些口的线程。 可是这些工作具体在smss中是由那些函数实现的呢?能不能探讨一下? btw:windows internal 4th胶印什么时候能到呀?里面不知道有没有相关的讲解? |
|
|
地下室#
发布于:2005-03-02 15:44
znsoft说下周发货
|
|
|