2010-02-19 2 views
1

내 manager.exe에서 service.exe로 시작되는 내 worker.exe의 CPU 사용량을 변경하려고합니다. Service.exe는 시스템 계정으로 실행되고 manager.exe는 로그인 한 사용자 계정으로 실행됩니다. 내가 worker.exe의 PID와의 manager.exe에서 OpenProcess에를 호출 할 때서비스에서 OpenProcess/SetProcessAffinityMask를 시작했습니다.

, 나는 procHandle에 대한 NULL 얻을 :

HANDLE procHandle = OpenProcess에 (PROCESS_SET_INFORMATION, 0, PID);

GetLastError()를 사용하면 Access Denied 오류가 발생합니다.

이 문제를 해결하려면? 어떻게 든 worker.exe를 수정하여 다른 프로세스가 자신을 완전히 제어하도록 할 수 있습니까?

답변

0

OpenProcess으로 전화하지 않아도됩니다.

서비스에는 CreateProcessAsUser 또는 CreateProcessWithLogonW을 호출 할 때 작업자에 대한 전체 권한 핸들이 이미 있어야합니다. DuplicateHandle을 사용하여 해당 핸들 버전을 관리자 프로세스에서 사용하기에 적합하게 만든 다음 서비스에서 해당 핸들을 관리자에게 보내도록합니다. 서비스는 이미 관리자에게 핸들을 가지고 있습니다. 맞습니까? DuplicateHandle에 필요합니다.

관리자가 서비스에 작업자 프로세스 변경을 요청하게하십시오.

+0

Service.exe가 프로세스를 시작했습니다. Manager.exe에서 수정하려고합니다. – Warpin

+0

죄송합니다. 나는 그 후 그것을 알아 차렸다. 그에 따라 내 대답을 업데이트했습니다. –

+0

또 다른 가능성은 service.exe가 로그인 할 때 worker.exe 프로세스의 ACL에 PROCESS_SET_INFORMATION 권한을 부여하는 것입니다. – Michael

관련 문제