Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.NET能否模拟用户删除性能计数器类别?_Asp.net_Permissions_Impersonation_Performancecounter - Fatal编程技术网

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

ASP.NET能否模拟用户删除性能计数器类别?,asp.net,permissions,impersonation,performancecounter,Asp.net,Permissions,Impersonation,Performancecounter,我相信我在本地计算机上运行ASP.NET页面时已成功模拟了自己的用户帐户 使用上述方法,我已成功地将WindowsIdentity.GetCurrent().Name从ASPNET更改为我的域帐户 我可以成功写入文件系统中只有我的帐户有权访问的文件。但是,当我尝试删除性能计数器类别时,访问被拒绝。 我对注册表的分支进行了审核,它告诉我MyMachine\ASPNET在对象访问方面失败 以下是它失败的代码: if ( PerformanceCounterCategory.Exists ( Perf

我相信我在本地计算机上运行ASP.NET页面时已成功模拟了自己的用户帐户

使用上述方法,我已成功地将
WindowsIdentity.GetCurrent().Name
从ASPNET更改为我的域帐户

我可以成功写入文件系统中只有我的帐户有权访问的文件。但是,当我尝试删除性能计数器类别时,访问被拒绝。
我对注册表的分支进行了审核,它告诉我MyMachine\ASPNET在对象访问方面失败

以下是它失败的代码:

if ( PerformanceCounterCategory.Exists ( PerfmonCategory ) )
        PerformanceCounterCategory.Delete ( PerfmonCategory );
删除调用失败

(我的帐户是admin,我可以在ASP.NET上下文之外成功运行相同的代码)

我怀疑这个System.Diagnostics命名空间调用实际上是在调用某个COM进程,不知何故,由于第二个跃点,我被反弹了。有人能证实可能发生了什么吗

编辑: 例外情况: 访问被拒绝 描述:执行当前web请求期间发生未处理的异常。请查看堆栈跟踪以了解有关错误的更多信息以及错误在代码中的起源

例外情况详情:

System.ComponentModel.Win32异常:访问被拒绝


在完全信任下运行。

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

我不确定您为什么要使用Win32 API调用来进行模拟-我已经有一段时间没有处理过它了,但我认为您需要做的就是使用

WindowsIdentity.GetCurrent().Impersonate()
为了清楚起见,首先需要使用Windows身份验证在web应用程序中进行身份验证,然后应该能够调用Impersonate()


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

授予应用程序池管理员权限有点可怕,您不觉得吗?此外,我怀疑它是否会一直需要这些权利,所以最好只在需要时提升。愚蠢的问题-为什么你要在你的web应用程序中创建/删除类别cfrom?我以为您将创建counters.config的实例,因为在本例中,我在本地开发环境中运行,性能计数器在web.config中配置。当应用程序安装到共享开发、QA或生产时,安装程序负责计数器的创建。我想让它在本地开发环境中易于使用。那么,授予应用程序池管理员权限看起来并不可怕——这只是开发,所以可能没有什么害处……实际上,您仍然需要所有可爱的Win32 API调用来获得正确的登录令牌:WindowsIdentity WindowsIdentity=new WindowsIdentity(logonToken)我认为你不需要logonToken。。。这就是为什么会出现无参数重载。实际上,我已经模拟了两种方式,没有任何有效的更改。我知道模拟工作正常,因为我可以使用受限权限写入文件。粘贴抛出的异常如何,如果您在部分信任下运行,我打赌这是CAS异常