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 |