找不到FindWindow父进程'窗口,既不终止父

时间:2012-05-18 18:34:56

标签: c winapi

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

1 个答案:

答案 0 :(得分:1)

我认为这个链接可能会帮到你很多:) GetParentProcessID

此来源只是告诉您,来自ntdll NtQueryInformationProcess 的函数将父ID存储为 PROCESS_BASIC_INFORMATION 结构中的 InheritedFromUniqueProcessId