diff --git a/GroupPolicyNetworkLocations/AboutBox.Designer.vb b/GroupPolicyNetworkLocations/AboutBox.Designer.vb new file mode 100644 index 0000000..9e89104 --- /dev/null +++ b/GroupPolicyNetworkLocations/AboutBox.Designer.vb @@ -0,0 +1,178 @@ + _ +Partial Class AboutBox + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + Friend WithEvents TableLayoutPanel As System.Windows.Forms.TableLayoutPanel + Friend WithEvents LogoPictureBox As System.Windows.Forms.PictureBox + Friend WithEvents LabelProductName As System.Windows.Forms.Label + Friend WithEvents LabelVersion As System.Windows.Forms.Label + Friend WithEvents LabelCompanyName As System.Windows.Forms.Label + Friend WithEvents TextBoxDescription As System.Windows.Forms.TextBox + Friend WithEvents OKButton As System.Windows.Forms.Button + Friend WithEvents LabelCopyright As System.Windows.Forms.Label + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(AboutBox)) + Me.TableLayoutPanel = New System.Windows.Forms.TableLayoutPanel() + Me.LogoPictureBox = New System.Windows.Forms.PictureBox() + Me.LabelProductName = New System.Windows.Forms.Label() + Me.LabelVersion = New System.Windows.Forms.Label() + Me.LabelCopyright = New System.Windows.Forms.Label() + Me.LabelCompanyName = New System.Windows.Forms.Label() + Me.TextBoxDescription = New System.Windows.Forms.TextBox() + Me.OKButton = New System.Windows.Forms.Button() + Me.TableLayoutPanel.SuspendLayout() + CType(Me.LogoPictureBox, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + 'TableLayoutPanel + ' + Me.TableLayoutPanel.ColumnCount = 2 + Me.TableLayoutPanel.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.0!)) + Me.TableLayoutPanel.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 67.0!)) + Me.TableLayoutPanel.Controls.Add(Me.LogoPictureBox, 0, 0) + Me.TableLayoutPanel.Controls.Add(Me.LabelProductName, 1, 0) + Me.TableLayoutPanel.Controls.Add(Me.LabelVersion, 1, 1) + Me.TableLayoutPanel.Controls.Add(Me.LabelCopyright, 1, 2) + Me.TableLayoutPanel.Controls.Add(Me.LabelCompanyName, 1, 3) + Me.TableLayoutPanel.Controls.Add(Me.TextBoxDescription, 1, 4) + Me.TableLayoutPanel.Controls.Add(Me.OKButton, 1, 5) + Me.TableLayoutPanel.Dock = System.Windows.Forms.DockStyle.Fill + Me.TableLayoutPanel.Location = New System.Drawing.Point(9, 9) + Me.TableLayoutPanel.Name = "TableLayoutPanel" + Me.TableLayoutPanel.RowCount = 6 + Me.TableLayoutPanel.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10.0!)) + Me.TableLayoutPanel.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10.0!)) + Me.TableLayoutPanel.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10.0!)) + Me.TableLayoutPanel.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10.0!)) + Me.TableLayoutPanel.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10.0!)) + Me.TableLayoutPanel.Size = New System.Drawing.Size(396, 258) + Me.TableLayoutPanel.TabIndex = 0 + ' + 'LogoPictureBox + ' + Me.LogoPictureBox.Dock = System.Windows.Forms.DockStyle.Fill + Me.LogoPictureBox.Image = CType(resources.GetObject("LogoPictureBox.Image"), System.Drawing.Image) + Me.LogoPictureBox.Location = New System.Drawing.Point(3, 3) + Me.LogoPictureBox.Name = "LogoPictureBox" + Me.TableLayoutPanel.SetRowSpan(Me.LogoPictureBox, 6) + Me.LogoPictureBox.Size = New System.Drawing.Size(124, 252) + Me.LogoPictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage + Me.LogoPictureBox.TabIndex = 0 + Me.LogoPictureBox.TabStop = False + ' + 'LabelProductName + ' + Me.LabelProductName.Dock = System.Windows.Forms.DockStyle.Fill + Me.LabelProductName.Location = New System.Drawing.Point(136, 0) + Me.LabelProductName.Margin = New System.Windows.Forms.Padding(6, 0, 3, 0) + Me.LabelProductName.MaximumSize = New System.Drawing.Size(0, 17) + Me.LabelProductName.Name = "LabelProductName" + Me.LabelProductName.Size = New System.Drawing.Size(257, 17) + Me.LabelProductName.TabIndex = 0 + Me.LabelProductName.Text = "Product Name" + Me.LabelProductName.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'LabelVersion + ' + Me.LabelVersion.Dock = System.Windows.Forms.DockStyle.Fill + Me.LabelVersion.Location = New System.Drawing.Point(136, 25) + Me.LabelVersion.Margin = New System.Windows.Forms.Padding(6, 0, 3, 0) + Me.LabelVersion.MaximumSize = New System.Drawing.Size(0, 17) + Me.LabelVersion.Name = "LabelVersion" + Me.LabelVersion.Size = New System.Drawing.Size(257, 17) + Me.LabelVersion.TabIndex = 0 + Me.LabelVersion.Text = "Version" + Me.LabelVersion.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'LabelCopyright + ' + Me.LabelCopyright.Dock = System.Windows.Forms.DockStyle.Fill + Me.LabelCopyright.Location = New System.Drawing.Point(136, 50) + Me.LabelCopyright.Margin = New System.Windows.Forms.Padding(6, 0, 3, 0) + Me.LabelCopyright.MaximumSize = New System.Drawing.Size(0, 17) + Me.LabelCopyright.Name = "LabelCopyright" + Me.LabelCopyright.Size = New System.Drawing.Size(257, 17) + Me.LabelCopyright.TabIndex = 0 + Me.LabelCopyright.Text = "Copyright" + Me.LabelCopyright.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'LabelCompanyName + ' + Me.LabelCompanyName.Dock = System.Windows.Forms.DockStyle.Fill + Me.LabelCompanyName.Location = New System.Drawing.Point(136, 75) + Me.LabelCompanyName.Margin = New System.Windows.Forms.Padding(6, 0, 3, 0) + Me.LabelCompanyName.MaximumSize = New System.Drawing.Size(0, 17) + Me.LabelCompanyName.Name = "LabelCompanyName" + Me.LabelCompanyName.Size = New System.Drawing.Size(257, 17) + Me.LabelCompanyName.TabIndex = 0 + Me.LabelCompanyName.Text = "Company Name" + Me.LabelCompanyName.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'TextBoxDescription + ' + Me.TextBoxDescription.Dock = System.Windows.Forms.DockStyle.Fill + Me.TextBoxDescription.Location = New System.Drawing.Point(136, 103) + Me.TextBoxDescription.Margin = New System.Windows.Forms.Padding(6, 3, 3, 3) + Me.TextBoxDescription.Multiline = True + Me.TextBoxDescription.Name = "TextBoxDescription" + Me.TextBoxDescription.ReadOnly = True + Me.TextBoxDescription.ScrollBars = System.Windows.Forms.ScrollBars.Both + Me.TextBoxDescription.Size = New System.Drawing.Size(257, 123) + Me.TextBoxDescription.TabIndex = 0 + Me.TextBoxDescription.TabStop = False + Me.TextBoxDescription.Text = resources.GetString("TextBoxDescription.Text") + ' + 'OKButton + ' + Me.OKButton.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.OKButton.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.OKButton.Location = New System.Drawing.Point(318, 232) + Me.OKButton.Name = "OKButton" + Me.OKButton.Size = New System.Drawing.Size(75, 23) + Me.OKButton.TabIndex = 0 + Me.OKButton.Text = "&OK" + ' + 'AboutBox + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.CancelButton = Me.OKButton + Me.ClientSize = New System.Drawing.Size(414, 276) + Me.Controls.Add(Me.TableLayoutPanel) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "AboutBox" + Me.Padding = New System.Windows.Forms.Padding(9) + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "AboutBox1" + Me.TableLayoutPanel.ResumeLayout(False) + Me.TableLayoutPanel.PerformLayout() + CType(Me.LogoPictureBox, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + + End Sub + +End Class diff --git a/GroupPolicyNetworkLocations/AboutBox.resx b/GroupPolicyNetworkLocations/AboutBox.resx new file mode 100644 index 0000000..03878b4 --- /dev/null +++ b/GroupPolicyNetworkLocations/AboutBox.resx @@ -0,0 +1,609 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + 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 + + + + Description : + +(At runtime, the labels' text will be replaced with the application's assembly information. +Customize the application's assembly information in the Application pane of Project Designer.) + + \ No newline at end of file diff --git a/GroupPolicyNetworkLocations/AboutBox.vb b/GroupPolicyNetworkLocations/AboutBox.vb new file mode 100644 index 0000000..ce0c3cd --- /dev/null +++ b/GroupPolicyNetworkLocations/AboutBox.vb @@ -0,0 +1,26 @@ +Public NotInheritable Class AboutBox + + Private Sub AboutBox1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load + ' Set the title of the form. + Dim ApplicationTitle As String + If My.Application.Info.Title <> "" Then + ApplicationTitle = My.Application.Info.Title + Else + ApplicationTitle = System.IO.Path.GetFileNameWithoutExtension(My.Application.Info.AssemblyName) + End If + Me.Text = String.Format("About {0}", ApplicationTitle) + ' Initialize all of the text displayed on the About Box. + ' TODO: Customize the application's assembly information in the "Application" pane of the project + ' properties dialog (under the "Project" menu). + Me.LabelProductName.Text = My.Application.Info.ProductName + Me.LabelVersion.Text = String.Format("Version {0}", My.Application.Info.Version.ToString) + Me.LabelCopyright.Text = My.Application.Info.Copyright + Me.LabelCompanyName.Text = My.Application.Info.CompanyName + Me.TextBoxDescription.Text = My.Application.Info.Description + End Sub + + Private Sub OKButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OKButton.Click + Me.Close() + End Sub + +End Class diff --git a/GroupPolicyNetworkLocations/App.config b/GroupPolicyNetworkLocations/App.config deleted file mode 100644 index 2ae8254..0000000 --- a/GroupPolicyNetworkLocations/App.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/GroupPolicyNetworkLocations/ApplicationEvents.vb b/GroupPolicyNetworkLocations/ApplicationEvents.vb new file mode 100644 index 0000000..27f04b7 --- /dev/null +++ b/GroupPolicyNetworkLocations/ApplicationEvents.vb @@ -0,0 +1,23 @@ +Namespace My + ' The following events are available for MyApplication: + ' Startup: Raised when the application starts, before the startup form is created. + ' Shutdown: Raised after all application forms are closed. This event is not raised if the application terminates abnormally. + ' UnhandledException: Raised if the application encounters an unhandled exception. + ' StartupNextInstance: Raised when launching a single-instance application and the application is already active. + ' NetworkAvailabilityChanged: Raised when the network connection is connected or disconnected. + Partial Friend Class MyApplication + Private Sub AppStart(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupEventArgs) Handles Me.Startup + AddHandler AppDomain.CurrentDomain.AssemblyResolve, AddressOf ResolveAssemblies + End Sub + + Private Function ResolveAssemblies(sender As Object, e As System.ResolveEventArgs) As Reflection.Assembly + Dim desiredAssembly = New Reflection.AssemblyName(e.Name) + + If desiredAssembly.Name = "ActiveDirectoryObjectPicker" Then + Return Reflection.Assembly.Load(My.Resources.ActiveDirectoryObjectPicker) 'replace with your assembly's resource name + Else + Return Nothing + End If + End Function + End Class +End Namespace diff --git a/GroupPolicyNetworkLocations/DialogNewShare.Designer.vb b/GroupPolicyNetworkLocations/DialogNewShare.Designer.vb new file mode 100644 index 0000000..2cc2884 --- /dev/null +++ b/GroupPolicyNetworkLocations/DialogNewShare.Designer.vb @@ -0,0 +1,168 @@ + _ +Partial Class DialogNewShare + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.TableLayoutPanel1 = New System.Windows.Forms.TableLayoutPanel() + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.Label1 = New System.Windows.Forms.Label() + Me.TextBoxShareName = New System.Windows.Forms.TextBox() + Me.Label2 = New System.Windows.Forms.Label() + Me.TextBoxSharePath = New System.Windows.Forms.TextBox() + Me.TableLayoutPanel2 = New System.Windows.Forms.TableLayoutPanel() + Me.TableLayoutPanel3 = New System.Windows.Forms.TableLayoutPanel() + Me.TableLayoutPanel1.SuspendLayout() + Me.TableLayoutPanel2.SuspendLayout() + Me.TableLayoutPanel3.SuspendLayout() + Me.SuspendLayout() + ' + 'TableLayoutPanel1 + ' + Me.TableLayoutPanel1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.TableLayoutPanel1.ColumnCount = 2 + Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel1.Controls.Add(Me.OK_Button, 0, 0) + Me.TableLayoutPanel1.Controls.Add(Me.Cancel_Button, 1, 0) + Me.TableLayoutPanel1.Location = New System.Drawing.Point(111, 113) + Me.TableLayoutPanel1.Name = "TableLayoutPanel1" + Me.TableLayoutPanel1.RowCount = 1 + Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel1.Size = New System.Drawing.Size(146, 29) + Me.TableLayoutPanel1.TabIndex = 0 + ' + 'OK_Button + ' + Me.OK_Button.Anchor = System.Windows.Forms.AnchorStyles.None + Me.OK_Button.Location = New System.Drawing.Point(3, 3) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(67, 23) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "OK" + ' + 'Cancel_Button + ' + Me.Cancel_Button.Anchor = System.Windows.Forms.AnchorStyles.None + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Location = New System.Drawing.Point(76, 3) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 23) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.Location = New System.Drawing.Point(3, 0) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(97, 13) + Me.Label1.TabIndex = 1 + Me.Label1.Text = "Enter Share Name:" + ' + 'TextBoxShareName + ' + Me.TextBoxShareName.Location = New System.Drawing.Point(3, 16) + Me.TextBoxShareName.Name = "TextBoxShareName" + Me.TextBoxShareName.Size = New System.Drawing.Size(239, 20) + Me.TextBoxShareName.TabIndex = 2 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.Location = New System.Drawing.Point(3, 0) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(94, 13) + Me.Label2.TabIndex = 3 + Me.Label2.Text = "Enter Target Path:" + ' + 'TextBoxSharePath + ' + Me.TextBoxSharePath.Location = New System.Drawing.Point(3, 16) + Me.TextBoxSharePath.Name = "TextBoxSharePath" + Me.TextBoxSharePath.Size = New System.Drawing.Size(239, 20) + Me.TextBoxSharePath.TabIndex = 4 + ' + 'TableLayoutPanel2 + ' + Me.TableLayoutPanel2.ColumnCount = 1 + Me.TableLayoutPanel2.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle()) + Me.TableLayoutPanel2.Controls.Add(Me.TextBoxShareName, 0, 1) + Me.TableLayoutPanel2.Controls.Add(Me.Label1, 0, 0) + Me.TableLayoutPanel2.Location = New System.Drawing.Point(12, 12) + Me.TableLayoutPanel2.Name = "TableLayoutPanel2" + Me.TableLayoutPanel2.RowCount = 2 + Me.TableLayoutPanel2.RowStyles.Add(New System.Windows.Forms.RowStyle()) + Me.TableLayoutPanel2.RowStyles.Add(New System.Windows.Forms.RowStyle()) + Me.TableLayoutPanel2.Size = New System.Drawing.Size(247, 45) + Me.TableLayoutPanel2.TabIndex = 5 + ' + 'TableLayoutPanel3 + ' + Me.TableLayoutPanel3.ColumnCount = 1 + Me.TableLayoutPanel3.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle()) + Me.TableLayoutPanel3.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20.0!)) + Me.TableLayoutPanel3.Controls.Add(Me.TextBoxSharePath, 0, 1) + Me.TableLayoutPanel3.Controls.Add(Me.Label2, 0, 0) + Me.TableLayoutPanel3.Location = New System.Drawing.Point(12, 63) + Me.TableLayoutPanel3.Name = "TableLayoutPanel3" + Me.TableLayoutPanel3.RowCount = 2 + Me.TableLayoutPanel3.RowStyles.Add(New System.Windows.Forms.RowStyle()) + Me.TableLayoutPanel3.RowStyles.Add(New System.Windows.Forms.RowStyle()) + Me.TableLayoutPanel3.Size = New System.Drawing.Size(247, 44) + Me.TableLayoutPanel3.TabIndex = 6 + ' + 'DialogNewShare + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(269, 154) + Me.Controls.Add(Me.TableLayoutPanel3) + Me.Controls.Add(Me.TableLayoutPanel2) + Me.Controls.Add(Me.TableLayoutPanel1) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "DialogNewShare" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "New Share" + Me.TableLayoutPanel1.ResumeLayout(False) + Me.TableLayoutPanel2.ResumeLayout(False) + Me.TableLayoutPanel2.PerformLayout() + Me.TableLayoutPanel3.ResumeLayout(False) + Me.TableLayoutPanel3.PerformLayout() + Me.ResumeLayout(False) + + End Sub + Friend WithEvents TableLayoutPanel1 As System.Windows.Forms.TableLayoutPanel + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents Label1 As Label + Friend WithEvents TextBoxShareName As TextBox + Friend WithEvents Label2 As Label + Friend WithEvents TextBoxSharePath As TextBox + Friend WithEvents TableLayoutPanel2 As TableLayoutPanel + Friend WithEvents TableLayoutPanel3 As TableLayoutPanel +End Class diff --git a/GroupPolicyNetworkLocations/DialogNewShare.resx b/GroupPolicyNetworkLocations/DialogNewShare.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/GroupPolicyNetworkLocations/DialogNewShare.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/GroupPolicyNetworkLocations/DialogNewShare.vb b/GroupPolicyNetworkLocations/DialogNewShare.vb new file mode 100644 index 0000000..068cfdf --- /dev/null +++ b/GroupPolicyNetworkLocations/DialogNewShare.vb @@ -0,0 +1,15 @@ +Imports System.Windows.Forms + +Public Class DialogNewShare + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End Sub + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + +End Class diff --git a/GroupPolicyNetworkLocations/DialogSettings.Designer.vb b/GroupPolicyNetworkLocations/DialogSettings.Designer.vb new file mode 100644 index 0000000..f58c94f --- /dev/null +++ b/GroupPolicyNetworkLocations/DialogSettings.Designer.vb @@ -0,0 +1,135 @@ + +Partial Class DialogSettings + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + + Private Sub InitializeComponent() + Me.TableLayoutPanel1 = New System.Windows.Forms.TableLayoutPanel() + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.Label2 = New System.Windows.Forms.Label() + Me.TextBoxGroupPolicyUID = New System.Windows.Forms.TextBox() + Me.Label1 = New System.Windows.Forms.Label() + Me.ComboBoxGroupPolicies = New System.Windows.Forms.ComboBox() + Me.TableLayoutPanel1.SuspendLayout() + Me.SuspendLayout() + ' + 'TableLayoutPanel1 + ' + Me.TableLayoutPanel1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.TableLayoutPanel1.ColumnCount = 2 + Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel1.Controls.Add(Me.OK_Button, 0, 0) + Me.TableLayoutPanel1.Controls.Add(Me.Cancel_Button, 1, 0) + Me.TableLayoutPanel1.Location = New System.Drawing.Point(226, 63) + Me.TableLayoutPanel1.Name = "TableLayoutPanel1" + Me.TableLayoutPanel1.RowCount = 1 + Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel1.Size = New System.Drawing.Size(146, 29) + Me.TableLayoutPanel1.TabIndex = 0 + ' + 'OK_Button + ' + Me.OK_Button.Anchor = System.Windows.Forms.AnchorStyles.None + Me.OK_Button.Location = New System.Drawing.Point(3, 3) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(67, 23) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "OK" + ' + 'Cancel_Button + ' + Me.Cancel_Button.Anchor = System.Windows.Forms.AnchorStyles.None + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.Location = New System.Drawing.Point(76, 3) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 23) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.Location = New System.Drawing.Point(12, 43) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(89, 13) + Me.Label2.TabIndex = 3 + Me.Label2.Text = "Group Policy UID" + ' + 'TextBoxGroupPolicyUID + ' + Me.TextBoxGroupPolicyUID.Enabled = False + Me.TextBoxGroupPolicyUID.Location = New System.Drawing.Point(107, 40) + Me.TextBoxGroupPolicyUID.Name = "TextBoxGroupPolicyUID" + Me.TextBoxGroupPolicyUID.Size = New System.Drawing.Size(265, 20) + Me.TextBoxGroupPolicyUID.TabIndex = 2 + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.Location = New System.Drawing.Point(12, 15) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(67, 13) + Me.Label1.TabIndex = 1 + Me.Label1.Text = "Group Policy" + ' + 'ComboBoxGroupPolicies + ' + Me.ComboBoxGroupPolicies.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.ComboBoxGroupPolicies.FormattingEnabled = True + Me.ComboBoxGroupPolicies.Location = New System.Drawing.Point(107, 12) + Me.ComboBoxGroupPolicies.Name = "ComboBoxGroupPolicies" + Me.ComboBoxGroupPolicies.Size = New System.Drawing.Size(265, 21) + Me.ComboBoxGroupPolicies.TabIndex = 0 + ' + 'DialogSettings + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(384, 104) + Me.Controls.Add(Me.Label2) + Me.Controls.Add(Me.TextBoxGroupPolicyUID) + Me.Controls.Add(Me.TableLayoutPanel1) + Me.Controls.Add(Me.Label1) + Me.Controls.Add(Me.ComboBoxGroupPolicies) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "DialogSettings" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Group Policy Network Locations Editor" + Me.TableLayoutPanel1.ResumeLayout(False) + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Friend WithEvents TableLayoutPanel1 As System.Windows.Forms.TableLayoutPanel + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents Label2 As Label + Friend WithEvents TextBoxGroupPolicyUID As TextBox + Friend WithEvents Label1 As Label + Friend WithEvents ComboBoxGroupPolicies As ComboBox +End Class diff --git a/GroupPolicyNetworkLocations/DialogSettings.resx b/GroupPolicyNetworkLocations/DialogSettings.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/GroupPolicyNetworkLocations/DialogSettings.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/GroupPolicyNetworkLocations/DialogSettings.vb b/GroupPolicyNetworkLocations/DialogSettings.vb new file mode 100644 index 0000000..ef4be2c --- /dev/null +++ b/GroupPolicyNetworkLocations/DialogSettings.vb @@ -0,0 +1,19 @@ +Imports System.Windows.Forms + +Public Class DialogSettings + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End Sub + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub ComboBoxGroupPolicies_SelectedValueChanged(sender As Object, e As EventArgs) Handles ComboBoxGroupPolicies.SelectedValueChanged + If ComboBoxGroupPolicies.SelectedValue.ToString <> Nothing Then TextBoxGroupPolicyUID.Text = ComboBoxGroupPolicies.SelectedValue.ToString + End Sub + +End Class diff --git a/GroupPolicyNetworkLocations/Form1.Designer.vb b/GroupPolicyNetworkLocations/Form1.Designer.vb deleted file mode 100644 index e6b13e6..0000000 --- a/GroupPolicyNetworkLocations/Form1.Designer.vb +++ /dev/null @@ -1,30 +0,0 @@ - _ -Partial Class Form1 - Inherits System.Windows.Forms.Form - - 'Form overrides dispose to clean up the component list. - _ - Protected Overrides Sub Dispose(ByVal disposing As Boolean) - Try - If disposing AndAlso components IsNot Nothing Then - components.Dispose() - End If - Finally - MyBase.Dispose(disposing) - End Try - End Sub - - 'Required by the Windows Form Designer - Private components As System.ComponentModel.IContainer - - 'NOTE: The following procedure is required by the Windows Form Designer - 'It can be modified using the Windows Form Designer. - 'Do not modify it using the code editor. - _ - Private Sub InitializeComponent() - components = New System.ComponentModel.Container() - Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font - Me.Text = "Form1" - End Sub - -End Class diff --git a/GroupPolicyNetworkLocations/Form1.vb b/GroupPolicyNetworkLocations/Form1.vb deleted file mode 100644 index 17d6595..0000000 --- a/GroupPolicyNetworkLocations/Form1.vb +++ /dev/null @@ -1,3 +0,0 @@ -Public Class Form1 - -End Class diff --git a/GroupPolicyNetworkLocations/GPOAdmin_518.ico b/GroupPolicyNetworkLocations/GPOAdmin_518.ico new file mode 100644 index 0000000..7a04538 Binary files /dev/null and b/GroupPolicyNetworkLocations/GPOAdmin_518.ico differ diff --git a/GroupPolicyNetworkLocations/GroupPolicyNetworkLocations.Designer.vb b/GroupPolicyNetworkLocations/GroupPolicyNetworkLocations.Designer.vb new file mode 100644 index 0000000..1f52f9c --- /dev/null +++ b/GroupPolicyNetworkLocations/GroupPolicyNetworkLocations.Designer.vb @@ -0,0 +1,497 @@ + +Partial Class GroupPolicyNetworkLocations + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(GroupPolicyNetworkLocations)) + Me.ListBoxShareNames = New System.Windows.Forms.ListBox() + Me.MenuStrip1 = New System.Windows.Forms.MenuStrip() + Me.FileToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.ReadFromGroupPolicyToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.GenerateXMLToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator1 = New System.Windows.Forms.ToolStripSeparator() + Me.QuitToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolsToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.SettingsToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.HelpToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.AboutToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.Label1 = New System.Windows.Forms.Label() + Me.Label2 = New System.Windows.Forms.Label() + Me.Label3 = New System.Windows.Forms.Label() + Me.TextBoxIni1UID = New System.Windows.Forms.TextBox() + Me.TextBoxFoldersUID = New System.Windows.Forms.TextBox() + Me.TextBoxShortcutsUID = New System.Windows.Forms.TextBox() + Me.ButtonAddNewShare = New System.Windows.Forms.Button() + Me.ButtonDeleteShare = New System.Windows.Forms.Button() + Me.GroupBox1 = New System.Windows.Forms.GroupBox() + Me.DataGridViewGroups = New System.Windows.Forms.DataGridView() + Me.ButtonAddGroup = New System.Windows.Forms.Button() + Me.ButtonDeleteGroup = New System.Windows.Forms.Button() + Me.TextBoxLastModified = New System.Windows.Forms.TextBox() + Me.Label4 = New System.Windows.Forms.Label() + Me.GroupBox2 = New System.Windows.Forms.GroupBox() + Me.Label7 = New System.Windows.Forms.Label() + Me.TextBoxIni2UID = New System.Windows.Forms.TextBox() + Me.GroupBox3 = New System.Windows.Forms.GroupBox() + Me.ButtonSaveChanges = New System.Windows.Forms.Button() + Me.ButtonDiscardChanges = New System.Windows.Forms.Button() + Me.Label6 = New System.Windows.Forms.Label() + Me.TextBoxTargetPath = New System.Windows.Forms.TextBox() + Me.Label5 = New System.Windows.Forms.Label() + Me.TextBoxLocationName = New System.Windows.Forms.TextBox() + Me.GroupBox4 = New System.Windows.Forms.GroupBox() + Me.TextBoxPolicyName = New System.Windows.Forms.TextBox() + Me.Label8 = New System.Windows.Forms.Label() + Me.Label9 = New System.Windows.Forms.Label() + Me.TextBoxPolicyGUID = New System.Windows.Forms.TextBox() + Me.MenuStrip1.SuspendLayout() + Me.GroupBox1.SuspendLayout() + CType(Me.DataGridViewGroups, System.ComponentModel.ISupportInitialize).BeginInit() + Me.GroupBox2.SuspendLayout() + Me.GroupBox3.SuspendLayout() + Me.GroupBox4.SuspendLayout() + Me.SuspendLayout() + ' + 'ListBoxShareNames + ' + Me.ListBoxShareNames.FormattingEnabled = True + Me.ListBoxShareNames.Location = New System.Drawing.Point(6, 19) + Me.ListBoxShareNames.Name = "ListBoxShareNames" + Me.ListBoxShareNames.Size = New System.Drawing.Size(172, 394) + Me.ListBoxShareNames.TabIndex = 0 + ' + 'MenuStrip1 + ' + Me.MenuStrip1.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.FileToolStripMenuItem, Me.ToolsToolStripMenuItem, Me.HelpToolStripMenuItem}) + Me.MenuStrip1.Location = New System.Drawing.Point(0, 0) + Me.MenuStrip1.Name = "MenuStrip1" + Me.MenuStrip1.Size = New System.Drawing.Size(636, 24) + Me.MenuStrip1.TabIndex = 1 + Me.MenuStrip1.Text = "MenuStrip1" + ' + 'FileToolStripMenuItem + ' + Me.FileToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.ReadFromGroupPolicyToolStripMenuItem, Me.GenerateXMLToolStripMenuItem, Me.ToolStripSeparator1, Me.QuitToolStripMenuItem}) + Me.FileToolStripMenuItem.Name = "FileToolStripMenuItem" + Me.FileToolStripMenuItem.Size = New System.Drawing.Size(37, 20) + Me.FileToolStripMenuItem.Text = "File" + ' + 'ReadFromGroupPolicyToolStripMenuItem + ' + Me.ReadFromGroupPolicyToolStripMenuItem.Name = "ReadFromGroupPolicyToolStripMenuItem" + Me.ReadFromGroupPolicyToolStripMenuItem.Size = New System.Drawing.Size(200, 22) + Me.ReadFromGroupPolicyToolStripMenuItem.Text = "Read from Group Policy" + ' + 'GenerateXMLToolStripMenuItem + ' + Me.GenerateXMLToolStripMenuItem.Name = "GenerateXMLToolStripMenuItem" + Me.GenerateXMLToolStripMenuItem.Size = New System.Drawing.Size(200, 22) + Me.GenerateXMLToolStripMenuItem.Text = "Save to Group Policy" + ' + 'ToolStripSeparator1 + ' + Me.ToolStripSeparator1.Name = "ToolStripSeparator1" + Me.ToolStripSeparator1.Size = New System.Drawing.Size(197, 6) + ' + 'QuitToolStripMenuItem + ' + Me.QuitToolStripMenuItem.Name = "QuitToolStripMenuItem" + Me.QuitToolStripMenuItem.Size = New System.Drawing.Size(200, 22) + Me.QuitToolStripMenuItem.Text = "Exit" + ' + 'ToolsToolStripMenuItem + ' + Me.ToolsToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.SettingsToolStripMenuItem}) + Me.ToolsToolStripMenuItem.Name = "ToolsToolStripMenuItem" + Me.ToolsToolStripMenuItem.Size = New System.Drawing.Size(47, 20) + Me.ToolsToolStripMenuItem.Text = "Tools" + ' + 'SettingsToolStripMenuItem + ' + Me.SettingsToolStripMenuItem.Name = "SettingsToolStripMenuItem" + Me.SettingsToolStripMenuItem.Size = New System.Drawing.Size(152, 22) + Me.SettingsToolStripMenuItem.Text = "Settings" + ' + 'HelpToolStripMenuItem + ' + Me.HelpToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.AboutToolStripMenuItem}) + Me.HelpToolStripMenuItem.Name = "HelpToolStripMenuItem" + Me.HelpToolStripMenuItem.Size = New System.Drawing.Size(44, 20) + Me.HelpToolStripMenuItem.Text = "Help" + ' + 'AboutToolStripMenuItem + ' + Me.AboutToolStripMenuItem.Name = "AboutToolStripMenuItem" + Me.AboutToolStripMenuItem.Size = New System.Drawing.Size(152, 22) + Me.AboutToolStripMenuItem.Text = "About" + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.Location = New System.Drawing.Point(6, 22) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(46, 13) + Me.Label1.TabIndex = 2 + Me.Label1.Text = "Ini1 UID" + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.Location = New System.Drawing.Point(6, 75) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(63, 13) + Me.Label2.TabIndex = 3 + Me.Label2.Text = "Folders UID" + ' + 'Label3 + ' + Me.Label3.AutoSize = True + Me.Label3.Location = New System.Drawing.Point(6, 101) + Me.Label3.Name = "Label3" + Me.Label3.Size = New System.Drawing.Size(74, 13) + Me.Label3.TabIndex = 4 + Me.Label3.Text = "Shortcuts UID" + ' + 'TextBoxIni1UID + ' + Me.TextBoxIni1UID.Enabled = False + Me.TextBoxIni1UID.Location = New System.Drawing.Point(95, 19) + Me.TextBoxIni1UID.Name = "TextBoxIni1UID" + Me.TextBoxIni1UID.Size = New System.Drawing.Size(321, 20) + Me.TextBoxIni1UID.TabIndex = 5 + ' + 'TextBoxFoldersUID + ' + Me.TextBoxFoldersUID.Enabled = False + Me.TextBoxFoldersUID.Location = New System.Drawing.Point(95, 72) + Me.TextBoxFoldersUID.Name = "TextBoxFoldersUID" + Me.TextBoxFoldersUID.Size = New System.Drawing.Size(321, 20) + Me.TextBoxFoldersUID.TabIndex = 6 + ' + 'TextBoxShortcutsUID + ' + Me.TextBoxShortcutsUID.Enabled = False + Me.TextBoxShortcutsUID.Location = New System.Drawing.Point(95, 98) + Me.TextBoxShortcutsUID.Name = "TextBoxShortcutsUID" + Me.TextBoxShortcutsUID.Size = New System.Drawing.Size(321, 20) + Me.TextBoxShortcutsUID.TabIndex = 7 + ' + 'ButtonAddNewShare + ' + Me.ButtonAddNewShare.Location = New System.Drawing.Point(6, 419) + Me.ButtonAddNewShare.Name = "ButtonAddNewShare" + Me.ButtonAddNewShare.Size = New System.Drawing.Size(83, 23) + Me.ButtonAddNewShare.TabIndex = 8 + Me.ButtonAddNewShare.Text = "Add Share" + Me.ButtonAddNewShare.UseVisualStyleBackColor = True + ' + 'ButtonDeleteShare + ' + Me.ButtonDeleteShare.Location = New System.Drawing.Point(95, 419) + Me.ButtonDeleteShare.Name = "ButtonDeleteShare" + Me.ButtonDeleteShare.Size = New System.Drawing.Size(83, 23) + Me.ButtonDeleteShare.TabIndex = 9 + Me.ButtonDeleteShare.Text = "Delete Share" + Me.ButtonDeleteShare.UseVisualStyleBackColor = True + ' + 'GroupBox1 + ' + Me.GroupBox1.Controls.Add(Me.DataGridViewGroups) + Me.GroupBox1.Controls.Add(Me.ButtonAddGroup) + Me.GroupBox1.Controls.Add(Me.ButtonDeleteGroup) + Me.GroupBox1.Location = New System.Drawing.Point(184, 282) + Me.GroupBox1.Name = "GroupBox1" + Me.GroupBox1.Size = New System.Drawing.Size(422, 160) + Me.GroupBox1.TabIndex = 11 + Me.GroupBox1.TabStop = False + Me.GroupBox1.Text = "Deployed Groups" + ' + 'DataGridViewGroups + ' + Me.DataGridViewGroups.AllowUserToAddRows = False + Me.DataGridViewGroups.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize + Me.DataGridViewGroups.Location = New System.Drawing.Point(7, 19) + Me.DataGridViewGroups.Name = "DataGridViewGroups" + Me.DataGridViewGroups.ReadOnly = True + Me.DataGridViewGroups.RowHeadersVisible = False + Me.DataGridViewGroups.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect + Me.DataGridViewGroups.Size = New System.Drawing.Size(406, 106) + Me.DataGridViewGroups.TabIndex = 13 + ' + 'ButtonAddGroup + ' + Me.ButtonAddGroup.Location = New System.Drawing.Point(210, 131) + Me.ButtonAddGroup.Name = "ButtonAddGroup" + Me.ButtonAddGroup.Size = New System.Drawing.Size(100, 23) + Me.ButtonAddGroup.TabIndex = 12 + Me.ButtonAddGroup.Text = "Add Group" + Me.ButtonAddGroup.UseVisualStyleBackColor = True + ' + 'ButtonDeleteGroup + ' + Me.ButtonDeleteGroup.Location = New System.Drawing.Point(316, 131) + Me.ButtonDeleteGroup.Name = "ButtonDeleteGroup" + Me.ButtonDeleteGroup.Size = New System.Drawing.Size(100, 23) + Me.ButtonDeleteGroup.TabIndex = 11 + Me.ButtonDeleteGroup.Text = "Delete Group" + Me.ButtonDeleteGroup.UseVisualStyleBackColor = True + ' + 'TextBoxLastModified + ' + Me.TextBoxLastModified.Enabled = False + Me.TextBoxLastModified.Location = New System.Drawing.Point(279, 19) + Me.TextBoxLastModified.Name = "TextBoxLastModified" + Me.TextBoxLastModified.Size = New System.Drawing.Size(321, 20) + Me.TextBoxLastModified.TabIndex = 12 + ' + 'Label4 + ' + Me.Label4.AutoSize = True + Me.Label4.Location = New System.Drawing.Point(190, 22) + Me.Label4.Name = "Label4" + Me.Label4.Size = New System.Drawing.Size(70, 13) + Me.Label4.TabIndex = 13 + Me.Label4.Text = "Last Modified" + ' + 'GroupBox2 + ' + Me.GroupBox2.Controls.Add(Me.Label7) + Me.GroupBox2.Controls.Add(Me.TextBoxIni2UID) + Me.GroupBox2.Controls.Add(Me.Label1) + Me.GroupBox2.Controls.Add(Me.Label2) + Me.GroupBox2.Controls.Add(Me.Label3) + Me.GroupBox2.Controls.Add(Me.TextBoxIni1UID) + Me.GroupBox2.Controls.Add(Me.TextBoxFoldersUID) + Me.GroupBox2.Controls.Add(Me.TextBoxShortcutsUID) + Me.GroupBox2.Location = New System.Drawing.Point(184, 45) + Me.GroupBox2.Name = "GroupBox2" + Me.GroupBox2.Size = New System.Drawing.Size(422, 124) + Me.GroupBox2.TabIndex = 14 + Me.GroupBox2.TabStop = False + Me.GroupBox2.Text = "Unique IDs" + ' + 'Label7 + ' + Me.Label7.AutoSize = True + Me.Label7.Location = New System.Drawing.Point(6, 49) + Me.Label7.Name = "Label7" + Me.Label7.Size = New System.Drawing.Size(46, 13) + Me.Label7.TabIndex = 9 + Me.Label7.Text = "Ini2 UID" + ' + 'TextBoxIni2UID + ' + Me.TextBoxIni2UID.Enabled = False + Me.TextBoxIni2UID.Location = New System.Drawing.Point(95, 46) + Me.TextBoxIni2UID.Name = "TextBoxIni2UID" + Me.TextBoxIni2UID.Size = New System.Drawing.Size(321, 20) + Me.TextBoxIni2UID.TabIndex = 8 + ' + 'GroupBox3 + ' + Me.GroupBox3.Controls.Add(Me.ButtonSaveChanges) + Me.GroupBox3.Controls.Add(Me.ButtonDiscardChanges) + Me.GroupBox3.Controls.Add(Me.Label6) + Me.GroupBox3.Controls.Add(Me.TextBoxTargetPath) + Me.GroupBox3.Controls.Add(Me.Label5) + Me.GroupBox3.Controls.Add(Me.TextBoxLocationName) + Me.GroupBox3.Location = New System.Drawing.Point(185, 175) + Me.GroupBox3.Name = "GroupBox3" + Me.GroupBox3.Size = New System.Drawing.Size(421, 101) + Me.GroupBox3.TabIndex = 15 + Me.GroupBox3.TabStop = False + Me.GroupBox3.Text = "Location Information" + ' + 'ButtonSaveChanges + ' + Me.ButtonSaveChanges.Location = New System.Drawing.Point(209, 72) + Me.ButtonSaveChanges.Name = "ButtonSaveChanges" + Me.ButtonSaveChanges.Size = New System.Drawing.Size(100, 23) + Me.ButtonSaveChanges.TabIndex = 5 + Me.ButtonSaveChanges.Text = "Save Changes" + Me.ButtonSaveChanges.UseVisualStyleBackColor = True + ' + 'ButtonDiscardChanges + ' + Me.ButtonDiscardChanges.Location = New System.Drawing.Point(315, 72) + Me.ButtonDiscardChanges.Name = "ButtonDiscardChanges" + Me.ButtonDiscardChanges.Size = New System.Drawing.Size(100, 23) + Me.ButtonDiscardChanges.TabIndex = 4 + Me.ButtonDiscardChanges.Text = "Discard Changes" + Me.ButtonDiscardChanges.UseVisualStyleBackColor = True + ' + 'Label6 + ' + Me.Label6.AutoSize = True + Me.Label6.Location = New System.Drawing.Point(6, 49) + Me.Label6.Name = "Label6" + Me.Label6.Size = New System.Drawing.Size(82, 13) + Me.Label6.TabIndex = 3 + Me.Label6.Text = "Location Target" + ' + 'TextBoxTargetPath + ' + Me.TextBoxTargetPath.Location = New System.Drawing.Point(94, 46) + Me.TextBoxTargetPath.Name = "TextBoxTargetPath" + Me.TextBoxTargetPath.Size = New System.Drawing.Size(321, 20) + Me.TextBoxTargetPath.TabIndex = 2 + ' + 'Label5 + ' + Me.Label5.AutoSize = True + Me.Label5.Location = New System.Drawing.Point(6, 23) + Me.Label5.Name = "Label5" + Me.Label5.Size = New System.Drawing.Size(79, 13) + Me.Label5.TabIndex = 1 + Me.Label5.Text = "Location Name" + ' + 'TextBoxLocationName + ' + Me.TextBoxLocationName.Location = New System.Drawing.Point(94, 20) + Me.TextBoxLocationName.Name = "TextBoxLocationName" + Me.TextBoxLocationName.Size = New System.Drawing.Size(321, 20) + Me.TextBoxLocationName.TabIndex = 0 + ' + 'GroupBox4 + ' + Me.GroupBox4.Controls.Add(Me.GroupBox3) + Me.GroupBox4.Controls.Add(Me.ListBoxShareNames) + Me.GroupBox4.Controls.Add(Me.GroupBox2) + Me.GroupBox4.Controls.Add(Me.ButtonAddNewShare) + Me.GroupBox4.Controls.Add(Me.Label4) + Me.GroupBox4.Controls.Add(Me.ButtonDeleteShare) + Me.GroupBox4.Controls.Add(Me.TextBoxLastModified) + Me.GroupBox4.Controls.Add(Me.GroupBox1) + Me.GroupBox4.Location = New System.Drawing.Point(12, 54) + Me.GroupBox4.Name = "GroupBox4" + Me.GroupBox4.Size = New System.Drawing.Size(612, 448) + Me.GroupBox4.TabIndex = 16 + Me.GroupBox4.TabStop = False + Me.GroupBox4.Text = "Network Locations" + ' + 'TextBoxPolicyName + ' + Me.TextBoxPolicyName.Enabled = False + Me.TextBoxPolicyName.Location = New System.Drawing.Point(84, 28) + Me.TextBoxPolicyName.Name = "TextBoxPolicyName" + Me.TextBoxPolicyName.Size = New System.Drawing.Size(155, 20) + Me.TextBoxPolicyName.TabIndex = 17 + ' + 'Label8 + ' + Me.Label8.AutoSize = True + Me.Label8.Location = New System.Drawing.Point(12, 31) + Me.Label8.Name = "Label8" + Me.Label8.Size = New System.Drawing.Size(66, 13) + Me.Label8.TabIndex = 18 + Me.Label8.Text = "Policy Name" + ' + 'Label9 + ' + Me.Label9.AutoSize = True + Me.Label9.Location = New System.Drawing.Point(246, 31) + Me.Label9.Name = "Label9" + Me.Label9.Size = New System.Drawing.Size(65, 13) + Me.Label9.TabIndex = 19 + Me.Label9.Text = "Policy GUID" + ' + 'TextBoxPolicyGUID + ' + Me.TextBoxPolicyGUID.Enabled = False + Me.TextBoxPolicyGUID.Location = New System.Drawing.Point(318, 28) + Me.TextBoxPolicyGUID.Name = "TextBoxPolicyGUID" + Me.TextBoxPolicyGUID.Size = New System.Drawing.Size(294, 20) + Me.TextBoxPolicyGUID.TabIndex = 20 + ' + 'GroupPolicyNetworkLocations + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.AutoSize = True + Me.ClientSize = New System.Drawing.Size(636, 514) + Me.Controls.Add(Me.TextBoxPolicyGUID) + Me.Controls.Add(Me.Label9) + Me.Controls.Add(Me.Label8) + Me.Controls.Add(Me.TextBoxPolicyName) + Me.Controls.Add(Me.MenuStrip1) + Me.Controls.Add(Me.GroupBox4) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle + Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) + Me.MainMenuStrip = Me.MenuStrip1 + Me.Name = "GroupPolicyNetworkLocations" + Me.Text = "Group Policy Network Locations Editor" + Me.MenuStrip1.ResumeLayout(False) + Me.MenuStrip1.PerformLayout() + Me.GroupBox1.ResumeLayout(False) + CType(Me.DataGridViewGroups, System.ComponentModel.ISupportInitialize).EndInit() + Me.GroupBox2.ResumeLayout(False) + Me.GroupBox2.PerformLayout() + Me.GroupBox3.ResumeLayout(False) + Me.GroupBox3.PerformLayout() + Me.GroupBox4.ResumeLayout(False) + Me.GroupBox4.PerformLayout() + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + + Friend WithEvents ListBoxShareNames As ListBox + Friend WithEvents MenuStrip1 As MenuStrip + Friend WithEvents FileToolStripMenuItem As ToolStripMenuItem + Friend WithEvents QuitToolStripMenuItem As ToolStripMenuItem + Friend WithEvents HelpToolStripMenuItem As ToolStripMenuItem + Friend WithEvents AboutToolStripMenuItem As ToolStripMenuItem + Friend WithEvents Label1 As Label + Friend WithEvents Label2 As Label + Friend WithEvents Label3 As Label + Friend WithEvents TextBoxIni1UID As TextBox + Friend WithEvents TextBoxFoldersUID As TextBox + Friend WithEvents TextBoxShortcutsUID As TextBox + Friend WithEvents ButtonAddNewShare As Button + Friend WithEvents ButtonDeleteShare As Button + Friend WithEvents GroupBox1 As GroupBox + Friend WithEvents ButtonAddGroup As Button + Friend WithEvents ButtonDeleteGroup As Button + Friend WithEvents DataGridViewGroups As DataGridView + Friend WithEvents TextBoxLastModified As TextBox + Friend WithEvents Label4 As Label + Friend WithEvents GroupBox2 As GroupBox + Friend WithEvents GroupBox3 As GroupBox + Friend WithEvents Label6 As Label + Friend WithEvents TextBoxTargetPath As TextBox + Friend WithEvents Label5 As Label + Friend WithEvents TextBoxLocationName As TextBox + Friend WithEvents ButtonSaveChanges As Button + Friend WithEvents ButtonDiscardChanges As Button + Friend WithEvents GenerateXMLToolStripMenuItem As ToolStripMenuItem + Friend WithEvents ToolStripSeparator1 As ToolStripSeparator + Friend WithEvents Label7 As Label + Friend WithEvents TextBoxIni2UID As TextBox + Friend WithEvents ReadFromGroupPolicyToolStripMenuItem As ToolStripMenuItem + Friend WithEvents ToolsToolStripMenuItem As ToolStripMenuItem + Friend WithEvents SettingsToolStripMenuItem As ToolStripMenuItem + Friend WithEvents GroupBox4 As GroupBox + Friend WithEvents TextBoxPolicyName As TextBox + Friend WithEvents Label8 As Label + Friend WithEvents Label9 As Label + Friend WithEvents TextBoxPolicyGUID As TextBox +End Class diff --git a/GroupPolicyNetworkLocations/GroupPolicyNetworkLocations.resx b/GroupPolicyNetworkLocations/GroupPolicyNetworkLocations.resx new file mode 100644 index 0000000..8a1fb58 --- /dev/null +++ b/GroupPolicyNetworkLocations/GroupPolicyNetworkLocations.resx @@ -0,0 +1,379 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 72 + + + + + AAABAAkAICAQAAEABADoAgAAlgAAABgYEAABAAQA6AEAAH4DAAAQEBAAAQAEACgBAABmBQAAICAAAAEA + CACoCAAAjgYAABgYAAABAAgAyAYAADYPAAAQEAAAAQAIAGgFAAD+FQAAICAAAAEAIACoEAAAZhsAABgY + AAABACAAiAkAAA4sAAAQEAAAAQAgAGgEAACWNQAAKAAAACAAAABAAAAAAQAEAAAAAAAAAgAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8A + AAD/AP8A//8AAP///wAAAAAAAAAAAAAAAAAIeAAAAAAAAAAAAAAAAIh3d3eAAAAHd3d3d3d3d3d3d3d3 + iIAAiIiIiIiId3d3d3d3d4h4AI/////3iIiHd3d3d3eIhwAP////94iIiId3d3d3iIcAAAiIiIeIiIiI + f3iId4h3AAAI///3iHeIiHh4d3d4hwAACP//+Pj3iId3d3d3d3cAAAj///eId3d4iIiHd3d3AAAI//iH + d4iIiIiId3d3dwAACP//+P////iIh3d3d4AAAAj///f/+Id4iId3eAAAAAAI//iIeIiId4iHf4AAAAAA + CP////iIiIN3d/+AAAAAAAj/////////////gAAAAAAI//iIiIiIiIj//4AAAAAACP////////////+A + AAAAAAj/////////////gAAAAAAI//iIiIiIiIj//4AAAAAACP////////////+AAAAAAAj///////// + ////gAAAAAAI//iIiIiIiIj//4AAAAAACP////////////+AAAAAAAj/////////////gAAAAAAI//iI + iIiIiIj//4AAAAAACP////////////+AAAAAAAj/////////////h3cAAAAI/////////////4h3cAAA + AP/////////////4iIAAAACP////////////+IiAAAAACIiIiIiIiIiIiIiIAP///4////AH4AAAAcAA + AADAAAAA4AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAfgAAA/4AAAf+AAAH/gAAB/4AAAf+AAAH/gA + AB/4AAAf+AAAH/gAAB/4AAAf+AAAH/gAAB/4AAAf+AAAH/gAAAP4AAAB/AAAAfwAAAH+AAADKAAAABgA + AAAwAAAAAQAEAAAAAAAgAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAACAgACAAAAAgACAAICA + AACAgIAAwMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP///wAHd3d3d3d3d3d3gACIiIiIiIiIh3d3 + eAD/////+Ih3d3d3eHAAiIiHd3d3d3d3eHcAD//3iIiHd3d3eHcAD//3iHiIf3iHeHcAD/+H+PeIh3d3 + d3cAD//3iHeIiIh3d3cAD//3iI//iId3d3gAD/+H//94iId3iAAAD//4d4iHiIeIAAAAD///+HeId3j4 + AAAAD/+IiIiIiP/4AAAAD//////////4AAAAD//////////4AAAAD/+IiIiIiP/4AAAAD//////////4 + AAAAD//////////4AAAAD/+IiIiIiP/4AAAAD//////////4AAAAD//////////4dwAAD//////////4 + h3AACP//////////iIAAAIiIiIiIiIiIiACAAAcAAAADAAAAAQDAAAAA4AAAAOAAAADgAAAA4AAAAOAA + AADgAAMA4AAPAOAADwDgAA8A4AAPAOAADwDgAA8A4AAPAOAADwDgAA8A4AAPAOAAAwDgAAEA4AABAPAA + AwAoAAAAEAAAACAAAAABAAQAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAA + AACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAd3d3d3d3d3iIiId3d3 + d3eP//94iPeIhwiIiHd3h3d3AI//iIiIiIcAj/d4iId3cACP//93+HcAAI/3d3cRcAAAj/////9wAACP + 93d3/3AAAI//////cAAAj/d3d/93AACP/////3dwAAj/////h3AAAIiIiIiIAAAAAAAAAAAAgAAAAAAA + AAAAAAAAgAAAAMAAAADAAQAAwAMAAMAHAADABwAAwAcAAMAHAADAAwAAwAEAAOABAADwAwAA//8AACgA + AAAgAAAAQAAAAAEACAAAAAAAAAQAAAAAAAAAAAAAAAEAAAABAAAAAAAAO0JBAFZTTABVVE8AXldNAElT + UwBWX1wAZWFdAGxkWgBWYmMAZWVkAGFpZgB0amAAd25jAHduZAB5b2UAe3JmAHdyagB/dWoAfHdyAH97 + dQCAd2oAgHdsAIF6bQCFfG8Ahn1xAIN9dQCIfnIAjIJzAIqBdQCMg3UAjYR2AIWCegCHhXkAioJ5AIqE + eACNhXkAiYN8AIyFfQCPiHsAkIZ4AJKIewCRiX0Alo1+AEWRnQB9iYMAdoaIAHmMjwBtkZIAaJecAGed + pQBWpbYAWqOyAFOmuABUp7gAWK2/AGCgqwBvoKwAe6OsAHCruQB7wcwAesvYAIqIhgCVjIAAlY6GAJiP + gQCRjokAjZCLAJmQggCZkoUAnJOEAJ2UhgCWkYkAlZSJAJyTiACblYoAnpWIAJmUjACdl44AnpiJAJmX + kQCRnpgAoJiKAKKajQCkm40Aop6PAKScjQCim5EApZ6RAKSdlACcopsAp6GTAKKilgCpoZIAqaKUAKul + lQCspJUAo6ObAKainQCipZ4AqqOYAKulmACuppkAqqafAK6nnwCuqJkAsKeYALCpmgCzrJsAsqucALKt + ngC0rZ0Ajq2tAJuurwCdr7AAnbCxAKqnoACnq6MArK+tALKroACzr6MAta6gALGpqACzq64At7CgALWx + pAC5saAAubKkALu1pgC9tqYAt7OrALSyrgC7tqgAvrmpAL+6rwChr7EApK+xAKewsQCturYArL++ALay + sAC6sbUAu7S4ALy1uQC0uroAvrm9AMK7qQDCvKsAwLutAMW8rQDIwK8AxcCyAMTAtADJwrIAycW1AMzH + tADLx7sAxcm9AMzKugDKy74AzMm+ANHLugDSzb0A1s+9ANTQvgCBtMEAi7nAAL+8wADBvMAAwb/EAIjG + 0gCDyNIAmc7aAL/CxwCq0tgAvNfeAIXZ7ACe2eIAnt/uAIPd8QCi3egAvdviALna5AC93eYAneDuAK3i + 6wC34+oApeLyALXx/wDBwcUAxMLGAMjPxADBxcoAxcbKAMjGygDTz8IA1tPJANzZzwDBzNIAzNXcAMbZ + 2QDK298AztnfAN/c0QDU2NgA5N3KAOLdzwDg3NAA5eDTAOXi2ADr59wA8evZANHZ4ADY3+UAxuHlAMzj + 6gDP7O8A0OPpANfv8gDF9f4AyfH6AM/0+gDK9f8AzfX9ANbw8wDT8PUA1PX3ANDz+QDT9PoA1vb9AN/y + +ADZ9/0A0fj/ANb4/wDa+P4A3fn+ANv+/wDe/v8A7OrhAPLt4QDx7+kA9fHqAOvz9ADh+v4A5fr+AOH/ + /wDm//8A6vv+AOz7/gDp//8A7f//APHx8QDw+/0A8f7+AAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAGcmZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAINiQCYZFwxTeQAAAAAAADU1NTU1NTU1NTUz + NDgxMC0hJh4eGRcXDExsZ4MAAACss7CwsLCwsLCqpnBRSUFERCsrKygeGxkMTGxsW3QAANbo6Ojo6Ojo + 6ERgYGBgYFNTREQbHh4eFwxMbGxgTAAAANrg4N3j4+PjU5aVmYFsZ2BTRBkTKB4mD0RgbGBMAAAAAADG + u7iysrJXoZlqlYWBbGxE+wqBbGwZJ2xgU0wAAAAAAMfdvLy8vFfNfEI+oZmZnlN2BGlbKxISU2lnTAAA + AAAAyuPb29vbYNNp+wekhWxEJhQRHh5AJgwVK1dMAAAAAADU493d3d1XoWBQCFNEUoGEeXx5Z1dMGQwQ + F0kAAAAAANTn3d3ArStTRGCVzc/LxcSehWceHkRAGRAVTAAAAAAA1Ord3d3dZ+/v8fDu0dHDl4F5UiFX + GUxMTGcAAAAAAADU6ujo6OhX8fHS0JxMU5menb9bA1pDgwAAAAAAAAAAANTq6OjArYxXYJWZl2IDJnp6 + iwsu4HEAAAAAAAAAAAAA1PPo6Ojo6NiKYmJ1yHMBBgkFL+PqcgAAAAAAAAAAAADU8+rq6urq6urq6urq + 6urq6urq6upyAAAAAAAAAAAAANTz6urAramnkY+PjY2NjY2N6urq83IAAAAAAAAAAAAA1PPq6urq6urq + 6urq6urq6urq6urzcgAAAAAAAAAAAADU8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/OHAAAAAAAAAAAAANT38/PA + ra2pkY+PjY2NjY2N8/Pz94cAAAAAAAAAAAAA1Pfz8/Pz8/Pz8/Pz8/Pz8/Pz8/P3hwAAAAAAAAAAAADU + 9/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/eHAAAAAAAAAAAAANT39/fCra2pkY+PjY2NjY2N9/f394cAAAAAAAAA + AAAA1Pf39/f39/f39/f39/f39/f39/f3hwAAAAAAAAAAAADU9/f39/f39/f39/f39/f39/f39/2HAAAA + AAAAAAAAANT39/fCra2pkY+PjY2NjY2N9/f3/YcAAAAAAAAAAAAA1P339/f39/f39/f39/f39/f39/f9 + iQAAAAAAAAAAAADU/ff39/f39/f39/f39/f39/f39/2QOTs6AAAAAAAAANX99/f39/f39/f39/f39/f3 + 9/f3/cylNywyAAAAAAAAAOfz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8q+0PKsAAAAAAAAA2d3d3d3d3d3d3d3d + 3d3d3d3d3d3dyrE9uQAAAAAAAAAA17e3t7e3t7e3t7e3t7e3t7e3t7e3rroAAP///4////AH4AAAAcAA + AADAAAAA4AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAfgAAA/4AAAf+AAAH/gAAB/4AAAf+AAAH/gA + AB/4AAAf+AAAH/gAAB/4AAAf+AAAH/gAAB/4AAAf+AAAH/gAAAP4AAAB/AAAAfwAAAH+AAADKAAAABgA + AAAwAAAAAQAIAAAAAABAAgAAAAAAAAAAAAAAAQAAAAEAAAAAAABGTk4AUVdUAGNhUwBzalgAdGlbAHVq + XAB5bl0AXmlpAF9sbgBvbGUAfXBkAH51ZwB6d3AAfHVwAIB3ZwCBdWkAhHVpAIV8agCGemwAgX1vAIh/ + bgCKgG4AhYF3AI6CcACIhXcAj4Z3AIWEfACJhnwAkYNzAJKHcwCViXYAlIp6AJCIfQCWjnwAnJN/AG+B + gABkkpoAUpeiAF+ptwBloa4AbKKvAGOuvQBXr8IAYLHCAH/I0wCKiIMAj4uGAImSjACUkocAmZGAAJ+W + gwCdlYUAmZWKAJqXjQCcl4wAnZqNAJqXkACZnJQAm5+YAKCXgwClmoYAopqJAKabiACnnYkAqJ6KAI2g + mgCnoZMApqGVAKqhkQCtppIAqKSUAK+nlACvqJMApqieAK6ongCxqpUAsKqZALSsmACyrp8Ata+cALaw + ngC5sZwAvbOeAJenqQCRs7YAn7CwALOuoAC1r6MAtLCgALuzoAC+tqIAvremALu1rACitbYApbW2AKi0 + tgCttrcArLq3ALe2sAC6sbUAs761ALu0uAC8tbkAs7u8AL65vQDAu6cAw7ynAMC5qQDEvqoAtsK9AMbB + rADLwq4Ay8SuAMvGsgDOxbAAysW0AMjEuwDRx7IA08y2ANTOuQDSzL0AibrFAMG8wADBv8QAhsvWAJrL + 1ACczdUAms/ZAK3FyQC6yMYAv8XKALjOzAC0z9UAstXfALTW3wC71NkAn93pALTW4AC22OEAoub1AKnj + 8ACp5fIAoev5ALXw/QDDwcUAxcLGAMLGygDFxsoAycbKAN/XwQDf2cIA3tvLAM7T1QDM1toAxdnaANLW + 2gDW3NwA6uXVAO3p2wDz7dUAwNzjAMrb4gDK3+EA1OboANHr7gDJ9v4Azvb/AMr4/wDN+P8A1/f9ANj0 + +ADZ9/0A3ff8ANH4/wDW+P4A2fn+AN36/wDe/P4A9fLkAP757ADh+v4A5Pv/AOH9/wDk/f8A6fv/AOz7 + /gDp/v8A7f3/AP//9gDw/f8A9f7/APn+/wD+//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wAAKywsLCwsLCwsLCwsLCwsKiUkF10A + AACAj4yMjIyMjIyMjIyJflVCGxAPBkVXAACksrKysrKysqWbbko4Hx4eGBIQBkBSRQAAAJmOjo6OMEVF + QUFAPCMYFhYSBkFORUQAAAC+kJCQMXNwcFJMRT0hDh8hCzNMRUQAAAC+qKamNZZrM21va0X/DltOFSFO + QUQAAAC+qKaDNaBt/0V3a0kvCjMhEgchRUQAAAC+rqamNXhRLyFbW1tZTk5AMwsGCzUAAAC+rq6uOHZv + c56zn5h4bTMYISEQEEsAAAC+rq6TNbS9tJ9ETndvcxIcGFd1AAAAAAD/srKyozlEl3NjA2WbYgKEVgAA + AAAAAAD/srKysqtiOjuCVAEICIG3XgAAAAAAAAD/t7KTknx8aWdnZGSasrK3XgAAAAAAAAD/t7e3t7e3 + t7e3t7e3t7e7XgAAAAAAAAD/t7e3t7e3t7e3t7e3t7e7YAAAAAAAAAD/u7eTkpJ8aWdnZGSct7e7YAAA + AAAAAAD/u7u7u7u7u7u7u7u7u7u+YAAAAAAAAAD/u7u7u7u7u7u7u7u7u7u+YAAAAAAAAAD/u7uVkpJ8 + aWdnZGScu7u+YAAAAAAAAAD/u7u7u7u7u7u7u7u7u7u+YAAAAAAAAAD/vru7u7u7u7u7u7u7u7u+aCko + AAAAAAC+/7u7u7u7u7u7u7u7u7u7nXonJgAAAACjq7eyrq6urqqqqq6urq6yq4h9LQAAAAAAoYqGhoaG + hoqLi4qGhoaGioV+AACAAAcAAAADAAAAAQDAAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAMA4AAPAOAA + DwDgAA8A4AAPAOAADwDgAA8A4AAPAOAADwDgAA8A4AAPAOAAAwDgAAEA4AABAPAAAwAoAAAAEAAAACAA + AAABAAgAAAAAAAABAAAAAAAAAAAAAAABAAAAAQAAAAAAADE/QwAzQEMASEhIAFVPRwBFV1sAUVFRAFhR + UwBaWloAWHB2AHVrYQB3bWMAenBlAH1zaACBd2wAhHpuAId9cQCJf3MAk4p7AFaCjgBfjpsAcJyoAIGB + gQCLgIQAiIiIAI6OjgCakYUAnZiLAIqSmQCampoAoZiKAKOXlwClnZEAppieAKmZngCsmp4AqqKXAK+n + nACtqJkAsamdAKyvrQC1raIAubGnAL+4rgC2trYAubm5AL29vQDAuawAysS3AJC2wACgv8gAoMDIAI/Q + 4gCY0+QAteDsALPs+wC47vsAve77AMHBwQDFxcUAysrKANbPwwDB0toA0NDQANbW1gDg2s4Aze33AMHv + +wDS7fUA1+31ANvt9ADf7/UAw/H7AMXx+wDF8PwAyvP7AMjx/ADN8vwA3vH2ANb1+wDS9fwA1vX+AN31 + +wDZ9vwA3Pf8AN34/gDq6uoA4/P4AOT3+wDg9/0A5vf+AOnz+ADo9fkA7vb6AO/3/ADi+P0A5fn9AOn5 + /QDs+/4A7/z+APH6/QDx/P8A9fz+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AAAYGBgYGBIREA8ODQwLCwsxNjQ1NTUeGxsb + GxsbGxsLM1xXTk5OHiYmJlYEJiYmCwAyMTExMRIPDw8oBA8PDwsAAC5CQzkrQT0wLyknJycaAAAuREwh + HyopJSQgGhoaAAAALkRMTExIBQk5NwMIAAAAADpETyIiIRcHAgEGAAAAAAA6RlJSUk9MTEg5HQAAAAAA + OkZXIiIiIiJMSB0AAAAAADpcZGFgV1JSUk8YAAAAAAA8XGQiIiIiImBVGBMAAAAAP1xkZGRkYWFhYBwV + FAAAAAA/ZGRkZGRkYVc+FhUAAAAAAD8/PDo6Li4uLC4AAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAA + AACAAAAAwAAAAMABAADAAwAAwAcAAMAHAADABwAAwAcAAMADAADAAQAA4AEAAPADAAD//wAAKAAAACAA + AABAAAAAAQAgAAAAAACAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAB5cmUKd25jMHRsYVVzbWGac2pg0JSMf8uKg3czAAAAAAAAAAAAAAAAAAAAAAAAAACNlZsajZWbXI2V + m1yNlZtcjZWbXI2Vm1yNlZtcjZWbXI2Vm1yNlZtcjZWbXI2Vm1yNlZtcjZWbXI2Vm1yNlZtcjJGVZIWH + h3iCgHuZhH53t4F5cNaCeW/tgXpu9YF6bP90a2H/opqM/6ylluN7c2lkcmxhCQAAAAAAAAAAAAAAAGuF + i0BFn7PrRaCz6kWfsulFn7LpRZ+y6UWfsulFn7LpRZ+y6UWfsulFn7LpR56w6k2crOtUmaXtYJKX8meN + jvR7h4H6h4V5/oqEeP6LgnX/i4F0/4d+cv+FfG//g3pu/3RqYP+floj/s6yb/62klveMhXmeXFZOHwAA + AAAAAAAAjsnW5oPd8f+F2ez/hdns/4XZ7P+F2ez/hdns/4XZ7P+F2ez/iMbS/4u5wP+Ora3/kZ6Y/5WU + if+Yj4H/mpGD/5qQgf+Xjn//lYx9/5KIe/+Qh3n/ioJ0/4h+cv+GfXD/dWth/5+WiP+yq5z/saqb/6ag + kfp8d22lAAAAAAAAAADA3uPm0/v//9D5///R+f//0fj//9H4///R+P//0fj//9H4//+Zk4f/raWV/66l + lv+tpJX/q6OU/6igkf+knI3/oZiK/52Uhf+ck4T/iX5y/4yCc/+NhHb/jIN1/4V8b/90amD/n5eJ/7Ss + nP+wqZn+rKWW/5SPhvEAAAAAAAAAAMDe41PW7/Lz1PDz8tLw9fnP9Pr/0PP5/9Dz+f/Q8/n/0PP5/6Ka + j//IwK//xbyt/8nDsv+9tqb/s6uc/6+nmP+qo5P/pp6P/56Vh/+DfXX/fHdy/5CGeP+PhXf/joZ5/3lv + Zf+akoX/raSV/7Cpmf6rpZX/k46F7gAAAAAAAAAAAAAAALC8wAyipKMKn7C6pKXi8v+d4O7/nt/u/57f + 7v+e3+7/o5uQ/9HLuv/KwrL/sKeY/8K7qf+/uan/ubKk/7GrnP+wqpr/mZGD//Dx8f9lZWT/ubGg/7Wu + n/+zrp//h31z/4+Ie/+yq5v/q6KT/6Sbjf+SjYTuAAAAAAAAAAAAAAAAAAAAAAAAAACru8aay/T//7Tx + //+28f//tvH//7bx//+ln5L/5N3K/7ewoP+Rjon/ioiG/9bPvf/LxbX/yMOz/8zKuv+gmIv/rK+t/15X + Tf+uqJn/p6GT/5KKfv9/dWv/f3Zq/6Oej/+vqJn/r6eY/5OOhe4AAAAAAAAAAAAAAAAAAAAAAAAAAK/B + zJzV9v3/xfX+/8b1/v/G9f7/xvX+/6iglf/x69n/r6ma//Ly8v9lYV3/1NC+/766qv+yrJ7/mZKE/46F + ef9/e3X/d3Jq/4yEd/+Lg3b/lYyA/42Eef93bmT/gHdq/5GKfv6knpH/k46G7gAAAAAAAAAAAAAAAAAA + AAAAAAAAtMPOnNf3/f/K9v//y/b//8v2///L9v//o5uQ/9LNvf+spZf/mZeR/2xkWv+gmIn/nJWH/5+Y + iv+7tab/u7ao/7Ovo/+1saT/squg/66nm/+nn5L/nZWJ/4V9cf53bmP+e3Jl/4F6bv+QioLvAAAAAAAA + AAAAAAAAAAAAAAAAAAC1xM+c2ff9/8z2///N9v//wMXK/7/Cx/+RiX3/pJyN/5qShP+qo5X/wLut/+Ld + z//g3ND/39zR/9zZz//W08n/zMm+/7+6r/+rpZj/iYF2/4mBdf+ck4X/lY2B/4d/c/97cmf/gHds/4qD + etsAAAAAAAAAAAAAAAAAAAAAAAAAALXEz5zb+P3/zvf//8/3///P9///z/f//6ujmP/y7eD/8u7j//fy + 6v/x7+n/7Orh/+Xi2f/m49j/08/C/8XAsv+7tqf/tq+g/52Yif+Fgnr/oZuT/4d9cP+bkof8l46C75GK + fueTin+/jYN1WAAAAAAAAAAAAAAAAAAAAAAAAAAAtcPPnNz5/f/R+P//0vj//9L4///S+P//pJ2U//Tw + 6v/28ur/6+fc/+Xg0//Lx7v/nZeO/6Kej//Ixrb/ysu+/8XJvf/Iz8T/oqKW/1VUT/+copv/jZCL/5OQ + iK6blYhOm5WIMpiQhBsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC0ws2c3vj9/9T4///V+P//wsbK/8DC + x/+2srD/pZ6U/6yklf/CvKv/zMe0/8TAtP+nop3/VlNM/4mDfP+xqaj/s6uu/6y/vv9haWb/doaI/9T1 + 9/+brq//jZWbXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALPCzZzg+f3/1vn//9f5 + ///X+f//1/n//9f5///P7O//rbq2/6Klnv+jo5v/p6uj/8bZ2f+dsLH/O0JB/1ZfXP9WYmP/SVNT/3mM + j//T9Pr/2/7//5yvsP+NlZtcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAs8LNnOL5 + /f/Z+f//2vn//9r5///a+f//2vn//9r5///a+f//2vn//9r5///a+f//2vn//9r5///a+f//2vn//9r5 + ///a+f//2vn//9r5///e/v//na+x/42Vm1wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAC0ws2c5Pr9/9z6///c+v//xMbK/8LCx//Bv8T/v7zA/765vf+8trr/u7S4/7uytv+6sbX/urG1/7qx + tf+6sbX/urG1/9z6///c+v//3Pr//+D///+dr7H/jZWbXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAALTCzZzl+v3/3vr//976///e+v//3vr//976///e+v//3vr//976///e+v//3vr//976 + ///e+v//3vr//976///e+v//3vr//976///e+v//4////5+vsf+NlZtcAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAtMLNnOf6/f/h+v//4fr//+H6///h+v//4fr//+H6///h+v//4fr//+H6 + ///h+v//4fr//+H6///h+v//4fr//+H6///h+v//4fr//+H6///m////oa+x/42Vm1wAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC0w82c6fv9/+P7///j+///xsbK/8TDx//CwMT/wLzA/765 + vf+9trr/u7S4/7uytv+6sbX/urG1/7qxtf+6sbX/urG1/+P7///j+///4/v//+j///+hr7H/jZWbXAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALTDzZzq+/3/5fv//+X7///l+///5fv//+X7 + ///l+///5fv//+X7///l+///5fv//+X7///l+///5fv//+X7///l+///5fv//+X7///l+///6v///6Kv + sf+NlZtcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtMPNnOz7/f/n+///5/v//+f7 + ///n+///5/v//+f7///n+///5/v//+f7///n+///5/v//+f7///n+///5/v//+f7///n+///5/v//+f7 + ///s////o6+x/42Vm1wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC0w82c7fv9/+n7 + ///p+///yMbK/8XDx//DwMT/wbzA/7+5vf+9trr/vLS4/7uytv+6sbX/urG1/7qxtf+6sbX/urG1/+n7 + ///p+///6fv//+7///+kr7H/jZWbXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALXD + zZzt+/3/6vv//+r7///q+///6vv//+r7///q+///6vv//+r7///q+///6vv//+r7///q+///6vv//+r7 + ///q+///6vv//+r7///q+///7////6Svsf+NlZtcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAuMXPnO/7/f/r+///6/v//+v7///r+///6/v//+v7///r+///6/v//+v7///r+///6/v//+v7 + ///r+///6/v//+v7///r+///6/v//+v7///w////pK+x/42Vm1wAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAC4xc+c7/v9/+z7///s+///ycbK/8bDx//EwMT/wrzA/7+5vf++trr/vLS4/7uy + tv+6sbX/urG1/7qxtf+6sbX/urG1/+z7///s+///7Pv///H///+lr7H/jZWbXAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAALjF0Jzw+/3/7fv+/+37/v/t+/7/7fv+/+37/v/t+/7/7fv+/+37 + /v/t+/7/7fv+/+37/v/t+/7/7fv+/+37/v/t+/7/7fv+/+37/v/t+/7/8v///6ewsf+NlZtcAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuMXQnfD7/f/t+/7/7fv+/+37/v/t+/7/7fv+/+37 + /v/t+/7/7fv+/+37/v/t+/7/7fv+/+37/v/t+/7/7fv+/+37/v/t+/7/7fv+/+37/v/z////tLq6/1eQ + ntoyh5uxNXOApk5kZz8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC4xdCM8fz+/+37/v/t+/7/7fv+/+37 + /v/t+/7/7fv+/+37/v/t+/7/7fv+/+37/v/t+/7/7fv+/+37/v/t+/7/7fv+/+37/v/t+/7/7fv+//L/ + ///U2Nj/gbTB/1itv/9FkZ3/VpKb5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALHAyn/f8vj/5vr+/+X5 + /f/l+f3/5fn9/+X5/f/l+f3/5fn9/+X5/f/l+f3/5fn9/+X5/f/l+f3/5fn9/+X5/f/l+f3/5fn9/+X5 + /f/l+f3/5vv+/+vz9P+8197/ot3o/3vBzP92ws7lAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2+XnWcPb + 48TJ8fr/zvX9/871/f/O9f3/zvX9/871/f/O9f3/zvX9/871/f/O9Pz/zfT8/830/P/O9Pz/zvX9/871 + /f/O9f3/zvX9/871/f/O9v3/z/X9/8rb3/+e2eL/esvY/4/Y5LkAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA2+XnWbfY4rOz2OPcttrj9bba4/W32uP1t9rj9bja4/W42uP1uNrj9brb5fW83ef1vN3n9brc + 5fW42uP1uNrj9bja4/W32uP1t9rj9bbZ4/W22uT1u9rh9afQ1/SY1+Kxo9jiNAAAAAD///wHwAAAAcAA + AADAAAAAwAAAAMAAAADgAAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAB+AAAD/gAAA/4AAAP+AAAD/gA + AA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAB+AAAAfgAAAH4AAAB/AAAASgA + AAAYAAAAMAAAAAEAIAAAAAAAYAkAAAAAAAAAAAAAAAAAAAAAAABciJFtR6i96Eqmut9KprrfSqa630qm + ut9KprrfSqa630qmut9KprrfSqa630qmut9KprrfSqa630qmut9KprrfT6S14lKFjuNTaWjVbGdb0pKI + eZ13cGcJAAAAAAAAAACWzdj0oev5/6Ln9v+i5/b/ouf2/6Ln9v+i5/b/ouf2/6Ln9v+i5/b/ouf2/6Ll + 9P+f3en/msvU/5Gztv+NoJr/hYR8/4B2a/+Ad2f/dWpc/6uhkP+blIHAeHFmN1xVTgG+2t2n3/z+/9v7 + ///Z+f7/2vn+/9r5/v/a+f7/2fj8/9Hr7v/G2tr/tsK9/6aonv+em43/lIl3/5KHc/+Rg3P/joNx/4Z9 + a/+EdWn/dWlb/6edif+5sZz/oZmH6G5oX2O00NUQqbKzN6Crr4Op5fL/qeXy/6nj8P+p4/D/iZKM/6ik + lP+qopH/qp+L/6ifi/+mm4j/oJeD/5yTf/+OgnD/ioBt/4qBb/+FfGr/dGlb/6ieiv+1rZj+r6eU/5WQ + gNQAAAAAAAAAAJihqFTw/P//tfL+/7Xw/f+18P3/lJKH/87FsP/Lwq7/y8Su/72znv+yq5f/rKaS/6Wa + hv+QiH3/fHVw/5aJdv+Uinn/fXBk/5+Wg/+xqZT/rqeT/5eRg9gAAAAAAAAAAKS1wVv0/v//yvj//8n2 + /v/J9v7/mJWL/9/Xwf/DvKf/nZaG/8S/qv/Hwaz/wLun/62nk///////endw/7+2ov+1r5z/iH9u/5SL + e/+0rJj/qZ+L/5WPgdUAAAAAAAAAAKi2wlv1/v//zfj//8z2//+/xcr/mpWJ//Pt1f/Evqv//////6ml + lf/TzLb/wbun/6+ok/+Pi4b/b2xl/5qSgP+Wjn3/hnps/3luXf+Uinv/q6KS/5eShNYAAAAAAAAAAKi2 + wlv2/v//0Pn//8/3///P9///mpeN/9TOuf+2sJ7/ioiD/5aPfP++tqL/u7Og/763pv+0sKD/sq6f/7Gq + mP+imon/nZWE/35xZf5zalj+fnVn/46He9wAAAAAAAAAAKi1wlv2/v//0/r//9L4///S+P//nJqN/9HH + sv/HwK3/ysS0/+rl1f/18uT/7erb/97by//SzL3/wLmp/5iRgP+Phnf/lYp6/5eOff+Dd2r/gXRo/4iA + ca0AAAAAAAAAAKe0wFv3/v//1/r//9b4///Cxsr/nJeM//757P////b///rt/+3p2/+noZP/sKua/9PN + t//Gwq3/yse0/4F9b/+Jhnz/iIV2/ZmRgLiak4KKl5CEZZCHeR4AAAAAAAAAAKa0wFv4/v//2vv//9n5 + ///Z+f//yt/h/5qXkP+moJT/39nC/8vGsv+3trD/Y2FT/7O+tf/E2dr/rLu3/1FXVP+4zsz/mqys8pOT + iwsAAAAAAAAAAAAAAAAAAAAAAAAAAKe0wFv4/v//3vz//9z6///c+v//3Pr//9j0+P+tubf/mZyU/5uf + mP+6yMb/l6ep/0ZOTv9eaWn/X2xu/63Fyf/i////nbGy8ZCipAMAAAAAAAAAAAAAAAAAAAAAAAAAAKe0 + wFv5/v//4Pz//976///Exsr/w8LH/8G/xP/AvMD/vrm9/722uv+7tLj/u7K2/7qxtf/M1tr/3vr//976 + ///k////n7Gy8ZKipAMAAAAAAAAAAAAAAAAAAAAAAAAAAKa0wFv6/v//5Pz//+L6///i+v//4vr//+L6 + ///i+v//4vr//+L6///i+v//4vr//+L6///i+v//4vr//+L6///o////obGy8ZSipAMAAAAAAAAAAAAA + AAAAAAAAAAAAAKa1wFv6////5v3//+T7///k+///5Pv//+T7///k+///5Pv//+T7///k+///5Pv//+T7 + ///k+///5Pv//+T7///q////o7Gy8ZWipAMAAAAAAAAAAAAAAAAAAAAAAAAAAKa1wFv7////6f3//+f7 + ///Hxsr/xcPH/8PAxP/BvMD/v7m9/722uv+8tLj/u7K2/7qxtf/R1tr/5/v//+f7///t////pLGy8Zai + pAMAAAAAAAAAAAAAAAAAAAAAAAAAAKa1wFv7////6/3//+n7///p+///6fv//+n7///p+///6fv//+n7 + ///p+///6fv//+n7///p+///6fv//+n7///w////pbGy8ZaipAMAAAAAAAAAAAAAAAAAAAAAAAAAAKi2 + wVv7////7P3//+r7///q+///6vv//+r7///q+///6vv//+r7///q+///6vv//+r7///q+///6vv//+r7 + ///x////pLGy8Z6lpgMAAAAAAAAAAAAAAAAAAAAAAAAAAKq3wlv8////7v3//+z7///Jxsr/xsPH/8TA + xP/CvMD/v7m9/762uv+8tLj/u7K2/7qxtf/T1tr/7Pv//+z7///z////qbKz8Y6hpQIAAAAAAAAAAAAA + AAAAAAAAAAAAAKq3w1v8////7/3//+37/v/t+/7/7fv+/+37/v/t+/7/7fv+/+37/v/t+/7/7fv+/+37 + /v/t+/7/7fv+/+37/v/0////p7Cy8UODkwYRb4MBAAAAAAAAAAAAAAAAAAAAAKq3w1v8////8P3//+77 + /v/u+/7/7vv+/+77/v/u+/7/7vv+/+77/v/u+/7/7vv+/+77/v/u+/7/7vv+/+37/v/1////s7u8/j6F + lsIcdYisOWFmeAAAAAAAAAAAAAAAAKSyvk/x/f///P///+z7/v/s+/7/7Pv+/+z7/v/s+/7/7Pv+/+z7 + /v/s+/7/7Pv+/+z7/v/s+/7/7Pv+/+z7/v/v/v//1tzc/4m6xf9fqbf/Upei/wAAAAAAAAAAAAAAAL/K + zzzA1d3V2ff9/+D6/v/Y+P7/1/j+/9f4/v/X+P7/1/j+/9f3/v/X9/3/1/f9/9f4/v/X+P7/1/j+/9f4 + /v/Y+f//3ff8/7vU2f+Gy9b/dcTQ7AAAAAAAAAAAAAAAANTd3gfK2NtZrdHbwazT3eWu1N3wr9Td76/U + 3e+v1N3vr9Td77HU3u+y1uDvstbf77DV3u+v1N3vr9Td76/U3e+u093vr9Te77DN0/KPx9DgkM3ZbgAA + AAAAAAMAAAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAHAMAABwDAAAcAwAAHAMAA + BwDAAAcAwAAHAMAABwDAAAcAwAADAMAAAQDAAAEAwAABAMAAAQAoAAAAEAAAACAAAAABACAAAAAAAEAE + AAAAAAAAAAAAAAAAAAAAAAAAZ2dnO2lpacVra2vNampqympqaspqamrKk4p7/4l/c/+HfXH/hHpv/4F3 + bP99c2j/enBl/3dtY/91a2H/dWth/26frcG14Oz/j9Di/5jT5P+Y0+T/mNPk/6GYiv+dmIv/nZiL/52Y + i/+dmIv/nZiL/52Yi/+dmIv/nZiL/3VrYf+CrLfB6PX5/+Pz+P/e8fb/3vH2/97x9v+hmIr/raiZ/62o + mf+tqJn/6urq/1VPR/+tqJn/raiZ/62omf91a2H/eay6OJW4wuSMs77wjbO+9JC2wP6QtsD/k4p7/4V6 + bv+Fem7/hXpu/6yvrf9VT0f/hXpu/4V6bv+Fem7/dWth/wAAAAAAAAAAtbW15c3t9//B7/v/vu/7/7+4 + rv/g2s7/1s/D/8rEt//Auaz/t6+j/7Gpnf+xqZ3/samd/5qRhf8AAAAAAAAAALa2tuXR7fb/yPH8/6aY + nv+jl5f/ubGn/7Ssov+vp5z/qqKX/6Wdkf+akYX/mpGF/5qRhf+ZkoY+AAAAAAAAAAC4uLjl0+31/8/z + /P/M8/z/yfL8/8Px+/9FV1v/WHB2/7ju+/+z7Pv/Pz8/8gEBAaUAAAAAAAAAAAAAAAAAAAAAu7u75dft + 9f/W9fv/qJme/6iZnv+nmZ7/i4CE/1hRU/8zQEP/MT9D/0dHR/ALCwsuAAAAAAAAAAAAAAAAAAAAAL29 + veXb7fT/3fX7/9v3/P/Y9vz/0vX8/87z/P/K8/v/xfH7/73u+/+Ojo7jVFRUBAAAAAAAAAAAAAAAAAAA + AADAwMDl3+/1/+T3+/+qmp7/qpme/6mZnv+omZ7/qJme/8zy/P/F8Pz/jo6O41NTUwQAAAAAAAAAAAAA + AAAAAAAAxMTE/Onz+P/w+v3/6fn9/+b5/P/g9/3/3Pf8/9j2/P/b9vz/1vX+/46OjvxOdYEuRmlzAgAA + AAAAAAAAAAAAAMbGxuXu9vr/9Pz+/6yanv+smp7/q5qe/6qanv+qmZ7/4vj9/934/v+Ojo79VoKO/mKS + oHwAAAAAAAAAAAAAAADGxsbO7/f8//f9///3/f//9v3///L8///v/P7/7Pv+/+n6/v/k+v7/ho+W9nCc + qf9djZr7AAAAAAAAAAAAAAAAuLi4QcbGxs7z+v7/9fz///b9///0/f//8/3///D8///t+/7/5vf+/8HS + 2v+BgYH/X4+d4QAAAAAAAAAAAAAAALe3twvNzc1szc3NzszMzOXJycn/w8PD/8DAwP+9vb3/urq6/7i4 + uP+2trb/sLCw4F6OnEsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAwAAAAMADAADAAwAAwAMAAMAD + AADAAQAAwAEAAMABAADAAQAAwAEAAP//AAA= + + + \ No newline at end of file diff --git a/GroupPolicyNetworkLocations/GroupPolicyNetworkLocations.vb b/GroupPolicyNetworkLocations/GroupPolicyNetworkLocations.vb new file mode 100644 index 0000000..65f9740 --- /dev/null +++ b/GroupPolicyNetworkLocations/GroupPolicyNetworkLocations.vb @@ -0,0 +1,862 @@ + +Imports System.Xml +Imports System.DirectoryServices +Imports Tulpep.ActiveDirectoryObjectPicker +Imports System.Text +Imports System.IO +Imports Microsoft.Win32 + +Public Class GroupPolicyNetworkLocations + + ' ******************************************************* ' + ' * Global Constants Declared Below * ' + ' ******************************************************* ' + + ' Used in Ini Folder and Shortcut + Const ShareImage = "2" + Const ShareUserContext = "1" + Const ShareBypassErrors = "1" + + ' Used in Ini Folder and Shortcut Properties + Const SharePropAction = "U" + + ' Used in Ini 1 and 2 + Const IniClsid = "{EEFACE84-D3D8-4680-8D4B-BF103E759448}" + + ' Used in Ini 1 + Const Ini1Name = "CLSID2" + Const Ini1Status = Ini1Name + + ' Used in Ini 2 + Const Ini2Name = "Flags" + Const Ini2Status = Ini2Name + + ' Used in Ini Properties 1 and 2 + Const IniPropPath1 = "%APPDATA%\Microsoft\Windows\Network Shortcuts\" + Const IniPropPath3 = "\desktop.ini" + Const IniPropSection = ".ShellClassInfo" + + ' Used in Ini Properties 1 + Const Ini1PropValue = "{0AFACED1-E828-11D1-9187-B532F1E9575D}" + Const Ini1PropProperty = "CLSID2" + + ' Used in Ini Properties 2 + Const Ini2PropValue = "2" + Const Ini2PropProperty = "Flags" + + ' Used in Folder + Const FolderClsid = "{07DA02F5-F9CD-4397-A550-4AE21B6B4BD3}" + Const FolderDisabled = "0" + + ' Used in Folder Properties + Const FolderPropDeleteFolder = "0" + Const FolderPropDeleteSubFolders = "0" + Const FolderPropDeleteFiles = "0" + Const FolderPropDeleteReadOnly = "0" + Const FolderPropDeleteIgnoreErrors = "0" + Const FolderPropPath1 = "%APPDATA%\Microsoft\Windows\Network Shortcuts\" + Const FolderPropReadOnly = "1" + Const FolderPropArchive = "0" + Const FolderPropHidden = "0" + + ' Used in Shortcut + Const ShortcutClsid = "{4F2F7C55-2790-433e-8127-0739D1CFA327}" + Const ShortcutName = "target" + Const ShortcutStatus = "target" + + ' Used in Shortcut Properties + Const ShortcutPropPid1 = "" + Const ShortcutPropTargetType = "FILESYSTEM" + Const ShortcutPropComment = "" + Const ShortcutPropShortcutKey = "0" + Const ShortcutPropStartIn = "" + Const ShortcutPropArguments = "" + Const ShortcutPropIconIndex = "0" + Const ShortcutPropIconPath = "" + Const ShortcutPropWindow = "" + Const ShortcutPropShortcutPath1 = "%APPDATA%\Microsoft\Windows\Network Shortcuts\" + Const ShortcutPropShortcutPath3 = "\target" + + ' Used in FilterGroup + Const FilterGroupBool = "OR" + Const FilterGroupNot = "0" + Const FilterGroupUserContext = "1" + Const FilterGroupPrimaryGroup = "0" + Const FilterGroupLocalGroup = "0" + + ' ******************************************************* ' + ' * Global Variables Declared Below * ' + ' ******************************************************* ' + + ' Use the Active Directory domain that the computer is joined to + Dim objDomain As ActiveDirectory.Domain = ActiveDirectory.Domain.GetComputerDomain() + Dim strDomainName As String = ActiveDirectory.Domain.GetComputerDomain().Name + + Dim regUserSettings As RegistryKey + Dim XMLIniFiles, XMLFolders, XMLShortcuts As New XmlDocument() + Dim tableNetworkLocations, tableFilterGroups, tableGroupPolcies As New DataTable() + Dim ADPicker As New DirectoryObjectPickerDialog + Dim changesSaved As Boolean = True + Dim strGPUID, strGPPath, strIniFilesXML, strFoldersXML, strShortcutsXML As String + + Private Sub MakeDataTables() + + ' Temporary column variable declaration + Dim column As DataColumn + + ' Creates a data table that looks something like this for storing variables related to the share folders + ' ------------------------------------------------------------------------------------------------- + ' | ShareName | ShareTarget | Last Modified | Ini1UID | Ini2UID | FoldersUID | ShortcutsUID | + ' |-----------------|-------------|---------------|---------|---------|------------|--------------| + ' | * Unique String | String | DateTime | String | String | String | String | + ' ------------------------------------------------------------------------------------------------- + + column = New DataColumn() + column.DataType = System.Type.GetType("System.String") + column.ColumnName = "ShareName" + column.ReadOnly = False + column.Unique = True + tableNetworkLocations.Columns.Add(column) + + column = New DataColumn() + column.DataType = System.Type.GetType("System.String") + column.ColumnName = "ShareTarget" + column.ReadOnly = False + column.Unique = False + tableNetworkLocations.Columns.Add(column) + + column = New DataColumn() + column.DataType = System.Type.GetType("System.DateTime") + column.ColumnName = "LastModified" + column.ReadOnly = False + column.Unique = False + tableNetworkLocations.Columns.Add(column) + + column = New DataColumn() + column.DataType = System.Type.GetType("System.String") + column.ColumnName = "Ini1UID" + column.ReadOnly = False + column.Unique = False + tableNetworkLocations.Columns.Add(column) + + column = New DataColumn() + column.DataType = System.Type.GetType("System.String") + column.ColumnName = "Ini2UID" + column.ReadOnly = False + column.Unique = False + tableNetworkLocations.Columns.Add(column) + + column = New DataColumn() + column.DataType = System.Type.GetType("System.String") + column.ColumnName = "FoldersUID" + column.ReadOnly = False + column.Unique = False + tableNetworkLocations.Columns.Add(column) + + column = New DataColumn() + column.DataType = System.Type.GetType("System.String") + column.ColumnName = "ShortcutsUID" + column.ReadOnly = False + column.Unique = False + tableNetworkLocations.Columns.Add(column) + + ' Creates a data table that looks something like this for storing Share folder and Filter Group connections + ' ------------------------------------ + ' | ShareName | GroupName | GroupSID | + ' |-----------|-----------|----------| + ' | String | String | String | + ' ------------------------------------ + + column = New DataColumn() + column.DataType = System.Type.GetType("System.String") + column.ColumnName = "ShareName" + column.ReadOnly = False + column.Unique = False + tableFilterGroups.Columns.Add(column) + + column = New DataColumn() + column.DataType = System.Type.GetType("System.String") + column.ColumnName = "GroupName" + column.ReadOnly = False + column.Unique = False + tableFilterGroups.Columns.Add(column) + + column = New DataColumn() + column.DataType = System.Type.GetType("System.String") + column.ColumnName = "GroupSID" + column.ReadOnly = False + column.Unique = False + tableFilterGroups.Columns.Add(column) + + ' Creates a data table that looks something like this for storing a list of Group Policy Objects in the domain + ' --------------------------------- + ' | PolicyGUID | Policy Name | + ' |-----------------|-------------| + ' | * Unique String | String | + ' --------------------------------- + + + column = New DataColumn() + column.DataType = System.Type.GetType("System.String") + column.ColumnName = "PolicyGUID" + column.ReadOnly = False + column.Unique = True + tableGroupPolcies.Columns.Add(column) + + column = New DataColumn() + column.DataType = System.Type.GetType("System.String") + column.ColumnName = "PolicyName" + column.ReadOnly = False + column.Unique = False + tableGroupPolcies.Columns.Add(column) + + ' Temporary primary key column + Dim PrimaryKeyColumns(0) As DataColumn + + ' Set primary key to ShareName for Network Locations table + PrimaryKeyColumns(0) = tableNetworkLocations.Columns("ShareName") + tableNetworkLocations.PrimaryKey = PrimaryKeyColumns + + ' Set primary key to PolicyGUID for Group Policy table + PrimaryKeyColumns(0) = tableGroupPolcies.Columns("PolicyGUID") + tableGroupPolcies.PrimaryKey = PrimaryKeyColumns + End Sub + + Private Sub RefreshView() + If ListBoxShareNames.SelectedItems.Count <> 1 Or tableNetworkLocations.Rows.Count = 0 Then + ' Clear all fields if there is not ONLY ONE item selected, or if there are no items available to select + TextBoxIni1UID.Clear() + TextBoxIni2UID.Clear() + TextBoxFoldersUID.Clear() + TextBoxShortcutsUID.Clear() + TextBoxLastModified.Clear() + TextBoxLocationName.Clear() + TextBoxTargetPath.Clear() + ' Then quit trying to update the view, there's nothing to update from + Exit Sub + End If + + ' Set the filter for the table so that the Gridview only shows group for the selected share + tableFilterGroups.DefaultView.RowFilter = String.Format("ShareName = '{0}'", ListBoxShareNames.SelectedValue) + DataGridViewGroups.AutoResizeColumns() + + ' Find the rows where the share name matches the selected share (There should only be one) + Dim rows() As DataRow = tableNetworkLocations.Select(String.Format("ShareName = '{0}'", ListBoxShareNames.SelectedValue.ToString)) + If rows.Count > 0 Then + ' If a row is found set the form fields based on the values in that row + TextBoxIni1UID.Text = rows(0)("Ini1UID").ToString + TextBoxIni2UID.Text = rows(0)("Ini2UID").ToString + TextBoxFoldersUID.Text = rows(0)("FoldersUID").ToString + TextBoxShortcutsUID.Text = rows(0)("ShortcutsUID").ToString + TextBoxLastModified.Text = rows(0)("LastModified").ToString + TextBoxLocationName.Text = rows(0)("ShareName").ToString + TextBoxTargetPath.Text = rows(0)("ShareTarget").ToString + Else + ' If no row is found, blank the form fields + TextBoxIni1UID.Clear() + TextBoxIni2UID.Clear() + TextBoxFoldersUID.Clear() + TextBoxShortcutsUID.Clear() + TextBoxLastModified.Clear() + TextBoxLocationName.Clear() + TextBoxTargetPath.Clear() + End If + End Sub + + Private Sub LaunchSettings() + ' Set the settings dropdown list to show the found policy names, but return the guid of the selected policy + DialogSettings.ComboBoxGroupPolicies.DataSource = tableGroupPolcies + DialogSettings.ComboBoxGroupPolicies.DisplayMember = "PolicyName" + DialogSettings.ComboBoxGroupPolicies.ValueMember = "PolicyGUID" + + ' Preselect the current policy, if there is one + If strGPUID <> Nothing And strGPUID <> String.Empty Then DialogSettings.ComboBoxGroupPolicies.SelectedValue = strGPUID + + ' Show the dialog, but only make changes if OK is pressed + If DialogSettings.ShowDialog() = DialogResult.OK Then + + strGPUID = DialogSettings.ComboBoxGroupPolicies.SelectedValue + strGPPath = "\\" + strDomainName + "\SYSVOL\" + strDomainName + "\Policies\" + strGPUID + "\User\Preferences" + + ' Save this to the registry for the next time the program is openned + regUserSettings.SetValue("GPUID", strGPUID) + + ' Set the Policy Name and GUID text boxes on the main form + TextBoxPolicyName.Text = tableGroupPolcies.Select(String.Format("PolicyGUID = '{0}'", strGPUID))(0)("PolicyName") + TextBoxPolicyGUID.Text = strGPUID + + ' Load the policy preferences from the XML Files + ReloadData() + End If + End Sub + + Private Sub MakeXMLStrings() + ' This whole thing is a mess, but it works. I'm open to suggestions. + + ' Initialize temporary string builders + Dim sbIniFilesXML, sbFoldersXML, sbShortcutsXML As New StringBuilder() + + ' Start with the standard xml definition + sbIniFilesXML.AppendLine("") + sbFoldersXML.AppendLine("") + sbShortcutsXML.AppendLine("") + + ' Open up the XML with the main group + sbIniFilesXML.AppendLine("") + sbFoldersXML.AppendLine("") + sbShortcutsXML.AppendLine("") + + ' Run through all of the shares in the table + For Each shareRow In tableNetworkLocations.Rows + + ' This is really obnoxious to look at, and I pretty much hate myself for doing it this way. + ' The above comment applies to specifically the next 13 lines and this program in general. + sbIniFilesXML.AppendLine(String.Format(" ", + IniClsid, Ini1Name, Ini1Status, ShareImage, shareRow("LastModified"), shareRow("Ini1UID"), ShareUserContext, ShareBypassErrors)) + sbFoldersXML.AppendLine(String.Format(" ", + FolderClsid, shareRow("ShareName"), shareRow("ShareName"), ShareImage, shareRow("LastModified"), shareRow("FoldersUID"), FolderDisabled, ShareUserContext, ShareBypassErrors)) + sbShortcutsXML.AppendLine(String.Format(" ", + ShortcutClsid, ShortcutName, ShortcutStatus, ShareImage, shareRow("LastModified"), shareRow("ShortcutsUID"), ShareUserContext, ShareBypassErrors)) + + sbIniFilesXML.AppendLine(String.Format(" ", + IniPropPath1, shareRow("ShareName"), IniPropPath3, IniPropSection, Ini1PropValue, Ini1PropProperty, SharePropAction)) + sbFoldersXML.AppendLine(String.Format(" ") + sbFoldersXML.AppendLine(" ") + sbShortcutsXML.AppendLine(" ") + + ' Do it again for the second IniFile setting + sbIniFilesXML.AppendLine(String.Format(" ", + IniClsid, Ini2Name, Ini2Status, ShareImage, shareRow("LastModified"), shareRow("Ini2UID"), ShareUserContext, ShareBypassErrors)) + sbIniFilesXML.AppendLine(String.Format(" ", + IniPropPath1, shareRow("ShareName"), IniPropPath3, IniPropSection, Ini2PropValue, Ini2PropProperty, SharePropAction)) + sbIniFilesXML.AppendLine(" ") + i = 1 + For Each groupRow In tableFilterGroups.Select(String.Format("ShareName = '{0}'", shareRow("ShareName"))) + Dim strBool As String = "AND" + If i > 1 Then strBool = "OR" + Dim strFilterGroup As String = String.Format(" ", + strBool, groupRow("GroupName"), groupRow("GroupSID")) + sbIniFilesXML.AppendLine(strFilterGroup) + i += 1 + Next + sbIniFilesXML.AppendLine(" ") + sbIniFilesXML.AppendLine(" ") + Next + + ' Close the main group + sbIniFilesXML.AppendLine("") + sbFoldersXML.AppendLine("") + sbShortcutsXML.AppendLine("") + + ' Write the values to strings + strIniFilesXML = sbIniFilesXML.ToString + strFoldersXML = sbFoldersXML.ToString + strShortcutsXML = sbShortcutsXML.ToString + End Sub + + Private Sub ReloadData() + + ' Clear out the tables + tableNetworkLocations.Clear() + tableFilterGroups.Clear() + + If File.Exists(strGPPath + "\IniFiles\IniFiles.xml") Then + ' Load the file if it exists + XMLIniFiles.Load(strGPPath + "\IniFiles\IniFiles.xml") + For Each Ini As XmlNode In XMLIniFiles.SelectNodes("/IniFiles/Ini") + ' Get values from Ini Items + Dim strUID As String = Ini.Attributes("uid").Value + Dim timeModified As DateTime = Ini.Attributes("changed").Value + Dim strIniProp As String = Ini.Attributes("name").Value + Dim strPath As String = Ini.SelectSingleNode("Properties").Attributes("path").Value + Dim arrPath() As String = strPath.Split("\") + Dim strShareName As String + If arrPath.Count >= 2 Then + strShareName = arrPath(arrPath.Count - 2) + Else + strShareName = arrPath(0) + End If + Dim strRowName As String + ' Determine which Ini item to use + If strIniProp = "CLSID2" Then + strRowName = "Ini1UID" + ElseIf strIniProp = "Flags" Then + strRowName = "Ini2UID" + End If + If Not strRowName Is Nothing Then + Dim row As DataRow + ' Add data to row + Try + row = tableNetworkLocations.Select(String.Format("ShareName = '{0}'", strShareName))(0) + row(strRowName) = strUID.ToUpper + ' Only update time modified if it is later + If timeModified > row("LastModified") Then row("LastModified") = timeModified + Catch + ' Row doesn't exist, create it now + row = tableNetworkLocations.NewRow + row("ShareName") = strShareName + row(strRowName) = strUID.ToUpper + row("LastModified") = timeModified + tableNetworkLocations.Rows.Add(row) + End Try + If Ini.ChildNodes.Count > 1 Then + ' Add all Filters to filter table + For Each FilterGroup As XmlNode In Ini.SelectSingleNode("Filters").SelectNodes("FilterGroup") + Dim strGroupName As String = FilterGroup.Attributes("name").Value + Dim strGroupSID As String = FilterGroup.Attributes("sid").Value + Try + row = tableFilterGroups.Select(String.Format("ShareName = '{0}' And GroupName = '{1}' And GroupSID = '{2}'", strShareName, strGroupName, strGroupSID))(0) + Catch + row = tableFilterGroups.NewRow + row("ShareName") = strShareName + row("GroupName") = strGroupName + row("GroupSID") = strGroupSID + tableFilterGroups.Rows.Add(row) + End Try + Next + End If + End If + Next + End If + + If File.Exists(strGPPath + "\Folders\Folders.xml") Then + XMLFolders.Load(strGPPath + "\Folders\Folders.xml") + For Each Folder As XmlNode In XMLFolders.SelectNodes("/Folders/Folder") + Dim strUID As String = Folder.Attributes("uid").Value + Dim timeModified As DateTime = Folder.Attributes("changed").Value + Dim strShareName As String = Folder.Attributes("name").Value + Dim row As DataRow + ' Add data to row + Try + row = tableNetworkLocations.Select(String.Format("ShareName = '{0}'", strShareName))(0) + row("FoldersUID") = strUID.ToUpper + ' Only update time modified if it is later + If timeModified > row("LastModified") Then row("LastModified") = timeModified + Catch + ' Row doesn't exist, create it now + row = tableNetworkLocations.NewRow + row("ShareName") = strShareName + row("FoldersUID") = strUID.ToUpper + row("LastModified") = timeModified + tableNetworkLocations.Rows.Add(row) + End Try + ' Add all Filters to filter table + If Folder.ChildNodes.Count > 1 Then + For Each FilterGroup As XmlNode In Folder.SelectSingleNode("Filters").SelectNodes("FilterGroup") + Dim strGroupName As String = FilterGroup.Attributes("name").Value + Dim strGroupSID As String = FilterGroup.Attributes("sid").Value + Try + row = tableFilterGroups.Select(String.Format("ShareName = '{0}' And GroupName = '{1}' And GroupSID = '{2}'", strShareName, strGroupName, strGroupSID))(0) + Catch + row = tableFilterGroups.NewRow + row("ShareName") = strShareName + row("GroupName") = strGroupName + row("GroupSID") = strGroupSID + tableFilterGroups.Rows.Add(row) + End Try + Next + End If + Next + End If + + If File.Exists(strGPPath + "\Shortcuts\Shortcuts.xml") Then + XMLShortcuts.Load(strGPPath + "\Shortcuts\Shortcuts.xml") + For Each Shortcut As XmlNode In XMLShortcuts.SelectNodes("/Shortcuts/Shortcut") + Dim strUID As String = Shortcut.Attributes("uid").Value + Dim timeModified As DateTime = Shortcut.Attributes("changed").Value + Dim strTargetPath As String = Shortcut.SelectSingleNode("Properties").Attributes("targetPath").Value + Dim strPath As String = Shortcut.SelectSingleNode("Properties").Attributes("shortcutPath").Value + Dim arrPath() As String = strPath.Split("\") + Dim strShareName As String + If arrPath.Count >= 2 Then + strShareName = arrPath(arrPath.Count - 2) + Else + strShareName = arrPath(0) + End If + Dim row As DataRow + ' Add data to row + Try + row = tableNetworkLocations.Select(String.Format("ShareName = '{0}'", strShareName))(0) + row("ShortcutsUID") = strUID.ToUpper + row("ShareTarget") = strTargetPath + ' Only update time modified if it is later + If timeModified > row("LastModified") Then row("LastModified") = timeModified + Catch + ' Row doesn't exist, create it now + row = tableNetworkLocations.NewRow + row("ShareName") = strShareName + row("ShortcutsUID") = strUID.ToUpper + row("ShareTarget") = strTargetPath + row("LastModified") = timeModified + tableNetworkLocations.Rows.Add(row) + End Try + ' Add all Filters to filter table + If Shortcut.ChildNodes.Count > 1 Then + For Each FilterGroup As XmlNode In Shortcut.SelectSingleNode("Filters").SelectNodes("FilterGroup") + Dim strGroupName As String = FilterGroup.Attributes("name").Value + Dim strGroupSID As String = FilterGroup.Attributes("sid").Value + Try + row = tableFilterGroups.Select(String.Format("ShareName = '{0}' And GroupName = '{1}' And GroupSID = '{2}'", strShareName, strGroupName, strGroupSID))(0) + Catch + row = tableFilterGroups.NewRow + row("ShareName") = strShareName + row("GroupName") = strGroupName + row("GroupSID") = strGroupSID + tableFilterGroups.Rows.Add(row) + End Try + Next + End If + Next + End If + + ' Run through the table and create any missing UIDs + For Each row In tableNetworkLocations.Rows + If row("Ini1UID").ToString.Length = 0 Then row("Ini1UID") = "{" + Guid.NewGuid.ToString.ToUpper + "}" + If row("Ini2UID").ToString.Length = 0 Then row("Ini2UID") = "{" + Guid.NewGuid.ToString.ToUpper + "}" + If row("FoldersUID").ToString.Length = 0 Then row("FoldersUID") = "{" + Guid.NewGuid.ToString.ToUpper + "}" + If row("ShortcutsUID").ToString.Length = 0 Then row("ShortcutsUID") = "{" + Guid.NewGuid.ToString.ToUpper + "}" + Next + + ' Set listbox source + ListBoxShareNames.DataSource = tableNetworkLocations + ListBoxShareNames.DisplayMember = "ShareName" + ListBoxShareNames.ValueMember = "ShareName" + + ' Set source for data grid view and filter + DataGridViewGroups.DataSource = tableFilterGroups + tableFilterGroups.DefaultView.RowFilter = String.Format("ShareName = '{0}'", ListBoxShareNames.SelectedValue) + DataGridViewGroups.Columns("ShareName").Visible = False + DataGridViewGroups.AutoResizeColumns() + + ' Load info into form + RefreshView() + + End Sub + + Private Sub GroupPolicyNetworkLocations_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing + If Not changesSaved Then + ' Ask if they really want to quit, their changes haven't been saved + If MessageBox.Show("Are you sure you want to quit?" + vbCrLf + "Your changes will Not be saved.", "Are you sure?", MessageBoxButtons.YesNoCancel) <> DialogResult.Yes Then + e.Cancel = True + End If + End If + End Sub + + Private Sub GroupPolicyNetworkLocations_Load(sender As Object, e As EventArgs) Handles MyBase.Load + ' Set preferences for AD Object picker + ADPicker.AllowedObjectTypes = ObjectTypes.Groups + ADPicker.DefaultObjectTypes = ObjectTypes.Groups + ADPicker.AllowedLocations = Locations.JoinedDomain + ADPicker.DefaultLocations = Locations.JoinedDomain + + ' Create the data tables + MakeDataTables() + + ' Populate the group policy table with all group policies in the domain + Using searcher = New DirectorySearcher(ActiveDirectory.Domain.GetComputerDomain().GetDirectoryEntry, "(&(objectClass=groupPolicyContainer))", {"displayName", "name"}, SearchScope.Subtree) + Dim results As SearchResultCollection = searcher.FindAll + For Each result As SearchResult In results + Dim directoryEntry As DirectoryEntry = result.GetDirectoryEntry + Dim row As DataRow + Try + row = tableGroupPolcies.Select(String.Format("PolicyGUID = '{0}'", directoryEntry.Properties("name").Value))(0) + Catch + row = tableGroupPolcies.NewRow + row("PolicyGUID") = directoryEntry.Properties("name").Value + row("PolicyName") = directoryEntry.Properties("displayName").Value + tableGroupPolcies.Rows.Add(row) + End Try + Next + End Using + + ' Open the registry settings for the application + regUserSettings = Registry.CurrentUser.OpenSubKey("Software\GroupPolicyNetworkLocations", True) + + If regUserSettings Is Nothing Then + ' Create the registry settings if they do not exist + regUserSettings = Registry.CurrentUser.CreateSubKey("Software\GroupPolicyNetworkLocations") + ElseIf strGPUID Is Nothing Or strGPUID = String.Empty Then + Try + ' Attempt to set the current policy guid from the registry + strGPUID = regUserSettings.GetValue("GPUID").ToString() + strGPPath = "\\" + strDomainName + "\SYSVOL\" + strDomainName + "\Policies\" + strGPUID + "\User\Preferences" + TextBoxPolicyName.Text = tableGroupPolcies.Select(String.Format("PolicyGUID = '{0}'", strGPUID))(0)("PolicyName") + TextBoxPolicyGUID.Text = strGPUID + Catch + End Try + Else + ' Set the registry setting to the current policy UID + regUserSettings.SetValue("GPUID", strGPUID) + End If + + Do While strGPUID Is Nothing Or strGPUID = String.Empty + ' Force user to select a group policy + LaunchSettings() + If strGPUID Is Nothing Or strGPUID = String.Empty Then + MessageBox.Show("You must select a group policy on your first launch.", "First Launch", MessageBoxButtons.OK) + End If + Loop + + ' Load data from the group policy + ReloadData() + + End Sub + + Private Sub ListBoxShareNames_SelectedValueChanged(sender As Object, e As EventArgs) Handles ListBoxShareNames.SelectedValueChanged + ' Load share information + RefreshView() + End Sub + + Private Sub QuitToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles QuitToolStripMenuItem.Click + Close() + End Sub + + Private Sub ButtonDiscardChanges_Click(sender As Object, e As EventArgs) Handles ButtonDiscardChanges.Click + Dim rows() As DataRow = tableNetworkLocations.Select(String.Format("ShareName = '{0}'", ListBoxShareNames.SelectedValue.ToString)) + If rows.Count > 0 Then + ' Reset to values in data table + TextBoxLocationName.Text = rows(0)("ShareName") + TextBoxTargetPath.Text = rows(0)("ShareTarget") + Else + ' Clear values, share not found + TextBoxLocationName.Clear() + TextBoxTargetPath.Clear() + End If + End Sub + + Private Sub ButtonSaveChanges_Click(sender As Object, e As EventArgs) Handles ButtonSaveChanges.Click + Dim rows() As DataRow = tableNetworkLocations.Select(String.Format("ShareName = '{0}'", ListBoxShareNames.SelectedValue.ToString)) + If rows.Count > 0 Then + If rows(0)("ShareTarget") <> TextBoxTargetPath.Text.ToString Then + ' Update ShareTarget only if it changed + rows(0)("ShareTarget") = TextBoxTargetPath.Text.ToString + rows(0)("LastModified") = Now + changesSaved = False + End If + If rows(0)("ShareName") <> TextBoxLocationName.Text.ToString Then + ' Update ShareName only if it changed + Dim groupRows() As DataRow = tableFilterGroups.Select(String.Format("ShareName = '{0}'", ListBoxShareNames.SelectedValue.ToString)) + If groupRows.Count > 0 Then + For Each row As DataRow In groupRows + ' Update the ShareName for all filter Groups as well + row("ShareName") = TextBoxLocationName.Text.ToString + Next + End If + rows(0)("ShareName") = TextBoxLocationName.Text.ToString + rows(0)("LastModified") = Now + changesSaved = False + End If + End If + End Sub + + Private Sub ButtonAddNewShare_Click(sender As Object, e As EventArgs) Handles ButtonAddNewShare.Click + Dim boolRetry As Boolean = True + While boolRetry + ' Show the new share dialog + Dim result As DialogResult = DialogNewShare.ShowDialog() + If result = DialogResult.OK Then + ' Only add if OK is pressed + Dim newShareName As String = DialogNewShare.TextBoxShareName.Text + Dim newSharePath As String = DialogNewShare.TextBoxSharePath.Text + If newShareName.Trim.Length > 0 And newSharePath.Trim.Length > 0 Then + ' Only add if Share Name and Path are populated with non-blank strings + Dim rows() As DataRow = tableNetworkLocations.Select(String.Format("ShareName = '{0}'", newShareName)) + If rows.Count > 0 Then + If Not MsgBox("A share with this name already exists." + vbCrLf + "Would you like to try again?", MessageBoxButtons.YesNoCancel) = DialogResult.Yes Then + ' No pressed, don't show the dialog again + boolRetry = False + End If + Else + ' Add the row with new UIDs + Dim row As DataRow = tableNetworkLocations.NewRow + row("ShareName") = newShareName + row("ShareTarget") = newSharePath + row("LastModified") = Now + row("Ini1UID") = "{" + Guid.NewGuid.ToString.ToUpper + "}" + row("Ini2UID") = "{" + Guid.NewGuid.ToString.ToUpper + "}" + row("FoldersUID") = "{" + Guid.NewGuid.ToString.ToUpper + "}" + row("ShortcutsUID") = "{" + Guid.NewGuid.ToString.ToUpper + "}" + tableNetworkLocations.Rows.Add(row) + ListBoxShareNames.Update() + ListBoxShareNames.SelectedValue = newShareName + RefreshView() + changesSaved = False + ' Row added, don't show the dialog again + boolRetry = False + End If + Else + If Not MsgBox("Both Share Name and Share Path are required." + vbCrLf + "Would you like to try again?", MessageBoxButtons.YesNoCancel) = DialogResult.Yes Then + ' No pressed, don't show the dialog again + boolRetry = False + End If + End If + Else + ' Cancel pressed, don't show the dialog again + boolRetry = False + End If + End While + ' Clear New Share Dialog's text boxes + DialogNewShare.TextBoxShareName.Clear() + DialogNewShare.TextBoxSharePath.Clear() + End Sub + + Private Sub ButtonDeleteShare_Click(sender As Object, e As EventArgs) Handles ButtonDeleteShare.Click + Dim rows() As DataRow = tableNetworkLocations.Select(String.Format("ShareName = '{0}'", ListBoxShareNames.SelectedValue.ToString)) + If rows.Count > 0 Then + ' You can only delete a row that exists + If MsgBox("Are you sure you want to delete the share " + ListBoxShareNames.SelectedValue.ToString + "?" + vbCrLf + "This action can not be undone.", MessageBoxButtons.YesNoCancel) = DialogResult.Yes Then + ' Yes pressed, apparently they want to delete this row. + Dim groupRows() As DataRow = tableFilterGroups.Select(String.Format("ShareName = '{0}'", ListBoxShareNames.SelectedValue.ToString)) + If groupRows.Count > 0 Then + For Each row As DataRow In groupRows + ' Also delete all rows in the filters that have this share name + tableFilterGroups.Rows.Remove(row) + Next + End If + ' Actually delete the row + tableNetworkLocations.Rows.Remove(rows(0)) + + changesSaved = False + + ' Clear form data + TextBoxLastModified.Clear() + TextBoxFoldersUID.Clear() + TextBoxIni1UID.Clear() + TextBoxIni2UID.Clear() + TextBoxShortcutsUID.Clear() + TextBoxLocationName.Clear() + TextBoxTargetPath.Clear() + + ' reload form data + RefreshView() + End If + End If + + End Sub + + Private Sub ButtonAddGroup_Click(sender As Object, e As EventArgs) Handles ButtonAddGroup.Click + If ADPicker.ShowDialog = DialogResult.OK Then + For Each SelectedObject In ADPicker.SelectedObjects + Dim objGroup As DirectoryEntry = New DirectoryEntry(SelectedObject.Path) + Dim strNP1, strNP2 As String + For Each part In objGroup.Properties.Item("distinguishedName").Value.ToString.Split(",") + ' Use distinguishedName to find group name with short domain name + If part.StartsWith("CN=") And strNP2 Is Nothing Then + strNP2 = part.Remove(0, 3) + ElseIf part.StartsWith("DC=") And strNP1 Is Nothing Then + strNP1 = part.Remove(0, 3) + End If + If strNP2 <> Nothing And strNP1 <> Nothing Then Exit For + Next + Dim strShareName As String = ListBoxShareNames.SelectedValue.ToString + Dim strGroupName As String = strNP1.ToUpper + "\" + strNP2 + Dim strGroupSID As String = (New Security.Principal.SecurityIdentifier(objGroup.Properties.Item("objectSid").Value, 0)).Value + Dim groupRow As DataRow + ' Add the row if it doesn't already exist + Try + groupRow = tableFilterGroups.Select(String.Format("ShareName = '{0}' And GroupName = '{1}' And GroupSID = '{2}'", strShareName, strGroupName, strGroupSID))(0) + Catch + groupRow = tableFilterGroups.NewRow + groupRow("ShareName") = strShareName + groupRow("GroupName") = strGroupName + groupRow("GroupSID") = strGroupSID + tableFilterGroups.Rows.Add(groupRow) + Dim rows() As DataRow = tableNetworkLocations.Select(String.Format("ShareName = '{0}'", ListBoxShareNames.SelectedValue.ToString)) + rows(0)("LastModified") = Now + changesSaved = False + End Try + + Next + End If + End Sub + + Private Sub GenerateXMLToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles GenerateXMLToolStripMenuItem.Click + ' Populate xml strings + MakeXMLStrings() + + ' Populate xml objects from strings + XMLIniFiles.LoadXml(strIniFilesXML) + XMLFolders.LoadXml(strFoldersXML) + XMLShortcuts.LoadXml(strShortcutsXML) + + ' Create folder if it doesn't already exist (the group policy will likely not work if this is the case) + If Not Directory.Exists(strGPPath + "\IniFiles") Then Directory.CreateDirectory(strGPPath + "\IniFiles") + If Not Directory.Exists(strGPPath + "\Folders") Then Directory.CreateDirectory(strGPPath + "\Folders") + If Not Directory.Exists(strGPPath + "\Shortcuts") Then Directory.CreateDirectory(strGPPath + "\Shortcuts") + + ' Create the file if it does not exist (the group policy will likely not work if this is the case) + If Not File.Exists(strGPPath + "\IniFiles\IniFiles.xml") Then File.Create(strGPPath + "\IniFiles\IniFiles.xml").Dispose() + If Not File.Exists(strGPPath + "\Folders\Folders.xml") Then File.Create(strGPPath + "\Folders\Folders.xml").Dispose() + If Not File.Exists(strGPPath + "\Shortcuts\Shortcuts.xml") Then File.Create(strGPPath + "\Shortcuts\Shortcuts.xml").Dispose() + + ' Save the xml objects to the files + XMLIniFiles.Save(strGPPath + "\IniFiles\IniFiles.xml") + XMLFolders.Save(strGPPath + "\Folders\Folders.xml") + XMLShortcuts.Save(strGPPath + "\Shortcuts\Shortcuts.xml") + + ' Show saved message + MsgBox("Changes saved to Group Policy.") + changesSaved = True + End Sub + + Private Sub ReadFromGroupPolicyToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ReadFromGroupPolicyToolStripMenuItem.Click + ' TODO: Prompt about saving changes if necessary + + ' Reload data from policy xml files + ReloadData() + changesSaved = True + End Sub + + Private Sub SettingsToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles SettingsToolStripMenuItem.Click + LaunchSettings() + End Sub + + Private Sub ButtonDeleteGroup_Click(sender As Object, e As EventArgs) Handles ButtonDeleteGroup.Click + Dim strShareName As String = DataGridViewGroups.SelectedRows(0).Cells("ShareName").Value + Dim strGroupName As String = DataGridViewGroups.SelectedRows(0).Cells("GroupName").Value + Dim strGroupSID As String = DataGridViewGroups.SelectedRows(0).Cells("GroupSID").Value + Dim groupRow As DataRow = tableFilterGroups.Select(String.Format("ShareName = '{0}' And GroupName = '{1}' And GroupSID = '{2}'", strShareName, strGroupName, strGroupSID))(0) + ' Remove group from table + tableFilterGroups.Rows.Remove(groupRow) + Dim rows() As DataRow = tableNetworkLocations.Select(String.Format("ShareName = '{0}'", ListBoxShareNames.SelectedValue.ToString)) + ' Update share modified time + rows(0)("LastModified") = Now + changesSaved = False + End Sub + + Private Sub AboutToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles AboutToolStripMenuItem.Click + AboutBox.ShowDialog() + End Sub +End Class diff --git a/GroupPolicyNetworkLocations/GroupPolicyNetworkLocations.vbproj b/GroupPolicyNetworkLocations/GroupPolicyNetworkLocations.vbproj index ac4bceb..1faab89 100644 --- a/GroupPolicyNetworkLocations/GroupPolicyNetworkLocations.vbproj +++ b/GroupPolicyNetworkLocations/GroupPolicyNetworkLocations.vbproj @@ -13,6 +13,22 @@ WindowsForms v4.5.2 true + false + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.0 + false + true + true AnyCPU @@ -23,6 +39,7 @@ bin\Debug\ GroupPolicyNetworkLocations.xml 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + true AnyCPU @@ -46,10 +63,39 @@ On + + My Project\app.manifest + + + GPOAdmin_518.ico + + + false + + + true + + + 8F2AB6AEAC0FB6706BE5ACE64C2FA79FC1870991 + + + GroupPolicyNetworkLocations_TemporaryKey.pfx + + + true + + + LocalIntranet + + + ..\packages\Tulpep.ActiveDirectoryObjectPicker.2.2.128\lib\net452\ActiveDirectoryObjectPicker.dll + False + + @@ -72,11 +118,30 @@ - + + AboutBox.vb + + Form - - Form1.vb + + + DialogNewShare.vb + + + Form + + + DialogSettings.vb + + + Form + + + Form + + + GroupPolicyNetworkLocations.vb Form @@ -96,6 +161,18 @@ + + AboutBox.vb + + + DialogNewShare.vb + + + DialogSettings.vb + + + GroupPolicyNetworkLocations.vb + VbMyResourcesResXFileCodeGenerator Resources.Designer.vb @@ -104,16 +181,37 @@ + + MyApplicationCodeGenerator Application.Designer.vb + SettingsSingleFileGenerator My Settings.Designer.vb - + + + + + + + + + + + False + Microsoft .NET Framework 4.5.2 %28x86 and x64%29 + true + + + False + .NET Framework 3.5 SP1 + false + \ No newline at end of file diff --git a/GroupPolicyNetworkLocations/My Project/Application.Designer.vb b/GroupPolicyNetworkLocations/My Project/Application.Designer.vb index 32009f3..421cdf4 100644 --- a/GroupPolicyNetworkLocations/My Project/Application.Designer.vb +++ b/GroupPolicyNetworkLocations/My Project/Application.Designer.vb @@ -13,26 +13,26 @@ Option Explicit On Namespace My - + 'NOTE: This file is auto-generated; do not modify it directly. To make changes, ' or if you encounter build errors in this file, go to the Project Designer ' (go to Project Properties or double-click the My Project node in ' Solution Explorer), and make changes on the Application tab. ' Partial Friend Class MyApplication - - _ + + _ Public Sub New() MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows) Me.IsSingleInstance = false Me.EnableVisualStyles = true - Me.SaveMySettingsOnExit = true + Me.SaveMySettingsOnExit = false Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses End Sub - - _ + + _ Protected Overrides Sub OnCreateMainForm() - Me.MainForm = Global.GroupPolicyNetworkLocations.Form1 + Me.MainForm = Global.GroupPolicyNetworkLocations.GroupPolicyNetworkLocations End Sub End Class End Namespace diff --git a/GroupPolicyNetworkLocations/My Project/Application.myapp b/GroupPolicyNetworkLocations/My Project/Application.myapp index 1243847..770dd04 100644 --- a/GroupPolicyNetworkLocations/My Project/Application.myapp +++ b/GroupPolicyNetworkLocations/My Project/Application.myapp @@ -1,11 +1,10 @@  true - Form1 + GroupPolicyNetworkLocations false 0 true 0 - 0 - true - + false + \ No newline at end of file diff --git a/GroupPolicyNetworkLocations/My Project/AssemblyInfo.vb b/GroupPolicyNetworkLocations/My Project/AssemblyInfo.vb index 2f0b796..c49fea8 100644 --- a/GroupPolicyNetworkLocations/My Project/AssemblyInfo.vb +++ b/GroupPolicyNetworkLocations/My Project/AssemblyInfo.vb @@ -8,10 +8,10 @@ Imports System.Runtime.InteropServices ' Review the values of the assembly attributes - - - - + + + + diff --git a/GroupPolicyNetworkLocations/My Project/DataSources/GroupPolicyNetworkLocations.datasource b/GroupPolicyNetworkLocations/My Project/DataSources/GroupPolicyNetworkLocations.datasource new file mode 100644 index 0000000..47d6219 --- /dev/null +++ b/GroupPolicyNetworkLocations/My Project/DataSources/GroupPolicyNetworkLocations.datasource @@ -0,0 +1,10 @@ + + + + GroupPolicyNetworkLocations.GroupPolicyNetworkLocations, GroupPolicyNetworkLocations, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/GroupPolicyNetworkLocations/My Project/Resources.Designer.vb b/GroupPolicyNetworkLocations/My Project/Resources.Designer.vb index 57759ec..38428f0 100644 --- a/GroupPolicyNetworkLocations/My Project/Resources.Designer.vb +++ b/GroupPolicyNetworkLocations/My Project/Resources.Designer.vb @@ -11,9 +11,10 @@ Option Strict On Option Explicit On +Imports System Namespace My.Resources - + 'This class was auto-generated by the StronglyTypedResourceBuilder 'class via a tool like ResGen or Visual Studio. 'To add or remove a member, edit your .ResX file then rerun ResGen @@ -21,20 +22,20 @@ Namespace My.Resources ''' ''' A strongly-typed resource class, for looking up localized strings, etc. ''' - _ + _ Friend Module Resources - + Private resourceMan As Global.System.Resources.ResourceManager - + Private resourceCulture As Global.System.Globalization.CultureInfo - + ''' ''' Returns the cached ResourceManager instance used by this class. ''' - _ + _ Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager Get If Object.ReferenceEquals(resourceMan, Nothing) Then @@ -44,19 +45,29 @@ Namespace My.Resources Return resourceMan End Get End Property - + ''' ''' Overrides the current thread's CurrentUICulture property for all ''' resource lookups using this strongly typed resource class. ''' - _ + _ Friend Property Culture() As Global.System.Globalization.CultureInfo Get Return resourceCulture End Get - Set(ByVal value As Global.System.Globalization.CultureInfo) + Set resourceCulture = value End Set End Property + + ''' + ''' Looks up a localized resource of type System.Byte[]. + ''' + Friend ReadOnly Property ActiveDirectoryObjectPicker() As Byte() + Get + Dim obj As Object = ResourceManager.GetObject("ActiveDirectoryObjectPicker", resourceCulture) + Return CType(obj,Byte()) + End Get + End Property End Module End Namespace diff --git a/GroupPolicyNetworkLocations/My Project/Resources.resx b/GroupPolicyNetworkLocations/My Project/Resources.resx index af7dbeb..b70aa5d 100644 --- a/GroupPolicyNetworkLocations/My Project/Resources.resx +++ b/GroupPolicyNetworkLocations/My Project/Resources.resx @@ -46,7 +46,7 @@ mimetype: application/x-microsoft.net.object.binary.base64 value : The object must be serialized with - : System.Serialization.Formatters.Binary.BinaryFormatter + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter : and then encoded with base64 encoding. mimetype: application/x-microsoft.net.object.soap.base64 @@ -60,6 +60,7 @@ : and then encoded with base64 encoding. --> + @@ -68,9 +69,10 @@ - + + @@ -85,9 +87,10 @@ - + + @@ -109,9 +112,13 @@ 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ..\Resources\ActiveDirectoryObjectPicker.dll;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + \ No newline at end of file diff --git a/GroupPolicyNetworkLocations/My Project/app.manifest b/GroupPolicyNetworkLocations/My Project/app.manifest new file mode 100644 index 0000000..ed41ad1 --- /dev/null +++ b/GroupPolicyNetworkLocations/My Project/app.manifest @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/GroupPolicyNetworkLocations/Resources/ActiveDirectoryObjectPicker.dll b/GroupPolicyNetworkLocations/Resources/ActiveDirectoryObjectPicker.dll new file mode 100644 index 0000000..cb6bce6 Binary files /dev/null and b/GroupPolicyNetworkLocations/Resources/ActiveDirectoryObjectPicker.dll differ diff --git a/GroupPolicyNetworkLocations/packages.config b/GroupPolicyNetworkLocations/packages.config new file mode 100644 index 0000000..8e1c7ee --- /dev/null +++ b/GroupPolicyNetworkLocations/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file