2009-09-01 4 views
0

관리되는 스레드가 가장 (impersonation)으로 인해 사용자 컨텍스트를 변경 한시기를 확인하는 방법이 있습니까? Microsoft의 .NET 프로파일 링 API를 사용하여 관리되는 코드를 관찰하는 비 관리 코드에서이 작업을 수행 할 수 있기를 바랍니다.관리되는 스레드가 가장을 사용하여 사용자 컨텍스트를 변경 한 시점을 어떻게 알 수 있습니까?

예를 들어 일부 관리 코드가 사용자 컨텍스트 A에서 실행 중일 수 있으며 사용자 B를 가장합니다. 관리되는 코드가 API를 사용하여 수동으로 사용자 B를 가장하기 때문에 가장을 실행할 수 있습니다.

관리되지 않는 스레드에서 사용자 A에서 사용자 B로 전환하는 것을 어떻게 잡을 수 있습니까?

답변

3

내가 알고있는 한 스레드 토큰이 변경 될 때 알림이 없으므로이 작업을 안정적으로 수행 할 수 없습니다.

당신이 할 수있는 일은 대상 스레드에서 OpenThreadToken으로 전화하는 것입니다. API가 성공하면 (토큰 반환) 스레드가 다른 사용자를 가장합니다. 그게 충분할 수도 있습니다.

+0

음, 재미 있습니다. OpenThreadToken은 스레드 핸들을 사용합니다. 내 관찰 codepath가 네이티브이며 관리되는 스레드가 가장 할 때 추적하려고하면 스레드 ID를 얻을 수 있다고 생각되지만 Windows 스레드 핸들을 얻을 수 있는지 확신 할 수 없습니다. ID를 어떻게 변환합니까? 또한 OpenThreadToken을 호출하여 관리되는 스레드를 지속적으로 폴링하여 솔루션을 구현하는 방법은 무엇입니까? –

+0

OpenThread는 스레드 ID를 사용합니다. –

0

Thread.CurrentPrincipal 속성을 확인할 수 있습니다. OpenThreadToken 호출을 기반으로 WindowsPrincipal을 반환합니다.

관련 문제