- 題名: アクセス権の無いフォルダの所有権を取得したい
- 日時: 2013/09/17 16:11:13
- ID: 31799
- この記事の返信元:
- (なし)
- この記事への返信:
- [31804] Re[1]: アクセス権の無いフォルダの所有権を取得したい2013/09/19 23:28:47
- [31832] Re[1]: アクセス権の無いフォルダの所有権を取得したい2013/10/04 12:33:23
- ツリーを表示
先に権限をつけてあげると、うまく動くみたいです。
Imports System.IO
Imports System.Security
Imports System.Security.AccessControl
Imports System.Security.Principal
Module Module1
Sub Main()
Dim targetDirectoryName As String = "R:\ACC"
Dim buitinAdminName As String = "BUILTIN\Administrators"
Dim dirInfo As New DirectoryInfo(targetDirectoryName)
Dim dirSecurity As DirectorySecurity = dirInfo.GetAccessControl()
Dim builtinAdmin As New NTAccount(buitinAdminName)
Dim permissions As New FileSystemAccessRule(builtinAdmin, FileSystemRights.TakeOwnership Or FileSystemRights.ChangePermissions, AccessControlType.Allow)
dirSecurity.AddAccessRule(permissions)
dirInfo.SetAccessControl(dirSecurity)
dirSecurity.SetOwner(builtinAdmin)
dirInfo.SetAccessControl(dirSecurity)
End Sub
End Module
いきなり所有者を変更する場合は、SE_TAKE_OWNERSHIP_NAME 特権を取得してください。
使用する API は
GetCurrentProcess/OpenProcessToken/LookupPrivilegeValue/AdjustTokenPrivileges/CloseHandle
分類:[.NET]
エクスプローラで、アクセス権のないフォルダの所有権を取得し、
アクセス権をつけてアクセス可能となる操作をVB.NETで作成したいと考えています。
そこで以下の様なコードを作成しました。(まだアクセス権を設定する部分は書いてありません)
Dim DirectoryInfo As New IO.DirectoryInfo("C:\Acc")
Dim DirectorySecurity As Security.AccessControl.DirectorySecurity = DirectoryInfo.GetAccessControl()
DirectorySecurity.SetOwner(New System.Security.Principal.NTAccount("builtin\administrators"))
DirectoryInfo.SetAccessControl(DirectorySecurity)
このコードでは、アクセス権があって所有権を変更する場合には正常に動作しますが、
アクセス権がない場合にはGetAccessControlの部分でエラーとなってしまいます。
どのように書き換えればアクセス権のない状態で所有権を取得できるかご教授ください。