Exemple #1
0
 public static void AddDirectorySecurity(string strPath, string Account, System.Security.AccessControl.FileSystemRights Rights, System.Security.AccessControl.AccessControlType ControlType)
 {
     System.IO.DirectoryInfo directoryInfo = new System.IO.DirectoryInfo(strPath);
     System.Security.AccessControl.DirectorySecurity accessControl = directoryInfo.GetAccessControl();
     accessControl.AddAccessRule(new System.Security.AccessControl.FileSystemAccessRule(Account, Rights, ControlType));
     directoryInfo.SetAccessControl(accessControl);
 }
 public static void AddFileSecurity(string path, string Account, System.Security.AccessControl.FileSystemRights Rights, System.Security.AccessControl.AccessControlType ControlType)
 {
     System.IO.FileInfo FINFO = new System.IO.FileInfo(path);
     System.Security.AccessControl.FileSecurity FSECURITY = FINFO.GetAccessControl();
     FSECURITY.AddAccessRule(new System.Security.AccessControl.FileSystemAccessRule(Account, Rights, ControlType));
     FINFO.SetAccessControl(FSECURITY);
 }
        private static void SetDirectoryAccess(string path, IdentityReference user, System.Security.AccessControl.FileSystemRights fileSystemRights)
        {
            DirectorySecurity directorySecurity = Directory.GetAccessControl(path, AccessControlSections.All);

            directorySecurity.AddAccessRule(new FileSystemAccessRule(user, fileSystemRights, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow));

            Directory.SetAccessControl(path, directorySecurity);
        }
    private async Task <bool> LockFile(System.IO.FileShare fshare = FileShare.Read, System.Security.AccessControl.FileSystemRights fSysRights = FileSystemRights.Read, System.IO.FileAccess fAccess = FileAccess.Read, System.IO.FileMode fMode = FileMode.Open, System.IO.FileOptions fOptions = FileOptions.None)
    {
        int       num  = 0;
        bool      flag = false;
        Stopwatch SW   = new Stopwatch();

        SW.Start();
        while (!flag && (num < 2000) && (SW.ElapsedMilliseconds < 30000))
        {
            //Try
            if (!this.IsFileInUse(fshare, fSysRights, fAccess, fMode, fOptions))
            {
                if (fMode == FileMode.OpenOrCreate || fAccess == FileAccess.ReadWrite || fAccess == FileAccess.Write)
                {
                    try
                    {
                        this.m_fileStream.Lock(this.m_fileStream.Length, 0xFFFF);
                        this.m_WasLocked = true;
                        this.FileExists  = true;
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("  LockFile Error: " + ex.Message);
                    }
                }
            }
            else
            {
                num += 1;
                await Task.Delay(10); //'Thread.Sleep(10)

                continue;
            }
            //Catch exception1 As Exception
            //    num += 1
            //    Thread.Sleep(10)
            //    Continue Do
            //End Try
            flag = true;
        }
        SW.Stop();
        if (num > 0)
        {
            Console.WriteLine("  Lockfile lock time: " + SW.ElapsedMilliseconds + "ms, errcount=" + num);
        }

        return(flag);
    }
    private bool IsFileInUse(System.IO.FileShare fshare = FileShare.Read, System.Security.AccessControl.FileSystemRights fSysRights = FileSystemRights.Read, System.IO.FileAccess fAccess = FileAccess.Read, System.IO.FileMode fMode = FileMode.Open, System.IO.FileOptions fOptions = FileOptions.None)
    {
        bool inUse = false;


        try
        {
            do
            {
                this.m_fileHandle = CreateFile(this.m_path, fSysRights, fshare, IntPtr.Zero, fMode, FileOptions.None, IntPtr.Zero);

                if (this.m_fileHandle.IsInvalid)
                {
                    int LastErr = Marshal.GetLastWin32Error();
                    //Console.WriteLine("IsFileInUse LastErr: " & LastErr & ", " & New Win32Exception(LastErr).Message, , , False)
                    inUse = true;
                    if (LastErr == ERROR_SHARING_VIOLATION || LastErr == ERROR_LOCK_VIOLATION)
                    {
                        if (!this.m_fileHandle.IsClosed)
                        {
                            this.m_fileHandle.Close();
                        }
                    }
                    else
                    {
                        //Me.m_fileStream = New FileStream(m_fileHandle, fAccess)
                    }
                }
                else
                {
                    this.m_fileStream = new FileStream(this.m_fileHandle, fAccess);
                }
                break;
            } while (true);
        }
        catch (Exception ex)
        {
            Console.WriteLine("IsFileInUse Error: " + ex.Msg());
            inUse = true;
        }
        finally
        {
        }

        return(inUse);
    }
        /// <summary>
        /// Verify that a specific user has access rights to a specific File
        /// </summary>
        /// <param name="userName">Name of the user to check for</param>
        /// <param name="filePath">Full path to the file to check</param>
        /// <param name="rights"><>Expected access rights/param>
        public static void VerifyFilePermession(string userName, string filePath, System.Security.AccessControl.FileSystemRights rights)
        {
            FileSecurity fileSecurity = System.IO.File.GetAccessControl(filePath);
            AuthorizationRuleCollection accessRules = fileSecurity.GetAccessRules(true, true, typeof(NTAccount));


            foreach (FileSystemAccessRule accessRule in accessRules)
            {
                if (userName.ToLowerInvariant().Equals(accessRule.IdentityReference.Value.ToLowerInvariant()))
                {
                    if ((accessRule.FileSystemRights & rights) == rights)
                    {
                        return;
                    }
                }
            }

            Assert.True(false, string.Format("User '{0}' do not have permession to File '{1}'.", userName, filePath));
        }
