Страница: 1 |
|
Вопрос: Получить список RAS соед-ий с помощью .Net
|
Добавлено: 22.09.05 23:01
|
|
Автор вопроса: student-uni
|
Мне надо определить имеющиеся РАС - соединения и вывести их в комбобокс. /вин 2000 и ХР/
Также было бы неплохо определить их параметры.
На первое есть ф-ця RasEnumEntries
На второе RasGetEntryDialParams
И вот работающий код от Мируса для ВБ 6 RasEnumEntries
Но при переходе на дот нет я немогу правильно определить
размер структуры. /ф-ция возвращает ошибку 632...
ERROR_INVALID_SIZE - An incorrect structure size was detected./
Посмотрите пож-ста оба кода и подскажите что я не так делаю.
Может у Вас есть другое решение
Я полагаю проблема от части в замене ф-ции ЛенБ
Дот нетовская ЛЕН возвращает какую то бурду.
Всем спасибо.
ПРимер ВБ:
Option Explicit
Private Declare Function RasEnumEntries Lib "rasapi32.dll" Alias "RasEnumEntriesA" (ByVal lpStrNull As String, ByVal lpszPhonebook As String, lprasentryname As RasEntryName, lpcb As Long, lpCEntries As Long) As Long
Private Type RasEntryName
dwSize As Long
szEntryName(256) As Byte
End Type
Private Sub Form_Load()
Dim lConns As Long
Dim lSize As Long
Dim i As Integer
Dim Err As Integer
Dim rasentry(64) As RasEntryName
rasentry(0).dwSize = LenB(rasentry(0))
lSize = rasentry(0).dwSize * 64
Call RasEnumEntries(vbNullString, vbNullString, rasentry(0), lSize, lConns)
Err = RasEnumEntries(vbNullString, vbNullString, rasentry(0), lSize, lConns)
'For i = 0 To lConns - 1
'List1.AddItem ClearNulls(StrConv(rasentry(i).szEntryName, vbUnicode))
'Next
End Sub
'Private Function ClearNulls(ByVal strSource As String) As String
'Dim iPos As Integer
'iPos = InStr(strSource, Chr$(0))
'If iPos <> 0 Then
' ClearNulls = Left$(strSource, iPos - 1)
'End If
'End Function
ПРимер Дот Нет
Private Declare Function RasEnumEntries Lib "rasapi32.dll" Alias "RasEnumEntriesA"(ByVal lpStrNull As String, ByVal lpszPhonebook As String, ByRef lprasentryname As RasEntryName, ByRef lpcb As Integer, ByRef lpCEntries As Integer) As Integer
Private Structure RasEntryName
Dim dwSize As Integer
<VBFixedArray(256)> Dim szEntryName() As Byte
Public Sub Initialize()
ReDim szEntryName(256)
End Sub
End Structure
Private Sub Form1_Load(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles MyBase.Load
Dim lConns As Integer
Dim lSize As Integer
Dim i As Short
Dim Err As Integer
Dim rasentry(64) As RasEntryName
rasentry(0).dwSize = Len(rasentry(0))
lSize = rasentry(0).dwSize * 64
Call RasEnumEntries(vbNullString, vbNullString, rasentry(0), lSize, lConns)
Err = RasEnumEntries(vbNullString, vbNullString, rasentry(0), lSize, lConns)
'For i = 0 To lConns - 1
'List1.AddItem ClearNulls(StrConv(rasentry(i).szEntryName, vbUnicode))
'List1.Items.Add(rasentry(0).szEntryName)
'Next
End Sub
End Class
Ответить
|
Номер ответа: 2 Автор ответа: student-uni
Вопросов: 122 Ответов: 257
|
Профиль | | #2
|
Добавлено: 22.09.05 23:34
|
Не ну это же надо, и тут же нашёл ответ. Его сделал один парень по имени Кэн. Надо сказать ничего общего с вышеприведенными моими потугами.
Я буду признателен тем кто поможет ещё доставать РАС-пароли под 2000/и ХР
Imports System.Runtime.InteropServices
Public Class Form1
Inherits System.Windows.Forms.Form
/Тут кусок где Виндовская бурда/
Public Const RAS_MaxEntryName As Int32 = 257
Public Const MAX_PATH As Int32 = 260
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)> Public Structure RASENTRYNAME
Public Size As Int32
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=RAS_MaxEntryName + 1)> Public EntryName As String
Public Flags As Int32
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=MAX_PATH + 1)> Public PhonebookPath As String
End Structure
Public Declare Auto Function RasEnumEntries Lib "rasapi32.dll" ( _
ByVal Reserved As String, _
ByVal Phonebook As String, _
<[In](), Out()> ByVal RasEntryNames() As RASENTRYNAME, _
ByRef CountOfBytes As Int32, _
ByRef CountOfEntries As Int32 _
) As Int32
Public Function GetRasEntries() As RASENTRYNAME()
Return GetRasEntries(Nothing)
End Function
Public Function GetRasEntries(ByVal Phonebook As String) As RASENTRYNAME()
Return GetRasEntries(Phonebook, 1)
End Function
Private Function GetRasEntries(ByVal phonebook As String, ByVal count As Int32) As RASENTRYNAME()
Dim entries() As RASENTRYNAME
Dim size As Int32 = Marshal.SizeOf(GetType(RASENTRYNAME))
Dim rtn As Int32
Dim CountOfBytes As Int32
Dim CountOfEntries As Int32 = count
ReDim entries(CountOfEntries - 1)
entries(0).Size = size
CountOfBytes = size * CountOfEntries
rtn = RasEnumEntries(Nothing, phonebook, entries, CountOfBytes, CountOfEntries)
If CountOfEntries > count Then
Return GetRasEntries(phonebook, CountOfEntries)
Else
Return entries
End If
End Function
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim entries() As RASENTRYNAME = GetRasEntries()
For i As Int32 = 0 To entries.Length - 1
ComboBox1.Items.Add(entries(i).EntryName)
'Console.WriteLine("{0}, {1}", entries(i).EntryName, entries(i).PhonebookPath)
Next
'Console.ReadLine()
End Sub
Ответить
|
Страница: 1 |
Поиск по форуму