zoukankan      html  css  js  c++  java
  • SPS中模拟管理员登陆

    using System.Security.Principal;
    using System.Runtime.InteropServices;

    ===========================================应用===================================================================
       WindowsImpersonationContext wic 
    = null;
       
    try
       {
        wic 
    = CreateIdentity (Uid,Domain,Pwd).Impersonate();
        
        
    /*do something*/
        
    /*do something*/
       }
       
    catch(Exception ex)
       {
       }
       
    finally
       {
        
    if(wic != null) wic.Undo();
       }
    ===============================================================================================================

      
    #region 虚拟管理员用户
      
    public static WindowsIdentity CreateIdentity(string User, string Domain, string Password)
      {
       
    // The Windows NT user token.
       IntPtr tokenHandle = new IntPtr(0);

       
    const int LOGON32_PROVIDER_DEFAULT = 0;
       
    const int LOGON32_LOGON_NETWORK = 3;

       tokenHandle 
    = IntPtr.Zero;

       
    // Call LogonUser to obtain a handle to an access token.
       bool returnValue = LogonUser(User, Domain, Password, 
        LOGON32_LOGON_NETWORK, LOGON32_PROVIDER_DEFAULT,
        
    ref tokenHandle);

       
    if (false == returnValue)
       {
        
    int ret = Marshal.GetLastWin32Error();
        
    throw new Exception("LogonUser failed with error code: " +  ret);
       }

       System.Diagnostics.Debug.WriteLine(
    "Created user token: " + tokenHandle);

       
    //The WindowsIdentity class makes a new copy of the token.
       
    //It also handles calling CloseHandle for the copy.
       WindowsIdentity id = new WindowsIdentity(tokenHandle);
       CloseHandle(tokenHandle);
       
    return id;
      }
      [DllImport(
    "advapi32.dll", SetLastError=true)]
      
    private static extern bool LogonUser(String lpszUsername, String lpszDomain, String lpszPassword,
       
    int dwLogonType, int dwLogonProvider, ref IntPtr phToken);

      [DllImport(
    "kernel32.dll", CharSet=CharSet.Auto)]
      
    private extern static bool CloseHandle(IntPtr handle);

      
    #endregion 虚拟管理员用户

  • 相关阅读:
    Javascript笔记部分
    JQuery学习笔记(3)
    WPF中批量进行验证操作
    学习sqlserver的函数方法
    .NET学习笔记(2)
    Asp.Net页面生命周期
    ThreadLocal
    NIO内存映射
    CAS基础和原子类
    Java锁概念基础
  • 原文地址:https://www.cnblogs.com/focus/p/629652.html
Copyright © 2011-2022 走看看