vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Schützen Sie Ihre Software vor Software-Piraterie - mit sevLock 1.0 DLL!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB & Windows API
Besitz von Dateien übernehmen 
Autor: NHZ
Datum: 17.05.04 17:17

Hallo,
ich möchte den Besitz von Dateien/Verzeichnissen übernehmen, auch wenn die Administratoren keinen expliziten Zugriff darauf haben. Dazu gibt es unter
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/security/security/taking_object_ownership_in_c__.asp
einen Beispiel-Code für C++.
Ich habe versucht diesen Code nach VB zu übersetzen. Leider bekomme ich in der Zeile 'dwRes = SetEntriesInAcl(NUM_ACES, ea, pOldDACL, pNewDACL)' den Fehler
Typen unverträglich.

Wer kann mir sagen warum?
Danke im vorraus

Hier der Code der Funktion
Private Function SetOwnership() As Boolean
Dim ea(NUM_ACES - 1) As EXPLICIT_ACCESS
 
Dim SIDAuthWorld As SID_IDENTIFIER_AUTHORITY
Dim SIDAuthNT As SID_IDENTIFIER_AUTHORITY
Dim pSIDAdmin As Long
Dim pSIDEveryone As Long
Dim pACL As Long
Dim pNewDACL As Long
Dim pOldDACL As Long
Dim dwRes As Long
 
    SIDAuthWorld.Value(6) = SECURITY_WORLD_SID_AUTHORITY
    SIDAuthNT.Value(6) = SECURITY_NT_AUTHORITY
 
    ' Specify the DACL to use.
    ' Create a SID for the Everyone group.
    dwRes& = AllocateAndInitializeSid(SIDAuthWorld, 1, SECURITY_WORLD_RID, 0, _
      0, 0, 0, 0, 0, 0, pSIDEveryone)
    If dwRes& = 0 Then
        MsgBox "AllocateAndInitializeSid (Everyone) error (" & dwRes& & "):" & _
          dwRes&
        GoTo Cleanup
    End If
 
    ' Create a SID for the BUILTIN\Administrators group.
    dwRes& = AllocateAndInitializeSid(SIDAuthNT, 2, _
      SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, _
                       0, 0, 0, 0, 0, 0, pSIDAdmin)
 
    If dwRes& = 0 Then
        MsgBox "AllocateAndInitializeSid (Admin) error (" & dwRes& & "):" & _
          dwRes&
        GoTo Cleanup
    End If
 
    ' Set read access for Everyone.
    ea(0).grfAccessPermissions = GENERIC_READ
    ea(0).grfAccessMode = SET_ACCESS
    ea(0).grfInheritance = NO_INHERITANCE
    ea(0).pTRUSTEE.TrusteeForm = TRUSTEE_IS_SID
    ea(0).pTRUSTEE.TrusteeType = TRUSTEE_IS_WELL_KNOWN_GROUP
    ea(0).pTRUSTEE.ptstrName = pSIDEveryone
 
    ' Set full control for Administrators.
    ea(1).grfAccessPermissions = GENERIC_ALL
    ea(1).grfAccessMode = SET_ACCESS
    ea(1).grfInheritance = NO_INHERITANCE
    ea(1).pTRUSTEE.TrusteeForm = TRUSTEE_IS_SID
    ea(1).pTRUSTEE.TrusteeType = TRUSTEE_IS_GROUP
    ea(1).pTRUSTEE.ptstrName = pSIDAdmin
 
    ' SetEntriesInAcl() API
    dwRes = SetEntriesInAcl(NUM_ACES, ea, pOldDACL, pNewDACL)
 
    If dwRes& <> ERROR_SUCCESS Then
        MsgBox "Failed SetEntriesInAcl error (" & dwRes& & "):" &  dwRes&
        GoTo Cleanup
    End If
    .....
   ....
 End Function
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Besitz von Dateien übernehmen 
Autor: Obi
Datum: 17.05.04 21:27

Hallo,

1. ist der Code nicht dazu da um den Besitz zu übernehmen, sondern um die Rechte auf eine Datei zu setzen. Das ist ein wichtiger Unterschied.

2. Poste mal die ganzen API Deklarationen dazu.

Gruß
Obi
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Besitz von Dateien übernehmen 
Autor: NHZ
Datum: 19.05.04 09:47

