示例#1
0
        public List <UrlAcl> GetAcl()
        {
            IntPtr buffer = Marshal.AllocCoTaskMem(AclBufferSize);

            try
            {
                NativeQuery q = new NativeQuery();
                q.Prefix    = string.Empty;
                q.QueryDesc = QueryType.Next;
                q.Token     = 0;

                var list = new List <UrlAcl>();
                while (true)
                {
                    var acl = getAcl(q, buffer);
                    if (acl == null)
                    {
                        break;
                    }

                    list.Add(acl);
                    q.Token++;
                }

                return(list);
            }
            finally
            {
                Marshal.FreeCoTaskMem(buffer);
            }
        }
示例#2
0
 internal static extern Result GetAcl(
     IntPtr service,
     Config configId,
     NativeQuery query,
     int queryLength,
     ref NativeAcl acl,
     int aclLength,
     out long returnLength,
     IntPtr overlapped
     );
示例#3
0
        static UrlAcl getAcl(NativeQuery q, IntPtr buffer)
        {
            long out1;
            var  rc = Native.QueryAcl(IntPtr.Zero, Config.UrlAclInfo, ref q, NativeQuery.Length, buffer, AclBufferSize, out out1, IntPtr.Zero);

            if (rc != Result.OK)
            {
                return(null);
            }

            var acl = (NativeAcl)Marshal.PtrToStructure(buffer, typeof(NativeAcl));

            return(new UrlAcl()
            {
                Prefix = acl.Prefix, Acl = acl.Acl
            });
        }
示例#4
0
        public UrlAcl GetAcl(string url)
        {
            IntPtr pOut = Marshal.AllocCoTaskMem(AclBufferSize);

            try
            {
                NativeQuery q = new NativeQuery();
                q.Prefix    = url;
                q.QueryDesc = QueryType.Exact;

                return(getAcl(q, pOut));
            }
            finally
            {
                Marshal.FreeCoTaskMem(pOut);
            }
        }