检查(作为普通用户)是不是正在运行管理进程(C、Windows)

     2023-02-16     252

关键词:

【中文标题】检查(作为普通用户)是不是正在运行管理进程(C、Windows)【英文标题】:Check (as normal user) if admin process is running (C, Windows)检查(作为普通用户)是否正在运行管理进程(C、Windows) 【发布时间】:2015-02-17 16:39:29 【问题描述】:

我正在尝试检查从服务启动的进程是否正在运行。

问题是,我们将应用程序从 Windows XP 迁移到 Windows 7。该应用程序的一部分是启动一些进程的服务。另一部分是对话应用程序。此对话框应用程序尝试识别来自服务的进程是否正在运行。 进程的 pid 存储在共享内存中,因此我可以使用 WinApi 中的OpenProcess() 获取要处理的句柄,这适用于 Windows XP。如果我尝试在 Windows 7 上执行此操作,该函数会给出错误 - 访问被拒绝。

我想,我知道,为什么会这样(Windows7 中新的 0 级隔离),但我需要找到一些解决方法。

我的问题是是否可以对创建的进程设置访问权限以及如何设置(请给我一些解释的例子)?

我发现,CreateProcess() 中有一个参数,还有一个函数SetSecurityInfo(),但是我使用这个函数的方式可能不好,因为它不起作用。

为了检查进程是否正在运行,我使用了

running = (WaitForSingleObject( handle, 0 ) == WAIT_TIMEOUT);

BOOL result = GetExitCodeProcess(handle, (LPDWORD) &code);
if(result) 
    if(code == STILL_ACTIVE) 
        running = true;
    

其中handle 取自OpenProcess() 函数-OpenProcess( PROCESS_ALL_ACCESS , FALSE, pid ); 我也尝试过使用SYNCHRONIZEPROCESS_QUERY_INFORMATIONPROCESS_QUERY_LIMITED_INFORMATION。但总是拒绝访问..

每个想法都会有用。

【问题讨论】:

【参考方案1】:

问题不是会话 0 隔离(不影响进程对象)而是 UAC。在 Windows XP 中,用户进程可能具有管理权限,因此它可以为所欲为。在 Windows 7 中,您必须使用“以管理员身份运行”才能获得相同级别的权限。

你不应该乱用进程权限,这太危险了。相反,由于您已经拥有 IPC 机制(共享内存),您可以让服务检查进程是否正在运行并向用户进程报告。

触发服务执行检查的一种方法是使用QueryServiceStatusEx() 查询服务状态。您可以获取服务控制处理程序例程来检查进程是否正在运行并通过共享内存块进行报告。

【讨论】:

您可以使用在服务HandlerEx 中处理的用户定义控制代码调用ControlService @eryksun:是的,我没想到。虽然这需要更改服务的权限。 @HarryJohnston - 你知道吗,它(改变进程权限)有多危险?我只想做这个操作PROCESS_QUERY_INFORMATION。我认为QueryServiceStatusEx() 行不通。我的服务启动了另一个进程,我需要检查其中一个进程的状态。 哦,我想如果你添加了一个 ACE 来允许 SYNCHRONIZE 和 PROCESS_QUERY_LIMITED_INFORMATION 这并不重要。但是更改权限的代码中的错误可能会导致严重的麻烦。请注意,QueryServiceStatusEx() 会导致服务控制管理器向您的服务发送查询请求。在您的代码中的某个地方,您正在响应该请求,并且您可以在那里做任何您喜欢的事情 - 它没有必须只报告服务进程本身的状态,它可以进行任何其他检查这是必要的。

macOS:以编程方式检查进程是不是作为启动守护进程或启动代理运行或从命令行运行

】macOS:以编程方式检查进程是不是作为启动守护进程或启动代理运行或从命令行运行【英文标题】:macOS:programmaticcheckifprocessrunsasalaunchDaemonorlaunchAgentorfromcommand-linemacOS:以编程方式检查进程是否作为启动守护进程或启动代理运... 查看详情

如何检查正在运行的进程是不是是后台进程? [关闭]

】如何检查正在运行的进程是不是是后台进程?[关闭]【英文标题】:HowdoIcheckifarunningprocessisabackgroundprocess?[closed]如何检查正在运行的进程是否是后台进程?[关闭]【发布时间】:2016-06-1905:03:45【问题描述】:我目前正在获取我... 查看详情

如何使用 C++ 检查进程是不是正在运行

】如何使用C++检查进程是不是正在运行【英文标题】:HowtocheckifaprocessisrunningornotusingC++如何使用C++检查进程是否正在运行【发布时间】:2012-05-1714:49:47【问题描述】:如果一个进程没有运行,我不应该显示某些上下文菜单选项?... 查看详情

检查进程是不是在 Windows 上运行?

