2010-12-21 37 views
4

我不明白什么RevertToSelf()在.net应用程序中。检查MSDN定义它读取定义为什么是RevertToSelf()? - C#.net

The RevertToSelf function terminates the impersonation of a client application. 

那么当前用户上下文是否通过停止客户端上下文更改为sysadmin上下文?通过调用RevertToSelf()将我的代码在系统管理员模式下运行?

更新

好了,所以会发生什么,如果我调用RevertToSelf()在ASP.NET应用程序?让我们考虑一下我不会开始任何冒充。所以如果我打电话给RevertToSelf()它会恢复到应用程序池的身份?

+0

你的意思是这个Win32 API调用? http://msdn.microsoft.com/en-us/library/aa379317%28v=vs.85%29.aspx你从.NET调用?为什么不使用内置的.NET模拟? http://stackoverflow.com/questions/125341/impersonation-in-net – Rup 2010-12-21 12:23:15

+0

请检查我更新的问题。 – NLV 2010-12-21 12:30:28

+0

@Rup - 我想以管理员身份模仿。当我运行代码oWindowsIdentity.Impersonate(IntPtr.Zero)时,它抛出'令牌不能为零'异常。但它是间歇性的。 – NLV 2010-12-21 12:31:50

回答

8

RevertToSelf将终止您主动启用的任何模仿。您可以设置一个应用程序来模拟任何用户帐户。 RevertToSelf不起作用,除非您使用模拟。调用RevertToSelf只会让您的代码以管理员身份运行,如果应用程序以管理员身份开始运行并且来自配置为模拟另一个帐户的应用程序。

2

几年前,我写了一个小小的IDisposable实现类叫Impersonator自动执行模拟/回复(近)。

也许如果你看一下,它会告诉你如何以及何时使用它?

0

假设您拥有某个用户的凭据(即用户名和密码),则可以开始模拟并调用在模拟用户的上下文中执行的Win32 API。因此,您将获得您正在模拟的用户的访问权限,直到您调用RevertToSelf(),在这种情况下,您将恢复到最初启动代码的用户的访问权限。