⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 processdlg.cpp

📁 最适合在学校成批地建立删除学生用户或学生文件夹
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// 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 + -