Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.09.2011, 08:54   #1
Mr_ViK
Форумчанин
 
Регистрация: 12.08.2011
Сообщений: 124
Злость проблема с функцией RasGetEntryDialParams

Народ, что за ошибка?
При использовании функции RasGetEntryDialParams, она возвращает код 623
Че за фигня?
Mr_ViK вне форума Ответить с цитированием
Старый 02.09.2011, 09:09   #2
Mr_ViK
Форумчанин
 
Регистрация: 12.08.2011
Сообщений: 124
Хорошо Аееееееее, разбрался!!!!!!!!

Вот, кому может понадобиться:
В коде
Код:
'This program let you dial to your dial-up connections using whether
'the stored user name and password or the ones you specifies
'(It use RasDial for dialing)

'You need a form with a list,2 textbox and a command button

Option Explicit
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, ByVal pSrc As String, ByVal ByteLen As Long)
Private Declare Sub ZeroMemory Lib "kernel32.dll" Alias "RtlZeroMemory" (Destination As Any, ByVal Length As Long)

Const RAS95_MaxEntryName = 256
Const RAS_MaxPhoneNumber = 128
Const RAS_MaxCallbackNumber = RAS_MaxPhoneNumber

Const UNLEN = 256
Const PWLEN = 256
Const DNLEN = 12
Private Type RASDIALPARAMS
   dwSize As Long ' 1052
   szEntryName(RAS95_MaxEntryName) As Byte
   szPhoneNumber(RAS_MaxPhoneNumber) As Byte
   szCallbackNumber(RAS_MaxCallbackNumber) As Byte
   szUserName(UNLEN) As Byte
   szPassword(PWLEN) As Byte
   szDomain(DNLEN) As Byte
End Type

Private Type RASENTRYNAME95
    'set dwsize to 264
    dwSize As Long
    szEntryName(RAS95_MaxEntryName) As Byte
End Type

Private Declare Function RasDial Lib "rasapi32.dll" Alias "RasDialA" (ByVal lprasdialextensions As Long, ByVal lpcstr As String, ByRef lprasdialparamsa As RASDIALPARAMS, ByVal dword As Long, lpvoid As Any, ByRef lphrasconn As Long) As Long
Private Declare Function RasEnumEntries Lib "rasapi32.dll" Alias "RasEnumEntriesA" (ByVal reserved As String, ByVal lpszPhonebook As String, lprasentryname As Any, lpcb As Long, lpcEntries As Long) As Long
Private Declare Function RasGetEntryDialParams Lib "rasapi32.dll" Alias "RasGetEntryDialParamsA" (ByVal lpcstr As String, ByRef lprasdialparamsa As RASDIALPARAMS, ByRef lpbool As Long) As Long

Private Function Dial(ByVal Connection As String, ByVal UserName As String, ByVal Password As String) As Boolean
    Dim rp As RASDIALPARAMS, h As Long, resp As Long
    rp.dwSize = Len(rp) + 6
    ChangeBytes Connection, rp.szEntryName
    ChangeBytes "", rp.szPhoneNumber 'Phone number stored for the connection
    ChangeBytes "*", rp.szCallbackNumber 'Callback number stored for the connection
    ChangeBytes UserName, rp.szUserName
    ChangeBytes Password, rp.szPassword
    ChangeBytes "*", rp.szDomain 'Domain stored for the connection
    'Dial
    resp = RasDial(ByVal 0, ByVal 0, rp, 0, ByVal 0, h)   'AddressOf RasDialFunc
    Dial = (resp = 0)
End Function

Private Function ChangeToStringUni(Bytes() As Byte) As String
    'Changes an byte array to a Visual Basic unicode string
    Dim temp As String
    temp = StrConv(Bytes, vbUnicode)
    ChangeToStringUni = Left(temp, InStr(temp, Chr(0)) - 1)
End Function

