Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Drag & Drop mit aktiven UAC (https://www.delphipraxis.net/157898-drag-drop-mit-aktiven-uac.html)

stOrM 28. Jan 2011 17:19

Drag & Drop mit aktiven UAC
 
Hi,
ich hab da mal eine Frage zu Ole Drag & Drop in Verbindung mit Windows Vista oder Höher...
Bei mir schlägt gerade UIPI (User Interface Privilege Isolation) zu, da ich einem kleinen Tool von mir Drag & Drop spendieren wollte.

Das Ding hier ist, Drag und Drop funktionieren auch prächtig bis ich mein Tool mit erhöhten Rechten ausführe, was ich leider muss, da führt kein Weg dran vorbei.

Nun dachte ich mir gut, wenn UIPI mich schon nervt, erschlag ich das halt halbwegs über ChangeWindowMessageFilterEx (Denkste!) denn als ich das ganze in mein Tool eingebunden hatte viel mir ein das Ole Drag & Drop ja keine Messages eher Callbacks verwendet. Nun steh ich da :shock:

Hat jemand eine Idee wie ich trotzdem das Drag & Drop realisieren kann ohne!!! UAC abzuschalten?
Kann auch Dirty sein Hauptsache beides geht halt also Tool elevated inkl. Drag & Drop

Viele Grüße
s!

himitsu 28. Jan 2011 19:26

AW: Drag & Drop mit aktiven UAC
 
Ist das nicht auch ohne UAC verboten?

Fakt ist nunmal, daß Messages von Anwendungen mit niedrigeren Rechten nicht an welche mit höheren Rechten verschickt werden dürfen und daran läßt sich nichts ändern.

stOrM 28. Jan 2011 19:33

AW: Drag & Drop mit aktiven UAC
 
Naja wenn die Anwendung nicht mit erhöhten Rechten gestartet wird funzt das Drag & Drop wie gewohnt, mit halt nicht...

himitsu 28. Jan 2011 19:49

AW: Drag & Drop mit aktiven UAC
 
Mir wäre es ja auch lieb gewesen, wenn man gewisse Messages freischalten könnte und nicht gleich alles gesperrt wäre.
Aber MS hat das leider nicht so eingerichtet. :cry:

Und da das eine Sicherheitsmaßnahme ist, wäre es "blöd", wenn man dieses leicht umgehen könnte.

stOrM 28. Jan 2011 19:51

AW: Drag & Drop mit aktiven UAC
 
Naja der trouble fängt ja schon da an das es bei dem Drag & Drop nicht wirklich Messages gibt ...
MS hat ja die Möglichkeit geschaffen Messages wieder freizuschalten nur hats da leider keinen Sinn wenn die gar nicht erst generiert werden :shock:

himitsu 28. Jan 2011 20:12

AW: Drag & Drop mit aktiven UAC
 
Ich dachte Drag&Drop arbeitet über Messages, zusammen mit dem Clipboard. :gruebel:

Die Steuerung über Messages und die Dateiliste liegt in der Zwischenablage.

stOrM 28. Jan 2011 20:21

AW: Drag & Drop mit aktiven UAC
 
Ole Drag & Drop? Glaub des nutzt Callbacks:?:
Beim Einsatz von Spy++ kommt jedenfalls nix an!

Luckie 28. Jan 2011 20:44

AW: Drag & Drop mit aktiven UAC
 
Das wäre ja eine eklatante Sicherheitslücke. Nehmen wir an, wir hätten ein Programm, welches beliebige Programme ausführt und diese per Drag And Drop entgegennimmt. Läuft dieses Programm jetzt mit erhöhten Rechten, könnte ich einfach ein böses Programm per Drag And Drop übergeben und das würde dann auch mit den erhöhten Rechten ausgeführt.

stOrM 28. Jan 2011 20:51

AW: Drag & Drop mit aktiven UAC
 
Zitat:

Zitat von Luckie (Beitrag 1078053)
Das wäre ja eine eklatante Sicherheitslücke. Nehmen wir an, wir hätten ein Programm, welches beliebige Programme ausführt und diese per Drag And Drop entgegennimmt. Läuft dieses Programm jetzt mit erhöhten Rechten, könnte ich einfach ein böses Programm per Drag And Drop übergeben und das würde dann auch mit den erhöhten Rechten ausgeführt.

Naja, ob man das nun an der Drag & Drop Funktionalität festmachen sollte?
Ich kann ja auch mein Tool mit erhöhten Rechten starten und dann ne andere Anwendung ausführen, kopieren oder was sonst noch... Nur eben nicht mit Drag & Drop das funzt halt nicht

himitsu 28. Jan 2011 23:16

AW: Drag & Drop mit aktiven UAC
 
Du kannst eben nicht einfach dein Programm mit höheren Rechten ausführen.

Mit UAC wird der Benutzer gefragt ob er darf.
Ohne UAC wird es einfach verboten. (wenn man nicht grade in einem Admin-Account arbeitet)

Also ist auch dieser Web praktisch verboten.
Wenn dein Programm genügend Rechte hat, dann darf es quasi alles ... ohne ist eben auch mal das D&D verboten.

Bummi 28. Jan 2011 23:22

AW: Drag & Drop mit aktiven UAC
 
@himitsu
ich hatte ihn so verstanden, dass sein Programm nur Probleme hat wenn es mit Administratorrechten ausgeführt wird....

lbccaleb 29. Jan 2011 00:42

AW: Drag & Drop mit aktiven UAC
 
Zitat:

Zitat von himitsu (Beitrag 1078031)
Ist das nicht auch ohne UAC verboten?

Fakt ist nunmal, daß Messages von Anwendungen mit niedrigeren Rechten nicht an welche mit höheren Rechten verschickt werden dürfen und daran läßt sich nichts ändern.

1 Antwort später:

Zitat:

Zitat von stOrM (Beitrag 1078034)
Naja wenn die Anwendung nicht mit erhöhten Rechten gestartet wird funzt das Drag & Drop wie gewohnt, mit halt nicht...

Da hat wohl Jemand nicht alle Beiträge verarbeitet :)

