如果用户使用管理员这样的一个被授予高特权的账户登录,那么除了与这个账户对应的安全令牌之外,还会创建一个经过筛选的住处,
后者将只被授予标准用户的权限,这个筛选的令牌最后会与系统代表最终用户启动的所有进程关联。
taskmgr任务管理器点show process from all users,PID将变化,因为window只允许在进程边界上进行权限提升,一时进程启动,再要求更多的权限就已经迟了。
不过,一个未提升权限的进程可以生成一个提升权限的进程,再发出IPC调用。GetTokenInformation
希望被高度的里程继承什么权限,注以那种权限来启动VS。
生成带盾的EXE图标 独立生成UAC清单 *.manifest Manifest Tool->Input and Output->Embed Manifest
//C:\\test\\testpromiss\\Debug\\testpromiss.exe
#include <iostream>
void main()
{
std::cout<<"test token\n"<<std::endl;
getchar();
}
//test project will run upon exe as administrator
#include <iostream>
#include <shlwapi.h>
void evolation()
{
SHELLEXECUTEINFO sei = { sizeof(SHELLEXECUTEINFO) };
sei.lpVerb = L"runas";
sei.lpFile = L"C:\\test\\testpromiss\\Debug\\testpromiss.exe";
sei.nShow = SW_SHOWNORMAL;
if( !ShellExecuteEx(&sei) )
{
DWORD dwle = GetLastError();
if(dwle == ERROR_CANCELLED)
{
std::cout<<"deny allow"<<std::endl;
}
else if(dwle == ERROR_FILE_NOT_FOUND)
{
std::cout<<"exe not founed"<<std::endl;
}
else
{
std::cout<<"other fail"<<std::endl;
}
}
}
void main()
{
evolation();
getchar();
}