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/)
-   -   IPC per WM funktioniert nicht wenn (nur) EMpfänger mit Admin Rechten läuft (https://www.delphipraxis.net/175074-ipc-per-wm-funktioniert-nicht-wenn-nur-empfaenger-mit-admin-rechten-laeuft.html)

Viktorii 29. Mai 2013 08:30

IPC per WM funktioniert nicht wenn (nur) EMpfänger mit Admin Rechten läuft
 
Moin.

Zwei Applikationen kommunizieren via WM miteinander. Folgendermaßen implementiert:

Sender:
Delphi-Quellcode:
procedure TSendForm.FormCreate(Sender: TObject);
begin
  WM_CMD_MY_WM := RegisterWindowMessage ('MyWm');
end;

...
...
PostMessage(HWND_BROADCAST, WM_CMD_MY_WM, 90, 0);
...
...
Empfänger:
Delphi-Quellcode:
procedure TRecForm.FormCreate(Sender: TObject);
begin
  WM_CMD_MY_WM := RegisterWindowMessage ('MyWm');
end;

procedure TRecForm.WndProc(var msg : TMessage);
begin
  if msg.Msg = WM_CMD_MY_WM then
  begin
    ShowMessage('Bingo ' + IntToStr(msg.WParam) + ' ' + IntToStr(msg.LParam));
  end
  else
  begin
    inherited WndProc(msg);
  end;
end;
Funktioniert soweit wunderbar. Nun soll aber die Empfänger Applikation mit Admin Rechten laufen.

Wenn ich diese nun durch Manifest oder mit 'Als Administrator ausführen' mit Admin Rechten starte, funktioniert es nicht mehr.

Wieso ist das so und was kann ich machen damit das trotzdem funktioniert?

Vielen Dank.

baumina 29. Mai 2013 08:39

AW: IPC per WM funktioniert nicht wenn (nur) EMpfänger mit Admin Rechten läuft
 
Bin beim googeln darauf gestoßen, vielleicht hilft dir das:

Zitat:

In Windows Vista und höher, User Interface Privilege Isolation (UIPI) verhindert, dass ein niedriger Integrität Prozess vom Senden Fenster Nachrichten an eine höhere Integrität Prozess. In früheren Windows-Versionen konnte Schadcode administrativen Prozesse durch den Missbrauch von Fenster-Nachrichten anzugreifen. Standardmäßig blockiert UIPI alle Nachrichten mit einem Wert oberhalb WM_USER , die Nachrichten via registriert umfasst RegisterWindowMessage() . Also, um damit von A bis B wie Nachrichten senden, muss B zuerst nennen ChangeWindowMessageFilter() oder ChangeWindowMessageFilterEx() für jede Nachricht blockiert, dass sie in den Genuss niedrigerer Integrität Prozesse erhalten will.

Der schöne Günther 29. Mai 2013 09:01

AW: IPC per WM funktioniert nicht wenn (nur) EMpfänger mit Admin Rechten läuft
 
Also ich dachte doch, Prozesse verschiedener Benutzer-Sessions können (wohl zumindest ab Vista) nicht per Messages untereinander kommunizieren? Die andere müsste dementsprechend auch vom Administrator-Benutzer gestartet werden...

Viktorii 29. Mai 2013 09:54

AW: IPC per WM funktioniert nicht wenn (nur) EMpfänger mit Admin Rechten läuft
 
Mit ChangeWindowMessageFilterEx() scheint es zu funktionieren. Vielen Dank.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:19 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