CreateProcessWithLogon 与 CreateProcessAsUser讨论,有没有哪个大师可以解决,高分相送
用CreateProcessWithLogon可以很容易实现RunAs功能,但问题是--如果用这种方式实现的低权限用户以其它用户身份运行如OFFICE97的快捷工具栏类的程序,桌面区域不会减小(直接运行会桌面区域会减去工具栏),导致这类工具栏遮住了别的窗口。似乎C:\WINDOWS\SYSTEM\RunAs.exe和资源管理器中的右键菜中“运行方式”也是这样实现的,用这两种方式运行的OFFICE97快捷工具栏也不会减小桌面区域。如果将lpEnvironment,lpUserProfileDirectory(MSDN里的第9个参数,参数声明里是lpCurrentDirectory,实际应为lpUserProfileDirectory,所给出的示例中也是这样用的)置为NULL,桌面区域也会减小,但这样将会有一个更大的问题--被运行的程序如果有对如注册HKEY_CURRENT_USER表等与用户环境相关的操作的话,目标程序将不能正确运行。
至与CreateProcessAsUser,MSDN中的示例通过这些SetProcessWindowStation、AddAceToWindowStation、AddAceToDesktop似乎可以解决桌面区域的问题,不过,这个示例是为运行在SYSTEM权限如SERVICE这一类的环境写的示例,哪怕就以Administrator运行这个示例也是GetLastError()=1314--客户端没有有所需的特权,就更不用说更低权限的用户了。
怎样才能实现完美的RunAs,这个问题能解决吗?我用于生产线的电脑,不想给太多的权限,自行用CreateProcessWithLogon写了一个程序将Administrators权限用户名、简单处理后的密码、目标程序路径名称固化在程序中,用于让低权限的用户运行需Admistrators权限才能正确的测试程序,就只有上面所说的一个桌面区域的问题了。
[解决办法]
可以试试另做一个服务程序,受限用户进程与服务程序通讯,让服务程序来创建新进程。
[解决办法]
程序本身做成服务,然后再runas其他程序。MSDN里面有这方面内容的文章。关键字用cmdasuser试试吧,大概是这么写的,忘了。
[解决办法]
...哪怕就以Administrator运行这个示例也是GetLastError()=1314--客户端没有有所需的特权,就更不用说更低权限的用户了。 ...
====================================
ImpersonateLoggedOnUser( hNewToken );
http://www.codeproject.com/KB/vista-security/PMRunningProcess.aspx
[解决办法]
[解决办法]
SYSTEM 权限的进程都是系统服务等
需要做成服务service
[解决办法]