ASP.NET是否可以模拟用户删除性能计数器类别?

时间:2009-01-30 00:11:24

标签: asp.net permissions impersonation performancecounter

我相信我在本地计算机上运行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:拒绝访问

完全信任下运行。

2 个答案:

答案 0 :(得分:2)

您可以在自己的应用程序池上运行您的应用程序(总是一件好事),并为服务用户分配适当的权限,这样您就不需要模仿假冒。

答案 1 :(得分:1)

您确实需要成为管理员才能添加或删除效果计数器。

我不确定你为什么要使用Win32 API调用进行模拟 - 这已经有一段时间了,因为我搞砸了它,但我认为你需要做的只是使用

WindowsIdentity.GetCurrent().Impersonate()

要明确的是,您首先需要使用Windows身份验证在Web应用程序中进行身份验证,然后您应该可以调用Impersonate()。

Impersonate() Method