C#PInvoke通过Win32 API获取文件和文件夹的ACL

时间:2013-03-26 10:16:45

标签: c# winapi pinvoke acl .net

我需要为哪个PInvoke验证UNC路径(\ UNC \?\或\?\,文件和文件夹)的权限(CanRead,CanWrite,CanExecute ...)。 使用System.IO,我会使用fileInfo.GetAccessControll().GetAccessRules来获取AuthorizationRuleCollection,但我无法使用System.IO,因为此命名空间不支持长路径。

我知道如何获得所有者,但我找不到其他信息的解决方案。我以为我也必须使用GetNamedSecurityInfo,但信息非常稀疏。

感谢。

1 个答案:

答案 0 :(得分:2)

解决方案是使用GetNamedSecurityInfo和Parameter pSecurityDescriptor以及DACL信息请求。

// Get Length
var securityDescriptorLength = /* Win32 Call */ GetSecurityDescriptorLength( pSecurityDescriptor );

// Define array to copy
var securityDescriptorDataArray = new byte[ securityDescriptorLength ];

// Copy by marshal to defined array
/* Win32 Call */ Marshal.Copy( pSecurityDescriptor, securityDescriptorDataArray, 0, ( int ) securityDescriptorLength );

// If path is directory
var securityInfo = new DirectorySecurity( );
securityInfo.SetSecurityDescriptorBinaryForm( securityDescriptorDataArray );

现在,您可以使用securityInfo.GetAccessRules()

获取AccessRules