C++ 枚举本地主机所有用户、用户基本信息
上一篇 / 下一篇 2011-04-07 00:28:09 / 个人分类:.NET
]^)s4LYA
kr0#include "iostream"
6kv {3_v8jc;C0#include "windows.h"
Y0b,|)an,GF0#include "lm.h"
wwu+D}R7|-l3y0#include "assert.h"51Testing软件测试网X%K
F
Xg:Vvf
#include "string"
O-g,v7G6VRj5H%i0#include "time.h"51Testing软件测试网O.~
rw1r
U
using namespace std;51Testing软件测试网;A!y(\%`*T!Ft4K#r
1fy!]WB/R0#pragma comment(lib,"netapi32.lib")
%UI,WBNn7|N6X p(B,?051Testing软件测试网V3^/p,k)wn51Testing软件测试网7f#n;q6R1R
//判断帐户状态:数组各个值对应的意义如下51Testing软件测试网'\7b$Ro#E![N
/*
序号 Value Mean Calendar Value
9Qk,O4_W,YH001 UF_SCRIPT 登录脚本执行 1
-`)D1VJ)kl'm,_3u002 UF_ACCOUNTDISABLE 用户帐户不可用 2
m{CT*t%D#cg&d#y003
VwV-?F004 UF_HOMEDIR_REQUIRED 要求有用户目录 8
8eG1t q&JUJc002 UF_LOCKOUT 帐户锁定 16
#z!Me/FEX2~006 UF_PASSWD_NOTREQD 不要求用户密码 3251Testing软件测试网2P-uD6bf,~8p
07 UF_PASSWD_CANT_CHANGE 不能更改密码 64
08
cca:fOw g051Testing软件测试网Ezcn6ny7?)Ap2R^ 以下为帐户类型:51Testing软件测试网+Uh$d*b$m
09 UF_TEMP_DUPLICATE_ACCOUNT 域用户帐户 256
B5wM6z/E010 UF_NORMAL_ACCOUNT 普通帐户 51251Testing软件测试网$F_[_3_iPr
11
:US
B+dh0e012 UF_INTERDOMAIN_TRUST_ACCOUNT域内可信任帐户 2048
mK.KeWNj013 UF_WORKSTATION_TRUST_ACCOUNT工作组可信任帐户 409651Testing软件测试网D B)k9C-XSK
14 UF_SERVER_TRUST_ACCOUNT 备份域控制器帐户 819251Testing软件测试网I?!K8\/]zh
15
LXK-m_:i|V!F01651Testing软件测试网S-Q'}XT)cW1`ia
uQ
17 UF_DONT_EXPIRE_PASSWD 密码不过期 65536
z1l0[*n)E8~H
W%L0说明:用ToBinary(int,int)这个函数判断各个序号对应的值是否为真。
*B7K
Vw
RxVi0*/51Testing软件测试网VC.i(W+Dy
int ToBinary(long n,int k)51Testing软件测试网}C7N|N
KYC
{51Testing软件测试网zWnrlVQ `
{ @
int num[17];
w;s9FP8V2aD0int i=16;
e,^4C.l e0//密码永不过期51Testing软件测试网 m%ui{vF-@8Z c/Y)Kn
long m=n;51Testing软件测试网;Le#ULJ n.]g+?p;?F
if(k>17||k<1)
*Hl{$o9e-}%z0 k=1;
"~8q;z2G&i
qy7f0while(m!=0)51Testing软件测试网7`5s+Kj"S'hOz
{
IFp"BEe0
W.K2mgAo
U2C,`.h
A0 num[i]=m%2;51Testing软件测试网6D*@
X KY ]
m=m/2;
6^h~v3|6~0 i--;51Testing软件测试网['CJbI1lXbF6s
vnTo%IZ)N0}
"i.KM,C'^/N!a0num[i]='\0';
,r"H,H;}D:m?-@0return num[17-k];51Testing软件测试网G5p5Wz4~Z K
}51Testing软件测试网H!R5LE SS8E
int GetAllUser()51Testing软件测试网3_3E[4re2` \
{
a2wW9VE.\
@0LPUSER_INFO_1 pBuf = NULL;51Testing软件测试网"\y'U a#x
LPUSER_INFO_1 pTmpBuf;51Testing软件测试网5_&Uv)O?;b"F
fY jk'o?;T0DWORD dwLevel = 1;51Testing软件测试网'h7S2@8e8a+Ye$HhA
DWORD dwPrefMaxLen = MAX_PREFERRED_LENGTH;
mc t#c$U&F0DWORD dwEntriesRead = 0;51Testing软件测试网1L;OyW&l)l@s
DWORD dwTotalEntries = 0;
0K]
m,J6XQV+FK0DWORD dwResumeHandle = 0;51Testing软件测试网Eue6l(Y(]Z#`
DWORD i;51Testing软件测试网6Cc EP(?*H-\,g"}
DWORD dwTotalCount = 0;
8L g@|Vv$r0NET_API_STATUS nStatus;51Testing软件测试网 y#J5NdTxuCG
LPTSTR pszServerName = NULL;51Testing软件测试网P$q4S!{%`q`$g
do
;LB)p tUzN0{51Testing软件测试网&B4vxUd%R*M
nStatus = NetUserEnum(NULL,51Testing软件测试网c-Y nq};k
dwLevel,51Testing软件测试网.gcnm3U%f I
FILTER_NORMAL_ACCOUNT, // global users
0vrx[o@-jzK0 (LPBYTE*)&pBuf,
5m$YQ
y9K&T/r0 dwPrefMaxLen,51Testing软件测试网!Iu:h,?(uEc8Ad
&dwEntriesRead,
|%[pV7H,E0 &dwTotalEntries,
!uE:Wp%lC"R0 &dwResumeHandle);
#|WD~N0 //
V)G fa.P+O%f3}'w0 // If the call succeeds,51Testing软件测试网cC/]9g8dU;|
//
U/G!x3E?n0 if ((nStatus == NERR_Success) || (nStatus == ERROR_MORE_DATA))
X_+N&YR0 {51Testing软件测试网 K'D7TOU8Ml1We-K*h(Zb
if ((pTmpBuf = pBuf) != NULL)
W&L7z+Fte0 {
Ip(\we
o|0 //
K%t }+a\@$~f3KQQ0 // Loop through the entries.51Testing软件测试网@~_~8bC
K1_
//
RC)@+yrY0 for (i = 0; (i < dwEntriesRead); i++)
Z psn#b7]}
NS0 {51Testing软件测试网!Z$DM @:Hw-y~tg
assert(pTmpBuf != NULL);51Testing软件测试网y
S[dMU#X2ot
if (pTmpBuf == NULL)
9iFAK3T4I{-CQ.j J0 {
2U8h&U^
CaYe~0 fprintf(stderr, "An access violation has occurred\n");
l ]8v9E*}w"I#t
}0 break;51Testing软件测试网]!PDS$\ O Xxe
}
1?.r4y3`)A jQuL#Z0 //
a
k#Yt[,r_0 // Print the name of the user account.
.`:P@ fW`0 //
QtA/N,k7W0 /*
-\+Q"dFm!h!uPH0 typedef struct _USER_INFO_1 {51Testing软件测试网"t`jd|.R1`{?
LPWSTR usri1_name; //用户名
uCYtk/fN#DyW0 LPWSTR usri1_password; //用户密码51Testing软件测试网5F.I_6B3xX$cVDWA
DWORD usri1_password_age; //当前密码使用时间(单位:秒)
9HGQl'l1Ok&o0 DWORD usri1_priv; //用户权限 0 来宾; 1 普通用户; 2 管理员.51Testing软件测试网;]P}B#AB
LPWSTR usri1_home_dir; //
-Y,d|\o#Hrk|I0 LPWSTR usri1_comment; //备注,可能为NULL
i[r5y&|[UG0 DWORD usri1_flags; //51Testing软件测试网
vw/\/r/w
LPWSTR usri1_script_path; //返回Unicode string,包含用户登录的脚本。可以为NULL
f4vE$W-HEq0 }USER_INFO_1, *PUSER_INFO_1, *LPUSER_INFO_1;
6rj;B7H]o]0 */
G If a+k
s3p-z5G0 wprintf(L"Account No.%d\n",dwTotalCount+1);
LPUSER_INFO_3 bufptr=NULL;
vROe(pH3q3Y$AC0 LPUSER_INFO_2 buf=NULL;51Testing软件测试网&a/N+N]rB
NET_API_STATUS t3,t2;51Testing软件测试网1b2VgQYE!oFL
t3=NetUserGetInfo(0,pTmpBuf->usri1_name,3,(LPBYTE*)&bufptr);51Testing软件测试网 N U*U8R#~YS
t2=NetUserGetInfo(0,pTmpBuf->usri1_name,2,(LPBYTE*)&buf);51Testing软件测试网)\ Q+xF*a*m
//帐户名称:
'b"LCa.g2U? ys;q0 wprintf(L"\t Account Name: %s \n",bufptr->usri3_name);
9u*Y9As"b'Y_0 //上次登录时间:单位,秒;计算起始时间为1970年1月1日00:0051Testing软件测试网-w.Rh dC cV
if(bufptr->usri3_last_logon==0)
PH7ln,e+W0 cout<<"\t Account Last Logon Time: "<<"上次登录时间未知"<<endl;51Testing软件测试网 g3v&vDuwF
else51Testing软件测试网W+^6q|bf0r,g
{51Testing软件测试网7Zo3v.s$tn]Ts-VU
long m=bufptr->usri3_last_logon;
/r:Qu1N7kZ1?|0 time_t last;51Testing软件测试网M4S/J]{,p
last = m;