public static DirectoryEntry CreateIsapiFilter(string parent, string localPath, string filterName, out bool created) { created = false; DirectoryEntry directoryEntry = null; DirectoryEntry result; try { bool flag; using (DirectoryEntry directoryEntry2 = IisUtility.FindOrCreateWebObject(parent, "Filters", "IIsFilters", out flag)) { if (flag) { directoryEntry2.CommitChanges(); IisUtility.CommitMetabaseChanges(IisUtility.ServerFromWebSite(IisUtility.WebSiteFromMetabasePath(directoryEntry2.Path))); } directoryEntry = IisUtility.FindOrCreateWebObject(directoryEntry2.Path, filterName, "IIsFilter", out flag); if (flag || (directoryEntry.Properties["FilterPath"].Value is string && (string)directoryEntry.Properties["FilterPath"].Value != localPath)) { directoryEntry.Properties["FilterPath"].Value = localPath; flag = true; } string text = (string)directoryEntry2.Properties["FilterLoadOrder"].Value; if (text == null || text.Length == 0) { directoryEntry2.Properties["FilterLoadOrder"].Value = filterName; } else if (!IsapiFilter.IsFilterInLoadOrder(text, filterName)) { StringBuilder stringBuilder = new StringBuilder(text); stringBuilder.Append(","); stringBuilder.Append(filterName); directoryEntry2.Properties["FilterLoadOrder"].Value = stringBuilder.ToString(); } directoryEntry2.CommitChanges(); IisUtility.CommitMetabaseChanges(IisUtility.ServerFromWebSite(IisUtility.WebSiteFromMetabasePath(directoryEntry2.Path))); created = flag; result = directoryEntry; } } catch (Exception) { if (directoryEntry != null) { directoryEntry.Close(); } throw; } return(result); }