首页 > 开发 > 综合 > 正文

C#中使用网络函数 (第一部分 用户函数)[翻译]

2024-07-21 02:26:52
字体:
来源:转载
供稿:网友
本文将着重介绍win32 api库中涉及网络管理的函数。首先我要讲一讲在.net框架中管理用户的两个方法,第一种是active directory方法,这种方法要求你安装active directory。如果你打算管理一个小网络上的用户,或者一个未安装active directory的独立工作站,为了管理用户而安装active directory显得有些不值得。另外一种方法则是这篇文章所要讲到的——使用win32 api库函数。在这篇文章中,我将介绍如何使用c# 添加、删除和修改用户和组,以及如何查询一个主机或网络的用户和网络信息。我们将用到以下函数
  • netuseradd
  • netuserdel
  • netusergetinfo
  • netusersetinfo
  • netuserchangepassword
  • netuserenum
  • netusergetlocalgroups

初始化

首先,正如许多c#开发者都知道的,我们要引入interopservices名字空间到我们的工程中,以便能够访问dll中的函数。这可以通过如下的代码片断实现:

///// 代码片断 1.0

using system.runtime.interopservices;

//// 代码结束

一旦我们拥有了访问权限,我们就可以将dll中的函数声明引入,我们将使用方法和结构体来关联它们。函数调用将在下面讨论:

使用c#添加一个用户

在网络函数中最重要的操作之一就是向一个网络或计算机添加一个用户。要通过c#添加一个用户,我们需要使用netadduser函数,该函数允许我们添加用户到特定的计算机,如果我们将servername置空,用户将被添加到本地计算机。在下面的代码片断中,我们将看到如何声明和使用netuseradd函数。我们在使用该函数前,需要定义一个结构体user_info_1,来作为netuseradd的参数。

///// 代码片断 1.1 声明 

 

 

 

 

 

 

[dllimport("netapi32.dll")]
extern static int netuseradd([marshalas(unmanagedtype.lpwstr)] string servername, int level, ref user_info_1 buf, int parm_err);
//// 代码结束

在使用代码时,你要注意到一点——尽管使用了最后一个int参数,你不需要知道返回的错误值。如果你一定要了解错误,需要修改代码。既然我们已经声明了我们要使用的外部api,我们应该声明结构体了。
/**////// 代码片断 1.2 结构体声明

[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;
}
 

/**/
//// 代码结束

在声明之后,我们就可以在我们的程序中调用该函数。下面是netuseradd的如何使用的代码:
/**////// 代码片断 1.3 netuseradd

user_info_1 newuser 
= new user_info_1(); // create an new instance of the user_info_1 struct

newuser.usri1_name 
= "usertestone"// 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 = "my first user made through c#"// comment on the user
newuser.usri1_script_path = null// we didn't supply a logon script path

if(netuseradd(null ,1 ,ref newuser, 0)!=0// if the call fails we get a non-zero value
{
messagebox.show(
"error adding user","error",messageboxbuttons.ok,messageboxicon.error);
}

/**///// 代码结束
 
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表