【发布时间】:2017-10-31 12:05:11
【问题描述】:
我已经阅读了关于安全和注册表项的其他关于 SO 的问题,但没有任何东西可以帮助我解决我的特定用例场景。
这是我的场景:
我想做的事
我想在代码中删除 Windows 事件日志。
问题
执行该函数时,我收到 System.ComponentModel.Win32Exception。异常消息是“访问被拒绝”。
我目前的情况
我正在使用我编写的一个模拟函数,它包含 EventLog.Delete 函数,它使我进入一个对 EventLog Registry Hive 具有完全访问权限的用户上下文。随后,我感兴趣的日志也对该特定用户具有完全访问权限。
我的问题
如果我正在运行的用户(通过模拟)具有对相关日志的完全访问权限,为什么我会收到“访问被拒绝”?我已经测试了我的 Impersonation 函数,它对我编写的其他代码按预期工作。我不明白为什么我会因此而被拒绝访问。
在我的模拟功能的另一种情况下,它工作得很好,例如,如果我尝试写入运行程序的用户上下文没有写入权限的文件,那么我将无法写入文本文件,但是,如果我使用我的模拟进入 确实 具有写访问权限的用户上下文,那么它就可以正常工作(我可以写入文件)。所以我只是不明白为什么不能将相同的概念应用于注册表项。
我在这里错过了什么?
守则
其中 sw-test 是我为测试目的而创建的用户,它对我们尝试删除的注册表具有完全访问权限。
[TestMethod]
public void DeleteEventLog_ValidatedUser_DeleteLog()
{
using (new Impersonator(Environment.UserDomainName, "sw-test", "pswd"))
{
Logging logging = new Logging();
logging.DeleteEventLog("testLog");
}
}
【问题讨论】:
标签: c# security registry impersonation event-log