zoukankan      html  css  js  c++  java
  • WINDOWS session管理初识1

    PS:下面测试环境均为win 2003

    正常启动后,smss.exe这个session管理组件会创建2个进程,csrss.exe(子系统)和winlogon.exe,这2个进程属于session 0

    但smss.exe却不属于任何一个session,这是怎么回事呢?一般我们启动程序后,会看见子进程和父进程属于同一个session

    跟踪后,发现原来smss.exe在启动上述2个进程之前(这个过程是发生在smss!smpLoaddataFromRegistry()函数中),为了说明方便,下面用伪代码演示

    smss!smpLoaddataFromRegistry()

    {

    }

    loadsubsystem()

    {

    1.会调用NtSetSystemInformation创建session  ,sessionID=g_SessionID++;(其实不是简单的++,好像还是用一个位置来计算)

    2.此时smss.exe属于sessionID ,接启动csrss.exe和winlogon,这样这2个进程就属于sessionID了

    3.smss.exe调用NtSetSystemInformation的DetachSession功能号,脱离Session,所以我们一般看到smss.exe不属于任何session,

    windbg的显示就是根据Eprocess结构的Session字段是否有指向Session来判断进程是否属于哪个session的

    }

    上面的loadsubsystem()并不只是只会在smss.exe启动的时候才调用一次。在用户远程桌面登陆的时候也会再次调用,所以远程桌面的用户是属于另一个session

    PS:由于smss.exe不属于任何一个session,所以在它的进程上下文时有时候访问不了win32k.sys的数据,因为有可能被page out了,我猜正是而由于smss.exe不属于任意session的原因

    并且trap0e缺页中断里面会判断session。这个猜想后面有空再证实。

  • 相关阅读:
    Luogu P4727 [HNOI2009]图的同构记数
    ARC 101 E
    JSOI2019 Round2 游记
    JSOI2019 Round1(十二省联考)游记
    Technocup 2019
    Codeforces Round #533 (Div. 2)比赛总结
    学习链接
    2018.12.29-2018.1.9安师大附中集训
    关于考试
    NOIP2018提高组 游记
  • 原文地址:https://www.cnblogs.com/kkindof/p/2571538.html
Copyright © 2011-2022 走看看