关于提升某个进程的权限(ShellExecuteEx)

本文介绍了两种提升进程权限的方法,包括自动提升和手动通过函数(ShellExecuteEx)提升。着重讨论了如何利用ShellExecuteEx函数来实现进程权限的提升。
摘要由CSDN通过智能技术生成

提升一个进程的权限可以有两种办法

第一、自动提升进程的权限

第二、手动提升进程权限(通过函数提升权限)

             使用函数(ShellExecuteEx)

一直到今天,遇到问题才写测试程序实现:

// testlog.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<iostream>
#include<Windows.h>
#include<Shellapi.h>

#pragma comment( lib, "Shell32.lib" )

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	
		 允许Vista/Win7下,不同权限进程间发送消息:WM_COPYDATA 
		//typedef BOOL (WINAPI FAR *ChangeWindowMessageFilter_PROC)(UINT,DWORD); 
		//ChangeWindowMessageFilter_PROC m_pfnChangeWindowMessageFilter; 
		//m_pfnChangeWindowMessageFilter = 
		//	(ChangeWindowMessageFilter_PROC)::GetProcAddress (::GetModuleHandle(_T("USER32")),"ChangeWindowMessageFilter"); 
		//if (m_pfnChangeWindowMessageFilter) 
		//{ 
		//	m_pfnChangeWindowMessageFilter(WM_COPYDATA, 1/*Add*/); 
		//} 
  //

		 启动Shell
要在Qt应用程序中提升管理员权限,可以使用QProcess类来启动一个新的进程并使用Windows API来提升权限。以下是一个示例代码: ```cpp #include <QCoreApplication> #include <QProcess> #include <windows.h> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); // 创建一个新的进程 QProcess process; process.setProgram("cmd.exe"); process.setArguments(QStringList() << "/C" << "echo hello world"); // 提升管理员权限 if (IsUserAnAdmin()) { process.setCreateProcessArgumentsModifier([](QProcess::CreateProcessArguments *args) { args->flags |= CREATE_NEW_CONSOLE; args->startupInfo->dwFlags &= ~STARTF_USESTDHANDLES; args->startupInfo->dwFlags |= STARTF_USESHOWWINDOW; args->startupInfo->wShowWindow = SW_NORMAL; args->startupInfo->lpDesktop = nullptr; args->startupInfo->cb = sizeof(STARTUPINFOEXW); args->lpAttributeList = nullptr; }); } else { // 如果当前用户不是管理员,则使用ShellExecute提升权限 SHELLEXECUTEINFO shexinfo = { 0 }; shexinfo.cbSize = sizeof(shexinfo); shexinfo.fMask = SEE_MASK_NOCLOSEPROCESS; shexinfo.lpFile = L"cmd.exe"; shexinfo.lpParameters = L"/C echo hello world"; shexinfo.nShow = SW_SHOW; shexinfo.lpVerb = L"runas"; ShellExecuteEx(&shexinfo); WaitForSingleObject(shexinfo.hProcess, INFINITE); CloseHandle(shexinfo.hProcess); return 0; } // 启动进程 process.start(); process.waitForFinished(); return a.exec(); } ``` 在这个示例中,如果当前用户是管理员,则使用QProcess启动一个新的进程,然后使用Windows API提升权限。如果当前用户不是管理员,则使用ShellExecuteEx提升权限。注意,使用ShellExecuteEx时需要等待进程完成才能退出应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值