Click here to Skip to main content
12,354,630 members (66,676 online)
Click here to Skip to main content
Add your own
alternative version

Tagged as

Stats

11.1K views
157 downloads
6 bookmarked
Posted

Easier to ask for forgiveness than permissions

, 13 Jun 2014 CPOL
Rate this:
Please Sign up or sign in to vote.
how can we limit a person's specific permissions depending on his account and privileges?

Introduction

Some people are thinking better to ask for forgiveness then permission? (Sorry for the pun in the title). In the modern computing environment, file level permissions are important in operating systems. We do not interact with them directly in most instances in our normal everyday lives. Most of us can create an administrator account, yet know little to nothing about how we can limit a person's specific permissions except for technical gurus, IT users, or power users. So, how can we limit a person's specific permissions depending on his account and privileges? I will explain how to change file level permissions below in VB.NET.

Requirements

  1. Dotnet framework 4.5 or Above
  2. Windows 7 Operating System or Above
  3. Time: Takes about 30-45 minutes to code depending on the amount of permissions that are going to be added or removed from the file. However, your mileage may differ on how fast you complete this project.

Using the code

I. Loading Users for a specific file

Our first step in this tutorial is to load the users that have permissions for a specific file into a list box. In Figure 1, as you can see the users with permissions to the file are retrieved and added to lstUsers. Example 1 below has users loaded into lstUsers to show which users it retrieved. Note: the users that are retrieved could vary depending on your system. Some test users where created and added to the file for demonstration purposes in this tutorial.

Example 1 – Users loaded into lstUsers list box.

Private Sub BtnBrowse_Click(sender As Object, e As EventArgs) Handles BtnBrowse.Click
    OpenFileDialog1.Title = "Get access control for file"
    OpenFileDialog1.Multiselect = False
    OpenFileDialog1.InitialDirectory = "C:\Users\Jeffery\Desktop"
    If OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
        filename = OpenFileDialog1.FileName
        Dim fi As New FileInfo(OpenFileDialog1.FileName)
        Dim fs As New FileSecurity            fs = fi.GetAccessControl
        Dim object1 As Type = Type.GetType("System.Security.Principal.NTAccount")
        For Each AuthRule As FileSystemAccessRule In fs.GetAccessRules(True, True, object1)
            lstUsers.Items.Add(AuthRule.IdentityReference.Value.ToString)
        Next
    End If
End Sub

Figure 1 – Retrieving users and adding to lstUsers list box.

II. Viewing Permissions for a specific user

The second step in the tutorial is to view permissions for a specific user. As you can see in Example 2, I have selected the user test and his allow and deny permissions to the file show up. Notice how test does not have any deny permissions? This is not a code error. In fact, he does not have any revoked or denied permissions at all. In Figure 2, I show the code for lstUsers_SelectedIndexChanged Event which shows the permissions for a specific user that is selected from the list.

Example 2 - Selection of a specific user

 

Figure 2 - lstUsers_SelectedIndexChanged