Hallo
Der Code des Original-Beispiels versucht zunächst die Berechtigungen zu ändern. Wenn das fehlschlägt, versucht er den sich das Recht SE_TAKE_OWNERSHIP_NAME für den Prozess zu holen, um dann den Besitz zu übernehmen.

Gruß NHZ

Hier die Declarationen:
Private Const ERROR_SUCCESS = &H0
Private Const ERROR_ACCESS_DENIED = &H5
Private Const SE_FILE_OBJECT = 1&
Private Const DACL_SECURITY_INFORMATION = &H4
Private Const SET_ACCESS = &H2
Private Const SYNCHRONIZE = &H100000
Private Const READ_CONTROL = &H20000
Private Const WRITE_DAC = &H40000
Private Const WRITE_OWNER = &H80000
Private Const STANDARD_RIGHTS_READ = (READ_CONTROL)
Private Const STANDARD_RIGHTS_WRITE = (READ_CONTROL)
Private Const DELETE = &H10000
Private Const GENERIC_ALL = &H10000000
Private Const GENERIC_EXECUTE = &H20000000
Private Const GENERIC_READ = &H80000000
Private Const GENERIC_WRITE = &H40000000
Private Const CONTAINER_INHERIT_ACE = &H2
Private Const OBJECT_INHERIT_ACE = &H1
Const SECURITY_NULL_SID_AUTHORITY = 0
Const SECURITY_WORLD_SID_AUTHORITY = 1
Const SECURITY_LOCAL_SID_AUTHORITY = 2
Const SECURITY_CREATOR_SID_AUTHORITY = 3
Const SECURITY_NON_UNIQUE_AUTHORITY = 4
Const SECURITY_NT_AUTHORITY = 5
Const SECURITY_BUILTIN_DOMAIN_RID = &H20
Const SECURITY_WORLD_RID = &H0
Const DOMAIN_ALIAS_RID_ADMINS = &H220
Const DOMAIN_ALIAS_RID_USERS = &H221
Const DOMAIN_ALIAS_RID_GUESTS = &H222
Const DOMAIN_ALIAS_RID_POWER_USERS = &H223
Const OWNER_SECURITY_INFORMATION = &H1
Const GROUP_SECURITY_INFORMATION = &H2
Const NO_INHERITANCE = &H0
Private Type SID_IDENTIFIER_AUTHORITY
    Value(6) As Byte
End Type
Private Type TRUSTEE
    pMultipleTrustee As Long
    MultipleTrusteeOperation As Long
    TrusteeForm As Long
    TrusteeType As Long
    ptstrName As String
End Type
Private Enum TRUSTEE_FORM
    TRUSTEE_IS_SID
    TRUSTEE_IS_NAME
    TRUSTEE_BAD_FORM
    TRUSTEE_IS_OBJECTS_AND_SID
    TRUSTEE_IS_OBJECTS_AND_NAME
End Enum
Private Enum TRUSTEE_TYPE
    TRUSTEE_IS_UNKNOWN
    TRUSTEE_IS_USER
    TRUSTEE_IS_GROUP
    TRUSTEE_IS_DOMAIN
    TRUSTEE_IS_ALIAS
    TRUSTEE_IS_WELL_KNOWN_GROUP
    TRUSTEE_IS_DELETED
    TRUSTEE_IS_INVALID
    TRUSTEE_IS_COMPUTER
End Enum
Private Type EXPLICIT_ACCESS
    grfAccessPermissions As Long
    grfAccessMode As Long
    grfInheritance As Long
    pTRUSTEE As TRUSTEE
End Type
Private Declare Function AllocateAndInitializeSid Lib "Advapi32.dll" ( _
  pIdentifierAuthority As SID_IDENTIFIER_AUTHORITY, _
        ByVal nSubAuthorityCount As Long, ByVal dwSubAuthority0 As Long, ByVal _
        dwSubAuthority1 As Long, _
        ByVal dwSubAuthority2 As Long, ByVal dwSubAuthority3 As Long, ByVal _
        dwSubAuthority4 As Long, _
        ByVal dwSubAuthority5 As Long, ByVal dwSubAuthority6 As Long, ByVal _
        dwSubAuthority7 As Long, pSid As Long) As Long
Private Declare Sub BuildExplicitAccessWithName Lib "Advapi32.dll" Alias _
    "BuildExplicitAccessWithNameA" _
    (ea As Any, _
    ByVal TrusteeName As String, _
    ByVal AccessPermissions As Long, _
    ByVal AccessMode As Integer, _
    ByVal Inheritance As Long)
