|
|||||
<このサンプルの概要> ダイヤルアップのパスワードを表示する方法を探してRasapi32.dllのRasGetEntryDialParamsを使用 する方法は?と思い試してみました。結論は、未確認ですがWin95、98、Me、NT4.0では表示出来る ようです。WinXPではパスワードが16個のアスタリスクになってしまい表示出来ませんでした。 WinXPでもパスワード以外のダイヤルアップ情報は取得出来るようです。 このサンプルでは使用していませんが、Winows2000やWindowsXPのダイヤルアップのパスワード を表示するためには、Advapi32.dllを使用する必要があるようです。 ダイヤルアップ以外のパスワードを表示するサンプルは以下のURLです。 PasswordChar(*)に隠れた実際のパスワードを表示するサンプル(VB.NET) また、関連ツールがありますのでご紹介します。 パスワード表示ツール(SeePasswd)はダイヤルアップのパスワードも表示するツールです。 使用方法は パスワードを表示する方法 ダイヤルアップのパスワードを表示する方法です。 ★フォームモジュール(Form1.frm) Option Explicit ' RASENTRYNAME構造体とRASDIALPARAMS構造体メンバの長さの定義 Private Const RAS_MaxEntryName = 256 Private Const RAS_MaxPhoneNumber = 128 Private Const RAS_MaxCallbackNumber = 128 Private Const UNLEN = 256 Private Const PWLEN = 256 Private Const DNLEN = 12 ' RASENTRYNAME構造体の定義 Private Type RASENTRYNAME dwSize As Long szEntryName(RAS_MaxEntryName + 3) As Byte End Type ' RASDIALPARAMS構造体の定義 Private Type RASDIALPARAMS dwSize As Long szEntryName(RAS_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 ' APIの定義 Private Declare Function RasEnumEntries Lib "rasapi32.dll" Alias _ "RasEnumEntriesA" (ByVal Reserved As Long, 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 Sub Form_Load() Dim lngRtn As Long ' ダイヤルアップの全エントリを取得 Dim EntryCnt As Long Dim Entry(255) As RASENTRYNAME Entry(0).dwSize = 264 lngRtn = RasEnumEntries(0, vbNullString, Entry(0), Entry(0).dwSize * 255, EntryCnt) Dim i As Long For i = 0 To EntryCnt - 1 ' ダイヤルアップの各エントリ毎の処理 ' ダイヤルアップの各エントリ名を取得 Dim entryName As String entryName = StrConv(Entry(i).szEntryName, vbUnicode) entryName = StripNulls(entryName) ' ダイヤルアップの各エントリのパラメタを取得 Dim rasPara As RASDIALPARAMS rasPara.dwSize = 1052 Dim j As Long For j = 0 To RAS_MaxEntryName - 1 rasPara.szEntryName(j) = Entry(i).szEntryName(j) Next j lngRtn = RasGetEntryDialParams(vbNullString, rasPara, 0) ' ダイヤルアップの各エントリのユーザ名を取得 Dim userName As String userName = StrConv(rasPara.szUserName, vbUnicode) userName = StripNulls(userName) ' ダイヤルアップの各エントリのパスワードを取得 Dim passwd As String passwd = StrConv(rasPara.szPassword, vbUnicode) passwd = StripNulls(passwd) Debug.Print (i + 1) & ":" & entryName & ":" & userName & ":" & passwd ' [WinXPでの実行結果] ' 1:test:usertest:**************** ' 2:あああ:aaa:**************** ' 3:ABC:userabc:**************** ' [考察]この方法ではWin95、98、Me、NT4.0までしか ' パスワードが確認出来ないようです。(未確認) Next i End Sub Public Function StripNulls(ByVal strOrg As String) As String On Error Resume Next If (InStr(strOrg, Chr(0)) > 0) Then strOrg = Left(strOrg, InStr(strOrg, Chr(0)) - 1) End If StripNulls = strOrg End Function |