我有一个父进程,它产生一个子进程。子进程的目的是通过终止父进程、等待几秒钟然后重新启动来重新启动父进程。我无法检测父母是否以管理员权限运行,但孩子在没有管理员权限的情况下运行。父窗口有一个隐藏窗口,它有一个独特的窗口类,通过它可以找到窗口并将 WM_CLOSE 发送给它。然而,在某些安装中,孩子使用类的标识符调用 FindWindow() 失败 - 没有找到窗口。但是,枚举系统中的所有进程,通过 EnumProcesses(),然后打开每个进程,调用 GetModuleFileNameEx() 成功地通过其可执行路径找到父进程,这是已知且固定的。然而,在进程句柄上调用 TerminateProcess() 会返回拒绝访问错误 (5)。设置 SeDebugPrivilege 失败,因为孩子没有升级的权限。上述情况仅发生在少数测试机器上,在大多数机器上都按预期工作 - 可以找到窗口,并尝试通过 TerminateProcess() 杀死父级成功。我的问题是 - 在某些机器上配置的子级和父级之间是否存在某种隔离模式,从而导致 FindWindow() 和 TerminateProcess() 失败,或者还有其他原因吗?
问问题
311 次
1 回答
1
我认为这个链接可能对你有很大帮助:) GetParentProcessID
这个源码只是教你ntdll中的函数NtQueryInformationProcess将父ID作为InheritedFromUniqueProcessId存储在PROCESS_BASIC_INFORMATION结构中
于 2012-05-20T04:01:38.633 回答