.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