public void SetHttpNamespaceAcl(string urlPrefix, SecurityDescriptor acl) { HTTP_SERVICE_CONFIG_URLACL_SET urlAclConfig = new HTTP_SERVICE_CONFIG_URLACL_SET { KeyDesc = { pUrlPrefix = urlPrefix }, ParamDesc = { pStringSecurityDescriptor = acl.ToString() } }; IntPtr pUrlAclConfig = Marshal.AllocHGlobal(Marshal.SizeOf(urlAclConfig)); Marshal.StructureToPtr(urlAclConfig, pUrlAclConfig, false); try { uint retval = HttpSetServiceConfiguration(IntPtr.Zero, HTTP_SERVICE_CONFIG_ID.HttpServiceConfigUrlAclInfo, pUrlAclConfig, (uint)Marshal.SizeOf(urlAclConfig), IntPtr.Zero); if (retval != 0) { throw new ExternalException("Error Setting Configuration: " + Util.GetErrorMessage(retval)); } } finally { if (pUrlAclConfig != IntPtr.Zero) { Marshal.DestroyStructure(pUrlAclConfig, typeof(HTTP_SERVICE_CONFIG_URLACL_SET)); Marshal.FreeHGlobal(pUrlAclConfig); } } }
public void RemoveHttpHamespaceAcl(string urlPrefix) { var urlAclConfig = new HTTP_SERVICE_CONFIG_URLACL_SET(); urlAclConfig.KeyDesc.pUrlPrefix = urlPrefix; var pUrlAclConfig = Marshal.AllocHGlobal(Marshal.SizeOf(urlAclConfig)); Marshal.StructureToPtr(urlAclConfig, pUrlAclConfig, false); try { var retval = HttpDeleteServiceConfiguration(IntPtr.Zero, HTTP_SERVICE_CONFIG_ID.HttpServiceConfigUrlAclInfo, pUrlAclConfig, (uint)Marshal.SizeOf(urlAclConfig), IntPtr.Zero); if (retval != 0) { throw new ExternalException("Error Setting Configuration: " + Util.GetErrorMessage(retval)); } } finally { if (pUrlAclConfig != IntPtr.Zero) { Marshal.DestroyStructure(pUrlAclConfig, typeof(HTTP_SERVICE_CONFIG_URLACL_SET)); Marshal.FreeHGlobal(pUrlAclConfig);; } } }
public void SetHttpNamespaceAcl(string urlPrefix, SecurityDescriptor acl) { HTTP_SERVICE_CONFIG_URLACL_SET urlAclConfig = new HTTP_SERVICE_CONFIG_URLACL_SET(); urlAclConfig.KeyDesc.pUrlPrefix = urlPrefix; urlAclConfig.ParamDesc.pStringSecurityDescriptor = acl.ToString(); IntPtr pUrlAclConfig = Marshal.AllocHGlobal(Marshal.SizeOf(urlAclConfig)); Marshal.StructureToPtr(urlAclConfig, pUrlAclConfig, false); try { uint retval = HttpApi.HttpSetServiceConfiguration(IntPtr.Zero, HTTP_SERVICE_CONFIG_ID.HttpServiceConfigUrlAclInfo, pUrlAclConfig, (uint)Marshal.SizeOf(urlAclConfig), IntPtr.Zero); if (retval != 0) { throw new ExternalException("Error Setting Configuration: " + Util.GetErrorMessage(retval)); } } finally { if (pUrlAclConfig != IntPtr.Zero) { Marshal.DestroyStructure(pUrlAclConfig, typeof(HTTP_SERVICE_CONFIG_URLACL_SET)); Marshal.FreeHGlobal(pUrlAclConfig); ; } } }
public Dictionary <string, SecurityDescriptor> QueryHttpNamespaceAcls() { Dictionary <string, SecurityDescriptor> nsTable = new Dictionary <string, SecurityDescriptor>(); HTTP_SERVICE_CONFIG_URLACL_QUERY query = new HTTP_SERVICE_CONFIG_URLACL_QUERY { QueryDesc = HTTP_SERVICE_CONFIG_QUERY_TYPE.HttpServiceConfigQueryNext }; IntPtr pQuery = Marshal.AllocHGlobal(Marshal.SizeOf(query)); try { uint retval; for (query.dwToken = 0;; query.dwToken++) { Marshal.StructureToPtr(query, pQuery, false); try { uint returnSize = 0; // Get Size retval = HttpQueryServiceConfiguration(IntPtr.Zero, HTTP_SERVICE_CONFIG_ID.HttpServiceConfigUrlAclInfo, pQuery, (uint)Marshal.SizeOf(query), IntPtr.Zero, 0, ref returnSize, IntPtr.Zero); if (retval == ERROR_NO_MORE_ITEMS) { break; } if (retval != ERROR_INSUFFICIENT_BUFFER) { throw new Exception("HttpQueryServiceConfiguration returned unexpected error code."); } IntPtr pConfig = Marshal.AllocHGlobal((IntPtr)returnSize); try { retval = HttpQueryServiceConfiguration(IntPtr.Zero, HTTP_SERVICE_CONFIG_ID.HttpServiceConfigUrlAclInfo, pQuery, (uint)Marshal.SizeOf(query), pConfig, returnSize, ref returnSize, IntPtr.Zero); if (retval == NO_ERROR) { HTTP_SERVICE_CONFIG_URLACL_SET config = (HTTP_SERVICE_CONFIG_URLACL_SET)Marshal.PtrToStructure(pConfig, typeof(HTTP_SERVICE_CONFIG_URLACL_SET)); nsTable.Add(config.KeyDesc.pUrlPrefix, SecurityDescriptor.SecurityDescriptorFromString(config.ParamDesc.pStringSecurityDescriptor)); } } finally { Marshal.FreeHGlobal(pConfig); } } finally { Marshal.DestroyStructure(pQuery, typeof(HTTP_SERVICE_CONFIG_URLACL_QUERY)); } } if (retval != ERROR_NO_MORE_ITEMS) { throw new Exception("HttpQueryServiceConfiguration returned unexpected error code."); } } finally { Marshal.FreeHGlobal(pQuery); } return(nsTable); }