2

서비스가 사용자 세션에서 프로세스를 생성하는 간단한 방법이 있는지 궁금합니다.Windows-2008-server의 서비스에서 0이 아닌 세션에서 프로세스 만들기?

내 서비스가 LocalSystem 계정이 아닌 사용자 (관리자) 계정으로 실행되고 있으므로 WTSQueryUserToken 기능을 사용할 수 없습니다.

내가

OpenProcessToken(GetCurrentProcess,TOKEN_ALL_ACCESS,TokenHandle); 

를 호출 시도했지만 내가이 토큰을 사용하면

CreateProcessAsUser(TokenHandle,.....) 

내 프로세스가 계속 나는이 문제를 해결할 수있는 방법을 세션 0 에서 실행되는 실행?

저는 Ole 자동화를 사용하고 있기 때문에 어떤 세션에서 프로세스가 실행될 지에 대해서는별로 신경 쓰지 않습니다. 어떤 이유로 든 Ole이 프로세스를 생성하지 않기 때문에 예를 들어 winword.exe)를 세션 0에 넣고 다른 사용자 세션에서 만듭니다.

모든 의견을 환영합니다. 미리 감사드립니다.

답변

1

나는이 문제를 보아 준 모든 사람들에게이 문제를 직접 해결할 수있었습니다.

좋아, 내가 위에서 언급 한 바와 같이 그렇게 - 토큰이 ... 세션 0에서 실행중인 프로세스에 내가 무슨 짓을 ...없는 그 프로세스의 토큰을 찾았다됩니다

속 세션 0에서 실행 중입니다. 프로세스 ID를 OpenProcessToken의 매개 변수로 사용합니다. 은 CreateProcessAsUser보다 동일한 세션에서 프로세스를 생성합니다 (선택한 프로세스와 동일한 충돌 가능성이 있음).

문제는 내가 함수를 사용하여 대부분의 프로세스에 대한 세부 정보를 얻을 수 없다는 것입니다 : QueryFullProcessImageName - 버그가있어서 공백이 포함 된 경로에서 생성 된 프로세스에서 작동하지 않기 때문에 (예 : C : \ Program files) 그리고 그 기능을 가진 또 다른 문제는 내가 생각하기에 로컬 사용자 인터페이스를 사용하여 실행중인 프로세스의 정보에 액세스 할 수없는 사용자 cridentals를 사용하여 원래 프로세스를 실행하고 있기 때문입니다. 시스템 계정. winlogon.exe를 내 프로세스로 사용하고 싶었 기 때문에 꽤 나빴습니다 (새 세션이 열려 있기 때문에).

는 또한 트릭에 succeeed하기 위해,이 과정은 높은 보안을 요구 할 수 있도록하기 위해, 시스템의 보안을 조금 플레이해야합니다 내가이 상승 된 얻을 선택한 것입니다 : SeDebugPrivilege - 실행중인 프로세스에 대한 정보를 찾을 수 있습니다. SeAssignPrimaryTokenPrivilege - 사용자 세션 프로세스 (즉, explorer.exe)에서 추출한 토큰을 사용하여 새 프로세스를 실행하려면 SeCreateTokenPrivilege - 필요하면 알지만 어쨌든했는지는 알 수 없습니다. 그것은 관련있는 것으로 들리기 때문입니다.

이 권한 상승에 성공하려면 run-> gpedit.msc 또는 run-> secpol에서이 모든 권한의 관련 사용자에게 프로세스를 실행하는 사용자를 추가해야합니다.MSC

은 (위의 Previleges와 compaitable) 다음과 같은 권리에 계정을 추가 (로컬 컴퓨터 정책 \ 컴퓨터 구성 \ Windows 설정 \ 보안 설정에서 \ LocalPolicies 사용자 권한 할당 \) :

디버그 토큰 개체 만들기 프로그램
프로세스 수준 토큰 바꾸기

그게 전부입니다! :) 잘 작동했습니다. Btw, 당신은 모든 UAC 물건을 해제하고 싶을 수도 있습니다 ... 만약 그것이 관련이 있는지 알지 못하지만, 덜 고통스러운 2008 년 작업을 만들었습니다 - 더 이상 성가신 팝업.

+0

이 문제에 대한 귀하의 부지런한 노력에 감사드립니다. 물론 W7 Home Premium 사용자는 이러한 스냅 샷이 부족하기 때문에 이러한 설정을 퍼지 할 수 없습니다. 나는 여전히 서비스로 실행되는 동안 [link] http://synergy-foss.org 클립 보드를 제대로 작동시키기위한 해결책을 찾고 있습니다. – Barton

관련 문제