如何在c#程式中模擬域帳戶進行登入操作 (轉載)
阿新 • • 發佈:2018-11-28
程式碼加註釋,由於在.NET Core中也是支援PInvoke呼叫Win32庫的,所以下面的程式碼也適用於.NET Core程式:
using System; using System.IO; using System.Runtime.InteropServices; using System.Security.Principal; namespace NetCorePrincipal { internal static class WinLogonHelper { /// <summary> /// 模擬windows登入域/// </summary> [DllImport("advapi32.DLL", SetLastError = true)] public static extern int LogonUser(string lpszUsername, string lpszDomain, string lpszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken); } class Program { static void Main(string[] args) { IntPtr admin_token = default(IntPtr); WindowsIdentity wid_admin = null; WindowsImpersonationContext wic = null; //在程式中模擬域帳戶登入 if (WinLogonHelper.LogonUser("uid", "serverdomain", "pwd", 9, 0, ref admin_token) != 0) {using (wid_admin = new WindowsIdentity(admin_token)) { using (wic = wid_admin.Impersonate()) { //假定要操作的檔案路徑是10.0.250.11上的d:\txt.txt檔案可以這樣操作 FileInfo file = new FileInfo(@"\\10.0.250.11\d$\txt.txt"); //想做什麼操作就可以做了 } } } } } }
模擬域帳戶之後,就有了模擬使用者的許可權,這裡千萬要注意安全!