】检查进程是不是在Windows上运行?【英文标题】:CheckifaprocessisrunningornotonWindows?检查进程是否在Windows上运行?【发布时间】:2011-12-0821:12:00【问题描述】:我正在尝试创建一个python脚本,稍后我将作为服务运行该脚本。现在我... 查看详情

C++:如何检查外部程序是不是正在运行?

】C++:如何检查外部程序是不是正在运行?【英文标题】:C++:howtocheckwhetheranexternalprogramisrunning?C++:如何检查外部程序是否正在运行?【发布时间】:2011-03-3005:57:36【问题描述】:我用C++运行一个外部程序:_wsystem(exec);如果进程... 查看详情

如何检查 impala 守护进程实例和状态存储守护进程实例是不是正在运行?

】如何检查impala守护进程实例和状态存储守护进程实例是不是正在运行?【英文标题】:Howcheckwhetherinstanceofimpaladaemonandinstanceofstatestoreddeamonisrunning?如何检查impala守护进程实例和状态存储守护进程实例是否正在运行?【发布时间... 查看详情

linux系统的进程管理(代码片段)

...有一个连接到系统中的用户来启动这样的进程;它们不是作为系统功能/服务的一部分自动启动。②后台进程(也称为非交互式/自动进程:这些进程没有连接到终端;它们不需要任何用户输入。③守护进程:这是后台进程的特殊... 查看详情

用于检查特定 php 进程是不是正在运行的 Bash 脚本?

】用于检查特定php进程是不是正在运行的Bash脚本?【英文标题】:Bashscripttocheckaspecificphpprocessisrunning?用于检查特定php进程是否正在运行的Bash脚本?【发布时间】:2015-08-1305:29:12【问题描述】:我正在使用如下的nohup命令运行webs... 查看详情

C# 使用登录的用户凭据启动进程

...我正在运行具有提升的用户权限的winforms应用程序(模拟作为不同的域管理员帐户运行),但是我想启动一个子进程,即打开一个具有当前登录用户权限的URL的网络浏览器,而不是提升权限,而无需提示他们输入密码和登录信息... 查看详情

如何检测我的进程是不是正在运行 UAC 提升?

】如何检测我的进程是不是正在运行UAC提升?【英文标题】:HowcanIdetectifmyprocessisrunningUAC-elevatedornot?如何检测我的进程是否正在运行UAC提升?【发布时间】:2010-09-1021:19:19【问题描述】:我的Vista应用程序需要知道用户是以“管... 查看详情

检查是不是正在 Shiny Server 上运行交互式降价

】检查是不是正在ShinyServer上运行交互式降价【英文标题】:CheckifinteractivemarkdownisbeingrunonShinyServer检查是否正在ShinyServer上运行交互式降价【发布时间】:2017-05-1703:57:45【问题描述】:我想编写一些Rmarkdown模板,用户可以选择将... 查看详情

3day用户管理

...1、描述用户和组:系统上的每一个进程(运行程序)都是作为一个特定的用户运行的每个文件都由特定的用户拥有对文件和目录的访问受到用户的限制与正在运行的进程相关联的用户决定该进程可访问的文件和目录2、查看当前用... 查看详情

C++ fork 进程但不是子进程

...命令并将输出捕获到标准输出/文件。但是,此命令不能作为其监视的进程的子进程运行。该命令正在检测这一点。它需要作为一个单独的父进程进行分叉。有没有办法产生一个新的进程,执行命令但不是作为一个孩子?【 查看详情

用户的权限管理

用户的权限管理用户的权限管理中包含主要的四部分:普通权限、特殊权限、文件的特殊属性、FACL:一、普通权限:普通权限下的进程安全上下文包括如下几点:1、判断进程的所有者是否想要操作所有者的属主,如果是,就按... 查看详情

用户和组(代码片段)

...并不代表就是管理员了,只是说拥有了管理员组的权限。是不是管理员只有一个判断标准,就是UID是否为0.lin 查看详情

Win32:如何向 Windows 中不同用户运行的进程发布消息?

...程序都使用RegisterWindowMessage()注册相同的消息:应用程序A作为普通用户,应用程序B作为管理员,在机器上的同一用户会话中,这 查看详情

检查一个 php 进程是不是已经在运行

】检查一个php进程是不是已经在运行【英文标题】:Checkingifaphpprocessisalreadyrunning检查一个php进程是否已经在运行【发布时间】:2011-02-1211:36:06【问题描述】:我正在尝试使用临时文件demo.lock检查进程是否已在运行:demo.php:<?php... 查看详情

检查用户登录的ajax页面是不是改变

】检查用户登录的ajax页面是不是改变【英文标题】:Checkifuserloggedinonajaxpagechange检查用户登录的ajax页面是否改变【发布时间】:2012-08-1605:47:09【问题描述】:作为我正在构建的web应用程序的一部分,我需要在用户更改页面时检... 查看详情