在服务中用管理员权限创建一个可弹出UI的进程 (转载)

转载:http://blog.csdn.net/woshinia/article/details/7850295

转载:http://blog.csdn.net/hurryboylqs/article/details/53004970

转载:http://blog.csdn.net/fakine/article/details/8537763

    HANDLE hToken = NULL;
    HANDLE hTokenDup = NULL;
    do
    {
        if(OpenProcessToken(GetCurrentProcess(),TOKEN_ALL_ACCESS,&hToken))
        {
            if(DuplicateTokenEx(hToken, TOKEN_ALL_ACCESS,NULL, SecurityIdentification, TokenPrimary, &hTokenDup))
            {                //得到当前用户回话ID
                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);
时间: 2024-10-10 15:25:52

在服务中用管理员权限创建一个可弹出UI的进程 (转载)的相关文章

linux使用管理员权限打开一个文件管理器(右键root打开文件)

使用管理员权限打开一个文件管理器 sudo nautilus 加入右键以管理员身份打开 sudo apt install nautilus-admin 安装完成后,必须重新启动 Nautilus nautilus -q 注意:nautilus-gksu 已经不再工作了,替换为这里使用的“Nautilus管理”扩展,在官方的Ubuntu仓库中. 右键在终端打开: sudo apt-get install gnome-terminal 原文地址:https://www.cnblogs.com/xlp

点击一个超链接,弹出固定大小的新窗口(js实现)

点击一个超链接,弹出固定大小的新窗口(js实现),有需要的朋友可以参考下. 1.最基本的弹出窗口代码 <SCRIPT LANGUAGE="javascript"> <!-- window.open ('page.html') --> </SCRIPT> 因为这是一段javascripts代码,所以它们应该放在<SCRIPTLANGUAGE="javascript">标签和</script>之间.<!-

一个JS弹出层用户登录效果

<html> <head> <meta http-equiv="Content-Type"content="text/html; charset=gb2312"/> <title>接触角测定仪 http://www.dgshengding.com</title> <style> body,#Mdown{margin: 0;padding: 0;text-align: center;font: n

之前项目中用到的简单的自定义弹出提示框的实现,整理整理,当然开源的插件很多,但自己写的可以随意发挥

效果如下: html代码: <div class="container"> <div class="wrapper" style="background-color:white; position:relative;"> <div class="box" style="background-color:red; position:absolute; left:100px; top:300

微服务配置内容—&gt;如何创建一个高可用的服务注册中心

前言:首先要知道什么是一个高可用的服务注册中心,基于spring boot建成的服务注册中心是一个单节点的服务注册中心,这样一旦发生了故障,那么整个服务就会瘫痪,所以我们需要一个高可用的服务注册中心,那么在Eureka中,我们通过集群来解决这个问题.啥叫集群呢?就是多配几个,一个服务注册中心挂了,还有另一个. 另外要注意jdk的版本需要1.8或1.8以上,否则无法执行. 1 但这里我遇到了一个奇怪的问题:本来我的jdk版本是1.6的,我需要更换.但是怎么配置环境 2 变量,在命令行输入java

在linux中用useradd命令创建一个用户后不能登录的解决

在linux学习过程中我用useradd 用户名来创建一个用户后,不能登录,通过网上查询看到这种说法: 一.etc/profile 文件的的权限不足,因为我改过该文件的权限,所以我去试了还是没有用 最后是在学习到谋个地方老师说创建一个新用户后再如果没有指定目录则会在home目录下创建一个与用户名相同的目录, 我用上面的useradd 用户名 命令执行后home命令中没有对应的目录,最后是通过 -m选项完成的, 通过useradd -m 用户名 可以在home目录下找到相应的目录,最后在登录,竟然

Easyui+MVC实现动从一个动态弹出框进入另一个动态弹出框

高校平台进行中,本着一个在一个页面完成更多功能的宗旨,在遇到添加功能的多弹出框时,就需要从一个弹出框进入另一个弹出框,因为弹出框是动态的,就是说弹出框中的数据不定,是在Controller中根据传过来的数据动态拼写,完成后再弹出这个弹出框. View中加载部分视图: @*获取分数对话框*@ <form id="fmGetScore"> <div id="dlgGetScore" closed="true" class="

分享一个JQuery弹出层插件

JQuery插件TipsWindown 1.1 一个基于jQuery的弹出层.支持拖拽,支持内容为文字,图片,URL等!至于兼容性.在IE6下,弹出对像无法绝对固定.其他应该没啥大问题: 最新更新:(2010-08-12):修正IE6下不能遮住下拉菜单的BUG,增加拖动时半透明效果.句容市鄂茂钢铁 应用演示 弹出文本信息提示:   我是下拉菜单 tipsWindown("提示","text:提示信息内容","250","150"

第一个微信小程序(实现点击一个按钮弹出toast)

今天根据网上的教程搭建了微信小程序的环境,然后看文档做了一个简单的小应用. 项目的目录是这个样子的: app.js.app.json.app.wxss是全局文件,必不可少的文件.定义在app.wxss中的样式为全局样式,作用于每一个页面.在page的wxss文件中定义的样式为局部样式,只作用在对应的页面,并会覆盖app.wxss中相同的选择器. app.js文件代码: App({ onLaunch: function () { console.log('小程序已启动') }, onShow: f