Программирование на Visual Basic

Пароли в Windows - не секрет!

Считается дурным тоном давать паролю имя своего
любимого кота. Но я не могу устоять от соблазна.
Я так привык к его имени: 4wvi_s!f…
Анекдот

Введение

Одной из особенностей Windows является то, что доступ практически ко всем ресурсам системы осуществляется с помощью функций API, в том числе и к паролям. Сегодня мы и поговорим о функциях, которые позволяют работать с паролями операционной системы Windows. Такие функции не документируется, поэтому примеров будет не очень много.

Бесплатный Интернет

Чтобы получить логин и пароль для доступа в Интернет, нам понадобится функция WNetEnumCachedPasswords:

"// API
Declare Function WNetEnumCachedPasswords Lib "mpr.dll" (ByVal s As String, ByVal i As Integer, ByVal b As Byte, ByVal proc As Long, ByVal l As Long) As Long

"//Структуры
Type PASSWORD_CACHE_ENTRY
cbEntry As Integer
cbResource As Integer
cbPassword As Integer
iEntry As Byte
nType As Byte
abResource(1 To 1024) As Byte
End Type

Public Function PwdCallBack(pce As PASSWORD_CACHE_ENTRY, ByVal lParam As Long) As Integer

Dim s As String, s1 As String, Password As String, Login As String, ConnectName As String
Dim i As Integer

s = "RAS connection"
s = StrConv(pce.abResource, vbUnicode)
s1 = Mid$(s, pce.cbResource + 1, pce.cbPassword)
i = InStr(1, s1, ":")

If i > 0 Then
Password = Mid$(s1, i + 1) "// Пароль
Else
Password = s1 "// Пароль
End If

Login = Replace(s, Password, "") "// Логин
ConnectName = Mid(Login, InStr(1, Trim(Login), "/") + 1) "// Название соединения
Login = Mid(ConnectName, InStr(1, Trim(ConnectName), "/") + 1) "// Логин
ConnectName = Replace(ConnectName, "/" & Login, "") "// Название соединения

"// Выводим полученные значения

MsgBox "Имя соединения: " & ConnectName & vbNewLine _
& "PASSWORD: " & Password & vbNewLine _
& "LOGIN: " & Login

PwdCallBack = True
End Function

Использование:

Call WNetEnumCachedPasswords(vbNullString, 0, 6, AddressOf PwdCallBack, 0&)

В данном примере выведутся все (!) имена и пароли, с помощью которых пользователь когда-либо подключался к Сети.

Примечание: пример будет работать только в Win9x/Me

Диалоговые окна

Диалоговые окна для изменения паролей:

"// API
Declare Function PwdChangePassword Lib "mpr" Alias "PwdChangePasswordA" (ByVal lpcRegkeyname As String, ByVal hwnd As Long, ByVal uiReserved1 As Long, ByVal uiReserved2 As Long) As Long

Примеры:

PwdChangePassword "SCRSAVE", Me.hwnd, 0, 0 "// Окно изменения пароля для экранной заставки

PwdChangePassword vbNullString, Me.hwnd, 0, 0 "// Окно для изменения пароля Windows

Завершение

Статья подошла к концу, если у вас есть вопросы - пишите!

При написании статьи были использованы материалы сайта http://www.planet-source-code.com

Hosted by uCoz