文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>(转)如何使用.NET操作本地用户组和用户

(转)如何使用.NET操作本地用户组和用户

时间:2010-12-14  来源:神一样的疯子

  [DllImport("Netapi32.dll")]
  extern static int NetLocalGroupAdd([MarshalAs(UnmanagedType.LPWStr)] string servername, int level, ref LOCALGROUP_INFO_1 buf, int parm_err);

  [DllImport("Netapi32.dll")]
  extern static int NetLocalGroupAddMembers([MarshalAs(UnmanagedType.LPWStr)] string servername,[MarshalAs(UnmanagedType.LPWStr)] string groupname,
   int level, ref LOCALGROUP_MEMBERS_INFO_3 buf, int totalentries);

  [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)]
  public struct LOCALGROUP_MEMBERS_INFO_3
  {
   public string domainandname; //<DomainName>\<AccountName> //lgrmi3_domainandname
  }

  [DllImport("Netapi32.dll")]
  extern static int NetUserDel([MarshalAs(UnmanagedType.LPWStr)] string servername, [MarshalAs(UnmanagedType.LPWStr)] string username);

  [DllImport("Netapi32.dll")]
  extern static int NetUserGetInfo([MarshalAs(UnmanagedType.LPWStr)] string servername,[MarshalAs(UnmanagedType.LPWStr)] string username,int level,out IntPtr bufptr);
 
  [DllImport("Netapi32.dll")]
  extern static int NetUserSetInfo([MarshalAs(UnmanagedType.LPWStr)] string servername,[MarshalAs(UnmanagedType.LPWStr)] string username,int level,ref USER_INFO_1 buf, int error);
  
  [DllImport("Netapi32.dll")]
  extern static int NetUserChangePassword([MarshalAs(UnmanagedType.LPWStr)] string domainname,[MarshalAs(UnmanagedType.LPWStr)] string username,[MarshalAs(UnmanagedType.LPWStr)] string oldpassword,[MarshalAs(UnmanagedType.LPWStr)] string newpassword);
 
  [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)]
  public struct USER_INFO_0
  {
   public String Username;
  }
 
  [DllImport("Netapi32.dll")]
  extern static int NetUserEnum([MarshalAs(UnmanagedType.LPWStr)] string servername, int level, int filter, out IntPtr bufptr, int prefmaxlen, out int entriesread, out int totalentries, out int resume_handle);
 
  [DllImport("Netapi32.dll")]
  extern static int NetApiBufferFree(IntPtr Buffer);

  [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)]
  public struct LOCALGROUP_USERS_INFO_0
  {
   public string groupname;
  }
 
  [DllImport("Netapi32.dll")]
  public extern static int NetUserGetLocalGroups([MarshalAs(UnmanagedType.LPWStr)] string servername,[MarshalAs(UnmanagedType.LPWStr)] string username, int level, int flags, out IntPtr bufptr, int prefmaxlen, out int entriesread, out int totalentries);

  [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)]
  public struct USER_INFO_1
  {
   public string usri1_name; 
   public string usri1_password; 
   public int usri1_password_age; 
   public int usri1_priv; 
   public string usri1_home_dir; 
   public string comment; 
   public int usri1_flags; 
   public string usri1_script_path;
  } 

  [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)]
  public struct LOCALGROUP_INFO_1
  {
   public string grpi1_name;
   public string grpi1_comment;
  }

  /// <summary>
  /// 添加一个用户,添加失败后返回非0 。
  /// </summary>
  /// <param name="serverName">机器名称,如果是本机,请设置为null</param>
  /// <param name="userName"></param>
  /// <param name="password"></param>
  /// <param name="strComment"></param>
  public void AddUser(string serverName,string userName,string password,string strComment)
  {
   USER_INFO_1 NewUser = new USER_INFO_1(); //创建一个USER_INFO_1实例
 
   NewUser.usri1_name = userName; // Allocates the username
   NewUser.usri1_password = password; // allocates the password
   NewUser.usri1_priv = 1; // Sets the account type to USER_PRIV_USER
   NewUser.usri1_home_dir = null; // We didn't supply a Home Directory
   NewUser.comment = strComment; // Comment on the User
   NewUser.usri1_script_path = null; // We didn't supply a Logon Script Path
 
   if(NetUserAdd(serverName,1 ,ref NewUser, 0)!=0) //添加失败后返回非0
   {
    MessageBox.Show("Error Adding User","Error",MessageBoxButtons.OK,MessageBoxIcon.Error);
   }
  }

  /// <summary>
  /// 添加一个用户,添加失败后返回非0 。
  /// </summary>
  /// <param name="serverName">机器名称,如果是本机,请设置为null</param>
  /// <param name="groupName"></param>
  /// <param name="strComment"></param>
  public void AddGroup(string serverName,string groupName,string strComment)
  {
   LOCALGROUP_INFO_1 NewGroup=new LOCALGROUP_INFO_1();

   NewGroup.grpi1_name=groupName;
   NewGroup.grpi1_comment=strComment;
   if(NetLocalGroupAdd(serverName,1 ,ref NewGroup, 0)!=0) //添加失败后返回非0
   {
    MessageBox.Show("Error Adding Group","Error",MessageBoxButtons.OK,MessageBoxIcon.Error);
   }
  }

  /// <summary>
  /// 在本地组中添加一个用户成员,添加失败后返回非0 。
  /// </summary>
  /// <param name="serverName">机器名称,如果是本机,请设置为null</param>
  /// <param name="groupName"></param>
  /// <param name="strComment"></param>
  public void GroupAddMembers(string serverName,string groupName,string userName)
  {
   LOCALGROUP_MEMBERS_INFO_3 NewMember=new LOCALGROUP_MEMBERS_INFO_3();
   NewMember.domainandname=userName;
   if(NetLocalGroupAddMembers(serverName,groupName,3 ,ref NewMember, 1)!=0) //添加失败后返回非0
   {
    MessageBox.Show("Error Adding Group Member","Error",MessageBoxButtons.OK,MessageBoxIcon.Error);
   }
  }

  
  /// <summary>
  /// 删除一个用户,同时将删除这个用户在任何组中的关系,删除失败后返回非0。
  /// </summary>
  /// <param name="serverName">机器名称,如果是本机,请设置为null</param>
  /// <param name="userName"></param>
  public void RemoveUser(string serverName,string userName)
  {
   if(NetUserDel(serverName ,userName)!=0) //删除失败后返回非0
   {
    MessageBox.Show("Error Removing User","Error",MessageBoxButtons.OK,MessageBoxIcon.Error);
   }
  }

  /// <summary>
  /// 获取一个用户的信息,失败后返回非0。
  /// </summary>
  /// <param name="serverName">机器名称,如果是本机,请设置为null</param>
  /// <param name="userName"></param>
  public void GetUserInfo(string serverName,string userName)
  {
   IntPtr bufPtr;
   USER_INFO_1 User = new USER_INFO_1();
   if(NetUserGetInfo(serverName, userName,1,out bufPtr)!=0)
   {
    MessageBox.Show("Error Getting User Info","Error",MessageBoxButtons.OK,MessageBoxIcon.Error);
   }
   User = (USER_INFO_1)Marshal.PtrToStructure(bufPtr, typeof(USER_INFO_1)); 
   MessageBox.Show("Users Name: " + User.usri1_name + "\nUsers Comments: " + User.comment + "\nUsers Privilege Level: " + User.usri1_priv + "\nUsers flags: " + User.usri1_flags+ "\nUsers home dir: " + User.usri1_home_dir);
  }

  /// <summary>
  /// 修改一个用户,失败后返回非0。这儿我只做了简的测试,如果要修改用户更多的信息,请伟明加上其它信息。
  /// </summary>
  /// <param name="serverName">机器名称,如果是本机,请设置为null</param>
  /// <param name="userName"></param>
  public void ModifyUser(string serverName,string userName)
  {
   USER_INFO_1 Update = new USER_INFO_1();
   Update.comment = "This is Our C# Updated Comment";
   //Update.usri1_priv = 2; // Note that this can only be obtained programmatically using NetUserGetInfo
   if(NetUserSetInfo(serverName, userName,1,ref Update,0)!=0)
   {
    MessageBox.Show("Error Setting User Info","Error",MessageBoxButtons.OK,MessageBoxIcon.Error);
   }
  }

  /// <summary>
  /// 修改一个用户的密码,失败后返回非0。
  /// </summary>
  /// <param name="serverName">机器名称,如果是本机,请设置为null</param>
  /// <param name="userName"></param>
  public void ModifyUserPassword(string serverName,string userName,string oldPassword,string newPassword)
  {
   if(NetUserChangePassword(serverName, userName, oldPassword, newPassword)!=0)
   {
    MessageBox.Show("Error Changing User Password","Error",MessageBoxButtons.OK,MessageBoxIcon.Error);
   }
  }

  /// <summary>
  /// 获取机器上所有的用户信息。
  /// </summary>
  /// <param name="serverName">机器名称,如果是本机,请设置为null</param>
  public void GetAllUserInfo(string serverName)
  {
   int EntriesRead;
   int TotalEntries;
   int Resume;
   IntPtr bufPtr;
 
   NetUserEnum(serverName, 0, 2, out bufPtr, -1, out EntriesRead, out TotalEntries, out Resume);
    if(EntriesRead> 0)
   {
    USER_INFO_0[] Users = new USER_INFO_0[EntriesRead];
    IntPtr iter = bufPtr;
    for(int i=0; i < EntriesRead; i++)
    {
     Users[i] = (USER_INFO_0)Marshal.PtrToStructure(iter, typeof(USER_INFO_0)); 
     iter = (IntPtr)((int)iter + Marshal.SizeOf(typeof(USER_INFO_0)));
     MessageBox.Show(Users[i].Username);
    }
    NetApiBufferFree(bufPtr);
   }
  }

  /// <summary>
  /// 获取机器上某用户所属于的本地组信息。
  /// </summary>
  /// <param name="serverName">机器名称,如果是本机,请设置为null</param>
  /// <param name="userName"></param>
  public void UserInLocalGroups(string serverName,string userName)
  {
   int EntriesRead;
   int TotalEntries;
   IntPtr bufPtr;
 
   NetUserGetLocalGroups(serverName, userName,0,0,out bufPtr,1024,out EntriesRead, out TotalEntries);
 
   if(EntriesRead> 0)
   {
    LOCALGROUP_USERS_INFO_0[] RetGroups = new LOCALGROUP_USERS_INFO_0[EntriesRead];
    IntPtr iter = bufPtr;
    for(int i=0; i < EntriesRead; i++)
    {
     RetGroups[i] = (LOCALGROUP_USERS_INFO_0)Marshal.PtrToStructure(iter, typeof(LOCALGROUP_USERS_INFO_0)); 
     iter = (IntPtr)((int)iter + Marshal.SizeOf(typeof(LOCALGROUP_USERS_INFO_0)));
     MessageBox.Show(RetGroups[i].groupname);
    }
    NetApiBufferFree(bufPtr);
   }
  }
  
 }
}

相关阅读 更多 +
排行榜 更多 +
我的武侠梦手游下载

我的武侠梦手游下载

角色扮演 下载
快乐连连看下载免费版

快乐连连看下载免费版

休闲益智 下载
泛滥死者布道手机版下载

泛滥死者布道手机版下载

角色扮演 下载