如何解决如何模拟进程以本地用户身份运行
我正在开发一种以 localUser 身份执行进程的方法,但它以 SYSTEM 身份执行。我已经尝试使用下面的代码,但需要让进程执行以尝试模拟它并阻止更改它以作为用户执行此进程。
currentDir = Directory.GetCurrentDirectory();
string assemblyFolder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
Directory.SetCurrentDirectory(Path.Combine(assemblyFolder,"MyFolder\\"));
ImpersonationUtils.LaunchAsCurrentUser(currentDir);
_currentProcess = process;
process.Start();
using (ImpersonationUtils.ImpersonateCurrentUser())
{
Logger.Log(Logger.LogSeverity.Information,"Process ID: " + process.Id);
//Process execution here.
}
这是作为currentUser执行进程的执行方法。
public static void LaunchAsCurrentUser(string cmdLine)
{
var process = Process.GetProcessesByName("myProcess").FirstOrDefault();
if (process != null)
{
var token = GetPrimaryToken(process);
if (token != IntPtr.Zero)
{
var envBlock = GetEnvironmentBlock(token);
if (envBlock != IntPtr.Zero)
{
LaunchProcessAsUser(cmdLine,token,envBlock,process.SessionId);
if (!DestroyEnvironmentBlock(envBlock))
{
throw new Win32Exception(Marshal.GetLastWin32Error(),"DestroyEnvironmentBlock failed");
}
}
CloseHandle(token);
}
}
}
public static IDisposable ImpersonateCurrentUser()
{
var process = Process.GetProcessesByName("myProcess").FirstOrDefault();
if (process != null)
{
var token = GetPrimaryToken(process);
if (token != IntPtr.Zero)
{
return Impersonate(token);
}
}
throw new Exception("Could not find myProcess.exe");
}
有没有办法在启动进程前将执行用户从SYSTEM改为LocalUser?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。