SIGN UP MEMBER LOGIN:    
ARTICLE

Create a File Attributes Changer / Locker in a C# Windows Application

Posted by Adarsh Acharya Articles | Windows Forms C# January 28, 2012
In this project I have created not a file locker but a user friendly file attributes changer.
Reader Level:
Download Files:
 

I made this project because my friends wanted creepy software like this one. In this project I have created not a file locker but a user friendly file attributes changer. I have used two cmd commands.

Command 1 : To hide or unhide

ATTRIB [+A | -A ] [+S | -S] [+H | -H] [[drive:] [path] filename] [/S [/D]]

+ Sets an attribute.
- Clears an attribute.
R Read-only file attribute.
A Archive file attribute.
S System file attribute.
H Hidden file attribute.
/S Processes files in all directories in the specified path.
/D Process folders as well.

Command 2 : To change the security access

ICACLS (don't know the full-form)

Code icacls "path/file.ext" /t /deny or grant username : (f)
/T Traverse all subfolders to match files/directories

(f) full control
/deny the user particular rights

Name = demo
Password = pass

Always run as administrator and it always will be.

Caution Warning

  1. I cannot guarantee a robust application but I have tried and tested it many time in Windows 7.
  2. Recovery key is the file version 51350.73.4970.938 with dash 51350-73-4970-938
  3. Last but not the least I cannot be held responsible for any loss of data/monetary.
  4. The best way is for you try it first on a demo file.
  5. If you trust it then try it on main stuff.
  6. I trust your intellectual capabilities and because of that you can overcome any problem.

Troubleshooting

  1. If anything went wrong run these code in run window
  2. Including double quotes and *.* for all file and folder
  3. Attrib /s /d -h -s "C:/path/*.*"
  4. icacls "C:/path/*.*" /t /grant everyone:f
  5. Access denied means you don't have rights to change the attributes; first unblock it.
  6. Drawbacks are that you can enter only one file name in the file name box.

Example : my.mp3 (correct)
Example : my.mp3,you.mp3,all.docx (wrong) 

Read The Read me file properly


Ok that was the basic info needed to start. We will require three forms.

Application flow diagram

Login->username & pass or recovery->Main page->if recovery was used->recovery window.

Image1.gif

Main page

browsertextbox = readonly
filenametxtbox = nochanges
richtextbox=readonly
filebrowersdialog
statustrip=nochanges
4 buttons = nochanges
 

Code()

using System.IO;
namespace
 Locker
{
    public partial class mainpg : Form
    {
        public mainpg()
        {
            InitializeComponent();
        }

        //some variable we will need path and file  
        string path, file;
        
// the variable which will tell that the recovery is used      
        Login l1 = new Login(); 
 

        //the imp method which will do all the work

        //parameter command and diretor (used for directory list just to diffrentiate the commands)

        //1 for directory list and 0 for other methods

        public void cmdproc(string cmd, int dir)
        {

            //which process tho start with which command

            Process.Start("CMD.exe", cmd);
 

            //just to hide the black window and get any errors from the cmd.exe       

            Process proc = new Process();
            ProcessStartInfo info = new ProcessStartInfo();
            info.RedirectStandardOutput = true;
            info.CreateNoWindow = true;
            info.UseShellExecute = false;
            info.FileName = "cmd.exe";
            info.Arguments = cmd;
            proc.StartInfo = info;

            //now the process starts
            proc.Start();
            
//dir is used to diffrentiate the message which is going to be displayed
            if (dir == 1)
            {
                
//this will read the output from start to end
                string res = proc.StandardOutput.ReadToEnd();
                richTextBox1.Text = res;
            }
            
//any other case
            else if (dir == 0)
            {
                
//this will read only the first line of the output
                
//basically display any error or info of procesing
                string result = proc.StandardOutput.ReadLine();
                
//if the output contains an error or info
                if (result != null)
                {
                    
//if the string the word denied than the string also contain trouble shooting it
                    if (result.Contains("denied"))
                    {
                        result += " First Unblock It";
                    }
                    
//finally display it
                    too1.Text = result;
                }
                
//if there is no error then simply show done
                
else
                {
                    too1.Text = "Done";
                }
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            
//browse
            if (flbrowse.ShowDialog() == DialogResult.OK)
            {
                
//assign the path
                path = flbrowse.SelectedPath;
                pat.Text = path;
                
//create comand to display the file in the path
                
//simple dir command of cmd
                
// /c dir "C:/bla/bla/bla" /a /b"
                
// /a will display all the hidden files
                
// /b display only the name
                
// 1 will change the outputshowed
                cmdproc("/c dir " + "\"" + path + "\"" + " /a /b", 1);
            }
        } 
 

        private void button2_Click(object sender, EventArgs e)
        {
            
//if all the inputs are provided
            if (valid() == true)
            {
                
//attrib command to change the visibilty of the file


               
// /c will tell the cmd to exit as soon as the command is exicuted
                
// -s remove system file property
                
// -h remove the hidden attribute
                
// /s /d will include all the file and folder if *.* is selected

                cmdproc("/c attrib /s /d -s -h \"" + path + "\\" + file + "\"", 0);
            }
        } 
 

        private void button3_Click(object sender, EventArgs e)
        {
            
//if all the inputs are provided
            if (valid() == true)
            {
                
//attrib command to change the visibilty of the file
                
// /c will tell the cmd to exit as soon as the command is exicuted
                
// +s add system file property
                
// +h add the hidden attribute
                
// /s /d will include all the file and folder if *.* is selected
                cmdproc("/c attrib /s /d +s +h \"" + path + "\\" + file + "\"", 0);
            }
        } 
 

        private void button4_Click(object sender, EventArgs e)
        {
            
//if all the inputs are provided
            if (valid() == true)
            {
                
//icacls command to change the security of the file
                
// /t means all the file and folder inside the folder
                
// /deny everyone:(f) deny everyone (f) fullcontrol of the file
                cmdproc("/c icacls \"" + path + "\\" + file + "\"" + " /t /deny everyone:(f)", 0);
            }
        } 
 

        private void button5_Click(object sender, EventArgs e)
        {
            
//if all the inputs are provided
            if (valid() == true)
            {
                
//icacls command to change the security of the file
                
// /t means all the file and folder inside the folder
                
// /grant everyone:(f) grant everyone (f) fullcontrol of the file
                cmdproc("/c icacls \"" + path + "\\" + file + "\"" + " /t /grant everyone:(f)", 0);
            }
        }

        public bool valid()
        {
            
//clear any error
            errors.Clear();
            bool valid = false;
            
//path and file name is provided or not
            if (flbrowse.SelectedPath != "" && filena.Text != "")
            {
                valid = true;
                file = filena.Text;
            }
            
//re assigning the values of file
            if (filena.Text == "")
            {
                errors.SetError(filena, "Provide Input");
                file = "";
            }
            
//re assigning the values of path
            if (flbrowse.SelectedPath == "")
           {
                errors.SetError(pat, "Provide Input");
                path = "";
            }
            return valid;
        } 
 

        private void toolStripStatusLabel1_Click(object sender, EventArgs e)

        {
            
//show recovery window when pass and nam is clicked
            Recovery r1 = new Recovery();
            r1.ShowDialog();
        } 
 

        private void Form1_Load(object sender, EventArgs e)
        {
            l1.ShowDialog();
            
//check if recovery was used
            
//than the show name and pass should be visible           
            if (l1.rec == 1)
            {
                namnpass.Visible = true;
            }
        }

        private void pasteToolStripMenuItem_Click(object sender, EventArgs e)
        {
            
//userfriendly ness copy n paste
            richTextBox1.Copy();

            //clear the field before pasting
            
//limitation only one name at a time
            filena.Text = "";
            filena.Paste();
       }
}
 

Login (optional)

Image2.gif

namespace Locker
{
    public partial class Login : Form
    {
        public Login()
        {
            InitializeComponent();
        }
        
//number of retries
        int count = 0;
        public int rec;
        
// mainpg f1 = new mainpg(); 
 

        private void button1_Click(object sender, EventArgs e)
        {
            logic();
        }

        //user name and password validator method

        public void logic()
        {
            
//if valid is true
            if (valid())
            {
                
//maximum retry is 6
                if (count < 6)
                {
                    
//username and password checking
                    if (textBox1.Text == "demo" && textBox2.Text == "pass")
                    {
                        this.Hide();
                        
//this.Close();
                    }
                    
//if the recovery key is not empty
                    else if (textBox3.Text != "")
                    {
                        
//checks the key
                        if (textBox3.Text == "51350-73-4970-938")
                        {
                            
//rec variable is 1 because this is tell the app that the recovery is used
                            rec = 1;
                            
//trying to store the value of rec in other form which will really use it
                            
//hide this form and show the main form
                            
//f1.Show();
                            this.Hide();
                            
//this.Close();
                        }
                        
else
                        {
                            
//error if the key does not match
                            errorProvider1.Clear();
                            errorProvider1.SetError(textBox3, "Input in this format 00000-00-0000-000");
                            MessageBox.Show("Attempts Left " + (6 - count), "Access Denied", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                        }
                    }

                    else
 

                    {
                        
//message if the name and pass does not match
                        MessageBox.Show("Attempts Left " + (6 - count), "Access Denied", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                    } 
                }

                else
                {
                    
//if the retry is over
                    MessageBox.Show("This Was Your Last Attempt Bye Bye""Access Denied", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                    Application.Exit();

                }
                
//increment retry
                count++;
            }
        }
        
//checks if any required field is empty??
        public bool valid()
        {
            errorProvider1.Clear();
            bool val = true;
            if (textBox1.Text == "")
            {
                errorProvider1.SetError(textBox1, "Provide Input");
                val = false;
            }
            if (textBox2.Text == "")
            {

                errorProvider1.SetError(textBox2, "Provide Input");

                val = false;
            }
            if (textBox3.Text != "")
            {

                val = true;
            }
            return val; 
        }
        
//just to avoid use of mouse enter key to login
        private void Login_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                logic();
            }
        }

        private void Login_FormClosed(object sender, FormClosedEventArgs e)
        {
            Application.Exit();

        }
    }
}

Recovery (optional)

Image3.gif

Timer=1000 interval

A Dialogue box of the main page is available when the user has entered the recovery key during login.

A valid recovery key will show the name and password.

Code()

namespace Locker
{
    public partial class Recovery : Form
    {
        public Recovery()
        {
            InitializeComponent();
        }
        int i = 1;
        private void button1_Click(object sender, EventArgs e)
        {
            if (textBox3.Text == "51350-73-4970-938")
            {
                label1.Visible = label2.Visible = true;
                timer1.Enabled = true
            }
            
else
            {
                MessageBox.Show("Key Does not Match");
            } 
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            i++;
            if (i == 10)

            {
                textBox3.Text = "";
                label1.Visible = label2.Visible = false;
            }
        }
    }
}

Login to add your contents and source code to this article
share this article :
post comment
 

To add/remove features All suggestions are welcomed Thnks

Posted by Adarsh Acharya Feb 03, 2012

Thnks for appreciation

Posted by Adarsh Acharya Feb 03, 2012

this article can improve as best folder security software ............really good...

Posted by Abhishek Dubey Feb 01, 2012

Very huge,Well explained.

Posted by Sonakshi Singh Feb 01, 2012

very well explained...

Posted by Sanjoli Gupta Feb 01, 2012
Nevron Gauge for SharePoint
Become a Sponsor
PREMIUM SPONSORS
  • ceTE software specializes in components for dynamic PDF generation and manipulation. The DynamicPDF™ product line allows you to dynamically generate PDF documents, merge PDF documents and new content to existing PDF documents from within your applications. Visit DynamicPDF here
    The leading .NET charting control now features PDF, Flash and Silverlight export, visualization of large datasets and more. Deliver true charting functionality to your BI, Scorecard, Presentation or Scientific apps. Download evaluation now.
6 Months Free & No Setup Fees ASP.NET Hosting!
Become a Sponsor