使用DirectoryServices给文件添加访问权限

using System;
using System.Collections;
using ActiveDs;

namespace PardesiServices.FixFilePermission
{
  class FileSecurity
  {
    [STAThread]
    static void Main( string[] args)
    {
        string strFile = @ "D:/mmcInst.log";
        try
        {
            ADsSecurityUtilityClass secuUtil = new ADsSecurityUtilityClass();
            object ob = secuUtil.GetSecurityDescriptor(
                strFile,
                ( int)ActiveDs.ADS_PATHTYPE_ENUM.ADS_PATH_FILE,
                ( int)ActiveDs.ADS_SD_FORMAT_ENUM.ADS_SD_FORMAT_IID);
            if ( null != ob)
            {
                ActiveDs.IADsSecurityDescriptor sd =
                  (IADsSecurityDescriptor)ob;
                ActiveDs.IADsAccessControlList obDacl =
                 (ActiveDs.IADsAccessControlList)sd.DiscretionaryAcl;
                bool bAddAce = true;
                IEnumerator obAceEnum = obDacl.GetEnumerator();
                while (obAceEnum.MoveNext())
                {
                    IADsAccessControlEntry obAce =
                     (IADsAccessControlEntry)obAceEnum.Current;
                    Console.WriteLine( "Trustee: {0}", obAce.Trustee);
                    // Check if "ASPNET" account is trustee of ACE or not.
                    if (obAce.Trustee.IndexOf( "ASPNET") != - 1)
                    {
                        // Check if this is a ALOWED Ace or not.
                        if (obAce.AceType ==
                          ( int)ADS_ACETYPE_ENUM.ADS_ACETYPE_ACCESS_ALLOWED)
                        {
                            bAddAce = false;
                        }
                    }
                }

                // If bAddAce flag is set, then we will add it.
                if (bAddAce)
                {
                    AccessControlEntryClass obNewAce =
                      new AccessControlEntryClass();
                    obNewAce.AceType =
                      ( int)ADS_ACETYPE_ENUM.ADS_ACETYPE_ACCESS_ALLOWED;
                    obNewAce.Trustee = @ "ASPNET";
                    obNewAce.AccessMask = - 1;
                    obDacl.AddAce(obNewAce);
                    sd.DiscretionaryAcl = obDacl;
                    secuUtil.SetSecurityDescriptor(
                            strFile,
                            ( int)ADS_PATHTYPE_ENUM.ADS_PATH_FILE,
                            sd,
                            ( int)ADS_SD_FORMAT_ENUM.ADS_SD_FORMAT_IID);
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值