2012-11-21 3 views
2

내 응용 프로그램이 작업에서 실행 중입니다. OpenJobObject을 사용하여이 Jobobject에 대한 핸들을 얻고 싶습니다. 나중에이 핸들을 사용할 수 있습니다. 문제는 작업 이름을 모르며 작업 이름에 NULL을 전달하면 오류 87 (매개 변수가 잘못됨)이 반환된다는 것입니다.이름을 모르더라도 JobObject에 대한 핸들을 얻는 방법은 무엇입니까?

HANDLE handle = OpenJobObject(JOB_OBJECT_QUERY, FALSE, NULL); 
if (!handle ) printf("\nError %d", GetLastError()); 
else printf("\nOK"); 

나는 또한 MSDN에서 이걸 발견 : 그것은하지 않는 한 실행되고있는 작업 개체에 대한 핸들을 얻을 수 응용 프로그램이 작업 개체의 이름이

내가 그것을 시도하는 방법이다 . 그러나 응용 프로그램은 QueryInformationJobObject 함수를 NULL로 호출하여 작업 개체에 대한 정보를 얻을 수 있습니다.

제 질문은, 어떻게 든 내 응용 프로그램이 실행되고있는 JobObject에 대한 핸들을 얻을 수 있습니까? 또는 응용 프로그램이 실행중인 작업의 이름을 얻으시겠습니까?

감사합니다.

업데이트 : 지금까지
내 코드 : 지원되는 방법이처럼 http://pastebin.com/aJ7XMmci이 지금, 내가 SetInformation :(

+0

당신은 모든 명명 된 작업 개체를 열거 할 수 있습니다 : http://www.scriptinternals.com/new/ us/support/Internal/WMI_Win32_NamedJobObject.htm –

+0

불행히도 runas는 지정된 작업 개체를 사용하지 않으므로 특정 상황에서 OpenJobObject가 도움이되지 않습니다. –

답변

0

확인에서 오류 87 (매개 변수가 잘못되었습니다)지고있어, 보이지 않는다. 그렇다고 할 수는 없습니다. :-)

시스템의 모든 핸들을 열거하려면 this question을 참조하십시오. 샘플 코드 here은 핸들을 필터링하고 특정 프로세스에 속한 것을 찾지 만 변경하기 쉽습니다. 먼저 디버그 권한을 활성화해야 할 수 있습니다.

각 핸들에 대해 프로세스에 복제 한 다음 IsProcessInJob을 호출하여 올바른 핸들인지 여부를 찾습니다.

작업을 마치면 SYSTEM_HANDLE.ObjectTypeNumber이 작업 개체에 대해 항상 같은지 확인하십시오. 아마도 (주어진 OS에서) 적어도 작업 개체 핸들 만 검사하면 코드의 효율성을 크게 높일 수 있습니다.

2 차 로그온 서비스를 실행하는 프로세스에만 필터를 적용 할 수 있습니다.이 프로세스는 runas의 작업 개체를 만드는 것으로 보이기 때문일 수 있습니다.

(이 작업을 진행 할 경우, 코드를 게시하시기 바랍니다 - 그것은 미래의 방문자를 위해 매우 유용 할 수 있습니다.)

+0

대단히 감사합니다! 이것은 작동해야합니다 ... 이론적으로 :) 그것은 나를 위해 많은 어려움을 겪었 기 때문에 나는 분명히이 일을 얻을 것입니다. 다른 질문이 있는데 누군가가 jobobjects를 사용하도록 권장합니다. http://stackoverflow.com/questions/13399313/how-to-start-a-process-and-wait-for-its-child-process-to-finish 너도 그걸 보길 바래요. 어쩌면 당신은 나의 문제를 해결할 또 다른 아이디어를 가지고 있을지도 모른다. 하지만 나는이 방법으로도이를 해결할 것이고, 준비가되면 코드를 게시 할 것이다. – kampi

+0

내 대답은 여기 보셨나요? http://stackoverflow.com/a/13405317/886887 –

+0

네, 그랬지만 불행히도 작동하지 않았습니다. setup.exe가 시작되지만 setup.exe가 두 프로세스를 시작한 후 setup.exe가 닫히고 프로그램도 종료됩니다. ( – kampi

관련 문제