http://csharp-online.net/forum/viewtopic.php?t=352

 public enum UrlZone
{
    LocalMachine,
    Intranet,
    Trusted,
    Internet,
    Untrusted
}

public enum UrlAction
{
    ActiveXScriptletRun = unchecked((int)0x00001209),
    DownloadUnsignedActiveX = unchecked((int)0x00001004)
}

public enum UrlZoneReg
{
    Default,
    LocalMachineKey,
    CurrentUserKey
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct ZoneAttributes
{
    public uint Size;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
    public string DisplayName;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 200)]
    public string Description;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
    public string IconPath;
    public uint TemplateMinLevel;
    public uint TemplateRecommended;
    public uint TemplateCurrentLevel;
    public uint Flags;
};

 


[ComImport,
 Guid("79eac9ef-baf9-11ce-8c82-00aa004ba90b"),
 InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IInternetZoneManager
{
    [PreserveSig]
    int GetZoneAttributes(uint dwZone,
                          ref ZoneAttributes pZoneAttributes);
   
    [PreserveSig]
    int SetZoneAttributes(uint dwZone,
                          ref ZoneAttributes pZoneAttributes);
   
    [PreserveSig]
    int GetZoneCustomPolicy(uint dwZone,
                            ref Guid guidKey,
                            out IntPtr ppPolicy,
                            ref uint pcbPolicy,
                            uint urlZoneReg);
   
    [PreserveSig]
    int SetZoneCustomPolicy(uint dwZone,
                            ref Guid guidKey,
                            IntPtr pPolicy,
                            uint cbPolicy,
                            uint urlZoneReg);
   
    [PreserveSig]
    int GetZoneActionPolicy(uint dwZone,
                            uint dwAction,
                            IntPtr pPolicy,
                            uint cbPolicy,
                            uint urlZoneReg);
   
    [PreserveSig]
    int SetZoneActionPolicy(uint dwZone,
                            uint dwAction,
                            IntPtr pPolicy,
                            uint cbPolicy,
                            uint urlZoneReg);
   
    [PreserveSig]
    int PromptAction(uint dwAction,
                     HandleRef hwndParent,
                     StringBuilder pwszUrl,
                     StringBuilder pwszText,
                     uint dwPromptFlags);
   
    [PreserveSig]
    int LogAction(uint dwAction,
                  StringBuilder pwszUrl,
                  StringBuilder pwszText,
                  uint dwLogFlags);

    [PreserveSig]
    int CreateZoneEnumerator(ref uint pdwEnum,
                             ref uint pdwCount,
                             uint dwFlags);

    [PreserveSig]
    int GetZoneAt(uint dwEnum,
                  uint dwIndex,
                  ref uint pdwZone);

    [PreserveSig]
    int DestroyZoneEnumerator(uint dwEnum);

    [PreserveSig]
    int CopyTemplatePoliciesToZone(uint dwTemplate,
                                   uint dwZone,
                                   uint dwReserved);
}

 

public sealed class InternetZoneManager : IDisposable
{
    private IInternetZoneManager izm;

    public InternetZoneManager()
    {
        this.izm = Activator.CreateInstance(Type.GetTypeFromCLSID(new Guid("7b8a2d95-0ac9-11d1-896c-00c04Fb6bfc4"))) as IInternetZoneManager;
    }

    public ZoneAttributes GetZoneAttributes(UrlZone zone)
    {
        ZoneAttributes za = new ZoneAttributes();

        if (this.izm.GetZoneAttributes((uint)zone, ref za) == 0)
        {
            return za;
        }

        throw new Exception();
    }

    public void SetZoneAttributes(UrlZone zone, ZoneAttributes attributes)
    {
        attributes.Size = (uint)Marshal.SizeOf(attributes);

        if (this.izm.SetZoneAttributes((uint)zone, ref attributes) != 0)
        {
            throw new Exception();
        }
    }

    public byte[] GetZoneActionPolicy(UrlZone zone, UrlAction action, UrlZoneReg zoneReg)
    {
        IntPtr pPolicy = Marshal.AllocHGlobal(8196);

        try
        {
            if (this.izm.GetZoneActionPolicy((uint)zone, (uint)action, pPolicy, 8196, (uint)zoneReg) == 0)
            {
                byte[] buff = new byte[8196];

                for (int i = 0; i < buff.Length; i++)
                {
                    buff[i] = Marshal.ReadByte(pPolicy, i);
                }

                return buff;
            }

            throw new Exception();
        }
        finally
        {
            Marshal.FreeHGlobal(pPolicy);
        }
    }

    public void Dispose()
    {
        if (this.izm != null)
        {
            Marshal.ReleaseComObject(this.izm);
            this.izm = null;
        }

        GC.SuppressFinalize(this);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值