我需要为哪个PInvoke验证UNC路径(\ UNC \?\或\?\,文件和文件夹)的权限(CanRead,CanWrite,CanExecute ...)。
使用System.IO,我会使用fileInfo.GetAccessControll().GetAccessRules
来获取AuthorizationRuleCollection
,但我无法使用System.IO,因为此命名空间不支持长路径。
我知道如何获得所有者,但我找不到其他信息的解决方案。我以为我也必须使用GetNamedSecurityInfo,但信息非常稀疏。
感谢。
答案 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()