Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 无法查找父进程';窗口中,既不终止父对象也不终止父对象_C_Winapi - Fatal编程技术网

C 无法查找父进程';窗口中,既不终止父对象也不终止父对象

C 无法查找父进程';窗口中,既不终止父对象也不终止父对象,c,winapi,C,Winapi,我有一个父进程,它产生一个子进程。子进程的目标是通过终止父进程,等待几秒钟,然后再次启动它来重新启动父进程。我无法检测父级是否以管理员权限运行,但子级运行时没有管理员权限。父级有一个隐藏窗口,该窗口具有唯一的窗口类,通过该窗口可以找到该窗口并向其发送WM_CLOSE。但是,在某些安装中,子级使用类的标识符调用FindWindow()失败-找不到窗口。但是,通过EnumProcesses()枚举系统中的所有进程,然后打开每个进程,调用GetModuleFileNameEx()成功地通过父进程的可执

我有一个父进程,它产生一个子进程。子进程的目标是通过终止父进程,等待几秒钟,然后再次启动它来重新启动父进程。我无法检测父级是否以管理员权限运行,但子级运行时没有管理员权限。父级有一个隐藏窗口,该窗口具有唯一的窗口类,通过该窗口可以找到该窗口并向其发送WM_CLOSE。但是,在某些安装中,子级使用类的标识符调用FindWindow()失败-找不到窗口。但是,通过EnumProcesses()枚举系统中的所有进程,然后打开每个进程,调用GetModuleFileNameEx()成功地通过父进程的可执行路径(已知且已修复)找到父进程。但是,在进程句柄上调用TerminateProcess()会返回一个拒绝访问错误(5)。设置SeDebugPrivilege失败,因为子项没有升级的权限。
上述情况只发生在少数测试机器上,在大多数机器上它都能按预期工作-可以找到窗口,并且尝试通过TerminateProcess()杀死父级成功。我的问题是-在某些机器上配置的子级和父级之间是否存在某种隔离模式,从而导致FindWindow()和TerminateProcess()失败,或者还有其他原因吗?

我认为此链接可能对您有很大帮助:)


此源代码只是告诉您,来自ntdllNtQueryInformationProcess的函数将父ID存储为从UniqueProcessID继承而来的,存储在进程的基本信息结构中我想此链接可能会对您有很大帮助:)


此源代码只是告诉您,来自ntdllNtQueryInformationProcess的函数将父ID存储为PROCESS\u BASIC\u INFORMATION

结构中从UniqueProcessId
继承的父ID
,父ID是否启动子ID以另一用户身份运行?否,以同一用户身份运行!我已经通过获取父进程和子进程的用户名验证了这一点,它是相同的。但是,域是否可能不同或类似于此?失败的(测试)机器有什么共同点吗?它成功运行的机器与失败的机器的一般特征是什么?我不知道,测试是远程完成的。听起来好像父进程是以管理员权限运行的,而子进程不是。因此,安全性阻止从子系统访问父系统。父系统是否启动子系统以另一用户身份运行?否,以同一用户身份运行!我已经通过获取父进程和子进程的用户名验证了这一点,它是相同的。但是,域是否可能不同或类似于此?失败的(测试)机器有什么共同点吗?它成功运行的机器与失败的机器的一般特征是什么?我不知道,测试是远程完成的。听起来好像父进程是以管理员权限运行的,而子进程不是。因此,安全性会阻止从子级访问父级。