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); } }
internal static extern Result GetAcl( IntPtr service, Config configId, NativeQuery query, int queryLength, ref NativeAcl acl, int aclLength, out long returnLength, IntPtr overlapped );
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 }); }
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); } }