Private Sub lstUsers_SelectedIndexChanged(sender As Object, e As EventArgs) Handles lstUsers.SelectedIndexChanged
       user = ""
       user = lstUsers.SelectedItem.ToString
       Dim fi As New FileInfo(filename)
       Dim fs As New FileSecurity        fs = fi.GetAccessControl
       Dim object1 As Type = Type.GetType("System.Security.Principal.NTAccount")
       lstAllowPermissions.Items.Clear()
       lstDenyPermissions.Items.Clear()
       For Each AuthRule As FileSystemAccessRule In fs.GetAccessRules(True, True, object1)
           If AuthRule.IdentityReference.Value.ToString = lstUsers.SelectedItem.ToString Then
               Dim ACL_Type As String = ""
               If AuthRule.AccessControlType.Equals(AccessControlType.Deny) Then
                   ACL_Type = "Deny"
               Else
                   ACL_Type = "Allow"
               End If

               Dim permissions As String = ""

               If (AuthRule.FileSystemRights And FileSystemRights.FullControl) = FileSystemRights.FullControl Then
                   permissions = "Full Control"
                   If ACL_Type = "Allow" And permissions <> "" Then
                       lstAllowPermissions.Items.Add(permissions)
                       lstAllowPermissions.SetItemChecked(lstAllowPermissions.Items.Count - 1, True)
                   End If
                   If ACL_Type = "Deny" And permissions <> "" Then
                       lstDenyPermissions.Items.Add(permissions)
                       lstDenyPermissions.SetItemChecked(lstDenyPermissions.Items.Count - 1, True)
                   End If
               End If
               If (AuthRule.FileSystemRights And FileSystemRights.Modify) = FileSystemRights.Modify Then
                   permissions = "Modify"
                   If ACL_Type = "Allow" And permissions <> "" Then
                       lstAllowPermissions.Items.Add(permissions)
                       lstAllowPermissions.SetItemChecked(lstAllowPermissions.Items.Count - 1, True)
                   End If
                   If ACL_Type = "Deny" And permissions <> "" Then
                       lstDenyPermissions.Items.Add(permissions)
                       lstDenyPermissions.SetItemChecked(lstDenyPermissions.Items.Count - 1, True)
                   End If
               End If
               If (AuthRule.FileSystemRights And FileSystemRights.ReadAndExecute) = FileSystemRights.ReadAndExecute Then
                   permissions = "Read And Execute"
                   If ACL_Type = "Allow" And permissions <> "" Then
                       lstAllowPermissions.Items.Add(permissions)
                       lstAllowPermissions.SetItemChecked(lstAllowPermissions.Items.Count - 1, True)
                   End If
                   If ACL_Type = "Deny" And permissions <> "" Then
                       lstDenyPermissions.Items.Add(permissions)
                       lstDenyPermissions.SetItemChecked(lstDenyPermissions.Items.Count - 1, True)
                   End If
               End If
               If (AuthRule.FileSystemRights And FileSystemRights.ListDirectory) = FileSystemRights.ListDirectory Then
                   permissions = "List Directory Contents"

                   If ACL_Type = "Allow" And permissions <> "" Then
                       lstAllowPermissions.Items.Add(permissions)
                       lstAllowPermissions.SetItemChecked(lstAllowPermissions.Items.Count - 1, True)
                   End If
                   If ACL_Type = "Deny" And permissions <> "" Then
                       lstDenyPermissions.Items.Add(permissions)
                       lstDenyPermissions.SetItemChecked(lstDenyPermissions.Items.Count - 1, True)
                   End If
               End If
               If (AuthRule.FileSystemRights And FileSystemRights.Read) = FileSystemRights.Read Then
                   permissions = "Read"

                   If ACL_Type = "Allow" And permissions <> "" Then
                       lstAllowPermissions.Items.Add(permissions)
                       lstAllowPermissions.SetItemChecked(lstAllowPermissions.Items.Count - 1, True)
                   End If
                   If ACL_Type = "Deny" And permissions <> "" Then
                       lstDenyPermissions.Items.Add(permissions)
                       lstDenyPermissions.SetItemChecked(lstDenyPermissions.Items.Count - 1, True)
                   End If
               End If
               If (AuthRule.FileSystemRights And FileSystemRights.ReadPermissions) = FileSystemRights.ReadPermissions Then
                   permissions = "Read Permissions"

                   If ACL_Type = "Allow" And permissions <> "" Then
                       lstAllowPermissions.Items.Add(permissions)
                       lstAllowPermissions.SetItemChecked(lstAllowPermissions.Items.Count - 1, True)
                   End If
                   If ACL_Type = "Deny" And permissions <> "" Then
                       lstDenyPermissions.Items.Add(permissions)
                       lstDenyPermissions.SetItemChecked(lstDenyPermissions.Items.Count - 1, True)
                   End If
               End If
               If (AuthRule.FileSystemRights And FileSystemRights.Write) = FileSystemRights.Write Then
                   permissions = "Write"

                   If ACL_Type = "Allow" And permissions <> "" Then
                       lstAllowPermissions.Items.Add(permissions)
                       lstAllowPermissions.SetItemChecked(lstAllowPermissions.Items.Count - 1, True)
                   End If
                   If ACL_Type = "Deny" And permissions <> "" Then
                       lstDenyPermissions.Items.Add(permissions)
                       lstDenyPermissions.SetItemChecked(lstDenyPermissions.Items.Count - 1, True)
                   End If
               End If
               If (AuthRule.FileSystemRights And FileSystemRights.WriteAttributes) = FileSystemRights.WriteAttributes Then
                   permissions = "Write Attributes"

                   If ACL_Type = "Allow" And permissions <> "" Then
                       lstAllowPermissions.Items.Add(permissions)
                       lstAllowPermissions.SetItemChecked(lstAllowPermissions.Items.Count - 1, True)
                   End If
                   If ACL_Type = "Deny" And permissions <> "" Then
                       lstDenyPermissions.Items.Add(permissions)
                       lstDenyPermissions.SetItemChecked(lstDenyPermissions.Items.Count - 1, True)
                   End If
               End If
               If (AuthRule.FileSystemRights And FileSystemRights.WriteData) = FileSystemRights.WriteData Then
                   permissions = "Write Data"

                   If ACL_Type = "Allow" And permissions <> "" Then
                       lstAllowPermissions.Items.Add(permissions)
                       lstAllowPermissions.SetItemChecked(lstAllowPermissions.Items.Count - 1, True)
                   End If
                   If ACL_Type = "Deny" And permissions <> "" Then
                       lstDenyPermissions.Items.Add(permissions)
                       lstDenyPermissions.SetItemChecked(lstDenyPermissions.Items.Count - 1, True)
                   End If
               End If
               If (AuthRule.FileSystemRights And FileSystemRights.Traverse) = FileSystemRights.Traverse Then
                   permissions = "Trasverse Folder"

                   If ACL_Type = "Allow" And permissions <> "" Then
                       lstAllowPermissions.Items.Add(permissions)
                       lstAllowPermissions.SetItemChecked(lstAllowPermissions.Items.Count - 1, True)
                   End If
                   If ACL_Type = "Deny" And permissions <> "" Then
                       lstDenyPermissions.Items.Add(permissions)
                       lstDenyPermissions.SetItemChecked(lstDenyPermissions.Items.Count - 1, True)
                   End If
               End If
               If (AuthRule.FileSystemRights And FileSystemRights.ReadAttributes) = FileSystemRights.ReadAttributes Then
                   permissions = "Read Attributes"

                   If ACL_Type = "Allow" And permissions <> "" Then
                       lstAllowPermissions.Items.Add(permissions)
                       lstAllowPermissions.SetItemChecked(lstAllowPermissions.Items.Count - 1, True)
                   End If
                   If ACL_Type = "Deny" And permissions <> "" Then
                       lstDenyPermissions.Items.Add(permissions)
                       lstDenyPermissions.SetItemChecked(lstDenyPermissions.Items.Count - 1, True)
                   End If
               End If
               If (AuthRule.FileSystemRights And FileSystemRights.ChangePermissions) = FileSystemRights.ChangePermissions Then
                   permissions = "Change Permissions"

                   If ACL_Type = "Allow" And permissions <> "" Then
                       lstAllowPermissions.Items.Add(permissions)
                       lstAllowPermissions.SetItemChecked(lstAllowPermissions.Items.Count - 1, True)
                   End If
                   If ACL_Type = "Deny" And permissions <> "" Then
                       lstDenyPermissions.Items.Add(permissions)
                       lstDenyPermissions.SetItemChecked(lstDenyPermissions.Items.Count - 1, True)
                   End If
               End If
               If (AuthRule.FileSystemRights And FileSystemRights.CreateFiles) = FileSystemRights.CreateFiles Then
                   permissions = "Create Files"

                   If ACL_Type = "Allow" And permissions <> "" Then
                       lstAllowPermissions.Items.Add(permissions)
                       lstAllowPermissions.SetItemChecked(lstAllowPermissions.Items.Count - 1, True)
                   End If
                   If ACL_Type = "Deny" And permissions <> "" Then
                       lstDenyPermissions.Items.Add(permissions)
                       lstDenyPermissions.SetItemChecked(lstDenyPermissions.Items.Count - 1, True)
                   End If
               End If
           End If
       Next

   End Sub