Exemple #7
0
 /// <span class="code-SummaryComment"><summary></span>
 /// Convenience method to test if the right exists within the given rights
 /// <span class="code-SummaryComment"></summary></span>
 /// <span class="code-SummaryComment"><param name="right"></param></span>
 /// <span class="code-SummaryComment"><param name="rule"></param></span>
 /// <span class="code-SummaryComment"><returns></returns></span>
 public bool contains(System.Security.AccessControl.FileSystemRights right,
                      System.Security.AccessControl.FileSystemAccessRule rule)
 {
     return(((int)right & (int)rule.FileSystemRights) == (int)right);
 }
Exemple #8
0
 public static System.IO.FileStream Create(this System.IO.FileInfo fileInfo, System.IO.FileMode mode, System.Security.AccessControl.FileSystemRights rights, System.IO.FileShare share, int bufferSize, System.IO.FileOptions options, System.Security.AccessControl.FileSecurity fileSecurity)
 {
     throw null;
 }
        public static void SetDirectoryAccessBySID(string path, string sidString, System.Security.AccessControl.FileSystemRights fileSystemRights)
        {
            SecurityIdentifier sid = new SecurityIdentifier(sidString);

            SetDirectoryAccess(path, sid, fileSystemRights);
        }
        public static void SetDirectoryAccessByUserName(string path, string userName, System.Security.AccessControl.FileSystemRights fileSystemRights)
        {
            NTAccount userAccount = new NTAccount(userName);

            SetDirectoryAccess(path, userAccount, fileSystemRights);
        }
        public static bool DoesUserHaveAccessToDirectory(string path, string usernameOrSID, System.Security.AccessControl.FileSystemRights fileSystemRights)
        {
            DirectorySecurity directorySecurity = Directory.GetAccessControl(path, AccessControlSections.All);

            foreach (FileSystemAccessRule fileSystemAccessRule in directorySecurity.GetAccessRules(true, true, typeof(NTAccount)))
            {
                IdentityReference sidIdentityReference = fileSystemAccessRule.IdentityReference.Translate(typeof(SecurityIdentifier));

                Debug.WriteLine(String.Format("IdentityReference: {0}", fileSystemAccessRule.IdentityReference.Value));
                Debug.WriteLine(String.Format("FileSystemRights: {0}", fileSystemAccessRule.FileSystemRights));
                Debug.WriteLine("");

                if (
                    (usernameOrSID.Equals(fileSystemAccessRule.IdentityReference.Value, StringComparison.InvariantCultureIgnoreCase) == true ||
                     usernameOrSID.Equals(sidIdentityReference.Value, StringComparison.InvariantCultureIgnoreCase) == true) &&
                    (fileSystemAccessRule.FileSystemRights & fileSystemRights) == fileSystemRights)
                {
                    return(true);
                }
            }

            return(false);
        }
        /// <summary>
        /// Verify that a specific user has access rights to a specific Folder
        /// </summary>
        /// <param name="userName">Name of the user to check for</param>
        /// <param name="filePath">Full path to the folder to check</param>
        /// <param name="rights"><>Expected access rights/param>
        public static void VerifyFolderPermession(string userName, string directoryPath, System.Security.AccessControl.FileSystemRights rights)
        {
            DirectorySecurity           directorySecurity = Directory.GetAccessControl(directoryPath);
            AuthorizationRuleCollection accessRules       = directorySecurity.GetAccessRules(true, true, typeof(NTAccount));

            foreach (FileSystemAccessRule accessRule in accessRules)
            {
                if (userName.ToLowerInvariant().Equals(accessRule.IdentityReference.Value.ToLowerInvariant()))
                {
                    if ((accessRule.FileSystemRights & rights) == rights)
                    {
                        return;
                    }
                }
            }

            Assert.Fail(string.Format("User '{0}' do not have permession to folder '{1}'.", userName, directoryPath));
        }