C#程序中模拟帐号登录

来源:互联网 发布:上海淘宝美工兼职工资 编辑:程序博客网 时间:2024/05/29 12:07

前段时间在移动那里服务器A要获取服务器B上的文件,无奈部署在服务器A上的程序是windows服务,不能通过“\\10.246.*.*\download”这样的类似路径来获取,这样获取的话程序总是会判断出路径下的文件不存在,因为服务是没有帐号权限的,故要虚拟一个有权限连到服务器B的帐号出来获取文件,虚拟程序代码如下:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Principal;
using System.Runtime.InteropServices;
using System.IO;
 
namespace ConsoleApplication3
{
    internal static class WinLogonHelper
    {
        /// <summary>
        /// 模拟windows登录域
        ///http://www.cnblogs.com/yukaizhao/
        /// </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");
                        //想做什么操作就可以做了
                    }
                }
            }
        }
    }
}

原创粉丝点击