III.Adding/Removing Permissions

In this section, we add and change permissions but do not set them on the file. The next code section will show how to set the new permissions on the file. In this section we are adding new permissions to allow or deny permission lists with permissions to be set on the file. In Figure 3, permissions are added to allow or deny lists depending upon what is selected in the cboACLType list box. In Figure 4, the code is displayed for removing currently displayed Allow or Deny permissions. Note: you must remove the permission before changing to the next user or changes may be lost. To remove an item, uncheck it in the list box and click Remove Permissions.

Figure 3 - Add New Allow or Deny Permissions

Private Sub BtnAdd_Click(sender As Object, e As EventArgs) Handles BtnAdd.Click
     If cboACLType.SelectedItem = "Allow" Then
         If lstAllowPermissions.Items.IndexOf(cboPermissionList.SelectedItem) = -1 And filename <> "" And lstUsers.SelectedIndex <> -1 Then 'filename must be something or a files properties have not been loaded
             lstAllowPermissions.Items.Add(cboPermissionList.SelectedItem.ToString)
             lstAllowPermissions.SetItemChecked(lstAllowPermissions.Items.Count - 1, True)
             AllowPermissions.Add(lstAllowPermissions.Items.Item(lstAllowPermissions.Items.IndexOf(cboPermissionList.SelectedItem.ToString)))
         End If
     ElseIf cboACLType.SelectedItem = "Deny" Then
         If lstDenyPermissions.Items.IndexOf(cboPermissionList.SelectedItem) = -1 And filename <> "" And lstUsers.SelectedIndex <> -1 Then
             lstDenyPermissions.Items.Add(cboPermissionList.SelectedItem.ToString)
             lstDenyPermissions.SetItemChecked(lstDenyPermissions.Items.Count - 1, True)
             DenyPermissions.Add(lstDenyPermissions.Items.Item(lstDenyPermissions.Items.IndexOf(cboPermissionList.SelectedItem.ToString)))
         End If
     End If
 End Sub

