AGB  ·  Datenschutz  ·  Impressum  







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

Security-Descriptor verwenden

Ein Thema von CalganX · begonnen am 26. Sep 2004 · letzter Beitrag vom 26. Sep 2004
Antwort Antwort
Seite 1 von 2  1 2      
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#1

Security-Descriptor verwenden

  Alt 26. Sep 2004, 12:48
Hi,
ich bin immer noch bei meinen Freigaben und versuche gerade einen hinzuzufügen. Mit Hilfe von NetShareAdd stellt das theoretisch auch kein Problem da. Nur verlangt die Datenstruktur einen Security-Descriptor vom Typ _SECURITY_DESCRIPTOR.
Sollte eigentlich dank MSDN auch kein Problem darstellen, doch leider ist nirgendwo erklärt, wie ich die Struktur zu verwenden habe.
Ich weiß zwar, dass sie wie folgt aufgebaut ist, doch nicht, was in die einzelnen Werte rein soll. Zwar könnte ich das erraten, aber das halte ich für keine sinnvolle Methode.
Delphi-Quellcode:
  _SECURITY_DESCRIPTOR = record
    Revision: Byte;
    Sbz1: Byte;
    Control: SECURITY_DESCRIPTOR_CONTROL;
    Owner: PSID;
    Group: PSID;
    Sacl: PACL;
    Dacl: PACL;
  end;
Im MSDN steht lediglich:
ms-help://MS.PSDK.1033/security/security/security_descriptor.htm schreibt:
The SECURITY_DESCRIPTOR structure contains the security information associated with an object. Applications use this structure to set and query an object's security status.

Because the internal format of a security descriptor can vary, applications are not to modify the SECURITY_DESCRIPTOR structure directly. For creating and manipulating a security descriptor, use the functions listed in the See Also section.

Code:
typedef struct SECURITY_DESCRIPTOR {
  ...
} SECURITY_DESCRIPTOR, *PISECURITY_DESCRIPTOR, PSECURITY_DESCRIPTOR;
Remarks
A security descriptor includes information that specifies the following components of an object's security:
  • An owner (SID)
  • A primary group (SID)
  • A discretionary ACL
  • A system ACL
  • Qualifiers for the preceding items

Several functions that use the SECURITY_DESCRIPTOR structure require that this structure be on a valid pointer boundary in memory. These boundaries vary depending on the type of processor used. Memory allocation functions, such as malloc and LocalAlloc, return properly aligned pointers.

Wirklich helfen tut mir das zumindest nicht.

Und die Funktionen, die dort noch aufgelistet werden, sind mir auch relativ undurchsichtig.

Chris
  Mit Zitat antworten Zitat
w3seek
(Gast)

n/a Beiträge
 
#2

Re: Security-Descriptor verwenden

  Alt 26. Sep 2004, 14:44
Du solltest die daten in dieser struktur gar nicht selbst verwenden, da sich das Format moeglicherweise aendern koennte. Du kommst an alle Informationen ueber APIs. Einfach nur den Zeiger auf den Record verwenden.
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Security-Descriptor verwenden

  Alt 26. Sep 2004, 15:29
Hi,
du meinst also ich soll nur einen Zeiger auf den SD geben? Nette Idee, allerdings bekomme ich dann weiterhin den Fehler ERROR_INVALID_PARAMETER und dem Fehler in dem Parameter shi*_security_descriptor. Folglich muss ich noch irgendwas mit dem SD anstellen und das halt meine Frage, was ich da tun muss.

Chris
  Mit Zitat antworten Zitat
w3seek
(Gast)

n/a Beiträge
 
#4

Re: Security-Descriptor verwenden

  Alt 26. Sep 2004, 15:36
Du brauchst natuerlich einen gueltigen zeiger auf einen descriptor. Du kannst einen privaten mit hilfe von CreatePrivateObjectSecurity(Ex)() erstellen, die funktion reserviert automatisch den benoetigten Speicher, deshalb musst du den descriptor wenn du ihn nicht mehr benoetigst mit DestroyPrivateObjectSecurity() wieder freigeben. Falls du descriptoren von anderen objekten wie dateien benoetigst, bekommst du diese mit z.b. GetFileSecurity()
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Security-Descriptor verwenden

  Alt 26. Sep 2004, 16:09
Hi,
Okay. Damit ist mir das klar.
Die API bringt mich aber trotzdem noch um. Das ist mir alles noch etwas undurchsichtig. Generell sieht jetzt der Aufruf nun so aus:
Delphi-Quellcode:
  if (CreatePrivateObjectSecurity(nil, nil, sdSecurity, false,
                                    Application.Handle,
                                    gmGenMap) = false) then begin
    MessageDlg('ShareManager should be create an object for system-security.'
                +' But this has failed.', mtError, [mbOK], 0);
    Exit;
  end;
