2012-05-18 143 views
1

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

+0

父母是否开始让孩子作为另一个用户来运行? – wallyk

+0

不,作为同一用户运行!我通过获取父进程和子进程的用户名来验证这一点,并且它是相同的。然而,域名有可能是不同的或类似的东西? –

+0

失败(测试)机器有什么共同之处吗?它所成功的机器的一般特性与它所发生故障的机器的一般特性是什么? – wallyk

回答

1

我认为这个链接可以帮助你很多:) GetParentProcessID

这只是源教你从NTDLL NtQueryInformationProcess存储功能父ID在PROCESS_BASIC_INFORMATION结构InheritedFromUniqueProcessId