2011-12-01 3 views
5

관리자로 로그온하도록 정의 된 서비스를 만듭니다.
이 서비스는 시스템 ("net use Z : \ .../user : user password")을 수행하고 성공적으로 완료합니다.서비스로 매핑 할 경우 네트워크 드라이브를 사용할 수 없음

관리자 (관리자)가 "net use"를 실행하면 Z : 실제로 추가되었지만 상태는 사용할 수 없음을 알 수 있습니다.

서비스에 ImpersonateLoggedOnUser을 추가하려고 시도했지만 도움이되지 않았습니다.

OS : Win XP

무엇이 누락 되었습니까?

+0

http://www.ljcreate.com/support/faqs/answers.asp?ID=1254가 도움이됩니까? –

+0

"OS : Win XP"를 추가 했으므로 실제로는 아니지만 감사합니다. –

+0

여러 가지 (복잡한) 방법이 있습니다. 하나는 대화 형 프로세스 중 하나와 연관된 사용자 토큰을 복제 한 다음 CreateProcessAsUser를 호출하는 것입니다. 다른 하나는 NetUseAdd에 대한 호출을 대화식 프로세스 중 하나에 주입하는 것입니다. 하지만 대화 형 컨텍스트에서 코드를 실행하여 시작하는 것이 더 확실합니다. 베르너 (Werner)의 질문을 반복하십시오. 당신은 무엇을하려고합니까? –

답변

5

ImpersonateLoggedOnUser는 보안 컨텍스트 인 사용자 토큰에서 로그온 세션을 가장하지 않습니다. 그러나 CreateProcessAsUser는 지정된 사용자 토큰과 연관된 로그온 세션에서 새 프로세스를 만들 수 있어야합니다.

이 토큰은 로그온 한 사용자와 동일한 로그온 세션에 있지 않으므로 LogonUser를 호출하여 CreateProcessAsUser에 대한 사용자 토큰을 얻을 수 없습니다. 사용자 프로세스 중 하나를 찾아 토큰을 복제해야합니다.

로그온 세션에 대한 설명이 잘 나와 있지 않지만 사용자가 인증 될 때마다 고유 한 로그온 세션이 만들어지고 각각의 로그온 세션에 별개의 네트워크 드라이브 매핑 집합이 있다는 것을 알아야합니다. 로그온 세션은 터미널 서비스 세션과 다릅니다.

Windows Vista 이상에서는 관리 사용자가 로그인 할 때 두 개의 로그온 세션이 생성됩니다. 하나는 제한된 토큰과 연결되고 다른 하나는 상승 된 토큰과 연결됩니다.

TokenStatistics 옵션과 함께 GetTokenInformation 함수를 사용하여 토큰과 관련된 로그온 세션을 조회 할 수 있습니다. 로그온 세션은 AuthenticationId LUID로 식별됩니다.

서비스를 시작하려면 먼저 사용자가 로그인 한 시간을 알아 내고 새 세션과 관련된 프로세스가 시작될 때까지 기다렸다가 상승 된 프로세스가 아닌지 확인한 다음 액세스 토큰을 복제해야합니다.

대신 가장 적합한 옵션은 응용 프로그램을 두 개의 구성 요소로 분리하는 것입니다. 하나의 구성 요소가 사용자로 실행되며 (Run 키를 사용하여 자동으로 실행합니다) 네트워크 드라이브를 매핑해야합니다. 명명 된 파이프 또는 레지스트리 키를 통해 서비스에 연결하여 필요한 정보를 얻을 수 있습니다.

3

Windows는 관리자로 로그온하고 로그온 토큰을 사용하여 서비스를 시작합니다. 대화 형으로 로그온하면 Windows에서 로그온 토큰을 만듭니다. 두 개의 토큰은 서로 관련이 없습니다. 매핑 된 장치는 하나의 세션/로그온 토큰에 매핑되므로 서비스가 장치를 매핑하면 로그온 세션에서 장치를 볼 수 없습니다.

+0

그게 문제를 설명하지만 해결 될 수 있습니까? 대화 형 토큰을 가장 할 수 있습니까? 1 세션 이상 매핑을 만들 수 있습니까? 어떤 종류의 해결 방법이 있나? –

+0

어쩌면 당신은 당신이 달성하고자하는 것을 말할 수 있으며, 왜 서비스가 대화식으로 로그온 한 사용자를위한 드라이브 매핑을 만들어야한다고 생각할 수 있습니까? –

관련 문제