Cel*_*Cel 13 .net c# impersonation windows-services process
我有一个服务,当用户登录时产生WPF应用程序进程.
但由于某些原因,WPF应用程序在创建后大约10分钟被杀死了?终止是立即的,事件日志中没有找到跟踪,也没有在WPF应用程序中调用任何正常的关闭/退出事件.
事实上,当终止发生时,Windows 7似乎挂了一秒钟,鼠标变得没有响应,然后在短暂的延迟(当它正常化,但现在缺少创建的过程)时表现出鼠标手势.
public partial class Service1 : ServiceBase
{
public Service1()
{
InitializeComponent();
CanHandleSessionChangeEvent = true;
}
protected override void OnSessionChange(SessionChangeDescription changeDescription)
{
if (changeDescription.Reason == SessionChangeReason.SessionLogon
&& changeDescription.SessionId > 0)
{
ApplicationLoader.PROCESS_INFORMATION procInfo;
ApplicationLoader.StartProcessAndBypassUAC(@"myapp.exe", out procInfo);
}
base.OnSessionChange(changeDescription);
}
}
Run Code Online (Sandbox Code Playgroud)
// ...
bool result = CreateProcessAsUser(hUserTokenDup, // client's access token
null, // file to execute
applicationName, // command line
ref sa, // pointer to process SECURITY_ATTRIBUTES
ref sa, // pointer to thread SECURITY_ATTRIBUTES
false, // handles are not inheritable
dwCreationFlags, // creation flags
IntPtr.Zero, // pointer to new environment block
null, // name of current directory
ref si, // pointer to STARTUPINFO structure
out procInfo // receives information about new process
);
Run Code Online (Sandbox Code Playgroud)
SYSTEM从winlogon.exe(但在会话1+中运行)复制管理令牌,因为如果您复制特定的用户令牌(例如从explorer.exe),那么崩溃就不复存在了!explorer.exe而不是winlogon.exe虽然使用explorer.exe摆脱终止我失去了管理权限,这对我不起作用
任何想法如何使它与winlogon进程令牌一起使用?
exlorer.exe令牌以使副本升高?我猜测使用TokenElevation和SetTokenInformation或AdjustTokenPrivilegesWindows 7修补禁止这种程序假冒?SYSTEM),但再次,没有密码知识/提示(不包括CreateProcessWithLogonW)好吧,我只是建议你一个解决方法:为什么你不把你的核心功能放在Windows服务中,然后使用wpf应用程序作为前端?因此,如果用户将其终止,则不会停止该服务.然后,服务可以定期检查wpf前端是否已启动,如果需要,可以重新启动它.
我认为这将是一个更"可信"的设计,你正在尝试做的,这可能让防病毒软件认为你是一个糟糕的软件并阻止你.
为了保护Windows服务,还有另一个问题:保护Windows服务不受信任的用户
| 归档时间: |
|
| 查看次数: |
6320 次 |
| 最近记录: |