Private Function ChangeBytes(ByVal str As String, Bytes() As Byte) As Boolean
    'Changes a Visual Basic unicode string to an byte array
    'Returns True if it truncates str
    Dim lenBs As Long 'length of the byte array
    Dim lenStr As Long 'length of the string
    lenBs = UBound(Bytes) - LBound(Bytes)
    lenStr = LenB(StrConv(str, vbFromUnicode))
    If lenBs > lenStr Then
        CopyMemory Bytes(0), str, lenStr
        ZeroMemory Bytes(lenStr), lenBs - lenStr
    ElseIf lenBs = lenStr Then
        CopyMemory Bytes(0), str, lenStr
    Else
        CopyMemory Bytes(0), str, lenBs 'Queda truncado
        ChangeBytes = True
    End If
End Function

Private Sub Command1_Click()
    Dial List1.Text, Text1, Text2
End Sub


Private Sub List1_Click()
    Dim rdp As RASDIALPARAMS, t As Long
    rdp.dwSize = Len(rdp) + 6
    ChangeBytes List1.Text, rdp.szEntryName
    'Get User name and password for the connection
    t = RasGetEntryDialParams(List1.Text, rdp, 0)
    If t = 0 Then
        Text1 = ChangeToStringUni(rdp.szUserName)
        Text2 = ChangeToStringUni(rdp.szPassword)
    End If
End Sub

Private Sub Form_Load()
    'example created by Daniel Kaufmann (daniel@i.com.uy)
    'load the connections
    Text2.PasswordChar = "*"
    Command1.Caption = "Dial"
    Dim s As Long, l As Long, ln As Long, a$
    ReDim r(255) As RASENTRYNAME95
   
    r(0).dwSize = 264
    s = 256 * r(0).dwSize
    l = RasEnumEntries(vbNullString, vbNullString, r(0), s, ln)
    For l = 0 To ln - 1
        a$ = StrConv(r(l).szEntryName(), vbUnicode)
        List1.AddItem Left$(a$, InStr(a$, Chr$(0)) - 1)
    Next
    If List1.ListCount > 0 Then
        List1.ListIndex = 0
        List1_Click
    End If
End Sub
Нужно исправить строку
Код:
t = RasGetEntryDialParams(List1.Text, rdp, 0)
на
Код:
t = RasGetEntryDialParams(vbNullString, rdp, 0)
Кстати, это код на VB6 чтоб подключатся к выбранному соединению
На фоме должны быть: List1 Text1 Tex2 Command1 (догадаетесь что за тема)
Mr_ViK вне форума Ответить с цитированием
Старый 02.09.2011, 15:13   #3
Mr_ViK
Форумчанин
 
Регистрация: 12.08.2011
Сообщений: 124
По умолчанию

Народ вознокла новая проблема. Этот код забивает в
Код:
Text2
пароль (по идее) но у меня почему то вместо пароля получаю точное количество символов в пароле (заумно сказал)))), то есть вместо например 53785947 выдает ********
И не смотрите на строку
Код:
Text2.PasswordChar = "*"
Даже если ее удалить, все равно выдет звездочки, я подставлял переменную и выводил ее через Debug.Print все равно не фурычит
И да.. кстати логин выдает ваще четко, создавал новое подключение со всякой белибердой и в логине и в пароле, логин отображается иделаьно
Я думаю, что VB не может расшифровать то что нам дает функция RasGetEntryDialParams или сама эта функция выдает звездочки.
Плиз помогите разобраться или мож кто знает каким еще способом можно вытянуть пасс к dial up соединению ПС: проги типа dialupaas не предлагать
Да, заметте, что dialupass расшифровывает пароли идеально
Заранее ОГРОМНОЕ спасибо, всех кто поможет пропишу в графе "Специальное спасибо"
Mr_ViK вне форума Ответить с цитированием
Старый 02.09.2011, 15:37   #4
Mr_ViK
Форумчанин
 
Регистрация: 12.08.2011
Сообщений: 124
По умолчанию

