C#:检查管理员是否具有文件的写入权限

时间:2011-01-09 07:40:58

标签: c# security impersonation

问题: 我需要检查用户(本地用户或域用户,哪一个是可能的)是否具有对文件的写入权限(如果您好奇,%windir%\system32\inetsrv\config\applicationHost.config。此文件受Windows保护,您需要成为管理员写信给它。)

我的解决方案: 一般结构是:

using (Impersonator impersonator = new Impersonator(domain, username, password))
{
 try
 {
  using (FileStream fs = File.OpenWrite(appHostConfigPath))
    {
     return true;
    }
  catch
  {
     return false;
  }
 }

您可以想象,Impersonator类是一个IDisposible,它使用本机互操作来调用LogonUser。没有什么太有创意,而且有效。

我被困的地方 在启用了UAC的Windows操作系统上,即使 username 指定的用户是管理员,此函数也始终返回false。即使我的程序作为管理员运行升级,我怀疑正在发生的是模拟代码作为有限管理员运行。因此,该方法返回false。

我没有任何创造性的解决方案。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

你能看一下这个例外吗?它是否具有权限或“文件未找到异常”? 因为在Windows 7上它位于

  

%WINDIR%\ System32下\ INETSRV \设置\的applicationHost.config

也可能与Windows Vista相同。

答案 1 :(得分:0)

GetFileSecurityGetEffectiveRightsFromAcl怎么样?

第二个链接有一个实际上非常完整的例子(在C ++中)。