WIndows via C/C++ 学习(12)权限上下文

本文摘录了一段用于检测Windows进程权限的C/C++代码。通过GetProcessElevation函数,可以判断进程的安全令牌提升类型及是否以管理员身份运行。涉及OpenProcessToken、GetTokenInformation等API的使用。

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

摘抄了 Windows via C/C++ 上的一段代码,一个函数——GetProcessElevation,返回安全令牌的提升类型和一个表示当前是否运行在管理员身份下。

BOOL GetProcesElevation(TOKEN_ELEVATION_TYPE *pElevation, BOOL *pIsAdmin)
{
	HANDLE	hToken = NULL;
	DWORD	dwSize;

	// 获得当前进程令牌
	if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken))
		return FALSE;

	BOOL b_Result = FALSE;

	// 检索提升类型信息
	if (GetTokenInformation(hToken, TokenElevationType, pElevation, sizeof(TOKEN_ELEVATION_TYPE), &dwSize))
	{
		if(*pElevation == TokenElevationTypeLimited)
		{
			// 创建 Administrator 组相应的 SID
			BYTE adminSID[SECURITY_MAX_SID_SIZE];
			dwSize = sizeof(adminSID);
			CreateWellKnownSid(WinBuiltinAdministratorsSid, NULL, adminSID, &dwSize);

			// 获得链接令牌的句柄
			HANDLE hUnfilteredToken = NULL;
			GetTokenInformation(hToken, TokenLinkedToken, (LPVOID)&hUnfilteredToken, sizeof(HANDLE), &dwSize);

			// 检测令牌是否包含管理员SID
			if(CheckTokenMembership(hUnfilteredToken, &adminSID, pIsAdmin))
				b_Result = TRUE;

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

		CloseHandle(hToken);

		return b_Result;
	}
}

转载于:https://www.cnblogs.com/Fly-pig/archive/2011/01/21/1941189.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值