• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

用VC实现远程修改NT帐号

c++ 搞代码 7年前 (2018-08-07) 214次浏览 已收录 0个评论

如果我们在Windows NT Server 4.0上建立一个独立的邮件服务器,那么邮件服务器的用户同时也必须是“从批处理作业登录"权限的NT域用户,因此用户邮件账号密码(亦即NT用户密码)的更改,必须以管理员身份登录到NT才能实现,十分不便。如何才能让普通邮件用户方便自由地更改其账号密码呢?下面,笔者就用VC编写一个CGI程序,来让普通用户通过浏览器访问网页来远程修改自己的个人帐号信息。  

调用CGI程序的html源代码如下:  

……  
< form method=“post" action=“/cgi-bin/ChPass.exe" >  
< table border=1 >  
< tr >< td >用户名:< /td >< td >  
< input name=User maxlength=20 >< /td >< /tr >  
< tr >< td >口令:< /td >< td >  

http://www.gaodaima.com/65095.html用VC实现远程修改NT帐号

< input name=Password type=password maxlength=20 >  
< /td >< /tr >  
< tr >< td >新口令:< /td >< td >  
< input name=NewPassword1 type=password maxlegth=20 >  
< /td >< /tr >  
< tr >< td >确认新口令:< /td >< td >  
< input name=NewPassword2 type=password maxlength=20 >  
< /td >< /tr >  
……  
  

该页面以POST方式调用ChPass.exe CGI程序更改 Windows NT 用户口令。  

接下来,我们再来看看实现远程修改帐号功能的VC源程序 ,在本程序中,用户的输入先被转化为Unicode形式,解码后作为调用API函数的参数。首先,在VC中新建Win32控制台应用工程ChPass,部分代码如下。:  

……  
void PrintMIMEHeader(){  
cout < < “Content-Type: text/html/n/n";  
}  
void PrintHTMLHeader(){  
cout < < “< html >< head >< title >  
用户口令更改< /title >< /head >< body >";  
}  

void PrintHTMLTrailer(){  
cout < < “< /body >< /html >";  
}  

void GetPOSTData(){ // 从STDIN中取得表单输入  
char* pContentLength;  
int iContentLength;  
pContentLength=getenv(“CONTENT_LENGTH");  
if (pContentLength != NULL)  
iContentLength=atoi(pContentLength)  
else  
iContentLength=0;  
if (iContentLength >sizeof(szBuffer)-1)  
iContentLength=sizeof(szBuffer)1;  
int i=0;  
while (i< iContentLength){  
WCHAR x=fgetwc(stdin);  
if (x == EOF) break;  
szBuffer[i ++ ]=x;  
}  
szBuffer[i]=‘/0′;  
}  

//对URL编码进行解码  
void ProcessData(){  
PWCHAR p;  
PWCHAR sep=(PWCHAR)“&";  
User=wcstok(szBuffer,sep);  
if (User != NULL)  
Password=wcstok(NULL,sep);  
if (Password!=NULL)  
NewPassword1=wcstok(NULL,sep);  
if (NewPassword1!=NULL)  
NewPassword2=wcstok(NULL,sep);  
p=wcsstr(User,L“User=");  
if(p)  
wcscpy(User,p+5);  
else  
User=NULL;  
p=wcsstr(Password,L“Password=");  
if(p)  
wcscpy(Password,p+9);  
else  
Password=NULL;  
p=wcsstr(NewPassword1,L“NewPassword1=");  
if(p)  
wcscpy(NewPassword1,p+13);  
else  
NewPassword1=NULL;  
p=wcsstr(NewPassword2,L“NewPassword2=");  
if(p)  
wcscpy(NewPassword2,p+13);  
else  
NewPassword2=NULL;  
}  

//调用API函数更改口令
NET_API_STATUS ChangePassword(){  
return NetUserChangePassword  
(NULL,User,Password,NewPassword1);  
//NULL为用户所属服务器  
//User为用户账户名  
//Password为旧密码  
//NewPassword1为新密码  
//函数返回值为NET_API_STATUS类型  
}  

void main(){  
char* pRequestMethod;  
pRequestMethod=getenv  
(“REQUEST_METHOD");  
if (pRequestMethod == NULL){  
cout < <  
“This program is designed to run as a CGI script/n";  
return;  
}  
//限定以表单提交的形式执行CGI程式,  
否则将页面重定向到输入表单  
if (strcmp(pRequestMethod,“POST") != 0){  
cout < < “Location: /changePass.htm/n/n";  
return;  
}  
PrintMIMEHeader();  
PrintHTMLHeader();  
GetPOSTData();  
ProcessData();  

if(wcscmp(NewPassword1,NewPassword2)== 0)  
{  
switch(ChangePassword()){  
case NERR_Success:  
cout < < “< center >  
< h2 >成功更改用户密码。< /h2 >";  
break;  
case ERROR_access_DENIED:  
cout < < “< center >< h2 >  
密码更改失败:拒绝访问。< /h2 >";  
break;  
case ERROR_INVALID_PASSWORD:  
cout < < “< center >< h2 >  
密码更改失败:无效的密码。< /h2 >";  
break;  
case NERR_UserNotFound:  
cout < < “< center >< h2 >  
密码更改失败:不存在该用户。< /h2 >";  
break;  
case NERR_PasswordTooShort :  
cout < < “< center >< h2 >密码更改失败:  
新密码不合要求,请选择新的密码。< /h2 >";  
break;  
default:  
cout < < “< center >< h2 >密码更改失败。< /h2 >";  
}  

}  
else  
cout < < “< center >< h2 >密码更改失败:  
两次输入新口令不一致。< /h2 >";  
PrintHTMLTrailer();  
}

欢迎大家阅读《用VC实现远程修改NT帐号》,跪求各位点评,若觉得好的话请收藏本文,by 搞代码


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:用VC实现远程修改NT帐号

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址