65.9K
CodeProject 正在变化。 阅读更多。
Home

一个小型的 C# 类,用于模拟用户

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.94/5 (125投票s)

2005年4月11日

CPOL

3分钟阅读

viewsIcon

1494970

downloadIcon

52772

介绍了一个简化 C# 中 Windows 身份模拟的类。

引言

术语“身份模拟”在编程上下文中指的是一种技术,该技术在与最初启动应用程序的用户不同的用户上下文中执行代码,即用户上下文在应用程序执行期间临时更改一次或多次。

这样做的原因是执行应用程序的当前用户上下文不允许执行的任务。 当然,您可以授予执行应用程序的用户更多权限,但通常这是一个坏主意(由于安全限制)或不可能(例如,如果您没有对计算机的完全管理访问权限来执行此操作)。

本文介绍了一个易于使用的类来模拟用户。 在编写本文时,我发现 Marc Merrit 撰写了一篇文章(“使用 C# 进行 Windows 身份模拟”),该文章使用了与我使用的相同的 Microsoft 知识库代码(来自 Q306158)。 我文章中提供的代码的不同之处在于,您可以在 using 块中使用它来安全地释放资源,并且我使用了稍微更多的异常来报告错误。 但从表面上看,他和我的文章都做了同样的工作,所以由您来决定该怎么做。

(最新变更请参阅下方历史记录部分).

背景

我编写 Impersonator 类是因为需要编写一个带有 ASP.NET 的网页来重新启动服务器。 为了做到这一点,我需要模拟我的代码中执行实际重启的部分。

该类的构造函数通过 P/Invoke 在内部调用 Windows 函数 LogonUser。 有关构造函数的所有三个参数(usernamedomainpassword)的完整说明,请参阅 该函数的 MSDN 文档

请注意:启动身份模拟的用户上下文(即,不是切换到的用户上下文)需要设置“作为操作系统的一部分执行”权限。

使用代码

要使用代码,您只需构造 Impersonator 类,并将 usernamedomainpassword 传递给构造函数。 如果将该类的实例放置在 using 块中,则无需进一步操作。

以下是如何使用该类的示意示例

... 
using ( new Impersonator( "myUsername", "myDomainname", "myPassword" ) )
{
   ...
   
   <code that executes under the new context>
  
   ...
}
  
...

示例项目演示了本文下载中包含的技术(请查看“Program.cs”以获取主要演示源文件)。 此外,该类的完整源代码包含在源文件“Impersonator.cs”中。

要将 Impersonator 类包含到您的项目中,只需复制并将源文件“Impersonator.cs”添加到您的项目,以便将其与您的项目一起编译。

结论

在本文中,我向您展示了一个小类,可以快速轻松地模拟您的代码的一部分,以在另一个用户上下文中运行。 希望您觉得这个类有用。

如有任何问题、意见和建议,请使用本文底部的评论区。

参考

除了文章中的链接外,以下参考资料可能也很有趣

  1. Google 搜索“Windows 身份模拟

历史

  • 2005-04-11:创建了文章的第一个版本。
用于模拟用户的 C# 小类 - CodeProject - 代码之家
© . All rights reserved.