当前位置: 首页 > news >正文

各类网站排行网站开发工程师大学

各类网站排行,网站开发工程师大学,百度seo分析工具,有趣的网站游戏以前我一直不理解Windows Session(会话)倒底是一个什么概念#xff0c;总是感觉这个概念很虚#xff0c;现在理解了一点。写下来做一个备忘。简单的说#xff0c;用户登陆到windows系统之后#xff0c;不管该用户是本地登陆的#xff0c;还是远程登陆#xff0c;系统都会…       以前我一直不理解Windows Session(会话)倒底是一个什么概念总是感觉这个概念很虚现在理解了一点。写下来做一个备忘。简单的说用户登陆到windows系统之后不管该用户是本地登陆的还是远程登陆系统都会为这个用户分配一个新的会话ID(SID)。也就是说会话与用户的登录是相关连的没有用户登录就不存在会话。因此会话的含义是指用户登录之后的一种运行的环境。我们先看看书上是怎么说的     会话管理器(\Windows\System32\Smss.exe)是系统中第一个创建的用户态模式进程负责完成执行体和内核的初始化工作的内核模式系统线程在最后阶段创建了实际的Smss进程(这段摘自: 《深入解析Windows操作系统(第4版)》80页)。     Windows系统是支持多会话的因此会话空间(session space)包含了一些针对每个会话的全局信息。所以会话空间是用来管理会话的。那么会话具体包含些什么呢        会话(session)是由进程和其他的系统对象(比如窗口站、桌面和窗口)构成的它们代表了一个用户的工作站登录会话。会话具体是由如下几个部分组成的      1. 每个会话包含一个单独的win32k.sys      2. 专门的换页池区域      3. 私有windows子系统和登陆进程的拷贝      4. 系统空间中被映射的空间,被称为会话空间的区域      (参考: 《深入解析Windows操作系统(第4版)》 414页)         现在我把会话同进程做一个比较发现他们之间有一些相似之处       1. 都提供一个执行的环境       2. 都有一个私有空间         进程是为了内部的执行的线程提供一个空间和环境而会话则是为内部所有的进程提供一个执行的空间和环境。这是我总结的感觉总结的很好便于大家理解会话的概念   X86会话空间的布局如下图(本人手工绘制 参考:《深入解析Windows操作系统(第4版)》 419页) 也就是说默认情况下会话空间的大小是84201648M 在我的机器上做如下的实验 lkd !sessionSessions on machine: 1Valid Sessions: 0Current Session 0 可以看出我的机器上面只有一个会话因为是我的机器只有我在登陆。 调用!sprocess 显示该会话数据结构的地址和该会话中的进程 lkd !sprocessDumping Session 0 _MM_SESSION_SPACE b85dc000  这里就是会话空间的地址_MMSESSION        b85dc15cPROCESS 8a11a268  SessionId: 0  Cid: 028c    Peb: 7ffdf000  ParentCid: 0190    DirBase: 0aa00060  ObjectTable: e1b01120  HandleCount: 346.    Image: csrss.exe PROCESS 8a2d0318  SessionId: 0  Cid: 02a4    Peb: 7ffdf000  ParentCid: 0190    DirBase: 0aa00080  ObjectTable: e18c70b0  HandleCount: 581.    Image: winlogon.exe PROCESS 8a349da0  SessionId: 0  Cid: 02d0    Peb: 7ffda000  ParentCid: 02a4    DirBase: 0aa000a0  ObjectTable: e1e8da78  HandleCount: 266.    Image: services.exe ……. 我现在查看会话的结构 lkd dt nt!_MM_SESSION_SPACE b85dc000   0x000 ReferenceCount   : 0x15   0x004 u                : __unnamed   0x008 SessionId        : 0   0x00c SessionPageDirectoryIndex : 0x18626   0x010 GlobalVirtualAddress : 0xb85dc000 _MM_SESSION_SPACE   0x014 ProcessList      : _LIST_ENTRY [ 0x8a11a31c - 0x89b98c8c ]   0x01c NonPagedPoolBytes : 0   0x020 PagedPoolBytes   : 0   0x024 NonPagedPoolAllocations : 0   0x028 PagedPoolAllocations : 0   0x02c NonPagablePages  : 0x17   0x030 CommittedPages   : 0x5e4   0x038 LastProcessSwappedOutTime : _LARGE_INTEGER 0x0   0x040 PageTables       : 0x8a0bb3e8 _MMPTE   0x044 PagedPoolMutex   : _FAST_MUTEX   0x064 PagedPoolStart   : 0xb9800000    0x068 PagedPoolEnd     : 0xb9bfffff    0x06c PagedPoolBasePde : 0xc0602e60 _MMPTE   0x070 PagedPoolInfo    : _MM_PAGED_POOL_INFO   0x094 Color            : 0xba6   0x098 ProcessOutSwapCount : 5   0x09c ImageList        : _LIST_ENTRY [ 0x8a355ea0 - 0x8a1de1e8 ]   0x0a4 GlobalPteEntry   : 0xc05c2ee0 _MMPTE   0x0a8 CopyOnWriteCount : 0x13   0x0ac SessionPoolAllocationFailures : [4] 0   0x0bc AttachCount      : 0   0x0c0 AttachEvent      : _KEVENT   0x0d0 LastProcess      : (null)    0x0d8 Vm               : _MMSUPPORT   0x118 Wsle             : 0xbcc0003c _MMWSLE   0x11c WsLock           : _ERESOURCE   0x154 WsListEntry      : _LIST_ENTRY [ 0x80561b58 - 0x80561b58 ]   0x15c Session          : _MMSESSION   0x198 Win32KDriverObject : _DRIVER_OBJECT   0x240 WorkingSetLockOwner : (null)    0x244 PagedPool        : _POOL_DESCRIPTOR   0x126c ProcessReferenceToSession : 43   0x1270 LocaleId         : 0x409   来自微软官方的C结构的定义如下 typedef struct _MM_SESSION_SPACE {//// This is a pointer in global system address space, used to make various// fields that can be referenced from any process visible from any process// context. This is for things like mutexes, WSL chains, etc.//struct _MM_SESSION_SPACE *GlobalVirtualAddress;LONG ReferenceCount;union{ULONG LongFlags;MM_SESSION_SPACE_FLAGS Flags;} u;ULONG SessionId;//// This is the list of the processes in this group that have// session space entries.//LIST_ENTRY ProcessList;LARGE_INTEGER LastProcessSwappedOutTime;//// All the page tables for session space use this as their parent.// Note that its not really a page directory - its really a page// table page itself (the one used to map this very structure).//// This provides a reference to something that wont go away and// is relevant regardless of which process within the session is current.//PFN_NUMBER SessionPageDirectoryIndex;//// This is the count of non paged allocations to support this session// space. This includes the session structure page table and data pages,// WSL page table and data pages, session pool page table pages and session// image page table pages. These are all charged against// MmResidentAvailable.//SIZE_T NonPageablePages;//// This is the count of pages in this session that have been charged against// the systemwide commit. This includes all the NonPageablePages plus the// data pages they typically map.//SIZE_T CommittedPages;//// Start of session paged pool virtual space.//PVOID PagedPoolStart;//// Current end of pool virtual space. Can be extended to the// end of the session space.//PVOID PagedPoolEnd;//// PTE pointers for pool.//PMMPTE PagedPoolBasePde;ULONG Color;LONG ResidentProcessCount;ULONG SessionPoolAllocationFailures[4];//// This is the list of system images currently valid in// this session space. This information is in addition// to the module global information in PsLoadedModuleList.//LIST_ENTRY ImageList;LCID LocaleId;//// The count of known attachers and the associated event.//ULONG AttachCount;KEVENT AttachEvent;PEPROCESS LastProcess;//// This is generally decremented in process delete (not clean) so that// the session data page and mapping PTE can finally be freed when this// reaches zero. smss is the only process that decrements it in other// places as smss never exits.//LONG ProcessReferenceToSession;//// This chain is in global system addresses (not session VAs) and can// be walked from any system context, ie: for WSL trimming.//LIST_ENTRY WsListEntry;//// Session lookasides for fast pool allocation/freeing.//GENERAL_LOOKASIDE Lookaside[SESSION_POOL_SMALL_LISTS];//// Support for mapping system views into session space. Each desktop// allocates a 3MB heap and the global system view space is only 48M// total. This would limit us to only 20-30 users - rotating the// system view space with each session removes this limitation.//MMSESSION Session;//// Session space paged pool support.//KGUARDED_MUTEX PagedPoolMutex;MM_PAGED_POOL_INFO PagedPoolInfo;//// Working set information.//MMSUPPORT Vm;PMMWSLE Wsle;PDRIVER_UNLOAD Win32KDriverUnload;//// Pool descriptor for less than 1 page allocations.//POOL_DESCRIPTOR PagedPool;#if (_MI_PAGING_LEVELS 3)//// The page directory that maps session space is saved here so// trimmers can attach.//MMPTE PageDirectory;#else//// The second level page tables that map session space are shared// by all processes in the session.//PMMPTE PageTables;#endif#if defined (_WIN64)//// NT64 has enough virtual address space to support per-session special// pool.//PMMPTE SpecialPoolFirstPte;PMMPTE SpecialPoolLastPte;PMMPTE NextPdeForSpecialPoolExpansion;PMMPTE LastPdeForSpecialPoolExpansion;PFN_NUMBER SpecialPagesInUse; #endifLONG ImageLoadingCount;#if DBGULONG Debug[MM_SESS_COUNTER_MAX];MM_SESSION_MEMORY_COUNTERS Debug2[MM_SESS_MEMORY_COUNTER_MAX]; #endif} MM_SESSION_SPACE, *PMM_SESSION_SPACE; 查看会话空间的内存使用调用!vm 4命令 lkd !vm 4...    Terminal Server Memory Usage By Session:     Session Paged Pool Maximum is 4096K    Session View Space Maximum is 49152K     Session ID 0 b85dc000:    Paged Pool Usage:           0K    Commit Usage:            6032K 现在我们清楚了当用户登陆到系统中之后用户下所有的进程都属于这个会话空间。在每个进程的PEB当中就有SessionID。 typedef struct _PEB {BYTE Reserved1[2];BYTE BeingDebugged;BYTE Reserved2[1];PVOID Reserved3[2];PPEB_LDR_DATA Ldr;PRTL_USER_PROCESS_PARAMETERS ProcessParameters;BYTE Reserved4[104];PVOID Reserved5[52];PPS_POST_PROCESS_INIT_ROUTINE PostProcessInitRoutine;BYTE Reserved6[128];PVOID Reserved7[1];ULONG SessionId; } PEB, *PPEB; 该结构最后一个成员就是SessionId。 那么这里就产生一个问题了同一台机器上面分别属于不同会话空间下的进程之间如何通讯呢微软的MSDN里面的一些API就说的很清楚了。我举一个例子吧。如CreateFileMapping MSDN的描述在  http://msdn.microsoft.com/en-us/library/aa366537(VS.85).aspxlpName 如果使用Global\ or Local\ 作用范围是全局的。  今天先写到这儿了 转载于:https://www.cnblogs.com/russinovich/archive/2011/04/26/2029655.html
http://www.hkea.cn/news/14329285/

相关文章:

  • 学校网站建设注意什么最简短的培训心得
  • 做网站的难点是什么档案网站建设图片
  • 中色十二冶金建设有限公司网站扬中网站建设怎么样
  • 企业网站建设规划的基本原则有哪些电脑做网站主机
  • 个人工作室可以做哪些项目免费的关键词优化工具
  • 微网站开发的比较总结聊城市 网站制作
  • 求一个能用的网站北京手机响应式网站建设设计
  • flash做网站轮播图个人社保缴费比例
  • 租房子网站怎么做wordpress腾讯云搭建网站
  • 360未经证实的网站如何做网络营销方式有哪些各方式的优缺点有哪些
  • 建个企业网站收费拍宣传片比较好的公司
  • 图怪兽logo设计官网seo外包大型公司
  • 电子商务网站建设与管理的重要性专业网站建设是哪家便宜
  • 2017做网站怎么赚钱建网站方案
  • 北京做网站好的网站建设公司如何写网站建设报告
  • wordpress 镜像域名福州seo计费
  • 青岛如何建立企业网站企业郑州网站建设找哪家好
  • ASP网站开发教程实验总结泽州县住房保障和城乡建设局网站
  • 做效果图赚钱的网站深圳龙岗网络公司
  • 房地产 网站 设计制作惠州做网站开发
  • 刷网站关键词排名原理最新国际军事动态
  • 网站报价文档买个网站域名多少钱一年
  • 无锡做网站首选众诺wordpress缓存方案
  • 直接用源码做网站盗版吗网站做竞价经常会被攻击吗
  • 手机版景区网站网页微信二维码付款怎么弄
  • 信用网站建设内容知名的饰品行业网站开发
  • 电商扶贫网站建设陕煤建设集团铜川分公司网站
  • 图书网站建设策划书1万字网站制作的建设大纲ppt
  • 适合前端开发的电脑推荐合肥正规的seo公司
  • 西安网站建设技术外包网站公司网站开发方案