Figure 4 - Removing Allow or Deny Permissions

Private Sub BtnRemovePermissions_Click(sender As Object, e As EventArgs) Handles BtnRemovePermissions.Click
      Dim count As Integer
      count = lstAllowPermissions.Items.Count - 1
      If count <> -1 Then
          For allow = 0 To count
              If allow = lstAllowPermissions.Items.Count Then
                  Exit For
              End If
              If lstAllowPermissions.GetItemCheckState(allow) = CheckState.Unchecked Then 'if an item is not checked then remove it
                  lstAllowPermissions.Items.RemoveAt(allow)
                  count = count - 1
              End If
          Next
          If lstAllowPermissions.Items.Count > 0 Then
              If lstAllowPermissions.GetItemCheckState(lstAllowPermissions.Items.Count - 1) = CheckState.Unchecked Then 'remove the last item seperately because it causes an error if I remove it first thing.
                  lstAllowPermissions.Items.RemoveAt(lstAllowPermissions.Items.Count - 1)
              End If
          End If
      End If
      count = 0
      count = lstDenyPermissions.Items.Count - 1
      If count <> -1 Then
          For deny = 0 To count
              If lstDenyPermissions.GetItemCheckState(deny) = CheckState.Unchecked Then 'if an item is not checked then remove it
                  lstDenyPermissions.Items.RemoveAt(deny)
              End If
          Next
          If lstDenyPermissions.Items.Count > 0 Then
              If lstDenyPermissions.GetItemCheckState(lstDenyPermissions.Items.Count - 1) = CheckState.Unchecked Then 'remove the last item seperately because it causes an error if I remove it first thing.
                  lstDenyPermissions.Items.RemoveAt(lstDenyPermissions.Items.Count - 1)
              End If
          Else
          End If
      End If
  End Sub

