C++windows 进程提权

3 篇文章 0 订阅

windows进程提权

使用到的系统函数

OpenProcessTokenLookupPrivilegeValueWAdjustTokenPrivileges

BOOL
WINAPI
OpenProcessToken(				//打开与进程相关联的访问令牌
    _In_ HANDLE ProcessHandle,	//所要提升进程的句柄
    _In_ DWORD DesiredAccess,	//选择所要操作的类型,指定请求的访问令牌访问类型
    _Outptr_ PHANDLE TokenHandle//返回的访问令牌句柄的指针
    );
    
BOOL
WINAPI
LookupPrivilegeValueW(	//查看系统权限的特权值
    _In_opt_ LPCWSTR lpSystemName,	//所要被检索特权值的系统的名称,
    								//如果指定了空字符串,则该函数尝试在本地系统上查找特权名称。
    _In_     LPCWSTR lpName,		//索要检索的特权名称
    _Out_    PLUID   lpLuid			//指向接收LUID的变量的指针,
    								//通过该LUID可以在lpSystemName参数指定的系统上得到特权。
    );
    
BOOL
WINAPI
AdjustTokenPrivileges(	//在指定的访问令牌上启用或禁用特权
    _In_ HANDLE TokenHandle,			//访问令牌句柄
    _In_ BOOL DisableAllPrivileges,		//是否禁用令牌的所有特权
    _In_opt_ PTOKEN_PRIVILEGES NewState,//指向TOKEN_PRIVILEGES结构的指针,
    									//该结构指定特权及其属性的数组。
    									//如果DisableAllPrivileges参数为FALSE,则 
    									//AdjustTokenPrivileges 函数启用,
    									//禁用或删除令牌的这些特权。
    _In_ DWORD BufferLength,			//PreviousState的缓冲区大小
    _Out_writes_bytes_to_opt_(BufferLength,*ReturnLength) PTOKEN_PRIVILEGES PreviousState,
    _Out_opt_ PDWORD ReturnLength
    );

代码

bool UpPrivilegeValue()
{
	//OpenProcessToken()函数用来打开与进程相关联的访问令牌
	HANDLE hToken = nullptr;
	if (FALSE == OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, &hToken))
	{
		return false;
	}
	//LookupPrivilegeValue()函数查看系统权限的特权值
	LUID luid;
	if (FALSE == LookupPrivilegeValue(nullptr, SE_DEBUG_NAME, &luid))
	{
		CloseHandle(hToken);
		return false;
	}
	//调整权限设置
	TOKEN_PRIVILEGES Tok;
	Tok.PrivilegeCount = 1;
	Tok.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
	Tok.Privileges[0].Luid = luid;
	if (FALSE == AdjustTokenPrivileges(hToken, FALSE, &Tok, sizeof(Tok), nullptr, nullptr))
	{
		CloseHandle(hToken);
		return false;
	}

	if (GetLastError() == ERROR_NOT_ALL_ASSIGNED)
	{
		CloseHandle(hToken);
		return false;
	}

	CloseHandle(hToken);
	return true;
}
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值