Coooool, ich antworte auf meinen eigenen Beitrag und bin sogar 1.
Also ich habe es jetzt mit einer (meiner Meinung nach) nicht ganz so schönen Lösung geschafft:
(hoffe aber weiterhin eine bessere zu finden)
PS: Die 5 KB Begrenzung ist ja mal ... ääähhh ... toll, zu mal die Vorschau funktioniert.
@Admin: Bitte Bugfixen
Imports System.IO
Imports System.Security.AccessControl
Imports System.Security.Principal
Imports System.Security
Imports System.Diagnostics
Imports ProcessPrivileges ' -> http://processprivileges.codeplex.com/
' http://support.microsoft.com/kb/318744/en-us
' Getestet: Funktioniert
' icacls c:\temp\test /setowner tietzma /T /C
Module Module1
Sub Main()
Debug.WriteLine("---=== START ===---")
Dim p As Process = Process.GetCurrentProcess()
Using New ProcessPrivileges.PrivilegeEnabler(p, Privilege.Backup)
Using New ProcessPrivileges.PrivilegeEnabler(p, Privilege.Restore)
Using New ProcessPrivileges.PrivilegeEnabler(p, Privilege.TakeOwnership)
Dim dInfo As DirectoryInfo
Dim dSec As DirectorySecurity
Dim fInfo As FileInfo
Dim fSec As FileSecurity
Dim sNameAccount As IdentityReference = New NTAccount("corp.TRUMPF.com", _
"tietzma")
Dim startDir As String = "C:\Temp\Test\"
Dim dirs As String() = Directory.GetDirectories(startDir, "*", _
SearchOption.AllDirectories)
Dim files As String() = Directory.GetFiles(startDir, "*", _
SearchOption.AllDirectories)
' Zu erst dem Root den neuen Besitzer zuweisen
dInfo = New DirectoryInfo(startDir)
dSec = dInfo.GetAccessControl()
dSec.SetOwner(sNameAccount)
Directory.SetAccessControl(startDir, dSec)
' ... dann allen Unterordnern
For Each d As String In dirs
dInfo = New DirectoryInfo(d)
dSec = dInfo.GetAccessControl()
dSec.SetOwner(sNameAccount) 'WindowsIdentity.GetCurrent().User)
'dSec.SetAccessRuleProtection(False, True) ' -> Rekursives durchlaufen ???
Directory.SetAccessControl(d, dSec)
Next
' Dann dem Root den User samt Rechten hinzufügen
SetNTFSPermissions(startDir, sNameAccount.Value, _
NTFSInherit.ThisFolderSubFoldersAndFiles, FileSystemRights.FullControl, _
AccessControlType.Allow)
' Den Besitzer auf alle Dateien in dem Ordner anwenden
For Each f As String In files
fInfo = New FileInfo(f)
fSec = fInfo.GetAccessControl()
fSec.SetOwner(sNameAccount)
File.SetAccessControl(f, fSec)
SetNTFSPermissions(f, sNameAccount.Value, _
NTFSInherit.ThisFolderSubFoldersAndFiles, FileSystemRights.FullControl, _
AccessControlType.Allow)
Next
End Using
End Using
End Using
Console.ReadKey(False)
End Subhttp://coolzero.aucb.de |