Autor Beitrag
battledevil
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 96

WinXP, Win7
C#, C++, VBNET
BeitragVerfasst: Do 11.01.07 16:56 
Hallo Leute,

Ich hab ein kleines Tool geschrieben, mit dem man das Auto-Login unter XP an- und abschalten kann. Nix gewaltiges, aber es spart Zeit, wenn man diese Option aktivieren will.

Nico
Einloggen, um Attachments anzusehen!


Zuletzt bearbeitet von battledevil am Do 11.01.07 18:08, insgesamt 1-mal bearbeitet
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 11.01.07 17:42 
Warum entfernst du zumindest nicht wieder das Passwort, wa sim Klartext dort in der Registry steht, nicht wieder, wenn du das AutoLogin deaktivierst? Auch schon das Schreiben des Passwortes dort in die Registry ist eine potentielle Sicherheitlücke. Guck dir mal TweakXP an. Wenn du dort das AutoLogin aktivierst, erscheint das Passwort dort nicht im Klartext.

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
function SetWinlogonPassword(const Server, Password: WideString): Boolean;
var
  oa                : TLSAObjectAttributes;
  hPolicy           : LSA_HANDLE;
  usServer          : TLSAUnicodeString;
  usKeyName         : TLSAUnicodeString;
  usPassWord        : TLSAUnicodeString;
  Status            : NTSTATUS;
begin
  ZeroMemory(@oa, sizeof(oa));
  oa.Length := sizeof(oa);
  try
    RtlInitUnicodeString(@usServer, PWideChar(Server));
    Status := LsaOpenPolicy(usServer, oa, POLICY_CREATE_SECRET, hPolicy);
    if (NT_SUCCESS(Status)) then
    begin
      RtlInitUnicodeString(@usKeyName, 'DefaultPassword');
      RtlInitUnicodeString(@usPassWord, PWideChar(Password));
      Status := LsaStorePrivateData(hPolicy, usKeyName, usPassword);
    end;
  finally
    LsaClose(hPolicy);
  end;
  Result := NT_SUCCESS(Status);
end;

////////////////////////////////////////////////////////////////////////////////

function SetAutoWinlogon(Server: WideString; Activate: Boolean; Username, Password: WideString): Boolean;
var
  usPassword        : TLSAUnicodeString;
  usServer          : TLSAUnicodeString;
  reg               : TMpuRegistry;
begin
  Result := False;
  reg := TMpuRegistry.CreateW(Server, HKEY_LOCAL_MACHINE);
  if (Assigned(reg)) then
  try
    reg.Connect;
    if reg.OpenKeyW('Software\Microsoft\Windows NT\CurrentVersion\Winlogon', KEY_WRITE) = 0 then
    begin
      // Username
      if Username <> '' then
        reg.WriteStringW('DefaultUserName', Username)
      else
        reg.DeleteValueName('DefaultUserName');

      // Domain
      if Server <> '' then
        // TODO: full unicode support
        reg.WriteStringW('DefaultDomainName', Server)
      else
        reg.DeleteValueName('DefaultDomainName');

      // Init unicode string
      RtlInitUnicodeString(@usPassword, PWideChar(Password));
      RtlInitUnicodeString(@usServer, PWideChar(Server));
      // Set the password in secret stash
      if SetWinlogonPassword(usServer.Buffer, usPassword.Buffer) then
      begin
        Result := True;
      end;
      reg.DeleteValueName('DefaultPassword');

      // Activate autologon
      reg.WriteString('AutoAdminLogon', IntToStr(ord(Activate)));
    end;
  finally
    reg.Free;
  end;
end;

Damit wird das Passwort in dem Secret Stash der Registry abgelegt, wo es nur das System auslesen kann.
battledevil Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 96

WinXP, Win7
C#, C++, VBNET
BeitragVerfasst: Do 11.01.07 17:48 
Danke für den Tip, ich werde das einbauen.
Kannst Du mir zufällig sagen, welche Units ich für TLSAObjectAttributes usw. einbinden muss?
Delphi-Laie
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1600
Erhaltene Danke: 232


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: Mi 17.03.10 23:46 
user profile iconbattledevil hat folgendes geschrieben Zum zitierten Posting springen:
Danke für den Tip, ich werde das einbauen.
Kannst Du mir zufällig sagen, welche Units ich für TLSAObjectAttributes usw. einbinden muss?


Über die windowseigene Suchfunktion (*.pas) im Delphi-Verzeichnis, das über viele Jahre mit Borland tituliert wurde (auch zu Codegear-Zeiten) und das hoffentlich auch die Quelltexte beinhaltet, suchen, und den Namen der Unit als Suchwort zusätzlich vor der Suche eingeben. Damit müßte man zum Ziele gelangen.

Was anderes: Was sollen denn die Sternchen im Paßwortedit für einen (höheren) Sinn haben?