注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

偶爱自由的博客

Freedom Is Never Free

 
 
 

日志

 
 

由CreateProcess和CreateProcessWithLogonW生成的进程的一个重要区别  

2009-01-15 11:11:46|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
由CreateProcess和CreateProcessWithLogonW生成的进程的一个重要区别

这个区别在MS的文档中被称为User Interface Privilege Isolation (UIPI),在某些特殊情况下至关重要。

那就是,由CreateProcess生成的进程算是当前登录用户的,其所有的消息队列都可以被当前窗口下运行的所有进程访问,例如可以用 SetWindowsHookEx()钩子挂住消息队列进行各种操作。而由CreateProcessWithLogonW生成的进程,虽然表面上看好像 和由CreateProcess创建的进程及其相似,然而其消息循环却属于另一个用户,因此也无法用SetWindowsHookEx()去钩,即使用全 局钩子也钩不到回应。

同时,也不能用SendMessage()等函数向这类进程发消息。相关内容可参见:http://msdn.microsoft.com/en-us/library/ms644950.aspx。

从Vista开始,Windows服务(Services)也要分割开来了。如果以前用消息循环在服务之间传递信息的话,现在得换别的办法,例如用命名管道(Named Pipe)了。相关内容可参见:http://msdn2.microsoft.com/en-us/library/bb756986.aspx。

原因有了,怎么解决我的问题呢?现在考虑的方法是写个Console程序,由主程序通过CreateProcessWithLogonW()来调用这个 Console程序,然后这个Console程序再用CreateProcess()调用需要调用的程序,然后用SetWindowsHookEx()来 截获相关的输入/输出并处理之。很麻烦,希望管用。
  评论这张
 
阅读(345)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017