在服务中创建用户进程的方法(C#版)

在服务中创建用户进程的方法(C#版)

Windows NT/2000提供了一个函数CreateProcessAsUser,它的功能类似于CreateProcess函数,所不同的是CreateProcessAsUser创建的新进程能以用户(任何用户)的安全上下文方式运行。

  1 
//
 PlatformInvoke Stuff


  2 
        [StructLayout(LayoutKind.Sequential)]

  3 
        
struct
 STARTUPINFO

  4 
        {


  5 
            
public
 Int32 cb;

  6 
            [MarshalAs(UnmanagedType.LPTStr)]

  7 
            
public
 String lpReserved;

  8 
            [MarshalAs(UnmanagedType.LPTStr)]

  9 
            
public
 String lpDesktop;

 10 
            [MarshalAs(UnmanagedType.LPTStr)]

 11 
            
public
 String lpTitle;

 12 
            
public
 UInt32 dwX;

 13 
            
public
 UInt32 dwY;

 14 
            
public
 UInt32 dwXSize;

 15 
            
public
 UInt32 dwYSize;

 16 
            
public
 UInt32 dwXCountChars;

 17 
            
public
 UInt32 dwYCountChars;

 18 
            
public
 UInt32 dwFillAttribute;

 19 
            
public
 UInt32 dwFlags;

 20 
            
public
 Int16 wShowWindow;

 21 
            
public
 Int16 cbReserved2;

 22 
            
public
 IntPtr lpReserved2;

 23 
            
public
 HandleRef hStdInput;

 24 
            
public
 HandleRef hStdOutput;

 25 
            
public
 HandleRef hStdError;

 26 
        }

 27 


 28 
        
const
 
int
 NORMAL_PRIORITY_CLASS 
=
 
0x00000020
;

 29 


 30 
        
struct
 PROCESS_INFORMATION

 31 
        {


 32 
            
public
 HandleRef hProcess;

 33 
            
public
 HandleRef hThread;

 34 
            
public
 UInt32 dwProcessId;

 35 
            
public
 UInt32 dwThreadId;

 36 
        }

 37 


 38 
        
struct
 SECURITY_ATTRIBUTES

 39 
        {


 40 
            
public
 UInt32 nLength;

 41 
            
public
 IntPtr lpSecurityDescriptor;

 42 
            
public
 Boolean bInheritHandle;

 43 
        }

 44 


 45 
        [DllImport(

advapi32.dll

, CharSet 
=
 CharSet.Unicode)]

 46 
        
static
 
extern
 Boolean CreateProcessAsUser(

 47 
        IntPtr hToken,

 48 
        String lpApplicationName,

 49 
        String lpCommandLine,

 50 
        IntPtr lpProcessAttributes,

 51 
        IntPtr lpThreadAttributes,

 52 
        Boolean bInheritHandles,

 53 
        UInt32 dwCreationFlags,

 54 
        IntPtr lpEnvironment,

 55 
        String lpCurrentDirectory,

 56 
        
ref
 STARTUPINFO lpStartupInfo,

 57 
        
out
 PROCESS_INFORMATION lpProcessInformation);

 58 


 59 
        [DllImport(

advapi32.dll

, CharSet 
=
 CharSet.Unicode)]

 60 
        
static
 
extern
 Boolean LogonUser(

 61 
        String lpszUsername,

 62 
        String lpszDomain,

 63 
        String lpszPassword,

 64 
        Int32 dwLogonType,

 65 
        Int32 dwLogonProvider,

 66 
        
ref
 IntPtr phToken

 67 
        );

 68 
        
const
 
int
 LOGON32_LOGON_INTERACTIVE 
=
 
2
;

 69 


 70 
        
public
 
void
 Execute(
string
 File)

 71 
        {


 72 
            
try


 73 
            {


 74 
                
//
unsafe


 75 
                {


 76 
                    PROCESS_INFORMATION pi 
=
 
new
 PROCESS_INFORMATION();

 77 


 78 
                    STARTUPINFO si 
=
 
new
 STARTUPINFO();

 79 
                    si.cb 
=
 Marshal.SizeOf(si);

 80 
                    si.lpDesktop 
=
 

winsta0\\default

;

 81 


 82 
                    IntPtr hToken 
=
 
new
 IntPtr(
0
);

 83 
                    
if
 (LogonUser(

auser



mydomain



Passw0rd!

,

 84 
                        LOGON32_LOGON_INTERACTIVE, 
0

ref
 hToken))

 85 
                    {


 86 
                        Boolean bResult 
=
 CreateProcessAsUser(

 87 
                            hToken,

 88 
                            File, 
//
 file to execute


 89 
                            
null

//
 command line


 90 
                            IntPtr.Zero, 
//
 pointer to process SECURITY_ATTRIBUTES


 91 
                            IntPtr.Zero, 
//
 pointer to thread SECURITY_ATTRIBUTES


 92 
                            
false

//
 handles are not inheritable


 93 
                            
0

//
 creation flags


 94 
                            IntPtr.Zero, 
//
 pointer to new environment block


 95 
                            
null

//
 name of current directory


 96 
                            
ref
 si, 
//
 pointer to STARTUPINFO structure


 97 
                            
out
 pi 
//
 receives information about new process


 98 
                            );

 99 


100 
                        
if
 (bResult)

101 
                        {


102 
                        }

103 
                    }

104 
                }

105 
            }

106 
            
catch
(Exception e)

107 
            {


108 
            }

109 
        }
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/111073.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • request对象详解

    request对象详解 2018年10月27日15:45:51于易动 申请对象:类型:HttpServletRequest的:请求对象:封装了请求头信息,请求体信息等   .1:特点:类型:HttpServletRequest 2:生命周期:   诞生:客户端浏览器每次发出请求,都会创建一个响应对象。   销毁:服务方法执行完毕就会销毁   .3:请求对象的作用: a:作为域对象…

    2022年6月6日
    56
  • 晶晶图js小女孩行走动画

    晶晶图js小女孩行走动画1<!DOCTYPEhtml>2<htmllang=”en”>3<head>4<metacharset=”UTF-8″>5<title>Document</title>6<styletype=”text/css”>7…

    2022年7月17日
    23
  • python3换行符_python的换行符

    python3换行符_python的换行符广告关闭提供包括云服务器,云数据库在内的50+款云计算产品。打造一站式的云产品试用服务,助力开发者和企业零门槛上云。我想匹配以下内容:参考编号8号长任何角色,任何次数新队任何角色,任何次数新队任何角色,任何次数新队任何角色,任何次数新队任何角色,任何次数我的python代码是:forminre.findall({8}.*n.*n.*n.*n.*,l,re.dot…

    2022年5月23日
    67
  • java实现递归树形结构_java递归算法经典实例

    java实现递归树形结构_java递归算法经典实例近期项目有个需求,需要将组织机构数据拼成树型结构返回至前端。我的做法如下:1.由于前端展示使用的组件需要特定的属性key,所以我定义了一个VO对象,代码如下:(本人使用了Lombok插件)packagetop.yuxuange.vo;importlombok.Data;importjava.util.List;@DatapublicclassTreeVO{/***id*/privateStringid;/**

    2022年9月18日
    0
  • 谷歌创始人是谁_谷歌创始人的故事

    谷歌创始人是谁_谷歌创始人的故事·布林更多的关注。最新一期的《莫斯科新闻》称,如果举世瞩目的诺贝尔奖设有IT奖的话,这位脸上总是挂着招牌式微笑的年轻人注定是该奖项最有竞争力的人选。他创建的Google成为人们使用互联网的一种重要方式,使每个人与很多问题的答案之间只有点击一下鼠标那么远,Google正像当年的甲壳虫乐队那样风靡全球。  谢尔盖·布林出生在前苏联一个犹太人家庭。5岁那年,布林跟随父母一起移民美国,从而开始了他美

    2022年9月1日
    2
  • android插件化资源_android 插件化

    android插件化资源_android 插件化AndroidEagleEye是一个基于Xposed的应用,可以实现对Android系统API与应用自身方法的Hook,最终会将Hook的API或方法的信息以Log的形式输出,包括应用的uid、API或方法的名称、参数信息等。在使用AndroidEagleEye过程中对设备造成的任何风险自负特色可实现对Android系统API以及应用自身方法的Hook可根据配置

    2022年8月16日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号