基于图形用户界面的RunAs 程序(GUI RunAs)

 为了在另一个用户上下文中启动程序,Win2k 提供了一个命令行程序工具——RunAs。在网上(如www.codeguru.com)也能找到同样功能的程序和代码。有人要求我为这个工具做一个图形用户界面的版本。本文就是为此而写的。为了不“重新发明轮子”,我的工作是基于前人的基础 来实现的。

本文程序具有良好的图形用户界面,免得你在命令行输入太多的参数,如图所示:

除此之外,你还可以:

  • 在界面中选择目标桌面,在这个目标桌面上运行你想要的程序。我提供了一个桌面列表供选择,双击即可;
  • 密码编辑框左边的按钮用来检查用户名/密码是否正确;
  • 使用用户名右边的按钮可以从本地机器的用户名列表中选择用户,双击即可;
    CreateProcessAsUser 和LogonUser 需要如下四个特权:
    SeIncreaseQuotaPrivilege;SeAssignPrimaryTokenPrivilege;SeChangeNotifyPrivilege;SeTcbPrivilege;
    默认情况下,管理员不需要这些特权。你可以按对话框底下的 Privilege 按钮,在弹出的对话框中选择启用这些特权(只需要做一次重新注销,重新登陆即可)。如果你不喜欢这个图形用户界面的程序,请使用 Martyn Brown 提供的控制台命令行程序——CmdAsUser
  • 如果不输入用户名和密码,程序将以“SYSTEM”账号启动。

  有一个常用程序的清单,你可以选择作为“RunAs”的程序,其内部代码使用LSA 系列 API来处理账号特权,使用LogonUser 和CreateProcessAsUser 完成工作。当你要求以“SYSTEM”账号启动时,要稍微费一些事情——打开系统进程,通过添加 TOKEN_DUPLICATE、TOKEN_ASSIGN_PRIMARY、TOKEN_QUERY权限来调整其令牌并重新打开。

最后,感谢《Programming Server-Side Applications for Mircosoft Windows 2000》一书的作者,我的程序框架代码借鉴了本书的例子。

使用说明补充:按“Privilege”确认添加了需要的特权后,一定要RelLog(注销/重新登录)一次使之生效。

posted @ 2010-04-17 11:26  7069202a  阅读(373)  评论(0编辑  收藏  举报