C 无法查找父进程';窗口中,既不终止父对象也不终止父对象
我有一个父进程,它产生一个子进程。子进程的目标是通过终止父进程,等待几秒钟,然后再次启动它来重新启动父进程。我无法检测父级是否以管理员权限运行,但子级运行时没有管理员权限。父级有一个隐藏窗口,该窗口具有唯一的窗口类,通过该窗口可以找到该窗口并向其发送WM_CLOSE。但是,在某些安装中,子级使用类的标识符调用FindWindow()失败-找不到窗口。但是,通过EnumProcesses()枚举系统中的所有进程,然后打开每个进程,调用GetModuleFileNameEx()成功地通过父进程的可执行路径(已知且已修复)找到父进程。但是,在进程句柄上调用TerminateProcess()会返回一个拒绝访问错误(5)。设置SeDebugPrivilege失败,因为子项没有升级的权限。C 无法查找父进程';窗口中,既不终止父对象也不终止父对象,c,winapi,C,Winapi,我有一个父进程,它产生一个子进程。子进程的目标是通过终止父进程,等待几秒钟,然后再次启动它来重新启动父进程。我无法检测父级是否以管理员权限运行,但子级运行时没有管理员权限。父级有一个隐藏窗口,该窗口具有唯一的窗口类,通过该窗口可以找到该窗口并向其发送WM_CLOSE。但是,在某些安装中,子级使用类的标识符调用FindWindow()失败-找不到窗口。但是,通过EnumProcesses()枚举系统中的所有进程,然后打开每个进程,调用GetModuleFileNameEx()成功地通过父进程的可执
上述情况只发生在少数测试机器上,在大多数机器上它都能按预期工作-可以找到窗口,并且尝试通过TerminateProcess()杀死父级成功。我的问题是-在某些机器上配置的子级和父级之间是否存在某种隔离模式,从而导致FindWindow()和TerminateProcess()失败,或者还有其他原因吗?我认为此链接可能对您有很大帮助:)
此源代码只是告诉您,来自ntdllNtQueryInformationProcess的函数将父ID存储为从UniqueProcessID继承而来的,存储在进程的基本信息结构中我想此链接可能会对您有很大帮助:)
此源代码只是告诉您,来自ntdllNtQueryInformationProcess的函数将父ID存储为PROCESS\u BASIC\u INFORMATION结构中从UniqueProcessId继承的父ID,父ID是否启动子ID以另一用户身份运行?否,以同一用户身份运行!我已经通过获取父进程和子进程的用户名验证了这一点,它是相同的。但是,域是否可能不同或类似于此?失败的(测试)机器有什么共同点吗?它成功运行的机器与失败的机器的一般特征是什么?我不知道,测试是远程完成的。听起来好像父进程是以管理员权限运行的,而子进程不是。因此,安全性阻止从子系统访问父系统。父系统是否启动子系统以另一用户身份运行?否,以同一用户身份运行!我已经通过获取父进程和子进程的用户名验证了这一点,它是相同的。但是,域是否可能不同或类似于此?失败的(测试)机器有什么共同点吗?它成功运行的机器与失败的机器的一般特征是什么?我不知道,测试是远程完成的。听起来好像父进程是以管理员权限运行的,而子进程不是。因此,安全性会阻止从子级访问父级。