gpt4 book ai didi

c# - Process.GetProcessById 启用 "debug mode"

转载 作者:行者123 更新时间:2023-11-30 12:58:47 25 4
gpt4 key购买 nike

在我的一个 C# 应用程序 (.NET 2) 中,我使用了一个调用一些 OpenProcess() 的非托管模式库 (C)。我最近添加了一些使用 Process.GetProcessById() 的 C# 代码。进行此更改后,即使应用于用于使它们失败的 PID,OpenProcess() 也开始成功。经过一些调查,我发现 Process.GetProcessById() 隐式设置了 SeDebugPrivilege 给应用程序(注意:当前用户拥有管理员权限)。由于在我的特定应用程序中这种行为是不可取的,因此我最终通过调用 Process.LeavDebugMode() 恢复了正常权限。

由于我找不到任何关于此的描述,我对我的程序的正确性有些担忧。调用 Process.LeavDebugMode() 来“调整”Process.GetProcessById() 的工作是否正确?简而言之,我的 Process.GetProcessById() 是否按预期工作(例如由 MSDN 记录),或者我观察到的行为是否在我的应用程序中隐藏了一些细微的错误?

我的操作系统是用于嵌入式系统的 Windows 7 SP1 64 位。

编辑:更多信息:该进程以 32 位模式运行(即它运行 32 位版本的 .NET 引擎)。另外,我添加了这个“.config”文件以确保使用的 .NET 版本是 2:

<configuration>
<startup>
<supportedRuntime version="v2.0.50727"/>
</startup>
</configuration>

EDIT2:更多实验:编写了一个普通的 C#/WindowsForm 应用程序(感谢 MS 向导 ;-)),添加了两个按钮,一个用于调用 Process.GetProcessById(),一个用于调用 Process.LeaveDebugMode()。这是相关代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
using System.Reflection;
using System.Resources;
using System.Runtime.InteropServices;


namespace testproc
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
Process proc = Process.GetProcessById(Process.GetCurrentProcess().Id);
}

private void button2_Click(object sender, EventArgs e)
{
Process.LeaveDebugMode();
}
}
}

启动应用程序(在 VS 之外),然后启动进程资源管理器。它证实了奇怪的“特征”:

  • 应用程序刚刚启动:SeDebugPrivilege 已禁用
  • 按下按钮 1:SeDebugPrivilege 已启用!
  • 按下按钮 2:SeDebugPrivilege 再次被禁用
  • 按下按钮 1:SeDebugPrivilege 仍处于禁用状态(嗯...)

因此,我只能确认我的断言(至少对于 Process.GetProcessById() 的第一次调用)。有什么想法吗?

最佳答案

看起来像是 .NET 中的错误,但在有人可以重现它之前,它可能只是您机器上的一些奇怪之处。

不管怎样,调用 LeaveDebugMode() 来解决这个问题应该是无害的。它所做的只是禁用特权,将线程返回到正常状态。 (文档没有说明,但大概在调试权限已被禁用时调用 LeaveDebugMode() 什么都不做;这就是底层 API 的行为方式。)

关于c# - Process.GetProcessById 启用 "debug mode",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28453444/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com