在服务中用管理员权限创建一个可弹出UI的进程
来源:互联网 发布:淘宝95095买药靠谱吗 编辑:程序博客网 时间:2024/06/07 02:01
do{// if (!OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hThisToken ))// {// PrintfDbgStr(TEXT("OpenProcessToken error !error code:%d\n"),GetLastError());// bSuccess = FALSE;// break;// }// if(!SetPrivilege(hThisToken,SE_TCB_NAME,TRUE))// {// PrintfDbgStr(TEXT("SetPrivilege error !error code:%d\n"),GetLastError());// bSuccess = FALSE;// break;// }DWORD dwSessionId = WTSGetActiveConsoleSessionId();if(!WTSQueryUserToken(dwSessionId,&hToken)){PrintfDbgStr(TEXT("WTSQueryUserToken error !error code:%d\n"),GetLastError());bSuccess = FALSE;break;}STARTUPINFO si;PROCESS_INFORMATION pi;ZeroMemory(&si,sizeof(STARTUPINFO));ZeroMemory(&pi,sizeof(PROCESS_INFORMATION));si.cb = sizeof(STARTUPINFO);si.lpDesktop = _T("WinSta0\\Default");si.wShowWindow = TRUE;si.dwFlags = STARTF_USESHOWWINDOW;LPVOID pEnv = NULL;DWORD dwCreationFlag = NORMAL_PRIORITY_CLASS | CREATE_NEW_CONSOLE;if(!CreateProcessAsUser(hToken,NULL,pBuf,NULL,NULL,FALSE,dwCreationFlag,pEnv,NULL,&si,&pi)){PrintfDbgStr(TEXT("CreateProcessAsUser error !error code:%d\n"),GetLastError());bSuccess = FALSE;break;}}while(0);
这种方法创建的进程不是管理员权限的,因为是调用了用户的令牌创建的进程。不过,确实能顺利弹出UI。
HANDLE hToken = NULL;HANDLE hTokenDup = NULL;do {if(OpenProcessToken(GetCurrentProcess(),TOKEN_ALL_ACCESS,&hToken)){if(DuplicateTokenEx(hToken, TOKEN_ALL_ACCESS,NULL, SecurityIdentification, TokenPrimary, &hTokenDup)){DWORD dwSessionId = WTSGetActiveConsoleSessionId();if(!SetTokenInformation(hTokenDup,TokenSessionId,&dwSessionId,sizeof(DWORD))){PrintfDbgStr(TEXT("SetTokenInformation error !error code:%d\n"),GetLastError());bSuccess = FALSE;break;}STARTUPINFO si;PROCESS_INFORMATION pi;ZeroMemory(&si,sizeof(STARTUPINFO));ZeroMemory(&pi,sizeof(PROCESS_INFORMATION));si.cb = sizeof(STARTUPINFO);si.lpDesktop = _T("WinSta0\\Default");si.wShowWindow = SW_SHOW;si.dwFlags = STARTF_USESHOWWINDOW /*|STARTF_USESTDHANDLES*/;LPVOID pEnv = NULL;DWORD dwCreationFlag = NORMAL_PRIORITY_CLASS | CREATE_NEW_CONSOLE | CREATE_UNICODE_ENVIRONMENT;if(!CreateEnvironmentBlock(&pEnv,hTokenDup,FALSE)){PrintfDbgStr(TEXT("CreateEnvironmentBlock error !error code:%d\n"),GetLastError());bSuccess = FALSE;break;}if(!CreateProcessAsUser(hTokenDup,NULL,pBuf,NULL,NULL,FALSE,dwCreationFlag,pEnv,NULL,&si,&pi)){PrintfDbgStr(TEXT("CreateProcessAsUser error !error code:%d\n"),GetLastError());bSuccess = FALSE;break;}if(pEnv){DestroyEnvironmentBlock(pEnv);}}else{PrintfDbgStr(TEXT("DuplicateTokenEx error !error code:%d\n"),GetLastError());bSuccess = FALSE;break;}}else{PrintfDbgStr(TEXT("cannot get administror!error code:%d\n"),GetLastError());bSuccess = FALSE;break;}}while(0);if(hTokenDup != NULL && hTokenDup != INVALID_HANDLE_VALUE)CloseHandle(hTokenDup);if(hToken != NULL && hToken != INVALID_HANDLE_VALUE)CloseHandle(hToken);这里就能用管理员权限打开一个进程并,弹出UI了,注意dwCreationFlag和si的参数设定,我是经过多次试验得出的,错了的话,可能就弹不出来了哦。这种方法是打开用户的令牌但是把服务的所有权限都给这个令牌,所以用户令牌就有足够的权限用管理员打开进程了。
- 在服务中用管理员权限创建一个可弹出UI的进程
- 在服务中用管理员权限创建一个可弹出UI的进程
- 在服务中用管理员权限创建一个进程
- 服务程序中创建带管理员权限的UI进程问题总结
- 不是管理员权限的进程启动一个具备管理员权限的EXE
- 服务进程创建一个带窗口的进程,过UAC
- 在服务里面弹出一个窗口到用户的桌面上
- 在服务程序中创建用户进程的方法
- 在服务程序中创建用户进程的方法(C++)
- Unity中VIVE弹出UI的创建
- 在UNITY中创建出一个简单的UI界面
- JavaScript 弹出一个可移动的框
- 服务级进程的创建
- Windows服务进程的创建
- 如何在Mac OS X上创建一个Service服务进程
- The page cannot be refreshed without resending ... 昨天遇到一个这样得问题,在弹出的子页中用:
- 在vs2017中用.net核创建一个c#Hello World的申请
- 在Unix/Linux中创建一个后台进程的步骤
- 轻松理解扩展欧几里德算法
- C++中string类的用法
- smartforms控制分页,统计合计数 .
- JAVA学习笔记(6)字符串
- 信号量 互斥锁 条件变量的区别
- 在服务中用管理员权限创建一个可弹出UI的进程
- 高效计算Fibonacci数
- mit 计算机科学及编程导论(14,15,16)
- 《QTP自动化测试最佳实践》已经出版
- Java 相关学习网站
- JAVA自定义协议实现网页启动应用程序
- http头信息详解
- 后台默认下拉列表
- java.lang.reflect.InvocationTargetException