Пароли в 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