1 namespace Microsoft.Win32 { 2 using System; 3 using System.Net; 4 using System.Globalization; 5 using System.IO; 6 using System.Security.Permissions; 7 using System.Security.Principal; 8 using System.ComponentModel; 9 using System.Text; 10 using System.Runtime.InteropServices; 11 12 // IID_IInternetSecurityManager = 79eac9ee-baf9-11ce-8c82-00aa004ba90b 13 // IID_IInternetZoneManager = 79eac9ef-baf9-11ce-8c82-00aa004ba90b 14 // CLSID_InternetSecurityManager= 7b8a2d94-0ac9-11d1-896c-00c04Fb6bfc4 15 // CLSID_InternetZoneManager = 7b8a2d95-0ac9-11d1-896c-00c04Fb6bfc4 16 17 [ComImport, ComVisible(false), Guid("7b8a2d94-0ac9-11d1-896c-00c04Fb6bfc4")] 18 internal class InternetSecurityManager { 19 20 } 21 22 [ComImport, ComVisible(false), Guid("79eac9ee-baf9-11ce-8c82-00aa004ba90b"), System.Runtime.InteropServices.InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] 23 internal interface IInternetSecurityManager { SetSecuritySite( void *pSite)24 unsafe void SetSecuritySite( void *pSite); GetSecuritySite( void **ppSite)25 unsafe void GetSecuritySite( /* [out] */ void **ppSite); 26 27 [System.Security.SuppressUnmanagedCodeSecurity] MapUrlToZone( [In, MarshalAs(UnmanagedType.BStr)] string pwszUrl, [Out] out int pdwZone, [In] int dwFlags)28 void MapUrlToZone( 29 [In, MarshalAs(UnmanagedType.BStr)] 30 string pwszUrl, 31 [Out] out int pdwZone, 32 [In] int dwFlags); 33 GetSecurityId( string pwszUrl, byte *pbSecurityId, int *pcbSecurityId, int dwReserved)34 unsafe void GetSecurityId( /* [in] */ string pwszUrl, 35 /* [size_is][out] */ byte *pbSecurityId, 36 /* [out][in] */ int *pcbSecurityId, 37 /* [in] */ int dwReserved); 38 ProcessUrlAction( string pwszUrl, int dwAction, byte *pPolicy, int cbPolicy, byte *pContext, int cbContext, int dwFlags, int dwReserved)39 unsafe void ProcessUrlAction( 40 /* [in] */ string pwszUrl, 41 /* [in] */ int dwAction, 42 /* [size_is][out] */ byte *pPolicy, 43 /* [in] */ int cbPolicy, 44 /* [in] */ byte *pContext, 45 /* [in] */ int cbContext, 46 /* [in] */ int dwFlags, 47 /* [in] */ int dwReserved); 48 QueryCustomPolicy( string pwszUrl, void *guidKey, byte **ppPolicy, int *pcbPolicy, byte *pContext, int cbContext, int dwReserved)49 unsafe void QueryCustomPolicy( 50 /* [in] */ string pwszUrl, 51 /* [in] */ /*REFGUID*/ void *guidKey, 52 /* [size_is][size_is][out] */ byte **ppPolicy, 53 /* [out] */ int *pcbPolicy, 54 /* [in] */ byte *pContext, 55 /* [in] */ int cbContext, 56 /* [in] */ int dwReserved); 57 SetZoneMapping( int dwZone, string lpszPattern, int dwFlags)58 unsafe void SetZoneMapping( /* [in] */ int dwZone, /* [in] */ string lpszPattern, /* [in] */ int dwFlags); 59 GetZoneMappings( int dwZone, void **ppenumString, int dwFlags)60 unsafe void GetZoneMappings( /* [in] */ int dwZone, /* [out] */ /*IEnumString*/ void **ppenumString, /* [in] */ int dwFlags); 61 } 62 63 public class IntranetZoneCredentialPolicy: ICredentialPolicy 64 { 65 private const int URLZONE_INTRANET = 1; 66 IInternetSecurityManager _ManagerRef; 67 IntranetZoneCredentialPolicy()68 public IntranetZoneCredentialPolicy() 69 { 70 ExceptionHelper.ControlPolicyPermission.Demand(); 71 _ManagerRef = (IInternetSecurityManager)new InternetSecurityManager(); 72 } 73 74 // 75 // Make an interop call into UriMon 76 // authModule and credential parameters are not considered 77 // ShouldSendCredential(Uri challengeUri, WebRequest request, NetworkCredential credential, IAuthenticationModule authModule)78 public virtual bool ShouldSendCredential(Uri challengeUri, WebRequest request, NetworkCredential credential, IAuthenticationModule authModule) 79 { 80 int pdwZone; 81 _ManagerRef.MapUrlToZone(challengeUri.AbsoluteUri, out pdwZone, 0); 82 return pdwZone == URLZONE_INTRANET; 83 } 84 } 85 } 86 87 88