Как получить закэшированные пароли в Win9x?

Previous  Top  Next

    
 

 

 

Code:

program getpass;

........

type

...

ListBox: TListBox;

procedure getpasswords;

.......

end;

 

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.getpasswords;

var error: string;

begin

if WNetEnumCachedPasswords(nil, 0, $FF, @AddPassword, 0) <> 0 then

   begin

     error := 'Can not load passwords: User is not loged on.';

   end

else if Count = 0 then

   error := 'No passwords found...'

end;

 

 

 

©Drkb::01717

Взято из http://forum.sources.ru