AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

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
155 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: CreateFileMapping und Admin-Mode

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

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

AW: CreateFileMapping und Admin-Mode

  Alt 19. Jun 2017, 10: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/
Angehängte Grafiken
Dateityp: jpg Unbenannt.jpg (80,1 KB, 28x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#3

AW: CreateFileMapping und Admin-Mode

  Alt 19. Jun 2017, 15: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 Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.384 Beiträge
 
Delphi 12 Athens
 
#4

AW: CreateFileMapping und Admin-Mode

  Alt 19. Jun 2017, 16: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?
Ein Therapeut entspricht 1024 Gigapeut.

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

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#5

AW: CreateFileMapping und Admin-Mode

  Alt 19. Jun 2017, 16: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 Online, Zydis GitHub)

Geändert von Zacherl (19. Jun 2017 um 16:26 Uhr)
  Mit Zitat antworten Zitat
UliBru

Registriert seit: 10. Mai 2010
155 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: CreateFileMapping und Admin-Mode

  Alt 19. Jun 2017, 16: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 16:12 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:33 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