我相信我在本地计算机上运行ASP.NET页面时已成功模拟了自己的用户帐户。
使用here描述的方法,我已成功将WindowsIdentity.GetCurrent().Name
从ASPNET更改为我的域帐户。
我可以成功写入文件系统上的文件,只有我的帐户才有权访问。但是,当我尝试删除性能计数器类别时,我得到拒绝访问 我在注册表的分支上进行了审计,并告诉我 MyMachine \ ASPNET在对象访问时失败。
以下是它失败的代码:
if ( PerformanceCounterCategory.Exists ( PerfmonCategory ) )
PerformanceCounterCategory.Delete ( PerfmonCategory );
删除电话失败。
(我的帐户是管理员,我可以在ASP.NET上下文外成功运行相同的代码)。
我怀疑这个System.Diagnostics命名空间调用实际上正在调用某个COM进程,不知何故我因为第二跳而被弹回。任何人都可以确认可能发生的事情吗?
编辑: 例外情况: 访问被拒绝 描述:执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪,以获取有关错误及其在代码中的起源位置的更多信息。
异常详细信息:
System.ComponentModel.Win32Exception:拒绝访问
完全信任下运行。
答案 0 :(得分:2)
您可以在自己的应用程序池上运行您的应用程序(总是一件好事),并为服务用户分配适当的权限,这样您就不需要模仿假冒。
答案 1 :(得分:1)
您确实需要成为管理员才能添加或删除效果计数器。
我不确定你为什么要使用Win32 API调用进行模拟 - 这已经有一段时间了,因为我搞砸了它,但我认为你需要做的只是使用
WindowsIdentity.GetCurrent().Impersonate()
要明确的是,您首先需要使用Windows身份验证在Web应用程序中进行身份验证,然后您应该可以调用Impersonate()。