猿问

如何在 c# 或 C++ 中获得文件或文件夹的有效权限???任何 API 的?

我的代码可以工作,但我需要简化的代码,并且不适用于 Authenticated Users 组。还有其他计算有效权限的方法吗?.NET 中是否有用于获取特定用户的有效文件夹权限的 api?我知道如何使用DirectorySecurity.GetAccessRules(). 但在这种情况下,我应该手动分析用户的所有权限、组的权限,包括用户、继承的权限和文件夹的用户权限。


Windows API 中是否有可以通过平台调用返回这些权限的函数?


namespace DemoProject1

{

     

    class Program

    {

        static Dictionary<String, String> rightsmap = new Dictionary<String, String>();

        [DllImport("advapi32.dll", SetLastError = true)]

        static extern uint GetEffectiveRightsFromAcl(IntPtr pDacl, ref TRUSTEE pTrustee, ref ACCESS_MASK pAccessRights);


        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto, Pack = 4)]

        struct TRUSTEE

        {

            IntPtr pMultipleTrustee; // must be null

            public int MultipleTrusteeOperation;

            public TRUSTEE_FORM TrusteeForm;

            public TRUSTEE_TYPE TrusteeType;

            [MarshalAs(UnmanagedType.LPStr)]

            public string ptstrName;

        }


        enum TRUSTEE_FORM

        {

            TRUSTEE_IS_SID,

            TRUSTEE_IS_NAME,

            TRUSTEE_BAD_FORM,

            TRUSTEE_IS_OBJECTS_AND_SID,

            TRUSTEE_IS_OBJECTS_AND_NAME

        }

        

        enum TRUSTEE_TYPE

        {

            TRUSTEE_IS_UNKNOWN,

            TRUSTEE_IS_USER,

            TRUSTEE_IS_GROUP,

            TRUSTEE_IS_DOMAIN,

            TRUSTEE_IS_ALIAS,

            TRUSTEE_IS_WELL_KNOWN_GROUP,

            TRUSTEE_IS_DELETED,

            TRUSTEE_IS_INVALID,

            TRUSTEE_IS_COMPUTER

        }


        [DllImport("advapi32.dll", CharSet = CharSet.Auto)]

        static extern uint GetNamedSecurityInfo(

            string pObjectName,

            SE_OBJECT_TYPE ObjectType,

            SECURITY_INFORMATION SecurityInfo,

            out IntPtr pSidOwner,

            out IntPtr pSidGroup,

            out IntPtr pDacl,

            out IntPtr pSacl,

            out IntPtr pSecurityDescriptor);


慕桂英3389331
浏览 235回答 1
1回答
随时随地看视频慕课网APP
我要回答