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