现在我想通过SYSTEM权限的进程启动一个新的进程,这个新的进程可能运行在不同的用户权限下,比如可能是User用户,也可能Guest用户,或者是Administrator用户。这个新的进程在根据不同用户权限访问不同信息,比如文件、注册表项等,同时这个新进程还能访问一些具有Administrator权限的函数。我本来想通过ZwCreateToken创建一个用户令牌,使这个令牌所在的组为Administrators组,然后同过CreateProcessAsUser函数就可以创建一个运行在相应的用户下,同时具有Administrator权限的进程,可是使用ZwCreateToken有限制,同时创建的进程功能有限制,不能达到要求。但是,通过LogonUser创建的令牌就没有这些限制,但是它不能设置用户所在的组。对于这些,我参考了Zhefu Zhang的RunUser的RunAsEx程序,有兴趣可以看一看!
解决方案 »
- Com应用程序QueryInterface()函数出现问题,
- Online waiting::我的设计太模糊,请指教
- 简单问题,大侠看看!分
- SDK如何实现文本框中按Ctrl+A全选所有文字...看了,好多源码都没实现这个功能.!
- 如何获得打印机所支持的纸张尺寸范围?
- 救救我啊各位,我的这个函数修改纪录,却总是更新失败!!
- vga是什莫驱动 还是什莫别的
- 请问winxp下的编程是否和2000下的一样,有什么注意的地方吗,有什么新特性?
- 实现绘图遇到的问题:怎样保存已绘制的图形?分不够了,不好意思
- 编写计算机通讯程序 需要哪些基础知识?
- 底层键盘钩子屏蔽win健问题~~急,高手帮忙看看,谢谢先,可以把我的分数全部送出,只有300分,呵呵
- 接着问:连接问题
AdjustTokenPrivileges()不知道是否有用,感觉楼主的需求不够明确。
对于“seansoe(我想我是海) ”说得方法是不可用的,因为那个使用在当前线程中。我是想创建一个新的进程,这个新的进程运行的其他用户权限下,但是具有Administrator权限。正常情况下,比如使用User用户权限运行的程序,只具有User用户权限,不能用户Administrator权限。我现在希望运行在User用户权限下的进程依然拥有Administrator权限,当然是通过高级用户权限进程来提升这个低级进程的权限了。
This sample demonstrates how to write a program that uses pipes for transferring data between the client and the server. The client sends a file to the server using pipes. The server then "encodes" the data by adding 1 to every element in the file, and then sends the file back using pipes. The pipe used in this sample program is a in/out pipe.This program also allows the user to compile either for UNICIODE or ANSI.
Starting an Interactive Client Process in C++
In MSDN.
我觉得你的问题应该是:对话框实际上已经显示出来了,只不过被其他窗口盖住了。还有如果你想在两个进程间通讯,比如使用互斥量、共享内存方式等,在创建互斥量对象或者共享内存对象时必须设置访问权限,不然运行在其他用户权限下的进程可能无法访问该对象。
在启动的进程中,先用ImpersonateLoggedOnUser让进程扮演Users用户,需要Administrators权限时,再用RevertToSelf切换回SYSTEM。
比如你使用CreateMutex创建一个互斥量对象,它有三个参数:第一个是安全属性,平时当需要进行同步的两个进程处在同一个用户下时不需要设置,只要给个NULL值即可。可是如果两个进程没有运行在同一个用户下时,比如WinLogon.exe运行在SYSTEM权限,普通程序运行在你当前登录的用户下,这样你Winlogon.exe进程中创建的互斥量对象在普通程序进程中就无法打开这个这个互斥对象,这时就需要设置这个互斥对象的安全属性参数。我一般都设置安全属性参数为EveryOne属性,这样任何进程都可以访问了。
这个我不知道,你自己试一下吧!