In Figures 5+6, I use the selectedindexchanged event of deny and allow permission list boxes to change permissions based on what is checked.

Figure 5 - Adding changed Allow permissions

Private Sub lstAllowPermissions_SelectedIndexChanged(sender As Object, e As EventArgs) Handles lstAllowPermissions.SelectedIndexChanged
       AllowPermissions.Clear() 'clear the list of allowpermissions before adding the new allow permissions
       For i = 0 To lstAllowPermissions.CheckedItems.Count - 1
           AllowPermissions.Add(lstAllowPermissions.CheckedItems.Item(i).ToString)
       Next
   End Sub

Figure 6 - Adding changed Deny permissions

Private Sub lstDenyPermissions_SelectedIndexChanged(sender As Object, e As EventArgs) Handles lstDenyPermissions.SelectedIndexChanged
     DenyPermissions.Clear() 'clear the list of all deny permissions before adding the new deny permissions
     For i = 0 To lstDenyPermissions.CheckedItems.Count - 1
         DenyPermissions.Add(lstDenyPermissions.CheckedItems.Item(i).ToString)
     Next
 End Sub

In example 3, you can see when looking at the picture that I added a deny permission of List Directory Contents for the user test. To add the deny permission, I selected the permission to deny and Deny from the combo boxes and then clicked add permissions. Note: deny permissions override allow permissions for local files so I do not need to revoke a permission if it is denied.

Example 3 - Adding a deny permission of List Directory contents to user test.

IV.Setting Permissions

In Figure 7, I call the SetPermissions function for the SetPermissions Button. In Figure 8, the SetPermissions function sets the permissions for our file we selected in Figure 1.

Figure 7 - Set Permissions Button code

Private Sub BtnSetPermissions_Click(sender As Object, e As EventArgs) Handles BtnSetPermissions.Click
    If SetPermissions() = True Then
        MsgBox("done!")
    End If
End Sub

Figure 8- SetPermissions Function sets permissions for the file we selected.

