2012-05-18 2 views
1

자식 프로세스를 생성하는 부모 프로세스가 있습니다. 자식 프로세스의 목표는 부모 프로세스를 종료하고 잠시 기다린 다음 다시 시작하여 부모 프로세스를 다시 시작하는 것입니다. 부모가 관리자 권한으로 실행되는지 여부를 감지 할 수있는 방법이 없지만 자식은 관리자 권한없이 실행됩니다. 부모 클래스에는 고유 한 윈도우 클래스가있는 숨겨진 윈도우가 있으며,이를 통해 윈도우를 찾고 WM_CLOSE을 보낼 수 있습니다. 그러나 특정 설치에서는 클래스 식별자가있는 FindWindow()에 대한 자식 호출이 실패하고 창을 찾을 수 없습니다. 그러나 EnumProcesses()를 통해 시스템의 모든 프로세스를 열거하고 각 프로세스를 열면 GetModuleFileNameEx()를 호출하면 부모 프로세스가 성공적으로 알려지고 수정 된 실행 가능 경로로 찾습니다. 그러나 프로세스 핸들에서 TerminateProcess()를 호출하면 액세스 거부 오류 (5)가 반환됩니다. 하위 항목에 에스컬레이션 된 권한이 없으므로 SeDebugPrivilege 설정이 실패합니다. 위의 상황은 대부분의 컴퓨터에서 예상대로 작동하는 일부 테스트 컴퓨터에서만 발생합니다. 창을 찾을 수 있고 TerminateProcess()를 통해 부모를 죽이려고하면 성공합니다. 제 질문은 - FindWindow() 및 TerminateProcess()가 실패하거나 다른 이유가있을 수 있도록 일부 컴퓨터에서 구성된 자식과 부모 사이에 격리 모드가 있습니까?FindWindow 부모 프로세스를 찾을 수 없습니다 '창도 부모를 종료하지 않습니다.

+0

부모가 다른 사용자로 실행하도록 자식을 시작합니까? – wallyk

+0

아니요, 같은 사용자로 실행됩니다! 부모와 자식 프로세스의 사용자 이름을 가져 와서이를 확인했으며, 이는 동일합니다. 그러나 도메인이 다른가 능성이 있습니까? –

+0

실패한 (테스트) 머신에는 공통점이 있습니까? 성공한 머신과 실패한 머신의 일반적인 특성은 무엇입니까? – wallyk

답변

1

나는이 링크는 당신에게 많은 : 이 GetParentProcessID

이 소스는 단지의 ntdll 방법 NtQueryInformationProcess 상점에서 함수가 같은 부모 ID가 PROCESS_BASIC_INFORMATION 구조를 InheritedFromUniqueProcessId 당신을 가르치고 도움이 될 수 있습니다 생각

관련 문제