Private Declare Function SetEntriesInAcl Lib "Advapi32.dll" Alias _
    "SetEntriesInAclA" _
    (ByVal CountofExplicitEntries As Long, _
    ea As Any, _
    ByVal OldAcl As Long, _
    NewAcl As Long) As Long
Private Declare Function GetNamedSecurityInfo Lib "Advapi32.dll" Alias _
    "GetNamedSecurityInfoA" _
    (ByVal ObjName As String, _
    ByVal SE_OBJECT_TYPE As Long, _
    ByVal SecInfo As Long, _
    ByVal pSid As Long, _
    ByVal pSidGroup As Long, _
    pDacl As Long, _
    ByVal pSacl As Long, _
    pSecurityDescriptor As Long) As Long
Private Declare Function SetNamedSecurityInfo Lib "Advapi32.dll" Alias _
    "SetNamedSecurityInfoA" _
    (ByVal ObjName As String, _
    ByVal SE_OBJECT As Long, _
    ByVal SecInfo As Long, _
    ByVal pSid As Long, _
    ByVal pSidGroup As Long, _
    ByVal pDacl As Long, _
    ByVal pSacl As Long) As Long
Private Declare Function LocalFree Lib "kernel32" (ByVal hMem As Long) As Long
Private Declare Function FreeSid Lib "Advapi32" (ByVal hMem As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As _
  Long
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Besitz von Dateien übernehmen 
Autor: Obi
Datum: 19.05.04 18:21

Hallo,

versuche es mal so.

' SetEntriesInAcl() API
    dwRes = SetEntriesInAcl(NUM_ACES, ea(0), pOldDACL, pNewDACL)
        If dwRes& <> ERROR_SUCCESS Then
        MsgBox "Failed SetEntriesInAcl error (" & dwRes& & "):" &  dwRes&
        GoTo Cleanup
    End If
Gruß
Obi
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Besitz von Dateien übernehmen 
Autor: NHZ
Datum: 21.05.04 12:40

Hallo,
leider bekomme ich jetzt den Fehler 87 (Falscher Parameter)
Da ja eine neue ACL erstellt wird habe ich auch fogende Variante probiert.
dwRes = SetEntriesInAcl(NUM_ACES, ea(0), 0&, pNewDACL)
Gruß
NHZ
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Besitz von Dateien übernehmen 
Autor: Obi
Datum: 21.05.04 17:50

Hi,

also ich habe nochmal in einem meiner Projekte nachgesehen und das geht bei mir sehr gut. Was ich bei dir nicht gefunden habe ist die Deklaration von (NUM_ACES, ist das vielleicht nicht oder falsch deklariert?

Gruß
Obi
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Besitz von Dateien übernehmen 
Autor: Obi
Datum: 22.05.04 23:56

Hallo,

mir ist da noch ein fehlerhafter Trustee-Type aufgefallen.

Public Type TRUSTEE
   pMultipleTrustee                    As Long
   MultipleTrusteeOperation            As long
   TrusteeForm                         As long
   TrusteeType                         As long
   ptstrName                           As Long 'String
End Type
Du hattest da noch String stehen, da die C API aber mit Pointern arbeitet, musst du den Strin in ein Long umwandeln.

Gruß
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Besitz von Dateien übernehmen 
Autor: NHZ
Datum: 24.05.04 17:00

Hallo,
es funktioniert.

Übrigens die Zeilen:
SIDAuthWorld.Value(6) = SECURITY_WORLD_SID_AUTHORITY
SIDAuthNT.Value(6) = SECURITY_NT_AUTHORITY

müssen
SIDAuthWorld.Value(5) = SECURITY_WORLD_SID_AUTHORITY
SIDAuthNT.Value(5) = SECURITY_NT_AUTHORITY

heisen. Andernfalls erhält man den Fehler 1307: Diese Sicherheitsstruktur kann nicht als Besitzer hizugefügt werden.

vielen Dank für Deine Hilfe!!!
NHZ
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Besitz von Dateien übernehmen 
Autor: azn_ki
Datum: 27.06.05 15:26

Hallo

wer ist so nett... und gibt mir den ganzen code... hehe
ich habe lange nach dem gesucht

Also ich wäre echt froh darum, da ichs schon versucht habe und es hat nur fehler gegeben und ich habe keine zeit.. zum lange herumzuprobieren
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel