[英]How do I find out what user my ASP.Net MVC application is running as?
[英]When deploying .NET applications - how do you find out what zone a share is in relative to the computer running the application?
使用 .NET 的任何版本,您如何找出特定共享屬於哪個區域。 我在識別我引用的 dll 所在的共享是否位於相對於運行我的 .NET 應用程序的某些用戶計算機的“內部網區域”或“互聯網”區域時遇到問題。 我懷疑這是一個問題,因為我在從某些機器上的共享訪問引用的 dll 時遇到問題,但在其他機器上卻沒有。 我怎樣才能知道 .NET 將該共享歸入哪個區域,以便我可以相應地調整權限?
以編程方式,您可以使用IInteretSecurty::MapZoneToUrl ,它是一個 COM 接口。 PInvoke.net 上有一個從 C# 和 Z6145AFC977C7 660083BDCDDEA91B7D09Z定義和調用它的示例。
我基於 pinvoke.net 示例和 MSDN 示例創建並測試了從 C# 調用 MapZoneToUrl 的更簡單示例。
url 需要以 http:// 或 https:// 開頭,否則您將收到 E_INVALIDARG 錯誤,所以我不知道檢查網絡是什么意思。
public static class InternetSecurityManager
{
private static Guid _CLSID_SecurityManager = new Guid("7b8a2d94-0ac9-11d1-896c-00c04fb6bfc4");
private static string[] ZoneNames = new[] { "Local", "Intranet", "Trusted", "Internet", "Restricted" };
public static string GetUrlZone(string url)
{
Type t = System.Type.GetTypeFromCLSID(_CLSID_SecurityManager);
IInternetSecurityManager securityManager = (IInternetSecurityManager)System.Activator.CreateInstance(t);
try
{
uint zone = 0;
int hResult = securityManager.MapUrlToZone(url, ref zone, 0);
if (hResult != 0)
throw new COMException("Error calling MapUrlToZone, HRESULT = " + hResult.ToString("x"), hResult);
if (zone < ZoneNames.Length)
return ZoneNames[zone];
return "Unknown - " + zone;
}
finally
{
Marshal.ReleaseComObject(securityManager);
}
}
}
[ComImport, GuidAttribute("79EAC9EE-BAF9-11CE-8C82-00AA004BA90B")]
[InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
public interface IInternetSecurityManager
{
[return: MarshalAs(UnmanagedType.I4)]
[PreserveSig]
int SetSecuritySite([In] IntPtr pSite);
[return: MarshalAs(UnmanagedType.I4)]
[PreserveSig]
int GetSecuritySite([Out] IntPtr pSite);
[return: MarshalAs(UnmanagedType.I4)]
[PreserveSig]
int MapUrlToZone([In, MarshalAs(UnmanagedType.LPWStr)] string pwszUrl,
ref UInt32 pdwZone, UInt32 dwFlags);
[return: MarshalAs(UnmanagedType.I4)]
[PreserveSig]
int GetSecurityId([MarshalAs(UnmanagedType.LPWStr)] string pwszUrl,
[MarshalAs(UnmanagedType.LPArray)] byte[] pbSecurityId,
ref UInt32 pcbSecurityId, uint dwReserved);
[return: MarshalAs(UnmanagedType.I4)]
[PreserveSig]
int ProcessUrlAction([In, MarshalAs(UnmanagedType.LPWStr)] string pwszUrl,
UInt32 dwAction, out byte pPolicy, UInt32 cbPolicy,
byte pContext, UInt32 cbContext, UInt32 dwFlags,
UInt32 dwReserved);
[return: MarshalAs(UnmanagedType.I4)]
[PreserveSig]
int QueryCustomPolicy([In, MarshalAs(UnmanagedType.LPWStr)] string pwszUrl,
ref Guid guidKey, ref byte ppPolicy, ref UInt32 pcbPolicy,
ref byte pContext, UInt32 cbContext, UInt32 dwReserved);
[return: MarshalAs(UnmanagedType.I4)]
[PreserveSig]
int SetZoneMapping(UInt32 dwZone,
[In, MarshalAs(UnmanagedType.LPWStr)] string lpszPattern,
UInt32 dwFlags);
[return: MarshalAs(UnmanagedType.I4)]
[PreserveSig]
int GetZoneMappings(UInt32 dwZone, out UCOMIEnumString ppenumString,
UInt32 dwFlags);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.