![]() |
CreateFileMapping und Admin-Mode
Ich habe eine Anwendung bei der zwei Programme per IPC kommunizieren und zwar erfolgreich.
Das läuft unter Verwendung von CreateFileMapping. Soweit ok. Nun hat ein Anwender aus irgendeinem Grund das eine Programm im Admin-Mode laufen lassen. Dann klappt die Kommunikation nicht mehr. Wenn wiederum beide Programme im Admin-Mode laufen, dann klappt es wieder. Was muss man machen, damit es immer läuft? Es sieht ja so aus, als ob bei unterschiedlichen User-Modi unterschiedliche Speicherbereiche beim CreateFileMapping zugewiesen werden. Grüsse Uli |
AW: CreateFileMapping und Admin-Mode
Hast du ein bisschen Code? Spontan hätte ich anhand des Namens getippt, dass das etwas damit zu tun haben könnte:
Zitat:
![]() Zitat:
![]() |
AW: CreateFileMapping und Admin-Mode
Ich verwende bisher u.a. den Aufruf
Delphi-Quellcode:
hmmfApplicationName := CreateFileMapping(INVALID_HANDLE_VALUE, nil, PAGE_READWRITE, 0, SizeOf(TmmfApplicationName), PChar('AppNameXYZ'));
Vermutlich liegt das Problem daran, dass der zweite Parameter nil ist. Dass also anstelle von nil ein passender Pointer auf SecurityAttributes übergeben werden muss, so dass jedes andere Programm auf das memory mapped file bekommt, auch wenn eben das CreateFileMapping im Admin-Mode ausgeführt wird. Soweit ich mittlerweile herausgefunden habe scheint wohl die Lösung darin zu liegen Zitat:
Grüsse Uli |
AW: CreateFileMapping und Admin-Mode
Liste der Anhänge anzeigen (Anzahl: 1)
Ich kenne mich mit diesem DACL-Kram nicht aus, aber der Unterschied ist einen leeren Zeiger anzugeben (nil in Delphi, NULL / nullptr in C++) und ein Objekt ohne wirklichen Inhalt anzugeben
![]() |
AW: CreateFileMapping und Admin-Mode
So sollte es funktionieren. Warum ich damals
Delphi-Quellcode:
auf true gesetzt habe, kann ich dir allerdings grade nicht mehr sagen:
bInheritHandle
Delphi-Quellcode:
Der Code wurde aus einem Service heraus aufgerufen, weshalb es sein kann, dass das "Global" bei dir nicht funktioniert. In diesem Falle einfach weglassen.
var
FSA: SECURITY_ATTRIBUTES; FSD: SECURITY_DESCRIPTOR; begin InitializeSecurityDescriptor(@FSD, SECURITY_DESCRIPTOR_REVISION); SetSecurityDescriptorDacl(@FSD, true, nil, false); FSA.lpSecurityDescriptor := @FSD; FSA.nLength := SizeOf(SECURITY_ATTRIBUTES); FSA.bInheritHandle := true; Event := CreateEvent(@FSA, true, false, 'Global\MyEvent'); |
AW: CreateFileMapping und Admin-Mode
Es kommt drauf an, ob man später das Handle erben lassen will, oder ob OpenFileMapping ein neues Handle auf das selbe Mapping erstellt.
Aber vorallem wenn man bInheritHandle=True beim ![]() Zitat:
|
AW: CreateFileMapping und Admin-Mode
Danke.
Delphi-Quellcode:
klappt soweit. Nun gibt es noch ein weiteres Problem, ich mach dazu aber ein neues Thema auf.
var
aSA: TSecurityAttributes; aSD: TSecurityDescriptor; begin InitializeSecurityDescriptor(@aSD, SECURITY_DESCRIPTOR_REVISION); SetSecurityDescriptorDacl(@aSD, True, nil, False); aSA.nLength := SizeOf(TSecurityAttributes); aSA.bInheritHandle := true; aSa.lpSecurityDescriptor := @aSD; ... hmmfApplicationName := CreateFileMapping(INVALID_HANDLE_VALUE, @aSA, PAGE_READWRITE, 0, SizeOf(TmmfApplicationName), PChar('AppNameXYZ')); ... Grüsse Uli PS: wenn ich da noch 'Global\\' dazunehme gibt es eine Exception. |
AW: CreateFileMapping und Admin-Mode
Zitat:
![]() Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:44 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