Skip to content

Instantly share code, notes, and snippets.

@HumanEquivalentUnit
Last active December 4, 2024 05:16
Show Gist options
  • Select an option

  • Save HumanEquivalentUnit/9756f97bc67d2a0807993c05e426a436 to your computer and use it in GitHub Desktop.

Select an option

Save HumanEquivalentUnit/9756f97bc67d2a0807993c05e426a436 to your computer and use it in GitHub Desktop.

Revisions

  1. HumanEquivalentUnit revised this gist Aug 7, 2018. 1 changed file with 79 additions and 81 deletions.
    160 changes: 79 additions & 81 deletions gistfile1.txt
    Original file line number Diff line number Diff line change
    @@ -5,98 +5,96 @@ using System;
    using System.Runtime.InteropServices;
    using System.Runtime.InteropServices.ComTypes;

    namespace IEZones {

    public class Zones
    public class IEZones
    {
    private const string CLSID_InternetSecurityManager = "7b8a2d94-0ac9-11d1-896c-00c04fb6bfc4";
    private const int E_FAIL = unchecked((int)0x80004005);
    private const int ERROR_FILE_EXISTS = unchecked((int)0x80070050);
    private const uint SZM_CREATE = 0;
    private const uint SZM_DELETE = 1;

    public const uint ZoneLocalMachine = 0;
    public const uint ZoneIntranet = 1;
    public const uint ZoneTrusted = 2;
    public const uint ZoneInternet = 3;
    public const uint ZoneUntrusted = 4;

    public static uint MapUrlToZone(string url)
    {
    private const string CLSID_InternetSecurityManager = "7b8a2d94-0ac9-11d1-896c-00c04fb6bfc4";
    private const int E_FAIL = unchecked((int)0x80004005);
    private const int ERROR_FILE_EXISTS = unchecked((int)0x80070050);
    private const uint SZM_CREATE = 0;
    private const uint SZM_DELETE = 1;

    public const uint ZoneLocalMachine = 0;
    public const uint ZoneIntranet = 1;
    public const uint ZoneTrusted = 2;
    public const uint ZoneInternet = 3;
    public const uint ZoneUntrusted = 4;

    public static uint MapUrlToZone(string url)
    {
    IInternetSecurityManager manager = CreateInternetSecurityManager();
    uint Zone;
    manager.MapUrlToZone(url, out Zone, 0);
    return Zone;
    }

    public static IInternetSecurityManager CreateInternetSecurityManager()
    {
    Type iismType = Type.GetTypeFromCLSID(new Guid(CLSID_InternetSecurityManager));
    return (IInternetSecurityManager)Activator.CreateInstance(iismType);
    }
    IInternetSecurityManager manager = CreateInternetSecurityManager();
    uint Zone;
    manager.MapUrlToZone(url, out Zone, 0);
    return Zone;
    }

    [ComImport, GuidAttribute("79EAC9EE-BAF9-11CE-8C82-00AA004BA90B")]
    [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
    public interface IInternetSecurityManager
    public static IInternetSecurityManager CreateInternetSecurityManager()
    {
    [return: MarshalAs(UnmanagedType.I4)]
    [PreserveSig]
    int SetSecuritySite([In] IntPtr pSite);

    [return: MarshalAs(UnmanagedType.I4)]
    [PreserveSig]
    int GetSecuritySite([Out] IntPtr pSite);

    [return: MarshalAs(UnmanagedType.I4)]
    [PreserveSig]
    int MapUrlToZone([In, MarshalAs(UnmanagedType.LPWStr)] string pwszUrl,
    out UInt32 pdwZone, UInt32 dwFlags);

    [return: MarshalAs(UnmanagedType.I4)]
    [PreserveSig]
    int GetSecurityId([MarshalAs(UnmanagedType.LPWStr)] string pwszUrl,
    [MarshalAs(UnmanagedType.LPArray)] byte[] pbSecurityId,
    ref UInt32 pcbSecurityId, uint dwReserved);

    [return: MarshalAs(UnmanagedType.I4)]
    [PreserveSig]
    int ProcessUrlAction([In, MarshalAs(UnmanagedType.LPWStr)] string pwszUrl,
    UInt32 dwAction, out byte pPolicy, UInt32 cbPolicy,
    byte pContext, UInt32 cbContext, UInt32 dwFlags,
    UInt32 dwReserved);

    [return: MarshalAs(UnmanagedType.I4)]
    [PreserveSig]
    int QueryCustomPolicy([In, MarshalAs(UnmanagedType.LPWStr)] string pwszUrl,
    ref Guid guidKey, ref byte ppPolicy, ref UInt32 pcbPolicy,
    ref byte pContext, UInt32 cbContext, UInt32 dwReserved);

    [return: MarshalAs(UnmanagedType.I4)]
    [PreserveSig]
    int SetZoneMapping(UInt32 dwZone,
    [In, MarshalAs(UnmanagedType.LPWStr)] string lpszPattern,
    UInt32 dwFlags);

    [return: MarshalAs(UnmanagedType.I4)]
    [PreserveSig]
    int GetZoneMappings(UInt32 dwZone, out IEnumString ppenumString,
    UInt32 dwFlags);
    Type iismType = Type.GetTypeFromCLSID(new Guid(CLSID_InternetSecurityManager));
    return (IInternetSecurityManager)Activator.CreateInstance(iismType);
    }
    }

    [ComImport, GuidAttribute("6D5140C1-7436-11CE-8034-00AA006009FA")]
    [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
    public interface IServiceProvider
    {
    void QueryService(ref Guid guidService, ref Guid riid,
    [MarshalAs(UnmanagedType.Interface)] out object ppvObject);
    }
    [ComImport, GuidAttribute("79EAC9EE-BAF9-11CE-8C82-00AA004BA90B")]
    [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
    public interface IInternetSecurityManager
    {
    [return: MarshalAs(UnmanagedType.I4)]
    [PreserveSig]
    int SetSecuritySite([In] IntPtr pSite);

    [return: MarshalAs(UnmanagedType.I4)]
    [PreserveSig]
    int GetSecuritySite([Out] IntPtr pSite);

    [return: MarshalAs(UnmanagedType.I4)]
    [PreserveSig]
    int MapUrlToZone([In, MarshalAs(UnmanagedType.LPWStr)] string pwszUrl,
    out UInt32 pdwZone, UInt32 dwFlags);

    [return: MarshalAs(UnmanagedType.I4)]
    [PreserveSig]
    int GetSecurityId([MarshalAs(UnmanagedType.LPWStr)] string pwszUrl,
    [MarshalAs(UnmanagedType.LPArray)] byte[] pbSecurityId,
    ref UInt32 pcbSecurityId, uint dwReserved);

    [return: MarshalAs(UnmanagedType.I4)]
    [PreserveSig]
    int ProcessUrlAction([In, MarshalAs(UnmanagedType.LPWStr)] string pwszUrl,
    UInt32 dwAction, out byte pPolicy, UInt32 cbPolicy,
    byte pContext, UInt32 cbContext, UInt32 dwFlags,
    UInt32 dwReserved);

    [return: MarshalAs(UnmanagedType.I4)]
    [PreserveSig]
    int QueryCustomPolicy([In, MarshalAs(UnmanagedType.LPWStr)] string pwszUrl,
    ref Guid guidKey, ref byte ppPolicy, ref UInt32 pcbPolicy,
    ref byte pContext, UInt32 cbContext, UInt32 dwReserved);

    [return: MarshalAs(UnmanagedType.I4)]
    [PreserveSig]
    int SetZoneMapping(UInt32 dwZone,
    [In, MarshalAs(UnmanagedType.LPWStr)] string lpszPattern,
    UInt32 dwFlags);

    [return: MarshalAs(UnmanagedType.I4)]
    [PreserveSig]
    int GetZoneMappings(UInt32 dwZone, out IEnumString ppenumString,
    UInt32 dwFlags);
    }

    [ComImport, GuidAttribute("6D5140C1-7436-11CE-8034-00AA006009FA")]
    [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
    public interface IServiceProvider
    {
    void QueryService(ref Guid guidService, ref Guid riid,
    [MarshalAs(UnmanagedType.Interface)] out object ppvObject);
    }
    '@


    Add-Type -TypeDefinition $csSource -Language CSharp

    [IEZones.Zones]::MapUrlToZone('http://www.microsoft.com')
    [IEZones.Zones]::MapUrlToZone('http://intranet')
    [IEZones]::MapUrlToZone('http://www.microsoft.com')
    [IEZones]::MapUrlToZone('http://intranet') -eq [IEZones]::ZoneIntranet

  2. HumanEquivalentUnit created this gist Aug 7, 2018.
    102 changes: 102 additions & 0 deletions gistfile1.txt
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,102 @@
    # Map URLs to Internet Explorer Security Zones via PowerShell

    $csSource = @'
    using System;
    using System.Runtime.InteropServices;
    using System.Runtime.InteropServices.ComTypes;

    namespace IEZones {

    public class Zones
    {
    private const string CLSID_InternetSecurityManager = "7b8a2d94-0ac9-11d1-896c-00c04fb6bfc4";
    private const int E_FAIL = unchecked((int)0x80004005);
    private const int ERROR_FILE_EXISTS = unchecked((int)0x80070050);
    private const uint SZM_CREATE = 0;
    private const uint SZM_DELETE = 1;

    public const uint ZoneLocalMachine = 0;
    public const uint ZoneIntranet = 1;
    public const uint ZoneTrusted = 2;
    public const uint ZoneInternet = 3;
    public const uint ZoneUntrusted = 4;

    public static uint MapUrlToZone(string url)
    {
    IInternetSecurityManager manager = CreateInternetSecurityManager();
    uint Zone;
    manager.MapUrlToZone(url, out Zone, 0);
    return Zone;
    }

    public static IInternetSecurityManager CreateInternetSecurityManager()
    {
    Type iismType = Type.GetTypeFromCLSID(new Guid(CLSID_InternetSecurityManager));
    return (IInternetSecurityManager)Activator.CreateInstance(iismType);
    }
    }

    [ComImport, GuidAttribute("79EAC9EE-BAF9-11CE-8C82-00AA004BA90B")]
    [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
    public interface IInternetSecurityManager
    {
    [return: MarshalAs(UnmanagedType.I4)]
    [PreserveSig]
    int SetSecuritySite([In] IntPtr pSite);

    [return: MarshalAs(UnmanagedType.I4)]
    [PreserveSig]
    int GetSecuritySite([Out] IntPtr pSite);

    [return: MarshalAs(UnmanagedType.I4)]
    [PreserveSig]
    int MapUrlToZone([In, MarshalAs(UnmanagedType.LPWStr)] string pwszUrl,
    out UInt32 pdwZone, UInt32 dwFlags);

    [return: MarshalAs(UnmanagedType.I4)]
    [PreserveSig]
    int GetSecurityId([MarshalAs(UnmanagedType.LPWStr)] string pwszUrl,
    [MarshalAs(UnmanagedType.LPArray)] byte[] pbSecurityId,
    ref UInt32 pcbSecurityId, uint dwReserved);

    [return: MarshalAs(UnmanagedType.I4)]
    [PreserveSig]
    int ProcessUrlAction([In, MarshalAs(UnmanagedType.LPWStr)] string pwszUrl,
    UInt32 dwAction, out byte pPolicy, UInt32 cbPolicy,
    byte pContext, UInt32 cbContext, UInt32 dwFlags,
    UInt32 dwReserved);

    [return: MarshalAs(UnmanagedType.I4)]
    [PreserveSig]
    int QueryCustomPolicy([In, MarshalAs(UnmanagedType.LPWStr)] string pwszUrl,
    ref Guid guidKey, ref byte ppPolicy, ref UInt32 pcbPolicy,
    ref byte pContext, UInt32 cbContext, UInt32 dwReserved);

    [return: MarshalAs(UnmanagedType.I4)]
    [PreserveSig]
    int SetZoneMapping(UInt32 dwZone,
    [In, MarshalAs(UnmanagedType.LPWStr)] string lpszPattern,
    UInt32 dwFlags);

    [return: MarshalAs(UnmanagedType.I4)]
    [PreserveSig]
    int GetZoneMappings(UInt32 dwZone, out IEnumString ppenumString,
    UInt32 dwFlags);
    }

    [ComImport, GuidAttribute("6D5140C1-7436-11CE-8034-00AA006009FA")]
    [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
    public interface IServiceProvider
    {
    void QueryService(ref Guid guidService, ref Guid riid,
    [MarshalAs(UnmanagedType.Interface)] out object ppvObject);
    }
    }
    '@


    Add-Type -TypeDefinition $csSource -Language CSharp

    [IEZones.Zones]::MapUrlToZone('http://www.microsoft.com')
    [IEZones.Zones]::MapUrlToZone('http://intranet')