我已经设法让它与 IInternetSecurityManager 一起工作,这是一项由 webbrowser 控件的站点返回的服务。
无论网址如何,我都通过在 ProcessUrlAction 方法中返回 Ok 来使其正常工作。
我根据我在互联网上找到的一些内容将其抄录下来,因此如果有人能指出如何清理它并将其限制在 Intranet 中,那么我会将其标记为答案。
我想我需要在 ProcessUrlAction 中检查 url,并根据其内容返回 Ok 或 Default。
代码如下:
Friend Class MainBrowser
Inherits WebBrowser
Private _Site As WebBrowserSite
Protected Overrides Function CreateWebBrowserSiteBase() As WebBrowserSiteBase
If _Site Is Nothing Then
_Site = New WebBrowserSite(Me)
End If
Return _Site
End Function
Protected Class WebBrowserSite
Inherits System.Windows.Forms.WebBrowser.WebBrowserSite
Implements NativeInterfaces.IServiceProvider
Implements NativeInterfaces.IInternetSecurityManager
Private Const INET_E_DEFAULT_ACTION As Integer = &H800C0011
Private Const S_OK As Integer = 0
Private Const E_NOINTERFACEX As Integer = &H80004002
Private Shared IID_IInternetSecurityManager As Guid = Marshal.GenerateGuidForType(GetType(NativeInterfaces.IInternetSecurityManager))
Private Owner As MainBrowser
Public Sub New(ByVal owner As MainBrowser)
MyBase.New(owner)
owner = owner
End Sub
Public Function QueryService(ByRef guidService As System.Guid, ByRef riid As System.Guid, ByRef ppvObject As System.IntPtr) As Integer Implements NativeInterfaces.IServiceProvider.QueryService
If guidService = IID_IInternetSecurityManager AndAlso riid = IID_IInternetSecurityManager Then
ppvObject = Marshal.GetComInterfaceForObject(Me, GetType(NativeInterfaces.IInternetSecurityManager))
Return S_OK
End If
ppvObject = IntPtr.Zero
Return E_NOINTERFACEX
End Function
Public Function GetSecurityId(ByVal pwszUrl As String, ByVal pbSecurityId As System.IntPtr, ByRef pcbSecurityId As UInteger, ByRef dwReserved As UInteger) As Integer Implements NativeInterfaces.IInternetSecurityManager.GetSecurityId
Return INET_E_DEFAULT_ACTION
End Function
Public Function GetSecuritySite(ByRef pSite As System.IntPtr) As Integer Implements NativeInterfaces.IInternetSecurityManager.GetSecuritySite
pSite = IntPtr.Zero
Return INET_E_DEFAULT_ACTION
End Function
Public Function SetSecuritySite(ByVal pSite As System.IntPtr) As Integer Implements NativeInterfaces.IInternetSecurityManager.SetSecuritySite
Return INET_E_DEFAULT_ACTION
End Function
Public Function MapUrlToZone(ByVal pwszUrl As String, ByRef pdwZone As UInteger, ByVal dwFlags As UInteger) As Integer Implements NativeInterfaces.IInternetSecurityManager.MapUrlToZone
pdwZone = 0 // URLZONE_LOCAL_MACHINE ?
Return S_OK // no difference
// Return INET_E_DEFAULT_ACTION
End Function
Public Function ProcessUrlAction(ByVal pwszUrl As String, ByVal dwAction As UInteger, ByVal pPolicy As System.IntPtr, ByVal cbPolicy As UInteger, ByVal pContext As System.IntPtr, ByVal cbContext As UInteger, ByVal dwFlags As UInteger, ByVal dwReserved As UInteger) As Integer Implements NativeInterfaces.IInternetSecurityManager.ProcessUrlAction
// Return INET_E_DEFAULT_ACTION
Return S_OK // This is what made the difference
End Function
Public Function QueryCustomPolicy(ByVal pwszUrl As String, ByRef guidKey As System.Guid, ByRef ppPolicy As System.IntPtr, ByRef pcbPolicy As UInteger, ByVal pContext As System.IntPtr, ByVal cbContext As UInteger, ByVal dwReserved As UInteger) As Integer Implements NativeInterfaces.IInternetSecurityManager.QueryCustomPolicy
ppPolicy = IntPtr.Zero
pcbPolicy = 0
Return INET_E_DEFAULT_ACTION
End Function
Public Function SetZoneMapping1(ByVal dwZone As UInteger, ByVal lpszPattern As String, ByVal dwFlags As UInteger) As Integer Implements NativeInterfaces.IInternetSecurityManager.SetZoneMapping
Return INET_E_DEFAULT_ACTION
End Function
Public Function GetZoneMappings(ByVal dwZone As UInteger, ByRef ppenumString As System.Runtime.InteropServices.ComTypes.IEnumString, ByVal dwFlags As UInteger) As Integer Implements NativeInterfaces.IInternetSecurityManager.GetZoneMappings
ppenumString = Nothing
Return INET_E_DEFAULT_ACTION
End Function
End Class
End Class
接口:
<ComImport(), InterfaceType(ComInterfaceType.InterfaceIsIUnknown), Guid("6d5140c1-7436-11ce-8034-00aa006009fa")> _
Interface IServiceProvider
<PreserveSig()> _
Function QueryService(ByRef guidService As Guid, ByRef riid As Guid, ByRef ppvObject As IntPtr) As <MarshalAs(UnmanagedType.I4)> Integer
End Interface
<ComImport(), GuidAttribute("79EAC9EE-BAF9-11CE-8C82-00AA004BA90B"), InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)> _
Public Interface IInternetSecurityManager
<PreserveSig()> _
Function SetSecuritySite(<[In]()> ByVal pSite As IntPtr) As <MarshalAs(UnmanagedType.I4)> Integer
<PreserveSig()> _
Function GetSecuritySite(ByRef pSite As IntPtr) As <MarshalAs(UnmanagedType.I4)> Integer
<PreserveSig()> _
Function MapUrlToZone(<[In](), MarshalAs(UnmanagedType.LPWStr)> ByVal pwszUrl As String, ByRef pdwZone As UInt32, <[In]()> ByVal dwFlags As UInt32) As <MarshalAs(UnmanagedType.I4)> Integer
<PreserveSig()> _
Function GetSecurityId(<[In](), MarshalAs(UnmanagedType.LPWStr)> ByVal pwszUrl As String, <Out()> ByVal pbSecurityId As IntPtr, <[In](), Out()> ByRef pcbSecurityId As UInt32, <[In]()> ByRef dwReserved As UInt32) As <MarshalAs(UnmanagedType.I4)> Integer
<PreserveSig()> _
Function ProcessUrlAction(<[In](), MarshalAs(UnmanagedType.LPWStr)> ByVal pwszUrl As String, ByVal dwAction As UInt32, ByVal pPolicy As IntPtr, ByVal cbPolicy As UInt32, ByVal pContext As IntPtr, ByVal cbContext As UInt32, _
ByVal dwFlags As UInt32, ByVal dwReserved As UInt32) As <MarshalAs(UnmanagedType.I4)> Integer
<PreserveSig()> _
Function QueryCustomPolicy(<[In](), MarshalAs(UnmanagedType.LPWStr)> ByVal pwszUrl As String, ByRef guidKey As Guid, ByRef ppPolicy As IntPtr, ByRef pcbPolicy As UInt32, ByVal pContext As IntPtr, ByVal cbContext As UInt32, _
ByVal dwReserved As UInt32) As <MarshalAs(UnmanagedType.I4)> Integer
<PreserveSig()> _
Function SetZoneMapping(ByVal dwZone As UInt32, <[In](), MarshalAs(UnmanagedType.LPWStr)> ByVal lpszPattern As String, ByVal dwFlags As UInt32) As <MarshalAs(UnmanagedType.I4)> Integer
<PreserveSig()> _
Function GetZoneMappings(<[In]()> ByVal dwZone As UInt32, ByRef ppenumString As ComTypes.IEnumString, <[In]()> ByVal dwFlags As UInt32) As <MarshalAs(UnmanagedType.I4)> Integer
End Interface