![]() |
SwitchDesktop verhindern
Hallo Leute!
Ich erstelle mittels CreateDesktop einen neuen Desktop, schalte dann mittels SwitchDesktop um. Soweit so gut. Leider hab ich folgendes Problem: Ich hab auf meiner Tastatur Sondertasten. Eine zB: startet den IExplorer. Betätige ich nun diese schaltet er von meinem Desktop in den "Deafult" - Desktop um. Ich hab mir schon überlegt die Zugriffsrechte für den "default" - Desktop so zu ändern, dass SwitchDesktop nicht ausgeführt werden kann. Leider scheitere ich am ziemlich komplizierten Benutzung der SetSecurityInfo bzw. ACL. Hab mir auch das mit den "Secured Desktops" (zB: WinLogon, ScreenSaver) angeschaut. Allerdings wüsste ich nicht, wie ich selbst einen gesicherten Desktop erstellen sollte. Soweit ich das verstehe, kümmert sich um die Erstellung der "sicheren Desktops" die WinLogon. Keyboard-Hook funktioniert leider nicht bei den Sondertasten. Es ist wichtig, dass der Benutzer nur durch eine Passwort-Eingabe den von mir erstellten Desktop verlassen kann! Mfg Scorpion3000 |
Re: SwitchDesktop verhindern
Schau dir liber an wie du das Verhalten von Winlogon modifizieren kannst. Stichwort GINA.
|
Re: SwitchDesktop verhindern
Hallo Scorpion3000,
mit Desktop-Rechten habe ich auch mal gespielt :-) ist ziemlich frustrierend gewesen, habe es aber schließlich geschafft. Vielleicht helfen Dir ja die folgenden Schnipsel weiter:
Delphi-Quellcode:
Viele Grüße
[...]
TACE_HEADER = record AceType : Byte; AceFlags: Byte; AceSize : Word; end; PACE_HEADER = ^TACE_HEADER; TACCESS_MASK = DWORD; PACCESS_MASK = ^TACCESS_MASK; TACCESS_ALLOWED_ACE = record Header : TACE_HEADER; Mask : TACCESS_MASK; SidStart: DWORD; end; PACCESS_ALLOWED_ACE = ^TACCESS_ALLOWED_ACE; [...] function GetUserSID(szUsername: String): PSID; var UserSID : PSID; cbUserSID: Cardinal; sDomain : String; cbsDomain: Cardinal; pNameUse : SID_NAME_USE; begin Result := nil; cbUserSID := 0; UserSID := nil; sDomain := ''; cbsDomain := 0; LookupAccountName(PChar('\\.'), PChar(szUsername), UserSID, cbUserSID, @sDomain[1], cbsDomain, pNameUse); GetMem(UserSID, cbUserSID); ZeroMemory(UserSID, cbUserSID); SetLength(sDomain, cbsDomain); ZeroMemory(@sDomain[1], Length(sDomain)); if (LookupAccountName(PChar('\\.'), PChar(szUsername), UserSID, cbUserSID, @sDomain[1], cbsDomain, pNameUse)) then Result := UserSID; end; function SecureUpDesktop(hDesktop: HDESK; dwAccessMask: DWORD): Boolean; var si : SECURITY_INFORMATION; UserSID : PSID; pNewAcl : PACL; cbACL : Cardinal; psdNew : PSECURITY_DESCRIPTOR; begin Result := FALSE; if (hDesktop <> 0) then begin UserSID := GetUserSID('MyTestAccount'); if (UserSID <> nil) and (IsValidSid(@UserSID^)) then try // Neuen SecurityDescriptor erstellen und initialisieren... psdNew := PSECURITY_DESCRIPTOR(LocalAlloc(LPTR, SECURITY_DESCRIPTOR_MIN_LENGTH)); if not InitializeSecurityDescriptor(psdNew, SECURITY_DESCRIPTOR_REVISION) then Exit; // ACL erstellen und Initialisieren cbACL := SizeOf(ACL) + SizeOf(TACCESS_ALLOWED_ACE) + GetLengthSid(UserSID) - SizeOf(DWORD); pnewAcl := PACL(LocalAlloc(LPTR, cbACL)) ; if not InitializeAcl(pnewAcl^, cbACL, 2) then Exit; // Füge Rechte zu Acl hinzu if not(AddAccessAllowedAce(pnewAcl^, pnewAcl.AclRevision, dwAccessMask, UserSID)) then Exit; // Acl in den Security-Descriptor schreiben if not(SetSecurityDescriptorDacl(psdNew, True, pNewAcl, False)) then Exit; // Setze die neuen Rechte... si := DACL_SECURITY_INFORMATION; if not(SetUserObjectSecurity(hDesktop, si, psdNew)) then Exit; finally FreeMem(UserSID); end; end; end; [...] SecureUpDesktop(hNewDesktop, DESKTOP_READOBJECTS or DESKTOP_CREATEWINDOW or DESKTOP_CREATEMENU or DESKTOP_WRITEOBJECTS or DESKTOP_ENUMERATE); [...] peanut. |
Re: SwitchDesktop verhindern
Hallo,
wo wir gerade bei Desktops sind, weiß jemand, wieso man einen Desktop mittels EnumerateDesktop auflisten kann, obwohl man dieses Recht (DESKTOP_ENUMERATE) entzogen hat? Gleiches gilt auch, wenn man einen Desktop mittels CreateDesktop erzeugt, DESKTOP_ENUMERATE aber gar nicht als Konstante übergeben hat. Der dürfte dann doch gar nicht in der Liste auftauchen? Gruß peanut. |
Re: SwitchDesktop verhindern
Ich denke es wird nix anderes übrig bleiben als sich das Recht zu holen. Denn welchen Sinn würden die Rechte machen wenn Sie keien Auswirkung hätten.
|
Re: SwitchDesktop verhindern
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
Zitat:
Gruß peanut. |
Re: SwitchDesktop verhindern
Ich habe es nun geschafft: Man muss in WinSta0 einfach WINSTA_ENUMDESKTOPS entziehen, das war es dann schon :)
Gruß peanut. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:32 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