在服务中创建用户进程的方法(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 
        }
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 微服务架构技术有哪些_微服务架构组件

    微服务架构技术有哪些_微服务架构组件目录一、微服务架构实现需求二、微服务架构实现技术选型:参考标准的两个维度+微服务实现框架对比(一)技术选型的两个参考标准1.核心组件完备性2.关键要素实现难度(二)微服务实现框架对比SpringBoot/CloudDubbogRPC新锐微服务框架:Istio(ServiceMesh的设计理念)参考书籍、文献和资料:一、微服务架构实现需求技…

    2022年10月21日
  • 如何写一篇可实施的技术方案?

    如何写一篇可实施的技术方案?为何要写这篇博文?一个错误的方案设计重点是什么?拿模板说说总结

  • LoopBox 用于包装循环的盒子

    LoopBox 用于包装循环的盒子LoopBox 用于包装循环的盒子

  • 怎么查询自己的网站是否被挂马_被墙域名检测

    怎么查询自己的网站是否被挂马_被墙域名检测在我们日常seo优化工作当中,会经常碰到网站被挂马了,原因是我们很多都是用的常用的cms网站系统,如织梦、帝国等,这种网站程序都是开源的代码,所以就会有些漏洞,导致很多所谓刚入门的学习的所谓黑客们进行攻击,利用各种挂马检查工具进行攻击,导致我们的网站网页中有其他乱七八糟的页面,严重的首页打不开,后台没有权限打开等。那么接下来就为广大seo优化人员讲解一下,如果你网站被挂马了,如何检查出来,然后又如何进行防止被挂马,进行相应的措施,加强网站的安全维护。一**、那么,网站挂马检测工具有哪些呢?**1、第一种

  • python读取图片信息_糖炒栗子大的好还是小的好

    python读取图片信息_糖炒栗子大的好还是小的好这是一篇最基础的爬虫实例,大佬就不要看了,比较适合零基础或者有少量基础同学阅读

  • Android官方文档翻译-Broadcasts

    Android官方文档翻译-Broadcasts原文链接:https://developer.android.com/guide/components/broadcasts.html广播Android应用可以向Android系统和其他Android应用发送或从它们那接收广播消息,这类似于发布-订阅设计模式。当需要关注的事件发生时这些广播就会发送出去。例如Android系统在许多系统事件发生时会发送广播,比如当系统启动或设备开始充电时。应用也可以发

发表回复

您的电子邮箱地址不会被公开。

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