C#管理Windows本地用户组
上一篇 / 下一篇 2009-04-20 23:39:59 / 个人分类:.NET
using System;51Testing软件测试网BB!E
^J,K%M M-T;k
using System.Collections.Generic;
kq;J,fO0r4z+r:C?0using System.Text;
(d+x,A'q$A8K0using System.Runtime.InteropServices;51Testing软件测试网Fd8z$Ix+V9g
using System.Text.RegularExpressions;51Testing软件测试网E:eh7bx
@
Tz
using DevSDK.WinNT;51Testing软件测试网c eZk$yODaK7M,?
using DevSDK;
namespace DevSDK.WinNT51Testing软件测试网rR#@&P+}g1P7F[
{
;l!o3m.uaE?(o4`0 public class LocalGroup
arC
EW&zjet0@0 {
g4t&h4H&Yd0 //创建本地用户组51Testing软件测试网7`AS,Q'J%m
[DllImport("Netapi32.dll")]
M`!P~4MBw0 extern static int NetLocalGroupAdd([MarshalAs(UnmanagedType.LPWStr)] string sName, int Level, ref LOCALGROUP_INFO_1 buf, int parm_err);
2Zw1{ |-D[zbkj0 //删除本地组
5}2YP8xQw8x,C0 [DllImport("Netapi32.dll")]
*TM'Pm6G.yeu_8p0 extern static int NetLocalGroupDel([MarshalAs(UnmanagedType.LPWStr)] string sName, [MarshalAs(UnmanagedType.LPWStr)] string GroupName);
]rA@}
c9e#UPp6Z0 //获取本地组信息
%z{*a*Z%XMn-BWso$d0 [DllImport("Netapi32.dll")]
_ nwl:R!LV$_:G0 extern static int NetLocalGroupGetInfo([MarshalAs(UnmanagedType.LPWStr)] string sName, [MarshalAs(UnmanagedType.LPWStr)] string GroupName, int Level, out IntPtr bufptr);51Testing软件测试网ae`3F#}#z'vfT
//更改本地组信息
Xb#UcxO }'Z0 [DllImport("Netapi32.dll")]
"[
l'K R)DM$i0 extern static int NetLocalGroupSetInfo([MarshalAs(UnmanagedType.LPWStr)] string sName, [MarshalAs(UnmanagedType.LPWStr)] string GroupName, int Level, ref LOCALGROUP_INFO_1 buf, int parm_err);51Testing软件测试网 K)`%L |1m
//枚举全部本地用户组51Testing软件测试网'U*h g0b!S
[DllImport("Netapi32.dll")]
(~)I8e(W*EM^\0 extern static int NetLocalGroupEnum([MarshalAs(UnmanagedType.LPWStr)] string sName, int Level, out IntPtr bufPtr, int prefmaxlen, out int entriesread, out int totalentries, out int resume_handle);
X%e3n:Eb#rK0 //添加用户到组
\0L1s8TS|;f
N5Y4pV0 [DllImport("Netapi32.dll")]51Testing软件测试网)ixP p+_@+n
extern static int NetLocalGroupAddMembers([MarshalAs(UnmanagedType.LPWStr)] string sName,[MarshalAs(UnmanagedType.LPWStr)] string GroupName,int Level,ref LOCALGROUP_MEMBERS_INFO_3 buf, int totalentries);
5fLU{q-N}h0 [DllImport("Netapi32.dll")]
N#}Q;Y1Z:pD0 extern static int NetLocalGroupDelMembers([MarshalAs(UnmanagedType.LPWStr)] string sName, [MarshalAs(UnmanagedType.LPWStr)] string GroupName, int Level, ref LOCALGROUP_MEMBERS_INFO_3 bufPtr, int totalentries);51Testing软件测试网/]-]
|;WV
//释放API51Testing软件测试网"N:r&p F
d&mP
[DllImport("Netapi32.dll")]
N(^VOb&Sw0 extern static int NetApiBufferFree(IntPtr Buffer);51Testing软件测试网
i ] gz._VN W`4l4}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]51Testing软件测试网c"zD0IO!L1uZ"d2]
public struct LOCALGROUP_INFO_051Testing软件测试网:N'GAZ pU0l
{
lz0HU(ijlk"K@0 public string LocalGroup_Name_0;
s@Lm4nM0 }
j%v;AX7m*i+g0f0 [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]51Testing软件测试网~[]&II
h
public struct LOCALGROUP_INFO_1
f6T3McX7oNhc$C'U0 {
ZzHE4U6^ m"[h.DA0 public string LocalGroup_Name_1;
w$G
c"C)r$d0 public string LocalGroup_Comment_1;
/? s-hUA/H
[0 }51Testing软件测试网L_J+z5u@u
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]51Testing软件测试网t,N{%o\%x1t#yK
public struct LOCALGROUP_MEMBERS_INFO_3
Y)W`3a
g(p0 {51Testing软件测试网!O2`~:w g:{(X!?{b
public string DomainName;
#O#`Y)c4J`'DIzC(_0 }51Testing软件测试网 cFS"l8U YH V%V
//从本地用户组中删除指定用户51Testing软件测试网t0Q T*qY8ks3@
public bool LocalGroupDelMembers(string GroupName, string UserName)51Testing软件测试网B U*]thz:y#S
{
Rj,n^UP%?@0 LOCALGROUP_MEMBERS_INFO_3 Members = new LOCALGROUP_MEMBERS_INFO_3();51Testing软件测试网!VN#g|1F0tn3[)Ld!b
Members.DomainName = UserName.ToString();51Testing软件测试网|+XC:i8RB[HX
if (NetLocalGroupDelMembers(null, GroupName.ToString(), 3, ref Members, 1) != 0)
_|y2}]W0 {51Testing软件测试网
h%M ~.z0L7E?Y
throw (new Exception("从本地用户组删除指定用户时出现错误"));51Testing软件测试网3Gp2}fPO
@
}
xk$}&i g0 else
Gc]wxI|H0 {
#z1E)N.NX.H7j0 return true;
Vag8YF?9G Y{0 }
}^L^^ ?0 }
}AhXE*MFH0 //把用户添加至本地用户组51Testing软件测试网!z
|Mb]dw3c
public bool LocalGroupAddMembers(string GroupName,string UserName)51Testing软件测试网I.J%_g9\v
{
Qk;B HpP.P,S4tC}8|0 LOCALGROUP_MEMBERS_INFO_3 Members = new LOCALGROUP_MEMBERS_INFO_3();
/e&\{E9}7u-VV0 Members.DomainName = UserName.ToString();51Testing软件测试网
p+\%P9DX$Nx,N0b!y5W|'I
if(NetLocalGroupAddMembers(null,GroupName.ToString(),3,ref Members,1) !=0)
K.v|2F7a-x2o0 {51Testing软件测试网9Z$[m(V9D%A
throw (new Exception("把用户添加至本地用户组时出现错误"));51Testing软件测试网i!n8n0a~ab
}51Testing软件测试网XYO`j7a
else
-QL6jk_Zo$g0 {
g{KQi4@0 return true;
2t,P*QF[4y!\0 }51Testing软件测试网E1xaK5[ `0@
}51Testing软件测试网0K8F4v k5aWPZ
//枚举全部本地用户组信息51Testing软件测试网o.PkJ
A0z3F6l
public string LocalGroupEnum()
+c,E$t`4h)p#Z0 {
?D?kl8\0 string tempStr = "";
#Iwqxm0 int entriesread;
;_/t3ppj1`(d$Jc0 int totalentries;
,L0mAA]l0Vj0 int resume_handle;
I+g+c:ZJuYJX0 IntPtr bufPtr;
qn1} \p"NCa?0 NetLocalGroupEnum(null, 1, out bufPtr, -1, out entriesread, out totalentries, out resume_handle);51Testing软件测试网 F2T'tp6z8d
A*~?cOEe f0 if (entriesread > 0)51Testing软件测试网B)`t!^(^v$~a
{51Testing软件测试网D$i(tt)b
@.mwJ
LOCALGROUP_INFO_1[] GroupInfo = new LOCALGROUP_INFO_1[entriesread];51Testing软件测试网 N;Oa~3Yj#b
IntPtr iter = bufPtr;51Testing软件测试网yvR/pT1f,n
tempStr = "<?xml version=\"1.0\" encoding=\"gb2312\" ?>\r\n";
)~n0y)u[3dV J0 tempStr += "<INFO>\r\n";
3YYfs?{V^!Wu
?g0 for (int i = 0; i < entriesread; i++)
)Q0U]R[;]0 {51Testing软件测试网
c,i
d;ym,kC:TH
oB
GroupInfo[i] = (LOCALGROUP_INFO_1)Marshal.PtrToStructure(iter, typeof(LOCALGROUP_INFO_1));
X%Z(?Ms^,~7N"]E0 iter = (IntPtr)((int)iter + Marshal.SizeOf(typeof(LOCALGROUP_INFO_1)));51Testing软件测试网-w;o'KEM%k6V
tempStr += "<ITEM value=\"" + GroupInfo[i].LocalGroup_Comment_1 + "\">" + GroupInfo[i].LocalGroup_Name_1 + "</ITEM>\r\n";
"M/K&FlT#E?0 }51Testing软件测试网7o8_T;^U!io
tempStr += "</INFO>";51Testing软件测试网\vY9D S
}
y)CnQ8p"v@!fs0 return tempStr;51Testing软件测试网&qA^!KJ W
}
"pHk.fB9yJQ0 //修改本地用户组信息51Testing软件测试网U&GB B(~Wr2E
public bool LocalGroupSetInfo(string GroupName, string GroupDescription)51Testing软件测试网0\7]0K3x{L3b
{51Testing软件测试网\:CO#Dh,lf
LOCALGROUP_INFO_1 GroupInfo = new LOCALGROUP_INFO_1();
tr~(p9E3X0 GroupInfo.LocalGroup_Name_1 = GroupName.ToString();51Testing软件测试网$d,s[ mg6eyl
GroupInfo.LocalGroup_Comment_1 = GroupDescription.ToString();51Testing软件测试网(X;ps7Q*e
y7W0f
if (NetLocalGroupSetInfo(null, GroupName.ToString(), 1, ref GroupInfo, 0) != 0)51Testing软件测试网
S6f*]
GDJ~
{51Testing软件测试网N-Rl,Q*F
GN;B
throw (new Exception("修改用户组信息时出现错误"));
] r;h c:Rxj%P0 }51Testing软件测试网4l7[ Nb s5M4c V#T
else
LK2pQ,qrw)j2n0 {
#j/x&W'r'~(r+R9^0 return true;
!Y-L6F-H+M+b0 }51Testing软件测试网Qe![dI~d#PI
}
@}.qfY0 //读取本地用户组信息51Testing软件测试网V;t8uF(`2?5_
public string LocalGroupGetInfo(string GroupName)51Testing软件测试网NS!s$eu
{
~H!z'| ]X4n7H3j1R0 IntPtr bufptr;
9CGVFY
u2T0 LOCALGROUP_INFO_1 GroupInfo = new LOCALGROUP_INFO_1();51Testing软件测试网{;TM ri*n5\
if (NetLocalGroupGetInfo(null, GroupName.ToString(), 1,out bufptr) != 0)51Testing软件测试网N!tP;H(fH4^
{51Testing软件测试网?g!s(A lu \L)fF
throw (new Exception("读取用户组信息时出现错误"));51Testing软件测试网+_c6R'I"M
}
+Yr.`u7L(]IH0 else
xb5IUy0 {51Testing软件测试网HC6Wi SN'X
GroupInfo = (LOCALGROUP_INFO_1)Marshal.PtrToStructure(bufptr, typeof(LOCALGROUP_INFO_1));
B5A(FeA-w9sm0 string tempStr = "<?xml version=\"1.0\" encoding=\"gb2312\" ?>\r\n";
A4gNp xV0 tempStr += "<INFO>\r\n";
5_
r-H%b7?)H0 tempStr += "<NAME>" + GroupInfo.LocalGroup_Name_1 + "</NAME>\r\n";51Testing软件测试网:j5]iA4dDf1Q;z
tempStr += "<DESCRIPTION>" + GroupInfo.LocalGroup_Comment_1 + "</DESCRIPTION>\r\n";
%gU1je ]-^ [
b;r0 tempStr += "</INFO>\r\n";
I9D X|iX)q#t3V1\0 NetApiBufferFree(bufptr);51Testing软件测试网7d,U6j.]
Z X1\)K0Gh
return tempStr;51Testing软件测试网(ZmE wbt"\9Q
}
aJ+Bo*vxjC7@v0 }
//删除本地用户组51Testing软件测试网#jA8C7Z{6C4C
public bool LocalGroupDel(string GroupName)
9~fqC:z{Q0 {
2Qvf1p(s }0 if (NetLocalGroupDel(null, GroupName) != 0)51Testing软件测试网
ZI6g
HavH_o
{51Testing软件测试网i|$Z5]1xL0x
PH
throw (new Exception("删除用户组时出现错误"));51Testing软件测试网;^_Fl#O/W
}
M$L8Qh x!V`:_0 else51Testing软件测试网&e