Public Function SetPermissions() As Boolean
      Dim fi As New FileInfo(filename)
      Dim fs As New FileSecurity
      fs = fi.GetAccessControl
      Dim object1 As Type = Type.GetType("System.Security.Principal.NTAccount")
      Dim newrule As FileSystemAccessRule
      If AllowPermissions.Count > 0 Then
          For i = 0 To AllowPermissions.Count - 1
              Select Case AllowPermissions.Item(i)
                  Case Is = "Read"
                      newrule = New FileSystemAccessRule(user, FileSystemRights.Read, AccessControlType.Allow)
                      fs.AddAccessRule(newrule)
                      File.SetAccessControl(filename, fs)
                  Case Is = "Write"
                      newrule = New FileSystemAccessRule(user, FileSystemRights.Write, AccessControlType.Allow)
                      fs.AddAccessRule(newrule)
                      File.SetAccessControl(filename, fs)
                  Case Is = "List Directory Contents"
                      newrule = New FileSystemAccessRule(user, FileSystemRights.ListDirectory, AccessControlType.Allow)
                      fs.AddAccessRule(newrule)
                      File.SetAccessControl(filename, fs)
                  Case Is = "Create Files"
                      newrule = New FileSystemAccessRule(user, FileSystemRights.CreateFiles, AccessControlType.Allow)
                      fs.AddAccessRule(newrule)
                      File.SetAccessControl(filename, fs)
                  Case Is = "Read And Execute"
                      newrule = New FileSystemAccessRule(user, FileSystemRights.ReadAndExecute, AccessControlType.Allow)
                      fs.AddAccessRule(newrule)
                      File.SetAccessControl(filename, fs)
                  Case Is = "Transverse Folder"
                      newrule = New FileSystemAccessRule(user, FileSystemRights.Traverse, AccessControlType.Allow)
                      fs.AddAccessRule(newrule)
                      File.SetAccessControl(filename, fs)
                  Case Is = "Full Control"
                      newrule = New FileSystemAccessRule(user, FileSystemRights.FullControl, AccessControlType.Allow)
                      fs.AddAccessRule(newrule)
                      File.SetAccessControl(filename, fs)
                  Case Is = "Read Attributes"
                      newrule = New FileSystemAccessRule(user, FileSystemRights.ReadAttributes, AccessControlType.Allow)
                      fs.AddAccessRule(newrule)
                      File.SetAccessControl(filename, fs)
                  Case Is = "Read extended Attributes"
                      newrule = New FileSystemAccessRule(user, FileSystemRights.ReadExtendedAttributes, AccessControlType.Allow)
                      fs.AddAccessRule(newrule)
                      File.SetAccessControl(filename, fs)
                  Case Is = "Modify"
                      newrule = New FileSystemAccessRule(user, FileSystemRights.Modify, AccessControlType.Allow)
                      fs.AddAccessRule(newrule)
                      File.SetAccessControl(filename, fs)
                  Case Is = "Append Data"
                      newrule = New FileSystemAccessRule(user, FileSystemRights.AppendData, AccessControlType.Allow)
                      fs.AddAccessRule(newrule)
                      File.SetAccessControl(filename, fs)
                  Case Is = "Change Permissions"
                      newrule = New FileSystemAccessRule(user, FileSystemRights.ChangePermissions, AccessControlType.Allow)
                      fs.AddAccessRule(newrule)
                      File.SetAccessControl(filename, fs)
              End Select
              newrule = Nothing
          Next i
      End If
      newrule = Nothing
      If DenyPermissions.Count > 0 Then
          For i = 0 To DenyPermissions.Count - 1
              Select Case DenyPermissions.Item(i)
                  Case Is = "Read"
                      newrule = New FileSystemAccessRule(user, FileSystemRights.Read, AccessControlType.Deny)
                      fs.AddAccessRule(newrule)
                      File.SetAccessControl(filename, fs)
                  Case Is = "Write"
                      newrule = New FileSystemAccessRule(user, FileSystemRights.Write, AccessControlType.Deny)
                      fs.AddAccessRule(newrule)
                      File.SetAccessControl(filename, fs)
                  Case Is = "List Directory Contents"
                      newrule = New FileSystemAccessRule(user, FileSystemRights.ListDirectory, AccessControlType.Deny)
                      fs.AddAccessRule(newrule)
                      File.SetAccessControl(filename, fs)
                  Case Is = "Create Files"
                      newrule = New FileSystemAccessRule(user, FileSystemRights.CreateFiles, AccessControlType.Deny)
                      fs.AddAccessRule(newrule)
                      File.SetAccessControl(filename, fs)
                  Case Is = "Read And Execute"
                      newrule = New FileSystemAccessRule(user, FileSystemRights.ReadAndExecute, AccessControlType.Deny)
                      fs.AddAccessRule(newrule)
                      File.SetAccessControl(filename, fs)
                  Case Is = "Transverse Folder"
                      newrule = New FileSystemAccessRule(user, FileSystemRights.Traverse, AccessControlType.Deny)
                      fs.AddAccessRule(newrule)
                      File.SetAccessControl(filename, fs)
                  Case Is = "Full Control"
                      newrule = New FileSystemAccessRule(user, FileSystemRights.FullControl, AccessControlType.Deny)
                      fs.AddAccessRule(newrule)
                      File.SetAccessControl(filename, fs)
                  Case Is = "Read Attributes"
                      newrule = New FileSystemAccessRule(user, FileSystemRights.ReadAttributes, AccessControlType.Deny)
                      fs.AddAccessRule(newrule)
                      File.SetAccessControl(filename, fs)
                  Case Is = "Read extended Attributes"
                      newrule = New FileSystemAccessRule(user, FileSystemRights.ReadExtendedAttributes, AccessControlType.Deny)
                      fs.AddAccessRule(newrule)
                      File.SetAccessControl(filename, fs)
                  Case Is = "Modify"
                      newrule = New FileSystemAccessRule(user, FileSystemRights.Modify, AccessControlType.Deny)
                      fs.AddAccessRule(newrule)
                      File.SetAccessControl(filename, fs)
                  Case Is = "Append Data"
                      newrule = New FileSystemAccessRule(user, FileSystemRights.AppendData, AccessControlType.Deny)
                      fs.AddAccessRule(newrule)
                      File.SetAccessControl(filename, fs)
                  Case Is = "Change Permissions"
                      newrule = New FileSystemAccessRule(user, FileSystemRights.ChangePermissions, AccessControlType.Deny)
                      fs.AddAccessRule(newrule)
                      File.SetAccessControl(filename, fs)
              End Select
              newrule = Nothing
          Next i
      End If
      Return True
  End Function

