Csharp/C#教程:.NET:如何使用C#中的STARTUPINFOEX调用CreateProcessAsUser()分享


.NET:如何使用C#中的STARTUPINFOEX调用CreateProcessAsUser()

Web上用于调用CreateProcessAsUser()的大多数示例代码都具有与以下类似的PInvoke签名:

public static extern bool CreateProcessAsUser(IntPtr hToken, string lpApplicationName, string lpCommandLine, ref SECURITY_ATTRIBUTES lpProcessAttributes, ref SECURITY_ATTRIBUTES lpThreadAttributes, bool bInheritHandles, int creationFlags, IntPtr environment, string currentDirectory, ref STARTUPINFO startupInfo, out PROCESS_INFORMATION processInfo); 

问题是,我想通过STARTUPINFOEX,这在Vista / W7中是允许的。 如果我正在编写C / C ++那么我就可以投出它。

我应该如何在C#中处理这个问题? STARTUPINFOEX看起来像这样:

  [StructLayout(LayoutKind.Sequential)] public struct STARTUPINFOEX { public STARTUPINFO StartupInfo; public IntPtr lpAttributeList; }; 

我应该将IntPtr传递给结构吗? 如果我改变Pinvoke签名并做这样的事情……

  IntPtr pStartupInfoEx = Marshal.AllocHGlobal(Marshal.SizeOf(startupInfoEx)); Marshal.StructureToPtr(startupInfoEx, pStartupInfoEx, true); 

..当我执行CreateProcessAsUser()时崩溃我的shell ?

任何想法都感激不尽。 谢谢。

我认为你应该像STARTUPINFO一样传递它,我的意思是使用ref关键字。 结构的编组方式与STARTUPINFO完成的方式相同。

上述就是C#学习教程:.NET:如何使用C#中的STARTUPINFOEX调用CreateProcessAsUser()分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/992457.html

(0)
上一篇 2021年12月24日
下一篇 2021年12月24日

精彩推荐