[英]Can ASP.NET Impersonate a user to Delete a Performance Counter Category?
我相信在本地计算机上运行ASP.NET页面时,我已经成功模拟了自己的用户帐户。
使用此处描述的方法,我已成功将WindowsIdentity.GetCurrent().Name
从ASPNET更改为我的域帐户。
我可以成功写入文件系统上只有我的帐户有权访问的文件。 但是,当我尝试删除性能计数器类别时,出现“ 拒绝访问”的提示 。
我已经审核了注册表的分支,并告诉我MyMachine \\ ASPNET在Object Access上失败 。
这是它失败的代码:
if ( PerformanceCounterCategory.Exists ( PerfmonCategory ) )
PerformanceCounterCategory.Delete ( PerfmonCategory );
它在删除呼叫上失败。
(我的帐户是admin,我可以在ASP.NET上下文之外成功运行相同的代码)。
我怀疑这个System.Diagnostics命名空间调用实际上是在调用某些COM进程,并且由于第二跳而以某种方式被退回。 任何人都可以确认发生了什么吗?
编辑:异常:访问被拒绝说明:执行当前Web请求期间发生未处理的异常。 请查看堆栈跟踪,以获取有关错误及其在代码中起源的更多信息。
异常详细信息:
System.ComponentModel.Win32Exception:访问被拒绝
在完全信任下运行。
您可以在自己的应用程序池上运行您的应用程序(总是一件好事),并为服务用户分配适当的权限,这样您就无需弄混模拟。
您确实确实需要成为管理员才能添加或删除性能计数器。
我不确定您为什么要使用Win32 API调用来进行模拟-自从搞砸以来已经有一段时间了,但是我认为您所要做的就是使用
WindowsIdentity.GetCurrent().Impersonate()
为了清楚起见,您首先需要使用Windows身份验证在Web应用程序中进行身份验证,然后应该能够调用Impersonate()。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.