Example 4 - showing how the deny permissions were applied to the file.

In Example 4, see how the Permission Entry for devices (devices.txt file) Dialog above is showing only the Deny permission of List Directory Contents and there is a new Deny rule added? The new rule is added when the List folder permission is changed to deny. This rule is only applied though when we click BtnSet Permissions (also called the Set Permissions button) before moving onto the next user. Note: these are local file permissions and do not include changing any active directory permissions.

History

 

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

jeffery c
Software Developer
United States United States
No Biography provided

You may also be interested in...

Comments and Discussions

 
GeneralMy vote of 5 Pin
Heriberto Lugo13-Jul-14 6:36
memberHeriberto Lugo13-Jul-14 6:36 
GeneralRe: My vote of 5 Pin
jeffery c19-Jul-14 5:28
memberjeffery c19-Jul-14 5:28 
GeneralRe: My vote of 5 Pin
Heriberto Lugo26-Jul-14 13:29
memberHeriberto Lugo26-Jul-14 13:29 
GeneralRe: My vote of 5 Pin
jeffery c26-Jul-14 14:55
memberjeffery c26-Jul-14 14:55 
GeneralRe: My vote of 5 Pin
Heriberto Lugo26-Jul-14 16:52
memberHeriberto Lugo26-Jul-14 16:52 
QuestionGood, but Pin
phil.o12-Jun-14 13:56
professionalphil.o12-Jun-14 13:56 
AnswerRe: Good, but Pin
jeffery c12-Jun-14 15:24
memberjeffery c12-Jun-14 15:24 
GeneralRe: Good, but Pin
pwasser12-Jun-14 16:41
memberpwasser12-Jun-14 16:41 
GeneralRe: Good, but Pin
jeffery c13-Jun-14 1:22
memberjeffery c13-Jun-14 1:22 
GeneralRe: Good, but Pin
phil.o13-Jun-14 5:24
professionalphil.o13-Jun-14 5:24 
GeneralRe: Good, but Pin
jeffery c13-Jun-14 7:48
memberjeffery c13-Jun-14 7:48 
GeneralRe: Good, but Pin
phil.o13-Jun-14 7:58
professionalphil.o13-Jun-14 7:58 
SuggestionNice article Pin
Thava Rajan11-Jun-14 20:59
memberThava Rajan11-Jun-14 20:59 
GeneralRe: Nice article Pin
jeffery c12-Jun-14 12:55
memberjeffery c12-Jun-14 12:55 
GeneralExplanation of the pun Pin
jeffery c31-May-14 14:38
memberjeffery c31-May-14 14:38 
GeneralFormatting Pin
mb-20129-May-14 23:40
membermb-20129-May-14 23:40 
GeneralRe: Formatting Pin
grralph130-May-14 2:04
membergrralph130-May-14 2:04 
GeneralRe: Formatting Pin
jeffery c30-May-14 2:24
memberjeffery c30-May-14 2:24 
GeneralRe: Formatting Pin
grralph131-May-14 13:12
membergrralph131-May-14 13:12 
GeneralRe: Formatting Pin
jeffery c31-May-14 14:33
memberjeffery c31-May-14 14:33 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web01 | 2.8.160621.1 | Last Updated 13 Jun 2014
Article Copyright 2014 by jeffery c
Everything else Copyright © CodeProject, 1999-2016
Layout: fixed | fluid