C#管理Windows本地用户

上一篇 / 下一篇  2009-04-20 23:43:38 / 个人分类:.NET

 

51Testing软件测试网.I"[$fQU N;M{ r

using System;
+z%F$e5D;h3e]!P/^8@0using System.Collections.Generic;
zi e W}x'I0using System.Text;51Testing软件测试网.{rR,c&OG \%S!C:v
using System.Runtime.InteropServices;51Testing软件测试网n ~ w(Wn-m(JW
using System.Text.RegularExpressions;
gvk)T(C,c.ys G0using DevSDK.WinNT;
w x,g7J6X`0using DevSDK;51Testing软件测试网5JC)y,E"J,_

EWWc2^0namespace DevSDK.WinNT
5ptm!c/pC#\0{
4l)N6jD!a:zc,GL(N@0    public class NetUser:Common51Testing软件测试网B5PJvC/zP#gn
    {51Testing软件测试网1x'o\X+ql;g*s
        //创建用户
-s5yW6O'r CA4o/V0        [DllImport("Netapi32.dll")]
nK6_Csm0        extern static int NetUserAdd([MarshalAs(UnmanagedType.LPWStr)] string sName, int Level, ref USER_INFO_1 buf, int parm_err);51Testing软件测试网K"H1MX#bD m;w
        //修改用户密码
9Wfgh ^!d;x:U0        [DllImport("Netapi32.dll")]
1|7k8}h/^ Z0        extern static int NetUserChangePassword([MarshalAs(UnmanagedType.LPWStr)] string sName,[MarshalAs(UnmanagedType.LPWStr)] string UserName,[MarshalAs(UnmanagedType.LPWStr)] string OldPassword,[MarshalAs(UnmanagedType.LPWStr)] string NewPassword);
S!GMJ QvD"Xw_!E0        //删除用户
c!k q'B!bjH0        [DllImport("Netapi32.dll")]51Testing软件测试网jx+V,^Na9g
        extern static int NetUserDel([MarshalAs(UnmanagedType.LPWStr)] string sName,[MarshalAs(UnmanagedType.LPWStr)] string UserName);
8m9Y)k/c.Mw"dw0        //枚举全部用户
Oqt;v| \%b!r4X0        [DllImport("Netapi32.dll")]51Testing软件测试网 s'Yh-? c4M*MQ4E bj
        extern static int NetUserEnum([MarshalAs(UnmanagedType.LPWStr)] string sName,int Level,int filter,out IntPtr bufPtr,int Prefmaxlen,out int Entriesread,out int Totalentries,out int Resume_Handle);
S'k)I!x'za0E}&Ug@0        //获取用户信息
h[J!fRX-kr0        [DllImport("Netapi32.dll")]
R$R3x!R7n;iNn0        extern static int NetUserGetInfo([MarshalAs(UnmanagedType.LPWStr)] string sName,[MarshalAs(UnmanagedType.LPWStr)] string UserName,int Level,out IntPtr intptr);51Testing软件测试网V[^&yMF [ l
        //获取用户所在本地组51Testing软件测试网rBHA7N^;U
        [DllImport("Netapi32.dll")]51Testing软件测试网&H5C8g)e0h@vZs
        extern static int NetUserGetLocalGroups([MarshalAs(UnmanagedType.LPWStr)] string sName,[MarshalAs(UnmanagedType.LPWStr)] string UserName,int Level,int Flags,out IntPtr intptr,int Prefmaxlen,out int Entriesread,out int Totalentries);
\$|$O0i4jrU;A0        //修改用户信息
m k/w"T ]}0        [DllImport("Netapi32.dll")]51Testing软件测试网 de@b9E I
        extern static int NetUserSetInfo([MarshalAs(UnmanagedType.LPWStr)] string sName, [MarshalAs(UnmanagedType.LPWStr)] string UserName, int Level, ref USER_INFO_1 bufptr, int parm_err);51Testing软件测试网!q-r6N,T1a|i"z
        //释放API
+x7CG0f#ZT0        [DllImport("Netapi32.dll")]
+zh T `I0        extern static int NetApiBufferFree(IntPtr Buffer);

IxO&{(ek#l;j0

+M rx*\ p qZ6Sg} Q0        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]51Testing软件测试网(oSr+s w(M:u
        public struct LOCALGROUP_USERS_INFO_051Testing软件测试网!J8sSYbY AB
        {
4e%t'zKut$|N0            public string GroupName;
P @DM'@.UR$I*Qp0        }

j(Kox[.nt n$W5@0

a L3v/j9PP:I0S:o0        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
,{+XCEr#l2N u0        public struct USER_INFO_151Testing软件测试网,InKu*Xp-P
        {51Testing软件测试网^F-C.gc h
            public string sName;    //用户名51Testing软件测试网)i(Yq+kw6r` g
            public string sPass;    //用户密码51Testing软件测试网$Yq S;X c eu`
            public int PasswordAge; //密码级别51Testing软件测试网1z?!K6c+~wV!r z{
            public int sPriv;       //帐户类型 151Testing软件测试网n0Ls7\"c
            public string sHomeDir; //用户主目录 null
'\Hp b3Dw1y2OM0            public string sComment; //用户描述51Testing软件测试网u3?~_Q4@`'U t
            public int sFlags;      //用户权限51Testing软件测试网1X y5j-j~4G
            public string sScriptPath;  //登陆脚本路径 null
'Dt3X\ E:]0        }
2XE&i*x m0        //枚举全部用户
dFo6b5L&v0        public string UserEnum()
;P^2C\ bzB8h M2VF0        {51Testing软件测试网t6I d]c
            string tempStr = "<?xml version=\"1.0\" encoding=\"gb2312\" ?>\r\n";
4w+T:E*gn0            tempStr += "<INFO>\r\n";51Testing软件测试网4p8U2B3]vd-q7[
            int Entriesread;
k.X3i r^+m&FO)om S0            int TotalEntries;
3[l EH l)`k0            int Resume_Handle;51Testing软件测试网d.c2b"T'Dy)Q(O\V
            IntPtr bufPtr;

*}a lde.t0

%xCCWlFd6B0            if (NetUserEnum(null, 1, 0, out bufPtr, -1, out Entriesread, out TotalEntries, out Resume_Handle) != 0)
Xa%V#vc5q|3k(H0            {51Testing软件测试网$RI0X w4~`
                throw (new Exception("枚举全部用户失败"));51Testing软件测试网B@o]kg2R*X&X#m
            }51Testing软件测试网a^#_q#B3B\'^6q H
            if (Entriesread > 0)51Testing软件测试网 n})[$ai"@UM6eP kzn
            {
;| G ]G5|#Q0                USER_INFO_1[] UserInfo = new USER_INFO_1[Entriesread];51Testing软件测试网k3p2B4K1y&M S\
                IntPtr iter = bufPtr;
[$O#\1C k f;mW0                for (int i = 0; i < Entriesread; i++)51Testing软件测试网 P*~I"f2l{
                {
'Vb_4I ?%B A0                    UserInfo[i] = (USER_INFO_1)Marshal.PtrToStructure(iter, typeof(USER_INFO_1));
Z0[d*}UG)Bt0                    iter = (IntPtr)((int)iter + Marshal.SizeOf(typeof(USER_INFO_1)));51Testing软件测试网4c&h YF1pTIU+s
                    tempStr += "<ITEM value=\"" + UserInfo[i].sComment + "\">" + UserInfo[i].sName + "</ITEM>\r\n";51Testing软件测试网%tL0V J9`u\l9B
                }51Testing软件测试网3|.yo q:T
                tempStr += "</INFO>";
N'J!I:U$dY(Y0            }51Testing软件测试网k A%D7J.}
            NetApiBufferFree(bufPtr);51Testing软件测试网` fl's{*v)X[
            return tempStr;51Testing软件测试网/X2a4c [:L#q e
        }
7@&g} q!W5D.X0        //读取用户信息
#E(IR2vmA3Es6\;Xp^0        public string UserGetInfo(string UserName)51Testing软件测试网-o H8L1o-Ta%Td4b$]}
        {51Testing软件测试网!QXMx:w9I2S)e1uW
            string tmpStr = "<?xml version=\"1.0\" encoding=\"gb2312\" ?>\r\n";51Testing软件测试网([ O BC%y?+CH
            tmpStr += "<INFO>\r\n";
1uK-T7[:wC0            IntPtr bufPtr;
w(as~ C0            USER_INFO_1 UserInfo = new USER_INFO_1();51Testing软件测试网1bnfpxI
            if (NetUserGetInfo(null, UserName.ToString(), 1, out bufPtr) != 0)
7j4Y6M7Y,DT(|$~0            {51Testing软件测试网#vv VL4s2af
                throw (new Exception("读取用户信息失败"));
PS r\P%t5K;F H I#D0            }
|Ln#Iv2jB0            else
|[x5b js8ve0            {
6F}^:zIh0                UserInfo = (USER_INFO_1)Marshal.PtrToStructure(bufPtr, typeof(USER_INFO_1));
;x lYQn8UG0Y|0                tmpStr += "<NAME>" + UserInfo.sName + "</NAME>\r\n";51Testing软件测试网}Y-H(fa@@ g
                tmpStr += "<PASS>" + UserInfo.sPass + "</PASS>\r\n";
h-t2Ng c l4r!WK0                tmpStr += "<DESC>" + UserInfo.sComment + "</DESC>\r\n";
"by-Q n TFzvD(Qa0                tmpStr += "</INFO>";
5Qw:S2]$GOyD"S0                NetApiBufferFree(bufPtr);
`H6Lp'Oj?0                return tmpStr;
whs.BA0            }
4J`@Yp0        }
2} a)Y B^*g_ \0        //删除用户51Testing软件测试网Z|AM%NPm7o e;qZ
        public bool UserDelete(string UserName)51Testing软件测试网dW"h Q ~;Y
        {
CU4j3~4e X:?;?[$]%fes0            if (NetUserDel(null, UserName.ToString()) != 0)
;[ I6t|l+a5K+X0`dga0            {51Testing软件测试网O!I0vs6{?r%E
                throw (new Exception("删除用户失败"));
|2f)J*xUuS Of`c0            }
/k4H4k/J6v8a0            else51Testing软件测试网L*Jq*dpNC
            {
g b!w~d J5p0                return true;
jW)a/[)m;h,Zb*l0            }
G']!l Bo;m6z0        }51Testing软件测试网D;Js N!K U4b:DE7b*tP

51Testing软件测试网d'BHq l$o"GU s.o\

        //修改用户信息
;sH|Hx`5@KG9~0        public bool UserSetInfo(string UserName,string NewUserName, string UserPass, string sDescription)51Testing软件测试网9XR@ E]7J#L1Q){
        {51Testing软件测试网vC~ \5U s)@ l,V
            USER_INFO_1 UserInfo = new USER_INFO_1();51Testing软件测试网V`gX1IXOg
            UserInfo.sName = NewUserName.ToString();51Testing软件测试网6f"nK'R3}R
            UserInfo.sPass = UserPass.ToString();51Testing软件测试网 Z!wP7F$Gv+y
            UserInfo.PasswordAge = 0;
7DF5D['w#i;oj0            UserInfo.sPriv = 1;
keO*f5bS'x_9v0            UserInfo.sHomeDir = null;
6f h|,S]wFTJ-l0            UserInfo.sComment = sDescription.ToString();
;GHQ d6pE0            UserInfo.sFlags = 0x10040;
t*o)\!I(t8N8j.K{ m K0            UserInfo.sScriptPath = null;
D0X_QP l0            if (NetUserSetInfo(null, UserName.ToString(), 1, ref UserInfo, 0) != 0)51Testing软件测试网9x-Q&WkHy$L
            {
3B;d!\Z D(d @U0                throw (new Exception("用户信息修改失败"));
,i [$_CC }B:V0            }51Testing软件测试网f_\6@1i'|q M
            else51Testing软件测试网1A.C*E4ul@R_'X0Lc
            {
`V Tj8z2Upv0                return true;51Testing软件测试网Q5G`/Q+L LmyW
            }51Testing软件测试网z'f9q!F e7jy ?
        }51Testing软件测试网*{i,@;~O/A {3k9I
                    
?1v0eVc]8|+E0        //创建系统用户
1f2ul5ABx T4a8S0        public bool UserAdd(string UserName, string UserPass,string sDescription)51Testing软件测试网W#F;Q6d?#^8S1R
        {51Testing软件测试网nHh4Sx Ox` HR
            USER_INFO_1 UserInfo = new USER_INFO_1();51Testing软件测试网%Pzx U g9W} G(C4c
            UserInfo.sName = UserName.ToString();51Testing软件测试网@7hqu^\6G2| d7h5H
            UserInfo.sPass = UserPass.ToString();51Testing软件测试网0x+?ES8V{
            UserInfo.PasswordAge = 0;
t{ Rv1RV0            UserInfo.sPriv = 1;
3B4E B^4r0            UserInfo.sHomeDir = null;51Testing软件测试网K7E%\%J K
            UserInfo.sComment = sDescription.ToString();51Testing软件测试网q@yZ;H{bP;l
            //UserInfo.sFlags = 0x0040;
O"c_|5p;\7|,I0            UserInfo.sFlags = 0x10040;
-t0p&](J0Fm|0            UserInfo.sScriptPath = null;51Testing软件测试网NEY[-AO
            if (NetUserAdd(null, 1, ref UserInfo, 0) != 0)
c*a%r5RN0            {51Testing软件测试网1Q$]$Q Z-Uh+{F@
                throw (new Exception("创建系统用户失败"));51Testing软件测试网 E&D5_~:nN+rH
            }
yC e%mKl:l$n0            else
E3SK|zx~6zN0            {51Testing软件测试网;z$kqh G
                return true;
fqq_D$k#zsJ0            }51Testing软件测试网0O,ipG$y;m n:|P4s!v:?
        }51Testing软件测试网&~#fm Q^

8eHE`c}DKkdQ0        //修改用户密码51Testing软件测试网 Fn/^ N-}
        public bool UserChangePassword(string UserName, string OldPassword, string NewPassword)51Testing软件测试网*xv ?-V#~:vV*@e2ZdR
        {
lm[pt,I5bj-v0            if (NetUserChangePassword(null, UserName.ToString(), OldPassword.ToString(), NewPassword.ToString()) != 0)51Testing软件测试网2xF"KPfC
            {51Testing软件测试网:f&R?R(Eq
                throw (new Exception("修改系统用户密码失败"));51Testing软件测试网(YRET y/cX3W"u
            }51Testing软件测试网"EY&tQ-J:} ` H?
            else
6x5mx"[DIT0            {51Testing软件测试网-Jy` P#Tu
                return true;51Testing软件测试网u/m&X'[2c/S,vV}8h
            }51Testing软件测试网 {{S1H v|tZl
        }51Testing软件测试网pkmT zeq'|
        //获取用户全部所在本地组51Testing软件测试网(zY+H7}:`
        public string UserGetLocalGroups(string UserName)51Testing软件测试网M`_,{ec7Mnh
        {51Testing软件测试网g*Ib0v }B
            int EntriesRead;51Testing软件测试网/O[ j:]v!M}
            int TotalEntries;51Testing软件测试网"r3te a x2G
            IntPtr bufPtr;51Testing软件测试网fY;g8{%E C e
            string tempStr = "<?xml version=\"1.0\" encoding=\"gb2312\" ?>\r\n";
rkp9G Tb6_~c8h0            tempStr += "<INFO>\r\n";
+z7x GL2h)QK7S:O0            if (NetUserGetLocalGroups(null, UserName.ToString(), 0, 0, out bufPtr, 1024, out EntriesRead, out TotalEntries) != 0)51Testing软件测试网/rw1T!~@#lNM$Jz
            {51Testing软件测试网5Z U pNK
                throw (new Exception("读取用户所在本地组失败"));
c)a/U'} {.XwF0            }51Testing软件测试网*Dz7kWb2gSP
            if (EntriesRead > 0)51Testing软件测试网H3~2^ _X5LVM
            {51Testing软件测试网!_,g*D/edV
                LOCALGROUP_USERS_INFO_0[] GroupInfo = new LOCALGROUP_USERS_INFO_0[EntriesRead];
N,`C|vDC%c0                IntPtr iter = bufPtr;
^.cH/K._p6Yn0                for (int i = 0; i < EntriesRead; i++)
PzOp~ G&q:~e0                {51Testing软件测试网4b(X [{!BD#_M0rn,o
                    GroupInfo[i] = (LOCALGROUP_USERS_INFO_0)Marshal.PtrToStructure(iter, typeof(LOCALGROUP_USERS_INFO_0));
D/|{}m F2zVci4S0                    iter = (IntPtr)((int)iter + Marshal.SizeOf(typeof(LOCALGROUP_USERS_INFO_0)));
~ y _&bdi*h5|z0a0                    tempStr += "<GROUP>" + GroupInfo[i].GroupName + "</GROUP>\r\n";51Testing软件测试网Pe4R7fxBW
                }
+d6l-D2H*r#K%q [0                tempStr += "</INFO>";
m-P6R wXU0                NetApiBufferFree(bufPtr);51Testing软件测试网 Lii1~&bD T6_!D
            }51Testing软件测试网S)C ^p{,c:c^
            return tempStr;51Testing软件测试网{D`7E0H.dbVP
        }
u7g9j9A]j0    }51Testing软件测试网9~)o*r$eb,@ ?\
}51Testing软件测试网2L)}Wn K`["^K!@
51Testing软件测试网4hK+s'V J;WIn'^!l


TAG:

 

评分:0

我来说两句

Open Toolbar