1
0
mirror of https://github.com/alex-bochkov/PasswordChanger1C.git synced 2024-11-19 18:01:48 +02:00
This commit is contained in:
Alex Ivanov 2015-09-21 18:07:56 -07:00
parent 252cb0fa3c
commit 9bd00c102d
20 changed files with 3857 additions and 0 deletions

22
PasswordChanger1C.sln Normal file
View File

@ -0,0 +1,22 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 14
VisualStudioVersion = 14.0.23107.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "PasswordChanger1C", "PasswordChanger1C\PasswordChanger1C.vbproj", "{932C8B77-0E5E-44F6-92A4-AF13BE862D9A}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{932C8B77-0E5E-44F6-92A4-AF13BE862D9A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{932C8B77-0E5E-44F6-92A4-AF13BE862D9A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{932C8B77-0E5E-44F6-92A4-AF13BE862D9A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{932C8B77-0E5E-44F6-92A4-AF13BE862D9A}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

178
PasswordChanger1C/AboutBox.Designer.vb generated Normal file
View File

@ -0,0 +1,178 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class AboutBox
Inherits System.Windows.Forms.Form
'Form overrides dispose to clean up the component list.
<System.Diagnostics.DebuggerNonUserCode()> _
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.
<System.Diagnostics.DebuggerStepThrough()> _
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 = "AboutBox"
Me.TableLayoutPanel.ResumeLayout(False)
Me.TableLayoutPanel.PerformLayout()
CType(Me.LogoPictureBox, System.ComponentModel.ISupportInitialize).EndInit()
Me.ResumeLayout(False)
End Sub
End Class

View File

@ -0,0 +1,610 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="LogoPictureBox.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
AAAAAElFTkSuQmCC
</value>
</data>
<data name="TextBoxDescription.Text" xml:space="preserve">
<value>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.)</value>
</data>
</root>

View File

@ -0,0 +1,26 @@
Public NotInheritable Class AboutBox
Private Sub AboutBox_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

View File

