用户是否是用管理员权限运行本进程

本文介绍了一个C++程序,用于检测当前进程是否以管理员权限运行。通过使用Windows API函数,该程序可以获取并判断进程的令牌类型及是否属于管理员组。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <windows.h>
#include <ShlObj.h>
#include <iostream>

using namespace std;

BOOL GetProcessElevation(TOKEN_ELEVATION_TYPE * pElevationType , BOOL * pIsAdmin)
{
	HANDLE hToken = NULL;
	DWORD dwSize;

	if ( !OpenProcessToken(GetCurrentProcess() , TOKEN_QUERY , &hToken) )
	{
		return FALSE;
	}

	BOOL bResult = FALSE;

	if ( GetTokenInformation(hToken , TokenElevationType , pElevationType , sizeof(TOKEN_ELEVATION_TYPE) , &dwSize) )
	{
		BYTE adminSID[SECURITY_MAX_SID_SIZE];
		dwSize = sizeof(adminSID);
		CreateWellKnownSid(WinBuiltinAdministratorsSid , NULL , &adminSID , &dwSize);

		if ( *pElevationType == TokenElevationTypeLimited )
		{
			HANDLE hUnfilteredToken = NULL;
			GetTokenInformation(hToken , TokenLinkedToken , (VOID*)hUnfilteredToken , sizeof(HANDLE) , &dwSize);

			if (CheckTokenMembership(hUnfilteredToken , &adminSID , pIsAdmin))
			{
				bResult = TRUE;
			}

			CloseHandle(hUnfilteredToken);
		}
		else
		{
			*pIsAdmin = IsUserAnAdmin();
			bResult = TRUE;
		}
	}

	CloseHandle(hToken);
	return bResult;
}

int _tmain(int argc, _TCHAR* argv[])
{
	TOKEN_ELEVATION_TYPE t;
	BOOL isAdmin = FALSE;
	BOOL bRunRight = GetProcessElevation(&t , &isAdmin);

	if (bRunRight)
	{
		if (isAdmin)
		{
			cout<<"是管理员"<<endl;
		}
		else
		{
			cout<<"不是管理员"<<endl;
		}
	}

	system("pause");

	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值