我相信我已经成功地人格化我自己的用户帐户我的本地机器上运行的ASP.NET页面时。

使用所描述的方法此处,我已经成功改变了从ASPNET WindowsIdentity.GetCurrent().Name到我的域帐户。

我可以成功地写,只有我的帐户有权访问文件系统上的文件。然而,当我尝试删除性能计数器类别,我得到的访问被拒绝的。结果 我对注册表的分支审计和告诉我的 MYMACHINE \ ASPNET在对象访问失败的。

下面是它是失败的代码:

if ( PerformanceCounterCategory.Exists ( PerfmonCategory ) )
        PerformanceCounterCategory.Delete ( PerfmonCategory );

及其失败上的删除呼叫。

(我的账户是管理员,我可以成功运行的ASP.NET上下文之外相同的码)。

我怀疑这System.Diagnostics命名空间中调用实际上是调用一些COM进程,不管怎样,我正在因为第二跳的反弹。任何人都可以证实可能什么呢?

编辑: 例外: 访问被拒绝 说明:在当前Web请求的执行过程中发生未处理的异常。请检查堆栈跟踪有关该错误的详细信息以及它起源于代码。

异常详细信息:

  

System.ComponentModel.Win32Exception:访问被拒绝

下完全信任运行。

有帮助吗?

解决方案

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

其他提示

您确实需要在以添加或删除性能计数器的管理员。

我不知道为什么你要使用Win32 API调用做你的模拟 - 它已经有一段时间,因为我用它搞砸,但我认为你需要做的是使用

WindowsIdentity.GetCurrent().Impersonate()

需要明确的是,您首先需要使用Windows身份验证的Web应用程序进行身份验证,然后你应该能够拨打电话冒充()。

冒充()方法

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top