Soweit so gut. Nun ist jedoch immer noch ein Fehler drin, da ich die MessageBox zu sehen bekomme. Ich vermute mal das dass an der Generic-Map liegt. Diese ist zwar einfach als
gmGenMap: _GENERIC_MAPPING deklariert, hat allerdings keinen Wert. Was muss ich denn damit anstelle. Zwar steht im MSDN ein paar interessante Dinge, aber was genau wollen die einzelnen Member haben?

Chris
  Mit Zitat antworten Zitat
w3seek
(Gast)

n/a Beiträge
 
#6

Re: Security-Descriptor verwenden

  Alt 26. Sep 2004, 18:06
der 5. parameter ist auch falsch, du brauchst einen handle zu einem token, den bekommst du z.b. mit OpenProcessToken() oder OpenThreadToken(). Application.Handle ist lediglich ein HWND handle (win32) - mit dem kannst du da gar nichts anfangen.
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Security-Descriptor verwenden

  Alt 26. Sep 2004, 18:59
Hi,
diese API-Aufrufe treiben mich noch zur Weißglut. Ich habe jetzt einfach mal das ganze versucht, wie du es erklärt hast und wie es eigentlich funktionieren müsste. Jetzt sieht das ganze Gerüst ungefähr so aus:
Delphi-Quellcode:
  // create security-descriptor
  OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, dwProcToken);
  if (CreatePrivateObjectSecurity(nil, nil, sdSecurity, false,
                                    dwProcToken,
                                    gmGenMap) = false) then begin
    MessageDlg('ShareManager should be create an object for system-security.'
                +' But this has failed.', mtError, [mbOK], 0);
    Exit;
  end;

  // fill structure with data
  pBuffer.shi502_netname := StrToWC(edtName.Text);
  pBuffer.shi502_type := STYPE_DISKTREE;
  pBuffer.shi502_remark := StrToWC(edtRemark.Text);
  pBuffer.shi502_permissions := dwPerm;
  pBuffer.shi502_max_uses := DWORD(-1);
  pBuffer.shi502_current_uses := 0;
  pBuffer.shi502_path := StrToWC(edtPath.Text);
  pBuffer.shi502_reserved := 0;
  pBuffer.shi502_security_descriptor := @sdSecurity;

  // now add resource
  case NetShareAdd(nil, 502, @pBuffer, @dwResult) of
    {...}
Jetzt wird zwar der Security-Descriptor erstellt, allerdings bekomme ich immer noch ERROR_INVALID_PARAM für shi*_security_descriptor zurück. Irgendwo steckt also immer noch ein Fehler. Kann sich das noch irgendeiner erklären? Ich kann es zumindest nicht.

Chris
  Mit Zitat antworten Zitat
w3seek
(Gast)

n/a Beiträge
 
#8

Re: Security-Descriptor verwenden

  Alt 26. Sep 2004, 19:21
wie waers einfach 0 als token handle zu uebergeben? Ich nenne die API funktionen eigentlich nur als Beispiel, die genaue Dokumentation der Funktion inkl. allen Parametern steht doch schoen im PSDK dokumentiert
Ansonsten weiss ich da jetzt auch nicht auf Anhieb weiter, hab mit der Security API noch nicht viel gearbeitet.
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Security-Descriptor verwenden

  Alt 26. Sep 2004, 19:50
Hi,
ich weiß im Moment nicht so ganz, was du von mir willst? Wenn ich 0 als Processtoken angebe, kann der SD nicht erstellt werden. Folglich ist das mit Processtoken schon ganz richtig so und der SD wird auch mit Hilfe CreatePrivateObectSecurity() auch ganz ordentlich erstellt. Denn es kommt kein Fehler.
Allerdings ist der SD für die NetShareAdd-Funktion einfach nicht gut genug und nimmt den nicht an. Mir ist das ganze ein großes Rätsel.

Zitat:
hab mit der Security API noch nicht viel gearbeitet.
Kleiner Unterschied zwischen uns beiden. Ich habe noch nie damit gearbeitet. *g*

Chris
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#10

Re: Security-Descriptor verwenden

  Alt 26. Sep 2004, 19:57
Manchmal ist auch gerade bei APIs erforderlich, die Strukturen vor allen anderen Aktionen mit FillChar() bzw. ZeroMemory() vorher auf Null zu setzten, damit eventuell nicht gesetzte Parameter auch als solche erkannt werden.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 17:41 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