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

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

谢谢。

最佳答案

解决方案是使用GetNamedSecurityInfo和参数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。

10-06 14:46