Autor Beitrag
Rene1802
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 24



BeitragVerfasst: Fr 18.02.05 09:44 
Hallo
Nach langer Abstinens brauche ich wieder eure Hilfe.
Ich möchte gerne die Rechte des Angemeldeten Benutzers auslesen.
Natürlich möchte ich wenn die Rechte nicht langen den Benutzer wechseln, aber nicht Automatisch, sondern der User soll per Eingabe den Benutzername und Password den Benutzer nur für meine Anmendung wechseln können.
Oder besteht die möglichkeit alle Benutzer auszulesen.
Wäre nett wenn ihr mir helfen könntet. Ein Link zur Beispielquelle würde genügen.
Gruß Rene
patrick
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1481

WIN2k, WIN XP
D6 Personal, D2005 PE
BeitragVerfasst: Fr 18.02.05 10:31 
du kannst den aktuellen benutzer ausloggen aber einloggen muss er sich schon selber.
zum ausloggen kannst du diesen code verwenden:
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:
function ExWindows(const AFlag: Word): Boolean;
var
  vi     : TOSVersionInfo;
  hToken : THandle;
  tp     : TTokenPrivileges;
  h      : DWord;
begin
  result:= false;

  vi.dwOSVersionInfoSize:=SizeOf(vi);

  if GetVersionEx(vi) then
  begin
    if vi.dwPlatformId = VER_PLATFORM_WIN32_NT then
    begin
      // Windows NT
      // Achtung bei Delphi 2 muß @hToken stehen ...
      if OpenProcessToken(GetCurrentProcess,TOKEN_ADJUST_PRIVILEGES,hToken) then
      begin
        LookupPrivilegeValue(nil,'SeShutdownPrivilege',tp.Privileges[0].Luid);
        tp.PrivilegeCount := 1;
        tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
        h := 0;
        AdjustTokenPrivileges(hToken,False,tp,0,PTokenPrivileges(nil)^, h);
        CloseHandle(hToken);
        result := ExitWindowsEx(Aflag, 0);
      end;
    end
    else
    begin // Windows 95
      Result := ExitWindowsEx(Aflag, 0);
    end;
  end;
end;


diese funktion verwendet die Suche im MSDN EXITWINDOWSEX funktion der windows-API.
alles was du machen musst ist, als flag EWX_LOGOFF zu verwenden (siehe auch MSDN link).

die funktion funktioniert übrigends bei allen windowsversionen von win95 bis XP.

_________________
Patrick
im zweifelsfall immer das richtige tun!!!
Motzi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: Fr 18.02.05 10:56 
Naja, du kannst per Suche im MSDN IMPERSONATELOGGEDONUSER zwar den Token für den aktuellen Thread ändern, aber dazu benötigst du eben ein Token für den jeweiligen User. Das bekommst du in deinem Fall wohl nur per Suche im MSDN LOGONUSER, aber ob dein Programm genügend Rechte hat diese API erfolgreich aufzurufen ist eine andere Frage (unter Win2k muss dein Programm dazu ein Service sein, da das SE_TCB_PRIVILEGE erforderlich ist)...

Gruß, Motzi

_________________
gringo pussy cats - eef i see you i will pull your tail out by eets roots!