AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Delphi-PRAXiS - Lounge Betriebssysteme Autologon W7 / LSA-Wert in Registry schreiben
Thema durchsuchen
Ansicht
Themen-Optionen

Autologon W7 / LSA-Wert in Registry schreiben

Ein Thema von berens · begonnen am 20. Jun 2011 · letzter Beitrag vom 23. Jun 2011
 
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

AW: Autologon W7 / LSA-Wert in Registry schreiben

  Alt 22. Jun 2011, 12:31
Die Unit habe ich auch benutzt oder die von Oliver. Aber schlag mich tot, ich finde im Code vom Usermanager nicht mehr die Stelle, an der ich den Autologin setze.

Puh, ich dachte schon, ich hätte unsauberen Code geschrieben, will sagen, habe sie gefunden:
Delphi-Quellcode:
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;
Michael
Ein Teil meines Codes würde euch verunsichern.

Geändert von Luckie (22. Jun 2011 um 12:36 Uhr)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:54 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz