http://www.divakk.co.jp/aoyagi/csharp_tips_wbzone.html
来源:互联网 发布:数据核查情况汇报 编辑:程序博客网 时间:2024/04/30 00:25
http://www.divakk.co.jp/aoyagi/csharp_tips_wbzone.html
C# Tips
-AxWebBrowserのIInternetSecurityManager-
[トップ] [目次]
WebBrowserコントロールのセキュリティ設定
VisualStudio.NETにあるMicrosoft Web Browserコントロール(AxWebBrowser)のセキュリティ関係を調整する方法です。
ちなみに、Microsoft Web Browserコントロールはshdocvw.dll(ActiveXコントロール)をラップしているだけです。なので、AxWebBrowserの細かい制御はCOMを使う必要があります。
COM.cs
以下で使うCOMのインターフェースやら#defineやらをC#で使えるようにしたソースです。長いのでファイルを置いておきます。
COM.cs
Formにインターフェースを実装する
まずは、VisualStudio.NETでFormを作って、そのFormにMicrosoft Web Browserコントロールを貼り付けてください。あとは、以下のようにインターフェースを継承するようにして、中身を実装してください。
using System;using System.Drawing;using System.Collections;using System.ComponentModel;using System.Windows.Forms;using System.Data;using System.Runtime.InteropServices;using ZoneTest;namespace ZoneTest{ public class Form1 : System.Windows.Forms.Form, COM.IServiceProviderForIInternetSecurityManager, COM.IInternetSecurityManager { : コンストラクタとかもろもろは省略 : private void Form1_Load(object sender, System.EventArgs e) { // ServiceProvider を関連付ける object obj = axWebBrowser1.GetOcx(); COM.IServiceProvider sp = obj as COM.IServiceProvider; object ops; sp.QueryService(ref COM.SID_SProfferService, ref COM.IID_IProfferService, out ops); COM.IProfferService ps = ops as COM.IProfferService; int cookie = 0; ps.ProfferService(ref COM.IID_IInternetSecurityManager, this, ref cookie); } #region IServiceProviderForIInternetSecurityManager メンバ int COM.IServiceProviderForIInternetSecurityManager.QueryService(ref Guid guidService, ref Guid riid, out COM.IInternetSecurityManager ppvObject) { ppvObject = null; if (guidService == COM.IID_IInternetSecurityManager) { ppvObject = this as COM.IInternetSecurityManager; return COM.S_OK; } return COM.E_NOINTERFACE; } #endregion #region IInternetSecurityManager メンバ int COM.IInternetSecurityManager.SetSecuritySite(COM.IInternetSecurityMgrSite pSite) { return COM.INET_E_DEFAULT_ACTION; } int COM.IInternetSecurityManager.GetSecuritySite(COM.IInternetSecurityMgrSite pSite) { return COM.INET_E_DEFAULT_ACTION; } int COM.IInternetSecurityManager.MapUrlToZone(String pwszUrl, out int pdwZone, int dwFlags) { pdwZone = 0; if (pwszUrl == "http://www.yahoo.co.jp/") { // サンプル:Yahoo! のトップページをローカルマシンゾーンにしてみる pdwZone = (int)COM.URLZONE.URLZONE_LOCAL_MACHINE; return COM.S_OK; } return COM.INET_E_DEFAULT_ACTION; } int COM.IInternetSecurityManager.GetSecurityId(string pwszUrl, byte[] pbSecurityId, ref uint pcbSecurityId, uint dwReserved) { return COM.INET_E_DEFAULT_ACTION; } int COM.IInternetSecurityManager.ProcessUrlAction(String pwszUrl, int dwAction, out byte pPolicy, int cbPolicy, byte pContext, int cbContext, int dwFlags, int dwReserved) { pPolicy = 0; if (dwAction == (int)COM.URLACTION_HTML_SUBMIT_FORMS_TO) { // サンプル:サブミットを拒否してみる pPolicy = (int)COM.URLPOLICY_DISALLOW; return COM.S_FALSE; } return COM.INET_E_DEFAULT_ACTION; } int COM.IInternetSecurityManager.QueryCustomPolicy(String pwszUrl, ref Guid guidKey, byte ppPolicy, int pcbPolicy, byte pContext, int cbContext, int dwReserved) { return COM.INET_E_DEFAULT_ACTION; } int COM.IInternetSecurityManager.SetZoneMapping(int dwZone, String lpszPattern, int dwFlags) { return COM.INET_E_DEFAULT_ACTION; } int COM.IInternetSecurityManager.GetZoneMappings(int dwZone, out UCOMIEnumString ppenumString, int dwFlags) { ppenumString = null; return COM.INET_E_DEFAULT_ACTION; } #endregion }}
Form1のコード
ちょっとした解説
まずはFormにIServiceProviderとIInternetSecurityManagerを実装するように、これらを継承元として追加します。もちろん、Formに実装しなくてはいけないわけではないので別クラスにわけても構いません。
ここでちょっと注意。
IServiceProvider.QueryServiceメソッドは、ほんとうなら
int QueryService(ref Guid guidService, ref Guid riid, [MarshalAs(UnmanagedType.Interface)] out object ppvObject);
としたいんです。けど、3番目の引数がobjectだとどうしてもうまく動きませんでした。そこで、仕方ないので3番目の引数の型をIInternetSecurityManagerにしたIServiceProviderForIInternetSecurityManagerも定義しています(COM.cs参照)。そして、FormにはIServiceProviderではなく、IServiceProviderForIInternetSecurityManagerのほうを継承元としています。
(QueryInterfaceしてくれるんならobjectでも良さそうなものだけど、それだとどうしてもIInternetSecurityManagerだと認識してくれなかった)
続いて、Form_LoadイベントでIServiceProviderをFormに問い合わせにくるように登録してやります。
あとは、IServiceProviderForIInternetSecurityManagerとIInternetSecurityManagerを実装するだけです。
IServiceProviderForIInternetSecurityManagerにはQueryServiceメソッドしかありませんし、中身も上記のまんまで十分でしょう。
IInternetSecurityManagerにはいろいろとメソッドがありますが、重要なのはMapUrlToZoneとProcessUrlActionの各メソッドでしょう。
MapUrlToZoneメソッドでは、URLがどのゾーンなのかを返してやります。URLZONE列挙体はCOM.csに入ってます。
ProcessUrlActionメソッドでは、各Actionを許可するか拒否するかを返します。Actionは "URLACTION_" で始まるint値です。これも一通りCOM.csに入ってます。許可するかどうかはpPolicyにURLPOLICY_ALLOW、URLPOLICY_DISALLOWのいずれかをセットしてやります。 URLPOLICY_QUERYとかもありますが、どういう挙動になるのかは試してません。
ちなみに、これらの値はurlmon.hからコピーしてきてC#の文法にあわせただけです(コメントとかもそのまんま)。
[トップ] [目次]
青柳 臣一
2003/09/17
- http://www.divakk.co.jp/aoyagi/csharp_tips_wbzone.html
- PL/SQL学习网站(日文)http://www.istudy.ne.jp/training/serial/plsql/index.html
- http://www.md5decrypter.co.uk/
- 使用google搜索时候输入域名www.google.com后跳入https://www.google.co.jp/的解决方法
- javac 命令介绍(转载至http://www.iplab.cs.tsukuba.ac.jp/liuxj/jdk1.2/zh/docs/tooldocs/win32/javac.html)
- The components of a formal use case presentation (from: http://www.ibm.com/developerworks/library/co-design5.html)
- http://www.dna-software.co.uk/ DNA for Windows!
- 博客迁移到 http://www.henix-blog.co.cc/
- google比较稳定的地址http://www.google.co.nz
- http://www.sallystocks.co.uk/duoreview01.asp KlNdQ
- JP Morgan Chase & Co. Interview Prepration(1)
- 注册hotmail.co .jp后缀的hotmail邮箱
- jp.co.taosoftware.android.analogclock.rita-1.apk
- <html lang="ja-JP" prefix="og: http://ogp.me/ns# website: http://ogp.me/ns/website#">
- http://www.huihoo.com/telecom/sip_rtp_stack.html
- http://www.bjug.org/20050524.html
- http://www.sysinternals.com/index.html
- http://www.xrss.cn/Info/5682.Html
- aaaa
- 第六章 可以工作的类
- http://blogs.msdn.com/b/ie/archive/2005/01/26/361228.aspx
- 从MSN Space到WordPress,从WordPress到CSDN
- 成功需要有才能和远在星辰之外的运气
- http://www.divakk.co.jp/aoyagi/csharp_tips_wbzone.html
- 在CView类的构造函数,OnCreate,或OnInitialUpDate中进行初始化有何不同?
- SQL中的CASE WHEN用法
- ACE_wrappers研究之一:引言
- 枚举
- discuzX2论坛 flash 上传略解
- jquery重写友好提示对话框
- http://csharp-online.net/forum/viewtopic.php?t=352
- http://webcache.googleusercontent.com/search?q=cache:Xh34UJ65wvcJ:http://ja.w3support.net/index.php%