用VC實現遠端修改NT帳號 (轉)
用VC實現遠端修改NT帳號 (轉)[@more@]如果我們在 NT Server 4.0上建立一個獨立的,那麼的同時也必須是“從批處理作業登入"的NT域使用者,因此使用者郵件賬號密碼(亦即NT使用者密碼)的更改,必須以管理員身份登入到NT才能實現,十分不便。如何才能讓普通郵件使用者方便自由地更改其賬號密碼呢?下面,筆者就用VC編寫一個CGI,來讓普通使用者透過訪問網頁來修改自己的個人帳號資訊。
CGI程式的HTML如下:
……
< fomethod=“post" action=“/cgi-bin/ChPass.exe" >
< table border=1 >
< tr >< td >使用者名稱:< /td >< td >
< input name=User maxlength=20 >< /td >< /tr >
< tr >< td >口令:< /td >< td >
< input name=Pass 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程式更改 使用者口令。
接下來,我們再來看看實現遠端修改帳號功能的VC源程式 ,在本程式中,使用者的輸入先被轉化為Unicode形式,解碼後作為呼叫的引數。首先,在VC中新建控制檯應用工程ChPass,部分程式碼如下。:
……
void PrintMIMEHeader(){
cout < < “Content-Type: text/htmlnn";
}
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]=‘';
}
//對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 scriptn";
return;
}
//限定以表單提交的形式CGI程式,
否則將頁面重定向到輸入表單
if (strcmp(pRequestMethod,“POST") != 0){
cout < < “Location: /changePass.htmnn";
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();
}
CGI程式的HTML如下:
……
< fomethod=“post" action=“/cgi-bin/ChPass.exe" >
< table border=1 >
< tr >< td >使用者名稱:< /td >< td >
< input name=User maxlength=20 >< /td >< /tr >
< tr >< td >口令:< /td >< td >
< input name=Pass 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程式更改 使用者口令。
接下來,我們再來看看實現遠端修改帳號功能的VC源程式 ,在本程式中,使用者的輸入先被轉化為Unicode形式,解碼後作為呼叫的引數。首先,在VC中新建控制檯應用工程ChPass,部分程式碼如下。:
……
void PrintMIMEHeader(){
cout < < “Content-Type: text/htmlnn";
}
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]=‘';
}
//對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 scriptn";
return;
}
//限定以表單提交的形式CGI程式,
否則將頁面重定向到輸入表單
if (strcmp(pRequestMethod,“POST") != 0){
cout < < “Location: /changePass.htmnn";
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();
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-990659/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 用VC++實現上網撥號功能 (轉)C++
- 用Delphi實現遠端螢幕抓取 (轉)
- VC++實現撥號上網程式 (轉)C++
- 修改Windows預設遠端埠號Windows
- VC實現動畫應用兩則 (轉)動畫
- SNMP用VC++6.0實現的方法 (轉)C++
- 華為帳號助遊戲類應用輕鬆實現數字資產的跨端延續遊戲跨端
- [轉載] MySql實現遠端連線MySql
- vnc遠端用外網遠端公司內網,3步實現vnc遠端用外網遠端公司內網VNC內網
- 用VC++實現自繪按鈕控制 (轉)
- 用VC++實現不規則視窗 (轉)C++
- 用VC++6.0編寫撥號程式 (轉)C++
- 用VC 實現圖象漸顯和漸隱 (轉)
- 在Windows 8.1下修改VPN帳號密碼Windows密碼
- mysql實現遠端訪問,phpmyadmin實現遠端連線mysqlMySqlPHP
- 修改遠端桌面埠
- Ubuntu 中啟用 root 帳號Ubuntu
- VB的ShowInTaskbar功能分析以及用VC的實現 (轉)
- 在NT/2000下實現關機! (轉)
- Go實現ssh執行遠端命令及遠端終端Go
- RAC中修改使用者帳號密碼密碼
- RAKsmart伺服器:Windows修改遠端埠號的圖文教程伺服器Windows
- 《遠端控制》-服務端實現(一)服務端
- windows遠端桌面埠修改Windows
- 遠端撥號登入SCO UNIX主機(轉)
- FRP+WoL實現遠端開機+遠端桌面FRP
- ubuntu如何實現遠端操控Ubuntu
- VC實現螢幕變暗效果 (轉)
- VC的撥號上網程式 (轉)
- 在單點登入的實現時,怎樣能把單點登入的帳號和其它應用系統的帳號繫結呢?
- 用vc執行緒模擬實現並行演算法 (轉)執行緒並行演算法
- windows遠端桌面埠修改(zt)Windows
- 巧用NT Loader實現多作業系統啟動 (轉)作業系統
- NAS如何實現遠端訪問
- django:runserver實現遠端訪問DjangoServer
- fabric實現遠端操作和部署
- VC++中實現程式互斥執行 (轉)C++
- 影像平滑滾動效果的VC實現 (轉)