static void Main(string[] args) { foreach (var fileName in args) { var pzi = new PersistentZoneIdentifier(); pzi.Load(fileName, StorageMode.Read); pzi.Remove(); } }
public static void SetUrlZone (string fileName, UrlZone urlZone) { var persistentZoneId = new PersistentZoneIdentifier(); try { var zoneId = (IZoneIdentifier)persistentZoneId; var persistFile = (IPersistFile)persistentZoneId; zoneId.SetId(urlZone); persistFile.Save(fileName, false); } finally { Marshal.ReleaseComObject(persistentZoneId); } }
public static void SetUrlZone(string fileName, UrlZone urlZone) { var persistentZoneId = new PersistentZoneIdentifier(); try { var zoneId = (IZoneIdentifier)persistentZoneId; var persistFile = (IPersistFile)persistentZoneId; zoneId.SetId(urlZone); persistFile.Save(fileName, false); } finally { Marshal.ReleaseComObject(persistentZoneId); } }
public static void RemoveUrlZone (string fileName) { var persistentZoneId = new PersistentZoneIdentifier(); try { var zoneId = (IZoneIdentifier)persistentZoneId; var persistFile = (IPersistFile)persistentZoneId; try { zoneId.Remove(); persistFile.Save(fileName, false); } catch (COMException) {} // E_FAIL if no MOTW } finally { Marshal.ReleaseComObject(persistentZoneId); } }
public static bool UnblockFile(string absPath) { var pzi = new PersistentZoneIdentifier(); try { pzi.Load(absPath, StorageMode.Read | StorageMode.ShareExclusive); } catch (FileNotFoundException) { // not blocked return(false); } pzi.Remove(); pzi.Save(absPath, false); return(true); }
public static void RemoveUrlZone(string fileName) { var persistentZoneId = new PersistentZoneIdentifier(); try { var zoneId = (IZoneIdentifier)persistentZoneId; var persistFile = (IPersistFile)persistentZoneId; try { zoneId.Remove(); persistFile.Save(fileName, false); } catch (COMException) {} // E_FAIL if no MOTW } finally { Marshal.ReleaseComObject(persistentZoneId); } }
public static UrlZone GetUrlZone (string fileName) { var persistentZoneId = new PersistentZoneIdentifier(); try { var zoneId = (IZoneIdentifier)persistentZoneId; var persistFile = (IPersistFile)persistentZoneId; try { persistFile.Load(fileName, 0); return zoneId.GetId(); } catch (FileNotFoundException) { // if no MOTW, loading fails return UrlZone.LocalMachine; } } finally { Marshal.ReleaseComObject(persistentZoneId); } }
public static UrlZone GetUrlZone(string fileName) { var persistentZoneId = new PersistentZoneIdentifier(); try { var zoneId = (IZoneIdentifier)persistentZoneId; var persistFile = (IPersistFile)persistentZoneId; try { persistFile.Load(fileName, 0); return(zoneId.GetId()); } catch (FileNotFoundException) { // if no MOTW, loading fails return(UrlZone.LocalMachine); } } finally { Marshal.ReleaseComObject(persistentZoneId); } }
static int Main(string[] args) { if (args.Length == 0) { Console.WriteLine("UnblockZoneIdentifier (c) 2012 Matt Ellis"); Console.WriteLine("Removes the internet zone identifier from downloaded files"); Console.WriteLine(); Console.WriteLine("Usage:"); Console.WriteLine("\tUnblockZoneIdentifier.exe <filenames>"); Console.WriteLine(); return(0); } var currentDiretory = Directory.GetCurrentDirectory(); foreach (var filename in args) { if (!File.Exists(filename)) { Console.WriteLine("Cannot find file: «{0}»", filename); continue; } var fullFilename = Path.Combine(currentDiretory, filename); var persistentZoneIdentifier = new PersistentZoneIdentifier(); var persistFile = (IPersistFile)persistentZoneIdentifier; try { persistFile.Load(fullFilename, (int)(STGM.READWRITE | STGM.SHARE_EXCLUSIVE)); } catch (FileNotFoundException e) { // When calling persistFile.Load, the object tries to open filename:Zone.Identifier // So, if the file doesn't have an identifier, we get a file not found, and there's // nothing more we can do. Since we've tried to open the alternate data stream, we // can't seem to set the identifier, either. I think you need to use // IAttachmentExecute.SetSource to set the url which dictates the security zone Console.WriteLine("File «{0}» is not blocked", fullFilename); continue; } catch (Exception e) { Console.WriteLine("Error opening «{0}»: {1}", fullFilename, e.Message); continue; } var zoneIdentifier = (IZoneIdentifier)persistentZoneIdentifier; var zone = zoneIdentifier.GetId(); if (zone == UrlZone.LocalMachine) { Console.WriteLine("File «{0}» is not blocked", fullFilename); continue; } // zoneIdentifier.Remove doesn't work, failing with an access denied, I have no idea why. // Calling SetId and Save opens the alternate data stream and deletes it just fine zoneIdentifier.SetId(UrlZone.LocalMachine); try { persistFile.Save(fullFilename, true); Console.WriteLine("File «{0}» ({1}) has been unblocked", fullFilename, zone); } catch (COMException e) { if (e.ErrorCode == AccessDenied) { Console.WriteLine("Cannot update «{0}» - check permissions, or run as administrator", fullFilename); } else { Console.WriteLine("Error updating «{0}»: {1}", filename, e.Message); } } finally { Marshal.ReleaseComObject(persistFile); Marshal.ReleaseComObject(zoneIdentifier); } } return(0); }