This is a program that converts SIDs with 1 – 5 sub authorities from an array of bytes to string format.
In my last post I was looking for a way to convert an array of bytes (SID: 1,2,0,0,0,0,0,5,32,0,0,0,32,2,0,0,) to normal string format (SIDString : S-1-5-32-544).
Most of the code I found on the net requires you to be on the machine that has the SID you want to convert. This program is a standalone program and can convert any SID in an array of bytes to the string format without the need to access the system for the information (only tested on Vista 64 bit at the moment).
I went back to the selfadsi.org site and looked at the conversion code they have listed there.
After I stopped trying to figure out why it worked and just started trying to figure out how to get it to work for me, things started going a little smoother. The code does work, you just have to apply it to what you want.
Below is the finished program: this is how it looks when you first open it.
This next screenshot shows the SID in an array of bytes inserted in the textbox.
It then clears the smaller text boxes with an on change event.
After running it, you get this:
This SID is actually (group account: SQLServer2005MSSQLServerADHelperUser$VISTA-PC).
When you first insert the array of bytes into the textbox, it checks the sub ID count and then verifies the amount of bytes in the array. If the number of bytes does not work out to what it should be, then a message box pops up and lets you know (see the code and it will be clearer).
If you have a trailing comma, then it will strip that out first just to avoid any problems.
Let's say though you have an account that only has 2 Sub Authority’s, then what?
This program handles that too. See below.
This SID here is for the built-in guest account. As you can see, it only has 2 Sub IDs.
When I started building this program, I started by making it just for what I needed it for, to convert a SID with 5 subs. But as I was going through it, I decided why not make it possible to convert from 1 – 5 sub IDs. I’ve actually only seen 1, 2, 4, 5 in my research using the tool I built in the last post.
The Code
Imports System.Text
Public Class Form1
Private Sub btnConvert_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnConvert.Click
Try Dim b1, b2 As String Dim RawSid As String
RawSid = tbInputString.Text
Dim SidStrCol As New Collection
Dim TrmdRawSID As String = RawSid.TrimEnd(",")
Dim stary() As String = Split(TrmdRawSID, ",", -1)
For Each strByte In stary
SidStrCol.Add(strByte)
Next
b1 = SidStrCol(1)
b2 = SidStrCol(2)
If b2 = 1 Then
sCount1()
ElseIf b2 = 2 Then
sCount2()
ElseIf b2 = 3 Then
sCount3()
ElseIf b2 = 4 Then
sCount4()
ElseIf b2 = 5 Then
sCount5()
ElseIf b2 > 5 Then MsgBox("This program only works for " & _
"SID's with 1-5 Sub Authority's" & vbNewLine & _
"Your Sub ID = " & b2.ToString, _
MsgBoxStyle.Information, "Sub ID Count To High")
End If Catch ex As Exception
If tbInputString.Text = Nothing Then
MsgBox("Please insert the SID to Convert", _
MsgBoxStyle.Information, "Error, Missing SID")
Else MsgBox(ex.Message, MsgBoxStyle.Information, _
"Some Kind Of Error Happened")
End If
End Try
End Sub
Private Sub sCount1()
Try
Dim b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12 As String
Dim RawSid As String
RawSid = tbInputString.Text
Dim SidStrCol As New Collection
Dim TrmdRawSID As String = RawSid.TrimEnd(",")
Dim stary() As String = Split(TrmdRawSID, ",", -1)
For Each strByte In stary
SidStrCol.Add(strByte)
Next
b1 = SidStrCol(1)
b2 = SidStrCol(2)
b3 = SidStrCol(3)
b4 = SidStrCol(4)
b5 = SidStrCol(5)
b6 = SidStrCol(6)
b7 = SidStrCol(7)
b8 = SidStrCol(8)
b9 = SidStrCol(9)
b10 = SidStrCol(10)
b11 = SidStrCol(11)
b12 = SidStrCol(12)
tbRevision.Text = b1
tbSubIDCount.Text = b2
tbIA1.Text = b3
tbIA2.Text = b4
tbIA3.Text = b5
tbIA4.Text = b6
tbIA5.Text = b7
tbIA6.Text = b8
tb1ID1.Text = b9
tb1ID2.Text = b10
tb1ID3.Text = b11
tb1ID4.Text = b12
tb2ID1.Text = "x"
tb2ID2.Text = "x"
tb2ID3.Text = "x"
tb2ID4.Text = "x"
tb3ID1.Text = "x"
tb3ID2.Text = "x"
tb3ID3.Text = "x"
tb3ID4.Text = "x"
tb4ID1.Text = "x"
tb4ID2.Text = "x"
tb4ID3.Text = "x"
tb4ID4.Text = "x"
tb5ID1.Text = "x"
tb5ID2.Text = "x"
tb5ID3.Text = "x"
tb5ID4.Text = "x"
Dim strIAMath As String
strIAMath = b3
strIAMath = strIAMath * 256 + b4
strIAMath = strIAMath * 256 + b5
strIAMath = strIAMath * 256 + b6
strIAMath = strIAMath * 256 + b7
strIAMath = strIAMath * 256 + b8
Dim Sub1Math As String
Sub1Math = b12
Sub1Math = (Sub1Math * 256) + b11
Sub1Math = (Sub1Math * 256) + b10
Sub1Math = (Sub1Math * 256) + b9
Dim OutputString As String
OutputString = ("S-" & b1 & "-" & strIAMath & "-" & Sub1Math)
tbOutputString.Text = OutputString
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Information, "Some Kind Of Error Happened")
End Try
End Sub
Private Sub sCount2()
Try
Dim b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, _
b11, b12, b13, b14, b15, b16 As String
Dim RawSid As String
RawSid = tbInputString.Text
Dim SidStrCol As New Collection
Dim TrmdRawSID As String = RawSid.TrimEnd(",")
Dim stary() As String = Split(TrmdRawSID, ",", -1)
For Each strByte In stary
SidStrCol.Add(strByte)
Next
b1 = SidStrCol(1)
b2 = SidStrCol(2)
b3 = SidStrCol(3)
b4 = SidStrCol(4)
b5 = SidStrCol(5)
b6 = SidStrCol(6)
b7 = SidStrCol(7)
b8 = SidStrCol(8)
b9 = SidStrCol(9)
b10 = SidStrCol(10)
b11 = SidStrCol(11)
b12 = SidStrCol(12)
b13 = SidStrCol(13)
b14 = SidStrCol(14)
b15 = SidStrCol(15)
b16 = SidStrCol(16)
tbRevision.Text = b1
tbSubIDCount.Text = b2
tbIA1.Text = b3
tbIA2.Text = b4
tbIA3.Text = b5
tbIA4.Text = b6
tbIA5.Text = b7
tbIA6.Text = b8
tb1ID1.Text = b9
tb1ID2.Text = b10
tb1ID3.Text = b11
tb1ID4.Text = b12
tb2ID1.Text = b13
tb2ID2.Text = b14
tb2ID3.Text = b15
tb2ID4.Text = b16
tb3ID1.Text = "x"
tb3ID2.Text = "x"
tb3ID3.Text = "x"
tb3ID4.Text = "x"
tb4ID1.Text = "x"
tb4ID2.Text = "x"
tb4ID3.Text = "x"
tb4ID4.Text = "x"
tb5ID1.Text = "x"
tb5ID2.Text = "x"
tb5ID3.Text = "x"
tb5ID4.Text = "x"
Dim strIAMath As String
strIAMath = b3
strIAMath = strIAMath * 256 + b4
strIAMath = strIAMath * 256 + b5
strIAMath = strIAMath * 256 + b6
strIAMath = strIAMath * 256 + b7
strIAMath = strIAMath * 256 + b8
Dim Sub1Math As String
Sub1Math = b12
Sub1Math = (Sub1Math * 256) + b11
Sub1Math = (Sub1Math * 256) + b10
Sub1Math = (Sub1Math * 256) + b9
Dim Sub2Math As String
Sub2Math = b16
Sub2Math = (Sub2Math * 256) + b15
Sub2Math = (Sub2Math * 256) + b14
Sub2Math = (Sub2Math * 256) + b13
Dim OutputString As String
OutputString = ("S-" & b1 & "-" & strIAMath & "-" & Sub1Math & "-" & Sub2Math)
tbOutputString.Text = OutputString
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Information, "Some Kind Of Error Happened")
End Try
End Sub
Private Sub sCount3()
Try Dim b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, _
b13, b14, b15, b16, b17, b18, b19, b20 As String
Dim RawSid As String
RawSid = tbInputString.Text
Dim SidStrCol As New Collection
Dim TrmdRawSID As String = RawSid.TrimEnd(",")
Dim stary() As String = Split(TrmdRawSID, ",", -1)
For Each strByte In stary
SidStrCol.Add(strByte)
Next
b1 = SidStrCol(1)
b2 = SidStrCol(2)
b3 = SidStrCol(3)
b4 = SidStrCol(4)
b5 = SidStrCol(5)
b6 = SidStrCol(6)
b7 = SidStrCol(7)
b8 = SidStrCol(8)
b9 = SidStrCol(9)
b10 = SidStrCol(10)
b11 = SidStrCol(11)
b12 = SidStrCol(12)
b13 = SidStrCol(13)
b14 = SidStrCol(14)
b15 = SidStrCol(15)
b16 = SidStrCol(16)
b17 = SidStrCol(17)
b18 = SidStrCol(18)
b19 = SidStrCol(19)
b20 = SidStrCol(20)
tbRevision.Text = b1
tbSubIDCount.Text = b2
tbIA1.Text = b3
tbIA2.Text = b4
tbIA3.Text = b5
tbIA4.Text = b6
tbIA5.Text = b7
tbIA6.Text = b8
tb1ID1.Text = b9
tb1ID2.Text = b10
tb1ID3.Text = b11
tb1ID4.Text = b12
tb2ID1.Text = b13
tb2ID2.Text = b14
tb2ID3.Text = b15
tb2ID4.Text = b16
tb3ID1.Text = b17
tb3ID2.Text = b18
tb3ID3.Text = b19
tb3ID4.Text = b20
tb4ID1.Text = "x"
tb4ID2.Text = "x"
tb4ID3.Text = "x"
tb4ID4.Text = "x"
tb5ID1.Text = "x"
tb5ID2.Text = "x"
tb5ID3.Text = "x"
tb5ID4.Text = "x"
strIAMath = b3
strIAMath = strIAMath * 256 + b4
strIAMath = strIAMath * 256 + b5
strIAMath = strIAMath * 256 + b6
strIAMath = strIAMath * 256 + b7
strIAMath = strIAMath * 256 + b8
Dim Sub1Math As String
Sub1Math = b12
Sub1Math = (Sub1Math * 256) + b11
Sub1Math = (Sub1Math * 256) + b10
Sub1Math = (Sub1Math * 256) + b9
Dim Sub2Math As String
Sub2Math = b16
Sub2Math = (Sub2Math * 256) + b15
Sub2Math = (Sub2Math * 256) + b14
Sub2Math = (Sub2Math * 256) + b13
Dim Sub3Math As String
Sub3Math = b20
Sub3Math = Sub3Math * 256 + b19
Sub3Math = Sub3Math * 256 + b18
Sub3Math = Sub3Math * 256 + b17
Dim OutputString As String
OutputString = ("S-" & b1 & "-" & strIAMath & _
"-" & Sub1Math & "-" & Sub2Math & "-" & Sub3Math)
tbOutputString.Text = OutputString
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Information, "Some Kind Of Error Happened")
End Try
End Sub
Private Sub sCount4()
Try
Dim b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, _
b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24 As String
Dim RawSid As String
RawSid = tbInputString.Text
Dim SidStrCol As New Collection
Dim TrmdRawSID As String = RawSid.TrimEnd(",")
Dim stary() As String = Split(TrmdRawSID, ",", -1)
For Each strByte In stary
SidStrCol.Add(strByte)
Next
b1 = SidStrCol(1)
b2 = SidStrCol(2)
b3 = SidStrCol(3)
b4 = SidStrCol(4)
b5 = SidStrCol(5)
b6 = SidStrCol(6)
b7 = SidStrCol(7)
b8 = SidStrCol(8)
b9 = SidStrCol(9)
b10 = SidStrCol(10)
b11 = SidStrCol(11)
b12 = SidStrCol(12)
b13 = SidStrCol(13)
b14 = SidStrCol(14)
b15 = SidStrCol(15)
b16 = SidStrCol(16)
b17 = SidStrCol(17)
b18 = SidStrCol(18)
b19 = SidStrCol(19)
b20 = SidStrCol(20)
b21 = SidStrCol(21)
b22 = SidStrCol(22)
b23 = SidStrCol(23)
b24 = SidStrCol(24)
tbRevision.Text = b1
tbSubIDCount.Text = b2
tbIA1.Text = b3
tbIA2.Text = b4
tbIA3.Text = b5
tbIA4.Text = b6
tbIA5.Text = b7
tbIA6.Text = b8
tb1ID1.Text = b9
tb1ID2.Text = b10
tb1ID3.Text = b11
tb1ID4.Text = b12
tb2ID1.Text = b13
tb2ID2.Text = b14
tb2ID3.Text = b15
tb2ID4.Text = b16
tb3ID1.Text = b17
tb3ID2.Text = b18
tb3ID3.Text = b19
tb3ID4.Text = b20
tb4ID1.Text = b21
tb4ID2.Text = b22
tb4ID3.Text = b23
tb4ID4.Text = b24
tb5ID1.Text = "x"
tb5ID2.Text = "x"
tb5ID3.Text = "x"
tb5ID4.Text = "x"
strIAMath = b3
strIAMath = strIAMath * 256 + b4
strIAMath = strIAMath * 256 + b5
strIAMath = strIAMath * 256 + b6
strIAMath = strIAMath * 256 + b7
strIAMath = strIAMath * 256 + b8
Dim Sub1Math As String
Sub1Math = b12
Sub1Math = (Sub1Math * 256) + b11
Sub1Math = (Sub1Math * 256) + b10
Sub1Math = (Sub1Math * 256) + b9
Dim Sub2Math As String
Sub2Math = b16
Sub2Math = (Sub2Math * 256) + b15
Sub2Math = (Sub2Math * 256) + b14
Sub2Math = (Sub2Math * 256) + b13
Dim Sub3Math As String
Sub3Math = b20
Sub3Math = Sub3Math * 256 + b19
Sub3Math = Sub3Math * 256 + b18
Sub3Math = Sub3Math * 256 + b17
Dim Sub4Math As String
Sub4Math = b24
Sub4Math = Sub4Math * 256 + b23
Sub4Math = Sub4Math * 256 + b22
Sub4Math = Sub4Math * 256 + b21
Dim OutputString As String
OutputString = ("S-" & b1 & "-" & strIAMath & "-" & _
Sub1Math & "-" & Sub2Math & "-" & Sub3Math & "-" & Sub4Math)
tbOutputString.Text = OutputString
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Information, "Some Kind Of Error Happened")
End Try
End Sub
Private Sub sCount5()
Try
Dim b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, _
b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, _
b24, b25, b26, b27, b28 As String
Dim RawSid As String
RawSid = tbInputString.Text
Dim SidStrCol As New Collection
Dim TrmdRawSID As String = RawSid.TrimEnd(",")
Dim stary() As String = Split(TrmdRawSID, ",", -1)
For Each strByte In stary
SidStrCol.Add(strByte)
Next
b1 = SidStrCol(1)
b2 = SidStrCol(2)
b3 = SidStrCol(3)
b4 = SidStrCol(4)
b5 = SidStrCol(5)
b6 = SidStrCol(6)
b7 = SidStrCol(7)
b8 = SidStrCol(8)
b9 = SidStrCol(9)
b10 = SidStrCol(10)
b11 = SidStrCol(11)
b12 = SidStrCol(12)
b13 = SidStrCol(13)
b14 = SidStrCol(14)
b15 = SidStrCol(15)
b16 = SidStrCol(16)
b17 = SidStrCol(17)
b18 = SidStrCol(18)
b19 = SidStrCol(19)
b20 = SidStrCol(20)
b21 = SidStrCol(21)
b22 = SidStrCol(22)
b23 = SidStrCol(23)
b24 = SidStrCol(24)
b25 = SidStrCol(25)
b26 = SidStrCol(26)
b27 = SidStrCol(27)
b28 = SidStrCol(28)
tbRevision.Text = b1
tbSubIDCount.Text = b2
tbIA1.Text = b3
tbIA2.Text = b4
tbIA3.Text = b5
tbIA4.Text = b6
tbIA5.Text = b7
tbIA6.Text = b8
tb1ID1.Text = b9
tb1ID2.Text = b10
tb1ID3.Text = b11
tb1ID4.Text = b12
tb2ID1.Text = b13
tb2ID2.Text = b14
tb2ID3.Text = b15
tb2ID4.Text = b16
tb3ID1.Text = b17
tb3ID2.Text = b18
tb3ID3.Text = b19
tb3ID4.Text = b20
tb4ID1.Text = b21
tb4ID2.Text = b22
tb4ID3.Text = b23
tb4ID4.Text = b24
tb5ID1.Text = b25
tb5ID2.Text = b26
tb5ID3.Text = b27
tb5ID4.Text = b28
strIAMath = b3
strIAMath = strIAMath * 256 + b4
strIAMath = strIAMath * 256 + b5
strIAMath = strIAMath * 256 + b6
strIAMath = strIAMath * 256 + b7
strIAMath = strIAMath * 256 + b8
Dim Sub1Math As String
Sub1Math = b12
Sub1Math = (Sub1Math * 256) + b11
Sub1Math = (Sub1Math * 256) + b10
Sub1Math = (Sub1Math * 256) + b9
Dim Sub2Math As String
Sub2Math = b16
Sub2Math = (Sub2Math * 256) + b15
Sub2Math = (Sub2Math * 256) + b14
Sub2Math = (Sub2Math * 256) + b13
Dim Sub3Math As String
Sub3Math = b20
Sub3Math = Sub3Math * 256 + b19
Sub3Math = Sub3Math * 256 + b18
Sub3Math = Sub3Math * 256 + b17
Dim Sub4Math As String
Sub4Math = b24
Sub4Math = Sub4Math * 256 + b23
Sub4Math = Sub4Math * 256 + b22
Sub4Math = Sub4Math * 256 + b21
Dim sub5Math As String
sub5Math = b28
sub5Math = sub5Math * 256 + b27
sub5Math = sub5Math * 256 + b26
sub5Math = sub5Math * 256 + b25
Dim OutputString As String
OutputString = ("S-" & b1 & "-" & strIAMath & "-" & _
Sub1Math & "-" & Sub2Math & "-" & Sub3Math & "-" & _
Sub4Math & "-" & sub5Math)
tbOutputString.Text = OutputString
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Information, "Some Kind Of Error Happened")
End Try
End Sub
Private Sub lblAbout_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles lblAbout.Click
AboutBox1.Show()
End Sub
Private Sub lnklblSelfAdsiorg_LinkClicked(ByVal sender As System.Object, _
ByVal e As System.Windows.Forms.LinkLabelLinkClickedEventArgs) _
Handles lnklblSelfAdsiorg.LinkClicked
Process.Start("Iexplore", _
"http://www.selfadsi.org/deep-inside/microsoft-sid-attributes.htm")
End Sub
Private Sub tbInputString_TextChanged(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles tbInputString.TextChanged
Try
tbOutputString.Clear()
tbRevision.Clear()
tbSubIDCount.Clear()
tbIA1.Clear()
tbIA2.Clear()
tbIA3.Clear()
tbIA4.Clear()
tbIA5.Clear()
tbIA6.Clear()
tb1ID2.Clear()
tb1ID3.Clear()
tb1ID4.Clear()
tb2ID2.Clear()
tb2ID3.Clear()
tb2ID4.Clear()
tb3ID2.Clear()
tb3ID3.Clear()
tb3ID4.Clear()
tb4ID2.Clear()
tb4ID3.Clear()
tb4ID4.Clear()
tb5ID2.Clear()
tb5ID3.Clear()
tb5ID4.Clear()
Dim b1, b2 As String Dim RawSid As String
RawSid = tbInputString.Text
Dim SidStrCol As New Collection
Dim TrmdRawSID As String = RawSid.TrimEnd(",")
Dim stary() As String = Split(TrmdRawSID, ",", -1)
For Each strByte In stary
SidStrCol.Add(strByte)
Next Dim colcnt As Integer
colcnt = SidStrCol.Count
b1 = SidStrCol(1)
b2 = SidStrCol(2)
lblArrayCount.Text = "SID Length = " & colcnt.ToString
If b2 = 1 And colcnt <> 12 Then
MsgBox("Please Double Check your Input String Length" & _
vbNewLine & "Sub Id Count Should be 1 and Byte count should be 12", _
MsgBoxStyle.Information, "Input Verification Error 1")
ElseIf b2 = 2 And colcnt <> 16 Then
MsgBox("Please Double Check your Input String Length" & vbNewLine & _
"Sub Id Count Should be 2 and Byte count should be 16", _
MsgBoxStyle.Information, "Input Verification Error 2")
ElseIf b2 = 3 And colcnt <> 20 Then
MsgBox("Please Double Check your Input String Length" & _
vbNewLine & "Sub Id Count Should be 3 and Byte count should be 20", _
MsgBoxStyle.Information, "Input Verification Error 3")
ElseIf b2 = 4 And colcnt <> 24 Then
MsgBox("Please Double Check your Input String Length" & _
vbNewLine & "Sub Id Count Should be 4 and Byte count should be 24", _
MsgBoxStyle.Information, "Input Verification Error 4")
ElseIf b2 = 5 And colcnt <> 28 Then
MsgBox("Please Double Check your Input String Length" & _
vbNewLine & "Sub Id Count Should be 5 and Byte count should be 28", _
MsgBoxStyle.Information, "Input Verification Error 5")
ElseIf colcnt > 28 Then
MsgBox("Please Double Check your Input String Length" & _
vbNewLine & "Sub Id Count Should be 5 or less " & _
"and Byte count should be 28 or less", _
MsgBoxStyle.Information, _
"Input Verification Error To Many Bytes")
End If
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Information, _
"Some Error happened while Checking SID Length")
End Try
End Sub
End Class
In the first part of the button click, if there is a comma on the end, then it gets trimmed right from the start. Then we split the trimmed result and add it to a collection, it was actually easier than an array. Also, an article said there may be a performance gain using the collection rather than the array. Once we have the collection we set the b1, and b2 as string, then make b1 = to the first byte in the collection and make b2 = to the second byte in the collection. Then we check what b2 actually equals. If it equals 1-5 then we move through the ElseIf
statement to get to the “SUB” that is equal to the b2 byte. Anything else than 1-5 should be handled with the text box validation. I like using an ElseIf
others may like the select case statement.
When I started this project, I just had code to handle all 5 sub authority ID’s in my button click event, then moved it to sub 5 later. I had to start working backwards from all 5 to 1. Basically what I did was to create 5 “Subs” to handle just the code for that Sub Number 1-5. Then working backwards stripped out the code that didn’t need to be there to handle just that version and to put x’s into the unused boxes on the form. I don’t know if there is a fancy way to do this with less code but this is pretty straight forward and easy to debug as is. Viewing the code should explain it better than I can write it out, I tried to comment it as much as possible.
As I build an application I try to think of every way a user can break it and handle any possible errors. I’m pretty sure this one has that covered. Also as I’m building I like to verify the information I’m pulling out, some times I leave the the boxes in place and make them a part of the finished program as I did here. (The small Boxes that each byte goes into)
Download
This Program will be available for download from my SkyDrive. Since they don’t do the Direct Download Link anymore you have to go to the folder and select the file or files you want. Everything is in zip format. File name is (ConvertSIDByteArayToSIDStirng.zip).
Minimum requirements for all of my programs, that I know of, is just .NET Framework 3.5 (and lower).
You can also view information on the other files in the SkyDrive folder.
As the usual way thing goes, these program are free and as is with no warranty. I just ask that anyone download directly from my site. I do update them from time to time. Also if anyone finds a bug please let me know at pcsxcetra@consolidated.net so I can fix it and post the updated version.
Hope this was informative and the tool(s) useful, in a good way.