unit Unit1;
interface
uses Windows, SysUtils, Classes, Forms, ShellAPI, Controls, StdCtrls;
type TForm1 = class(TForm) GroupBox1: TGroupBox; ListBox: TListBox; Label1: TLabel; Label2: TLabel; procedure Label1Click(Sender: TObject); procedure FormShow(Sender: TObject); private { Private declarations } public hMPR: THandle; end;
var Form1: TForm1;
const Count: Integer = 0;
function WNetEnumCachedPasswords(lp: lpStr; w: Word; b: Byte; PC: PChar; dw: DWord): Word; stdcall;
implementation
{$R *.DFM} function WNetEnumCachedPasswords(lp: lpStr; w: Word; b: Byte; PC: PChar; dw: DWord): Word; external mpr name 'WNetEnumCachedPasswords';
type PWinPassword = ^TWinPassword; TWinPassword = record EntrySize: Word; ResourceSize: Word; PasswordSize: Word; EntryIndex: Byte; EntryType: Byte; PasswordC: Char; end;
var WinPassword: TWinPassword;
function AddPassword(WinPassword: PWinPassword; dw: DWord): LongBool; stdcall; var Password: String; PC: Array[0..$FF] of Char; begin inc(Count);
Move(WinPassword.PasswordC, PC, WinPassword.ResourceSize); PC[WinPassword.ResourceSize] := #0; CharToOem(PC, PC); Password := StrPas(PC);
Move(WinPassword.PasswordC, PC, WinPassword.PasswordSize + WinPassword.ResourceSize); Move(PC[WinPassword.ResourceSize], PC, WinPassword.PasswordSize); PC[WinPassword.PasswordSize] := #0; CharToOem(PC, PC); Password := Password + ': ' + StrPas(PC);
Form1.ListBox.Items.Add(Password); Result := True; end;
procedure TForm1.Label1Click(Sender: TObject); begin ShellExecute(GetDesktopWindow, 'open', 'http://www.utilmind.com', nil, nil, 0); end;
procedure TForm1.FormShow(Sender: TObject); begin if WNetEnumCachedPasswords(nil, 0, $FF, @AddPassword, 0) <> 0 then begin Application.MessageBox('Can''t load passwords: User is not logon.', 'Error', mb_Ok or mb_IconWarning); Application.Terminate; end else if Count = 0 then ListBox.Items.Add('No passwords found...'); end;
end. |