需求:管理员启动了安装包并安装完后需要启动程序。此时希望是以当前登录用户来启动,而不是以管理员用户来启动(安装包是管理员权限,直接启动因为权限继承原因,程序也会是管理员权限)
思路:利用当前explorer.exe进程的token去创建目的进程
DWORD GetExplorerToken(int nProcessId,OUT PHANDLE phExplorerToken)
{
DWORD dwStatus = ERROR_FILE_NOT_FOUND ;
BOOL bRet = FALSE ;
HANDLE hProcess = NULL ;
HANDLE hProcessSnap = NULL ;
TCHAR szExplorerPath[MAX_PATH] = { 0 } ;
TCHAR FileName[MAX_PATH] = { 0 } ;
PROCESSENTRY32 pe32 = { 0 } ;
__try
{
hProcessSnap = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS , 0 ) ;
if( hProcessSnap == INVALID_HANDLE_VALUE )
{
dwStatus = GetLastError() ;
__leave ;
}
pe32.dwSize = sizeof( PROCESSENTRY32 ) ;
if( !Process32First( hProcessSnap, &pe32 ))
{
dwStatus = GetLastError() ;
__leave ;
}
do {