一个简单的以User权限启动外部应用程序
BOOL ExecuteAsUser(LPCWSTR lpszUserName, LPCWSTR lpszPassword, LPCWSTR lpszApplication, LPCWSTR lpszCmdLine)
{
if(NULL == lpszUserName)
{
return FALSE;
}
if(NULL == lpszApplication)
{
return FALSE;
} BOOL bRet = FALSE;
WCHAR* pUserName = NULL;
WCHAR* pPassword = NULL;
STARTUPINFO si = {sizeof(si)};
PROCESS_INFORMATION pi = {};
WCHAR szApp[MAX_PATH * ] = {}; // Check User Name
size_t nLen = wcslen(lpszUserName) + ;
pUserName = new WCHAR[nLen];
StringCchPrintfW(pUserName, nLen, L"%s", lpszUserName); // Check Password
nLen = (NULL != lpszPassword) ? (wcslen(lpszPassword) + ) : ;
pPassword = new WCHAR[nLen];
StringCchPrintfW(pPassword, nLen, L"%s", (NULL != lpszPassword) ? lpszPassword : L""); USER_INFO_1 ui;
DWORD dwError = ;
DWORD dwLevel = ;
ui.usri1_name = pUserName;
ui.usri1_password = pPassword;
ui.usri1_priv = USER_PRIV_USER;
ui.usri1_home_dir = NULL;
ui.usri1_comment = NULL;
ui.usri1_flags = UF_SCRIPT;
ui.usri1_script_path = NULL;
// Add User
if(NERR_Success != NetUserAdd(NULL, dwLevel, (LPBYTE)&ui, &dwError))
{
goto _END_;
} if((NULL != lpszCmdLine) && wcslen(lpszCmdLine))
StringCchPrintfW(szApp, _countof(szApp), L"%s %s", lpszApplication, lpszCmdLine);
else
StringCchPrintfW(szApp, _countof(szApp), L"%s", lpszApplication); if(CreateProcessWithLogonW(lpszUserName, NULL, lpszPassword, LOGON_WITH_PROFILE, NULL, szApp, , NULL, NULL, &si, &pi))
{
bRet = TRUE;
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
}
else
{
dwError = GetLastError();
goto _CLEANUP_;
}
bRet = TRUE; _CLEANUP_:
// Delete User
NetUserDel(NULL, lpszUserName);
_END_:
if(NULL != pPassword)
{
delete[] pPassword;
pPassword = NULL;
}
if(NULL != pUserName)
{
delete[] pUserName;
pUserName = NULL;
}
return bRet;
} // 测试代码
#include "stdafx.h" #include <Windows.h>
#include <lm.h>
#include <strsafe.h>
#pragma comment(lib, "Netapi32.lib") int _tmain(int argc, _TCHAR* argv[])
{
ExecuteAsUser(L"ABC", L"Hello", L"F:\\11.exe", NULL);
return ;
}
参考:http://blog.csdn.net/visualeleven/article/details/7640475
一个简单的以User权限启动外部应用程序的更多相关文章
- 一个简单的以User权限启动外部应用程序(用NetUserAdd函数和USER_INFO_1结构体动态添加用户,然后用CreateProcessWithLogonW启动程序)
版权声明:本文为博主原创文章,未经博主允许不得转载. BOOL ExecuteAsUser(LPCWSTR lpszUserName, LPCWSTR lpszPassword, LPCWSTR lp ...
- 一个简单的URL访问权限校验
前言 目前最流行的两大安全框架:SpringSecruity.Shiro 权限控制,无非就是:前端控件是否可见.是否允许请求/访问URL 本文分享一个简单的URL访问权限校验,支持/./*./**等情 ...
- C#中启动外部应用程序
C#中我们可以通过Process类直接启动外部应用程序 代码如下: Process p = new Process(); p.StartInfo.FileName ...
- mybatis入门教程之搭建一个简单的mybatis项目并启动它
一.准备条件: 1.依赖jar包:mybatis核心包(必须).lombok插件包(非必须)以及MySQL数据库连接驱动包(必须) <dependency> <groupId> ...
- 利用外部协议让chrome启动外部应用程序
http://bbs.kafan.cn/thread-1254526-1-1.html 原理:很简单,标题写的很明确了,不懂的google去. 步骤:举个例子,我要启动D:\Programe file ...
- 一个简单的基于多进程实现并发的Socket程序
在单进程的socket的程序的基础上,实现多进程并发效果的思路具体是:在server端开启“链接循环”,每建立一次链接就生成一个Process对象进行server-client的互动,而client端 ...
- 一个简单的mfc单页界面文件读写程序(MFC 程序入口和执行流程)
参考:MFC 程序入口和执行流程 http://www.cnblogs.com/liuweilinlin/archive/2012/08/16/2643272.html 程序MFCFlie ...
- 启动外部exe程序
Process myProcess = new Process();myProcess.StartInfo.FileName = pathName;myProcess.Start();其中的pathN ...
- 一个简单的例子说明windows环境变量配置
关于win下环境变量的问题 配置环境变量其实就像是创建一个快捷键一样,我们把安装程序的路径告诉系统环境变量,这样下次我们在命令行中就可以直接使用一个简单的命令来调用我们安装的程序,因为此时计算机已经知 ...
随机推荐
- Alert Views
Alert views display a concise and informative alert message to the user. Alert views convey importan ...
- int.Parse()与int.TryParse()
int i = -1;bool b = int.TryParse(null, out i);执行完毕后,b等于false,i等于0,而不是等于-1,切记. int i = -1;bool b = ...
- (转)Maven实战(四)生命周期
1. 三套生命周期 Maven拥有三套相互独立的生命周期,它们分别为clean,default和site. 每个生命周期包含一些阶段,这些阶段是有顺序的,并且后面的阶段依赖于前面的阶段,用户和 ...
- motan源码分析八:涉及到底层的客户端调用
之前我们分析了客户端调用服务端的源码,但是没有涉及到通讯层和序列化层,本文将之前讲过的内容做一次串联. 1.上层通过动态代理调用refer的call,每个refer又对应一个nettyclient,下 ...
- motan源码分析七:序列化
motan的序列化支持两种协议,一种是json,另一种是hessian2.主要涉及到的类和接口是是:FastJsonSerialization.Hessian2Serialization.Serial ...
- 【翻译】A (very) short introduction to R R的简短介绍
[前言] 本文翻译自Paul Torfs & Claudia Brauer的文章A (very) short introduction to R.其中比较简单的地方没有翻译,不好用中文描述的地 ...
- dsoframer组件详细使用(aspx.net)
近来由于工作需要,要求实现一个office文档在线编辑器 关于在线操作office 我是一点经验没有 网上查了半天资料 锁定了一款组件(ActiveX控件dsoframer,一个用C++实现的offi ...
- CentOS目录结构详解
CentOS是文件管理系统,在CentOS中所有的程序都以文件形式存储.初学CentOS的朋友需要了解各个挂载点 目录的结构和作用.这样才能更好的去管理系统. CentOS的目录大体上可分为四类:管理 ...
- Cacti监控Linux主机
1 要监视一台Linux主机,需要在被监控的主机上安装net-snmp相关软件包,CentOS安装可使用“yum -y install net-snmp”命令:# yum -y install net ...
- 自定义异常throw
简单自定义一个年龄小于等于0,或者大于120会出现的异常 首先继承父类Exception,调用父类的构造器,这样才可以报出自己想要的异常 public class AgeException exten ...