@ -0,0 +1,725 @@
Imports System.IO
Imports System.Security.Cryptography
Imports System.Text
Module AccessFunctions
Structure StorageTable
Dim Number As Integer
Dim DataBlocks As List(Of Integer)
End Structure
Structure TableFields
Dim Name As String
Dim Length As Integer
Dim Precision As Integer
Dim Size As Integer
Dim Offset As Integer
Dim Type As String
Dim CouldBeNull As Integer
End Structure
Structure PageParams
Dim TableName As String
Dim Sign As String
Dim length As Integer
Dim version1 As Integer
Dim version2 As Integer
Dim version As Integer
Dim PagesNum As List(Of Integer)
Dim StorageTables As List(Of StorageTable)
Dim Fields As List(Of TableFields)
Dim RowSize As Integer
Dim Records As List(Of Dictionary(Of String, Object))
Dim BlockData As Integer
Dim BlockBlob As Integer
End Structure
Function ReadPage(reader As BinaryReader, Bytes() As Byte) As PageParams
Dim Page = New PageParams
Page.Sign = Encoding.UTF8.GetString(Bytes, 0, 8)
Page.length = BitConverter.ToInt32(Bytes, 8)
Page.version1 = BitConverter.ToInt32(Bytes, 12)
Page.version2 = BitConverter.ToInt32(Bytes, 16)
Page.version = BitConverter.ToInt32(Bytes, 20)
Dim Index = 24
Page.PagesNum = New List(Of Integer)
Page.StorageTables = New List(Of StorageTable)
'Получим номера страниц размещения
While True
Dim blk = BitConverter.ToInt32(Bytes, Index)
If blk = 0 Then
Exit While
End If
Page.PagesNum.Add(blk)
Index = Index + 4
If Index > 4092 Then
Exit While
End If
End While
For Each blk In Page.PagesNum
Dim StorageTables = New StorageTable
StorageTables.Number = blk
StorageTables.DataBlocks = New List(Of Integer)
Dim bytesBlock() As Byte = New Byte(4096 - 1) {}
reader.BaseStream.Seek(blk * 4096, SeekOrigin.Begin)
reader.Read(bytesBlock, 0, 4096)
Dim NumberOfPages = BitConverter.ToInt32(bytesBlock, 0)
Index = 4
For ii = 0 To NumberOfPages - 1
Dim dp = BitConverter.ToInt32(bytesBlock, Index)
If dp = 0 Then
Exit For
End If
StorageTables.DataBlocks.Add(dp)
Index = Index + 4
If Index > 4092 Then
Exit For
End If
Next
Page.StorageTables.Add(StorageTables)
Next
Return Page
End Function
Function ReadInfoBase(FileName As String, TableNameUsers As String) As PageParams
Dim fs As New FileStream(FileName, FileMode.Open, FileAccess.Read, FileShare.Read)
Dim reader As New BinaryReader(fs)
'Dim bytes() As Byte = New Byte(fs.Length) {}
Dim bytesBlock() As Byte = New Byte(4096 - 1) {}
reader.Read(bytesBlock, 0, 4096)
Dim Str = Encoding.UTF8.GetString(bytesBlock, 0, 8)
Dim DBSize = BitConverter.ToInt32(bytesBlock, 8)
'второй блок пропускаем
reader.Read(bytesBlock, 0, 4096)
'корневой блок
reader.Read(bytesBlock, 0, 4096)
Dim Param = ReadPage(reader, bytesBlock)
Dim Language = ""
Dim NumberOfTables = 0
Dim HeaderTables As List(Of Integer) = New List(Of Integer)
Dim i = 0
For Each ST In Param.StorageTables
Dim bytesStorageTables() As Byte = New Byte(4096 * ST.DataBlocks.Count - 1) {}
For Each DB In ST.DataBlocks
Dim TempBlock() As Byte = New Byte(4095) {}
reader.BaseStream.Seek(DB * 4096, SeekOrigin.Begin)
reader.Read(TempBlock, 0, 4096)
For Each ElemByte In TempBlock
bytesStorageTables(i) = ElemByte
i = i + 1
Next
Next
Language = Encoding.UTF8.GetString(bytesStorageTables, 0, 32)
NumberOfTables = BitConverter.ToInt32(bytesStorageTables, 32)
For i = 0 To NumberOfTables - 1
Dim PageNum = BitConverter.ToInt32(bytesStorageTables, 36 + i * 4)
HeaderTables.Add(PageNum)
Next
Next
'прочитаем первые страницы таблиц
For Each HT In HeaderTables
reader.BaseStream.Seek(HT * 4096, SeekOrigin.Begin)
reader.Read(bytesBlock, 0, 4096)
Dim PageHeader = ReadPage(reader, bytesBlock)
PageHeader.Fields = New List(Of TableFields)
For Each ST In PageHeader.StorageTables
For Each DB In ST.DataBlocks
ReadDataFromTable(reader, DB, bytesBlock, PageHeader, TableNameUsers)
If PageHeader.TableName = TableNameUsers Then
reader.Close()
Return PageHeader
End If
Next
Next
Next
reader.Close()
Return Nothing
End Function
Sub WritePasswordIntoInfoBaseRepo(FileName As String, PageHeader As PageParams, UserID As Byte(), NewPass As String, Offset As Integer)
Dim fs As New FileStream(FileName, FileMode.Open, FileAccess.ReadWrite, FileShare.Write)
Dim reader As New BinaryReader(fs)
Dim bytesBlock1() As Byte = New Byte(4096 - 1) {}
reader.BaseStream.Seek(PageHeader.BlockData * 4096, SeekOrigin.Begin)
reader.Read(bytesBlock1, 0, 4096)
Dim DataPage = ReadPage(reader, bytesBlock1)
Dim TotalBlocks = 0
For Each ST In DataPage.StorageTables
TotalBlocks = TotalBlocks + ST.DataBlocks.Count
Next
Dim bytesBlock() As Byte = New Byte(4096 * TotalBlocks - 1) {}
Dim i = 0
For Each ST In DataPage.StorageTables
For Each DB In ST.DataBlocks
Dim TempBlock() As Byte = New Byte(4095) {}
reader.BaseStream.Seek(DB * 4096, SeekOrigin.Begin)
reader.Read(TempBlock, 0, 4096)
For Each ElemByte In TempBlock
bytesBlock(i) = ElemByte
i = i + 1
Next
Next
Next
reader.Close()
Dim Test = Encoding.Unicode.GetString(bytesBlock, Offset, 64)
Dim Pass = Encoding.Unicode.GetBytes(NewPass)
For i = 0 To Pass.Length - 1
bytesBlock(i + Offset) = Pass(i)
Next
fs = New FileStream(FileName, FileMode.Open, FileAccess.ReadWrite, FileShare.Write)
Dim writer As New BinaryWriter(fs)
i = 0
For Each ST In DataPage.StorageTables
For Each DB In ST.DataBlocks
Dim TempBlock() As Byte = New Byte(4095) {}
For j = 0 To 4095
TempBlock(j) = bytesBlock(i)
i = i + 1
Next
writer.Seek(DB * 4096, SeekOrigin.Begin)
writer.Write(TempBlock)
Next
Next
writer.Close()
End Sub
Sub WritePasswordIntoInfoBaseIB(FileName As String, PageHeader As PageParams, UserID As Byte(), NewData As Byte(), DataPos As Integer, DataSize As Integer)
Dim fs As New FileStream(FileName, FileMode.Open, FileAccess.ReadWrite, FileShare.Write)
Dim reader As New BinaryReader(fs)
Dim bytesBlock1() As Byte = New Byte(4096 - 1) {}
reader.BaseStream.Seek(PageHeader.BlockBlob * 4096, SeekOrigin.Begin)
reader.Read(bytesBlock1, 0, 4096)
Dim DataPage = ReadPage(reader, bytesBlock1)
Dim TotalBlocks = 0
For Each ST In DataPage.StorageTables
TotalBlocks = TotalBlocks + ST.DataBlocks.Count
Next
Dim bytesBlock() As Byte = New Byte(4096 * TotalBlocks - 1) {}
Dim i = 0
For Each ST In DataPage.StorageTables
For Each DB In ST.DataBlocks
Dim TempBlock() As Byte = New Byte(4095) {}
reader.BaseStream.Seek(DB * 4096, SeekOrigin.Begin)
reader.Read(TempBlock, 0, 4096)
For Each ElemByte In TempBlock
bytesBlock(i) = ElemByte
i = i + 1
Next
Next
Next
reader.Close()
Dim NextBlock = DataPos
Dim Pos = DataPos * 256
'Dim ByteBlock() As Byte = New Byte(DataSize - 1) {}
i = 0
While NextBlock > 0
NextBlock = BitConverter.ToInt32(bytesBlock, Pos)
Dim BlockSize = BitConverter.ToInt16(bytesBlock, Pos + 4)
For j = 0 To BlockSize - 1
bytesBlock(Pos + 6 + j) = NewData(i)
i = i + 1
Next
Pos = NextBlock * 256
End While
'Return ByteBlock
'Dim Test = Encoding.Unicode.GetString(bytesBlock, Offset, 64)
'Dim Pass = Encoding.Unicode.GetBytes(NewPass)
'For i = 0 To Pass.Length - 1
' bytesBlock(i + Offset) = Pass(i)
'Next
fs = New FileStream(FileName, FileMode.Open, FileAccess.ReadWrite, FileShare.Write)
Dim writer As New BinaryWriter(fs)
i = 0
For Each ST In DataPage.StorageTables
For Each DB In ST.DataBlocks
Dim TempBlock() As Byte = New Byte(4095) {}
For j = 0 To 4095
TempBlock(j) = bytesBlock(i)
i = i + 1
Next
writer.Seek(DB * 4096, SeekOrigin.Begin)
writer.Write(TempBlock)
Next
Next
writer.Close()
End Sub
Sub ReadDataFromTable(reader As BinaryReader, DB As Integer, bytesBlock() As Byte, ByRef PageHeader As PageParams, TableNameUsers As String)
reader.BaseStream.Seek(DB * 4096, SeekOrigin.Begin)
reader.Read(bytesBlock, 0, 4096)
Dim TableDescr = ""
For i = 0 To Math.Min(PageHeader.length - 1, 4096 / 2 - 1)
TableDescr = TableDescr + Encoding.UTF8.GetString(bytesBlock, i * 2, 1)
Next
Dim ParsedString = ParserServices.ParsesClass.ParseString(TableDescr)
Dim RowSize = 1
Dim TableName = ParsedString(0)(0).ToString.Replace("""", "").ToUpper
PageHeader.TableName = TableName
If Not TableName = TableNameUsers Then
Exit Sub
End If
For Each a In ParsedString(0)(2)
If TypeOf a Is String Then
Continue For
End If
Dim Field = New TableFields
Field.Name = a(0).ToString.Replace("""", "")
Field.Type = a(1).ToString.Replace("""", "")
Field.CouldBeNull = a(2)
Field.Length = a(3)
Field.Precision = a(4)
Dim FieldSize = Field.CouldBeNull
If Field.Type = "B" Then
FieldSize = FieldSize + Field.Length
ElseIf Field.Type = "L"
FieldSize = FieldSize + 1
ElseIf Field.Type = "N"
FieldSize = FieldSize + Math.Truncate((Field.Length + 2) / 2)
ElseIf Field.Type = "NC"
FieldSize = FieldSize + Field.Length * 2
ElseIf Field.Type = "NVC"
FieldSize = FieldSize + Field.Length * 2 + 2
ElseIf Field.Type = "RV"
FieldSize = FieldSize + 16
ElseIf Field.Type = "I"
FieldSize = FieldSize + 8
ElseIf Field.Type = "T"
FieldSize = FieldSize + 8
ElseIf Field.Type = "DT"
FieldSize = FieldSize + 7
ElseIf Field.Type = "NT"
FieldSize = FieldSize + 8
End If
Field.Size = FieldSize
Field.Offset = RowSize
RowSize = RowSize + FieldSize
PageHeader.Fields.Add(Field)
Next
PageHeader.RowSize = RowSize
'{"Files",118,119,96}
'Данные, BLOB, индексы
Dim BlockData = Convert.ToInt32(ParsedString(0)(5)(1))
Dim BlockBlob = Convert.ToInt32(ParsedString(0)(5)(2))
PageHeader.BlockData = BlockData
PageHeader.BlockBlob = BlockBlob
ReadDataPage(PageHeader, TableName, BlockData, BlockBlob, reader)
End Sub
Function GetBlodData(BlockBlob As Integer, Dataindex As Integer, Datasize As Integer, reader As BinaryReader) As Byte()
Dim bytesBlock1() As Byte = New Byte(4096 - 1) {}
reader.BaseStream.Seek(BlockBlob * 4096, SeekOrigin.Begin)
reader.Read(bytesBlock1, 0, 4096)
Dim DataPage = ReadPage(reader, bytesBlock1)
Dim TotalBlocks = 0
For Each ST In DataPage.StorageTables
TotalBlocks = TotalBlocks + ST.DataBlocks.Count
Next
Dim bytesBlock() As Byte = New Byte(4096 * TotalBlocks - 1) {}
Dim i = 0
For Each ST In DataPage.StorageTables
For Each DB In ST.DataBlocks
Dim TempBlock() As Byte = New Byte(4095) {}
reader.BaseStream.Seek(DB * 4096, SeekOrigin.Begin)
reader.Read(TempBlock, 0, 4096)
For Each ElemByte In TempBlock
bytesBlock(i) = ElemByte
i = i + 1
Next
Next
Next
Dim NextBlock = Dataindex
Dim Pos = Dataindex * 256
Dim ByteBlock() As Byte = New Byte(Datasize - 1) {}
i = 0
While NextBlock > 0
NextBlock = BitConverter.ToInt32(bytesBlock, Pos)
Dim BlockSize = BitConverter.ToInt16(bytesBlock, Pos + 4)
'Dim ByteTemp() As Byte = New Byte(BlockSize - 1) {}
For j = 0 To BlockSize - 1
ByteBlock(i) = bytesBlock(Pos + 6 + j)
i = i + 1
Next
Pos = NextBlock * 256
End While
Return ByteBlock
End Function
Sub ReadDataPage(ByRef PageHeader As PageParams, table As String, block As Integer, BlockBlob As Integer, reader As BinaryReader)
PageHeader.Records = New List(Of Dictionary(Of String, Object))
Dim bytesBlock1() As Byte = New Byte(4096 - 1) {}
reader.BaseStream.Seek(block * 4096, SeekOrigin.Begin)
reader.Read(bytesBlock1, 0, 4096)
Dim DataPage = ReadPage(reader, bytesBlock1)
Dim TotalBlocks = 0
For Each ST In DataPage.StorageTables
TotalBlocks = TotalBlocks + ST.DataBlocks.Count
Next
Dim bytesBlock() As Byte = New Byte(4096 * TotalBlocks - 1) {}
Dim i = 0
For Each ST In DataPage.StorageTables
For Each DB In ST.DataBlocks
Dim TempBlock() As Byte = New Byte(4095) {}
reader.BaseStream.Seek(DB * 4096, SeekOrigin.Begin)
reader.Read(TempBlock, 0, 4096)
For Each ElemByte In TempBlock
bytesBlock(i) = ElemByte
i = i + 1
Next
Next
Next
Dim Size = DataPage.length / PageHeader.RowSize
For i = 1 To Size - 1
Dim Pos = PageHeader.RowSize * i
Dim FieldStartPos = 0
Dim IsDeleted = BitConverter.ToBoolean(bytesBlock, Pos)
Dim Dict = New Dictionary(Of String, Object)
Dict.Add("IsDeleted", IsDeleted)
For Each Field In PageHeader.Fields
Dim Pos1 = Pos + 1 + FieldStartPos
If Field.Name = "PASSWORD" Then
Dict.Add("OFFSET_PASSWORD", Pos1)
End If
If Field.Name = "DATA" Then
Dict.Add("DATA_POS", BitConverter.ToInt32(bytesBlock, Pos1))
Dict.Add("DATA_SIZE", BitConverter.ToInt32(bytesBlock, Pos1 + 4))
End If
Dim BytesVal = Nothing
If Field.Type = "B" Then
Dim Strguid = Convert.ToBase64String(bytesBlock, Pos1 + Field.CouldBeNull, Field.Size - Field.CouldBeNull)
BytesVal = Convert.FromBase64String(Strguid)
'Dim G = Convert.
ElseIf Field.Type = "L" Then
BytesVal = BitConverter.ToBoolean(bytesBlock, Pos1 + Field.CouldBeNull)
ElseIf Field.Type = "DT" Then
Dim BytesDate(6) As Byte ' 7 байт
For AA = 0 To 6
BytesDate(AA) = Convert.ToString(bytesBlock(Pos1 + AA), 16)
Next
Try
BytesVal = New DateTime(BytesDate(0) * 100 + BytesDate(1),
BytesDate(2),
BytesDate(3),
BytesDate(4),
BytesDate(5),
BytesDate(6))
Catch ex As Exception
BytesVal = ""
End Try
ElseIf Field.Type = "I" Then
'двоичные данные неограниченной длины
'в рамках хранилища 8.3.6 их быть не должно
Dim DataPos = BitConverter.ToInt32(bytesBlock, Pos1)
Dim DataSize = BitConverter.ToInt32(bytesBlock, Pos1 + 4)
Dim BytesValTemp = GetBlodData(BlockBlob, DataPos, DataSize, reader)
Dim DataKey() As Byte = New Byte(0) {}
Dim DataKeySize As Integer = 0
BytesVal = DecodePasswordStructure(BytesValTemp, DataKeySize, DataKey)
Dict.Add("DATA_KEYSIZE", DataKeySize)
Dict.Add("DATA_KEY", DataKey)
ElseIf Field.Type = "NT" Then
'Строка неограниченной длины
BytesVal = "" 'TODO
ElseIf Field.Type = "N" Then
'число
BytesVal = 0
Dim StrNumber = ""
For AA = 0 To Field.Size - 1
Dim character = Convert.ToString(bytesBlock(Pos1 + AA), 16)
StrNumber = StrNumber + IIf(character.Length = 1, "0", "") + character
Next
Dim FirstSimbol = StrNumber.Substring(0, 1)
StrNumber = StrNumber.Substring(1, Field.Length)
If String.IsNullOrEmpty(StrNumber) Then
BytesVal = 0
Else
BytesVal = Convert.ToInt32(StrNumber) / IIf(Field.Precision > 0, (Field.Precision * 10), 1)
If FirstSimbol = "0" Then
BytesVal = BytesVal * (-1)
End If
End If
ElseIf Field.Type = "NVC" Then
'Строка переменной длины
Dim BytesStr(1) As Byte
For AA = 0 To 1
BytesStr(AA) = bytesBlock(Pos1 + AA + Field.CouldBeNull)
Next
Dim L = Math.Min(Field.Size, (BytesStr(0) + BytesStr(1) * 256) * 2)
BytesVal = Encoding.Unicode.GetString(bytesBlock, Pos1 + 2 + Field.CouldBeNull, L).Trim ' was L- 2
ElseIf Field.Type = "NC" Then
'строка фиксированной длины
BytesVal = Encoding.Unicode.GetString(bytesBlock, Pos1, Field.Size)
End If
Dict.Add(Field.Name, BytesVal)
FieldStartPos = FieldStartPos + Field.Size
Next
PageHeader.Records.Add(Dict)
Next
End Sub
Function DecodePasswordStructure(bytes_Input As Byte(), ByRef KeySize As Integer, ByRef KeyData As Byte()) As String
Dim Base = Convert.ToInt16(bytes_Input(0), 10)
KeySize = Base
KeyData = New Byte(Base - 1) {}
For a = 1 To Base
KeyData(a - 1) = bytes_Input(a)
Next
Dim i = Base + 1
Dim j = 1
Dim MaxI = bytes_Input.Length
Dim BytesResult() As Byte = New Byte(MaxI - Base - 1) {}
While i < MaxI
If j > Base Then
j = 1
End If
Dim AA = Convert.ToInt16(bytes_Input(i), 10)
Dim BB = Convert.ToInt16(bytes_Input(j), 10)
Dim CC = AA Xor BB ' 239 for first
BytesResult(i - Base - 1) = CC
i = i + 1
j = j + 1
End While
Return Encoding.UTF8.GetString(BytesResult)
End Function
Function EncodePasswordStructure(Str As String, ByVal KeySize As Integer, ByVal KeyData As Byte()) As Byte()
Dim bytes_Input = Encoding.UTF8.GetBytes(Str)
Dim Base = KeySize
Dim BytesResult() As Byte = New Byte(bytes_Input.Length + Base - 1) {}
BytesResult(0) = Base
For ii = 1 To Base
BytesResult(ii) = KeyData(ii - 1)
Next
Dim MaxI = bytes_Input.Length - 1
Dim i = 1
Dim j = 1
While i <= MaxI
If j > Base Then
j = 1
End If
Dim AA = Convert.ToInt16(bytes_Input(i - 1), 10)
Dim BB = Convert.ToInt16(BytesResult(j), 10)
BytesResult(i + Base) = AA Xor BB
i = i + 1
j = j + 1
End While
Return BytesResult
End Function
Public Function EncryptStringSHA1(ByVal Str As String) As String
Dim sha As New SHA1CryptoServiceProvider ' declare sha as a new SHA1CryptoServiceProvider
Dim bytesToHash() As Byte ' and here is a byte variable
bytesToHash = System.Text.Encoding.UTF8.GetBytes(Str) ' covert the password into ASCII code
bytesToHash = sha.ComputeHash(bytesToHash) ' this is where the magic starts and the encryption begins
Return Convert.ToBase64String(bytesToHash)
Dim result As String = ""
For Each b As Byte In bytesToHash
result += b.ToString("x2")
Next
Return result
End Function
End Module

602
PasswordChanger1C/Form1.Designer.vb generated Normal file
View File

@ -0,0 +1,602 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()>
Partial Class MainForm
Inherits System.Windows.Forms.Form
'Form overrides dispose to clean up the component list.
<System.Diagnostics.DebuggerNonUserCode()>
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.
<System.Diagnostics.DebuggerStepThrough()>
Private Sub InitializeComponent()
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(MainForm))
Me.Button6 = New System.Windows.Forms.Button()
Me.FileIB = New System.Windows.Forms.TextBox()
Me.OpenFileDialog = New System.Windows.Forms.OpenFileDialog()
Me.ButtonGetUsers = New System.Windows.Forms.Button()
Me.ListViewUsers = New System.Windows.Forms.ListView()
Me.UserGUID = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me.UserName = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me.UserDescr = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me.UserPassHash = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me.UserAdmRole = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me.ConnectionString = New System.Windows.Forms.TextBox()
Me.Button2 = New System.Windows.Forms.Button()
Me.Label4 = New System.Windows.Forms.Label()
Me.Repo1C = New System.Windows.Forms.TextBox()
Me.ButtonRepo = New System.Windows.Forms.Button()
Me.OpenFileDialogRepo = New System.Windows.Forms.OpenFileDialog()
Me.ButtonGetRepoUsers = New System.Windows.Forms.Button()
Me.ButtonSetRepoPassword = New System.Windows.Forms.Button()
Me.TabControl1 = New System.Windows.Forms.TabControl()
Me.TabPage1 = New System.Windows.Forms.TabPage()
Me.NewPassword = New System.Windows.Forms.TextBox()
Me.Label2 = New System.Windows.Forms.Label()
Me.TextBox3 = New System.Windows.Forms.TextBox()
Me.ButtonChangePwdFileDB = New System.Windows.Forms.Button()
Me.Label1 = New System.Windows.Forms.Label()
Me.TabPage2 = New System.Windows.Forms.TabPage()
Me.TextBox2 = New System.Windows.Forms.TextBox()
Me.ButtonChangePassSQL = New System.Windows.Forms.Button()
Me.Label6 = New System.Windows.Forms.Label()
Me.NewPassSQL = New System.Windows.Forms.TextBox()
Me.Label5 = New System.Windows.Forms.Label()
Me.SQLUserList = New System.Windows.Forms.ListView()
Me.ColumnHeader1 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me.ColumnHeader2 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me.ColumnHeader3 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me.ColumnHeader4 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me.ColumnHeader5 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me.TabPage3 = New System.Windows.Forms.TabPage()
Me.TextBox1 = New System.Windows.Forms.TextBox()
Me.RepoUserList = New System.Windows.Forms.ListView()
Me.RepoUserGUID = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me.RepoUserName = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me.RepoHasPwd = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me.RepoAdmin = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me.LinkLabel1 = New System.Windows.Forms.LinkLabel()
Me.Label3 = New System.Windows.Forms.Label()
Me.LinkLabel2 = New System.Windows.Forms.LinkLabel()
Me.TabControl1.SuspendLayout()
Me.TabPage1.SuspendLayout()
Me.TabPage2.SuspendLayout()
Me.TabPage3.SuspendLayout()
Me.SuspendLayout()
'
'Button6
'
Me.Button6.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.Button6.Location = New System.Drawing.Point(454, 23)
Me.Button6.Name = "Button6"
Me.Button6.Size = New System.Drawing.Size(95, 23)
Me.Button6.TabIndex = 11
Me.Button6.Text = "Выбрать файл"
Me.Button6.UseVisualStyleBackColor = True
'
'FileIB
'
Me.FileIB.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.FileIB.Location = New System.Drawing.Point(9, 25)
Me.FileIB.Name = "FileIB"
Me.FileIB.Size = New System.Drawing.Size(443, 20)
Me.FileIB.TabIndex = 9
'
'OpenFileDialog
'
Me.OpenFileDialog.Filter = "1C DB files|*.1cd"
Me.OpenFileDialog.RestoreDirectory = True
Me.OpenFileDialog.Title = "Выберите файл информационной базы 1С"
'
'ButtonGetUsers
'
Me.ButtonGetUsers.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.ButtonGetUsers.Location = New System.Drawing.Point(551, 23)
Me.ButtonGetUsers.Name = "ButtonGetUsers"
Me.ButtonGetUsers.Size = New System.Drawing.Size(183, 23)
Me.ButtonGetUsers.TabIndex = 12
Me.ButtonGetUsers.Text = "Получить список пользователей"
Me.ButtonGetUsers.UseVisualStyleBackColor = True
'
'ListViewUsers
'
Me.ListViewUsers.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _
Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.ListViewUsers.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.UserGUID, Me.UserName, Me.UserDescr, Me.UserPassHash, Me.UserAdmRole})
Me.ListViewUsers.FullRowSelect = True
Me.ListViewUsers.Location = New System.Drawing.Point(9, 50)
Me.ListViewUsers.Name = "ListViewUsers"
Me.ListViewUsers.Size = New System.Drawing.Size(723, 320)
Me.ListViewUsers.TabIndex = 14
Me.ListViewUsers.UseCompatibleStateImageBehavior = False
Me.ListViewUsers.View = System.Windows.Forms.View.Details
'
'UserGUID
'
Me.UserGUID.Text = "GUID"
Me.UserGUID.Width = 158
'
'UserName
'
Me.UserName.Text = "Имя"
Me.UserName.Width = 164
'
'UserDescr
'
Me.UserDescr.Text = "Полное имя"
Me.UserDescr.Width = 147
'
'UserPassHash
'
Me.UserPassHash.Text = "Хеш пароля"
Me.UserPassHash.Width = 164
'
'UserAdmRole
'
Me.UserAdmRole.Text = "Адм.роль"
Me.UserAdmRole.Width = 66
'
'ConnectionString
'
Me.ConnectionString.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.ConnectionString.Location = New System.Drawing.Point(9, 25)
Me.ConnectionString.Name = "ConnectionString"
Me.ConnectionString.Size = New System.Drawing.Size(552, 20)
Me.ConnectionString.TabIndex = 9
Me.ConnectionString.Text = "Data Source=MSSQL1;Server=SERVER;Integrated Security=true;Database=DATABASE"
'
'Button2
'
Me.Button2.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.Button2.Location = New System.Drawing.Point(563, 23)
Me.Button2.Name = "Button2"
Me.Button2.Size = New System.Drawing.Size(172, 23)
Me.Button2.TabIndex = 12
Me.Button2.Text = "Получить пользователей"
Me.Button2.UseVisualStyleBackColor = True
'
'Label4
'
Me.Label4.AutoSize = True
Me.Label4.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.Label4.Location = New System.Drawing.Point(12, 6)
Me.Label4.Name = "Label4"
Me.Label4.Size = New System.Drawing.Size(265, 16)
Me.Label4.TabIndex = 10
Me.Label4.Text = "Файл хранилища конфигурации 1С"
'
'Repo1C
'
Me.Repo1C.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.Repo1C.Location = New System.Drawing.Point(9, 25)
Me.Repo1C.Name = "Repo1C"
Me.Repo1C.Size = New System.Drawing.Size(434, 20)
Me.Repo1C.TabIndex = 9
'
'ButtonRepo
'
Me.ButtonRepo.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.ButtonRepo.Location = New System.Drawing.Point(445, 23)
Me.ButtonRepo.Name = "ButtonRepo"
Me.ButtonRepo.Size = New System.Drawing.Size(98, 23)
Me.ButtonRepo.TabIndex = 11
Me.ButtonRepo.Text = "Выбрать файл"
Me.ButtonRepo.UseVisualStyleBackColor = True
'
'OpenFileDialogRepo
'
Me.OpenFileDialogRepo.FileName = "OpenFileDialogRepo"
Me.OpenFileDialogRepo.Filter = "1C DB files|*.1cd"
Me.OpenFileDialogRepo.Title = "Выберите файл хранилища 1С"
'
'ButtonGetRepoUsers
'
Me.ButtonGetRepoUsers.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.ButtonGetRepoUsers.Location = New System.Drawing.Point(543, 23)
Me.ButtonGetRepoUsers.Name = "ButtonGetRepoUsers"
Me.ButtonGetRepoUsers.Size = New System.Drawing.Size(192, 23)
Me.ButtonGetRepoUsers.TabIndex = 12
Me.ButtonGetRepoUsers.Text = "Получить список пользователей"
Me.ButtonGetRepoUsers.UseVisualStyleBackColor = True
'
'ButtonSetRepoPassword
'
Me.ButtonSetRepoPassword.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.ButtonSetRepoPassword.Font = New System.Drawing.Font("Arial", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.ButtonSetRepoPassword.ForeColor = System.Drawing.Color.FromArgb(CType(CType(0, Byte), Integer), CType(CType(64, Byte), Integer), CType(CType(0, Byte), Integer))
Me.ButtonSetRepoPassword.Location = New System.Drawing.Point(443, 372)
Me.ButtonSetRepoPassword.Name = "ButtonSetRepoPassword"
Me.ButtonSetRepoPassword.Size = New System.Drawing.Size(289, 51)
Me.ButtonSetRepoPassword.TabIndex = 16
Me.ButtonSetRepoPassword.Text = "Установить выбранным пользователям пустой пароль в хранилище"
Me.ButtonSetRepoPassword.UseVisualStyleBackColor = True
'
'TabControl1
'
Me.TabControl1.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _
Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.TabControl1.Controls.Add(Me.TabPage1)
Me.TabControl1.Controls.Add(Me.TabPage2)
Me.TabControl1.Controls.Add(Me.TabPage3)
Me.TabControl1.Location = New System.Drawing.Point(4, 4)
Me.TabControl1.Name = "TabControl1"
Me.TabControl1.SelectedIndex = 0
Me.TabControl1.Size = New System.Drawing.Size(746, 455)
Me.TabControl1.TabIndex = 17
'
'TabPage1
'
Me.TabPage1.Controls.Add(Me.NewPassword)
Me.TabPage1.Controls.Add(Me.Label2)
Me.TabPage1.Controls.Add(Me.TextBox3)
Me.TabPage1.Controls.Add(Me.ButtonChangePwdFileDB)
Me.TabPage1.Controls.Add(Me.Label1)
Me.TabPage1.Controls.Add(Me.ListViewUsers)
Me.TabPage1.Controls.Add(Me.FileIB)
Me.TabPage1.Controls.Add(Me.Button6)
Me.TabPage1.Controls.Add(Me.ButtonGetUsers)
Me.TabPage1.Location = New System.Drawing.Point(4, 22)
Me.TabPage1.Name = "TabPage1"
Me.TabPage1.Padding = New System.Windows.Forms.Padding(3)
Me.TabPage1.Size = New System.Drawing.Size(738, 429)
Me.TabPage1.TabIndex = 0
Me.TabPage1.Text = "Файловая ИБ"
Me.TabPage1.UseVisualStyleBackColor = True
'
'NewPassword
'
Me.NewPassword.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles)
Me.NewPassword.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.NewPassword.Location = New System.Drawing.Point(128, 402)
Me.NewPassword.Name = "NewPassword"
Me.NewPassword.Size = New System.Drawing.Size(144, 22)
Me.NewPassword.TabIndex = 24
Me.NewPassword.Text = "12345"
'
'Label2
'
Me.Label2.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles)
Me.Label2.AutoSize = True
Me.Label2.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.Label2.Location = New System.Drawing.Point(9, 404)
Me.Label2.Name = "Label2"
Me.Label2.Size = New System.Drawing.Size(113, 16)
Me.Label2.TabIndex = 25
Me.Label2.Text = "Новый пароль"
'
'TextBox3
'
Me.TextBox3.Anchor = CType(((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.TextBox3.BorderStyle = System.Windows.Forms.BorderStyle.None
Me.TextBox3.Font = New System.Drawing.Font("Arial", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.TextBox3.Location = New System.Drawing.Point(9, 372)
Me.TextBox3.Multiline = True
Me.TextBox3.Name = "TextBox3"
Me.TextBox3.Size = New System.Drawing.Size(431, 29)
Me.TextBox3.TabIndex = 23
Me.TextBox3.Text = "Файл информационной базы не должен быть открыт никакими другими приложениями."
'
'ButtonChangePwdFileDB
'
Me.ButtonChangePwdFileDB.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.ButtonChangePwdFileDB.Font = New System.Drawing.Font("Arial", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.ButtonChangePwdFileDB.ForeColor = System.Drawing.Color.FromArgb(CType(CType(0, Byte), Integer), CType(CType(64, Byte), Integer), CType(CType(0, Byte), Integer))
Me.ButtonChangePwdFileDB.Location = New System.Drawing.Point(443, 373)
Me.ButtonChangePwdFileDB.Name = "ButtonChangePwdFileDB"
Me.ButtonChangePwdFileDB.Size = New System.Drawing.Size(289, 51)
Me.ButtonChangePwdFileDB.TabIndex = 22
Me.ButtonChangePwdFileDB.Text = "Установить выбранным пользователям указанный пароль"
Me.ButtonChangePwdFileDB.UseVisualStyleBackColor = True
'
'Label1
'
Me.Label1.AutoSize = True
Me.Label1.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.Label1.Location = New System.Drawing.Point(10, 6)
Me.Label1.Name = "Label1"
Me.Label1.Size = New System.Drawing.Size(244, 16)
Me.Label1.TabIndex = 20
Me.Label1.Text = "Файл информационной базы 1С"
'
'TabPage2
'
Me.TabPage2.Controls.Add(Me.TextBox2)
Me.TabPage2.Controls.Add(Me.ButtonChangePassSQL)
Me.TabPage2.Controls.Add(Me.Label6)
Me.TabPage2.Controls.Add(Me.NewPassSQL)
Me.TabPage2.Controls.Add(Me.Label5)
Me.TabPage2.Controls.Add(Me.ConnectionString)
Me.TabPage2.Controls.Add(Me.Button2)
Me.TabPage2.Controls.Add(Me.SQLUserList)
Me.TabPage2.Location = New System.Drawing.Point(4, 22)
Me.TabPage2.Name = "TabPage2"
Me.TabPage2.Padding = New System.Windows.Forms.Padding(3)
Me.TabPage2.Size = New System.Drawing.Size(738, 429)
Me.TabPage2.TabIndex = 1
Me.TabPage2.Text = "Клиент-серверная ИБ (MSSQL)"
Me.TabPage2.UseVisualStyleBackColor = True
'
'TextBox2
'
Me.TextBox2.Anchor = CType(((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.TextBox2.BorderStyle = System.Windows.Forms.BorderStyle.None
Me.TextBox2.Font = New System.Drawing.Font("Arial", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.TextBox2.Location = New System.Drawing.Point(9, 372)
Me.TextBox2.Multiline = True
Me.TextBox2.Name = "TextBox2"
Me.TextBox2.Size = New System.Drawing.Size(428, 24)
Me.TextBox2.TabIndex = 22
Me.TextBox2.Text = "Монопольного режима доступа к базе не требуется"
'
'ButtonChangePassSQL
'
Me.ButtonChangePassSQL.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.ButtonChangePassSQL.Font = New System.Drawing.Font("Arial", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.ButtonChangePassSQL.ForeColor = System.Drawing.Color.FromArgb(CType(CType(0, Byte), Integer), CType(CType(64, Byte), Integer), CType(CType(0, Byte), Integer))
Me.ButtonChangePassSQL.Location = New System.Drawing.Point(443, 372)
Me.ButtonChangePassSQL.Name = "ButtonChangePassSQL"
Me.ButtonChangePassSQL.Size = New System.Drawing.Size(289, 51)
Me.ButtonChangePassSQL.TabIndex = 21
Me.ButtonChangePassSQL.Text = "Установить выбранным пользователям указанный пароль"
Me.ButtonChangePassSQL.UseVisualStyleBackColor = True
'
'Label6
'
Me.Label6.AutoSize = True
Me.Label6.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.Label6.Location = New System.Drawing.Point(10, 6)
Me.Label6.Name = "Label6"
Me.Label6.Size = New System.Drawing.Size(293, 16)
Me.Label6.TabIndex = 19
Me.Label6.Text = "Строка соединения с базой данных 1С"
'
'NewPassSQL
'
Me.NewPassSQL.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles)
Me.NewPassSQL.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.NewPassSQL.Location = New System.Drawing.Point(128, 401)
Me.NewPassSQL.Name = "NewPassSQL"
Me.NewPassSQL.Size = New System.Drawing.Size(144, 22)
Me.NewPassSQL.TabIndex = 17
Me.NewPassSQL.Text = "12345"
'
'Label5
'
Me.Label5.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles)
Me.Label5.AutoSize = True
Me.Label5.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.Label5.Location = New System.Drawing.Point(9, 403)
Me.Label5.Name = "Label5"
Me.Label5.Size = New System.Drawing.Size(113, 16)
Me.Label5.TabIndex = 18
Me.Label5.Text = "Новый пароль"
'
'SQLUserList
'
Me.SQLUserList.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _
Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.SQLUserList.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.ColumnHeader1, Me.ColumnHeader2, Me.ColumnHeader3, Me.ColumnHeader4, Me.ColumnHeader5})
Me.SQLUserList.FullRowSelect = True
Me.SQLUserList.Location = New System.Drawing.Point(9, 50)
Me.SQLUserList.Name = "SQLUserList"
Me.SQLUserList.Size = New System.Drawing.Size(723, 319)
Me.SQLUserList.TabIndex = 20
Me.SQLUserList.UseCompatibleStateImageBehavior = False
Me.SQLUserList.View = System.Windows.Forms.View.Details
'
'ColumnHeader1
'
Me.ColumnHeader1.Text = "GUID"
Me.ColumnHeader1.Width = 158
'
'ColumnHeader2
'
Me.ColumnHeader2.Text = "Имя"
Me.ColumnHeader2.Width = 164
'
'ColumnHeader3
'
Me.ColumnHeader3.Text = "Полное имя"
Me.ColumnHeader3.Width = 147
'
'ColumnHeader4
'
Me.ColumnHeader4.Text = "Хеш пароля"
Me.ColumnHeader4.Width = 164
'
'ColumnHeader5
'
Me.ColumnHeader5.Text = "Адм.роль"
Me.ColumnHeader5.Width = 66
'
'TabPage3
'
Me.TabPage3.Controls.Add(Me.TextBox1)
Me.TabPage3.Controls.Add(Me.RepoUserList)
Me.TabPage3.Controls.Add(Me.Label4)
Me.TabPage3.Controls.Add(Me.ButtonSetRepoPassword)
Me.TabPage3.Controls.Add(Me.ButtonGetRepoUsers)
Me.TabPage3.Controls.Add(Me.Repo1C)
Me.TabPage3.Controls.Add(Me.ButtonRepo)
Me.TabPage3.Location = New System.Drawing.Point(4, 22)
Me.TabPage3.Name = "TabPage3"
Me.TabPage3.Padding = New System.Windows.Forms.Padding(3)
Me.TabPage3.Size = New System.Drawing.Size(738, 429)
Me.TabPage3.TabIndex = 2
Me.TabPage3.Text = "Хранилище конфигурации"
Me.TabPage3.UseVisualStyleBackColor = True
'
'TextBox1
'
Me.TextBox1.Anchor = CType(((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.TextBox1.BorderStyle = System.Windows.Forms.BorderStyle.None
Me.TextBox1.Font = New System.Drawing.Font("Arial", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.TextBox1.Location = New System.Drawing.Point(6, 372)
Me.TextBox1.Multiline = True
Me.TextBox1.Name = "TextBox1"
Me.TextBox1.Size = New System.Drawing.Size(431, 50)
Me.TextBox1.TabIndex = 18
Me.TextBox1.Text = "Файл хранилища конфигурации не должен быть открыт никакими другими приложениями."
'
'RepoUserList
'
Me.RepoUserList.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _
Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.RepoUserList.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.RepoUserGUID, Me.RepoUserName, Me.RepoHasPwd, Me.RepoAdmin})
Me.RepoUserList.FullRowSelect = True
Me.RepoUserList.Location = New System.Drawing.Point(9, 50)
Me.RepoUserList.Name = "RepoUserList"
Me.RepoUserList.Size = New System.Drawing.Size(723, 319)
Me.RepoUserList.TabIndex = 17
Me.RepoUserList.UseCompatibleStateImageBehavior = False
Me.RepoUserList.View = System.Windows.Forms.View.Details
'
'RepoUserGUID
'
Me.RepoUserGUID.Text = "GUID"
Me.RepoUserGUID.Width = 221
'
'RepoUserName
'
Me.RepoUserName.Text = "Имя"
Me.RepoUserName.Width = 183
'
'RepoHasPwd
'
Me.RepoHasPwd.Text = "Пароль установлен"
Me.RepoHasPwd.Width = 134
'
'RepoAdmin
'
Me.RepoAdmin.Text = "Это администратор"
Me.RepoAdmin.Width = 115
'
'LinkLabel1
'
Me.LinkLabel1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles)
Me.LinkLabel1.AutoSize = True
Me.LinkLabel1.Location = New System.Drawing.Point(230, 460)
Me.LinkLabel1.Name = "LinkLabel1"
Me.LinkLabel1.Size = New System.Drawing.Size(166, 13)
Me.LinkLabel1.TabIndex = 18
Me.LinkLabel1.TabStop = True
Me.LinkLabel1.Text = "http://infostart.ru/public/398166/"
'
'Label3
'
Me.Label3.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles)
Me.Label3.AutoSize = True
Me.Label3.Location = New System.Drawing.Point(3, 460)
Me.Label3.Name = "Label3"
Me.Label3.Size = New System.Drawing.Size(227, 13)
Me.Label3.TabIndex = 19
Me.Label3.Text = "Страница приложения для обратной связи:"
'
'LinkLabel2
'
Me.LinkLabel2.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.LinkLabel2.AutoSize = True
Me.LinkLabel2.Location = New System.Drawing.Point(649, 460)
Me.LinkLabel2.Name = "LinkLabel2"
Me.LinkLabel2.Size = New System.Drawing.Size(102, 13)
Me.LinkLabel2.TabIndex = 18
Me.LinkLabel2.TabStop = True
Me.LinkLabel2.Text = "© Aleksey.Bochkov"
'
'MainForm
'
Me.AccessibleRole = System.Windows.Forms.AccessibleRole.Application
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(752, 475)
Me.Controls.Add(Me.Label3)
Me.Controls.Add(Me.LinkLabel2)
Me.Controls.Add(Me.LinkLabel1)
Me.Controls.Add(Me.TabControl1)
Me.HelpButton = True
Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon)
Me.Name = "MainForm"
Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen
Me.Text = "Изменение паролей для информационных баз и хранилища 1С"
Me.TabControl1.ResumeLayout(False)
Me.TabPage1.ResumeLayout(False)
Me.TabPage1.PerformLayout()
Me.TabPage2.ResumeLayout(False)
Me.TabPage2.PerformLayout()
Me.TabPage3.ResumeLayout(False)
Me.TabPage3.PerformLayout()
Me.ResumeLayout(False)
Me.PerformLayout()
End Sub
Friend WithEvents Button6 As Button
Friend WithEvents FileIB As TextBox
Friend WithEvents OpenFileDialog As OpenFileDialog
Friend WithEvents ButtonGetUsers As Button
Friend WithEvents ListViewUsers As ListView
Friend WithEvents UserGUID As ColumnHeader
Friend WithEvents UserName As ColumnHeader
Friend WithEvents UserDescr As ColumnHeader
Friend WithEvents UserPassHash As ColumnHeader
Friend WithEvents ConnectionString As TextBox
Friend WithEvents Button2 As Button
Friend WithEvents UserAdmRole As ColumnHeader
Friend WithEvents Label4 As Label
Friend WithEvents Repo1C As TextBox
Friend WithEvents ButtonRepo As Button
Friend WithEvents OpenFileDialogRepo As OpenFileDialog
Friend WithEvents ButtonGetRepoUsers As Button
Friend WithEvents ButtonSetRepoPassword As Button
Friend WithEvents TabControl1 As TabControl
Friend WithEvents TabPage1 As TabPage
Friend WithEvents TabPage2 As TabPage
Friend WithEvents TabPage3 As TabPage
Friend WithEvents RepoUserList As ListView
Friend WithEvents RepoUserGUID As ColumnHeader
Friend WithEvents RepoUserName As ColumnHeader
Friend WithEvents RepoHasPwd As ColumnHeader
Friend WithEvents RepoAdmin As ColumnHeader
Friend WithEvents TextBox1 As TextBox
Friend WithEvents Label6 As Label
Friend WithEvents NewPassSQL As TextBox
Friend WithEvents Label5 As Label
Friend WithEvents TextBox2 As TextBox
Friend WithEvents ButtonChangePassSQL As Button
Friend WithEvents SQLUserList As ListView
Friend WithEvents ColumnHeader1 As ColumnHeader
Friend WithEvents ColumnHeader2 As ColumnHeader
Friend WithEvents ColumnHeader3 As ColumnHeader
Friend WithEvents ColumnHeader4 As ColumnHeader
Friend WithEvents ColumnHeader5 As ColumnHeader
Friend WithEvents ButtonChangePwdFileDB As Button
Friend WithEvents Label1 As Label
Friend WithEvents NewPassword As TextBox
Friend WithEvents Label2 As Label
Friend WithEvents TextBox3 As TextBox
Friend WithEvents LinkLabel1 As LinkLabel
Friend WithEvents Label3 As Label
Friend WithEvents LinkLabel2 As LinkLabel
End Class

View File

@ -0,0 +1,558 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="Button6.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="FileIB.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="OpenFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="ButtonGetUsers.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="ListViewUsers.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="ConnectionString.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Button2.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Label4.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Repo1C.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="ButtonRepo.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="OpenFileDialogRepo.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>152, 17</value>
</metadata>
<metadata name="ButtonGetRepoUsers.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="ButtonSetRepoPassword.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="TabControl1.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="TabPage1.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="TabPage2.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="TabPage3.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="TabPage1.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="NewPassword.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Label2.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="TextBox3.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="ButtonChangePwdFileDB.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Label1.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="NewPassword.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Label2.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="TextBox3.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="ButtonChangePwdFileDB.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Label1.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="TabPage2.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="TextBox2.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="ButtonChangePassSQL.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Label6.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="NewPassSQL.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Label5.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="SQLUserList.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="TextBox2.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="ButtonChangePassSQL.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Label6.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="NewPassSQL.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Label5.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="SQLUserList.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="TabPage3.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="TextBox1.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="RepoUserList.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="TextBox1.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="RepoUserList.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="LinkLabel1.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Label3.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="LinkLabel2.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="$this.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAEAQEAAAAEAIAAoQgAAFgAAACgAAABAAAAAgAAAAAEAIAAAAAAAAEIAAAAAAAAAAAAAAAAAAAAA
AAD/////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////++////lv///ycAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAA///////////h4vD/w8Th/8jJ4//IyeP/yMnj/8jJ4//IyeP/yMnj/8jJ
4//IyeP/yMnj/8jJ4//IyeP/yMnj/8jJ4//IyeP/yMnj/8jJ4//IyeP/yMnj/8jJ4//IyeP/yMnj/8jJ
4//IyeP/yMnj/8jJ4//IyeP/yMnj/8jJ4//IyeP/yMnj/8jJ4//IyeP/yMnj/8jJ4//IyeP/yMnj/8jJ
4//IyeP/yMnj/8jJ4//IyeP/yMnj/8jJ4//IyeP/yMnj/8jJ4//IyeP/yMnk/83O5v/u7vb/////////
///////0////hv///yYAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////eXu8/wAAe/8HDIX/BwyF/wcM
hf8HDIX/BwyF/wcMhf8HDIX/BwyF/wcMhf8HDIX/BwyF/wcMhf8HDIX/BwyF/wcMhf8HDIX/BwyF/wcM
hf8HDIX/BwyF/wcMhf8HDIX/BwyF/wcMhf8HDIX/BwyF/wcMhf8HDIX/BwyF/wcMhf8HDIX/BwyF/wcM
hf8HDIX/BwyF/wcMhf8HDIX/BwyF/wcMhf8HDIX/BwyF/wcMhf8HDIX/BwyF/wcMhf8HDIX/BwyF/wgM
hf8QE4n/Q0ej/36AwP/e3+/////////////////q////NQAAAAAAAAAAAAAAAAAAAAD//////////4CC
wv8EB4f/FRiP/xUYj/8VGI//FRiP/xUYj/8VGI//FRiP/xUYj/8VGI//FRiP/xUYj/8VGI//FRiP/xUY
j/8VGI//FRiP/xUYj/8VGI//FRiP/xUYj/8VGI//FRiP/xUYj/8VGI//FRiP/xUYj/8VGI//FRiP/xUY
j/8VGI//FRiP/xUYj/8VGI//FRiP/xUYj/8VGI//FRiP/xUYj/8VGI//FRiP/xUYj/8VGI//FRiP/xUY
j/8VGI//FRiP/xUYj/8VGI//FBeO/wwPiv8IDIj/KSuY/4KEw//n6PT//////////+////88AAAAAAAA
AAAAAAAA//////////+AgsT/BAeL/xUYk/8VGJP/FRiT/xUYk/8VGJP/FRiT/xUYk/8VGJP/FRiT/xUY
k/8VGJP/FRiT/xUYk/8VGJP/FRiT/xUYk/8VGJP/FRiT/xUYk/8VGJP/FRiT/xUYk/8VGJP/FRiT/xUY
k/8VGJP/FRiT/xUYk/8VGJP/FRiT/xUYk/8VGJP/FRiT/xUYk/8VGJP/FRiT/xUYk/8VGJP/FRiT/xUY
k/8VGJP/FRiT/xUYk/8VGJP/FRiT/xUYk/8VGJP/FRiT/xUYk/8WGJP/FReT/xETkP8KDY7/MTOg/9LS
6///////////7f///zMAAAAAAAAAAP//////////gYLI/wUHj/8WGJf/FhiX/xYYl/8WGJf/FhiX/xYY
l/8WGJf/FhiX/xYYl/8WGJf/FhiX/xYYl/8WGJf/FhiX/xYYl/8WGJf/FhiX/xYYl/8WGJf/FhiX/xYY
l/8WGJf/FhiX/xYYl/8WGJf/FhiX/xYYl/8WGJf/FhiX/xYYl/8WGJf/FhiX/xYYl/8WGJf/FhiX/xYY
l/8WGJf/FhiX/xYYl/8WGJf/FhiX/xYYl/8WGJf/FhiX/xYYl/8WGJf/FhiX/xYYl/8WGJf/FhiX/xYY
l/8WGJf/FhiY/w4Qk/8wM6T/zs/p///////////q////KAAAAAD//////////4GCyv8FB5T/Fhic/xYY
nP8WGJz/Fhic/xYYnP8WGJz/Fhic/xYYnP8WGJz/Fhic/xYYnP8WGJz/Fhic/xYYnP8WGJz/Fhic/xYY
nP8WGJz/Fhic/xYYnP8WGJz/Fhic/xYYnP8WGJz/Fhic/xYYnP8WGJz/Fhic/xYYnP8WGJz/Fhic/xYY
nP8WGJz/Fhic/xYYnP8WGJz/Fhic/xYYnP8WGJz/Fhic/xYYnP8WGJz/Fhic/xYYnP8WGJz/Fhic/xYY
nP8WGJz/Fhic/xYYnP8WGJz/Fhic/xYYnP8WGJz/DhCX/zI0p//n5/X//////////5wAAAAA////////
//+Bgsz/BgeZ/xcYoP8XGKD/Fxig/xcYoP8XGKD/Fxig/xcYoP8XGKD/Fxig/xcYoP8XGKD/Fxig/xcY
oP8XGKD/Fxig/xcYoP8XGKD/Fxig/xcYoP8XGKD/Fxig/xcYoP8XGKD/Fxig/xcYoP8XGKD/Fxig/xcY
oP8XGKD/Fxig/xcYoP8XGKD/Fxig/xcYoP8XGKD/Fxig/xcYoP8XGKD/Fxig/xcYoP8XGKD/Fxig/xcY
oP8XGKD/Fxig/xcYoP8XGKD/Fxig/xcYoP8XGKD/Fxig/xcYoP8XGKD/Fxig/xcYoP8MDZv/f4DM////
////////////OP//////////goLO/wcHnf8YGKT/GBik/xgYpP8YGKT/GBik/xgYpP8YGKT/GBik/xgY
pP8YGKT/GBik/xgYpP8YGKT/GBik/xgYpP8YGKT/GBik/xgYpP8YGKT/GBik/xgYpP8YGKT/GBik/xgY
pP8YGKT/GBik/xgYpP8YGKT/GBik/xgYpP8YGKT/GBik/xgYpP8YGKT/GBik/xgYpP8YGKT/GBik/xgY
pP8YGKT/GBik/xgYpP8YGKT/GBik/xgYpP8YGKT/GBik/xgYpP8YGKT/GBik/xgYpP8YGKT/GBik/xgY
pP8YGKT/ExOj/yEiqP/Ly+v//////////5T//////////4KC0f8HB6L/GBip/xgYqf8YGKn/GBip/xgY
qf8YGKn/GBip/xgYqf8YGKn/GBip/xgYqf8YGKn/GBip/xgYqf8YGKn/GBip/xgYqf8YGKn/GBip/xgY
qf8YGKn/GBip/xgYqf8YGKn/GBip/xgYqf8YGKn/GBip/xgYqf8YGKn/GBip/xgYqf8YGKn/GBip/xgY
qf8YGKn/GBip/xgYqf8YGKn/GBip/xgYqf8YGKn/GBip/xgYqf8YGKn/GBip/xgYqf8YGKn/GBip/xgY
qf8YGKn/GBip/xgYqf8YGKn/GBip/xgYqf8KCqP/fX3P///////////O//////////+CgtP/CQen/xkY
rf8ZGK3/GRit/xkYrf8ZGK3/GRit/xkYrf8ZGK3/GRit/xkYrf8ZGK3/GRit/xkYrf8ZGK3/GRit/xkY
rf8ZGK3/GRit/xkYrf8WFaz/ExOr/xIRqv8QD6n/Dg2p/w0MqP8NC6j/DAuo/wwLqP8NC6j/DQyp/w8N
qf8QD6n/EhGq/xMTq/8WFaz/GRit/xkYrf8ZGK3/GRit/xkYrf8ZGK3/GRit/xkYrf8ZGK3/GRit/xkY
rf8ZGK3/GRit/xkYrf8ZGK3/GRit/xkYrf8ZGK3/GRit/xkYrf8ZGK3/EhGq/zo6uf/n5/b/////////
////////goLV/wkHqv8ZGLD/GRiw/xkYsP8ZGLD/GRiw/xkYsP8ZGLD/GRiw/xkYsP8ZGLD/GRiw/xkY
sP8ZGLD/GRiw/xkXsP8XFq//Fxav/xkXsP8ZF7D/IiGz/zQ0uf9AQb3/S0zB/1RWxP9bXcj/YGLJ/2Nl
yv9jZMr/YGHJ/1tcx/9TVMT/SkvA/z8/vf8yMbn/IyKz/xgXsP8ZGLD/GRiw/xkXsP8ZGLD/GRiw/xkY
sP8ZGLD/GRiw/xkYsP8ZGLD/GRiw/xkYsP8ZGLD/GRiw/xkYsP8ZGLD/GRiw/xkYsP8ZGLD/GRiw/xkX
sP8TE67/zc3u/////////////////4OC1/8KB67/Ghi0/xoYtP8aGLT/Ghi0/xoYtP8aGLT/Ghi0/xoY
tP8aGLT/Ghi0/xoYtP8aGLT/Ghi0/xgWs/8WFLP/JiS4/ycmuP8WFLL/FxWz/3N00f/Dyev/0tnx/+Lq
9v/u9vr/9Pz8//j//f/6//7/+v/+//j//f/z+/v/7fX6/+Ho9f/Q1vD/vMHq/56i4P80NLz/FROy/xMS
sf8VE7L/ExKy/xgWs/8aGLT/Ghi0/xoYtP8aGLT/Ghi0/xoYtP8aGLT/Ghi0/xoYtP8aGLT/Ghi0/xoY
tP8aGLT/Ghi0/xoYtP8aGLT/Dgyw/8rJ7v////////////////+Dg9j/Cgqx/xoatv8aGrb/Ghq2/xoa
tv8aGrb/Ghq2/xoatv8aGrb/Ghq2/xoatv8aGrb/Ghq2/xgZtv8cHLf/dHjU/9HX8f/X3fL/cnTS/xoa
tv+fpOH///////j//f/3//z/9v78//X+/P/1/fz/9P38//T9/P/1/fz/9v78//b//P/3//z/9//8//n/
/f/z+vv/UFLI/xgatv9mac//kJLc/2Bjzf8bG7f/GRm2/xoatv8aGrb/Ghq2/xoatv8aGrb/Ghq2/xoa
tv8aGrb/Ghq2/xoatv8aGrb/Ghq2/xoatv8aGrb/Ghq2/w4Osv/Jye7/////////////////g4PZ/wsL
s/8bG7j/Gxu4/xsbuP8bG7j/Gxu4/xsbuP8bG7j/Gxu4/xsbuP8bG7j/Gxu4/xsbuP8VFbb/TE7I//L6
+//5//3/+v/9/+nx+P9FRsT/k5fe//v//v/0/Pv/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7
+//z+/v/8/v7//P7+//1/fz/6fD4/0VGxP9dYM3/8/v8///////v9/r/XWDN/xUVtv8aG7j/Gxu4/xsb
uP8bG7j/Gxu4/xsbuP8bG7j/Gxu4/xsbuP8bG7j/Gxu4/xsbuP8bG7j/Gxu4/xsbuP8PD7T/ysrv////
/////////////4OE2f8LDLP/Gxy4/xscuP8bHLj/Gxy4/xscuP8bHLj/Gxy4/xscuP8bHLj/Gxy4/xsc
uP8bHLj/ExO1/4OI2f/6//7/8/v7//P7+//6//7/ZWjQ/5GW3f/7//7/9Pz7//P7+//z+/v/8/v7//P7
+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/9f38/+bu9/9JS8f/o6jj//7//v/0/Pv//f/+/7G2
5/8jJLv/GBm3/xscuP8bHLj/Gxy4/xscuP8bHLj/Gxy4/xscuP8bHLj/Gxy4/xscuP8bHLj/Gxy4/xsc
uP8bHLj/DxC0/8rK7/////////////////+DhNr/Cw21/xsduv8bHbr/Gx26/xsduv8bHbr/Gx26/xsd
uv8bHbr/Gx26/xsduv8bHbr/Gx26/xITtv+coeH/+//9//P7+//z+/v/+P/9/2xw0/+Rl97/+//9//T8
+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//X9/P/j6/b/UlXL/7nB
6//9//7/8/v7//n//f/V2/L/Oz7E/xQVt/8bHbr/Gx26/xsduv8bHbr/Gx26/xsduv8bHbr/Gx26/xsd
uv8bHbr/Gx26/xsduv8bHbr/Gx26/w8Rtv/Kyu//////////////////g4Xa/wsOtf8bHrr/Gx66/xse
uv8bHrr/Gx66/xseuv8bHrr/Gx66/xseuv8bHrr/Gx66/xseuv8SE7f/pKrk//v//f/z+/v/8/v7//j/
/f9xdtX/k5je//v//f/0/Pv/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7
+//1/fz/4+r2/1pezv/AyOz//P/+//P7+//3//z/4+v2/0lNyf8SFLf/Gx66/xseuv8bHrr/Gx66/xse
uv8bHrr/Gx66/xseuv8bHrr/Gx66/xseuv8bHrr/Gx66/xseuv8PErb/ysrv/////////////////4OG
2/8LD7b/Gx+7/xsfu/8bH7v/Gx+7/xsfu/8bH7v/Gx+7/xsfu/8bH7v/Gx+7/xsfu/8bH7v/EhS4/6Sp
5P/7//3/8/v7//P7+//4//3/cXbV/5OZ3//7//3/9Pz7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7
+//z+/v/8/v7//P7+//z+/v/9f38/+Pq9v9hZtD/xM3t//v//f/z+/v/9//8/+ry+P9OU8v/EhW4/xsf
u/8bH7v/Gx+7/xsfu/8bH7v/Gx+7/xsfu/8bH7v/Gx+7/xsfu/8bH7v/Gx+7/xsfu/8bH7v/DxO3/8rL
7/////////////////+Dhtv/CxC3/xsgvP8bILz/GyC8/xsgvP8bILz/GyC8/xsgvP8bILz/GyC8/xsg
vP8bILz/GyC8/xIWuf+fpuP/+//9//P7+//z+/v/+P/9/3F31v+TmeD/+//9//T8+//z+/v/8/v7//P7
+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//X9/P/i6vb/ZWvS/8jQ7//6//3/8/v7//f/
/P/q8vn/TlTM/xIVuf8bILz/GyC8/xsgvP8bILz/GyC8/xsgvP8bILz/GyC8/xsgvP8bILz/GyC8/xsg
vP8bILz/GyC8/w8TuP/Ky+//////////////////g4fb/wsRt/8bIbz/GyG8/xshvP8bIbz/GyG8/xsh
vP8bIbz/GyG8/xshvP8bIbz/GyG8/xshvP8SF7n/n6fj//v//f/z+/v/8/v7//j//f9xeNb/k5rg//v/
/f/0/Pv/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//1/fz/4ur2/2Zs
0//J0e//+v/9//P7+//3//z/6vL5/05VzP8SFrn/GyG8/xshvP8bIbz/GyG8/xshvP8bIbz/GyG8/xsh
vP8bIbz/GyG8/xshvP8bIbz/GyG8/xshvP8PFLj/ysvv/////////////////4SI3P8ME7j/HCO9/xwj
vf8cI73/HCO9/xwjvf8cI73/HCO9/xwjvf8cI73/HCO9/xwjvf8cI73/Exm6/5+n5P/7//3/8/v7//P7
+//4//3/cnnW/5Ob4P/6//3/9Pz7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7
+//z+/v/9f38/+Lq9v9mbtP/ydHv//r//f/z+/v/9//8/+ry+f9PVs3/Exm6/xwjvf8cI73/HCO9/xwj
vf8cI73/HCO9/xwjvf8cI73/HCO9/xwjvf8cI73/HCO9/xwjvf8cI73/EBa5/8rL8P//////////////
//+EiNz/DBO5/xwkvv8cJL7/HCS+/xwkvv8cJL7/HCS+/xwkvv8cJL7/HCS+/xwkvv8cJL7/HCS+/xMa
u/+fp+T/+//9//P7+//z+/v/+P/8/3J61/+Tm+D/+v/9//T8+//z+/v/8/v7//P7+//z+/v/8/v7//P7
+//z+/v/8/v7//P7+//z+/v/8/v7//X9/P/i6vb/Zm7U/8nR7//6//3/8/v7//f//P/q8vj/T1fN/xMa
u/8cJL7/HCS+/xwkvv8cJL7/HCS+/xwkvv8cJL7/HCS+/xwkvv8cJL7/HCS+/xwkvv8cJL7/HCS+/xAX
uv/KzPD/////////////////hInc/wwUuf8cJb7/HCW+/xwlvv8cJb7/HCW+/xwlvv8cJb7/HCW+/xwl
vv8cJb7/HCW+/xwlvv8TG7v/n6jk//v//f/z+/v/8/v7//j//P9yetf/k5vg//r//f/0/Pv/8/v7//P7
+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//1/fz/4ur2/2Zv1P/J0e//+v/9//P7
+//3//z/6vP4/09Yzf8TG7v/HCW+/xwlvv8cJb7/HCW+/xwlvv8cJb7/HCW+/xwlvv8cJb7/HCW+/xwl
vv8cJb7/HCW+/xwlvv8QGLr/yszw/////////////////4SJ3f8MFbr/HCa//xwmv/8cJr//HCa//xwm
v/8cJr//HCa//xwmv/8cJr//HCa//xwmv/8cJr//Exy8/5+p5P/7//3/8/v7//P7+//4//z/cnrY/5Oc
4f/6//3/9Pz7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/9f38/+Lq
9v9mcNX/ydLw//r//f/z+/v/9//8/+ry+f9PWM7/Exy8/xwmv/8cJr//HCa//xwmv/8cJr//HCa//xwm
v/8cJr//HCa//xwmv/8cJr//HCa//xwmv/8cJr//EBm7/8rM8P////////////////+Eit3/DBe6/xwn
v/8cJ7//HCe//xwnv/8cJ7//HCe//xwnv/8cJ7//HCe//xwnv/8cJ7//HCe//xMdvP+fqeT/+//9//P7
+//z+/v/+P/8/3J72P+TnOH/+v/9//T8+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7
+//z+/v/8/v7//X9/P/i6vb/ZnDV/8nS8P/6//3/8/v7//f//P/q8vn/T1nO/xMdvP8cJ7//HCe//xwn
v/8cJ7//HCe//xwnv/8cJ7//HCe//xwnv/8cJ7//HCe//xwnv/8cJ7//HCe//xAbu//KzPD/////////
////////hIve/wwZu/8cKcD/HCnA/xwpwP8cKcD/HCnA/xwpwP8cKcD/HCnA/xwpwP8cKcD/HCnA/xwp
wP8TH73/n6rl//v//f/z+/v/8/v7//j//P9we9j/kp3h//v//f/0/Pv/8/v7//P7+//z+/v/8/v7//P7
+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//1/fz/4uv2/2Rw1f/J0vD/+v/9//P7+//3//z/6vP5/09b
z/8TH73/HCnA/xwpwP8cKcD/HCnA/xwpwP8cKcD/HCnA/xwpwP8cKcD/HCnA/xwpwP8cKcD/HCnA/xwp
wP8QHbz/ys3w/////////////////4SM3v8MG7z/HCvB/xwrwf8cK8H/HCvB/xwrwf8cK8H/HCvB/xwr
wf8cK8H/HCvB/xwrwf8cK8H/EyG+/5+q5f/7//3/8/v7//P7+//4//z/bXrX/5ei4v/7//3/9Pz7//P7
+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/9f38/+Ps9/9mctb/x9Dw//v/
/f/z+/v/9//8/+rz+f9PXND/EyG+/xwrwf8cK8H/HCvB/xwrwf8cK8H/HCvB/xwrwf8cK8H/HCvB/xwr
wf8cK8H/HCvB/xwrwf8cK8H/EB+9/8rN8f////////////////+Ejd//DR29/x0twv8dLcL/HS3C/x0t
wv8dLcL/HS3C/x0twv8dLcL/HS3C/x0twv8dLcL/HS3C/xMjv/+grOX/+//9//P7+//z+/v/9f38/7/J
7f/S3PL/9v38//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//T8
+//v9/r/vcnt/+Hp9v/2/fz/8/v7//f//P/r8/n/UF7Q/xMjv/8dLcL/HS3C/x0twv8dLcL/HS3C/x0t
wv8dLcL/HS3C/x0twv8dLcL/HS3C/x0twv8dLcL/HS3C/xEhvv/KzvH/////////////////hI7f/w0e
vf8dLsL/HS7C/x0uwv8dLsL/HS7C/x0uwv8dLsL/HS7C/x0uwv8dLsL/HS7C/x0uwv8TJL//oKzl//v/
/f/z+/v/8/v7//P7+//5//3/9//8//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7
+//z+/v/8/v7//P7+//z+/v/9Pz7//n//f/1/fv/8/v7//P7+//3//z/6/P5/1Be0P8TJL//HS7C/x0u
wv8dLsL/HS7C/x0uwv8dLsL/HS7C/x0uwv8dLsL/HS7C/x0uwv8dLsL/HS7C/x0uwv8RIr//ys7x////
/////////////4SO3/8NH7//HS/D/x0vw/8dL8P/HS/D/x0vw/8dL8P/HS/D/x0vw/8dL8P/HS/D/x0v
w/8dL8P/EyXA/6Cs5v/7//3/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7
+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/9//8/+vz
+f9QX9H/EyXA/x0vw/8dL8P/HS/D/x0vw/8dL8P/HS/D/x0vw/8dL8P/HS/D/x0vw/8dL8P/HS/D/x0v
w/8dL8P/ESPA/8rO8f////////////////+Ej9//DSG//x0xw/8dMcP/HTHD/x0xw/8dMcP/HTHD/x0x
w/8dMcP/HTHD/x0xw/8dMcP/HTHD/xMnwP+grOb/+//9//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7
+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7
+//z+/v/8/v7//f//P/r8/n/UGHR/xMnwP8dMcP/HTHD/x0xw/8dMcP/HTHD/x0xw/8dMcP/HTHD/x0x
w/8dMcP/HTHD/x0xw/8dMcP/HTHD/xElwP/Kz/H/////////////////hJDg/w0jwP8dM8T/HTPE/x0z
xP8dM8T/HTPE/x0zxP8dM8T/HTPE/x0zxP8dM8T/HTPE/x0zxP8TKsH/oK3n//v//f/z+/v/8/v7//P7
+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7
+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//2/vz/7vb6/1Rl0/8TKcH/HTPE/x0zxP8dM8T/HTPE/x0z
xP8dM8T/HTPE/x0zxP8dM8T/HTPE/x0zxP8dM8T/HTPE/x0zxP8RJ8H/ys/x/////////////////4SR
4P8NJsH/HTXF/x01xf8dNcX/HTXF/x01xf8dNcX/HTXF/x01xf8dNcX/HTXF/x01xf8dNcX/EyzC/6Cu
5//7//3/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7
+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/9v78//D5+/9WadT/EyrC/x01
xf8dNcX/HTXF/x01xf8dNcX/HTXF/x01xf8dNcX/HTXF/x01xf8dNcX/HTXF/x01xf8dNcX/ESnC/8rQ
8v////////////////+EkuD/DSfB/x02xf8dNsX/HTbF/x02xf8dNsX/HTbF/x02xf8dNsX/HTbF/x02
xf8dNsX/HTbF/xMtw/+erOb/+v/9//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7
+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//X9
/P/1/fv/W2/V/xIrwv8dNsX/HTbF/x02xf8dNsX/HTbF/x02xf8dNsX/HTbF/x02xf8dNsX/HTbF/x02
xf8dNsX/HTbF/xEqwv/K0PL/////////////////hJLg/w0owf8eN8X/HjfH/x43x/8eN8f/HjfH/x43
x/8eN8f/HjfH/x43x/8eN8f/HjfH/x43x/8ULsT/m6rl//r//f/z+/v/8/v7//P7+//z+/v/8/v7//P7
+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7
+//z+/v/8/v7//P7+//1/fv/9/78/11x1v8TLMP/HjfH/x43x/8eN8f/HjfH/x43x/8eN8f/HjfH/x43
x/8eN8f/HjfH/x43x/8eN8f/HjfH/x43x/8SLMP/ytDy/////////////////46c5P8XNMT/HjrH/x05
x/8dOcf/HjrH/x46x/8eOsf/HjrH/x46x/8eOsf/HjrH/x46x/8eOsf/FTLE/42f4//6//3/8/v7//P7
+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7
+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/9v78//L6+/9WbdX/Ey/D/x46x/8eOsf/HjrH/x46
x/8eOsf/HjrH/x46x/8eOsf/HjrH/x46x/8eOsf/HjrH/x46x/8dOcf/ES3D/8rQ8v//////////////
//+Ypub/MEvM/zZQzv8rR8v/Iz/J/x06yP8cOsj/HjvI/x47yP8eO8j/HjvI/x47yP8eO8j/HjvI/xg2
xf9bc9b/9f38//T8+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7
+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//v//f/F0/H/Mk7N/xk2
x/8eO8j/HjvI/x47yP8eO8j/HjvI/x47yP8eO8j/HjvI/x47yP8eO8j/HjvI/x07yP8cOsj/IDzI/xo4
x//N1PP/////////////////l6Xm/zBOzP9BW9D/QFrQ/ztWz/8yT83/KUbL/yFAyf8ePMj/HTzI/x08
yP8dPMj/HjzI/x49yP8cO8j/IkHJ/6q76v////7/+P/8//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7
+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/9f37//z/
/f/q8/n/XHTX/xg4x/8ePMj/Hj3I/x49yP8ePcj/Hj3I/x49yP8ePcj/HTzI/x08yP8dPMj/HTzI/x49
yP8lQ8r/LUrL/zhTzv8yT83/0tj0/////////////////5em5v8wT87/P1vR/z9b0f9AXNH/QFzR/0Bb
0f87WND/M1HO/yxKzP8kQ8r/IEHK/x4+yf8cPcn/HT7J/xc5yP8xUM3/rr3r//H4+/////7////+////
/v////7////+/////v////7////+/////v////7////+/////v////7////+/////v////7////+////
/v////7////+//j//P/Y4/X/a4Pb/xg5yP8dPsn/Hj/J/x4+yf8ePsn/Hj7J/x0+yf8cPcn/HD3J/x8/
yf8iQsr/J0bL/y9Ozf83VM//PlvR/0Bc0f9BXdH/NVPO/9LZ9P////////////////+Xp+b/MFHO/z9d
0f8/XdH/P13R/z9d0f8/XdH/QF3R/0Be0f9AXtH/PVvR/zhX0P8zUs7/LEzM/yZIy/8hRMr/GTzI/yNG
y/9eedj/hJvh/4ac4v+Fm+L/hZvi/4Wb4v+GnOL/hJrh/4GX4f9/leD/fpXg/36V4P9/luD/g5nh/4ac
4v+GnOL/hpzi/4ac4v+GnOL/hpzi/4ac4v90jN7/OljP/xg7yP8cPsn/HUDJ/x1Ayf8dQMn/HUDJ/x9C
yf8jRcv/KUrM/y9Pzf82VM//O1nQ/z9c0f9AXtH/QF3R/z9d0f8/XdH/P13R/zRUzv/S2fT/////////
////////l6jn/zBSz/8/XtL/P17S/z9e0v8/XtL/P17S/z9e0v8/XtL/P17S/0Bf0v9BX9L/QWDS/0Bf
0v8+XdL/PFvR/zhX0P8vUc7/JUjM/x9Cyv8aPsn/FzvI/xY6yP8VOsj/ETXF/xA2x/8rTMz/VHHW/2R+
2v9eedn/Q2HS/xs/yf8LMcT/EDXF/xM3x/8TN8f/EzfH/xM4x/8TOcf/FTrI/xs/yf8hRMv/I0bL/ydK
zf8sTc3/MFHP/zVVz/87WdH/PVzR/z9e0v9BX9L/QWDS/0Bf0v8/XtL/P17S/z9e0v8/XtL/P17S/z9e
0v80Vc//0tn0/////////////////5eo5/8yU8//QF/S/0Bf0v9AX9L/QF/S/0Bf0v9AX9L/QF/S/0Bf
0v9AX9L/QF/S/0Bf0v9AYNL/QWDS/0Fg0v9BYNL/QWDS/0Fg0v9AYNL/QF/S/z1d0v86W9D/NFXQ/0Jg
0/+QpeT/1OD0//f++//7//3/+//9/+ny+f+4ye7/Y37a/y1Pzv8sTs3/MFHO/zFSz/8yVM//NFbP/zdX
0P85WtH/PFzR/z9f0v9BYNL/QWDS/0Fg0v9BYNL/QWDS/0Fg0v9AYNL/QGDS/0Bf0v9AX9L/QF/S/0Bf
0v9AX9L/QF/S/0Bf0v9AX9L/NVbP/9La9P////////////////+Xqef/MlXQ/0Bh0/9AYdP/QGHT/0Bh
0/9AYdP/QGHT/0Bh0/9AYdP/QGHT/0Bh0/9AYdP/QGHT/0Bh0/9AYdP/QGHT/0Bh0/9AYdP/QGHT/0Bh
0/9BYdP/O13S/1h12f/E0/H/+//9//n//f/z+/v/8/v7//P7+//1/fz//v/9//D3+v+Zruf/Q2PU/0Bg
0/9CY9P/QmLT/0Ji0/9BYtP/QWLT/0Fh0/9AYdP/QGHT/0Bh0/9AYdP/QGHT/0Bh0/9AYdP/QGHT/0Bh
0/9AYdP/QGHT/0Bh0/9AYdP/QGHT/0Bh0/9AYdP/QGHT/zVY0P/S2vX/////////////////l6rn/zJW
0P9AYtP/QGLT/0Bi0/9AYtP/QGLT/0Bi0/9AYtP/QGLT/0Bi0/9AYtP/QGLT/0Bi0/9AYtP/QGLT/0Bi
0/9AYtP/QGLT/0Bi0/9AYtP/PmDT/0hp1f+/0PD//f/9//X8+//z+/v/8/v7//P7+//z+/v/8/v7//P7
+//4//z/9f38/5Sp5v89YNP/QGLT/0Bi0/9AYtP/QGLT/0Bi0/9AYtP/QGLT/0Bi0/9AYtP/QGLT/0Bi
0/9AYtP/QGLT/0Bi0/9AYtP/QGLT/0Bi0/9AYtP/QGLT/0Bi0/9AYtP/QGLT/0Bi0/81WdD/0tr1////
/////////////5er6P8yWNH/QGTU/0Bk1P9AZNT/QGTU/0Bk1P9AZNT/QGTU/0Bk1P9AZNT/QGTU/0Bk
1P9AZNT/QGTU/0Bk1P9AZNT/QGTU/0Bk1P9AZNT/QGPU/zxf0v+OpuX/9//8//T8+//z+/v/8/v7//P7
+//z+/v/8/v7//P7+//z+/v/8/v7//f//P/p8/j/aYbd/ztg0/9AZNT/QGTU/0Bk1P9AZNT/QGTU/0Bk
1P9AZNT/QGTU/0Bk1P9AZNT/QGTU/0Bk1P9AZNT/QGTU/0Bk1P9AZNT/QGTU/0Bk1P9AZNT/QGTU/0Bk
1P9AZNT/NVvR/9Lb9f////////////////+Xq+j/MlnR/0Bl1P9AZdT/QGXU/0Bl1P9AZdT/QGXU/0Bl
1P9AZdT/QGXU/0Bl1P9AZdT/QGXU/0Bl1P9AZdT/QGXU/0Bl1P9AZdT/QGXU/z1i0/9NcNf/0t/0//v/
/P/z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//0+/v//P/9/7HD7f8/ZNP/P2TU/0Bl
1P9AZdT/QGXU/0Bl1P9AZdT/QGXU/0Bl1P9AZdT/QGXU/0Bl1P9AZdT/QGXU/0Bl1P9AZdT/QGXU/0Bl
1P9AZdT/QGXU/0Bl1P9AZdT/QGXU/zVc0v/S2/X/////////////////l6zo/zJb0f9AZ9T/QGfU/0Bn
1P9AZ9T/QGfU/0Bn1P9AZ9T/QGfU/0Bn1P9AZ9T/QGfU/0Bn1P9AZ9T/QGfU/0Bn1P9AZ9T/QGfU/0Bn
1P85YdL/aYne/+jx+f/3//z/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//r/
/f/W4/T/UnbY/ztj0/9AZ9T/QGfU/0Bn1P9AZ9T/QGfU/0Bn1P9AZ9T/QGfU/0Bn1P9AZ9T/QGfU/0Bn
1P9AZ9T/QGfU/0Bn1P9AZ9T/QGfU/0Bn1P9AZ9T/QGfU/0Bn1P81XtL/0tv1/////////////////5et
6P8yXdH/QGjU/0Bo1P9AaNT/QGjU/0Bo1P9AaNT/QGjU/0Bo1P9AaNT/QGjU/0Bo1P9AaNT/QGjU/0Bo
1P9AaNT/QGjU/0Bo1P9AaNT/OWLS/3aU4P/t9vr/9v78//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7
+//z+/v/8/v7//P7+//4//z/4Oz3/2KE2/86Y9P/QGjU/0Bo1P9AaNT/QGjU/0Bo1P9AaNT/QGjU/0Bo
1P9AaNT/QGjU/0Bo1P9AaNT/QGjU/0Bo1P9AaNT/QGjU/0Bo1P9AaNT/QGjU/0Bo1P9AaNT/NV/S/9Lc
9f////////////////+Xruj/Ml7R/0Bp1P9AadT/QGnU/0Bp1P9AadT/QGnU/0Bp1P9AadT/QGnU/0Bp
1P9AadT/QGnU/0Bp1P9AadT/QGnU/0Bp1P9AadT/QGnU/zpk0/9oit3/5/H5//f+/P/z+/v/8/v7//P7
+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/+f/8/9nl9v9Zfdn/PGbT/0Bp1P9AadT/QGnU/0Bp
1P9AadT/QGnU/0Bp1P9AadT/QGnU/0Bp1P9AadT/QGnU/0Bp1P9AadT/QGnU/0Bp1P9AadT/QGnU/0Bp
1P9AadT/QGnU/zVg0v/S3PX/////////////////mK7o/zNg0v9Ba9X/QWvV/0Fr1f9Ba9X/QWvV/0Fr
1f9Ba9X/QWvV/0Fr1f9Ba9X/QWvV/0Fr1f9Ba9X/QWvV/0Fr1f9Ba9X/QWvV/0Fr1f89aNT/THTY/9Hf
9P/6//z/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//z//f/A0vH/RW7W/z9p
1f9Ba9X/QWvV/0Fr1f9Ba9X/QWvV/0Fr1f9Ba9X/QWvV/0Fr1f9Ba9X/QWvV/0Fr1f9Ba9X/QWvV/0Fr
1f9Ba9X/QWvV/0Fr1f9Ba9X/QWvV/0Fr1f82YtP/09z1/////////////////5yy6f80YtL/QWzV/0Fs
1f9BbNX/QWzV/0Fs1f9BbNX/QWzV/0Fs1f9BbNX/QWzV/0Fs1f9BbNX/QWzV/0Fs1f9BbNX/QWzV/0Fs
1f9BbNX/QGvV/zxo1P+QrOb/+P78//P7+//z+/v/8/v7//P7+//z+/v/8/v7//P7+//z+/v/8/v7//T9
+//z+/v/f57j/z1o1P9AbNX/QWzV/0Fs1f9BbNX/QWzV/0Fs1f9BbNX/QWzV/0Fs1f9BbNX/QWzV/0Fs
1f9BbNX/QWzV/0Fs1f9BbNX/QWzV/0Fs1f9BbNX/QWzV/0Fs1f9BbNX/NmTT/9Pd9f//////////////
//+2yO//PmrV/z9r1v9Bbdb/QW3W/0Ft1v9Bbdb/QW3W/0Ft1v9Bbdb/QW3W/0Ft1v9Bbdb/QW3W/0Ft
1v9Bbdb/QW3W/0Ft1v9Bbdb/QW3W/0Ft1v8/atX/TXfY/8ra8//8//3/8/v7//P7+//z+/v/8/v7//P7
+//z+/v/8/v7//T7+//9//3/u9Dw/0dx1/8/a9X/QW3W/0Ft1v9Bbdb/QW3W/0Ft1v9Bbdb/QW3W/0Ft
1v9Bbdb/QW3W/0Ft1v9Bbdb/QW3W/0Ft1v9Bbdb/QW3W/0Ft1v9Bbdb/QW3W/0Ft1v9Bbdb/QW3W/zZl
1P/T3fX//////////8n////47/P7/1d/2/88atX/QW7W/0Fu1v9Bbtb/QW7W/0Fu1v9Bbtb/QW7W/0Fu
1v9Bbtb/QW7W/0Fu1v9Bbtb/QW7W/0Fu1v9Bbtb/QW7W/0Fu1v9Bbtb/QW7W/ztp1f9hiNz/1eP1//7/
/f/0/Pv/8/v7//P7+//z+/v/8/v7//X8/P/9//3/zNzz/1eA2/88atX/QW7W/0Fu1v9Bbtb/QW7W/0Fu
1v9Bbtb/QW7W/0Fu1v9Bbtb/QW7W/0Fu1v9Bbtb/QW7W/0Fu1v9Bbtb/QW7W/0Fu1v9Bbtb/QW7W/0Fu
1v9Bbtb/QW7W/0Fu1v82ZtT/0931//////8AAAAA////4f////+Nqef/OGnU/0Fw1v9BcNb/QXDW/0Fw
1v9BcNb/QXDW/0Fw1v9BcNb/QXDW/0Fw1v9BcNb/QXDW/0Fw1v9BcNb/QXDW/0Fw1v9BcNb/QXDW/0Fw
1v9BcNb/O2zV/1yE2/++0/D/9v38//v//f/4//z/+P/8//r//f/1/Pz/tszu/1aA2v87bNX/QXDW/0Fw
1v9BcNb/QXDW/0Fw1v9BcNb/QXDW/0Fw1v9BcNb/QXDW/0Fw1v9BcNb/QXDW/0Fw1v9BcNb/QXDW/0Fw
1v9BcNb/QXDW/0Fw1v9BcNb/QXDW/0Fw1v9BcNb/NmjU/9Pe9f//////////Af///6P/////5uz6/1J9
2v88bdb/QXDX/0Fw1/9BcNf/QXDX/0Fw1/9BcNf/QXDX/0Fw1/9BcNf/QXDX/0Fw1/9BcNf/QXDX/0Fw
1/9BcNf/QXDX/0Fw1/9BcNf/QXDX/0Fw1/87bNb/R3TY/3mb4/+wx+3/0+P1/9Hh9P+sxO3/dZni/0Ry
1/89bdb/QXDX/0Fw1/9BcNf/QXDX/0Fw1/9BcNf/QXDX/0Fw1/9BcNf/QXDX/0Fw1/9BcNf/QXDX/0Fw
1/9BcNf/QXDX/0Fw1/9BcNf/QXDX/0Fw1/9BcNf/QXDX/0Fw1/9BcNf/QXDX/zZo1f/T3vb//////wAA
AAD///8i////6P////+pv+3/N2rV/z9w1/9Bcdf/QXHX/0Fx1/9Bcdf/QXHX/0Fx1/9Bcdf/QXHX/0Fx
1/9Bcdf/QXHX/0Fx1/9Bcdf/QXHX/0Fx1/9Bcdf/QXHX/0Fx1/9Bcdf/QXHX/z5v1v87bdb/PW7W/z9w
1/8/cNf/PW7W/ztt1v8+b9f/QXHX/0Fx1/9Bcdf/QXHX/0Fx1/9Bcdf/QXHX/0Fx1/9Bcdf/QXHX/0Fx
1/9Bcdf/QXHX/0Fx1/9Bcdf/QXHX/0Fx1/9Bcdf/QXHX/0Fx1/9Bcdf/QXHX/0Fx1/9Bcdf/QXHX/0Fx
1/82adX/0972//////8AAAAAAAAAAP///47/////9ff9/4in5v83a9X/QHHX/0Fy1/9Bctf/QXLX/0Fy
1/9Bctf/QXLX/0Fy1/9Bctf/QXLX/0Fy1/9Bctf/QXLX/0Fy1/9Bctf/QXLX/0Fy1/9Bctf/QXLX/0Fy
1/9Bctf/QXLX/0Fy1/9Bctf/QXLX/0Fy1/9Bctf/QXLX/0Fy1/9Bctf/QXLX/0Fy1/9Bctf/QXLX/0Fy
1/9Bctf/QXLX/0Fy1/9Bctf/QXLX/0Fy1/9Bctf/QXLX/0Fy1/9Bctf/QXLX/0Fy1/9Bctf/QXLX/0Fy
1/9Bctf/QXLX/0Fy1/9Bctf/NmrV/9Pe9v//////AAAAAAAAAAD///8F////qv/////9/v7/h6fn/zdr
1v88b9f/QXPY/0Fz2P9Bc9j/QXPY/0Fz2P9Bc9j/QXPY/0Fz2P9Bc9j/QXPY/0Fz2P9Bc9j/QXPY/0Fz
2P9Bc9j/QXPY/0Fz2P9Bc9j/QXPY/0Fz2P9Bc9j/QXPY/0Fz2P9Bc9j/QXPY/0Fz2P9Bc9j/QXPY/0Fz
2P9Bc9j/QXPY/0Fz2P9Bc9j/QXPY/0Fz2P9Bc9j/QXPY/0Fz2P9Bc9j/QXPY/0Fz2P9Bc9j/QXPY/0Fz
2P9Bc9j/QXPY/0Fz2P9Bc9j/QXPY/0Fz2P9Bc9j/QXPY/zZr1v/T3vb//////wAAAAAAAAAAAAAAAP//
/wP///+1//////n6/v+ov+3/VoPc/zlt1v88b9f/P3LY/0Fz2P9CdNj/QnTY/0J02P9CdNj/QnTY/0J0
2P9CdNj/QnTY/0J02P9CdNj/QnTY/0J02P9CdNj/QnTY/0J02P9CdNj/QnTY/0J02P9CdNj/QnTY/0J0
2P9CdNj/QnTY/0J02P9CdNj/QnTY/0J02P9CdNj/QnTY/0J02P9CdNj/QnTY/0J02P9CdNj/QnTY/0J0
2P9CdNj/QnTY/0J02P9CdNj/QnTY/0J02P9CdNj/QnTY/0J02P9CdNj/QnTY/0J02P83bNb/09/2////
//8AAAAAAAAAAAAAAAAAAAAA////B////6n//////////+/0/P+guuz/Wobd/0N22f81a9b/NGrV/zRr
1f80a9X/NGvV/zRr1f80a9X/NGvV/zRr1f80a9X/NGvV/zRr1f80a9X/NGvV/zRr1f80a9X/NGvV/zRr
1f80a9X/NGvV/zRr1f80a9X/NGvV/zRr1f80a9X/NGvV/zRr1f80a9X/NGvV/zRr1f80a9X/NGvV/zRr
1f80a9X/NGvV/zRr1f80a9X/NGvV/zRr1f80a9X/NGvV/zRr1f80a9X/NGvV/zRr1f80a9X/NGvV/zRr
1f80a9X/KGLT/9Dd9f//////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////hf///+X///////////X4
/f/C0/P/nbbr/5iz6v+YtOr/mLTq/5i06v+YtOr/mLTq/5i06v+YtOr/mLTq/5i06v+YtOr/mLTq/5i0
6v+YtOr/mLTq/5i06v+YtOr/mLTq/5i06v+YtOr/mLTq/5i06v+YtOr/mLTq/5i06v+YtOr/mLTq/5i0
6v+YtOr/mLTq/5i06v+YtOr/mLTq/5i06v+YtOr/mLTq/5i06v+YtOr/mLTq/5i06v+YtOr/mLTq/5i0
6v+YtOr/mLTq/5i06v+YtOr/mLTq/5Ow6f/n7vr//////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAD///8h////gf///93////x////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////8AAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8D////mf//////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////AAAAAAAAAH8AAAAAAAAAHwAAAAAAAAAPAAAAAAAAAAcAAAAAAAAAAwAAAAAAAAABAAAAAAAA
AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAOAA
AAAAAAAA8AAAAAAAAAD8AAAAAAAAAP4AAAAAAAAA/4AAAAAAAAA=
</value>
</data>
</root>

488
PasswordChanger1C/Form1.vb Normal file
View File

@ -0,0 +1,488 @@
Imports System.Data.SqlClient
Imports System.Security.Principal
Public Class MainForm
Dim TableParams As AccessFunctions.PageParams
Structure SQLUser
Dim ID As Byte()
Dim IDStr As String
Dim Name As String
Dim Descr As String
Dim Data As Byte()
Dim DataStr As String
Dim PassHash As String
Dim PassHash2 As String
Dim AdmRole As String
Dim KeySize As Integer
Dim KeyData As Byte()
End Structure
Dim SQLUsers As List(Of SQLUser) = New List(Of SQLUser)
Public Sub New()
' This call is required by the designer.
InitializeComponent()
FileIB.Text = "C:\Users\Alex\Desktop\1Cv8.1CD"
ConnectionString.Text = "Data Source=MSSQL1;Server=localhost;Integrated Security=true;Database=zup"
End Sub
Private Shared Function IAmTheAdministrator() As Boolean
If My.User.IsAuthenticated() Then
If My.User.IsInRole(ApplicationServices.BuiltInRole.Administrator) Then
Return True
End If
End If
Dim Rez = MsgBox("Похоже, что у Вас нет административных прав на этом компьютере. " + vbNewLine +
"Уверены, что понимаете как использовать это приложение?", MsgBoxStyle.YesNo, "Ой, вот ведь незадача :)")
If Rez = MsgBoxResult.Yes Then
Return True
End If
Return False
End Function
Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click
OpenFileDialog.FileName = FileIB.Text
OpenFileDialog.ShowDialog()
FileIB.Text = OpenFileDialog.FileName
GetUsers()
End Sub
Private Sub ButtonGetUsers_Click(sender As Object, e As EventArgs) Handles ButtonGetUsers.Click
GetUsers()
End Sub
Sub GetUsers()
'Try
ListViewUsers.Items.Clear()
Try
TableParams = AccessFunctions.ReadInfoBase(FileIB.Text, "V8USERS")
Catch ex As Exception
TableParams = Nothing
MsgBox("Ошибка при попытке чтения данных из файла информационной базы:" + vbNewLine + ex.Message, MsgBoxStyle.Critical, "Ошибка работы с файлом")
Exit Sub
End Try
If TableParams.Records Is Nothing Then
Exit Sub
End If
For Each Row In TableParams.Records
If Row("NAME").ToString = "" Then
Row.Add("UserGuidStr", "")
Row.Add("UserPassHash", "")
Row.Add("UserPassHash2", "")
Continue For
End If
Dim AuthStructure = ParserServices.ParsesClass.ParseString(Row("DATA"))
Dim PassHash = AuthStructure(0)(11)
Dim G = New Guid(DirectCast(Row("ID"), Byte()))
Row.Add("UserGuidStr", G.ToString)
If AuthStructure(0)(7) = "0" Then
Row.Add("UserPassHash", "")
Row.Add("UserPassHash2", "")
Else
If AuthStructure(0).Count = 17 Then
Row.Add("UserPassHash", AuthStructure(0)(11))
Row.Add("UserPassHash2", AuthStructure(0)(12))
Else
Row.Add("UserPassHash", AuthStructure(0)(12))
Row.Add("UserPassHash2", AuthStructure(0)(13))
End If
End If
Dim itemUserList = New ListViewItem(G.ToString)
itemUserList.SubItems.Add(Row("NAME").ToString)
itemUserList.SubItems.Add(Row("DESCR").ToString)
itemUserList.SubItems.Add(PassHash)
itemUserList.SubItems.Add(IIf(Row("ADMROLE"), "Да", ""))
ListViewUsers.Items.Add(itemUserList)
Next
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
GetUsersSQL()
End Sub
Sub GetUsersSQL()
'*****************************************************
SQLUsers.Clear()
SQLUserList.Items.Clear()
Try
Dim Connection = New SqlConnection(ConnectionString.Text)
Connection.Open()
Dim command As New SqlCommand("SELECT [ID], [Name], [Descr], [Data], [AdmRole] FROM [dbo].[v8users] ORDER BY [Name]", Connection)
Dim reader = command.ExecuteReader()
While reader.Read
Dim SQLUser = New SQLUser
SQLUser.ID = reader.GetSqlBinary(0)
SQLUser.Name = reader.GetString(1)
SQLUser.Descr = reader.GetString(2)
SQLUser.Data = reader.GetSqlBinary(3)
SQLUser.AdmRole = IIf(BitConverter.ToBoolean(reader.GetSqlBinary(4), 0), "Да", "")
SQLUser.IDStr = New Guid(SQLUser.ID).ToString
SQLUser.DataStr = AccessFunctions.DecodePasswordStructure(SQLUser.Data, SQLUser.KeySize, SQLUser.KeyData)
Dim AuthStructure = ParserServices.ParsesClass.ParseString(SQLUser.DataStr)
If AuthStructure(0)(7) = "0" Then
'нет авторизации
SQLUser.PassHash = "нет авторизации 1С"
Else
If AuthStructure(0).Count = 17 Then
SQLUser.PassHash = AuthStructure(0)(11)
SQLUser.PassHash2 = AuthStructure(0)(12)
Else
SQLUser.PassHash = AuthStructure(0)(12)
SQLUser.PassHash2 = AuthStructure(0)(13)
End If
End If
SQLUsers.Add(SQLUser)
End While
reader.Close()
Catch ex As Exception
MsgBox("Ошибка при попытке чтения пользователей из базы данных:" + vbNewLine + ex.Message, MsgBoxStyle.Critical, "Ошибка работы с базой данных")
Exit Sub
End Try
'*****************************************************
For Each Row In SQLUsers
If String.IsNullOrEmpty(Row.Name) Then
Continue For
End If
Dim itemUserList = New ListViewItem(Row.IDStr)
itemUserList.SubItems.Add(Row.Name)
itemUserList.SubItems.Add(Row.Descr)
itemUserList.SubItems.Add(Row.PassHash)
itemUserList.SubItems.Add(Row.AdmRole)
SQLUserList.Items.Add(itemUserList)
Next
'*****************************************************
End Sub
Private Sub ButtonChangePassSQL_Click(sender As Object, e As EventArgs) Handles ButtonChangePassSQL.Click
If SQLUserList.SelectedItems.Count = 0 Then
MsgBox("Не выделены строки с пользователями для установки нового пароля!", MsgBoxStyle.Information, "Не выделены строки с пользователями")
Exit Sub
End If
Dim Rez = MsgBox("Внесение изменений в базу данных может привести к непредсказуемым последствиям, вплоть до полного разрушения базы. " + vbNewLine +
"Продолжая операцию Вы осознаете это и понимаете, что восстановление будет возможно только из резервной копии." + vbNewLine +
"Установить новый пароль выбранным пользователям?", MsgBoxStyle.YesNo, "Уверены?")
If Not Rez = MsgBoxResult.Yes Then
Exit Sub
End If
Try
Dim Str = ""
Dim Connection = New SqlConnection(ConnectionString.Text)
Connection.Open()
Dim command As New SqlCommand("UPDATE [dbo].[v8users] SET [Data] = @data WHERE [ID] = @user", Connection)
For Each item In SQLUserList.SelectedItems
For Each SQLUser In SQLUsers
If SQLUser.IDStr = item.text _
And Not SQLUser.PassHash = """""" Then
Dim a = 0
Str = Str + vbNewLine + SQLUser.Name
Dim NewHash = AccessFunctions.EncryptStringSHA1(NewPassSQL.Text.Trim)
Dim NewData = SQLUser.DataStr.Replace(SQLUser.PassHash, """" + NewHash + """")
NewData = NewData.Replace(SQLUser.PassHash2, """" + NewHash + """")
Dim NewBytes = AccessFunctions.EncodePasswordStructure(NewData, SQLUser.KeySize, SQLUser.KeyData)
command.Parameters.Clear()
command.Parameters.Add(New SqlParameter("@user", SqlDbType.Binary)).Value = SQLUser.ID
command.Parameters.Add(New SqlParameter("@data", SqlDbType.Binary)).Value = NewBytes
command.ExecuteNonQuery()
End If
Next
Next
GetUsersSQL()
MsgBox("Успешно установлен пароль '" + NewPassSQL.Text.Trim + "' для пользователей:" + Str, MsgBoxStyle.Information, "Операция успешно выполнена")
Catch ex As Exception
MsgBox("Ошибка при попытке записи новых данных пользователей в базу данных:" + vbNewLine + ex.Message, MsgBoxStyle.Critical, "Ошибка работы с базой данных")
End Try
End Sub
Private Sub ButtonRepo_Click(sender As Object, e As EventArgs) Handles ButtonRepo.Click
OpenFileDialogRepo.FileName = Repo1C.Text
OpenFileDialogRepo.ShowDialog()
Repo1C.Text = OpenFileDialogRepo.FileName
GetUsersRepoUsers()
End Sub
Private Sub ButtonGetRepoUsers_Click(sender As Object, e As EventArgs) Handles ButtonGetRepoUsers.Click
GetUsersRepoUsers()
End Sub
Sub GetUsersRepoUsers()
RepoUserList.Items.Clear()
Try
TableParams = AccessFunctions.ReadInfoBase(Repo1C.Text, "USERS")
Catch ex As Exception
TableParams = Nothing
MsgBox("Ошибка при попытке чтения данных из файла хранилища:" + vbNewLine + ex.Message, MsgBoxStyle.Critical, "Ошибка работы с файлом")
Exit Sub
End Try
If TableParams.Records Is Nothing Then
Exit Sub
End If
For Each Row In TableParams.Records
If Row("NAME").ToString = "" Then
Continue For
End If
Dim G = New Guid(DirectCast(Row("USERID"), Byte()))
Dim itemUserList = New ListViewItem(G.ToString)
Row.Add("UserGuidStr", G.ToString)
itemUserList.SubItems.Add(Row("NAME").ToString)
If Row("PASSWORD").ToString = "d41d8cd98f00b204e9800998ecf8427e" Then
itemUserList.SubItems.Add("<нет>")
Else
itemUserList.SubItems.Add("пароль установлен")
End If
Dim RIGHTS = BitConverter.ToInt32(Row("RIGHTS"), 0)
If RIGHTS = 65535 Or RIGHTS = 32773 Then
itemUserList.SubItems.Add("Да")
End If
RepoUserList.Items.Add(itemUserList)
Next
End Sub
Private Sub ButtonSetRepoPassword_Click(sender As Object, e As EventArgs) Handles ButtonSetRepoPassword.Click
If RepoUserList.SelectedItems.Count = 0 Then
MsgBox("Не выделены строки с пользователями для сброса пароля!", MsgBoxStyle.Information, "Не выделены строки с пользователями")
Else
Dim Rez = MsgBox("Внесение изменений в файл хранилища конфигурации может привести к непредсказуемым последствиям, вплоть до полного разрушения базы. " + vbNewLine +
"Продолжая операцию Вы осознаете это и понимаете, что восстановление будет возможно только из резервной копии." + vbNewLine +
"Установить пустой пароль выбранным пользователям?", MsgBoxStyle.YesNo, "Уверены?")
If Not Rez = MsgBoxResult.Yes Then
Exit Sub
End If
Try
Dim Str = ""
For Each item In RepoUserList.SelectedItems
For Each Row In TableParams.Records
If Row("UserGuidStr") = item.text Then
Str = Str + vbNewLine + Row("NAME").ToString
AccessFunctions.WritePasswordIntoInfoBaseRepo(Repo1C.Text, TableParams, DirectCast(Row("USERID"), Byte()), "d41d8cd98f00b204e9800998ecf8427e", Row("OFFSET_PASSWORD"))
End If
Next
Next
GetUsersRepoUsers()
MsgBox("Успешно установлены пустые пароли для пользователей:" + Str, MsgBoxStyle.Information, "Операция успешно выполнена")
Catch ex As Exception
MsgBox("Ошибка при попытке записи данных в файл хранилища:" + vbNewLine + ex.Message, MsgBoxStyle.Critical, "Ошибка работы с файлом")
End Try
End If
End Sub
Private Sub ButtonChangePwdFileDB_Click(sender As Object, e As EventArgs) Handles ButtonChangePwdFileDB.Click
If ListViewUsers.SelectedItems.Count = 0 Then
MsgBox("Не выделены строки с пользователями для сброса пароля!", MsgBoxStyle.Information, "Не выделены строки с пользователями")
Else
Dim Rez = MsgBox("Внесение изменений в файл информационной базы может привести к непредсказуемым последствиям, вплоть до полного разрушения базы. " + vbNewLine +
"Продолжая операцию Вы осознаете это и понимаете, что восстановление будет возможно только из резервной копии." + vbNewLine +
"Установить новый пароль выбранным пользователям?", MsgBoxStyle.YesNo, "Уверены?")
If Not Rez = MsgBoxResult.Yes Then
Exit Sub
End If
Try
Dim Str = ""
For Each item In ListViewUsers.SelectedItems
For Each Row In TableParams.Records
If Row("UserGuidStr") = item.text Then
Str = Str + vbNewLine + Row("NAME").ToString
Dim NewHash = AccessFunctions.EncryptStringSHA1(NewPassword.Text.Trim)
Dim OldData = Row("DATA").ToString
Dim NewData = OldData.Replace(Row("UserPassHash"), """" + NewHash + """")
NewData = NewData.Replace(Row("UserPassHash2"), """" + NewHash + """")
Dim NewBytes = AccessFunctions.EncodePasswordStructure(NewData, Row("DATA_KEYSIZE"), Row("DATA_KEY"))
AccessFunctions.WritePasswordIntoInfoBaseIB(FileIB.Text, TableParams, DirectCast(Row("ID"), Byte()), NewBytes, Row("DATA_POS"), Row("DATA_SIZE"))
End If
Next
Next
GetUsers()
MsgBox("Успешно установлен пароль '" + NewPassword.Text.Trim + "' для пользователей:" + Str, MsgBoxStyle.Information, "Операция успешно выполнена")
Catch ex As Exception
MsgBox("Ошибка при попытке записи данных в файл информационной базы:" + vbNewLine + ex.Message, MsgBoxStyle.Critical, "Ошибка работы с файлом")
End Try
End If
End Sub
Private Sub MainForm_HelpButtonClicked(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles MyBase.HelpButtonClicked
Dim AboutForm = New AboutBox
AboutForm.ShowDialog()
End Sub
Private Sub LinkLabel2_Click(sender As Object, e As EventArgs) Handles LinkLabel2.Click
Process.Start("http://infostart.ru/profile/15301/")
End Sub
Private Sub LinkLabel1_Click(sender As Object, e As EventArgs) Handles LinkLabel1.Click
Process.Start("http://infostart.ru/public/398166/")
End Sub
Private Sub MainForm_Shown(sender As Object, e As EventArgs) Handles Me.Shown
If Not IAmTheAdministrator() Then
ButtonChangePwdFileDB.Enabled = False
ButtonChangePassSQL.Enabled = False
ButtonSetRepoPassword.Enabled = False
End If
End Sub
End Class

View File

@ -0,0 +1,38 @@
'------------------------------------------------------------------------------
' <auto-generated>
' This code was generated by a tool.
' Runtime Version:4.0.30319.42000
'
' Changes to this file may cause incorrect behavior and will be lost if
' the code is regenerated.
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict On
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
<Global.System.Diagnostics.DebuggerStepThroughAttribute()> _
Public Sub New()
MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows)
Me.IsSingleInstance = false
Me.EnableVisualStyles = true
Me.SaveMySettingsOnExit = true
Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses
End Sub
<Global.System.Diagnostics.DebuggerStepThroughAttribute()> _
Protected Overrides Sub OnCreateMainForm()
Me.MainForm = Global.PasswordChanger1C.MainForm
End Sub
End Class
End Namespace

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<MyApplicationData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<MySubMain>true</MySubMain>
<MainForm>Form1</MainForm>
<SingleInstance>false</SingleInstance>
<ShutdownMode>0</ShutdownMode>
<EnableVisualStyles>true</EnableVisualStyles>
<AuthenticationMode>0</AuthenticationMode>
<ApplicationType>0</ApplicationType>
<SaveMySettingsOnExit>true</SaveMySettingsOnExit>
</MyApplicationData>

View File

@ -0,0 +1,35 @@
Imports System
Imports System.Reflection
Imports System.Runtime.InteropServices
' General Information about an assembly is controlled through the following
' set of attributes. Change these attribute values to modify the information
' associated with an assembly.
' Review the values of the assembly attributes
<Assembly: AssemblyTitle("Password changer for 1C:Enterprise")>
<Assembly: AssemblyDescription("Изменение паролей пользователей для баз 1С")>
<Assembly: AssemblyCompany("Aleksey Bochkov")>
<Assembly: AssemblyProduct("Password changer for 1C:Enterprise")>
<Assembly: AssemblyCopyright("Copyright © Aleksey Bochkov")>
<Assembly: AssemblyTrademark("")>
<Assembly: ComVisible(False)>
'The following GUID is for the ID of the typelib if this project is exposed to COM
<Assembly: Guid("47b7d590-8732-4087-82d0-9c622f809343")>
' Version information for an assembly consists of the following four values:
'
' Major Version
' Minor Version
' Build Number
' Revision
'
' You can specify all the values or you can default the Build and Revision Numbers
' by using the '*' as shown below:
' <Assembly: AssemblyVersion("1.0.*")>
<Assembly: AssemblyVersion("1.0.0.0")>
<Assembly: AssemblyFileVersion("1.0.0.0")>

View File

@ -0,0 +1,62 @@
'------------------------------------------------------------------------------
' <auto-generated>
' This code was generated by a tool.
' Runtime Version:4.0.30319.42000
'
' Changes to this file may cause incorrect behavior and will be lost if
' the code is regenerated.
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict On
Option Explicit On
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
'with the /str option, or rebuild your VS project.
'''<summary>
''' A strongly-typed resource class, for looking up localized strings, etc.
'''</summary>
<Global.System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0"), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
Global.Microsoft.VisualBasic.HideModuleNameAttribute()> _
Friend Module Resources
Private resourceMan As Global.System.Resources.ResourceManager
Private resourceCulture As Global.System.Globalization.CultureInfo
'''<summary>
''' Returns the cached ResourceManager instance used by this class.
'''</summary>
<Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager
Get
If Object.ReferenceEquals(resourceMan, Nothing) Then
Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("PasswordChanger1C.Resources", GetType(Resources).Assembly)
resourceMan = temp
End If
Return resourceMan
End Get
End Property
'''<summary>
''' Overrides the current thread's CurrentUICulture property for all
''' resource lookups using this strongly typed resource class.
'''</summary>
<Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Friend Property Culture() As Global.System.Globalization.CultureInfo
Get
Return resourceCulture
End Get
Set(ByVal value As Global.System.Globalization.CultureInfo)
resourceCulture = value
End Set
End Property
End Module
End Namespace

View File

@ -0,0 +1,117 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -0,0 +1,73 @@
'------------------------------------------------------------------------------
' <auto-generated>
' This code was generated by a tool.
' Runtime Version:4.0.30319.42000
'
' Changes to this file may cause incorrect behavior and will be lost if
' the code is regenerated.
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict On
Option Explicit On
Namespace My
<Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
Global.System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0"), _
Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Partial Friend NotInheritable Class MySettings
Inherits Global.System.Configuration.ApplicationSettingsBase
Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings)
#Region "My.Settings Auto-Save Functionality"
#If _MyType = "WindowsForms" Then
Private Shared addedHandler As Boolean
Private Shared addedHandlerLockObject As New Object
<Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs)
If My.Application.SaveMySettingsOnExit Then
My.Settings.Save()
End If
End Sub
#End If
#End Region
Public Shared ReadOnly Property [Default]() As MySettings
Get
#If _MyType = "WindowsForms" Then
If Not addedHandler Then
SyncLock addedHandlerLockObject
If Not addedHandler Then
AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings
addedHandler = True
End If
End SyncLock
End If
#End If
Return defaultInstance
End Get
End Property
End Class
End Namespace
Namespace My
<Global.Microsoft.VisualBasic.HideModuleNameAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute()> _
Friend Module MySettingsProperty
<Global.System.ComponentModel.Design.HelpKeywordAttribute("My.Settings")> _
Friend ReadOnly Property Settings() As Global.PasswordChanger1C.My.MySettings
Get
Return Global.PasswordChanger1C.My.MySettings.Default
End Get
End Property
End Module
End Namespace

View File

@ -0,0 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" UseMySettingsClassName="true">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>

View File

@ -0,0 +1,76 @@
<?xml version="1.0" encoding="utf-8"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<!-- UAC Manifest Options
If you want to change the Windows User Account Control level replace the
requestedExecutionLevel node with one of the following.
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
Specifying requestedExecutionLevel element will disable file and registry virtualization.
Remove this element if your application requires this virtualization for backwards
compatibility.
-->
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
</requestedPrivileges>
</security>
</trustInfo>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- A list of the Windows versions that this application has been tested on and is
is designed to work with. Uncomment the appropriate elements and Windows will
automatically selected the most compatible environment. -->
<!-- Windows Vista -->
<!--<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}" />-->
<!-- Windows 7 -->
<!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" />-->
<!-- Windows 8 -->
<!--<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" />-->
<!-- Windows 8.1 -->
<!--<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" />-->
<!-- Windows 10 -->
<!--<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />-->
</application>
</compatibility>
<!-- Indicates that the application is DPI-aware and will not be automatically scaled by Windows at higher
DPIs. Windows Presentation Foundation (WPF) applications are automatically DPI-aware and do not need
to opt in. Windows Forms applications targeting .NET Framework 4.6 that opt into this setting, should
also set the 'EnableWindowsFormsHighDpiAutoResizing' setting to 'true' in their app.config. -->
<!--
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
</windowsSettings>
</application>
-->
<!-- Enable themes for Windows common controls and dialogs (Windows XP and later) -->
<!--
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
-->
</assembly>

View File

@ -0,0 +1,65 @@
Namespace ParserServices
Public Class ParsesClass
Public Shared Function ParseString(Str As String) As List(Of Object)
Dim Arr = Str.Split(",")
Dim List = ParseStringInternal(Arr, 0, Arr.Length - 1)
Return List
End Function
Private Shared Function ParseStringInternal(Arr() As String, ByRef Position As Integer, ArrLength As Integer) As List(Of Object)
'TODO - не обрабатываются ситуации с двойными кавычками и переносами строк в тексте
Dim List = New List(Of Object)
While True
Dim Val = Arr(Position).Trim
If Val.StartsWith("{") Then
Arr(Position) = Val.Substring(1)
List.Add(ParseStringInternal(Arr, Position, ArrLength))
ElseIf String.IsNullOrEmpty(Val) Then
Position = Position + 1
Else
Dim Pos = Val.IndexOf("}")
If Pos > -1 Then
Dim Vl2 = Val.Substring(0, Pos)
If Not String.IsNullOrEmpty(Vl2) Then
List.Add(Vl2)
End If
Arr(Position) = Val.Substring(Pos + 1)
Exit While
Else
List.Add(Val)
Position = Position + 1
End If
End If
If Position >= ArrLength Then
Exit While
End If
End While
Return List
End Function
End Class
End Namespace

View File

@ -0,0 +1,164 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{932C8B77-0E5E-44F6-92A4-AF13BE862D9A}</ProjectGuid>
<OutputType>WinExe</OutputType>
<StartupObject>PasswordChanger1C.My.MyApplication</StartupObject>
<RootNamespace>PasswordChanger1C</RootNamespace>
<AssemblyName>PasswordChanger1C</AssemblyName>
<FileAlignment>512</FileAlignment>
<MyType>WindowsForms</MyType>
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<IsWebBootstrapper>false</IsWebBootstrapper>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>x86</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<DefineDebug>true</DefineDebug>
<DefineTrace>true</DefineTrace>
<OutputPath>bin\Debug\</OutputPath>
<DocumentationFile>PasswordChanger1C.xml</DocumentationFile>
<NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<DefineDebug>false</DefineDebug>
<DefineTrace>true</DefineTrace>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DocumentationFile>PasswordChanger1C.xml</DocumentationFile>
<NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
</PropertyGroup>
<PropertyGroup>
<OptionExplicit>On</OptionExplicit>
</PropertyGroup>
<PropertyGroup>
<OptionCompare>Binary</OptionCompare>
</PropertyGroup>
<PropertyGroup>
<OptionStrict>Off</OptionStrict>
</PropertyGroup>
<PropertyGroup>
<OptionInfer>On</OptionInfer>
</PropertyGroup>
<PropertyGroup>
<ApplicationIcon>user.ico</ApplicationIcon>
</PropertyGroup>
<PropertyGroup>
<ApplicationManifest>My Project\app.manifest</ApplicationManifest>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Import Include="Microsoft.VisualBasic" />
<Import Include="System" />
<Import Include="System.Collections" />
<Import Include="System.Collections.Generic" />
<Import Include="System.Data" />
<Import Include="System.Drawing" />
<Import Include="System.Diagnostics" />
<Import Include="System.Windows.Forms" />
</ItemGroup>
<ItemGroup>
<Compile Include="AboutBox.Designer.vb">
<DependentUpon>AboutBox.vb</DependentUpon>
</Compile>
<Compile Include="AboutBox.vb">
<SubType>Form</SubType>
</Compile>
<Compile Include="AccessFunctions.vb" />
<Compile Include="Form1.vb">
<SubType>Form</SubType>
</Compile>
<Compile Include="Form1.Designer.vb">
<DependentUpon>Form1.vb</DependentUpon>
<SubType>Form</SubType>
</Compile>
<Compile Include="My Project\AssemblyInfo.vb" />
<Compile Include="My Project\Application.Designer.vb">
<AutoGen>True</AutoGen>
<DependentUpon>Application.myapp</DependentUpon>
</Compile>
<Compile Include="My Project\Resources.Designer.vb">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<Compile Include="My Project\Settings.Designer.vb">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
<Compile Include="Parser.vb" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="AboutBox.resx">
<DependentUpon>AboutBox.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Form1.resx">
<DependentUpon>Form1.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="My Project\Resources.resx">
<Generator>VbMyResourcesResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.vb</LastGenOutput>
<CustomToolNamespace>My.Resources</CustomToolNamespace>
<SubType>Designer</SubType>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<None Include="My Project\app.manifest" />
<None Include="My Project\Application.myapp">
<Generator>MyApplicationCodeGenerator</Generator>
<LastGenOutput>Application.Designer.vb</LastGenOutput>
</None>
<None Include="My Project\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<CustomToolNamespace>My</CustomToolNamespace>
<LastGenOutput>Settings.Designer.vb</LastGenOutput>
</None>
</ItemGroup>
<ItemGroup>
<Content Include="user.ico" />
<Content Include="Users.ico" />
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>true</Install>
</BootstrapperPackage>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

BIN
PasswordChanger1C/Users.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
PasswordChanger1C/user.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB