C# 運用API操作系統用戶

1.首先引用

using System.Runtime.InteropServices;
2.html代碼
<HTML>
    
<HEAD>
        
<title>WebForm3</title>
        
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
        
<meta name="CODE_LANGUAGE" Content="C#">
        
<meta name="vs_defaultClientScript" content="JavaScript">
        
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
    
</HEAD>
    
<body MS_POSITIONING="GridLayout">
        
<form id="Form1" method="post" runat="server">
            
<asp:Button id="Button1" style="Z-INDEX: 101; LEFT: 16px; POSITION: absolute; TOP: 16px" runat="server"
                Text
="添加用戶"></asp:Button>
            
<asp:Button id="Button2" style="Z-INDEX: 102; LEFT: 16px; POSITION: absolute; TOP: 64px" runat="server"
                Text
="刪除用戶"></asp:Button>
            
<asp:Button id="Button3" style="Z-INDEX: 103; LEFT: 16px; POSITION: absolute; TOP: 112px" runat="server"
                Text
="修改用戶"></asp:Button>
            
<asp:Button id="Button4" style="Z-INDEX: 104; LEFT: 16px; POSITION: absolute; TOP: 152px" runat="server"
                Text
="修改用戶密碼"></asp:Button>
            
<asp:Button id="Button5" style="Z-INDEX: 105; LEFT: 16px; POSITION: absolute; TOP: 216px" runat="server"
                Text
="獲得用戶列表"></asp:Button>
            
<asp:Button id="Button6" style="Z-INDEX: 106; LEFT: 16px; POSITION: absolute; TOP: 264px" runat="server"
                Text
="識別用戶組的關係"></asp:Button>
        
</form>
    
</body>
</HTML>
3.cs代碼
public class WebForm3 : System.Web.UI.Page
    
{
        
protected System.Web.UI.WebControls.Button Button2;
        
protected System.Web.UI.WebControls.Button Button3;
        
protected System.Web.UI.WebControls.Button Button4;
        
protected System.Web.UI.WebControls.Button Button5;
        
protected System.Web.UI.WebControls.Button Button6;
        
protected System.Web.UI.WebControls.Button Button1;
        
//新增用戶
        [DllImport("Netapi32.dll")] 
        
public static extern  int NetUserAdd([MarshalAs(UnmanagedType.LPWStr)] string servername, int level, ref USER_INFO_1 buf, int parm_err);
        [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; 
        }
 
        
//刪除用戶
        [DllImport("Netapi32.dll")] 
        
public static extern int NetUserDel([MarshalAs(UnmanagedType.LPWStr)] string servername, [MarshalAs(UnmanagedType.LPWStr)] string username); 
        
//修改用戶
        [DllImport("Netapi32.dll")] 
        
public static extern int NetUserGetInfo([MarshalAs(UnmanagedType.LPWStr)] string servername,[MarshalAs(UnmanagedType.LPWStr)] string username,int level,out IntPtr bufptr); 
        [DllImport(
"Netapi32.dll")] 
        
public static extern int NetUserSetInfo([MarshalAs(UnmanagedType.LPWStr)] string servername,[MarshalAs(UnmanagedType.LPWStr)] string username,int level,ref USER_INFO_1 buf, int error);
        
//修改用戶密碼
        [DllImport("Netapi32.dll")] 
        
public static extern 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); 
        
private void Page_Load(object sender, System.EventArgs e)
        
{
            
// Put user code to initialize the page here
        }


        
#region Web Form Designer generated code
        
override protected void OnInit(EventArgs e)
        
{
            
//
            
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
            
//
            InitializeComponent();
            
base.OnInit(e);
        }

        
        
/// <summary>
        
/// Required method for Designer support - do not modify
        
/// the contents of this method with the code editor.
        
/// </summary>

        private void InitializeComponent()
        
{    
            
this.Button1.Click += new System.EventHandler(this.Button1_Click);
            
this.Button2.Click += new System.EventHandler(this.Button2_Click);
            
this.Button3.Click += new System.EventHandler(this.Button3_Click);
            
this.Button4.Click += new System.EventHandler(this.Button4_Click);
            
this.Button5.Click += new System.EventHandler(this.Button5_Click);
            
this.Button6.Click += new System.EventHandler(this.Button6_Click);
            
this.Load += new System.EventHandler(this.Page_Load);

        }

        
#endregion


        
#region 新增用戶
        
private void Button1_Click(object sender, System.EventArgs e)
        
{
            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 
            
                AlertError(
"Error Adding User"); 
            }
 
        }


        
#endregion

        
        
#region 刪除用戶
        
private void Button2_Click(object sender, System.EventArgs e)
        
{
            
if(NetUserDel(null ,"UserTestOne")!=0// If the call fails we get a non-zero value 
            
                
string script="<script language='javascript'>alert('Error Removing User')</script>";
                Page.RegisterStartupScript(
"meng",script); 
            }
  

        }


        
#endregion


        
#region 修改用戶
        
private void Button3_Click(object sender, System.EventArgs e)
        
{
            IntPtr bufPtr; 
            USER_INFO_1 User 
= new USER_INFO_1(); 
            
if(NetUserGetInfo(null"Administrator",1,out bufPtr)!=0
            

                AlertError(
"Error Getting User Info"); 
            }
 
            User 
= (USER_INFO_1)Marshal.PtrToStructure(bufPtr, typeof(USER_INFO_1));  
            AlertError(
"Users Name: " + User.usri1_name + " Users Comments: " + User.comment + " Users Privilege Level: " + User.usri1_priv); 

            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(null"UserTestOne",1,ref Update,0)!=0
            

                AlertError(
"Error Setting User Info"); 
            }
 

        }


        
#endregion


        
#region 修改用戶密碼
        
private void Button4_Click(object sender, System.EventArgs e)
        
{
            
if(NetUserChangePassword(null"UserTestOne""password""ournewpassword")!=0
            

                AlertError(
"Error Changing User Password"); 
            }
 

        }

        
#endregion


        
#region 獲得用戶列表
        
private void Button5_Click(object sender, System.EventArgs e)
        
{
            
int EntriesRead; 
            
int TotalEntries; 
            
int Resume; 
            IntPtr bufPtr; 
 
            NetUserEnum(
null02out bufPtr, -1out 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))); 
                    Response.Write(Users[i].Username); 
                }
 
                
//NetworkAPI.NetApiBufferFree(bufPtr); 
            }
 

        }


        
#endregion


        
#region 識別用戶組的關係
        
private void Button6_Click(object sender, System.EventArgs e)
        
{
            
int EntriesRead; 
            
int TotalEntries; 
            IntPtr bufPtr; 
 
            NetUserGetLocalGroups(
null"Administrator",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))); 
                    Response.Write(RetGroups[i].groupname); 
                }
 
                NetApiBufferFree(bufPtr); 
            }
 
        }

        
        
#endregion


        
#region AlertError
        
private void AlertError(string msg)
        
{
            
string script = "<script language='javascript'>";
            script 
+=" alert('" + msg +"');";
            script 
+="</script>";
            Page.RegisterClientScriptBlock(
"Alert", script);
        }

        
#endregion


    }
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章