- - PR -
特定のユーザーにアクセス許可を追加したい
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-03-11 11:27
<開発環境>
WINDOWS 2000 VB.NET 2003 いつもお世話になっております。 既存のフォルダに存在するユーザーに、フルコントロールのアクセスをプログラムから許可 したいと思っています。こちらはローカル単位での操作です。 microsoftのサポートを参考にして作成したのですが、途中でこけてしまい 理由がわからず、困っています。 [HOWTO] Microsoft Visual Basic .NET のプログラムを使用して、NTFS ファイル システムのフォルダのアクセス許可を設定する方法 http://support.microsoft.com/default.aspx?scid=kb;ja;818362 以下にコードを記します。長いので恐縮ですが、お願いします。 Sub SetPermissions(ByRef vPath As String, ByVal UserName As String) Dim objDAcl As AccessControlList Dim objAce As Object Dim objAce1 As AccessControlEntry Dim objAce2 As AccessControlEntry Dim objSId As ADsSID Dim objSIdHex As Object Dim objAdsSec As ADsSecurity Dim objSecDes As Const ADS_SID_SAM = 2 Const ADS_SID_SDDL = 4 Const ADS_RIGHT_GENERIC_ALL = &H10000000 Const ADS_ACETYPE_ACCESS_ALLOWED = &H0 Const ADS_ACEFLAG_INHERIT_ACE = &H2 Const ADS_ACEFLAG_INHERIT_ONLY_ACE = &H8 objAdsSec = New ADsSecurity objSecDes = New Object objSecDes = objAdsSec.GetSecurityDescriptor("FILE://" & vPath) ↑ ここでコケてしまいます。エラーは「オブジェクト参照がインスタンスに設定されて いません」とゆうエラー内容です。 objDAcl = objSecDes.DiscretionaryAcl objSId = New ADsSID objSId.SetAs(ADS_SID_SAM, CStr(UserName)) objSIdHex = objSId.GetAs(ADS_SID_SDDL) ' Add a new objAce so that the User has Full Control on NTFS Files. objAce1 = New AccessControlEntry objAce1.Trustee = CStr(objSIdHex) objAce1.AccessMask = ADS_RIGHT_GENERIC_ALL objAce1.AceType = ADS_ACETYPE_ACCESS_ALLOWED objAce1.AceFlags = ADS_ACEFLAG_INHERIT_ACE Or ADS_ACEFLAG_INHERIT_ONLY_ACE Or 1 objDAcl.AddAce(objAce1) objAce2 = New AccessControlEntry objAce2.Trustee = CStr(objSIdHex) objAce2.AccessMask = ADS_RIGHT_GENERIC_ALL objAce2.AceType = ADS_ACETYPE_ACCESS_ALLOWED objAce2.AceFlags = ADS_ACEFLAG_INHERIT_ACE Or 1 objDAcl.AddAce(objAce2) objSecDes.DiscretionaryAcl = objDAcl objAdsSec.SetSecurityDescriptor(objSecDes) End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Try SetPermissions("<%test%>", "SHIRAGAMI\\Everyone") MsgBox("Full Access control granted.") Catch ex As Exception MessageBox.Show(ex.Message) End Try End Sub 直前でNewしているので上記のエラーがなぜでるのかわかりません。 どなたかお教えいただけませんでしょうか? よろしくお願いいたします。 |
|
投稿日時: 2005-03-11 15:06
自己スレです。
関数の呼び出し時、引数の値がダメだったようです。 Sub SetPermissions(ByRef vPath As String, ByVal UserName As String) Dim objDAcl As AccessControlList = New AccessControlList Dim objAce1 As AccessControlEntry Dim objAce2 As AccessControlEntry Dim objSId As ADsSID Dim objSIdHex As String Dim objAdsSec As ADsSecurity = New ADsSecurity Dim objSecDes As SecurityDescriptor Const ADS_SID_SAM = 2 Const ADS_SID_SDDL = 4 Const ADS_RIGHT_GENERIC_ALL = &H10000000 Const ADS_ACETYPE_ACCESS_ALLOWED = &H0 Const ADS_ACEFLAG_INHERIT_ACE = &H2 Const ADS_ACEFLAG_INHERIT_ONLY_ACE = &H8 objSecDes = CType(objAdsSec.GetSecurityDescriptor("FILE://" & vPath), SecurityDescriptor) objDAcl = CType(objSecDes.DiscretionaryAcl, AccessControlList) objSId = New ADsSID objSId.SetAs(ADS_SID_SAM, CStr(UserName)) objSIdHex = CStr(objSId.GetAs(ADS_SID_SDDL)) ' Add a new objAce so that the User has Full Control on NTFS Files. objAce1 = New AccessControlEntry objAce1.Trustee = objSIdHex objAce1.AccessMask = ADS_RIGHT_GENERIC_ALL objAce1.AceType = ADS_ACETYPE_ACCESS_ALLOWED objAce1.AceFlags = ADS_ACEFLAG_INHERIT_ACE Or ADS_ACEFLAG_INHERIT_ONLY_ACE Or 1 objDAcl.AddAce(objAce1) ' Add a new objAce so that the User has Full Control on NTFS Folders. objAce2 = New AccessControlEntry objAce2.Trustee = CStr(objSIdHex) objAce2.AccessMask = ADS_RIGHT_GENERIC_ALL objAce2.AceType = ADS_ACETYPE_ACCESS_ALLOWED objAce2.AceFlags = ADS_ACEFLAG_INHERIT_ACE Or 1 objDAcl.AddAce(objAce2) objSecDes.DiscretionaryAcl = objDAcl ' Set Permissions on the NTFS folder. objAdsSec.SetSecurityDescriptor(objSecDes) End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Try SetPermissions("C:\test2", "Domain\UserName") ↑ ここの部分です。 MsgBox("Full Access control granted.") Catch ex As Exception MessageBox.Show(ex.Message) End Try End Sub 今度はロジックは通ったのですが、うまくアクセス許可が設定されません。 どなたか、ご指摘をお願いします。 |
|
投稿日時: 2005-03-11 18:00
自己レスです。
できました。上記の記述でよかったようです。 一度目がなぜいけなかったのか謎ですが、、、。 考えていただいた方、 ありがとうございました。 またどなたか参考にしていただけたら幸いです。 |
1