📄 processdlg.cpp
字号:
// ProcessDlg.cpp : implementation file
//
#include "stdafx.h"
#include "UMIB.h"
#include "ProcessDlg.h"
#include <lm.h>
#include <aclapi.h>
#include <afxtempl.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
extern char g_szDomain[32];
extern char g_szCurrentUser[32];
extern char g_szPrefix[4];
extern char g_szYear[5];
extern char g_szMainDir[32];
extern UINT g_nClassFrom;
extern UINT g_nClassTo;
extern UINT g_nNumFrom;
extern UINT g_nNumTo;
extern UINT g_nOperation;
extern UINT g_nPasOption;
extern BOOL g_bIsContinue;
extern HWND g_hShowWnd;
extern HWND g_hExitWnd;
/////////////////////////////////////////////////////////////////////////////
// CProcessDlg dialog
void AddUsers(LPVOID pParam);
void AllUsersPasExpire(LPVOID pParam);
void ChangeUsersPasswords(LPVOID pParam);
void DeleteUsers(LPVOID pParam);
void CreateDirectories(LPVOID pParam);
CProcessDlg::CProcessDlg(CWnd* pParent /*=NULL*/)
: CDialog(CProcessDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CProcessDlg)
//}}AFX_DATA_INIT
}
BOOL CProcessDlg::OnInitDialog()
{
CDialog::OnInitDialog();
m_pThread=NULL;
g_bIsContinue=TRUE;
switch(g_nOperation)
{
case 1:
SetWindowText("正在成批添加学生用户...");
((CWnd*)GetDlgItem(IDC_TIPS))->SetWindowText("正在添加的用户:");
m_pThread=AfxBeginThread((AFX_THREADPROC)AddUsers,NULL);
break;
case 2:
SetWindowText("正在成批创建学生用户文件夹...");
((CWnd*)GetDlgItem(IDC_TIPS))->SetWindowText("正在创建学生用户的文件夹:");
m_pThread=AfxBeginThread((AFX_THREADPROC)CreateDirectories,NULL);
break;
case 3:
SetWindowText("正在成批更改学生用户密码...");
((CWnd*)GetDlgItem(IDC_TIPS))->SetWindowText("正在更改密码的学生用户:");
m_pThread=AfxBeginThread((AFX_THREADPROC)ChangeUsersPasswords,NULL);
break;
case 4:
SetWindowText("正在使学生用户密码过期...");
((CWnd*)GetDlgItem(IDC_TIPS))->SetWindowText("正在设置的学生用户:");
m_pThread=AfxBeginThread((AFX_THREADPROC)AllUsersPasExpire,NULL);
break;
case 5:
SetWindowText("正在成批删除学生用户...");
m_pThread=AfxBeginThread((AFX_THREADPROC)DeleteUsers,NULL);
((CWnd*)GetDlgItem(IDC_TIPS))->SetWindowText("正在删除的学生用户:");
}
g_hShowWnd=::GetDlgItem(this->GetSafeHwnd(),IDC_PROCESS_SHOW);
g_hExitWnd=this->GetSafeHwnd();
m_bPause=FALSE;
g_bIsContinue=TRUE;
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CProcessDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CProcessDlg)
DDX_Control(pDX, IDOK, m_ctrlOK);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CProcessDlg, CDialog)
//{{AFX_MSG_MAP(CProcessDlg)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CProcessDlg message handlers
void CProcessDlg::OnOK()
{
if(m_pThread&&m_bPause)
{
m_pThread->ResumeThread();
m_ctrlOK.SetWindowText("暂停");
m_bPause=!m_bPause;
}
else if(m_pThread)
{
m_pThread->SuspendThread();
m_ctrlOK.SetWindowText("继续");
m_bPause=!m_bPause;
}
}
void CProcessDlg::OnCancel()
{
g_bIsContinue=FALSE;
CDialog::OnCancel();
}
void AddUsers(LPVOID pParam)
{
USER_INFO_0 *pUI=NULL;
USER_INFO_3 ui;
LOCALGROUP_INFO_1 lgi,*pLGI=NULL;
LOCALGROUP_MEMBERS_INFO_3 lgmi;
DWORD dwError = 0;
NET_API_STATUS nStatus;
char szClassGroupName[32];
char szUserName[32];
char szPassword[32];
char szComment[64];
char szShowTips[96];
WCHAR wszClassGroupName[32];
WCHAR wszUserName[32];
WCHAR wszPassword[32];
WCHAR wszComment[64];
UINT nGroupStatus=0;
UINT nUserStatus=0;
for(UINT nClass=g_nClassFrom;nClass<=g_nClassTo&&g_bIsContinue;++nClass)
{
pLGI=NULL;
nGroupStatus=0;
wsprintf(szClassGroupName,"%s%s级%d班",g_szPrefix,g_szYear,nClass);
wsprintf(szComment,"%s学生用户组",szClassGroupName);
MultiByteToWideChar(CP_ACP, 0, szClassGroupName, -1, wszClassGroupName, 32);
MultiByteToWideChar(CP_ACP, 0, szComment, -1, wszComment, 64);
nStatus=NetLocalGroupGetInfo(NULL,wszClassGroupName,1,(LPBYTE*)&pLGI);
NetApiBufferFree(pLGI);
if(nStatus==NERR_Success)
nGroupStatus=2;
else if(nStatus==NERR_GroupNotFound)
{
wsprintf(szShowTips," %s",szClassGroupName);
::SendMessage(g_hShowWnd,WM_SETTEXT,0,(LPARAM)(LPCTSTR)szShowTips);
lgi.lgrpi1_name=wszClassGroupName;
lgi.lgrpi1_comment=wszComment;
nStatus=NetLocalGroupAdd(NULL,1,(LPBYTE)&lgi,&dwError);
if(nStatus==NERR_Success)
nGroupStatus=1;
}
if(nStatus!=NERR_Success)
{
wsprintf(szShowTips,"创建%s失败!",szComment);
AfxMessageBox(szShowTips);
}
for(UINT nNumber=g_nNumFrom;nNumber<=g_nNumTo&&g_bIsContinue;++nNumber)
{
pUI=NULL;
nUserStatus=0;
if(nClass<10)
{
if(nNumber<10)
wsprintf(szUserName,"%s%s0%d0%d",g_szPrefix,g_szYear,nClass,nNumber);
else
wsprintf(szUserName,"%s%s0%d%d",g_szPrefix,g_szYear,nClass,nNumber);
}
else
{
if(nNumber<10)
wsprintf(szUserName,"%s%s%d0%d",g_szPrefix,g_szYear,nClass,nNumber);
else
wsprintf(szUserName,"%s%s%d%d",g_szPrefix,g_szYear,nClass,nNumber);
}
if(g_nPasOption)
strcpy(szPassword,szUserName);
else
*szPassword='\0';
wsprintf(szComment,"%s%s级%d班%d号学生用户",g_szPrefix,g_szYear,nClass,nNumber);
wsprintf(szShowTips," %s",szUserName);
::SendMessage(g_hShowWnd,WM_SETTEXT,0,(LPARAM)(LPCTSTR)szShowTips);
MultiByteToWideChar(CP_ACP, 0, szUserName, -1, wszUserName, 32);
MultiByteToWideChar(CP_ACP, 0, szComment, -1, wszComment, 64);
MultiByteToWideChar(CP_ACP, 0, szPassword, -1, wszPassword, 32);
ui.usri3_name=wszUserName;
ui.usri3_password=wszPassword;
ui.usri3_password_age=10000000;
ui.usri3_priv = USER_PRIV_USER;
ui.usri3_home_dir = NULL;
ui.usri3_comment = wszComment;
ui.usri3_flags = UF_NORMAL_ACCOUNT|UF_DONT_EXPIRE_PASSWD;
ui.usri3_script_path = NULL;
ui.usri3_auth_flags=AF_OP_COMM;
ui.usri3_usr_comment=NULL;
ui.usri3_full_name=wszUserName;
ui.usri3_parms=NULL;
ui.usri3_workstations=NULL;
ui.usri3_last_logon=0;
ui.usri3_last_logoff=0;
ui.usri3_acct_expires=TIMEQ_FOREVER;
ui.usri3_max_storage=USER_MAXSTORAGE_UNLIMITED;
// ui.usri3_units_per_week=SAM_HOURS_PER_WEEK;
ui.usri3_logon_hours=NULL;
ui.usri3_bad_pw_count=-1;
ui.usri3_num_logons=-1;
ui.usri3_logon_server=NULL;
ui.usri3_country_code=86;
ui.usri3_code_page=0x804;
// ui.usri3_user_id=0;
ui.usri3_primary_group_id=DOMAIN_GROUP_RID_USERS;
ui.usri3_profile=NULL;
ui.usri3_home_dir_drive=NULL;
ui.usri3_password_expired=FALSE;
nStatus=NetUserGetInfo(NULL,wszUserName,0,(LPBYTE*)&pUI);
NetApiBufferFree(pUI);
if(nStatus==NERR_UserNotFound)
{
nStatus = NetUserAdd(NULL,3,(LPBYTE)&ui,&dwError);
if (nStatus != NERR_Success)
{
wsprintf(szShowTips,"创建%s失败!",szComment);
AfxMessageBox(szShowTips);
}
else
nUserStatus=1;
}
else if(nStatus==NERR_Success)
{
nUserStatus=1;
nStatus=NetUserSetInfo(NULL,wszUserName,3,(LPBYTE)&ui,&dwError);
if(nStatus!=NERR_Success)
{
nUserStatus=0;
wsprintf(szShowTips,"设置%s失败!",szComment);
AfxMessageBox(szShowTips);
}
if(nGroupStatus==2)
{
LOCALGROUP_USERS_INFO_0 *pLgi=NULL,*plgi=NULL;
DWORD nLen,nTotLen;
NetUserGetLocalGroups(NULL,wszUserName,0,0,(LPBYTE*)&pLgi,-1,&nLen,&nTotLen);
plgi=pLgi;
for(UINT n=0;plgi&&n<nLen;++n,++plgi)
{
if(wcscmp(plgi->lgrui0_name,wszClassGroupName)==0)
nUserStatus=0;
}
if(pLgi)
NetApiBufferFree(pLgi);
}
}
lgmi.lgrmi3_domainandname=wszUserName;
if(nGroupStatus&&nUserStatus&&NetLocalGroupAddMembers(NULL,wszClassGroupName,3,(LPBYTE)&lgmi,1)!=NERR_Success)
{
wsprintf(szShowTips,"将学生用户%s添加至组%s失败!",szUserName,szClassGroupName);
AfxMessageBox(szShowTips);
}
}
}
if(g_bIsContinue)
AfxMessageBox("学生用户添加完毕!");
::SendMessage(g_hExitWnd,WM_COMMAND,WM_DESTROY,0);
}
void ChangeUsersPasswords(LPVOID pParam)
{
USER_INFO_3 *pUI=NULL;
DWORD dwError = 0;
NET_API_STATUS nStatus;
char szUserName[32];
char szPassword[32];
char szShowTips[96];
WCHAR wszUserName[32];
WCHAR wszPassword[32];
for(UINT nClass=g_nClassFrom;nClass<=g_nClassTo&&g_bIsContinue;++nClass)
{
for(UINT nNumber=g_nNumFrom;nNumber<=g_nNumTo&&g_bIsContinue;++nNumber)
{
pUI=NULL;
if(nClass<10)
{
if(nNumber<10)
wsprintf(szUserName,"%s%s0%d0%d",g_szPrefix,g_szYear,nClass,nNumber);
else
wsprintf(szUserName,"%s%s0%d%d",g_szPrefix,g_szYear,nClass,nNumber);
}
else
{
if(nNumber<10)
wsprintf(szUserName,"%s%s%d0%d",g_szPrefix,g_szYear,nClass,nNumber);
else
wsprintf(szUserName,"%s%s%d%d",g_szPrefix,g_szYear,nClass,nNumber);
}
if(g_nPasOption)
strcpy(szPassword,szUserName);
else
*szPassword='\0';
wsprintf(szShowTips," %s",szUserName);
::SendMessage(g_hShowWnd,WM_SETTEXT,0,(LPARAM)(LPCTSTR)szShowTips);
MultiByteToWideChar(CP_ACP, 0, szUserName, -1, wszUserName, 32);
MultiByteToWideChar(CP_ACP, 0, szPassword, -1, wszPassword, 32);
nStatus=NetUserGetInfo(NULL,wszUserName,3,(LPBYTE*)&pUI);
if(nStatus==NERR_Success)
{
pUI->usri3_flags = UF_NORMAL_ACCOUNT|UF_DONT_EXPIRE_PASSWD;
pUI->usri3_password=wszPassword;
pUI->usri3_password_expired=FALSE;
nStatus=NetUserSetInfo(NULL,wszUserName,3,(LPBYTE)pUI,&dwError);
if(nStatus!=NERR_Success)
{
wsprintf(szShowTips,"设置%s失败!",szUserName);
AfxMessageBox(szShowTips);
}
}
NetApiBufferFree(pUI);
}
}
if(g_bIsContinue)
AfxMessageBox("学生用户密码更改完毕!");
::SendMessage(g_hExitWnd,WM_COMMAND,WM_DESTROY,0);
}
void AllUsersPasExpire(LPVOID pParam)
{
USER_INFO_3 *pUI=NULL;
DWORD dwError = 0;
NET_API_STATUS nStatus;
char szUserName[32];
char szShowTips[96];
WCHAR wszUserName[32];
for(UINT nClass=g_nClassFrom;nClass<=g_nClassTo&&g_bIsContinue;++nClass)
{
for(UINT nNumber=g_nNumFrom;nNumber<=g_nNumTo&&g_bIsContinue;++nNumber)
{
pUI=NULL;
if(nClass<10)
{
if(nNumber<10)
wsprintf(szUserName,"%s%s0%d0%d",g_szPrefix,g_szYear,nClass,nNumber);
else
wsprintf(szUserName,"%s%s0%d%d",g_szPrefix,g_szYear,nClass,nNumber);
}
else
{
if(nNumber<10)
wsprintf(szUserName,"%s%s%d0%d",g_szPrefix,g_szYear,nClass,nNumber);
else
wsprintf(szUserName,"%s%s%d%d",g_szPrefix,g_szYear,nClass,nNumber);
}
wsprintf(szShowTips," %s",szUserName);
::SendMessage(g_hShowWnd,WM_SETTEXT,0,(LPARAM)(LPCTSTR)szShowTips);
MultiByteToWideChar(CP_ACP, 0, szUserName, -1, wszUserName, 32);
nStatus=NetUserGetInfo(NULL,wszUserName,3,(LPBYTE*)&pUI);
if(nStatus==NERR_Success)
{
pUI->usri3_flags = UF_NORMAL_ACCOUNT;
pUI->usri3_password_expired=TRUE;
nStatus=NetUserSetInfo(NULL,wszUserName,3,(LPBYTE)pUI,&dwError);
if(nStatus!=NERR_Success)
{
wsprintf(szShowTips,"设置%s失败!",szUserName);
AfxMessageBox(szShowTips);
}
}
NetApiBufferFree(pUI);
}
}
if(g_bIsContinue)
AfxMessageBox("设置学生用户密码过期完毕!");
::SendMessage(g_hExitWnd,WM_COMMAND,WM_DESTROY,0);
}
void DeleteUsers(LPVOID pParam)
{
USER_INFO_0 *pUI=NULL;
LOCALGROUP_INFO_1 *pLGI=NULL;
DWORD dwError = 0;
NET_API_STATUS nStatus;
char szClassGroupName[32];
char szUserName[32];
char szShowTips[96];
WCHAR wszClassGroupName[32];
WCHAR wszUserName[32];
for(UINT nClass=g_nClassFrom;nClass<=g_nClassTo&&g_bIsContinue;++nClass)
{
pLGI=NULL;
wsprintf(szClassGroupName,"%s%s级%d班",g_szPrefix,g_szYear,nClass);
MultiByteToWideChar(CP_ACP, 0, szClassGroupName, -1, wszClassGroupName, 32);
nStatus=NetLocalGroupGetInfo(NULL,wszClassGroupName,1,(LPBYTE*)&pLGI);
NetApiBufferFree(pLGI);
if(nStatus==NERR_Success)
{
wsprintf(szShowTips," %s",szClassGroupName);
::SendMessage(g_hShowWnd,WM_SETTEXT,0,(LPARAM)(LPCTSTR)szShowTips);
nStatus=NetLocalGroupDel(NULL,wszClassGroupName);
}
if(nStatus!=NERR_Success&&nStatus!=NERR_GroupNotFound)
{
wsprintf(szShowTips,"删除学生用户组%s失败!",szClassGroupName);
AfxMessageBox(szShowTips);
}
for(UINT nNumber=g_nNumFrom;nNumber<=g_nNumTo&&g_bIsContinue;++nNumber)
{
pUI=NULL;
if(nClass<10)
{
if(nNumber<10)
wsprintf(szUserName,"%s%s0%d0%d",g_szPrefix,g_szYear,nClass,nNumber);
else
wsprintf(szUserName,"%s%s0%d%d",g_szPrefix,g_szYear,nClass,nNumber);
}
else
{
if(nNumber<10)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -