微软做这个session隔离的原因我就不追查了,反正让人有蛋蛋的忧伤。
在vista以前的系统,后台服务和当前用户进程都运行在同一个session中(本地系统登录时的第一个session中),只有从远端登录的时候会建立新的session。
在vista以后的系统,系统启动后,后台服务运行在session0中,第一个登录的用户运行在session1当中,后续登录的有session1...sessionn等。session之间当然是有隔离措施的,是什么样的机制不去深究;目前需要突破的是,在不同的session程序之间不能按旧的方式进行通信,具体表现在:
1. 不同session之间不能通过窗口互发消息;
2. 一个session中不能直接使用另一个session的显示资源,比如不能直接在session0中向session1中弹出窗口;
3. 一个session中不能直接使用另一个session的显示资源,不能读写session1中的文件;
4. 不同session之间不能直接共享内核对象的访问权;
这是实际中会遇到的问题,下面一一解答;
1. 对于session中不能互发消息,这没什么好说的,不能就是不能,在vista后在不同session中不要想着发窗口消息通信就对了;
2. 对于简单的反馈消息窗口可以使用WTSSendMessage函数来向指定的session发送一个消息要求显示窗口,而session是哪个可以用过