判斷程序是否運行在管理員權限下


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.直接運行程序

直接運行

         使用Process Explorer查看進程的屬性

image

         發現此時用戶User為管理員賬戶(Wind),在用戶組列表中,有管理員用戶組(Administrators),但是Flags為Deny,這是由於UAC控制下,管理員賬號登陸的系統運行的程序默認運行在標准用戶權限下。

     _2.Run As Administrator

admin運行

         使用Process Explorer查看進程的屬性

admin

         發現此時Users屬性為管理員賬戶(Wind),管理員用戶組(Administrators)的Flags為Owner

(2)標准用戶登陸系統

     _1.直接運行

直接運行

         使用Process Explorer查看進程屬性

直接運行-pe

          發現此時運行的用戶為Test(普通用戶),用戶組中沒有管理員用戶組

     _2.Run As Administrator

admin運行

          使用Process Explorer查看進程屬性

admin

          發現User屬性變為管理員賬戶(Wind)了,而且Group列表中有管理員用戶組,其中Flags為Owner

4.由運行測試可以知道,判斷是否運行在管理員權限下,有兩個條件

  • 進程運行用戶為管理員賬戶
  • 管理員用戶組的Flags為Owner

5.因此可以自己編寫IsUserAnAdmin函數

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

個人覺得這個函數即可以判斷進程運行的用戶是否屬於管理員用戶組,又可以判斷是否運行權限為管理員。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM