2011-10-25 5 views
1

私はcertinユーザーがDACLに存在するかどうかを確認するために、次のコードを使用します。ユーザーが共有フォルダに対してフルコントロールのアクセス許可を持っているかどうかを確認する方法?

Dim l_managemantObject As ManagementBaseObject() = CType(securityDescriptor.Properties("DACL").Value, ManagementBaseObject()) 

For Each mObject As ManagementBaseObject In l_managemantObject 
    l_name = CType(mObject.GetPropertyValue("Trustee"), ManagementBaseObject).Properties("Name").Value.ToString 
    If CType(mObject.GetPropertyValue("Trustee"), ManagementBaseObject).Properties("Domain").Value IsNot Nothing Then 
     l_domain = CType(mObject.GetPropertyValue("Trustee"), ManagementBaseObject).Properties("Domain").Value.ToString() 
    End If 

    If users.UserName.ToLower = (l_domain & "\" & l_name).ToLower Then 
     Return True     
    End If 
Next 

あなたが見ることができるように、私は、ユーザー名とドメインを取得することができますよ。ユーザーがFullControl権限を持っているかどうかを確認するにはどうすればよいですか?

編集:

私はfurthur調査を行い、GetAccessMaskを使用して、私はインスタンスが返され、その代わりに、ユーザーまたはグループが保持している共有へのアクセス権を取得できることを発見しました。

したがって、わかりました。 特定のユーザーを取得するにはAccessMask

AccessMask on MSDN

答えて

0

それはするManagementObjectが許可レベルを取得するにGetPropertyValue("AccessMask")を使用して、私の鼻の下にあるすべての時間でした。

詳しい方法:

Dim l_managemantObject As ManagementBaseObject() = CType(securityDescriptor.Properties("DACL").Value, ManagementBaseObject()) 

    For Each mObject As ManagementBaseObject In l_managemantObject 
     l_name = CType(mObject.GetPropertyValue("Trustee"), ManagementBaseObject).Properties("Name").Value.ToString 
     If CType(mObject.GetPropertyValue("Trustee"), ManagementBaseObject).Properties("Domain").Value IsNot Nothing Then 
      l_domain = CType(mObject.GetPropertyValue("Trustee"), ManagementBaseObject).Properties("Domain").Value.ToString() 
     End If 

     Dim l_accessMask as UInteger = mObject.GetPropertyValue("AccessMask") 

     If users.UserName.ToLower = (l_domain & "\" & l_name).ToLower Then 
      if l_accessMask = 2032127 then 
       Return True 
      endif        
     End If 
    Next 
関連する問題