asp.net實(shí)現(xiàn)訪問(wèn)局域網(wǎng)共享目錄下文件的解決方法
本文以實(shí)例講述了asp.net實(shí)現(xiàn)訪問(wèn)局域網(wǎng)共享目錄下文件的解決方法,完整代碼如下所示:
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.IO;
using System.Security.Principal;
using System.Runtime.InteropServices;
public partial class _Default : System.Web.UI.Page
{
public const int LOGON32_LOGON_INTERACTIVE = 2;
public const int LOGON32_PROVIDER_DEFAULT = 0;
WindowsImpersonationContext impersonationContext;
[DllImport("advapi32.dll")]
public static extern int LogonUserA(String lpszUserName,
String lpszDomain,
String lpszPassword,
int dwLogonType,
int dwLogonProvider,
ref IntPtr phToken);
[DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern int DuplicateToken(IntPtr hToken,
int impersonationLevel,
ref IntPtr hNewToken);
[DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern bool RevertToSelf();
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
public static extern bool CloseHandle(IntPtr handle);
public void Page_Load(Object s, EventArgs e)
{
if (impersonateValidUser("lucas", "Workgroup", "lcas"))
{
string path = @"http://zhehui001/lu";
foreach (string f in Directory.GetFiles(path))
{
Response.Write(f);
}
undoImpersonation();
}
else
{
//Your impersonation failed. Therefore, include a fail-safe mechanism here.
}
}
private bool impersonateValidUser(String userName, String domain, String password)
{
WindowsIdentity tempWindowsIdentity;
IntPtr token = IntPtr.Zero;
IntPtr tokenDuplicate = IntPtr.Zero;
if (RevertToSelf())
{
if (LogonUserA(userName, domain, password, LOGON32_LOGON_INTERACTIVE,
LOGON32_PROVIDER_DEFAULT, ref token) != 0)
{
if (DuplicateToken(token, 2, ref tokenDuplicate) != 0)
{
tempWindowsIdentity = new WindowsIdentity(tokenDuplicate);
impersonationContext = tempWindowsIdentity.Impersonate();
if (impersonationContext != null)
{
CloseHandle(token);
CloseHandle(tokenDuplicate);
return true;
}
}
}
}
if (token != IntPtr.Zero)
CloseHandle(token);
if (tokenDuplicate != IntPtr.Zero)
CloseHandle(tokenDuplicate);
return false;
}
private void undoImpersonation()
{
impersonationContext.Undo();
}
}
相關(guān)文章
ASP.NET(C#)中操作SQLite數(shù)據(jù)庫(kù)實(shí)例
最近項(xiàng)目中有使用到SQLite數(shù)據(jù)庫(kù),于是查找資料,編寫了一個(gè)ASP.NET基于C#語(yǔ)言的SQLite數(shù)據(jù)庫(kù)操作實(shí)例.大家看代碼就可以看懂了,和以往使用ADO.NET操作SQL數(shù)據(jù)庫(kù)類似.2009-12-12
VS2005 水晶報(bào)表在時(shí)部署時(shí)遇到的問(wèn)題
前幾天在服務(wù)器上部署一個(gè)B/S程序的時(shí)候,程序中的水晶報(bào)表部分出了些問(wèn)題,報(bào)錯(cuò):Server Error in '/' Application.2010-02-02
Asp.net MVC 對(duì)所有用戶輸入的字符串字段做Trim處理的方法
這篇文章主要介紹了Asp.net MVC 如何對(duì)所有用戶輸入的字符串字段做Trim處理,需要的朋友可以參考下2017-06-06
.net實(shí)現(xiàn)網(wǎng)站用戶登錄認(rèn)證
本文給大家介紹的是.net實(shí)現(xiàn)網(wǎng)站用戶登錄認(rèn)證的方法和實(shí)例,都非常的簡(jiǎn)單實(shí)用,需要的小伙伴可以參考下。2015-11-11
.Net 下區(qū)別使用 ByRef/ByVal 的重要性 分享
這篇文章介紹了.Net 下區(qū)別使用 ByRef/ByVal 的重要性,有需要的朋友可以參考一下2013-07-07
C#中使用SQLite數(shù)據(jù)庫(kù)的方法介紹
SQLite是一個(gè)開源的輕量級(jí)的桌面型數(shù)據(jù)庫(kù),它將幾乎所有數(shù)據(jù)庫(kù)要素(包括定義、表、索引和數(shù)據(jù)本身)都保存在一個(gè)單一的文件中。SQLite用C編寫實(shí)現(xiàn),它在內(nèi)存消耗、文件體積、操作性能、簡(jiǎn)單性方面都有不錯(cuò)的表現(xiàn)2012-01-01
ADO.Net對(duì)oracle數(shù)據(jù)庫(kù)操作的實(shí)例代碼
ADO.Net對(duì)oracle數(shù)據(jù)庫(kù)操作的實(shí)例代碼,需要的朋友可以參考一下2013-06-06

