有个问题需要请教下大家:一个windows应用程序,必须有管理员权限才能正常运行,但有些用户不能接受,说管理员权限风险太大,他们想在普通用户下也能正常使用,不知各位有没有什么好的方法。
如果把这个程序在管理员权限下注册为系统服务,然后在普通用户下操作不是可不可行?如果可行如何解决程序与用户交互的问题。
欢迎大家发表意见。
如果把这个程序在管理员权限下注册为系统服务,然后在普通用户下操作不是可不可行?如果可行如何解决程序与用户交互的问题。
欢迎大家发表意见。
参看5,6楼hoboo的答复看如何模拟用户登录。
欢迎大家继续发表意见!
再请教下两位:
hoboo: 能不能再具体分析下,讲一下这种方式比较适合什么情况,也方便大家学习,如果有简单的演示程序也可以。 cnzdgs: 这种思路确实不错,还有个问题,应用程序与服务之间进行通信的话,是不是和进程间通信原理类似?还请指教。欢迎大家继续讨论,发表下自己的思路想法。共同学习
应用程序和服务之间可以用共享内存,socket,IPC等
hoboo说的模拟用户登陆,我一个小程序试了一下,貌似是可以的。
但如果用户不知道管理员的用户名或密码的话,能不能得到管理员的权限那?我把hoboo的思路给贴了过来:
1:首先 要LogonUser。通过这些步骤可以实现用户模拟登录
2:DuplicateTokenEx(....);
3:成功则ImpersonateLoggedOnUser( ...);
通过1,2可以模拟其他用户的登录并获得其权限
4:OpenThreadToken( GetCurrentThread(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, TRUE, &hThreadToken )
5:通过LookupPrivilegeValue(...),AdjustTokenPrivileges调整相关权限
6:干你想干的事情
7:通过AdjustTokenPrivileges把权限调回去
8:通过RevertToSelf()恢复原登录