stOrM 29. Jan 2011 09:23

AW: Drag & Drop mit aktiven UAC
 
Zitat:

Zitat von Bummi (Beitrag 1078067)
@himitsu
ich hatte ihn so verstanden, dass sein Programm nur Probleme hat wenn es mit Administratorrechten ausgeführt wird....

So siehts aus, entweder Drag & Drop oder, mit erhöhten Rechten beides nada :shock:

Fakt ist nunmal, daß Messages von Anwendungen mit niedrigeren Rechten nicht an welche mit höheren Rechten verschickt werden dürfen und daran läßt sich nichts ändern.

Hatte ich im ersten Post ja bereits erwähnt das UIPI da zuschlägt, wie auch das MS ja eine Funktion spendiert hat für diesen Fall um trotzdem an gewisse Messages zu kommen, nur klappt das halt nich wenn es sich um Sachen handelt die keine Messages generieren und genau da liegt ja das Problem!

Delphi-Quellcode:
  ChangeWindowMessageFilterEx(Handle, WM_DROPFILES, MSGFLT_ADD, nil);
  ChangeWindowMessageFilterEx(Handle, WM_COPYDATA, MSGFLT_ADD, nil);
  ChangeWindowMessageFilterEx(Handle, WM_COPYGLOBALDATA, MSGFLT_ADD, nil);
Wären lt. diversen MSN Blogs die Nachrichten die man Freischalten müsste.
Was aber keinen Einfluß hat auf:

Delphi-Quellcode:
    fDropHelper : IDropTargetHelper; //A helper that implements details for drag and drop
    function DragEnter(const dataObj: IDataObject; grfKeyState: DWORD;
      pt: TPoint; var dwEffect: DWORD): HResult; stdcall;
    function DragOver(grfKeyState: DWORD; pt: TPoint;
      var dwEffect: DWORD): HResult; reintroduce; stdcall;
    function DragLeave: HResult; stdcall;
    function Drop(const dataObj: IDataObject; grfKeyState: DWORD; pt: TPoint;
      var dwEffect: DWORD): HResult; stdcall;
Denn oben erwähnte Messages werden hierbei nicht generiert.

rollstuhlfahrer 29. Jan 2011 11:39

AW: Drag & Drop mit aktiven UAC
 
Mal ne andere Frage: Was ist, wenn du eine weitere Anwendung erstellst, die mit niedrigeren Rechten auskommt und das OLE-Drag+Drop für dich übernimmt und dann die Ergebnisse per Message/Pipe/sonstwas an das Programm mit höheren Rechten schickt? - Du musst dann quasi nur das Parent deines "kleineren" Programms umstellen und als User sollte man davon nichts mitbekommen.

Bernhard

Dezipaitor 29. Jan 2011 15:31

AW: Drag & Drop mit aktiven UAC
 
Also ich habe mir das mal angesehen.
Die Möglichkeit WM_DROPFILES freizuschalten ist gut möglich und funktioniert auch. Nur darf man kein COM verwenden, wie z.B. IDropTarget.
TJvFilenameEdit und TJvDragDrop funktionierten nach dem ersten Prinzip. TJvDropTarget verwendet COM, daher funktioniert es damit nicht.

Ich habe schon die COM Einstellungen für den Prozess heruntergefahren ohne Erfolg (COM Implementation von IAccessControl). Andersherum kann man den Zugriff für Drag&Drop einschränken, d.h. COM Sicherheit nach oben schrauben.
Da IAccessControl.IsAccessAllowed im ersten Fall nie aufgerufen wird, vermute ich, dass COM schon vorher die Prüfung selbst durchführt und die Nachrichten daher erst garnicht gesendet werden.

Internet Explorer macht es so wie rollstuhlfahrer es beschrieben hat. Es gibt einen Hauptprozess und für jedes Tab einen eigenen Prozess. Wenn man nun eine Datei in den IExplorer fallen lässt, dann wird dies in einem Medium Integrity Level (MIL) Tab geöffnet. Webseiten werden jeweils in einem Low Integrity Level Tab dargestellt.
D.h. der Hauptprozess vom IE übernimmt das Drag&Drop, was ja auch funktioniert, da es im MIL ausgeführt wird. Und die Fenster selbst sind wohl Prozessübergreifend verbunden. Das sieht man im ProcessExplorer, wenn man mal die verschiedenen Bereiche mit dem FindWindow Feature anklickt. Dann sieht man, dass es jedesmal ein anderer Prozess ist.

Mit Spy sollte man keine Nachrichten sehen können, weil bei IDropTarget alles nur noch über COM Callbacks geht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:12 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz