一个提升代码执行权限的例子

    同事在测试工具在Vista下运行的时候,无意中发现工具报了一个调用"msflxgrd.ocx"出错。因为ocx是控件,如果在运行前不注册的话,有可能该控件无法使用。于是我在Vista上尝试手工注册之(“regsvr32 msflxgrd.ocx”),结果报错。根据错误代码在网上查到的原因是,没有权限。
    那么很明显是因为我登陆的帐户没有管理员权限。看来Vista系统在用户权限上比以前的操作系统严格许多,也许是应对外界安全性质疑的一种解决措施吧。查看工具代码后得知,代码中有注册该控件的部分,应该是代码执行注册时因权限不够而失败导致的问难题。当我用管理员身份运行工具是,一切OK。这证明了我的理论是正确的。问题很清楚了,因为我们平时在开发软件的时候,总是假想安装着和使用者都是以管理员身份来使用的,所以代码中并没有考虑执行权限的问题。当软件没有涉及需要极高权限操作时,一切平安无事。如果涉及到这种需要注册控件的高级权限问题时,而使用者又恰好没有管理员权限,那么问题就暴露出来了。
    为了解决这个问题,我在网上查到一段可以提升执行权限的代码。经测试,在Vista32位系统下是有效的。
  1. void   RaisePrivleges()
  2. {
  3.     HANDLE   hToken;
  4.     TOKEN_PRIVILEGES   tkp;
  5.     tkp.PrivilegeCount   =   1;
  6.     tkp.Privileges[0].Attributes   =   SE_PRIVILEGE_ENABLED;
  7.     if(OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, &hToken))
  8.     {
  9.         if(LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tkp.Privileges[0].Luid))
  10.         {
  11.             AdjustTokenPrivileges(hToken, FALSE &tkp, 0x10, (PTOKEN_PRIVILEGES)NULL, 0);
  12.         }
  13.     }
  14.     if (hToken)   CloseHandle(hToken);
  15. }
    各API的含义可以参看MSDN的解释,在此就不多说明了。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值