码迷,mamicode.com
首页 > 其他好文 > 详细

判断程序是否运行在管理员权限下

时间:2014-12-03 00:21:50      阅读:522      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   ar   使用   sp   strong   on   2014   

1.提出两个概念(成立条件是系统是Vista后续版本,这是因为引入了UAC)

  • 一个是运行程序的账号是管理员账号
  • 另一个是当前运行环境是管理员环境

2.判断程序是否运行在管理员权限,直接使用函数IsUserAnAdmin就可以判断

#include <ShlObj.h>
#include <tchar.h>

int _tmain()
{
	BOOL bIsAdmin = IsUserAnAdmin();
	if(bIsAdmin)
		_tprintf_s(_T("Run As administrator"));
	else
		_tprintf_s(_T("Run As user"));
	system("pause");
	return 0;
}

3.测试运行

(1)管理员账号登陆系统

     _1.直接运行程序

bubuko.com,布布扣

         使用Process Explorer查看进程的属性

bubuko.com,布布扣

         发现此时用户User为管理员账户(Wind),在用户组列表中,有管理员用户组(Administrators),但是Flags为Deny,这是由于UAC控制下,管理员账号登陆的系统运行的程序默认运行在标准用户权限下。

     _2.Run As Administrator

bubuko.com,布布扣

         使用Process Explorer查看进程的属性

bubuko.com,布布扣

         发现此时Users属性为管理员账户(Wind),管理员用户组(Administrators)的Flags为Owner

(2)标准用户登陆系统

     _1.直接运行

bubuko.com,布布扣

         使用Process Explorer查看进程属性

bubuko.com,布布扣

          发现此时运行的用户为Test(普通用户),用户组中没有管理员用户组

     _2.Run As Administrator

bubuko.com,布布扣

          使用Process Explorer查看进程属性

bubuko.com,布布扣

          发现User属性变为管理员账户(Wind)了,而且Group列表中有管理员用户组,其中Flags为Owner

4.由运行测试可以知道,判断是否运行在管理员权限下,有两个条件

  • 进程运行用户为管理员账户
  • 管理员用户组的Flags为Owner

5.因此可以自己编写IsUserAnAdmin函数

参考http://www.cnblogs.com/cpointer/p/4138574.html中的Am_I_In_Admin_Group函数

个人觉得这个函数即可以判断进程运行的用户是否属于管理员用户组,又可以判断是否运行权限为管理员。

判断程序是否运行在管理员权限下

标签:style   blog   http   ar   使用   sp   strong   on   2014   

原文地址:http://www.cnblogs.com/cpointer/p/4138923.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!