ТУТ ВООБЩЕ КТО-НИБУДЬ VISUAL BASIC ЗНАЕТ???????
И прошу модераторов сделать отдельную категорию по VB
Mr_ViK вне форума Ответить с цитированием
Старый 02.09.2011, 15:46   #5
*PB*
Форумчанин
 
Регистрация: 11.08.2009
Сообщений: 558
По умолчанию

Цитата:
Я думаю, что VB не может расшифровать то что нам дает функция RasGetEntryDialParams или сама эта функция выдает звездочки.
Второе, функция возвращает звездочки в место пароля - это сделано для безопасности чтобы не крали пароли.

Цитата:
И прошу модераторов сделать отдельную категорию по VB
Тогда лучше сделать раздел по бейсику, потому что существует много его диалектов.
*PB* вне форума Ответить с цитированием
Старый 02.09.2011, 15:51   #6
Mr_ViK
Форумчанин
 
Регистрация: 12.08.2011
Сообщений: 124
Вопрос

Цитата:
Сообщение от *PB* Посмотреть сообщение
Второе, функция возвращает звездочки в место пароля - это сделано для безопасности чтобы не крали пароли.

Тогда лучше сделать раздел по бейсику, потому что существует много его диалектов.
Как же тоогда вытягивает пароль программа dialupass???
Кстати в ее описании есть примечание: пароль отобразиться только в том случае если он сохранен в стандартной форме подключения. Думаю что надо копать из этого, может где пароли в реестре хранятся?
Или как можно заставить функцию давать нормальные данные?
Mr_ViK вне форума Ответить с цитированием
Старый 02.09.2011, 16:13   #7
*PB*
Форумчанин
 
Регистрация: 11.08.2009
Сообщений: 558
По умолчанию

А для чего нужен пароль?
Чтобы своровать его?
*PB* вне форума Ответить с цитированием
Старый 02.09.2011, 16:25   #8
Mr_ViK
Форумчанин
 
Регистрация: 12.08.2011
Сообщений: 124
По умолчанию

Цитата:
Сообщение от *PB* Посмотреть сообщение
А для чего нужен пароль?
Чтобы своровать его?
Нет, я пишу прогу которая сделает автоподключение к интернету ничего воровать я не собираюсь
Mr_ViK вне форума Ответить с цитированием
Старый 02.09.2011, 16:56   #9
*PB*
Форумчанин
 
Регистрация: 11.08.2009
Сообщений: 558
По умолчанию

Для того чтобы подключиться к интернету не нужно знать пароль, достаточно имени подключения.
Пример приводил тут http://programmersforum.ru/showthread.php?t=164284
Там есть исполняемый файл, запустите и посмотрите подключается или нет.
*PB* вне форума Ответить с цитированием
Старый 02.09.2011, 17:34   #10
Mr_ViK
Форумчанин
 
Регистрация: 12.08.2011
Сообщений: 124
Вопрос

Цитата:
Сообщение от *PB* Посмотреть сообщение
Для того чтобы подключиться к интернету не нужно знать пароль, достаточно имени подключения.
Пример приводил тут http://programmersforum.ru/showthread.php?t=164284
Там есть исполняемый файл, запустите и посмотрите подключается или нет.
Ты меня немного не понял, мне нужен именно логин и пароль, чтобы прописать в реестре такую строчку:
Код:
rasdial название логин пароль
Это в ветке Run, и когда запускаешь комп, входишь в учетку, открывается черное окно с подключением... пробовал "Выполнить"
Код:
rasdial название
не фурычит, нужен пароль.
Я вот что подумал, что если в свой проге использовать dialupass через командную строку? Где-то читал что можно командой вытащить в файл все учетки и логины и пароли, вот тогда может это использовать?
Mr_ViK вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с функцией MeTeOpA C# (си шарп) 6 11.07.2011 00:07
Проблема с функцией pos. men232 Помощь студентам 6 01.07.2011 20:55
проблема с функцией saix Общие вопросы C/C++ 14 28.10.2010 19:07
Паскаль. Проблема с функцией. malinoff Помощь студентам 1 08.01.2010 17:00