AGB  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

CreateFileMapping und Admin-Mode

Ein Thema von UliBru · begonnen am 19. Jun 2017 · letzter Beitrag vom 19. Jun 2017
Antwort Antwort
UliBru

Registriert seit: 10. Mai 2010
129 Beiträge
 
Delphi XE6 Professional
 
#1

CreateFileMapping und Admin-Mode

  Alt 19. Jun 2017, 07:59
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
Er wollte so richtig in Delphi einsteigen. Nun steckt er ganz tief drin ...
  Mit Zitat antworten Zitat
Der schöne Günther
Online

Registriert seit: 6. Mär 2013
4.204 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: CreateFileMapping und Admin-Mode

  Alt 19. Jun 2017, 10:07
Hast du ein bisschen Code? Spontan hätte ich anhand des Namens getippt, dass das etwas damit zu tun haben könnte:
Zitat:
The name can have a "Global\" or "Local\" prefix to explicitly create the object in the global or session namespace. The remainder of the name can contain any character except the backslash character (\). Creating a file mapping object in the global namespace from a session other than session zero requires the SeCreateGlobalPrivilege privilege. For more information, see Kernel Object Namespaces.
https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx

Zitat:
SE_CREATE_GLOBAL_NAME

Required to create named file mapping objects in the global namespace during Terminal Services sessions. This privilege is enabled by default for administrators, services, and the local system account.
User Right: Create global objects.
https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx
  Mit Zitat antworten Zitat
UliBru

Registriert seit: 10. Mai 2010
129 Beiträge
 
Delphi XE6 Professional
 
#3

AW: CreateFileMapping und Admin-Mode

  Alt 19. Jun 2017, 11:30
Ich verwende bisher u.a. den Aufruf

  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:
Ah the infamous NULL security issue. This applies to all security attributes in Win32. The problem is that a NULL security attribute means you want to use the default security of the process/thread. This means it is specific to a user. If you want anybody to have access to the object in question then you need to instead use a NULL descriptor (which is different). A NULL descriptor is a DACL that is set to NULL. This means anybody has access.
Jetzt müsste ich bloss wissen, wie man das in Delphi korrekt anstellt. NULL und nil scheinen dabei auch nicht dasselbe zu sein.

Grüsse
Uli
Er wollte so richtig in Delphi einsteigen. Nun steckt er ganz tief drin ...
  Mit Zitat antworten Zitat
Der schöne Günther
Online

Registriert seit: 6. Mär 2013
4.204 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: CreateFileMapping und Admin-Mode

  Alt 19. Jun 2017, 11:39
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

https://blogs.technet.microsoft.com/...d-empty-dacls/
Miniaturansicht angehängter Grafiken
unbenannt.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.280 Beiträge
 
Delphi 10.1 Berlin Starter
 
#5

AW: CreateFileMapping und Admin-Mode

  Alt 19. Jun 2017, 16:16
So sollte es funktionieren. Warum ich damals bInheritHandle auf true gesetzt habe, kann ich dir allerdings grade nicht mehr sagen:
Delphi-Quellcode:
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');
Der Code wurde aus einem Service heraus aufgerufen, weshalb es sein kann, dass das "Global" bei dir nicht funktioniert. In diesem Falle einfach weglassen.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine (Zydis)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
33.468 Beiträge
 
Delphi XE3 Professional
 
#6

AW: CreateFileMapping und Admin-Mode

  Alt 19. Jun 2017, 17:06
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 MSDN-Library durchsuchenOpenFileMapping angibt, dann wäre es definitiv nötig.


Zitat:
Der Code wurde aus einem Service heraus aufgerufen, weshalb es sein kann, dass das "Global" bei dir nicht funktioniert. In diesem Falle einfach weglassen.
Es muß global sein, denn local laufen beide Programme in verschiedenen Sessions, wenn nur Eines als Admin läuft, oder seh ich das falsch?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu (19. Jun 2017 um 17:17 Uhr)
  Mit Zitat antworten Zitat
UliBru

Registriert seit: 10. Mai 2010
129 Beiträge
 
Delphi XE6 Professional
 
#7

AW: CreateFileMapping und Admin-Mode

  Alt 19. Jun 2017, 17:10
Danke.
Delphi-Quellcode:
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'));
  ...
klappt soweit. Nun gibt es noch ein weiteres Problem, ich mach dazu aber ein neues Thema auf.

Grüsse
Uli

PS: wenn ich da noch 'Global\\' dazunehme gibt es eine Exception.
Er wollte so richtig in Delphi einsteigen. Nun steckt er ganz tief drin ...

Geändert von UliBru (19. Jun 2017 um 17:12 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.280 Beiträge
 
Delphi 10.1 Berlin Starter
 
#8

AW: CreateFileMapping und Admin-Mode

  Alt 19. Jun 2017, 17:22
Es kommt drauf an, ob man später das Handle erben lassen will, oder ob OpenFileMapping ein neues Handle auf das selbe Mapping erstellt.
Ich glaube das hast du falsch verstanden. Die Handle Inheritance bezieht sich auf Child-Prozesse. Inheritable Handles bleiben dann auch dort gültig. Im Grunde genommen wird hier MSDN-Library durchsuchenDuplicateHandle für jedes entsprechende Handle aufgerufen um es im Child Prozess gültig zu machen.

Zitat:
Der Code wurde aus einem Service heraus aufgerufen, weshalb es sein kann, dass das "Global" bei dir nicht funktioniert. In diesem Falle einfach weglassen.
Es muß global sein, denn local laufen beide Programme in verschiedenen Sessions, wenn nur Eines als Admin läuft, oder seh ich das falsch?
Ne, die Session bezieht sich wirklich auf die physikalische Sitzung bzw. eine Remote Desktop Session und bleibt sogar dann gleich, wenn man mit RunAs ein Programm unter dem Benutzerkontext eines komplett anderen Benutzers startet. "Global" ist eigentlich nur dann erforderlich, wenn man z.b. mit einem Service kommunizieren will, da diese ja seit Vista unter der abgekapselten Session 0 laufen.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine (Zydis)

Geändert von Zacherl (19. Jun 2017 um 17:26 Uhr)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2017 by Daniel R. Wolf