문제

서비스가 사용자 세션에서 프로세스를 만들 수있는 간단한 방법이 있는지 궁금합니다.

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

나는 전화를 시도했다

OpenProcessToken(GetCurrentProcess,TOKEN_ALL_ACCESS,TokenHandle);

그러나이 토큰을 사용하여 실행할 때

 CreateProcessAsUser(TokenHandle,.....)

내 프로세스는 여전히 세션 0에서 실행 중입니다.이 문제를 어떻게 해결할 수 있습니까?

나는 OLE Automation을 사용하고 있으므로 어떤 세션이 진행될지는 어떤 세션이 진행될 것인지 신경 쓰지 않습니다. 인스턴스) 세션 0에서는 다른 사용자 세션에서 생성됩니다.

모든 제안을 환영합니다. 미리 감사드립니다.

도움이 되었습니까?

해결책

나는이 문제를 직접 해결할 수 있었다.

좋아, 위에서 언급했듯이 - 토큰은 세션 0에서 실행되는 프로세스에 속합니다 ...

그래서 내가 한 일은 ... 세션 0에서 실행되지 않는 프로세스의 토큰을 찾는 것입니다. 프로세스 ID를 OpenProcessToken의 매개 변수로 취할 때. CreateProcessasuser는 동일한 세션에서 프로세스를 생성 할 것입니다 (아마도 선택한 프로세스와 동일한 크리 덴탈링).

문제는 기능을 사용하여 대부분의 프로세스에 대한 세부 정보를 얻을 수 없다는 것입니다. queryfullprocessimagename- 버그가 있기 때문에 공간이 포함 된 경로에서 생성 된 Proccesses에서는 작동하지 않기 때문입니다 (c : program files) 및 해당 기능의 또 다른 문제는 사용자 크리 덴탈을 사용하여 원래 프로세스를 실행하기 때문에 로컬 시스템 계정을 사용하여 실행중인 프로세스의 정보에 액세스 할 수 없다고 생각합니다. winlogon.exe를 내 프로세스로 가져 가고 싶었 기 때문에 꽤 나쁩니다 (새로운 개설 세션을 나타 내기 때문에).

또한 그 속임수를 성공시키기 위해서는 프로세스가 높은 보안을 요청할 수 있도록 시스템의 보안과 약간의 플레이를해야합니다. Running Processes SeassignprimaryTokenPrivilege- 사용자 세션 프로세스 (예 : Explorer.exe)에서 추출한 토큰으로 새로운 프로세스를 실행하기 위해 SecreateNokenPrivilege- 필요한지 모르겠지만 어쨌든 관련이 있기 때문에 그렇게했습니다.

이 권한을 높이는 데 성공하려면 run-> gpedit.msc 또는 run-> secpol.msc의 모든 권한에서 관련 사용자에게 프로세스를 실행하는 사용자를 추가해야합니다 (로컬 컴퓨터 정책에 따라 컴퓨터 구성 Windows 설정 보안 설정 localPolicies 사용자 권한 할당)

다음 권한에 계정을 추가하십시오 (위의 Previleges와 함께 Compaitable) :
토큰 객체를 만듭니다
디버그 프로그램
프로세스 레벨 토큰을 교체하십시오

그리고 그게 바로! :) 그것은 훌륭하게 작동했습니다! BTW, 당신은 모든 UAC 물건을 비활성화하고 싶을 수도 있습니다 ... 나는 그것이 관련되어 있는지 여부는 모르겠지만 2008 년과의 협력이 덜 고통스럽게 만들었습니다. 더 이상 성가신 팝업은 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top